资源下载地址:https://download.csdn.net/download/sheziqiong/85697407
一、学生成绩管理系统程序设计报告
二、学生成绩管理系统设计报告
2.1 人员组成及分工
2.1.1 人员组成及分工
学号 |
姓名 |
任务 |
完成工作量 |
|
|
设计程序算法及程序主体 |
50% |
|
|
功能测试、界面优化及文案负责 |
50% |
2.2 开发背景
为了更好的了解学生的学习情况,以对学生进行更详细的了解,对未来的教学有相应的规划,同时为了便于期末总结,我们设计了一套学生成绩管理系统。
在本次课程设计中,操作者根据清单上的提示对于不同的学生进行分数的录入、修改、查询以及获取相应的统计结果,并支持数据的输出。
2.3 系统功能设计
2.3.1 系统功能模块图
图 3-1 系统功能模块图
2.3.2 系统业务流程图
图 3-2 业务流程图
2.4 项目创建
2.4.1 系统开发环境要求
本项目的开发及运行环境要求:
- 操作系统:windows 7, windows 10
- 开发工具:Code Blocks 17.12, Visual Studio Code
- 开发语言:C 语言
2.4.2 项目创建过程
打开 Code Block
图 4-1 Code Block 使用界面
2.4.2 点击“open an existing project”,并选中“Console application”
图 4-2 工程创建界面
选择 C,并点击 next
图 4-3 创建 C 工程
填写项目名称以及路径。
图 4-4 填写项目名称和工程路径
直点击 next 默认配置,最后点击 Finish 完成工程创建。
图 4-4 完成工程创建
点击 File->Empty file,创建并命名第一个 C 文件并编写代码
图 4-4 创建 C 文件
2.5 预处理模块设计
2.5.4 函数声明
- void Print(STU *head, int n, int m)
- 输入参数:学生链表,学生数,考试科目数量
- 输出参数:null
- 实现功能:输出链表中所有节点
- void AverSumofEveryStudent(STU *head)
- 输入参数:学生链表
- 输出参数:null
- 实现功能:计算每门课程的总分和平均分
- void AverSumofEveryCourse(STU *head)
- 输入参数:学生链表
- 输出参数:null
- 实现功能:计算每个学生的总分和平均分
- void StatisticAnalysis(STU *head, int n, int m)
- 输入参数:学生链表,学生数,考试科目数量
- 输出参数:null
- 实现功能:按类别及比例输出
- STU *SortbyScore(STU *head, int n)
输入参数:学生链表,学生数
输出参数:学生链表头结点
- 实现功能:按每个学生的总分由高到低排出名次表
- STU *SortbyScore1(STU *head, int n)
- 输入参数:学生链表,学生数
- 输出参数:学生链表头结点
- 实现功能:按每个学生的总分由低到高排出名次表
- STU *SortbyNum(STU *head)
输入参数:学生链表
输出参数:学生链表头结点
- 实现功能:按学号由小到大排出成绩表
- STU *SortbyName(STU *head, int n)
输入参数:学生链表,学生数,考试科目数量
输出参数:学生链表头结点
- 实现功能:按姓名的字典顺序排出成绩表
- STU *Create(int n, int m)
- 输入参数:学生数,考试科目数量
- 输出参数:学生链表头结点
- 实现功能:创建链表并录入信息
- void SearchbyNum(STU *head, int n, int m)
输入参数:学生链表,学生数,考试科目数量
输出参数:null
- 实现功能:按学号查询学生排名及其考试成绩
- void SearchbyName(STU *head, int n, int m)
输入参数:学生链表,学生数,考试科目数量
输出参数:null
- 实现功能:按姓名查询学生排名及其考试成绩
- void WritetoFile(STU *head, int n, int m)
输入参数:学生链表,学生数,考试科目数量
输出参数:null
- 实现功能:将每个学生的纪录信息写入文件
- STU *ReadfromFile(STU *head, int *n, int *m)
输入参数:学生链表,学生数,考试科目数量
输出参数:学生链表头结点
- 实现功能:从文件中读出每个学生的纪录信息并显示
- int DeleteFromFile(STU *head, int *n, int *m);
输入参数:学生链表,学生数,考试科目数量
输出参数:不存在数据或没有数据返回 0,成功删除返回 1
- 实现功能:物理删除(删除在文件中的数据)
- STU *getAllMessageFromFile(STU *head, int count0[], int count1[], int *count2)
输入参数:学生链表,学生数,考试科目数量
输出参数:学生链表头结点
- 实现功能:获取文件中所有的学生成绩数据,并组成单链表
- STU *ModifyScore(STU *head)
输入参数:学生链表,学生数,考试科目数量
输出参数:学生链表头结点
2.6 模块详细设计
2.6.1 成绩录入模块
2.6.2 录入新的学生成绩记录(临时区)
- 功能描述:用户在系统主界面输入数字 “1” ,进入录入成绩功能,根据提示依次输入学生数量、考试科目数量,并依次输入每个学生的学号、姓名和各科成绩,最后按下回车将成绩提交到临时区。
- 算法流程:
int Menu(void); //函数1:创建菜单函数
STU *Create(int n, int m); //函数10:创建链表并录入信息
2.6.3 将临时区数据保存到文件中
- 功能描述:用户在系统主界面输入数字 “12” ,即可将临时区的学生成绩信息保存到 student.txt 文件中
- 算法流程:
void WritetoFile(STU *head, int n, int m); //函数13:将每个学生的纪录信息写入文件
2.6.4 成绩导出模块
2.6.5 导出未保存的学生成绩信息(临时区)
- 功能描述:用户在系统主界面输入数字 “11” ,进入临时区数据导出模块,此时界面会输出仍未保存的学生成绩数据,或临时区没有数据的提示信息。
- 算法流程:
void Print(STU *head, int n, int m); //函数2:打印函数
2.6.6 导出已保存的学生成绩信息(文件)
- 功能描述:用户在系统主界面输入数字 “12” ,进入文件数据导出模块,此时界面会输出保存在 student.txt 的所有学生成绩。如果文件不存在或没有数据,则会输出 “student.txt 不存在或没有数据"的提示信息。
- 算法流程:
STU *ReadfromFile(STU *head, int *n, int *m); //函数14:从文件中读出每个学生的纪 录信息并显示
void Print(STU *head, int n, int m); //函数2:打印函数void Print(STU *head, int n, int m);
2.6.7 排序模块
根据成绩总分的升序、降序进行排序
- 功能描述:用户在系统主界面输入“4”进入降序排列,输入“5”进入升序排列。
- 算法流程:首先调用 getAllMessageFromFile 函数从文件读取已经存入的信息,获得链表的头结点,再遍历链表,将总分作为对比依据进行冒泡排序,最后输出。
- 相关函数:
- STU *SortbyScore(STU *head, int n); //函数 6:按每个学生的总分由高到低排出名次表
- STU *SortbyScore1(STU *head, int n); //函数 7:按每个学生的总分由低到高排出名次表
- 测试结果:
根据学号的升序进行排序
- 功能描述:用户在系统主界面输入“6”进入。
- 算法流程:首先调用 getAllMessageFromFile 函数从文件读取已经存入的信息,获得链表的头结点,再遍历链表,将学号作为对比依据进行冒泡排序,最后输出。
- 相关函数:与 7.1 的算法相似
- 测试结果:
根据学生姓名的字典序进行排序
- 功能描述:用户在系统主界面输入“7”进入。
- 算法流程:首先调用 getAllMessageFromFile 函数从文件读取已经存入的信息,获得链表的头结点,再遍历链表,将姓名首字母的字典序作为对比依据进行冒泡排序,最后输出。
- 相关函数:
- STU *SortbyNum(STU *head); //函数 8:按学号由小到大排出成绩表
- 测试结果:
2.7 UI 界面设计模块
功能描述:展示操作界面
算法流程:
主界面根据序号展示相关操作,使用*作为边框
具体操作界面首先清屏,以实现更加简洁的展示便于操作,并使用*号分割
相关函数:
int Menu(void); //函数 1:创建菜单函数
测试结果:
2.8 条件查询模块
2.8.1 按学生学号查询排名及其考试成绩
- 功能描述:用户在系统主界面输入数字 “8” ,进入按学生学号查询排名及其考试成绩,此时按照界面提示输入查询的学号。如果学号不存在或 student.txt 没有数据,则会输出 “抱歉,没有找到相关记录"的提示信息。
- 算法流程:
//函数11:按学号查询学生排名及其考试成绩
void SearchbyNum(STU *head, int n, int m);
//函数16:获取文件中所有的学生成绩数据,并组成单链表
STU *getAllMessageFromFile(STU *head, int count0[], int count1[], int *count2);
2.8.2 按学生姓名查询排名及其考试成绩
- 功能描述:用户在系统主界面输入数字 “9” ,进入按学生学号查询排名及其考试成绩,此时按照界面提示输入查询的姓名。如果学号不存在或 student.txt 没有数据,则会输出 “抱歉,没有找到相关记录"的提示信息。
- 算法流程:
//函数12:按姓名查询学生排名及其考试成绩
void SearchbyName(STU *head, int n, int m);
//函数2:打印函数
void Print(STU *head, int n, int m);
2.9 成绩修改模块
- 功能描述:用户在系统主界面输入数字 “16” ,此时按照界面提示,输入即将修改的记录所对应的学号。如果学号不存在,则会输出 “抱歉,没有找到相关记录"的提示信息。否则,系统会打印出该学号对应的成绩记录并提示你需要修改的是学号、姓名还是科目成绩。如果是学号,则输入新的学号进行提交;如果是姓名,则输入新的姓名并进行提交;如果是科目成绩,则先输入是该科目的序号,再输入新的分数进行提交。
- 算法流程:
//函数17 用于修改学生成绩信息
STU *ModifyScore(STU *head);
//函数16:获取文件中所有的学生成绩数据,并组成单链表
STU *getAllMessageFromFile(STU *head, int count0[], int count1[], int *count2);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CM2cefbw-1655641032737)(https://www.writebug.com/myres/static/uploads/2022/6/19/92cbe3dffa2b82ba214690584c3a73a1.writebug)]
2.10 成绩删除
- 功能描述:用户在系统主界面输入数字 “15” ,此时按照界面提示,输入即将删除的记录所对应的学号。如果学号不存在,则会输出 “抱歉,没有找到相关记录"的提示信息。否则,系统将会删除文件中该学号所在的成绩记录,并打印出删除成功的提示。
- 算法流程:
//函数15: 物理删除(删除在文件中的数据)
int DeleteFromFile(STU *head, int *n, int *m);
2.11 成绩统计计算
2.11.1 计算并输出每门课程的总分和平均分
- 功能描述:用户在系统主界面输入数字 “2” ,系统会输出每一门课程的所有学生的总分和平均分
- 算法流程:
函数 3:计算每门课程的总分和平均分
void AverSumofEveryStudent(STU *head);
//函数16:获取文件中所有的学生成绩数据,并组成单链表
STU *getAllMessageFromFile(STU *head, int count0[], int count1[], int *count2);
2.11.2 计算并输出每位学生的总分和平均分
- 功能描述:用户在系统主界面输入数字 “3” ,系统会输出每一门课程的所有学生的总分和平均分
- 算法流程:
//函数4:计算每个学生的总分和平均分
void AverSumofEveryCourse(STU *head);
//函数16:获取文件中所有的学生成绩数据,并组成单链表
STU *getAllMessageFromFile(STU *head, int count0[], int count1[], int *count2);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nwagYgWt-1655641032739)(https://www.writebug.com/myres/static/uploads/2022/6/19/75701896533ad83f3e5f0c1a66869ea3.writebug)]
2.11.3 对每门课程的成绩情况进行分段统计
- 功能描述:用户在系统主界面输入数字 “10” ,系统会输出按课程得分为 100、90~99、80~ 89、70~79、60~69 和不及格学生的人数,以及所占百分比
- 算法流程:
//函数5:按类别及比例输出
void StatisticAnalysis(STU *head, int n, int m);
//函数16:获取文件中所有的学生成绩数据,并组成单链表
STU *getAllMessageFromFile(STU *head, int count0[], int count1[], int *count2);
资源下载地址:https://download.csdn.net/download/sheziqiong/85697407