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()
}
}
```
有疑问加站长微信联系(非本文作者)