Go 结构体版学生管理系统



代码:

建立两个文件,其中一个文件是 test.go 文件,用于存放主函数,另一个是 student.go 文件,单独的把学生管理的功能分离开

package main

import (
	"fmt"
	"os"
)

// 学生管理系统
// 菜单函数
func showMenu() {
	fmt.Println("welcomm sms!")
	fmt.Println(`
	1. 查看所有的学生
	2. 添加学生
	3. 修改学生
	4. 删除学生
	5. 退出
	`)
}

var smr studentMgr

func main() {
	// 调用声明的全局对象
	smr = studentMgr{
		allStudent: make(map[int]student),
	}
	for { // 放到无限循环中
		showMenu()
		fmt.Println("请输入要做的事情")
		var choice int
		fmt.Scanln(&choice)

		switch choice {
		case 1:
			smr.showStudent()
		case 2:
			smr.addStudent()
		case 3:
			smr.editStudent()
		case 4:
			smr.deleteStudent()
		default:
			fmt.Println("滚~~")
			os.Exit(1)
		}
	}
}



第二个文件

package main

import (
	"fmt"
)

// 学生管理系统
// 有一个字段
// 1.它保存了一些数据-->结构体的字段
// 2.他有三个功能--> 结构体的方法
type student struct {
	id   int
	name string
}

// 造一个学生的管理者
type studentMgr struct {
	allStudent map[int]student //建造一个学生管理者
}

// 查看学生
func (s studentMgr) showStudent() {
	for _, v := range s.allStudent { // 使用for 循环,把map 里面的所有学生,一个个的拎出来
		fmt.Println(v.id, v.name) // 把学生的名字还有id打印出来
	}
}

// 添加学生
func (s studentMgr) addStudent() {
	// 创建一个新学生
	var (
		stuId   int
		stuName string
	)
	//获取用户输入
	fmt.Println("请输入学号")
	fmt.Scanln(&stuId)
	fmt.Println("请输入姓名")
	fmt.Scanln(&stuName)
	newstu := student{ // 名字
		id:   stuId,
		name: stuName,
	}

	// 2. 把这个新学生放到 s.allStudent这个map 里面
	s.allStudent[newstu.id] = newstu // 这样就能添加上了

}

// 修改学生
func (s studentMgr) editStudent() {
	// 1. 获取用户输入的学号
	// 2. 展示该学号对应的学生信息,如果没有提示查无此人
	// 3. 请输入修改后的学生名
	// 4. 更新学生的姓名
	fmt.Println("请输入学生的学号")
	var studentId int
	fmt.Scanln(&studentId)

	v1, ok := s.allStudent[studentId] // 直接使用 map 的key 就能取值
	if !ok {
		fmt.Println("查无此人")
		return
	}
	fmt.Println("学生的名字", v1.name)
	fmt.Println("请输入学生的新名字")
	var newName string
	fmt.Scanln(&newName)
	v1.name = newName            // 直接进行更改
	s.allStudent[studentId] = v1 // 再更改到map 里
}

// 删除学生
func (s studentMgr) deleteStudent() {
	// 1. 请用户输入要删除学生的 id
	// 2. 去 map 找有没有这个学生,如果没有就打印查无此人
	// 3. 有的话就删除
	fmt.Println("请输入你要删除学生的学号")
	var studID int
	fmt.Scanln(&studID) // 要删除学生的ID
	_, ok := s.allStudent[studID]
	if !ok {
		fmt.Println("没有这么一个人")
		return
	}
	delete(s.allStudent, studID) // 删除的时候,只需要确定删除的集合,还有key 就可以了
	fmt.Println("删除成功")
}


最后实现的结果如下:

welcomm sms!

        1. 查看所有的学生
        2. 添加学生
        3. 修改学生
        4. 删除学生
        5. 退出

请输入要做的事情
1
welcomm sms!

        1. 查看所有的学生
        2. 添加学生      
        3. 修改学生      
        4. 删除学生      
        5. 退出

请输入要做的事情
2
请输入学号
10286
请输入姓名
zhao
welcomm sms!

        1. 查看所有的学生
        2. 添加学生
        3. 修改学生
        4. 删除学生
        5. 退出

请输入要做的事情
2  
请输入学号
10087
请输入姓名
peng
welcomm sms!

        1. 查看所有的学生
        2. 添加学生
        3. 修改学生
        4. 删除学生
        5. 退出

请输入要做的事情
1
10286 zhao
10087 peng
welcomm sms!

        1. 查看所有的学生
        2. 添加学生
        3. 修改学生
        4. 删除学生
        5. 退出

请输入要做的事情
4
请输入你要删除学生的学号
10286
删除成功
welcomm sms!

        1. 查看所有的学生
        2. 添加学生
        3. 修改学生
        4. 删除学生
        5. 退出

请输入要做的事情
1
10087 peng
welcomm sms!

        1. 查看所有的学生
        2. 添加学生
        3. 修改学生
        4. 删除学生
        5. 退出

请输入要做的事情
2
请输入学号


创建结构体的三种方式

package main

import (
	"fmt"
)

type student struct { // 先声明一个结构体
	id   int
	name string
}

func newStudent(id int, name string) student {
	return student{
		id:   id,
		name: name,
	}
}

func main() {
	var p1 student
	p1.id = 123
	p1.name = "zhao"
	fmt.Println("p1的值是:", p1)

	p2 := student{
		id:   234,
		name: "wang",
	}

	fmt.Println("p2的值是", p2)

	// 使用构造函数
	p3 := newStudent(158, "Li")
	fmt.Println("p3的值是:", p3)
}

posted @ 2021-04-09 00:23  沧海一声笑rush  阅读(88)  评论(0编辑  收藏  举报