Go-简单学生管理系统(结构体版)

package main

import (
	"fmt"
	"os"
)

var (
	sms stuController
)

// 学生信息的管理者
type stuController struct {
	allStudentMap map[string]student
}

// 学生结构体
type student struct {
	id, name string
}

// 学生的构造函数
func newStudent(id, name string) student {
	return student{
		id:   id,
		name: name,
	}
}

// 根据学号查看学生的方法
func (sms stuController) selectStuById(id string) {
	stu, ok := sms.allStudentMap[id]
	if ok {
		fmt.Printf("学号: %s , 名字: %s\n", stu.id, stu.name)
	} else {
		fmt.Printf("没有发现有学号为【%s】的学生信息", id)
	}
}

// 查看所有学生的方法
func (sms stuController) selectAll() {
	if len(sms.allStudentMap) == 0 {
		fmt.Println("暂时没有学生~")
		return
	}
	for _, stu := range sms.allStudentMap {
		sms.selectStuById(stu.id)
	}
}

/**
添加学生的方法
*/
func (sms stuController) addStu() {
repeatStuId:
	fmt.Print("请输入学生学号: ")
	var id string
	fmt.Scanln(&id)
	_, ok := sms.allStudentMap[id]
	if ok {
		fmt.Printf("检测到输入的学号【%s】已经存在,请重新输入\n", id)
		goto repeatStuId
	}
	fmt.Print("请输入学生名字: ")
	var name string
	fmt.Scanln(&name)

	sms.allStudentMap[id] = newStudent(id, name)
	fmt.Println("添加成功")
	sms.selectStuById(id)
}

/**
删除学生的方法
*/
func (sms stuController) deleteStu() {
	fmt.Println("==========================")
	sms.selectAll()
	fmt.Println("==========================")
	if len(sms.allStudentMap) == 0 {
		fmt.Println("没有学生,无法进行删除。")
		return
	}
deleteStuLabel:
	fmt.Print("请输入需要删除的学号: ")
	var id string
	fmt.Scanln(&id)
	_, ok := sms.allStudentMap[id]
	if ok {
		delete(sms.allStudentMap, id)
		fmt.Println("删除成功")
		sms.selectAll()
	} else {
		fmt.Printf("不存在此学号为【%s】的学生,请重新输入\n", id)
		goto deleteStuLabel
	}
}

/**
修改学生的方法
*/
func (sms stuController) updateStu() {
	fmt.Println("==========================")
	sms.selectAll()
	fmt.Println("==========================")
	if len(sms.allStudentMap) == 0 {
		fmt.Println("没有学生,无法进行修改。")
		return
	}
updateStuLabel:
	fmt.Print("请输入需要修改信息的学号: ")
	var id string
	fmt.Scanln(&id)
	stu, ok := sms.allStudentMap[id]
	if ok {
		fmt.Printf("现在的名字为:%s\n", stu.name)
		fmt.Print("请输入新的名字:")
		var name string
		fmt.Scanln(&name)
		stu.name = name
		sms.allStudentMap[id] = stu
		fmt.Println("修改成功。")
		sms.selectStuById(stu.id)
	} else {
		fmt.Printf("不存在此学号为【%s】的学生,请重新输入\n", id)
		goto updateStuLabel
	}
}

// 菜单函数
func menu() {
	fmt.Println("==============Go版本的学生管理系统(结构体版)==============")
	fmt.Println("\t\t\t\t1.查看所有学生")
	fmt.Println("\t\t\t\t2.新增学生")
	fmt.Println("\t\t\t\t3.删除学生")
	fmt.Println("\t\t\t\t4.修改学生")
	fmt.Println("\t\t\t\t5.退出")
	fmt.Println("=====================================================")
}

// 指令相关的函数
func instruction() {
	fmt.Print("请输入指令编号:")
	var choice int
	fmt.Scanln(&choice)
	fmt.Printf("你选择了【%d】选项\n", choice)
	switch choice {
	case 1:
		sms.selectAll()
	case 2:
		sms.addStu()
	case 3:
		sms.deleteStu()
	case 4:
		sms.updateStu()
	case 5:
		os.Exit(1) // 退出
	default:
		fmt.Printf("无效的指令: 【%d】\n", choice)
	}
}

func main() {
	// 启动时,初始化管理者
	sms = stuController{
		allStudentMap: make(map[string]student, 50),
	}
	for {
		menu()
		instruction()
	}
}

效果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值