需求
实现对学生的增、删、改、查操作。
main.go
package main
import (
"fmt"
"os"
)
// 学生管理系统
var smr studentMgr // 声明一个全局变量——学生管理对象
func showMenu() {
fmt.Println("Welcom sms!")
fmt.Println(`
1. 查看所有学生
2. 添加学生
3. 修改学生
4. 删除学生
5. 退出
`)
}
func main() {
smr = studentMgr{
allStundent: make(map[int64]student, 100),
}
showMenu()
for {
// 等等用户输入
fmt.Print("请输入序号:")
var choice int
fmt.Scanln(&choice)
fmt.Println("你输入的是:", choice)
switch choice {
case 1:
smr.showStundent()
case 2:
smr.addStundent()
case 3:
smr.editStundent()
case 4:
smr.deleteStundent()
case 5:
os.Exit(1)
default:
fmt.Println("ByeBye")
}
}
}
student_mgr.go
package main
import "fmt"
// 有一个对象:
// 1. 它保存了一些数据 ---> 结构体的字段
// 2. 它有三个功能 ---> 结构体的方法
type student struct {
id int64
name string
}
// 造一个学生管理者
type studentMgr struct {
allStundent map[int64]student
}
// 查看学生
func (s studentMgr) showStundent() {
// 从 s.allStundent 这个 map 中把所有学生逐个拎出来
for _, stu := range smr.allStundent { // stu是具体每个学生
fmt.Printf("学号:%d 姓名:%s\n", stu.id, stu.name)
}
}
// 增加学生
func (s studentMgr) addStundent() {
// 1. 根据用户输入的内容,创建一个新的学生
var (
stuID int64
stuName string
)
// 获取用户输入
fmt.Print("请输入学号:")
fmt.Scanln(&stuID)
fmt.Print("请输入姓名:")
fmt.Scanln(&stuName)
// 根据用户输入创建结构体对象
newStu := student{
id: stuID,
name: stuName,
}
// 2. 把新学生放到 s.allStundent 这个map中
s.allStundent[newStu.id] = newStu
fmt.Println("添加成功!")
}
// 修改学生
func (s studentMgr) editStundent() {
// 1. 获取用户输入的学号
fmt.Print("请输入学号:")
var stuID int64
fmt.Scanln(&stuID)
// 2. 展示学号对应的学生信息,如果没有,提示查无此人
stuObj, ok := s.allStundent[stuID]
if !ok {
fmt.Println("查无此人")
return
}
fmt.Printf("要修改的学生信息如下:学号:%d 姓名:%s\n", stuObj.id, stuObj.name)
// 3. 请输入修改后的学生名
fmt.Print("请输入学生的新名字:")
var newName string
fmt.Scanln(&newName)
// 4. 更新学生名
stuObj.name = newName
s.allStundent[stuID] = stuObj // 更新map中的学生信息
fmt.Println(stuObj)
fmt.Println("修改成功!")
}
// 删除学生
func (s studentMgr) deleteStundent() {
// 1. 请用户输入要删除的学生id
fmt.Print("请输入要删除的学生学号:")
var stuID int64
fmt.Scanln(&stuID)
// 2. 去 map 中查找改学生:如果没有,提示查无此人
stuObj, ok := s.allStundent[stuID]
if !ok {
fmt.Println("查无此人")
return
}
fmt.Printf("要修改的学生信息如下:学号:%d 姓名:%s\n", stuObj.id, stuObj.name)
// 3. 如果存在,删除该学生
delete(s.allStundent, stuID)
fmt.Println("删除成功!")
}