package main
import (
"fmt"
"os"
)
var (
sms stuController
)
// 学生信息的管理者
type stuController struct {
allStudentMap map[string]student
}
// 学生结构体
type student struct {
id, name string
}
// 学生的构造函数
func newStudent(id, name string) student {
return student{
id: id,
name: name,
}
}
// 根据学号查看学生的方法
func (sms stuController) selectStuById(id string) {
stu, ok := sms.allStudentMap[id]
if ok {
fmt.Printf("学号: %s , 名字: %s\n", stu.id, stu.name)
} else {
fmt.Printf("没有发现有学号为【%s】的学生信息", id)
}
}
// 查看所有学生的方法
func (sms stuController) selectAll() {
if len(sms.allStudentMap) == 0 {
fmt.Println("暂时没有学生~")
return
}
for _, stu := range sms.allStudentMap {
sms.selectStuById(stu.id)
}
}
/**
添加学生的方法
*/
func (sms stuController) addStu() {
repeatStuId:
fmt.Print("请输入学生学号: ")
var id string
fmt.Scanln(&id)
_, ok := sms.allStudentMap[id]
if ok {
fmt.Printf("检测到输入的学号【%s】已经存在,请重新输入\n", id)
goto repeatStuId
}
fmt.Print("请输入学生名字: ")
var name string
fmt.Scanln(&name)
sms.allStudentMap[id] = newStudent(id, name)
fmt.Println("添加成功")
sms.selectStuById(id)
}
/**
删除学生的方法
*/
func (sms stuController) deleteStu() {
fmt.Println("==========================")
sms.selectAll()
fmt.Println("==========================")
if len(sms.allStudentMap) == 0 {
fmt.Println("没有学生,无法进行删除。")
return
}
deleteStuLabel:
fmt.Print("请输入需要删除的学号: ")
var id string
fmt.Scanln(&id)
_, ok := sms.allStudentMap[id]
if ok {
delete(sms.allStudentMap, id)
fmt.Println("删除成功")
sms.selectAll()
} else {
fmt.Printf("不存在此学号为【%s】的学生,请重新输入\n", id)
goto deleteStuLabel
}
}
/**
修改学生的方法
*/
func (sms stuController) updateStu() {
fmt.Println("==========================")
sms.selectAll()
fmt.Println("==========================")
if len(sms.allStudentMap) == 0 {
fmt.Println("没有学生,无法进行修改。")
return
}
updateStuLabel:
fmt.Print("请输入需要修改信息的学号: ")
var id string
fmt.Scanln(&id)
stu, ok := sms.allStudentMap[id]
if ok {
fmt.Printf("现在的名字为:%s\n", stu.name)
fmt.Print("请输入新的名字:")
var name string
fmt.Scanln(&name)
stu.name = name
sms.allStudentMap[id] = stu
fmt.Println("修改成功。")
sms.selectStuById(stu.id)
} else {
fmt.Printf("不存在此学号为【%s】的学生,请重新输入\n", id)
goto updateStuLabel
}
}
// 菜单函数
func menu() {
fmt.Println("==============Go版本的学生管理系统(结构体版)==============")
fmt.Println("\t\t\t\t1.查看所有学生")
fmt.Println("\t\t\t\t2.新增学生")
fmt.Println("\t\t\t\t3.删除学生")
fmt.Println("\t\t\t\t4.修改学生")
fmt.Println("\t\t\t\t5.退出")
fmt.Println("=====================================================")
}
// 指令相关的函数
func instruction() {
fmt.Print("请输入指令编号:")
var choice int
fmt.Scanln(&choice)
fmt.Printf("你选择了【%d】选项\n", choice)
switch choice {
case 1:
sms.selectAll()
case 2:
sms.addStu()
case 3:
sms.deleteStu()
case 4:
sms.updateStu()
case 5:
os.Exit(1) // 退出
default:
fmt.Printf("无效的指令: 【%d】\n", choice)
}
}
func main() {
// 启动时,初始化管理者
sms = stuController{
allStudentMap: make(map[string]student, 50),
}
for {
menu()
instruction()
}
}
效果如下: