基于C语言设计的学生成绩管理系统

资源下载地址:https://download.csdn.net/download/sheziqiong/85651924
设计及要求

问题描述:

设学生信息包括:学号、姓名、学期、每门课程的成绩(每学期的课程门数是不一样的) ,对学生的成绩信息进行管理。

实现要求:

实现:学生信息的录入;修改;删除和查询,按学期、学号、成绩不及格等查询。

⑴ 输入学生的成绩信息,包含学号、姓名、性别等基本信息和各课成绩

⑵ 显示全部学生各科成绩信息;

⑶ 对各科成绩统计分析(总分、平均分、最高分、最低分、及格率等);

⑷ 统计各科各分数段人数;

⑸ 按学号或姓名查找并显示某个学生的各科成绩;

⑹ 按课程成绩或总分由高到低排序显示;

⑺ 更新某个学生的基本信息或课程成绩;

⑻ 设计一个字符菜单界面,具有上述规定的操作要求、退出系统等最基本的功能。

总体分析与设计

该程序包括 2 个头文件和 1 个源文件和 3 个文本文件。3 个头文件名分别是:operator.h、GradeManagement.h;源文件名为 Test.cpp,

3 个文本文件名分别是 stu_info.txt、cou_intfo.txt、stu_grade.txt。

其具体作用如下:

文件名 作用
operator.h 程序功能函数的具体实现
GradeManagement.h 头文件和自定义类型的声明
Test.cpp 启动程序
stu_info.txt 学生信息文件
cou_intfo.txt 课程信息文件
stu_grade.txt 学生成绩文件

详细设计

本程序有多个类,类中具体内容如下图所示:

基于C语言设计的学生成绩管理系统_第1张图片

基于C语言设计的学生成绩管理系统_第2张图片

具体设计思路

由设计需求可知,增删查改,用的最频繁的功能会是查询,同时学号与学生之间,课程与课程号之间也存在映射关系,自然选用 STL 库中的 map 和 set 作为容器,因为其底层是红黑树实现,效率很高,但是由于学生与成绩多对多,故容易出现数据冗余,结合数据库范式相关知识决定将学号作为学生的唯一标识,将课程号作为课程的唯一标识。

获得信息的方式都是通过映射,成绩只存储一份在总成绩单中,从总成绩单中获得单科成绩。

通过学号获得学生的具体信息,通过课程号获得课程的具体信息。

排序选用 algorithm 中的 sort 函数,底层是快排,效率也十分可观,同时利用记录等方式避免多次重复排序。

核心类

Couse 类

存储着课程的基本信息

基于C语言设计的学生成绩管理系统_第3张图片

Student 类

存储着学生的基本信息

基于C语言设计的学生成绩管理系统_第4张图片

StuTable

学生信息表,可通过文件或者手动录入的方式录入数据

基于C语言设计的学生成绩管理系统_第5张图片

CouTable

课程信息表,可通过文件或者手动录入的方式录入数据

基于C语言设计的学生成绩管理系统_第6张图片

CourseGrade 类

CourseGrade 存储着课程号、成绩和考试状态(缺考,作弊等定义为不正常,成绩置为 0)。通过课程号可以获取课程的具体信息。

基于C语言设计的学生成绩管理系统_第7张图片

GradeTable 类

GradeTable 是核心类,通过学号可以找到这个学生所有的课程成绩。学号可以找到一个 set 容器,容器里放的是 CourseGrade 类型。

基于C语言设计的学生成绩管理系统_第8张图片

CourseGradeTab 类

课程成绩单,不存储具体信息,只存储选了这门课的学生学号,通过学号再去获取这门课的成绩和学生的具体信息。

算法

下面算法均只举一个例子,代码实现中可能实现多个,但是实现思路大体相同。

map 和 set 排序自定义类型,可以通过仿函数和重载运算符的方法,这里采用后一种,重载了小于号(bool operator<(…))

map 为 Key-Value 结构,默认以 Key 排序,排序成绩时需要通过 Value。所以这里根据 value 对 map 进行排序,写一个比较函数,再利用库函数 sort 进行自定义排序

基于C语言设计的学生成绩管理系统_第9张图片

数据结构

数据结构采用红黑树、顺序表和字符串,表现为 map,set,vector 和 string。利用合理的数据结构和准确的映射(哈希)可以大大提高程序运行的效率

输入与输出

输入采用文件读取和手动输入两种方式,文件读取用了 ifstream 流,手动输入和输出通过外部设备(显示器)完成。

此外,程序功能过多,使用起来界面难以区分,利用部分 Windows 编程修改了控制台的标签,字体,颜色等,功能的颜色也不尽相同,便于用户操作。

文件读取时由于需要判断文件是否为空和文件是否存在,所以文件首行加了字符’/’作为标志,若去掉会导致读取错误,如信息遗漏,此外为了防止末行数据重复读取,文件末尾并没有设置换行!

基于C语言设计的学生成绩管理系统_第10张图片

  • 调试与测试

加载学生文件

基于C语言设计的学生成绩管理系统_第11张图片

加载课程文件

基于C语言设计的学生成绩管理系统_第12张图片

加载学生成绩文件

基于C语言设计的学生成绩管理系统_第13张图片

查看成绩

基于C语言设计的学生成绩管理系统_第14张图片

查看所有人成绩(自动清屏)

基于C语言设计的学生成绩管理系统_第15张图片

删除

基于C语言设计的学生成绩管理系统_第16张图片

删除后查看所有人成绩

基于C语言设计的学生成绩管理系统_第17张图片

修改学生成绩

更改学生信息

基于C语言设计的学生成绩管理系统_第18张图片

对学生成绩进行排序和分类

基于C语言设计的学生成绩管理系统_第19张图片

退出程序

基于C语言设计的学生成绩管理系统_第20张图片
基于C语言设计的学生成绩管理系统_第21张图片

资源下载地址:https://download.csdn.net/download/sheziqiong/85651924

你可能感兴趣的:(C语言,学生成绩管理,成绩管理系统,课程设计,源码)