使用go来实现一个学生管理系统,要实现的功能也很简单,拥有查看、添加、修改、删除功能。代码分为两个文件main.go、student.go,main作为程序入口有功能展示模块,student是实现上述功能的方法和函数。当然也可以把两个文件合到一起,把student中的代码拷贝到main即可。
注意:
1. 代码都在一个文件是可以直接go run或go build
2. 代码分为两个文件存放,需要先go build,然后执行build生成的可执行文件,不能直接go run 会提示找不到主程序里引用的代码
package main
import (
"fmt"
"os"
)
// 声明一个学生管理属性对象
var instu studentMgs
// 同一个package里只能有一个main函数
// 同一个package里如果要调用另一个文件里的函数需要编译以后才能使用,就是go build以后执行build生成的可执行文件
func main() {
gotest()
instu = studentMgs{ // 不要放到for循环内,重新赋值会覆盖已存数据
stuMgs: make(map[string]student, 100),
}
for {
fmt.Println("欢迎进入学生管理系统")
fmt.Println(`
1. 查看所有学生信息
2. 添加学生信息
3. 修改学生信息
4. 删除学生信息
5. 退出
`)
fmt.Print("请输入你的选择:")
var i int8
fmt.Scanln(&i)
fmt.Printf("你的选择是:%d\n", i)
switch i {
case 1:
instu.showstu()
case 2:
instu.addstu()
case 3:
instu.editstu()
case 4:
instu.delstu()
case 5:
os.Exit(1)
default:
fmt.Println("无效的参数!")
}
}
}
package main
import (
"fmt"
"sort"
)
func gotest() {
fmt.Println("但行好事莫问前程")
}
// 定义一个学生类型
type student struct {
id int64
name string
}
// 创建学生信息管理者,要调用方法的那种就要创建一个结构体
type studentMgs struct {
stuMgs map[string]student
}
// 定义方法
// 查看所有学生
func (s studentMgs) showstu() {
// 添加排序功能
stuID := make([]string, 0, len(s.stuMgs))
for i := range s.stuMgs {
stuID = append(stuID, i)
}
sort.Strings(stuID)
for i, v := range stuID {
fmt.Printf("序号:%d 学号:%v 姓名:%v\n", i+1, v, s.stuMgs[v].name)
}
}
// 添加学生
func (s studentMgs) addstu() {
var (
newid int64
newname string
)
fmt.Print("请输入要添加的学生id:")
fmt.Scanln(&newid)
fmt.Print("请输入要添加的学生姓名:")
fmt.Scanln(&newname)
strID := fmt.Sprintf("%d", newid)
_, v := s.stuMgs[strID] // v值为ture或flase
if v { // v值为空为false,不为空为true
fmt.Printf("%v已存在\n", strID)
} else {
newstu := student{
id: newid,
name: newname,
}
// stuMgs接受一个student类型的值,所以要先创建一个student类型的对象再赋值
s.stuMgs[strID] = newstu
}
}
// 修改学生
func (s studentMgs) editstu() {
var (
newid int64
newname string
)
fmt.Print("请输入要修改的学生id:")
fmt.Scanln(&newid)
fmt.Print("请输入要修改学生姓名为:")
fmt.Scanln(&newname)
strID := fmt.Sprintf("%d", newid)
_, v := s.stuMgs[strID] // v值为ture或flase
if !v { // v值为空为true,不为空为false
fmt.Printf("%v不存在\n", strID)
} else {
newstu := student{
id: newid,
name: newname,
}
// stuMgs接受一个student类型的值,所以要先创建一个student类型的对象再赋值
s.stuMgs[strID] = newstu
}
}
// 删除学生
func (s studentMgs) delstu() {
var newid int64
fmt.Print("请输入要删除的学生id:")
fmt.Scanln(&newid)
strID := fmt.Sprintf("%d", newid)
_, v := s.stuMgs[strID] // v值为ture或flase
if !v { // v值为空为true,不为空为false
fmt.Printf("%v不存在\n", strID)
} else {
delete(s.stuMgs, strID)
}
}
D:\Software\godata\src\1222>1222.exe
但行好事莫问前程
欢迎进入学生管理系统
1. 查看所有学生信息
2. 添加学生信息
3. 修改学生信息
4. 删除学生信息
5. 退出
请输入你的选择:
添加学生
请输入你的选择:2
你的选择是:2
请输入要添加的学生id:10086
请输入要添加的学生姓名:移动
# 当添加的学号已存在会提示
10086已存在
查看学生信息
请输入你的选择:1
你的选择是:1
序号:1 学号:10000 姓名:对象
序号:2 学号:10010 姓名:联通
序号:3 学号:10086 姓名:移动
修改学生信息
请输入你的选择:3
你的选择是:3
请输入要修改的学生id:10000
请输入要修改学生姓名为:电信
欢迎进入学生管理系统
1. 查看所有学生信息
2. 添加学生信息
3. 修改学生信息
4. 删除学生信息
5. 退出
请输入你的选择:1
你的选择是:1
序号:1 学号:10000 姓名:电信
序号:2 学号:10010 姓名:联通
序号:3 学号:10086 姓名:移动
# 如果输入的学号不存在会提示
10000不存在
删除学生信息
请输入你的选择:4
你的选择是:4
请输入要删除的学生id:10010
欢迎进入学生管理系统
1. 查看所有学生信息
2. 添加学生信息
3. 修改学生信息
4. 删除学生信息
5. 退出
请输入你的选择:1
你的选择是:1
序号:1 学号:10000 姓名:电信
序号:2 学号:10086 姓名:移动
# 如果删除的学号不存在也会提示
10010不存在
选择退出的话就会直接退出程序
初学go有纰漏的地方,欢迎各位小伙伴留言