news 2026/4/16 10:19:12

基于 C++实现(控制台)学生成绩管理系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 C++实现(控制台)学生成绩管理系统

学生成绩管理系统

1.系统需求分析

学生成绩管理系统记录了学生大一的各科成绩及每门课程的成绩,它包括:学期、姓名、班级(汉字)、学号、科目、学分、分数,试设计学生成绩管理系统,使之能提供以下功能:

  1. 录入、修改学生的各科的成绩信息:从键盘输入数据(提示:为避免重复从键盘输入数据,测试时可将数据存储在文件中,利用输入重定向功能读入),输入格式为:学期姓名班级学号科目学分分数。每行一条记录。并在输入不合法记录时报错。若该信息已存在则覆盖原信息。系统根据分数得到该信息对应的评级、学分绩及是否挂科。

a)例如:大一上学期王世杰无七六 2016010539 工程制图 287b)此时系统得到该信息评级为 B+,学分绩为 3.3,未挂科。

  1. 查询某个学生某学期或整个学年各门课的成绩:按照分数降序排列,相同的课程按学分降序排列,并提供该课程的评级和学分绩。同时给出该时间段平均学分绩。
  2. 统计某课程所有学生总成绩情况,按照分数(总学分绩)降序排列,相同的按学号升序排列。
  3. 查询某课程所有学生成绩,按照分数(总学分绩)降序排列,相同的按学号升序排列。
  4. 统计学生挂科数并按降序排列,相同的按姓名升序排列。
  5. 系统以菜单方式工作。(所谓菜单指用户可以自由选择所要执行的功能。学生可以通过以上功能录入信息、修改信息、查询信息、整理统计出所要了解的信息,除了要实现上述的基本功能之外,本系统还应该在细节上下工夫,使用户使用方便)

2.总体设计

大一学生成绩管理系统包含五个大的功能,分别是:录入、修改学生成绩,查询某学生成绩,查询某课程所有学生成绩,查询所有学生总成绩情况,查询挂科情况。每个功能对应一个界面,每个界面均有操作提示,并可返回之前的界面。学生的成绩信息主要包含学期、姓名、班级(汉字)、学号、科目、学分、分数,以及根据分数转换得到的学分绩、评级和是否挂科。信息存储基于文件操作。

打开系统首先是进入欢迎界面,打出欢迎使用的字样。在欢迎界面,系统会自动根据存储信息的文件统计文件中的信息条数,创建录入信息类对象数组来存放最新版本的信息并将其写入文件。同时制作所有学生的 studentGrade 类对象数组。

紧接着进入主界面,有 6 个选项,分别是进入对应 5 个功能的界面及结束界面。在录入、修改学生成绩界面(page1),根据系统提示一次性输完一整条信息。若输入信息有误,如学期不正确(不为大一上学期或大一下学期),则报错,提示重新输入。系统根据信息的学期、姓名、科目信息判断是否为新信息,若为新信息则覆盖原信息。在退出该界面时,更新文件并统计文件中的信息数,创建录入信息类对象数组来存放最新版本的信息。同时制作所有学生的 studentGrade 类对象数组。

在查询某学生成绩界面(page2),用户首先输入要修改的学生学号,再选择要查询的学期。如果系统中没有该学生的相关信息,则系统会给相关提示。如果系统中有该学生的相关信息则按照分数降序排列,相同的课程按学分降序排列,并提供该课程的评级和学分绩。

在查询某课程所有学生成绩情况界面(page3),用户先输入要查询的学期和课程名,系统检索判断是否存在该课程。若不存在则提示系统中无此课程。若存在显示该课程所有学生成绩,按分数降序排列,分数相同则按学号升序排列。

在查询所有学生总成绩情况界面(page4),用户先根据提示选择查询的学期。显示该学期所有学生成绩,按平均学分绩降序排列,相同则按学号升序排列。

在查询挂科情况界面(page5),用户先根据提示选择查询的学期。显示该学期所有出现挂科情况的同学的挂科学分和挂科数目,按挂科数降序排列。相同按挂科学分降序排列。再相同按学号升序排列。在结束界面(page6),系统会自动清空所有动态内存、关闭文件,同时打出感谢使用本系统的字样,希望给用户最好的体验。

大一学生成绩管理系统中功能模块图:

3.详细设计

大一学生成绩管理系统中五个类的类层次图为:

图 2 大一学生成绩管理系统中五个类的类层次图

大一学生成绩管理系统中各功能模块的实现:

图 3 学生成绩管理系统中菜单函数的功能图

1、界面 1:录入、修改学生的成绩

2、界面 2:查询某学生成绩

3、界面 3:查询某课程所有学生成绩

4、界面 4:查询所有学生总成绩

5、界面 5:查询挂科情况

6、欢迎界面

7、结束界面

大一学生成绩管理系统中五个类的 UML 图为:

图 9 大一学生成绩管理系统中五个类的 UML 图(类名/保护成员/公有成员)

4.系统调试

程序编写完成后,我进行了调试。调试过程中,出现了以下三个主要问题:

1.以姓名为关键词不能对重名现象进行很好的结局。编一开始我才去以姓名为关键字进行搜索,在室友的提醒下,我将程序改为用学号为关键词进行搜索,解决了这一问题。
2.系统应对错误输入的能力严重不足。最初版本的程序对输入没有任何检测,经常会出现原本应输入汉字或汉字的地方我输入一堆字母,系统没有任何提示,并将错误输入写入了文件中,导致在检索、排序的时候以及显示所有学生成绩的时候,出现重大问题。于是我在所有需要输入的地方加入了检测功能,一旦输入不合要求就出现提示并重新回到输入界面。

3.系统应对大量误操作时会崩溃。作为开发者我对程序较为了解,输入等操作比较合法,也比较舒缓。当我把系统交给我室友检测时,他在短时间内随便按下键盘,这就导致在主界面短时间内出现大量误操作。当时我将 update 部分放在了进入主界面时执行,而主界面出现误操作后会重新进入主界面,这就意味着如果主界面短时间出现大量误操作,就需要短时间内执行多次 update,而 update 部分需要执行扫描整个文件、排序、重新写入文件、建立 studentGrade 对象动态数组等多个步骤,执行需要时间相对较长。这导致系统无法在短时间内处理多次 update,所以系统会崩溃。由于 update 函数无法更改,我就尝试从其他角度解决这个问题。我想到 update 函数负责更新,而只有在信息发生变化的时候才需要进行更新。在本系统中只有界面 1 会对信息进行更改,于是我将 update 函数放在了界面 1 返回主界面的时候执行,有考虑到可能使用者不会对信息进行修改,又在欢迎界面开始处执行一次 update 以建立 studentGrade 对象动态数组。这样就解决了主界面无法承受大量误操作的问题。

这种发现问题并解决问题的过程对我的帮助很大,通过对程序的设计和测试,我意识到开发一个成熟的系统需要非常的耐心以及不停的完善,后期测试也必不可少。这次程序设计真的让我在程序调试方面有了很大的进步。

5.测试结果与分析

本程序的测试数据文件是 grade.txt,,测试结果截图如图所示。

原始文件截图

欢迎界面

主界面及其错误操作反馈演示

界面 1:错误操作反馈演示

界面 1:录入修改学生成绩操作演示

经过上述操作后存储信息文件的变化

界面 2:查询某学生成绩操作演示

界面 3:查询某课程所有学生成绩操作演示

界面 4:查询所有学生总成绩操作演示

界面 5:查询挂科情况操作演示

界面 6:退出界面

这次大作业总得来说完成的还算顺利,主要原因是老师要求在正式做大作业前先做一份选题报告。这份选题报告帮了我大忙。它让我在一开始就想好了程序的架构,如:需要实现的功能及如何实现、如何实现题目要求的四个类等,同时了解了工作量方便安排计划。这让我有了一个非常顺利的开始。但在开始编写之后仍遇到了不小的麻烦。

第一个问题是如何存放代码。我一开始的想法是头文件放类和类的函数,之后一个文件存放界面,一个文件存放界面的操作。但后来发现这样做存放操作的文件代码量太大,而且各个界面分别的不够鲜明,不利于编译和工作的进行。于是我就改成了每个界面对应一个文件,通过主界面统一调用,解决了上面的问题,有力地推进了工作。

第二个问题是规划不到位,在动手编程前没有确定算法,经常是编写到一大半想到更好的算法、更简单的代码,但是已经无法更改了,导致代码不够简洁,有很多效率很低的算法以及很多重复代码。这让我明白在开始写代码前,一定要将每一个细节都想明白,甚至要动笔去写下来,而不是脚踩西瓜皮写到哪是哪。

第三个问题是全局变量、全局函数的使用。我对“全局”的理解非常不到位。开始编程时我连如何使用都不知道。了解如何使用之后我却未对全局变量做好规划,导致了变量乱取名、多声明了一些全局变量等问题。在编程前一定要将全局变量规划好,不能编到一半发现需要了再去声明。

第四个问题是不注意细节。经常出现 i、j,1、l,<、>,=、==,&、&&之类的字母、数字、符号打错,导致程序崩溃,浪费了大量时间在调试上。这个问题必须要引起重视!

希望能吸取这次大作业的经验教训,为以后的编程打好基础。

6.总结

这次大作业让我的编程能力有了很大的提升。这是我第一次为实际满足需求编写一个较大的程序,很贴近实际情况。刚拿到题目时我不知所措、心乱如麻不知如何下手。冷静下来思考之后发现,只需根据功能将程序分成一个个界面,之后各个击破即可。这种将一个大问题拆成很多小问题各个击破的方式很有作用。同时编写这种代码数较多的程序对我的调试能力也有很大提升。

这次大作业同时提升了我对课上学习的基础知识的理解。尤其是全局变量、全局函数以及类的多继承、虚函数这几部分。由于笔试不考所以学完了就忘掉了,这次大作业让我明白这些知识有多么重要,使用起来多么方便。

这次大作业对我最大的提升是解决问题的能力。遇到不会的地方翻书找、上网查、问同学;编译出错了根据提示上网搜索出错原因;和同学们一起讨论算法、讨论解决问题的最优方式……这种发现问题、解决问题的过程真的很迷人。

总之,这次大作业提升了我的编程能力,增加了我对编程的兴趣,提高了我的自信心,让我明白了细节的重要性,让我受益匪浅。

♻️ 资源

大小:1.59MB

➡️资源下载:https://download.csdn.net/download/s1t16/87404319

注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 7:42:40

Vue-路由懒加载与组件懒加载

前言 在构建大型单页应用&#xff08;SPA&#xff09;时&#xff0c;JavaScript 包体积&#xff08;Bundle Size&#xff09;往往会随着业务增长而膨胀&#xff0c;导致首屏加载缓慢、白屏时间长。懒加载&#xff08;Lazy Loading&#xff09; 是解决这一问题的核心方案。其本质…

作者头像 李华
网站建设 2026/4/15 7:51:33

AI 智能体营销与餐厅结合

AI 智能体营销与餐厅结合 深圳刺身配送 - 新号启动内容策略项目背景用户激活四阶段模型第一阶段&#xff1a;认识→认知&#xff08;价值同步&#xff09;核心问题需要回答的6个问题第一阶段内容规划&#xff08;发布顺序&#xff09;内容1&#xff1a;痛点唤醒内容2&#xff1…

作者头像 李华
网站建设 2026/4/16 7:44:33

深度剖析!十五五时期职业教育发展的 4 大核心发展要点

一、"十五五"时期职业教育发展的时代要求 "十五五"时期&#xff08;2026—2030年&#xff09;是我国迈向2035年远景目标、推动高质量发展取得新突破的关键阶段。《建议》聚焦全局性、长远性重大问题作出系统部署&#xff0c;可从三个维度把握职业教育面临…

作者头像 李华
网站建设 2026/4/15 20:47:00

视频转GIF表情怎么弄?在线一键转换,高清流畅无水印

聊天斗图、社群互动、朋友圈整活、自媒体趣味配图&#xff0c;都离不开好用的GIF表情。相比于网上千篇一律的现成表情包&#xff0c;把喜欢的视频片段转成GIF表情&#xff0c;更有个性、更贴合场景&#xff0c;也更容易成为爆款斗图素材。但自己做视频转GIF表情时&#xff0c;很…

作者头像 李华
网站建设 2026/4/16 7:43:49

基于PLC控制的伺服电机的转速控制系统的软件设计

基于PLC控制的伺服电机转速控制系统的软件设计 第一章 绪论 伺服电机转速精准控制是工业自动化设备的核心技术需求&#xff0c;传统伺服电机转速控制多采用专用控制器或简易PLC逻辑&#xff0c;存在转速调节响应滞后、抗干扰能力弱、适配性差等问题&#xff0c;难以满足高精度…

作者头像 李华
网站建设 2026/4/16 7:42:26

基于PLC和组态软件的智能停车场收费系统模拟与实现

基于PLC和组态软件的智能停车场收费系统模拟与实现 第一章 绪论 智能停车场收费系统是城市交通与物业管理的核心配套设施&#xff0c;传统停车场收费多依赖人工计费、手动抬杆&#xff0c;存在计费误差大、通行效率低&#xff08;单车道通行耗时≥20秒&#xff09;、数据统计…

作者头像 李华