资源下载地址:https://download.csdn.net/download/sheziqiong/85697407
一、学生成绩管理系统程序设计报告
二、学生成绩管理系统设计报告
2.1 人员组成及分工
2.1.1 人员组成及分工
学号 |
姓名 |
任务 |
完成工作量 |
|
|
设计程序算法及程序主体 |
50% |
|
|
功能测试、界面优化及文案负责 |
50% |
2.2 开发背景
为了更好的了解学生的学习情况,以对学生进行更详细的了解,对未来的教学有相应的规划,同时为了便于期末总结,我们设计了一套学生成绩管理系统。
在本次课程设计中,操作者根据清单上的提示对于不同的学生进行分数的录入、修改、查询以及获取相应的统计结果,并支持数据的输出。
2.3 系统功能设计
2.3.1 系统功能模块图
![基于C语言的学生成绩管理系统_第1张图片](http://img.e-com-net.com/image/info8/d9c4935fe82844b687b5d85b21d6babe.jpg)
图 3-1 系统功能模块图
2.3.2 系统业务流程图
![基于C语言的学生成绩管理系统_第2张图片](http://img.e-com-net.com/image/info8/2fbb0d3a58d44270baf77c5d2ec1d409.jpg)
图 3-2 业务流程图
2.4 项目创建
2.4.1 系统开发环境要求
本项目的开发及运行环境要求:
- 操作系统:windows 7, windows 10
- 开发工具:Code Blocks 17.12, Visual Studio Code
- 开发语言:C 语言
2.4.2 项目创建过程
打开 Code Block
![基于C语言的学生成绩管理系统_第3张图片](http://img.e-com-net.com/image/info8/8ebdb95e154f4344976389a29bc27f3b.jpg)
图 4-1 Code Block 使用界面
2.4.2 点击“open an existing project”,并选中“Console application”
![基于C语言的学生成绩管理系统_第4张图片](http://img.e-com-net.com/image/info8/54ef19960ad24f279b604778b6551df3.jpg)
图 4-2 工程创建界面
选择 C,并点击 next
![基于C语言的学生成绩管理系统_第5张图片](http://img.e-com-net.com/image/info8/48153ee6055a4264b7c9278b0bc8c959.jpg)
图 4-3 创建 C 工程
填写项目名称以及路径。
![基于C语言的学生成绩管理系统_第6张图片](http://img.e-com-net.com/image/info8/e85561434a964d38bb706989bf6aad87.jpg)
图 4-4 填写项目名称和工程路径
直点击 next 默认配置,最后点击 Finish 完成工程创建。
图 4-4 完成工程创建
点击 File->Empty file,创建并命名第一个 C 文件并编写代码
![基于C语言的学生成绩管理系统_第7张图片](http://img.e-com-net.com/image/info8/0e424e7570f244bdb941391079de24df.jpg)
图 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” ,进入录入成绩功能,根据提示依次输入学生数量、考试科目数量,并依次输入每个学生的学号、姓名和各科成绩,最后按下回车将成绩提交到临时区。
- 算法流程:
![基于C语言的学生成绩管理系统_第8张图片](http://img.e-com-net.com/image/info8/3f6310536e51412aba0196ee0ccb840a.jpg)
int Menu(void); //函数1:创建菜单函数
STU *Create(int n, int m); //函数10:创建链表并录入信息
2.6.3 将临时区数据保存到文件中
- 功能描述:用户在系统主界面输入数字 “12” ,即可将临时区的学生成绩信息保存到 student.txt 文件中
- 算法流程:
![基于C语言的学生成绩管理系统_第9张图片](http://img.e-com-net.com/image/info8/1458e47c47a34281902da92174b9e00e.jpg)
void WritetoFile(STU *head, int n, int m); //函数13:将每个学生的纪录信息写入文件
![基于C语言的学生成绩管理系统_第10张图片](http://img.e-com-net.com/image/info8/5425ec88e10b4ce189c23c4120dd3080.png)
![基于C语言的学生成绩管理系统_第11张图片](http://img.e-com-net.com/image/info8/d5b2a86a64e54d589c73f73c2f7817cb.png)
2.6.4 成绩导出模块
2.6.5 导出未保存的学生成绩信息(临时区)
- 功能描述:用户在系统主界面输入数字 “11” ,进入临时区数据导出模块,此时界面会输出仍未保存的学生成绩数据,或临时区没有数据的提示信息。
- 算法流程:
![基于C语言的学生成绩管理系统_第12张图片](http://img.e-com-net.com/image/info8/660c8fa61601485285cef12d3fe5cf7a.jpg)
void Print(STU *head, int n, int m); //函数2:打印函数
![](http://img.e-com-net.com/image/info8/0bd2b631fdf54a1fb5f8aac921d25f85.jpg)
![基于C语言的学生成绩管理系统_第13张图片](http://img.e-com-net.com/image/info8/4c7ebda8068f4f1ab341dc9972273393.png)
2.6.6 导出已保存的学生成绩信息(文件)
- 功能描述:用户在系统主界面输入数字 “12” ,进入文件数据导出模块,此时界面会输出保存在 student.txt 的所有学生成绩。如果文件不存在或没有数据,则会输出 “student.txt 不存在或没有数据"的提示信息。
- 算法流程:
![基于C语言的学生成绩管理系统_第14张图片](http://img.e-com-net.com/image/info8/b67afcd8094d4b55b0567aea8f0c2697.jpg)
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);
![基于C语言的学生成绩管理系统_第15张图片](http://img.e-com-net.com/image/info8/e6df2d521bd7410ca292b029e0a44b40.png)
2.6.7 排序模块
根据成绩总分的升序、降序进行排序
- 功能描述:用户在系统主界面输入“4”进入降序排列,输入“5”进入升序排列。
- 算法流程:首先调用 getAllMessageFromFile 函数从文件读取已经存入的信息,获得链表的头结点,再遍历链表,将总分作为对比依据进行冒泡排序,最后输出。
- 相关函数:
- STU *SortbyScore(STU *head, int n); //函数 6:按每个学生的总分由高到低排出名次表
- STU *SortbyScore1(STU *head, int n); //函数 7:按每个学生的总分由低到高排出名次表
- 测试结果:
![基于C语言的学生成绩管理系统_第16张图片](http://img.e-com-net.com/image/info8/581153b1da7b49e29e544b42348de47a.jpg)
根据学号的升序进行排序
- 功能描述:用户在系统主界面输入“6”进入。
- 算法流程:首先调用 getAllMessageFromFile 函数从文件读取已经存入的信息,获得链表的头结点,再遍历链表,将学号作为对比依据进行冒泡排序,最后输出。
- 相关函数:与 7.1 的算法相似
- 测试结果:
![基于C语言的学生成绩管理系统_第17张图片](http://img.e-com-net.com/image/info8/c772197d56bd4223a3d8152d76282f70.jpg)
根据学生姓名的字典序进行排序
- 功能描述:用户在系统主界面输入“7”进入。
- 算法流程:首先调用 getAllMessageFromFile 函数从文件读取已经存入的信息,获得链表的头结点,再遍历链表,将姓名首字母的字典序作为对比依据进行冒泡排序,最后输出。
- 相关函数:
- STU *SortbyNum(STU *head); //函数 8:按学号由小到大排出成绩表
- 测试结果:
2.7 UI 界面设计模块
功能描述:展示操作界面
算法流程:
主界面根据序号展示相关操作,使用*作为边框
具体操作界面首先清屏,以实现更加简洁的展示便于操作,并使用*号分割
相关函数:
int Menu(void); //函数 1:创建菜单函数
测试结果:
![基于C语言的学生成绩管理系统_第18张图片](http://img.e-com-net.com/image/info8/0c59995aefec46e5af048c07afe48494.jpg)
2.8 条件查询模块
2.8.1 按学生学号查询排名及其考试成绩
- 功能描述:用户在系统主界面输入数字 “8” ,进入按学生学号查询排名及其考试成绩,此时按照界面提示输入查询的学号。如果学号不存在或 student.txt 没有数据,则会输出 “抱歉,没有找到相关记录"的提示信息。
- 算法流程:
![基于C语言的学生成绩管理系统_第19张图片](http://img.e-com-net.com/image/info8/19af39e0c1114586a7d6ba23592403ca.jpg)
//函数11:按学号查询学生排名及其考试成绩
void SearchbyNum(STU *head, int n, int m);
//函数16:获取文件中所有的学生成绩数据,并组成单链表
STU *getAllMessageFromFile(STU *head, int count0[], int count1[], int *count2);
![](http://img.e-com-net.com/image/info8/7aff3c5567ce465fbec1cc2f9e8b64d6.jpg)
![基于C语言的学生成绩管理系统_第20张图片](http://img.e-com-net.com/image/info8/9a4f18a1969345e7b6b149ae1deb1724.png)
2.8.2 按学生姓名查询排名及其考试成绩
- 功能描述:用户在系统主界面输入数字 “9” ,进入按学生学号查询排名及其考试成绩,此时按照界面提示输入查询的姓名。如果学号不存在或 student.txt 没有数据,则会输出 “抱歉,没有找到相关记录"的提示信息。
- 算法流程:
![基于C语言的学生成绩管理系统_第21张图片](http://img.e-com-net.com/image/info8/765934c96b5c4723a0efd3bdcd552a61.jpg)
//函数12:按姓名查询学生排名及其考试成绩
void SearchbyName(STU *head, int n, int m);
//函数2:打印函数
void Print(STU *head, int n, int m);
2.9 成绩修改模块
- 功能描述:用户在系统主界面输入数字 “16” ,此时按照界面提示,输入即将修改的记录所对应的学号。如果学号不存在,则会输出 “抱歉,没有找到相关记录"的提示信息。否则,系统会打印出该学号对应的成绩记录并提示你需要修改的是学号、姓名还是科目成绩。如果是学号,则输入新的学号进行提交;如果是姓名,则输入新的姓名并进行提交;如果是科目成绩,则先输入是该科目的序号,再输入新的分数进行提交。
- 算法流程:
![基于C语言的学生成绩管理系统_第22张图片](http://img.e-com-net.com/image/info8/69161e607cad46a682f1b3ac4abcd7db.jpg)
//函数17 用于修改学生成绩信息
STU *ModifyScore(STU *head);
//函数16:获取文件中所有的学生成绩数据,并组成单链表
STU *getAllMessageFromFile(STU *head, int count0[], int count1[], int *count2);
![基于C语言的学生成绩管理系统_第23张图片](http://img.e-com-net.com/image/info8/a8d55316e8f4447d9f6fbff35843de9d.jpg)
![基于C语言的学生成绩管理系统_第24张图片](http://img.e-com-net.com/image/info8/db2ef2bad1974aafbbcfb8910ec2b907.png)
![基于C语言的学生成绩管理系统_第25张图片](http://img.e-com-net.com/image/info8/7628af8d22164808be9bd08895e9b3cd.jpg)
![基于C语言的学生成绩管理系统_第26张图片](http://img.e-com-net.com/image/info8/db827d64f37b474db4a8d6c77f59f450.png)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CM2cefbw-1655641032737)(https://www.writebug.com/myres/static/uploads/2022/6/19/92cbe3dffa2b82ba214690584c3a73a1.writebug)]
2.10 成绩删除
- 功能描述:用户在系统主界面输入数字 “15” ,此时按照界面提示,输入即将删除的记录所对应的学号。如果学号不存在,则会输出 “抱歉,没有找到相关记录"的提示信息。否则,系统将会删除文件中该学号所在的成绩记录,并打印出删除成功的提示。
- 算法流程:
![基于C语言的学生成绩管理系统_第27张图片](http://img.e-com-net.com/image/info8/80bc388f42554ddf8e8b0538694f6fd3.jpg)
//函数15: 物理删除(删除在文件中的数据)
int DeleteFromFile(STU *head, int *n, int *m);
![基于C语言的学生成绩管理系统_第28张图片](http://img.e-com-net.com/image/info8/dfd0df689d1244469ffeb59895e80126.png)
![](http://img.e-com-net.com/image/info8/c6b1ac559e44430a89b9b2af7ae3070f.jpg)
2.11 成绩统计计算
2.11.1 计算并输出每门课程的总分和平均分
- 功能描述:用户在系统主界面输入数字 “2” ,系统会输出每一门课程的所有学生的总分和平均分
- 算法流程:
函数 3:计算每门课程的总分和平均分
void AverSumofEveryStudent(STU *head);
//函数16:获取文件中所有的学生成绩数据,并组成单链表
STU *getAllMessageFromFile(STU *head, int count0[], int count1[], int *count2);
![基于C语言的学生成绩管理系统_第29张图片](http://img.e-com-net.com/image/info8/4228a15f3e754f5aa973538cd5d69cde.png)
2.11.2 计算并输出每位学生的总分和平均分
- 功能描述:用户在系统主界面输入数字 “3” ,系统会输出每一门课程的所有学生的总分和平均分
- 算法流程:
![基于C语言的学生成绩管理系统_第30张图片](http://img.e-com-net.com/image/info8/fcf74e6b6d2d432dac0790b12f08cf8b.jpg)
//函数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 和不及格学生的人数,以及所占百分比
- 算法流程:
![基于C语言的学生成绩管理系统_第31张图片](http://img.e-com-net.com/image/info8/3853040ace624eef911f33776a48a232.jpg)
//函数5:按类别及比例输出
void StatisticAnalysis(STU *head, int n, int m);
//函数16:获取文件中所有的学生成绩数据,并组成单链表
STU *getAllMessageFromFile(STU *head, int count0[], int count1[], int *count2);
![基于C语言的学生成绩管理系统_第32张图片](http://img.e-com-net.com/image/info8/4c53175969bc4e6781197f9e128cbe7a.jpg)
资源下载地址:https://download.csdn.net/download/sheziqiong/85697407