基于C++实现一个简单的(控制台)班级成绩管理系统
“班级成绩管理系统”系统设计文档
1 系统总体描述
实现一个控制台应用用来进行班级成绩的管理,功能大致有:有班级、学生、成绩的增、删、改、查;进行学生排名,前十名获得奖学金;按照一定规则计算班级得分,获得最高分的班级评为优秀班级。
2 相关功能描述
- 由用户设置所有课程的名称、成绩所占权重(一旦设定,则程序运行结束前不能更改);
- 显示菜单,根据用户输入判断执行什么操作;
- 添加新班级(同时批量添加学生);
- 添加学生(先确定加入的班级);
- 删除班级;
- 删除学生;
- 查找班级;
- 查找学生;
- 修改学生信息;
- 排名并评选奖学金;
- 评选优秀班级(先执行功能 10)。
- 实现班级管理、学生管理、成绩管理的基本功能,包括增、删、改、查。
- 按规则实现年级奖学金评定功能,具体规则为:将每门课程的学分设置权重,采用
- 加权平均的方式计算平均成绩,成绩最好的前 10 名获得奖学金。
- 按规则实现优秀班级评定功能,具体规则为:按照一下公式计算班级得分:
班级得分=(获得奖学金的人数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 运行流程
- 运行开始后先由用户进行课程的初始化,包括数目,名称,权重。
- 显示菜单,提示用户输入选项。
- 根据用户输入选择执行的操作。
- 执行相关操作,若选择退出系统,则退出,否则在执行完后返回第 2 步。
3 相关成果截图
1)初始化课程。
2)显示菜单。
3)未输入任何信息的时候,系统会打印提示信息。
4)添加班级(以编号为 2 的班级为例)。
5)查找班级(按照班级编号)。
6)修改学生信息(按照学生姓名查找)。(删除功能类似,都是先查找,再执行操作)
7)查找学生(按照学生姓名)。此时可以看到之前修改的学生信息已经成功得到修改。
8)排名并评选奖学金。(此后会输出提示信息,询问用户是否需要继续进行评选优秀班级的操作。此时如果选择否,则会清屏并重新显示菜单。如此设计是因为,在计算班级得分的规则中需要知道班级中共有几人获得了奖学金,故评选优秀班级的操作必须在排名并评选了奖学金后进行。反之,则会出现默认为所有班级中获得奖学金的人数均为零的情况)
9)评选优秀班级。
10)清空系统与清空后的输出。
11)退出系统。(退出系统后,在系统中保存的数据也丢失)
4 作业成果总结与反思
- 基本实现了要求的功能,进一步巩固了 C++ 程序设计的相关基础知识。
- 为了用动态数组来实现储存课程、学生、班级的对象,学习使用了 vector 容器,以及它相关的函数如 size()、clear()、push_back()和 erase()等。
- 为了实现根据成绩排名,自己动手实现了简单的冒泡排序算法。
- 根据现实世界三个类的特点,练习了对事物抽象的能力。设计了类似组合类的结构,例如 Student 类中含有一个 Lessons 类的 vector 动态数组作为其公有属性。
- 基本熟悉程序设计的流程,尤其是开始写代码之前的设计过程,开发过程中将类的定义的.h 的头文件和类的实现以及程序主体 main()函数分开在不同文件中,减小了单个文件的代码量,同时使开发过程更清晰。
- 有些设想的功能没有实现。比如课程一旦设置就无法修改,再如没有加入文件读写的功能,程序结束运行后所有数据就丢失了,这直接导致程序的实用性降低,而且增加了开发时调试的复杂程度,又如没有图形交互界面,等等。
- 程序中有部分遗留问题没有解决。除了在系统中没有信息时进行操作时程序会打印“系统中无任何信息”的提示信息外,本程序中绝大多数的输入没有检查输入合法性的检查。需要学习输入流的相关知识,了解 cin 的相关操作。
- Visual Studio 2019 的编译器输出了如下警告:
在网上尝试搜索原因和解决方法后,我认为是在
这段代码中,为了实现给所有学生成绩排序,我动态申请了一片内存用来存放一个指针数组,其中的每个元素都指向系统中的某个学生。因为有班级和学生两个层次,所以我定义了一个局部变量 already 来存目前已被“传到”数组中的学生信息,而它的值同时也是下一个将要被“传入”的数组位置的下标,每“传入”一个学生,already 都加 1。编译器认为在此过程中存在 already 的值可能过大导致数组下标越界的危险,因此输出了这个警告。我仔细了检查程序,认为这个地方不会越界,但是不知道如何修改才能消除这个警告。
♻️ 资源
大小:938KB
➡️资源下载:https://download.csdn.net/download/s1t16/87415909
注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!
