练习
需求:实现查看、新增、删除学生等功能。
函数版
package main
import (
"fmt"
"os"
)
/*
函数版学生管理系统
需求:实现查看、新增、删除学生功能
*/
type student struct {
id int64
name string
}
var (
allStu map[int64]*student // 变量声明
)
func newStudent(id int64, name string) *student {
return &student{
id: id,
name: name,
}
}
func showStu() {
// 打印所有学生清单
for k, v := range allStu {
fmt.Printf("学号:%d 姓名:%v\n", k, v.name)
}
}
func addStu() {
// 向stu中添加一个学生
// 1. 创建一个新学生
// 1.1 获取学生信息
var (
id int64
name string
)
fmt.Print("请输入学生学号:")
fmt.Scanln(&id)
fmt.Print("请输入学生姓名:")
fmt.Scanln(&name)
// 1.2 造学生(调用构造函数)
newStu := newStudent(id, name)
// 2. 追加到allStu
allStu[id] = newStu
showStu()
}
func delStu() {
// 1. 请用户输入要删除学生的学号
var (
delId int64
)
fmt.Print("请输入学生学号:")
fmt.Scanln(&delId)
// 2. 去allStu这个map中根据学号删除对应的键值对
delete(allStu, delId)
showStu()
}
func main() {
allStu = make(map[int64]*student, 48) // 初始化(开辟内存空间)
// 1. 打印功能菜单
fmt.Println("Welcome!")
fmt.Println(`
1. 查看所有学生
2. 新增学生
3. 删除学生
4. 退出
`)
for {
fmt.Print("请输入操作所对应编号:")
// 2. 用户选择功能
var choice int // 找一个变量接收用户选择
fmt.Scanln(&choice) // 等等用户输入
fmt.Printf("您的选择是%d!\n", choice)
// 3. 执行对应函数
switch choice {
case 1:
showStu()
case 2:
addStu()
case 3:
delStu()
case 4:
os.Exit(1) // 退出
default:
fmt.Scanln("waiting...")
}
}
}