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("输入的选项不存在")
		}
	}
}
原文地址:https://www.cnblogs.com/jasonminghao/p/12309652.html