构建一个简单的学生信息管理系统,使用Go语言来实现。本项目将包括学生信息的添加、修改、删除和查看功能。
项目概述
我们将创建一个名为Database
的结构体,该结构体包含一个Allstudent
字段,用于存储学生信息。学生信息将使用student_list
结构体来表示,包括学号、姓名、年龄和学校。系统将提供以下功能:
- 添加学生信息
- 修改学生信息
- 删除学生信息
- 显示全部学生信息
- 退出程序
数据结构定义
首先,我们定义了两个结构体,分别是Database
和student_list
,如下所示:
type Database struct {
Allstudent map[int]student_list
}
type student_list struct {
name string
school string
id int
age int
}
Database
结构体包含一个Allstudent
字段,用于存储学生信息,其中键是学号(int
类型),值是student_list
结构体。
添加学生信息
接下来,我们定义了Add_Student
方法,用于向学生信息数据库中添加学生。在该方法中,我们首先获取用户输入的学号,并检查该学号是否已经存在于数据库中。如果学号已存在,我们将显示学生信息并提醒用户学生已被录入。否则,我们将提示用户输入学生的姓名、年龄和学校,并将学生信息添加到数据库中。
func (d *Database) Add_Student() {
// 获取用户输入的学号和检查是否已存在
var addid int
var addage int
var addname string
var addschool string
fmt.Print("请输入你要录入的学生信息:\n")
fmt.Print("1.学号:")
fmt.Scan(&addid)
stuinfo, exist := d.Allstudent[addid]
if exist {
fmt.Print("该学生已被录入\n")
fmt.Printf("学号:%d 姓名:%s 年龄:%d 学校:%s\n", stuinfo.id, stuinfo.name, stuinfo.age, stuinfo.school)
return
} else {
fmt.Print("2.姓名:")
fmt.Scan(&addname)
fmt.Print("3.年龄:")
fmt.Scan(&addage)
fmt.Print("4.学校:")
fmt.Scan(&addschool)
d.Allstudent[addid] = student_list{addname, addschool, addid, addage}
fmt.Print("录入成功,该学生信息为:\n")
fmt.Printf("学号:%d 姓名:%s 年龄:%d 学校:%s\n", addid, addname, addage, addschool)
}
}
修改学生信息
我们还定义了Modify_Student
方法,用于修改学生的信息。用户需要输入要修改的学生的学号,系统将检查该学号是否存在于数据库中。如果存在,系统将显示该学生的信息,并允许用户输入新的姓名、年龄和学校信息,然后更新数据库中的信息。
func (d *Database) Modify_Student() {
// 获取用户输入的要修改的学号
var orid int
var modid int
var modage int
var modname string
var modschool string
fmt.Print("请输入你要修改学生的学号:\n")
fmt.Scan(&orid)
stuinfo, exist := d.Allstudent[orid]
if exist {
fmt.Printf("学号:%d 姓名:%s 年龄:%d 学校:%s\n", stuinfo.id, stuinfo.name, stuinfo.age, stuinfo.school)
fmt.Print("请输入学生修改后的姓名:")
fmt.Scan(&modname)
fmt.Print("请输入学生修改后的年龄:")
fmt.Scan(&modage)
fmt.Print("请输入学生修改后的学校:")
fmt.Scan(&modschool)
fmt.Print("请输入学生修改后的学号")
fmt.Scan(&modid)
delete(d.Allstudent, orid)
d.Allstudent[modid] = student_list{
modname,
modschool,
modid,
modage,
}
fmt.Print("信息修改成功,修改后的信息为:\n")
fmt.Printf("学号:%d 姓名:%s 年龄:%d 学校:%s\n", modid, modname, modage, modschool)
} else {
fmt.Print("该学生信息不存在\n")
}
}
删除学生信息
我们的系统还提供了Delete_stu
方法,用于删除学生信息。用户需要输入要删除的学生的学号,系统将检查该学号是否存在于数据库中。如果存在,系统将删除该学生的信息。
func (d *Database) Delete_stu() {
// 获取用户输入的要删除的学号
var delid int
fmt.Print("请输入你要修改学生的学号:\n")
fmt.Scan(&delid)
stuinfo, exist := d.Allstudent[delid]
if exist {
fmt.Printf("已删除学生信息:%v\n", stuinfo)
delete(d.Allstudent, delid)
} else {
fmt.Printf("该学生信息不存在\n")
}
}
显示全部学生信息
最后,我们定义了Show_Info
方法,用于显示数据库中的所有学生信息。
func (d *Database) Show_Info() {
for _, stuinfo := range d.Allstudent {
fmt.Printf("学号:%d 姓名:%s 年龄:%d 学校:%s\n", stuinfo.id, stuinfo.name, stuinfo.age, stuinfo.school)
}
}
主函数
在main
函数中,我们创建了一个Database
对象,并初始化了一个包含学生信息的map。然后,我们使用一个无限循环来显示用户菜单和接收用户输入,根据用户的选择执行相应的操作。当用户选择退出时,循环结束,程序退出。
func main() {
// 创建学生信息数据库
student_data := Database{}
student_data.Allstudent = make(map[int]student_list, 20)
for {
var choice int
fmt.Printf("菜单:\n 1. 添加学生信息\n")
fmt.Printf(" 2. 修改学生信息\n")
fmt.Printf(" 3. 删除学生信息\n")
fmt.Printf(" 4. 显示全部学生信息\n")
fmt.Printf(" 5. 退出\n")
fmt.Printf("请输入操作对应的数字:\n")
fmt.Scan(&choice)
// 根据用户选择执行操作
switch choice {
case 1:
student_data.Add_Student()
case 2:
student_data.Modify_Student()
case 3:
student_data.Delete_stu()
case 4:
student_data.Show_Info()
case 5:
fmt.Println("程序已退出")
return
default:
fmt.Println("请输入1~5之间的数字")
}
}
}
总结
该学生信息管理系统使用Go语言实现了添加、修改、删除和查看学生信息的功能。这个项目可以帮助你熟悉Go语言中的结构体、map数据结构和命令行输入。你可以根据这个项目继续扩展和改进,添加更多功能和验证机制,以适应不同的需求。希望这个项目能帮助你更好地理解和使用Go语言。如果你有任何问题或建议,请随时留言。
完整代码附上:
package main
import (
"fmt"
)
type Database struct {
Allstudent map[int]student_list
}
type student_list struct {
name string
school string
id int
age int
}
func (d *Database) Add_Student() {
var addid int
var addage int
var addname string
var addschool string
fmt.Print("请输入你要录入的学生信息:\n")
fmt.Print("1.学号:")
fmt.Scan(&addid)
stuinfo, exist := d.Allstudent[addid]
if exist{
fmt.Print("该学生已被录入\n")
fmt.Printf("学号:%d 姓名:%s 年龄:%d 学校:%s\n", stuinfo.id, stuinfo.name, stuinfo.age, stuinfo.school)
return
}else{
fmt.Print("2.姓名:")
fmt.Scan(&addname)
fmt.Print("3.年龄:")
fmt.Scan(&addage)
fmt.Print("4.学校:")
fmt.Scan(&addschool)
d.Allstudent[addid] = student_list{addname, addschool, addid, addage}
fmt.Print("录入成功,该学生信息为:\n")
fmt.Printf("学号:%d 姓名:%s 年龄:%d 学校:%s\n", addid, addname, addage, addschool)
}
}
func (d *Database) Modify_Student(){
var orid int
var modid int
var modage int
var modname string
var modschool string
fmt.Print("请输入你要修改学生的学号:\n")
fmt.Scan(&orid)
stuinfo, exist := d.Allstudent[orid]
if exist{
fmt.Printf("学号:%d 姓名:%s 年龄:%d 学校:%s\n", stuinfo.id, stuinfo.name, stuinfo.age, stuinfo.school)
fmt.Print("请输入学生修改后的姓名:")
fmt.Scan(&modname)
fmt.Print("请输入学生修改后的年龄:")
fmt.Scan(&modage)
fmt.Print("请输入学生修改后的学校:")
fmt.Scan(&modschool)
fmt.Print("请输入学生修改后的学号")
fmt.Scan(&modid)
delete(d.Allstudent, orid)
d.Allstudent[modid] = student_list{
modname,
modschool,
modid,
modage,
}
fmt.Print("信息修改成功,修改后的信息为:\n")
fmt.Printf("学号:%d 姓名:%s 年龄:%d 学校:%s\n", modid, modname, modage, modschool)
}else{
fmt.Print("该学生信息不存在\n")
}
}
func (d *Database) Delete_stu(){
var delid int
fmt.Print("请输入你要修改学生的学号:\n")
fmt.Scan(&delid)
stuinfo, exist := d.Allstudent[delid]
if exist{
fmt.Printf("已删除学生信息:\n", stuinfo)
delete(d.Allstudent,delid)
}else {
fmt.Printf("该学生信息不存在\n")
}
}
func (d *Database) Show_Info(){
for _, stuinfo := range d.Allstudent{
fmt.Printf("学号:%d 姓名:%s 年龄:%d 学校:%s\n", stuinfo.id, stuinfo.name, stuinfo.age, stuinfo.school)
}
}
func main(){
student_data := Database{}
student_data.Allstudent = make(map[int]student_list, 20)
for{
var choice int
fmt.Printf("菜单:\n 1. 添加学生信息\n")
fmt.Printf(" 2. 修改学生信息\n")
fmt.Printf(" 3. 删除学生信息\n")
fmt.Printf(" 4. 显示全部学生信息\n")
fmt.Printf(" 5. 退出\n")
fmt.Printf("请输入操作对应的数字:\n")
fmt.Scan(&choice)
switch choice {
case 1:
student_data.Add_Student()
case 2:
student_data.Modify_Student()
case 3:
student_data.Delete_stu()
case 4:
student_data.Show_Info()
case 5:
os.Exit(0) //Exit 函数可以让当前程序以给出的状态码 code 退出
default:
fmt.Println("请输入1~5之间的数字")
}
}
}