课程设计 | 学生成绩管理系统
Posted Linux猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课程设计 | 学生成绩管理系统相关的知识,希望对你有一定的参考价值。
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: C/C++/Java课程设计100例 优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
目录
本篇文章对「学生成绩管理系统」进行详细讲解, 更多「课程设计/大作业」请点击『 C/C++/Java课程设计100例 』获取!
一、需求分析
1. 使用 C 语言实现学生成绩管理系统;
2. 支持计算每个课程的总分和平均分;
3. 支持计算每个学生的总分和平均分;
4. 支持按分数降序排序、按分数升序排序、按学号升序排序、按姓名字典序排序;
5. 支持通过学号查询;
6. 支持通过姓名查询;
7. 支持统计分析、列表展示;
8. 支持从文件中读取和保存。
二、设计思路
通过菜单列出「学生成绩管理系统」支持的所有功能,并将功能标号,用户可以根据标号选择功能,然后根据对应标号执行对应的功能,「学生成绩管理系统」流程如下所示。
三、功能实现
下面将针对程序的主要功能进行详细介绍,包括:计算每个课程的总分和平均分、按分数降序排序、按学号升序排序、通过学号查询、统计分析以及从文件读取。
3.1 计算每个课程的总分和平均分
对所有学生的具体课程进行遍历,统计当前课程的总分,最后计算出平均分,代码实现如下所示。
// 计算每门课程的总分和平均分
void averageSumOfEveryCourse(STU *head)
int x = 20, y = 3;
getCoord(x, y++); printf("******************************************************************************");
if (head->next != NULL)
int j = 1;
for (int i = 0; i < m; i++)
STU *p = head->next;
float sum = 0.0;
do
sum += p->score[i];
p = p->next;
while (p != NULL);
getCoord(x, y++); printf("\\t\\t\\t课程 %d: 总分 = %.0f , 平局分 = %.0f\\n", j++, sum, sum/n);
else
getCoord(x, y++); printf("没有学生信息");
getCoord(x, y++); printf("******************************************************************************");
char ch = ' ';
while (ch != 'Q')
getCoord(x, y); printf("请输入 Q 退出:");
scanf("%c", &ch);
3.2 按分数降序排序
对数据排序通过一个单独的函数来处理,具体排序规则只需要传入排序类型即可实现对应的排序,这里 type = 1 表示按分数降序排序,代码实现如下所示。
// type = 1
void sortbyScoreDescending(STU *head)
int x = 20, y = 3;
getCoord(x, y++); printf("******************************************************************************");
getCoord(x, y++); printf("按分数降序排列");
sortCommon(head, 1);
3.3 按学号升序排序
同理,type = 3 表示按照学号进行升序排序,代码实现如下所示。
// type = 3
void sortbyNum(STU *head)
int x = 20, y = 3;
getCoord(x, y++); printf("******************************************************************************");
getCoord(x, y++); printf("按学号升序排列");
sortCommon(head, 3);
3.4 通过学号查询
首先,用户输入学号,根据用户输入的学号遍历所有学生,查找对应学号的学生并进行输出,代码实现如下所示。
void searchbyNum(STU *head)
int x = 20, y = 3;
getCoord(x, y++); printf("******************************************************************************");
getCoord(x, y++); printf("通过学号进行查询");
long num;
bool flag = true;
getCoord(x, y++); printf("请输入学号:");
scanf("%ld", &num);
STU *p = head->next;
if (p != NULL)
do
if (p->num == num)
getCoord(x, y++); printf("学号:"); printf("%ld", p->num);
getCoord(x, y++); printf("姓名:"); printf("%s", p->name);
for (int i = 0; i < m; i++)
getCoord(x, y++); printf("课程 %d: %.0f\\t", i+1, p->score[i]);
getCoord(x, y++); printf("总分:%.0f\\n", p->sum);
getCoord(x, y++); printf("平均分:%.0f\\n", p->sum/m);
flag = false;
break;
p = p->next;
while (p != NULL && flag);
if (flag)
getCoord(x, y++); printf("没有发现!\\n");
getCoord(x, y++); printf("******************************************************************************");
returnMenu(x, y+1);
3.5 统计分析
对所有学生的成绩进行分析,输出各个成绩段的学生情况,包括:< 60、60 - 69、70 - 79、80 - 89、90 - 99、100,代码实现如下所示。
void statisticAnalysis(STU *head)
int a[6];
int x = 20, y = 3;
getCoord(x, y++); printf("******************************************************************************");
for (int i = 0; i < m; i++)
STU *p = head->next;
memset(a, 0, sizeof(a));
do
if (p->score[i] < 60)
a[0]++;
else if (p->score[i] < 70)
a[1]++;
else if (p->score[i] < 80)
a[2]++;
else if (p->score[i] < 90)
a[3]++;
else if (p->score[i] < 100)
a[4]++;
else
a[5]++;
p = p->next;
while (p != NULL);
getCoord(x, y++); printf("课程 %d:\\n", i + 1);
getCoord(x, y++); printf("* < 60\\t%d\\t%.2f%%\\n", a[0], 100 * a[0] / 6.0);
getCoord(x, y++); printf("* %d - %d\\t%d\\t%.2f%%\\n", 60, 69, a[1], 100 * a[1] / 6.0);
getCoord(x, y++); printf("* %d - %d\\t%d\\t%.2f%%\\n", 70, 79, a[2], 100 * a[2] / 6.0);
getCoord(x, y++); printf("* %d - %d\\t%d\\t%.2f%%\\n", 80, 89, a[3], 100 * a[3] / 6.0);
getCoord(x, y++); printf("* %d - %d\\t%d\\t%.2f%%\\n", 90, 99, a[4], 100 * a[4] / 6.0);
getCoord(x, y++); printf("* %d\\t%d\\t%.2f%%\\n", 100, a[5], 100 * a[5] / 6.0);
getCoord(x, y++); printf("******************************************************************************\\n");
returnMenu(x, y+1);
3.6 从文件读取
数据存储在 student.txt 中,按照指定格式,读取文件内容,将其存储到结构中,代码实现如下所示。
void readfromFile(STU *head)
int x = 20, y = 3;
getCoord(x, y++); printf("******************************************************************************");
STU *pre = head;
FILE *fp;
if ((fp = fopen("student.txt", "r")) == NULL)
getCoord(x, y++); printf("打开文件 student.txt 失败!\\n");
else
fscanf(fp, "%d\\t%d\\n", &n, &m);
for (int i = 0; i < n; i++)
STU *p = (STU *)malloc(LEN);
pre->next = p;
p->next = NULL;
fscanf(fp, "%12ld", &p->num);
fscanf(fp, "%12s", p->name);
for (int j = 0; j < m; j++)
fscanf(fp, "%12f", &p->score[j]);
fscanf(fp, "%12f%12f", &p->sum, &p->aver);
pre = p;
fclose(fp);
getCoord(x, y++); printf("导入数据成功!\\n");
print(head, x, y);
🍓🍓🍓 更多「课程设计/大作业」请点击『 C/C++/Java课程设计100例 』获取!🎉🎉🎉
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞
以上是关于课程设计 | 学生成绩管理系统的主要内容,如果未能解决你的问题,请参考以下文章