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("输入编号不存在")
        }
    }

}

相关推荐