【Golang项目实战】用Go写一个学生信息管理系统,真的太酷啦| 保姆级详解,附源码——建议收藏

news2024/11/18 1:48:01

在这里插入图片描述

  • 博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。
  • 博主主页: @是瑶瑶子啦
  • 所属专栏: Go语言核心编程
  • 近期目标:写好专栏的每一篇文章

在这里插入图片描述

学习了Go的基础语法知识,如何巩固和提升呢?跟着瑶瑶子写一个简易的学生信息管理系统来练练手吧!

文章目录

  • 一、学生信息管理系统程序介绍
  • 二、功能分析和实现
    • 2.1:项目目录结构:
    • 2.2:开始菜单:
    • 2.3:类型构建
    • 2.3:整体逻辑:
    • 2.5:功能1:添加学员信息
    • 2.6:功能2:根据id修改学员信息
    • 2.7:展示所有学员信息、退出程序
  • 三、总结

一、学生信息管理系统程序介绍

  • 功能介绍
    • 添加学员信息
    • 根据学号(id)编辑学员信息
    • 展示所有学员信息
    • 退出系统

在这里插入图片描述

二、功能分析和实现

2.1:项目目录结构:

  • stuInfoProject:项目文件夹
    • go.mod
    • main.go:主程序,核心逻辑代码
    • student.go:学生类型结构体的定义、构造函数、方法等
    • studentSys:学生信息管理系统类型结构体的定义、构造函数、方法等

2.2:开始菜单:

main.go中定义显示菜单函数


func showMenu() {
	info := `
	*********************欢迎来到学生管理系统***********
		1、添加学员信息
		2、编辑学员信息
		3、展示所有学员信息
		4、退出系统
	************************************************
`
	fmt.Print(info)
}

2.3:类型构建

在这个项目中,我们需要两个结构体:

  • 学生结构体:student,定义等封装在student.go文件中
package main

// 定义一个学生类型结构体
type student struct {
	id    int    //学号
	name  string //姓名
	class string
}

// 构造函数
func newStudent(id int, name, class string) *student {
	return &student{
		id:    id,
		name:  name,
		class: class,
	}
}

  • 学生信息管理系统结构体studentSys,定义和方法等封装在studentSys.go
package main

import "fmt"

type studentSys struct {
	num      int        //学生的数量
	students []*student //存储学生实体的切片
}

//构造函数

func newStudentSys() *studentSys {
	return &studentSys{
		num:      0,
		students: make([]*student, 0, 100),
	}
}

// 1)这个管理系统所具备的方法:添加学生
func (sys *studentSys) addStudent(stu *student) {
	sys.students = append(sys.students, stu)
	sys.num += 1
	fmt.Println("************添加成功**********")
}

// 2)编辑学生
func (sys *studentSys) updateStudent(stu *student) {
	for i, v := range sys.students {
		if stu.id == v.id { //当学号相同时,找到要修改学生
			sys.students[i] = stu
			fmt.Println("***************修改成功***************")
			return
		}
	}
	fmt.Println("*********找不到该学号学生,修改失败*********")

}

// 3)展示学生
func (sys *studentSys) showStudents() {
	for _, v := range sys.students {
		fmt.Println("学号:", v.id, "姓名:", v.name, "班级", v.class)
	}
}

2.3:整体逻辑:

func main() {
	//构造一个学生管理系统
	stuSys := newStudentSys() //指针类型的,只创建一次,因为只有一个系统

	for {
		//打印菜单
		showMenu()
		//接收用户输入数据
		var input int
		fmt.Scanf("%d\n", &input)
		//switch-case进行流程空指
		switch input {
		case 1: //添加学生
			
		case 2: //根据id修改学生信息
		
		case 3: //展示所有学生的信息
		
		case 4:
			os.Exit(0) //退出系统
		default:
			fmt.Println("err:你输入选项格式有误,请重新输入!")
		}
	}
}

2.5:功能1:添加学员信息

在这里插入图片描述

  • 根据用户输入生成学员实例

// 获取用户输入的信息,创造学员的函数
func newStuByUser() (*student, error) {
	var (
		id    int
		name  string
		class string
	)
	//读取用户输入
	_, err := fmt.Scanln(&id, &name, &class)
	//出错,给出错误信息,并且将错误返回
	if err != nil {
		fmt.Println("输入出错,err:", err)
	}
	return newStudent(id, name, class), err

}
  • case1:内核心逻辑代码
	case 1: //添加学生
	fmt.Print("请输入学员的学号、名字、班级:(以空格隔开)")
	s1, err := newStuByUser()

	//调用学生管理系统所具备的方法,像其中添加学生
	
	//没有出错才添加
	if err == nil {
		stuSys.addStudent(s1)
	}

2.6:功能2:根据id修改学员信息

在这里插入图片描述

  • 根据用户输入生成学员实例
    同上
  • case2:内核心逻辑代码
		case 2:
			fmt.Println("请输入该学生的学号,及其要修改的名称和班级:(用空格隔开)")
			s1, err := newStuByUser()
			if err == nil {
				stuSys.updateStudent(s1)
			}

2.7:展示所有学员信息、退出程序

	case 3:
			fmt.Println("以下是所有学生信息展示:")
			stuSys.showStudents()
		case 4:
			os.Exit(0) //退出系统
		default:
			fmt.Println("err:你输入选项格式有误,请重新输入!")
		}

三、总结

综上,就是一个比较简单的,适合巩固基础的学生信息管理系统的小项目。涉及到函数、结构体、方法、构造函数等基础知识,非常适合小白拿来练手和巩固知识!


欢迎在评论区交流和留下你的想法和建议

如果对你有用,还请:💭评论+👍🏻点赞+⭐收藏+➕关注

在这里插入图片描述

  • Java岛冒险记【从小白到大佬之路】
  • LeetCode每日一题–进击大厂
  • 算法
  • C/C++
  • Go语言核心编程
  • 数据结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 基础进阶篇(十)—— Java集合详细总结

文章目录 一、集合类体系结构二、Collection系列集合2.1 Collection 集合体系2.2 Collection 集合体系特点2.3 Collection 常用API2.4 Collection 集合的遍历方式2.4.1 方式一:迭代器2.4.2 方式二:foreach(增强for循环)2.4.3 方式…

Python系列之Windows环境安装配置

目录 一、Python安装 1.1下载 1.2 安装 1.3增加环境变量 二、PyCharm安装 2.1 PyCharm简介 2.2 PyCharm下载安装 一、Python安装 1.1下载 python 官网The official home of the Python Programming Languagehttps://www.python.org/downloads/ 1.2 安装 要勾选选项 Ad…

校园兼职平台系统的设计与实现

技术栈: Spring、SpringMVC、MyBatis、HikariCP、fastjson、slf4j、EL和JSTL 系统功能: 前台: (1)用户注册:这里的用户分为职位发布者和职位应聘者,他们都需要注册本大学生兼职管理系统才能进…

为什么 OpenAI 团队采用 Python 开发他们的后端服务?

Python,年龄可能比很多读者都要大,但是它在更新快速的编程界却一直表现出色,甚至有人把它比作是编程界的《葵花宝典》,只是Python的速成之法相较《葵花宝典》有过之而无不及。 Python简洁,高效的特点,大大…

196页11万字智慧水务平台建设方案

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 业务需求分析 3.1 主要业务描述 (1)调度中心主要业务描述 配套工程调度中心为一级调度机构,同时也是水务集团原水供水的统一调度中心。…

python-pandas库

目录 目录 目录 1.pandas库简介(https://www.gairuo.com/p/pandas-overview) 2.pandas库read_csv方法(https://zhuanlan.zhihu.com/p/340441922?utm_mediumsocial&utm_oi27819925045248) 1.pandas库简介(http…

第七章 使用ssh服务管理远程主机

第七章 使用ssh服务管理远程主机 一、配置网卡服务 1、配置网卡参数 (1)、执行nmtui命令运行网络配置工具 [rootcentos ~]# nmtui(2)、选择编辑连接并按回车 (3)、选择以太网中网卡名称并编辑 &#xf…

JavaWeb06(三层架构连接数据库)

目录 三层架构 1.什么是三层架构 三层架构 就是将整个业务划分为三层:表示层、业务逻辑层、数据访问层。 2. 层与层之间的关系 3.怎么理解三层架构 4.为什么需要三层架构 区分层次的目的是为了“高内聚,低耦合”的思想; 简单来说&…

从零开始学习Linux运维,成为IT领域翘楚(五)

文章目录 🔥Linux打包压缩与搜索命令🔥Linux常用系统工作命令🔥Linux管道符、重定向与环境变量🔥管道命令符 🔥Linux打包压缩与搜索命令 tar 命令 语法: tar [选项] [文件]选项: 🐟 -c 产生.t…

牛客网---CM11 链表分割 代码详解+哨兵位的比较

文章目录 前言CM11 链表分割链接:方法一:尾插(带哨兵位)1.1 思路:1.2 代码:1.3 流程图1.4 注意点 方法二:尾插(不带哨兵位)2.1代码: 对比: 总结 前言 独处未必孤独喜欢就是自由 本章的内容是牛…

Chapter4:频率响应法(上)

第四章:频率响应法 Exercise4.1 已知微分网络和积分网络电路图如下图所示,求网络的频率特性。 解: 【图 ( a ) ({\rm a}) (a)微分网络】 由微分网络电路图可得:

c# 运算符重载

1.概要 1.1可重载运算符 可重载运算符说明 x, -x, !x, ~x, , --, true, falsetrue和 false 运算符必须一起重载。 x y, x - y, x * y, x / y, x % y, x & y, x | y, x ^ y, x << y, x >> y, x >>> y x y, x ! y, x < y, x > y, x < y,…

使用NNI对BERT模型进行粗剪枝、蒸馏与微调

前言 模型剪枝&#xff08;Model Pruning&#xff09;是一种用于减少神经网络模型尺寸和计算复杂度的技术。通过剪枝&#xff0c;可以去除模型中冗余的参数和连接&#xff0c;从而减小模型的存储需求和推理时间&#xff0c;同时保持模型的性能。模型剪枝的一般步骤&#xff1a…

OpenAI文本生成器-怎么解决openai只写一半

openai写文案写一半没了怎么解决 如果您正在使用 OpenAI 写文案的服务&#xff0c;在撰写文案的过程中遇到了意外中断或者其他问题导致文案未保存&#xff0c;以下是一些有用的解决方法&#xff1a; 重新调用 API 去生成文案。您可以调用 OpenAI 的 API 重新获取您所需的文案…

Three.js--》几何体顶点知识讲解

目录 几何体顶点位置数据 点线定义几何体顶点数据 网格模型定义几何体顶点数据 顶点法线数据 实现阵列立方体与相机适配 常见几何体简介 几何体的旋转、缩放、平移方法 几何体顶点位置数据 本篇文章主要讲解几何体的顶点概念&#xff0c;相对偏底层一些&#xff0c;不过…

魔兽世界商业服务端定制商人自定义NPC教程

魔兽世界自定义NPC教程 大家好&#xff0c;我是艾西今天跟大家聊一下自定义NPC&#xff0c;自定义NPC可以添加自己想要售卖的物品以及定价等可以更好的将一个游戏设定以及游戏的拓展性有质的提升 creature表是游戏所有生物人物等表格 Creature_template是所有生物模板&#xf…

kafka快的原因(四)

四、kafka快的原因 4.1 顺序读写page cache 见上一节文件系统 使用6个7200rpm、SATA接口、RAID-5的磁盘阵列在JBOD配置下的顺序写入的性能约为600MB/秒&#xff0c;但随机写入的性能仅约为100k/秒&#xff0c;相差6000倍以上。 4.2 网络模型 4.2.1 reactor模型 4.2.2 epo…

kubernetes项目部署

目录 ​一、容器交付流程 二、k8s平台部署项目流程 三、在K8s平台部署项目 一、容器交付流程 容器交付流程通常分为四个阶&#xff1a;开发阶段、持续集成阶段、应用部署阶段和运维阶段。 开发阶段&#xff1a;开发应用程序&#xff0c;编写Dockerfile; 持续集成阶段&#…

gradle 模块

目录 ​settings.gradle文件的作用 SourceSet类的作用 Plugin 插件 Java 对 Plugin 的扩展 settings.gradle文件的作用 settings用于配置哪些工程是要被gradle集成的&#xff0c;gradle 通过 Settings.java 类来处理 settings.gradle 文件。 gradle的初始化阶段&#xff0c…

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

大家好&#xff0c;欢迎来到停止重构的频道。 本期我们详细讨论直播的相关协议&#xff0c;包括&#xff1a;HTTP-FLV、HLS、RTMP、Web-RTC、RTSP等等。 我们将会详细介绍这些协议的工作原理、应用场景、及延迟的原因。 我们按这样的顺序讨论​ 1、 RTMP、HTTP-FLV 2、 …