Go使用struct基于面向对象实现学生管理系统(CURD)

LLj-github · · 936 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

Go使用struct基于面向对象实现学生管理系统(CURD) ``` package main import ( "fmt" "os" ) /* 写一个系统能够查看、新增、删除、学生 有一个物件: 1. 它保存了一些数据 ---> 结构体的字段 2. 他有三个功能 ---> 结构体的方法 :面向对象编程语言的思维 */ //声明一个全局学生管理者变量 var sm stuMgr //学生信息的结构体 type Students struct{ id uint8 name string } //学生管理的结构体 type stuMgr struct { allStudent map[uint8]*Students } //使用构造函数 func newStudents(i uint8,n string) *Students{ return &Students{ id: i, name: n, } } //方法和接受者 func(s stuMgr)QueryAllStudents(){ for k,v:=range s.allStudent{ fmt.Printf("学生编号:%d 学生信息:%s\n",k,v.name) } fmt.Println("查询学生信息成功!") } func(s stuMgr)AddStudents(){ var ( ii uint8 nn string ) fmt.Printf("请输入添加的学生编号:") fmt.Scan(&ii) //判断输入的学生编号是否存在学生管理结构体中 for k,_:=range s.allStudent{ fmt.Printf("for添加打印学生编号%d\n",k) if k == ii{ fmt.Printf("输入的学生编号%d已存在\n!",ii) return } } fmt.Printf("请输入添加的学生姓名:") fmt.Scan(&nn) //将输入的学生信息添加到stuMgr结构体中,strMgr结构体中定义的是map[uint8]*Students,需要初始化map中的*Students结构体,并将输入的信息保存在*Students结构体中 newS:=&Students{ id:ii, name:nn, } //目前输入的信息保存在*Students结构体中,没有保存在stuMgr结构体中 fmt.Printf("类型是:%T\n",s.allStudent) s.allStudent[newS.id]=newS //s.allStudent是map fmt.Printf("添加学生成功!学生编号:%v 学生姓名:%v\n",newS.id,newS.name) } func(s stuMgr)DeleteStudents(){ var ( ii uint8 ) fmt.Printf("请输入删除的学生编号:") fmt.Scan(&ii) //判断输入的学生编号是否存在学生管理结构体中 _,ok:=s.allStudent[ii] if !ok{ fmt.Println("输入的学生编号不存在!,无法删除!") return } fmt.Printf("学生姓名%s\n",s.allStudent[ii].name) delete(s.allStudent,ii) fmt.Printf("删除成功!学生编号%d\n",ii) } func(s stuMgr)UpdateStudents(){ //从stuMgr结构体中获取所有的学生信息 fmt.Println("修改!!!") for k,v :=range s.allStudent{ fmt.Printf("学生编号:%d 学生名字:%s\n",k,v.name) } var ( ii uint8 nn string ) fmt.Printf("请输入需修改的学生编号:") fmt.Scan(&ii) //判断输入的学生编号是否存在学生管理结构体中 _,ok:=s.allStudent[ii] if !ok{ fmt.Println("输入的学生编号不存在!,无法修改!") return } fmt.Printf("输入的学生编号%d对应的学生姓名%s\n",ii,s.allStudent[ii].name) fmt.Printf("请输入需修改的学生姓名:") fmt.Scan(&nn) //将输入修改的学生信息添加到stuMgr结构体中,strMgr结构体中定义的是map[uint8]*Students,需要初始化map中的*Students结构体,并将输入修改的信息保存在*Students结构体中 /* upnew:=&Students{ id:ii, name: nn, } s.allStudent[upnew.id]=upnew */ //通过输入的学生编号查到stuMgr结构体定义的map的值,map的值是*Strudents结构体 stustruct:=s.allStudent[ii] //获取*Strudents结构体中属性重新赋值 stustruct.name=nn //将*Strudents结构体赋值到stuMgr结构体定义的map上 s.allStudent[ii]=stustruct fmt.Printf("修改学生信息成功!修改后的学生姓名是%s\n",stustruct.name) } func ment(){ fmt.Println("学生管理系统!") fmt.Println(` 1. 查看所有学生 2. 新增学生 3. 删除学生 4. 修改学生 5. 退出 `) fmt.Println("请输入编号进行操作:") var choice int8 fmt.Scan(&choice) fmt.Printf("输入的编号是:%d\n",choice) switch choice { case 1: sm.QueryAllStudents() case 2: sm.AddStudents() case 3: sm.DeleteStudents() case 4: sm.UpdateStudents() case 5: os.Exit(1) default: fmt.Println("输入不合法!") } } func main() { //一个系统只有一个全局管理者,如果放到for循环里面每次启动就创建一个 sm=stuMgr{ allStudent:make(map[uint8]*Students,100), } for { ment() } } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

936 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传