当前位置: 首页 > news >正文

基于C++实现一个简单的(控制台)班级成绩管理系统

“班级成绩管理系统”系统设计文档

1 系统总体描述

实现一个控制台应用用来进行班级成绩的管理,功能大致有:有班级、学生、成绩的增、删、改、查;进行学生排名,前十名获得奖学金;按照一定规则计算班级得分,获得最高分的班级评为优秀班级。

2 相关功能描述

  1. 由用户设置所有课程的名称、成绩所占权重(一旦设定,则程序运行结束前不能更改);
  2. 显示菜单,根据用户输入判断执行什么操作;
  3. 添加新班级(同时批量添加学生);
  4. 添加学生(先确定加入的班级);
  5. 删除班级;
  6. 删除学生;
  7. 查找班级;
  8. 查找学生;
  9. 修改学生信息;
  10. 排名并评选奖学金;
  11. 评选优秀班级(先执行功能 10)。
  12. 实现班级管理、学生管理、成绩管理的基本功能,包括增、删、改、查。
  13. 按规则实现年级奖学金评定功能,具体规则为:将每门课程的学分设置权重,采用
  14. 加权平均的方式计算平均成绩,成绩最好的前 10 名获得奖学金。
  15. 按规则实现优秀班级评定功能,具体规则为:按照一下公式计算班级得分:

班级得分=(获得奖学金的人数20+(所有课程都及格人数-获得奖学金的人数)80)/班级总人数。班级得分最高的班级为优秀班级。

2 系统主要结构

2.1 概述

根据系统功能的要求,基本需要设计三个类:Lesson 类,Student 类以及 Class 类。它们分别代表某门课程,某个学生,某个班级的抽象。最后还需要设计一个 SystemManager 类来进行系统的管理和与用户的交互。

2.2 Lesson 类

包括课程名,课程成绩权重,课程成绩等私有属性以及相关外部接口,和判断该课程成绩是否及格的方法。

图 2.1 Lesson 类

2.3 Student 类

包含学生所学课程所组成的数组,包含学生的姓名,加权成绩,是否获得奖学金,是否全部课程都及格的私有属性及外部接口,和修改单个学生信息,设置单个学生各门课的成绩,显示单个学生的信息等方法。

图 2.2 Student 类

2.4 Class 类

包含班级中的学生组成的数组,包含该班级的总人数,班级编号,获得奖学金的人数,最终班级得分及外部接口,和向数组中添加学生,显示班级信息,增加和减少班级人数,计算班级分数等方法。

图 2.3 Class 类

2.5 SystemManager 类

本类设计为功能最强的类,用来管理整个系统,实现与用户的交互。包含一个由所有班级组成的数组,含有显示菜单,退出系统,初始化课程,添加新班级,显示目前系统中所有信息,添加新学生,查找班级,查找学生,删除班级,删除学生,改动学生信息,清除所有信息降序排名,评选奖学金,评定优秀班级等方法。

图 2.4 SystemManager 类

2.6 主程序过程设计

图 2.5 运行流程

  1. 运行开始后先由用户进行课程的初始化,包括数目,名称,权重。
  2. 显示菜单,提示用户输入选项。
  3. 根据用户输入选择执行的操作。
  4. 执行相关操作,若选择退出系统,则退出,否则在执行完后返回第 2 步。

3 相关成果截图

1)初始化课程。

2)显示菜单。

3)未输入任何信息的时候,系统会打印提示信息。

4)添加班级(以编号为 2 的班级为例)。

5)查找班级(按照班级编号)。

6)修改学生信息(按照学生姓名查找)。(删除功能类似,都是先查找,再执行操作)

7)查找学生(按照学生姓名)。此时可以看到之前修改的学生信息已经成功得到修改。

8)排名并评选奖学金。(此后会输出提示信息,询问用户是否需要继续进行评选优秀班级的操作。此时如果选择否,则会清屏并重新显示菜单。如此设计是因为,在计算班级得分的规则中需要知道班级中共有几人获得了奖学金,故评选优秀班级的操作必须在排名并评选了奖学金后进行。反之,则会出现默认为所有班级中获得奖学金的人数均为零的情况)

9)评选优秀班级。

10)清空系统与清空后的输出。

11)退出系统。(退出系统后,在系统中保存的数据也丢失)

4 作业成果总结与反思

  1. 基本实现了要求的功能,进一步巩固了 C++ 程序设计的相关基础知识。
  2. 为了用动态数组来实现储存课程、学生、班级的对象,学习使用了 vector 容器,以及它相关的函数如 size()、clear()、push_back()和 erase()等。
  3. 为了实现根据成绩排名,自己动手实现了简单的冒泡排序算法。
  4. 根据现实世界三个类的特点,练习了对事物抽象的能力。设计了类似组合类的结构,例如 Student 类中含有一个 Lessons 类的 vector 动态数组作为其公有属性。
  5. 基本熟悉程序设计的流程,尤其是开始写代码之前的设计过程,开发过程中将类的定义的.h 的头文件和类的实现以及程序主体 main()函数分开在不同文件中,减小了单个文件的代码量,同时使开发过程更清晰。
  6. 有些设想的功能没有实现。比如课程一旦设置就无法修改,再如没有加入文件读写的功能,程序结束运行后所有数据就丢失了,这直接导致程序的实用性降低,而且增加了开发时调试的复杂程度,又如没有图形交互界面,等等。
  7. 程序中有部分遗留问题没有解决。除了在系统中没有信息时进行操作时程序会打印“系统中无任何信息”的提示信息外,本程序中绝大多数的输入没有检查输入合法性的检查。需要学习输入流的相关知识,了解 cin 的相关操作。
  8. Visual Studio 2019 的编译器输出了如下警告:

在网上尝试搜索原因和解决方法后,我认为是在

这段代码中,为了实现给所有学生成绩排序,我动态申请了一片内存用来存放一个指针数组,其中的每个元素都指向系统中的某个学生。因为有班级和学生两个层次,所以我定义了一个局部变量 already 来存目前已被“传到”数组中的学生信息,而它的值同时也是下一个将要被“传入”的数组位置的下标,每“传入”一个学生,already 都加 1。编译器认为在此过程中存在 already 的值可能过大导致数组下标越界的危险,因此输出了这个警告。我仔细了检查程序,认为这个地方不会越界,但是不知道如何修改才能消除这个警告。

♻️ 资源

大小:938KB

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

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

http://www.cnnetsun.cn/news/1628919.html

相关文章:

  • 内存暴涨却查不到源头?Python对象引用图谱分析法,手把手教你用tracemalloc+objgraph揪出“幽灵引用”
  • Pixel Aurora Engine 企业级应用:基于大模型的智能营销素材批量生成
  • Janus-Pro-7B快速原型开发:10分钟构建智能问答应用
  • LumiPixel Canvas Quest教育应用:生成历史人物或文学角色形象辅助教学
  • 如何把自己手动安装的 node 给 nvm 管理
  • UNIT-00模型在Markdown文档创作中的效果展示:以Typora风格为例
  • OpenClaw从入门到应用——频道:BlueBubbles
  • Ruoyi-Cloud整合Seata2.0踩坑实录:从Nacos配置到分布式事务实战
  • 电脑风扇噪音难忍?FanControl让散热管理变简单 - 开源智能风扇控制解决方案全解析
  • 利用Pixel Couplet Gen进行A/B测试:优化春节活动页面转化率
  • 5大核心功能解锁网页资源:猫抓开源工具让媒体捕获效率提升300%
  • 为什么WindTerm成为开发者的首选终端工具?深度评测与替代方案对比
  • ESP32实战指南:继电器与伺服电机的精准控制方案
  • 如何用Real-ESRGAN-GUI让模糊图片重获新生:双引擎AI图像超分辨率实战指南
  • 佳能全能清零软件报错5B00,5B01,5B02,1700,1701,1702,1704,P07,通过下面软件轻松修好,亲测完美。
  • LeetCode 128. Longest Consecutive Sequence 题解
  • cadence设置叠层
  • 实测阿里造相Z-Image-Turbo:8步生成惊艳图片,新手友好WebUI体验
  • 告别foobar2000界面痛点:foobox-cn如何3步打造沉浸式音乐体验
  • ML-Decoder实战:如何用这个万能分类头提升你的多标签分类模型性能(附代码)
  • 手把手教你用UML用例图梳理业务流程(附真实项目案例)
  • Wireshark抓包实战:用一道CTF题彻底搞懂IP分片与UDP重组
  • MySQL日期类型选择指南:告别纠结,选对类型
  • 别再只调参了!深入WDCNN第一层宽卷积核:为什么它对振动信号诊断这么有效?
  • 深入解析UDS协议中的0x28通讯控制服务
  • AI梯度下降与交叉熵损失的核心思想解析
  • 别只跑Demo了!用Qwen2-VL-7B-Instruct模型打造你的本地多模态AI助手:从图片分析到文档问答
  • 收藏!AI时代高薪抢人大战,普通程序员如何不被裁,抓住升薪机遇?
  • 3步实现高效转换:让专业排版效率提升80%的开源解决方案
  • 如何用Mermaid Live Editor 5分钟创建专业图表