背景

使用golang结构体实现学生管理系统,根据用户输入实现学生的增删改查。

package mainimport ("fmt""os"
)// var smr studentMgr// 学生结构体
type student struct {id   int64name string
}// 学生的管理者,使用map存储
type studentMgr struct {allStudent map[int64]student
}// 查看学生,遍历所有学生
func (s studentMgr) showStudent() {for _, stu := range s.allStudent {fmt.Printf("学生ID:%d, 学生名字:%s\n", stu.id, stu.name)}fmt.Println("查询成功!")
}// 添加学生
// 1. 获取用户输入id和name
// 2. 将信息添加到map中
func (s studentMgr) addStudent() {var (stuID   int64stuName string)fmt.Print("请输入ID:")fmt.Scanln(&stuID)fmt.Print("请输入姓名:")fmt.Scanln(&stuName)newStu := student{id:   stuID,name: stuName,}s.allStudent[newStu.id] = newStufmt.Println("添加成功!")
}// 根据ID编辑学生
// 1. 获取用户输入id
// 2. 判断id是否存在,不存在则退出,存在则修改
func (s studentMgr) editStudent() {var stuID int64fmt.Print("请输入要编辑的ID:")fmt.Scanln(&stuID)stuObj, ok := s.allStudent[stuID]if !ok {fmt.Println("查无此人")return}fmt.Printf("查到学生 ID: %d, 姓名: %s\n", stuObj.id, stuObj.name)var newName stringfmt.Print("请输入要修改的名字:")fmt.Scanln(&newName)stuObj.name = newNames.allStudent[stuID] = stuObjfmt.Printf("修改完成:\nid: %d  name: %s\n", stuObj.id, stuObj.name)
}// 删除学生
// 1. 获取用户输入id
// 2. 判断id是否存在,不存在则退出,存在则删除
func (s studentMgr) deleteStudent() {var stuID int64fmt.Print("请输入要删除的ID:")fmt.Scanln(&stuID)stuObj, ok := s.allStudent[stuID]if !ok {fmt.Printf("查无此人: %d\n", stuObj.id)return}delete(s.allStudent, stuID)fmt.Println("删除成功!")
}//菜单
func showMenu() {fmt.Println("---- welcome to sms! ----")fmt.Println(`
1. 查询所有
2. 新增
3. 修改
4. 删除
5. 退出`)
}func main() {// 初始化全局studentMgrsmr := studentMgr{allStudent: make(map[int64]student, 100),}for {// 打印菜单并等待用户输入var input intshowMenu()fmt.Print("你输入的编号:")fmt.Scanf("%d", &input)// 根据用户输入调用对应函数switch input {case 1:fmt.Println("查询所有")smr.showStudent()case 2:fmt.Println("新增")smr.addStudent()case 3:fmt.Println("修改")smr.editStudent()case 4:fmt.Println("删除")smr.deleteStudent()case 5:fmt.Println("退出")os.Exit(1)default:fmt.Println("输入错误..........")}}
}

Golang学生管理系统(函数+结构体版)相关推荐

  1. C语言学生管理系统(结构体数组)

    简介 简单的学生管理系统,使用C语言编写. 功能 拥有增.删.改.查.打印.文件读写.搜索以及排序功能. 环境 推荐使用VS2015或以上版本(支持C11或以上)的编译器运行代码. 结构 数据结构为结 ...

  2. C语言学生信息管理系统(结构体数组,文件)

    C语言学生信息管理系统(结构体数组,文件) 这是初学时写的一个程序,比较菜,不喜勿喷.在一个结构体里定义结构体内所有的信息(如果信息也需要分类则可以再定义一个结构体并在当前结构体内声明,我的这个代码在 ...

  3. 专科 java转go 翱翔之路(一)基础语法:变量声明,匿名函数,结构体,函数,map

    本人专科!在太原干了一年了,想从java转go,上班中自学go,明年找go语言相关的工作 立帖为证! 待羽翼丰满,大风到来,便是我翱翔之时!!! 1.Go语言 1.命令 1.1 查看版本号 go ve ...

  4. 换个语言学一下 Golang (9)——结构体和接口

    换个语言学一下 Golang (9)--结构体和接口 基本上到这里的时候,就是上了一个台阶了.Go的精华特点即将展开. 结构体定义 上面我们说过Go的指针和C的不同,结构体也是一样的.Go是一门删繁就 ...

  5. C语言_函数结构体的调用

    C语言_函数结构体的调用 #include<stdio.h> //定义存储函数的结构体 struct map{//定义无参数类型返回void的函数指针void (*p)(); }; /** ...

  6. 初识Golang的面向对象 为结构体(类)绑定方法

    前言 Go语言面向对象 Go语言仅支持封装 不支持继承和多态 继承和多态通过接口实现 成员函数的实现 创建类对象在Go语言中表现为创建一个结构体变量 可以定义一个工厂函数 专门负责初始化结构体(类)变 ...

  7. (篇十)用结构体数组处理学生成绩、结构体类型函数求平均值

    文章目录 一.结构体变量 二.用结构体数组处理学生成绩 三.结构体类型函数求平均值 用C语言学好结构化编程逻辑!本篇主要分析结构体数组和结构体类型的函数,对于二级C语言来说,主要是考处理学生多个成绩上 ...

  8. C语言学生管理系统图文超详细版(拷贝即用)

    花哥哥的瞎扯: 大一的课设学生管理系统,因为学也学不精,望各位大神轻点骂,多指点一下吖.注释写得相对的仔细,认真看玩就没有不会的!哈哈哈加油! 实现功能: 建立学生结点之后再弄一个链表,用尾插法的方式 ...

  9. golang sqlx scan 到结构体中_Golang语言并发编程之定时器

    上一章中对于golang的常用关键字说明如下: 1 for 和 range 2 select 3 defer 4 panic 和 recover 5 make 和 new 接下来我们来对golang的 ...

最新文章

  1. 【MATLAB】矩阵信息的获取
  2. 【深度学习】基于弱监督学习处理图像的应用
  3. Android利用Jsoup解析html 开发网站客户端小记。
  4. python Anaconda2安装OpenCV2
  5. 三合一剪弦器怎么用_三合一冲锋衣推荐选购攻略:
  6. 手机卫星定位系统_70%手机已支持北斗却没感受到?下载个App查证下
  7. 基于ASP的在线邮件收发系统研究设计
  8. 神推荐:西瓜导航你值得拥有
  9. [6.837]A3:OpenG应用和Phong着色模型
  10. CSI-RS资源配置
  11. pttools内置浏览器访问PT站无法登录
  12. 多个模型融合训练神经网络-devise模型的实现
  13. html放大镜原理,js放大镜效果原理
  14. 销售人员激励机制怎么定?
  15. 3GPP TS 29244-g30 中英文对照 | 5.11 User plane inactivity detection and reporting
  16. msp430单片机复习内容
  17. class java.util.LinkedHashMap cannot be cast to xxxx.xxx.xxxx
  18. C#运控框架 雷赛运动控制 DMC系列 运动控制项目 C#源码
  19. linux pppoe 拨号日志,PPPoe宽带拨号
  20. 外观数列(Look-and-say sequence)

热门文章

  1. JAVA命名规范(数据库 and 后端)
  2. 约瑟夫环-猴子选大王(变型题)
  3. RocketMQ的顺序消费
  4. LEC learning5: 对design 中的clock gating 处理
  5. 显示器带有音响且正常,耳机插到显示器音响耳机输出接口上却没有声音
  6. 克莱因瓶和莫比乌斯环
  7. TCP协议在传输实时语音流方面的优点
  8. 【好用工具推荐系列】跨平台剪贴板工具——快贴
  9. tp5 自动加上html,【TP5.1】HTML标签自动转义,导致CKEditor保存内容无法正常显示!...
  10. Ubuntu16.04下RealSense D435i的安装和使用