Go 结构体版学生管理系统
文章目录
代码:
建立两个文件,其中一个文件是 test.go
文件,用于存放主函数,另一个是 student.go
文件,单独的把学生管理的功能分离开
package main
import (
"fmt"
"os"
)
// 学生管理系统
// 菜单函数
func showMenu() {
fmt.Println("welcomm sms!")
fmt.Println(`
1. 查看所有的学生
2. 添加学生
3. 修改学生
4. 删除学生
5. 退出
`)
}
var smr studentMgr
func main() {
// 调用声明的全局对象
smr = studentMgr{
allStudent: make(map[int]student),
}
for { // 放到无限循环中
showMenu()
fmt.Println("请输入要做的事情")
var choice int
fmt.Scanln(&choice)
switch choice {
case 1:
smr.showStudent()
case 2:
smr.addStudent()
case 3:
smr.editStudent()
case 4:
smr.deleteStudent()
default:
fmt.Println("滚~~")
os.Exit(1)
}
}
}
第二个文件
package main
import (
"fmt"
)
// 学生管理系统
// 有一个字段
// 1.它保存了一些数据-->结构体的字段
// 2.他有三个功能--> 结构体的方法
type student struct {
id int
name string
}
// 造一个学生的管理者
type studentMgr struct {
allStudent map[int]student //建造一个学生管理者
}
// 查看学生
func (s studentMgr) showStudent() {
for _, v := range s.allStudent { // 使用for 循环,把map 里面的所有学生,一个个的拎出来
fmt.Println(v.id, v.name) // 把学生的名字还有id打印出来
}
}
// 添加学生
func (s studentMgr) addStudent() {
// 创建一个新学生
var (
stuId int
stuName string
)
//获取用户输入
fmt.Println("请输入学号")
fmt.Scanln(&stuId)
fmt.Println("请输入姓名")
fmt.Scanln(&stuName)
newstu := student{ // 名字
id: stuId,
name: stuName,
}
// 2. 把这个新学生放到 s.allStudent这个map 里面
s.allStudent[newstu.id] = newstu // 这样就能添加上了
}
// 修改学生
func (s studentMgr) editStudent() {
// 1. 获取用户输入的学号
// 2. 展示该学号对应的学生信息,如果没有提示查无此人
// 3. 请输入修改后的学生名
// 4. 更新学生的姓名
fmt.Println("请输入学生的学号")
var studentId int
fmt.Scanln(&studentId)
v1, ok := s.allStudent[studentId] // 直接使用 map 的key 就能取值
if !ok {
fmt.Println("查无此人")
return
}
fmt.Println("学生的名字", v1.name)
fmt.Println("请输入学生的新名字")
var newName string
fmt.Scanln(&newName)
v1.name = newName // 直接进行更改
s.allStudent[studentId] = v1 // 再更改到map 里
}
// 删除学生
func (s studentMgr) deleteStudent() {
// 1. 请用户输入要删除学生的 id
// 2. 去 map 找有没有这个学生,如果没有就打印查无此人
// 3. 有的话就删除
fmt.Println("请输入你要删除学生的学号")
var studID int
fmt.Scanln(&studID) // 要删除学生的ID
_, ok := s.allStudent[studID]
if !ok {
fmt.Println("没有这么一个人")
return
}
delete(s.allStudent, studID) // 删除的时候,只需要确定删除的集合,还有key 就可以了
fmt.Println("删除成功")
}
最后实现的结果如下:
welcomm sms!
1. 查看所有的学生
2. 添加学生
3. 修改学生
4. 删除学生
5. 退出
请输入要做的事情
1
welcomm sms!
1. 查看所有的学生
2. 添加学生
3. 修改学生
4. 删除学生
5. 退出
请输入要做的事情
2
请输入学号
10286
请输入姓名
zhao
welcomm sms!
1. 查看所有的学生
2. 添加学生
3. 修改学生
4. 删除学生
5. 退出
请输入要做的事情
2
请输入学号
10087
请输入姓名
peng
welcomm sms!
1. 查看所有的学生
2. 添加学生
3. 修改学生
4. 删除学生
5. 退出
请输入要做的事情
1
10286 zhao
10087 peng
welcomm sms!
1. 查看所有的学生
2. 添加学生
3. 修改学生
4. 删除学生
5. 退出
请输入要做的事情
4
请输入你要删除学生的学号
10286
删除成功
welcomm sms!
1. 查看所有的学生
2. 添加学生
3. 修改学生
4. 删除学生
5. 退出
请输入要做的事情
1
10087 peng
welcomm sms!
1. 查看所有的学生
2. 添加学生
3. 修改学生
4. 删除学生
5. 退出
请输入要做的事情
2
请输入学号
创建结构体的三种方式
package main
import (
"fmt"
)
type student struct { // 先声明一个结构体
id int
name string
}
func newStudent(id int, name string) student {
return student{
id: id,
name: name,
}
}
func main() {
var p1 student
p1.id = 123
p1.name = "zhao"
fmt.Println("p1的值是:", p1)
p2 := student{
id: 234,
name: "wang",
}
fmt.Println("p2的值是", p2)
// 使用构造函数
p3 := newStudent(158, "Li")
fmt.Println("p3的值是:", p3)
}