记得不管是学c还是c++,基本都会被要求写一个学生管理系统,那学了go之后不例外也来实现一个简单的。
主要功能:
- 1.添加学生信息
- 2.修改学生信息
- 3.展示全部学生信息
代码部分:
首先是student.go,这一部分主要是定义学生和管理的结构体以及对应的方法
package main
import "fmt"
//学生
type student struct {
id int //唯一的
name string
class string
}
//学生的构造函数
func newstudent(id int, name, class string) *student {
return &student{
id: id,
name: name,
class: class,
}
}
//学生管理
type manage struct {
allstudent []*student
}
//学生管理的构造函数
func newmanage() *manage {
return &manage{allstudent: make([]*student, 0, 100)} //容量是100
}
//1.添加学生
func (s *manage) addstudent(newstu *student) {
s.allstudent = append(s.allstudent, newstu)
}
//2.编辑学生信息
func (s *manage) modifystudent(newstu *student) {
for i, v := range s.allstudent {
if newstu.id == v.id {
s.allstudent[i] = newstu
return
}
}
fmt.Printf("系统中不存在学号为%d的这个学生!\n", newstu.id)
}
//3.展示所有学生信息
func (s *manage) showallstudent() {
for _, v := range s.allstudent {
fmt.Printf("学号:%d,姓名:%s,班级:%s\n", v.id, v.name, v.class)
}
}
然后main.go,这主要是实现简单的输入和菜单提示
package main
import (
"fmt"
"os"
)
func menu() {
fmt.Println("欢迎使用go学生管理系统")
fmt.Println("1:添加学生")
fmt.Println("2:编辑学生信息")
fmt.Println("3:展示所有学生信息")
fmt.Println("4:退出")
}
func getinput() *student {
var (
id int
name string
class string
)
fmt.Println("请输入学生的学号:")
fmt.Scanf("%d\n", &id)
fmt.Println("请输入学生的姓名:")
fmt.Scanf("%s\n", &name)
fmt.Println("请输入学生的班级")
fmt.Scanf("%s\n", &class)
stu := newstudent(id, name, class)
return stu
}
func main() {
sm := newmanage()
for {
//1.打印菜单
menu()
//2.用户选择操作
var input int
fmt.Print("请输入你要的操作数:")
fmt.Scanf("%d\n", &input)
fmt.Println("你选择的操作是:", input)
//3.执行操作
switch input {
case 1: //添加学生
stu := getinput()
sm.addstudent(stu)
case 2: //编辑学生
stu := getinput()
sm.modifystudent(stu)
case 3: //展示所有学生
sm.showallstudent()
case 4: //退出
os.Exit(0)
}
}
}
运行和结果
运行:cd到文件夹下然后go build
运行结果: