go语言 学生管理系统 简化版

package main

import (
        "encoding/json"
        "fmt"
        "io/ioutil"
        "os"
)

type Student struct {
        ID    int
        Age   int
        Score int
        Name  string
}

type Class struct {
        ID      int
        Student map[int]*Student
}

func (c *Class) showStudent() {
        fmt.Printf("\t%s\t%s\t%s\t%s\n", "ID", "姓名", "年龄", "分数")
        sortId := make([]int, 0)
        for k := range c.Student {
                sortId = append(sortId, k)
        }
        for _, v := range sortId {
                studentMsg := c.Student[v]
                fmt.Println(studentMsg)
                fmt.Printf("\t%s\t%s\t%s\t%s\n", studentMsg.ID, studentMsg.Name, studentMsg.Age, studentMsg.Score)
        }
}

func (c *Class) addStudent() {
        var id, age, score int
        var name string
        fmt.Print("请输入id:")
        _, err := fmt.Scan(&id)
        fmt.Print("请输入name:")
        _, err = fmt.Scan(&name)
        fmt.Print("请输入age:")
        _, err = fmt.Scan(&age)
        fmt.Print("请输入score:")
        _, err = fmt.Scan(&score)
        if err != nil {
                fmt.Println("输入有无,保存信息错误")
        }
        _, isSave := c.Student[id]
        if isSave {
                fmt.Println("学生ID已存在,请重新输入")
        }
        student := &Student{
                ID:    id,
                Name:  name,
                Age:   age,
                Score: score,
        }
        // 将输入内容存入内存
        c.ID = id
        c.Student[id] = student
        // 将map类型转换成string类型,并写入txt文件
        dataType, _ := json.Marshal(*student)
        dataString := string(dataType)
        writeFile(dataString+"\n")

        fmt.Println("添加成功")
        fmt.Println(&c)
}

func (c *Class) delStudent() {
        fmt.Println("请输入用户ID:")
        var id int
        _, err := fmt.Scan(&id)
        if err != nil {
                fmt.Println("输入有误,请重新输入")
        }
        _, isSave := c.Student[id]
        if !isSave {
                fmt.Println("用户ID不存在")
                return
        }
        delete(c.Student, id)
        fmt.Println("删除成功")
}

func (c *Class) updateStudent() {
        fmt.Println("请输入用户ID:")
        var id int
        _, err := fmt.Scan(&id)
        if err != nil {
                fmt.Println("输入有误")
                return
        }
        _, isSave := c.Student[id]
        if !isSave {
                fmt.Println("用户不存在,请重新输入")
                return
        }
        var name string
        var age int
        var score int
        fmt.Println("请输入新的name:")
        _, err = fmt.Scan(&name)
        fmt.Println("请输入新的age:")
        _, err = fmt.Scan(&age)
        fmt.Println("请输入新的score:")
        _, err = fmt.Scan(&score)

        student := &Student{
                ID:    id,
                Name:  name,
                Age:   age,
                Score: score,
        }
        c.Student[id] = student
        fmt.Println("修改成功")
}

func readFile() {
        content, err := ioutil.ReadFile("./studentMsg.txt")
        if err != nil {
                fmt.Println("read file failed, err:", err)
                return
        }
        fmt.Println("文件内容如下:")
        fmt.Print(string(content))
}

func writeFile(name string) {
        file, err := os.OpenFile("./studentMsg.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
        if err != nil {
                fmt.Println("open file failed, err:", err)
                return
        }
        defer file.Close()
        file.Write([]byte(name+"\n"))       //写入字节切片数据
        //file.WriteString(name+"\n") //直接写入字符串数据

        fmt.Println("开始写入文件")
}

func main() {
        c := &Class{}
        c.Student = make(map[int]*Student, 50)
        for {
                fmt.Println("学生管理系统:")
                fmt.Println()
                fmt.Println("1.查看学生 \n2.添加学生 \n3.删除学生 \n4.修改学生信息 \n5.查看文件 \n6.退出登陆")
                fmt.Println()
                fmt.Print("请输入选项: ")

                var num int
                _, err := fmt.Scan(&num)
                if err != nil {
                        fmt.Println("输入有无,请重新输入")
                }
                switch num {
                case 1:
                        c.showStudent()
                case 2:
                        c.addStudent()
                case 3:
                        c.delStudent()
                case 4:
                        c.updateStudent()
                case 5:
                        readFile()
                case 6:
                        goto goHome
                default:
                        fmt.Println("输入有无,请重新输入")
                        continue
                }
        }
goHome:
        fmt.Println("退出系统")
}