Golang项目之函数版学生管理系统
前言
学习第3天,基于函数的方式编写小项目:学生管理系统
代码
package main
import (
"fmt"
"os"
)
/*
函数版学生管理系统
写一个系统能够查看所有的学生/新增学生/删除学生
*/
var (
allStudent map[int64]*student // 变量声明
)
type student struct{
id int64
name string
}
// newStudent是一个student类型的构造函数
func newStudent(id int64,name string)*student{
return &student{
id: id,
name: name,
}
}
func showAllStudent(){
if len(allStudent) != 0{
// 如果map不为空,把所有学生都打印出来
for k,v := range allStudent{
fmt.Printf("学号:%d 姓名:%s\n",k,v.name)
}
} else{
// 否则,提示学生信息为空
fmt.Println("msg:学生信息为空")
}
}
func addStudent(){
// 想allStudent中添加一个新的学生
// 1.创建一个新学生
// 1.1 获取用户输入
var (
id int64
name string
)
fmt.Print("请输入学生的学号:")
fmt.Scanln(&id)
fmt.Print("请输入学生的姓名:")
fmt.Scanln(&name)
// 1.2 判断学生是否存在
if _,ok := allStudent[id];! ok{
// 学生不存在,则添加
// 1.3造学生(调用student的构造函数)
newStu := newStudent(id,name)
// 2.追加到allStudent这个map中
allStudent[id] = newStu
}else{
// 学生存在,则提示
fmt.Println("msg:添加的学生已存在")
}
}
func deleteStudent(){
// 1.请用户输入要删除的学生的序号
var (
deleteId int64
)
fmt.Print("请输入学生的学号:")
fmt.Scanln(&deleteId)
// 2.判断学生是否存在
if _,ok := allStudent[deleteId];!ok{
fmt.Println("msg:学生不存在")
}else{
// 2.去allStudent这个map中根据学号删除对应的键值对
delete(allStudent,deleteId)
}
}
func main(){
allStudent = make(map[int64]*student, 48) // 初始化(开辟内存空间)
for {
// 1.打印菜单
fmt.Println("欢迎光临学生管理系统!")
fmt.Println(`
1.查看所有学生
2.新增学生
3.删除学生
4.退出
`)
fmt.Print("请输入编号:")
// 2.等待用户选择下一步要做什么
var choice int
fmt.Scanln(&choice)
fmt.Printf("你选择了> %d <这个选项!\n",choice)
// 3.执行对应的函数
switch choice {
case 1:
fmt.Println("------学生信息-----")
showAllStudent()
fmt.Println("--------end-------")
case 2:
addStudent()
case 3:
deleteStudent()
case 4:
os.Exit(1)
default:
fmt.Println("输入编号不存在")
}
}
}