班级成绩管理系统(C语言)

article/2025/10/27 10:16:38

文章目录

  • 一、设计任务与目标
  • 二、实现功能
  • 三、程序源码
  • 四、效果展示



一、设计任务与目标

对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。

二、实现功能

(1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。
(2)本系统显示这样的菜单:
请选择系统功能项:
a、成绩录入
b、成绩显示
c、成绩保存
d、成绩排序
e、成绩修改(要求先输入密码)
f、成绩统计
1)显示每门课程成绩最高的学生的基本信息
2)显示每门课程的平均成绩
3)显示超过某门课程平均成绩的学生人数
g、退出系统
(3)执行一个具体的功能之后,程序将重新显示菜单。
(4)将学生成绩保存到文件中。

三、程序源码

菜单

void menu()          //菜单 
{printf("========================================\n");printf("|    欢迎来到班级成绩管理系统!          \n");printf("|   a:成绩录入\n");printf("|   b:成绩显示\n");printf("|   c:成绩保存\n");printf("|   d:成绩排序\n");printf("|   e:成绩修改\n");printf("|   f:成绩统计\n");printf("|   g:退出系统\n");printf("========================================\n");printf("请输入你的选择: ");
}

录入学生成绩

void inputScores()          //成绩录入 
{if (courseCount == 0){printf("请输入课程数量:");scanf("%d", &courseCount);          //输入课程数量 for (int i = 0; i < courseCount; i++)          //输入课程名字 {Course course;printf("请输入第 %d 门课程名字:", i+1);scanf("%s", course.name);courses[i] = course;}}Student stu;printf("请输入学生学号:");scanf("%s", stu.id);          //输入学生学号 printf("请输入学生名字:");scanf("%s", stu.name);          //输入学生姓名 for (int j = 0; j < courseCount; j++)          //输入课程成绩 {printf("请输入 %s 课程成绩:", courses[j].name);scanf("%d", &stu.scores[j]);}students[studentCount++] = stu;
}

显示所录入的学生成绩

void displayScores()          //成绩显示 
{if (studentCount == 0){printf("No student\n");return;}printf(" 学号    姓名 ");for (int i = 0; i < courseCount; i++)          //输出课程名字 {printf(" %s", courses[i].name);}printf("\n");for (int i = 0; i < studentCount; i++)          //输出学生信息 {printf("%s %s", students[i].id, students[i].name);          //输出学生学号,姓名 for (int j = 0; j < courseCount; j++)          //输出学生成绩 {printf(" %d", students[i].scores[j]);}printf("\n");}
}

保存录入的学生成绩

void saveScores()          //成绩保存 
{FILE* fp;fp = fopen("scores.txt", "w");          //打开文件 if (fp == NULL){printf("open scores.txt failed!\n");return;}fprintf(fp, "%d\n", courseCount);          //输出文件信息 for (int i = 0; i < courseCount; i++)          //输出课程名字 {fprintf(fp, "%s\n", courses[i].name);}fprintf(fp, "%d\n", studentCount);          //输出学生信息 for (int i = 0; i < studentCount; i++) {fprintf(fp, "%s\n%s\n", students[i].id, students[i].name);          //输出学生学号,姓名 for (int j = 0; j < courseCount; j++)          //输出学生成绩 {fprintf(fp, "%d ", students[i].scores[j]);}fprintf(fp, "\n");}fclose(fp);          //关闭文件 
}

对录入的课程成绩进行排序

void sort(int l,int r, int pos)          //对课程的成绩进行排序 
{if (r <= l)	return;int i = l, j = r;int key = students[l].scores[pos];while (i <= j){while (students[i].scores[pos] > key)	i++;while (students[j].scores[pos] < key)	j--;if (i <= j){Student temp = students[i];students[i] = students[j];students[j] = temp;i++;j--;}}sort(l, j, pos);sort(i, r, pos);
}

比较学生成绩

int compare(char a[], char b[])          //比较学生的成绩 
{int la = strlen(a);int lb = strlen(b);if (la < lb) return -1;if (la > lb) return 1;int len = 0;while (len < la){if (a[len] < b[len]) return -1;if (a[len] > b[len]) return 1;len++;}return 0;
}

对程序进行排序

void orderScores()          //成绩排序 
{printf("Enter course name:");          //输入需要进行成绩排序的课程名字 char name[PROFILE_LENGTH];scanf("%s", name);int i = courseCount;for (i = 0; i < courseCount; i++){if (compare(courses[i].name, name) == 0)break;}if (i == courseCount){printf("No course %s\n", name);return;}sort(0, studentCount - 1, i);
}

修改已经录入但录入出错的学生成绩

void changeScores()          //成绩修改 
{printf("Enter password:");          //输入密码 char pwd[PROFILE_LENGTH];scanf("%s", pwd);          //输入密码 if (compare(password, pwd) != 0){printf("密码错误!\n");return;}printf("Enter student id:"); char id[PROFILE_LENGTH];scanf("%s", id);          //输入学生学号 int i = studentCount;for (i = 0; i < studentCount; i++){if (compare(students[i].id, id) == 0)break;}if (i == studentCount){printf("No student %s\n", id);return;}printf("Courses: ");for (int j = 0; j < courseCount; j++)          //输出课程名字 {printf(" %s", courses[j].name);}printf("\nEnter the scores:"); for (int j = 0; j < courseCount; j++)          //输入更改后的成绩 {scanf("%d", &students[i].scores[j]);}
}

统计已经录入的学生成绩

void statisticScores()          //成绩统计 
{for (int j = 0; j < courseCount; j++){printf("%s:\n", courses[j].name);int max = 0;int pos = studentCount;double aver = 0.0;for (int i = 0; i < studentCount; i++)          //比较学生成绩,找出成绩最高的学生 {aver = aver + students[i].scores[j];if (students[i].scores[j] > max){max = students[i].scores[j];pos = i;}}aver /= studentCount;          //计算平均成绩 int count = 0;for (int i = 0; i < studentCount; i++)          //计算超过平均成绩的人数 {if (students[i].scores[j] > aver){count ++;}}if (pos == studentCount){printf("No student\n");break;}else{printf("成绩最高学生:");printf("  %s  %s  %d\n", students[pos].id, students[pos].name, max);printf("平均成绩:");printf("  %.2lf\n", aver);printf("超过平均成绩的人数:");printf("  %d\n", count);}}
}

四、效果展示

菜单

菜单

录入学生成绩(这里录入了6位学生的成绩,录入完毕后进行保存)

成绩录入-1
成绩录入-2
成绩录入-3

显示已经录入的学生成绩

成绩显示

保存已经录入的成绩,保存后的成绩存放在“scores.txt”文件中

成绩保存-1
成绩保存-2

按照课程将录入的成绩进行排序(分数从高到低)

成绩排序-1
成绩排序-2

修改已经录入的学生成绩

成绩修改-1
修改成绩-2

找出每个课程成绩最高的学生,统计出平均成绩和超过平均成绩的人数

成绩统计


http://chatgpt.dhexx.cn/article/mQ68Gi2C.shtml

相关文章

C语言:学生成绩管理系统

目录 一&#xff1a;功能概述&#xff1a; 二&#xff1a;实现&#xff1a; 1.主源文件 1.打印菜单&#xff01; 2.构建管理系统的框架&#xff1a; 二&#xff1a;辅源文件 1.使用结构体&#xff0c;方便后面的编写 2.输入学生信息 3.输出学生基本信息 3.按姓名查询 3.…

C语言课程设计|学生成绩管理系统(含完整代码)

目录 前言 简介 学生信息录入功能 学生单个信息查询 查询全部学生信息 修改学生信息 删除学生信息 退出 完整代码 前言 在临近期末之际&#xff0c;相信好多初学C语言的同学都开始为写C语言课程设计这件事开始焦虑了吧&#xff1f;或许会不知所措&#xff0c;或许会…

matlab importdata不能读取全部数据问题

最近使用importdata函数不能读取全部数据&#xff0c;数据集315行&#xff0c;但是读取了197行&#xff0c;那就是197-198之间有问题&#xff0c;百度之后有了思路。由于没有找到具体的证据&#xff0c;所以这里说一下解决思路。 import可以导入很多文件类型&#xff0c;.dat文…

ImportError: cannot import name 'datasets'

初次使用python scikit-learn库时出现找不到模块的问题 from sklearn import datasets ImportError: cannot import name datasets类似问题链接&#xff1a; https://stackoverflow.com/questions/39280466/cant-import-datasets-with-scikit-learn 参考答案&#xff1a; 原因…

MATLAB输入、导入方式(手动输入,TXT文件,Excel导入)

目录 手动输入 input函数 自动输入 TXT导入数组 dir函数 importdata函数 Excel导入数组 手动输入 input函数 请求用户输入 语法 x input(number) %数值型str input(charnumber,s) %字符型&#xff0c;s不能改变 数值型进行演示 Pzeros(5,1); %建立零51矩阵进行储存…

1.数据的导入与导出

数据的导入与导出 更多MATLAB数据分析视频请点击&#xff0c;或者在网易云课堂上搜索《MATLAB数据分析与统计》 http://study.163.com/course/courseMain.htm?courseId1003615016 在用MATLAB进行编程时&#xff0c;不可避免的要涉及到数据的导入与导出&#xff0c;如果数据…

matlab读取数据文件

data1.txt: 0 3886.162 2200.938 141.240 1 3721.139 2208.475 141.152 2 3866.200 2198.936 141.126 3 3678.048 2199.191 141.250 4 3685.453 2203.726 141.241 分别采用load、importdata、textread、fscanf、textscan和fread函数读取文本数据文件。 dat1load(data1.t…

Python中库导入from . import 和from .. import 的使用方法

Python中库导入from . import 和from .. import 的使用方法 程序目录结构如下 from . import XX 和 from .. import XX 只能使用在子包中&#xff0c;例如上面的例子中&#xff0c;程序最外层是主程序app.py,程序有一个子包pack1&#xff0c;pack1下有a.py 和b.py两个文件&…

matlab inport data 作图,MATLAB使用importdata读取字符数据文件并绘图 值得收藏

本文首先使用importdata( )读取(导入)含有字符和数据的文本格式数据文件&#xff0c;然后介绍通过“.”数据名的方式读取结构数组中的数据&#xff0c;最后使用plot( )绘制折线图。 工具/材料 MATLAB struct 操作方法 01 第一&#xff0c;首先准备数据&#xff0c;下图txt数据文…

【MATLAB统计分析与应用100】案例001:matlab使用Importdata函数导入文本txt数据

配套实验数据包下载链接&#xff1a;订阅专栏后&#xff0c;从私信查收链接。 文章目录 1. 调用importdata函数读取文件中的数据2. 调用importdata函数读取文件数据&#xff0c;返回结构体变量x3. 调用importdata函数读取文件中的数据&#xff0c;用;作分隔符&#xff0c;返回字…

ImportError: No module named data

问题 明明在IDE&#xff08;如Pycharm&#xff09;中运行 check_file.py 正常。到了xshell使用python check_file.py方式运行时&#xff0c;就报ImportError: No module named data。 # check_file.py from data import scannet_util产生这个问题的原因是python的搜索路径导致…

MATLAB数据导入(importdata函数)

编写程序时&#xff0c;有时需要从外部读入数据&#xff0c;这里介绍用importdata函数把数据导入MATLAB的方法。 1.加载和显示图像文件 在MATLAB中建立一个脚本文件&#xff0c;内容如下&#xff1a; filename ming.png; A importdata(filename); image(A);运行该文件&…

Matlab学习笔记(7)——importdata和load函数

importdata和load函数 引言importdata函数 Demo1Demo2Demo3Demo4Demo5Demo6 load函数 Demo importdata和load函数 引言 在使用matlab将数据导入到工作空间的时候,经常会使用到两个函数&#xff0c;一个是importdata函数&#xff0c;另一个是load函数&#xff0c;它们的使用…

Matlab中importdata函数的使用

目录 语法 说明 示例 导入并显示图像 导入文本文件并指定分隔符和列标题 导入文本文件并返回检测到的分隔符 从剪贴板导入数据 importdata函数的功能是从文件加载数据。 语法 A importdata(filename) A importdata(-pastespecial) A importdata(___,delimiterIn) A…

2021-02-23 Matlab数据导入--importdata和load函数

Matlab数据导入--importdata和load函数 importdata和load函数 1.引言 在使用matlab将数据导入到工作空间的时候,经常会使用到两个函数&#xff0c;一个是importdata函数&#xff0c;另一个是load函数&#xff0c;它们的使用方法和使用场景是太相同的&#xff0c;如果不太注意就…

curl命令的使用

curl命令是一个模拟浏览器请求的命令&#xff0c;当你去curl一个网址的时候&#xff0c;会返回给你网站的html代码&#xff0c;因此可以代替浏览器去发送请求&#xff0c;适用于那些纯命令行界面的linux&#xff0c;给您更爽的体验&#xff0c;话不多说&#xff0c;来看看curl命…

curl命令的常用操作

curl是非常实用的命令行工具&#xff0c;用来与服务器之间传输数据。它的命令行参数多达几十种。 在Linux环境中使用curl命令可以进行接口测试。利用curl对http协议发送Get/Post/Delete/Put请求,同时还可以携带header来满足接口的特定需求。 curl命令的语法 curl[options] [U…

windos下 curl命令使用

什么是curl命令&#xff1f; curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中&#xff0c;并且有DOS和Win32、Win64下的移植版本。 如何在windows下使用curl命令&#xff1f; 打开dos窗口&#xff08;winR 输入cmd 打开&#x…

curl命令进行接口测试

有时候会遇到一些需求&#xff1a;后端先写功能接口&#xff0c;前端后面再做&#xff0c;这样在灰度发版的时候怎么验证生产接口功能&#xff1f; 1、接口自动化 2、postman直接调用生产接口 3、curl命令测试接口 今天重点是方法3 一、curl命令的介绍&#xff1a; Window…