Golang项目之结构体版学生管理系统
Posted jasonminghao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang项目之结构体版学生管理系统相关的知识,希望对你有一定的参考价值。
前言
学习第4天,基于结构体的方式对函数版本重构编写小项目:学生管理系统
代码
package main
import (
"fmt"
"os"
)
// 菜单系统(将菜单系统封装到函数中)
func showMenu(){
fmt.Println("欢迎光临学生管理系统")
fmt.Println(`
1.查看所有学生
2.新增学生
3.删除学生
4.退出
`)
}
// 造一个存储学生数据的类型
type student struct{
id int64
name string
}
// newStudent是一个student类型的构造函数
func newStudent(id int64,name string)*student{
return &student{
id:id,
name:name,
}
}
// 造一个学生管理者(将学生数据存储到该类型中)
type sutdentManager struct{
store_student map[int64]*student
}
func (s sutdentManager)showAllStudent(){
// 显示所有学生信息(从学生管理者:sutdentManager存储的变量store_student获取到学生数据数据)
for _,stu := range s.store_student {
fmt.Printf("学号:%d 姓名:%s
",stu.id,stu.name)
}
}
func (s sutdentManager)addStudent(){
// 添加学生
// 1.请输入学生的id和姓名
var (
id int64
name string
)
fmt.Print("请输入学生id:")
fmt.Scanln(&id)
fmt.Print("请输入学生姓名:")
fmt.Scanln(&name)
// 2.判断学生是否存在
if _,ok := s.store_student[id]; ! ok {
newStu := newStudent(id,name)
s.store_student[id] = newStu
fmt.Printf("学生信息 ID:%v、姓名:%v 添加成功
",id,name)
} else {
fmt.Printf("学生信息 ID:%v、姓名:%v 已存在,请勿重复添加
",id,name)
}
// 3.将学生信息添加到信息存储系统(store_student)
}
func (s sutdentManager)deleteStudent(){
// 删除学生
// 1.判断学生是否存在
var id int64
fmt.Print("请输入学生id:")
fmt.Scanln(&id)
// 2.根据学生id删除对应的学生信息
if _,ok := s.store_student[id]; ! ok {
// 学生id不存在
fmt.Printf("学生信息 ID:%v 不存在,删除失败
",id)
}else{
// 学生id存在,删除成功
delete(s.store_student,id)
fmt.Printf("学生信息 ID:%v 存在,删除成功
",id)
}
}
func main(){
// 初始化学生数据存储变量(开辟内存空间)
stuManger := sutdentManager{
store_student: make(map[int64]*student,200),
}
for {
// 1. 打印选项菜单
showMenu()
// 2.等待用户输入选项
var choice int
fmt.Print("选项:")
fmt.Scanln(&choice)
fmt.Printf("你选择了:%d选项
",choice)
// 3.执行对应的方法
switch choice {
case 1:
stuManger.showAllStudent()
case 2:
stuManger.addStudent()
case 3:
stuManger.deleteStudent()
case 4:
os.Exit(1)
default:
fmt.Println("输入的选项不存在")
}
}
}
以上是关于Golang项目之结构体版学生管理系统的主要内容,如果未能解决你的问题,请参考以下文章
ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 hihocoder #1586 : Minimum-区间查询最值求区间两数最小乘积+单点更新-线段树(结构体版)