• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
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("退出系统")
}


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go语言关键字:defer发布时间:2022-07-10
下一篇:
go安装goctl发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap