Golang项目之函数版学生管理系统

前言

学习第3天,基于函数的方式编写小项目:学生管理系统

代码

package main

import (
	"fmt"
	"os"
)
/*
	函数版学生管理系统
	写一个系统能够查看所有的学生/新增学生/删除学生
*/
var (
	allStudent map[int64]*student // 变量声明
)

type student struct{
	id int64
	name string
}

// newStudent是一个student类型的构造函数
func newStudent(id int64,name string)*student{
	return &student{
		id: id,
		name: name,
	}
}

func showAllStudent(){
	if len(allStudent) != 0{
		// 如果map不为空,把所有学生都打印出来
		for k,v := range allStudent{
			fmt.Printf("学号:%d 姓名:%s\n",k,v.name)
		}
	} else{
		// 否则,提示学生信息为空
		fmt.Println("msg:学生信息为空")
	}


}

func addStudent(){
	// 想allStudent中添加一个新的学生
	// 1.创建一个新学生
	// 1.1 获取用户输入
	var (
		id int64
		name string
	)
	fmt.Print("请输入学生的学号:")
	fmt.Scanln(&id)
	fmt.Print("请输入学生的姓名:")
	fmt.Scanln(&name)

	// 1.2 判断学生是否存在
	if _,ok := allStudent[id];! ok{
		// 学生不存在,则添加
		// 1.3造学生(调用student的构造函数)
		newStu := newStudent(id,name)
		// 2.追加到allStudent这个map中
		allStudent[id] = newStu
	}else{
		// 学生存在,则提示
		fmt.Println("msg:添加的学生已存在")
	}

}

func deleteStudent(){
	// 1.请用户输入要删除的学生的序号
	var (
		deleteId int64
	)
	fmt.Print("请输入学生的学号:")
	fmt.Scanln(&deleteId)
	// 2.判断学生是否存在
	if _,ok := allStudent[deleteId];!ok{
		fmt.Println("msg:学生不存在")
	}else{
		// 2.去allStudent这个map中根据学号删除对应的键值对
		delete(allStudent,deleteId)
	}
}


func main(){
	allStudent = make(map[int64]*student, 48)  // 初始化(开辟内存空间)


	for {
		// 1.打印菜单
		fmt.Println("欢迎光临学生管理系统!")
		fmt.Println(`
			1.查看所有学生
			2.新增学生
			3.删除学生
			4.退出
		`)
		fmt.Print("请输入编号:")
		// 2.等待用户选择下一步要做什么
		var choice int
		fmt.Scanln(&choice)
		fmt.Printf("你选择了> %d <这个选项!\n",choice)
		// 3.执行对应的函数
		switch choice {
		case 1:
			fmt.Println("------学生信息-----")
			showAllStudent()
			fmt.Println("--------end-------")
		case 2:
			addStudent()
		case 3:
			deleteStudent()
		case 4:
			os.Exit(1)
		default:
			fmt.Println("输入编号不存在")
		}
	}

}
posted @ 2020-02-14 21:26  jasonminghao  阅读(290)  评论(0编辑  收藏  举报