GO语言实现一个简单的纯后端学员管理系统

  • 项目总览:
  • 一、项目开发日志
  • 二、前情知识补充
    • 1.构造函数:用来在创建对象时初始化对象
    • 2.方法和接收者
  • 三、主函数中的内容
  • 四、逐个自定义函数拆解分析
    • 1.显示菜单showMenu()函数
    • 2.添加学员addStudent()函数
    • 3.编辑学员 modifyStudent()函数
    • 4.展示学员 showStudent()函数
  • 五、所有代码展示
    • 1.main.go
    • 2.student.go
  • 六、效果展示:

项目总览:

1.开发语言:GO语言
2.IDE:Goland
3.开发用时:一个小时
4.源码已上传到我的GitHub,链接:https://github.com/2394799692/Student-management-system 或点此跳转


以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj。QQ:2394799692

一、项目开发日志

//1.添加学员信息
//2.编辑学员信息
//3.展示所有学员信息
//分析需求:
//先写一个学生结构体,打印一个系统菜单,等待用户选择要执行的选项,执行相应动作

二、前情知识补充

1.构造函数:用来在创建对象时初始化对象

Go语言的结构体没有构造函数,我们可以自己实现。 例如,下方的代码就实现了一个person的构造函数。 因为struct是值类型,如果结构体比较复杂的话,值拷贝性能开销会比较大,所以该构造函数返回的是结构体指针类型。

func newPerson(name, city string, age int8) *person {return &person{name: name,city: city,age:  age,}
}//调用构造函数
p9 := newPerson("张三", "沙漠", 90)
fmt.Printf("%#v\n", p9) //&main.person{name:"张三", city:"沙漠", age:90}

2.方法和接收者

Go语言中的方法(Method)是一种作用于特定类型变量的函数。这种特定类型变量叫做接收者(Receiver)。接收者的概念就类似于其他语言中的this或者 self。

//方法定义格式:
func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {函数体
}
//案例
//Person 结构体
type Person struct {name stringage  int8
}//NewPerson 构造函数
func NewPerson(name string, age int8) *Person {return &Person{name: name,age:  age,}
}//Dream Person做梦的方法
func (p Person) Dream() {fmt.Printf("%s的梦想是学好Go语言!\n", p.name)
}func main() {p1 := NewPerson("小王子", 25)p1.Dream()
}

方法与函数的区别是,函数不属于任何类型,方法属于特定的类型。

三、主函数中的内容

func main() {sm := newStudentMgr()for {showMenu() //1.打印一个系统菜单//2.等待用户选择要执行的选项var input intfmt.Print("请输入你要操作的序号:")fmt.Scanf("%d\n", &input)fmt.Println("用户输入的是:", input)//3.执行相应动作switch input {case 1:stu := getInput()sm.addStudent(stu)case 2:stu := getInput()sm.modifyStudent(stu)case 3:sm.showStudent()case 4:os.Exit(0)}}
}

四、逐个自定义函数拆解分析

1.显示菜单showMenu()函数

func showMenu() {fmt.Println("欢迎来到学员信息管理系统")fmt.Println("1.添加学员")fmt.Println("2.编辑学员信息")fmt.Println("3.展示所有学员信息")fmt.Println("4.退出系统")
}

2.添加学员addStudent()函数

func (s *studentMgr) addStudent(newStu *student) {s.allStudents = append(s.allStudents, newStu)
}

3.编辑学员 modifyStudent()函数

func (s *studentMgr) modifyStudent(newStu *student) {for i, v := range s.allStudents {if newStu.id == v.id { //当学号相同时,表示找到了要修改的学生s.allStudents[i] = newStu //根据切片的索引直接把新学生赋值进来return}//如果走到这里说明输入的学生没有找到fmt.Println("输入的学生信息有误,系统中没有学号是:%d的学生\n", newStu.id)}
}

4.展示学员 showStudent()函数

func (s *studentMgr) showStudent() {for _, v := range s.allStudents {fmt.Printf("学号:%d 姓名:%s 班级:%s\n", v.id, v.name, v.class)}
}

五、所有代码展示

1.main.go

package mainimport ("fmt""os"
)//学员信息管理系统//1.添加学员信息
//2.编辑学员信息
//3.展示所有学员信息
//分析需求:
//先写一个学生结构体,打印一个系统菜单,等待用户选择要执行的选项,执行相应动作func showMenu() {fmt.Println("欢迎来到学员信息管理系统")fmt.Println("1.添加学员")fmt.Println("2.编辑学员信息")fmt.Println("3.展示所有学员信息")fmt.Println("4.退出系统")
}//获取用户输入的学员信息
func getInput() *student { //返回值stu为*student类型var (id    intname  stringclass string)fmt.Println("请按要求输入学员信息")fmt.Print("请输入学员的学号:")fmt.Scanf("%d\n", &id)fmt.Print("请输入学员的姓名:")fmt.Scanf("%s\n", &name)fmt.Print("请输入学员的班级:")fmt.Scanf("%s\n", &class)//就能拿到用户输入的学员的所有信息stu := newStudent(id, name, class) //调用student的构造函数构造一个学生return stu
}
func main() {sm := newStudentMgr()for {showMenu() //1.打印一个系统菜单//2.等待用户选择要执行的选项var input intfmt.Print("请输入你要操作的序号:")fmt.Scanf("%d\n", &input)fmt.Println("用户输入的是:", input)//3.执行相应动作switch input {case 1:stu := getInput()sm.addStudent(stu)case 2:stu := getInput()sm.modifyStudent(stu)case 3:sm.showStudent()case 4:os.Exit(0)}}
}

2.student.go

package mainimport "fmt"//定义一个结构体描述学生信息
type student struct {id    intname  stringclass string
}//定义student类型的构造函数
func newStudent(id int, name, class string) *student {return &student{id:    id,name:  name,class: class,}
}//学员管理的类型
type studentMgr struct {allStudents []*student //定义一个student类型的切片
}//这是studentMgr的构造函数
func newStudentMgr() *studentMgr {return &studentMgr{allStudents: make([]*student, 0, 100), //初始化切片}
}//1.添加学员
func (s *studentMgr) addStudent(newStu *student) {s.allStudents = append(s.allStudents, newStu)
}//2.编辑学员
func (s *studentMgr) modifyStudent(newStu *student) {for i, v := range s.allStudents {if newStu.id == v.id { //当学号相同时,表示找到了要修改的学生s.allStudents[i] = newStu //根据切片的索引直接把新学生赋值进来return}//如果走到这里说明输入的学生没有找到fmt.Println("输入的学生信息有误,系统中没有学号是:%d的学生\n", newStu.id)}
}//3.展示学生
func (s *studentMgr) showStudent() {for _, v := range s.allStudents {fmt.Printf("学号:%d 姓名:%s 班级:%s\n", v.id, v.name, v.class)}
}

六、效果展示:

1)开始页面:

2)添加学员:
3)修改学员和查看学员:

4)退出页面:

【Go语言】实现一个简单的纯后端学员管理系统,入门级别练手项目,练习结构体,接口,构造函数相关推荐

  1. BoltDB 一个简单的纯 Go key/value 存储 [译]

    作者:wolf4j 链接:https://www.jianshu.com/p/cb1b05aa7dd2 boltDB Blot Bolt 是由 Howard Chu 的 LMDB 项目启发的一个纯粹的 ...

  2. 使用html 语言建立一个简单的网页,如何用记事本建立简单的网页(1).doc

    第九章 网页制作 实验一 用记事本建立简单的HTML文件 [实验目的] 学会用HTML语言建立一个简单的网页. [实验内容] 建立一个网页,布局自定,包括自我介绍.图片.自己的电子信箱地址等,要求在标 ...

  3. 用C语言实现一个简单的一元线性回归算法

    今天我们用C语言实现一个简单的线性回归算法:在代码前面我们在回顾一下线性回归. 线性回归是回归问题中的一种,线性回归假设目标值与特征是线性相关的,即满足一个多元一次方程式.通过构建损失函数,来求解损失 ...

  4. c语言编写一个简单的答题系统

    利用c语言编写一个简单的答题系统. 思路是先设计好题目和答案,再输入自己的答案,利用输入的答案与正确答案对比,从而得出你回答的对错. (一)捆绑题目和答案 我们可以利用结构体对一个题目捆绑上一个答案. ...

  5. c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  6. 用C语言实现一个简单的计算器代码

    #include <stdio.h> #include <math.h> #include <stdlib.h> //预处理指令 int main(void) {d ...

  7. C语言编写一个简单的扫雷

    C语言编写一个简单的扫雷 # include <stdio.h> # include <stdlib.h> # include <math.h> # include ...

  8. 用c语言实现一个简单的输入法联想功能

    用c语言实现一个简单的输入法联想功能 手机输入法的联想功能十分常见,通过c语言同样可以实现一个简单的输入法联想功能. 首先读取一个文字量比较大的文件,通过线性表对汉字间的关系进行加权存储,再记录到总体 ...

  9. 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

最新文章

  1. JAR打包的误区:第三方包的嵌套打包
  2. android surfaceview动画,怎么让android的surfaceview中的动画更加平滑流畅
  3. c++图形中如何判断鼠标点击在一条直线上_PS教程:十种抠图方法【上】
  4. 零基础python从入门到精通 pdf-跟老齐学Python从入门到精通
  5. 「后端小伙伴来学前端了」Vue脚手架中 render 函数
  6. ios 自定义拍照页面_vivo X27只靠颜值和拍照吃饭?体验过后你也会被系统所折服...
  7. 浅谈云计算与数据中心计算
  8. 设计模式在业务系统中的应用
  9. cin gt gt a用c语言怎么写写,cin、cin.get()、cin.getline()、getline()、gets()等函数的用法...
  10. 使用cisco pt 6.0模拟NAT,PAT
  11. 华为机试HJ12:字符串反转
  12. 多行省略号不显示的问题
  13. hdu 4405 Aeroplane chess 概率dp
  14. 如何用matlab建立风力机模型,风力机的Matlab模型及其应用
  15. 【ftp 上传文件失败】
  16. 谷歌浏览器元素定位神器 -- chropath插件
  17. P3842 [TJOI2007]线段(线性dp,分类讨论)
  18. RK3288RK3399 GMAC以太网调试
  19. 制作拼多多app网页css,5+App下Mui框架开发仿拼多多App
  20. 第十三章 外星人来了

热门文章

  1. 纪中游记 - Day45
  2. 解决 input密码框自动填充
  3. 前端如何解决浏览器自动填充input输入框账号密码的问题
  4. 【TWVRP】基于matlab模拟退火算法求解带时间窗的车辆路径规划问题【含Matlab源码 160期】
  5. UI设计中的12个基本动效
  6. Nginx 核心知识点
  7. 世界数字图书馆开通中文浏览
  8. Solidity 中的数学(第 4 部分:复利)
  9. SpringBoot项目,网站【代号Sham】已发布测试版本
  10. 信息收集-服务器信息