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

article/2025/10/27 10:22:22

 

目录

一:功能概述:

二:实现:

1.主源文件

 1.打印菜单!

2.构建管理系统的框架:

二:辅源文件 

 1.使用结构体,方便后面的编写

 2.输入学生信息

3.输出学生基本信息

 3.按姓名查询

 3.删除学生信息

4.修改学生信息

5.添加学生

6.按成绩打印学生排名

三:心得体会


一:功能概述:

 实现:

1.学生学习成绩录入    

2.学生学习成绩输出  

3.删除某学生信息

4.按姓名查询某学生信息并输出

5.修改某学生信息

6.添加某学生信息

7.按总成绩排名   等等功能!

二:实现:

 为了方便修改,同时增加代码的可读性,实现每一个功能的时候都应该用一个具体的函数。

同时,创建两个源文件,一个实现教务系统的逻辑为主源文件,一个完善实现逻辑时的所需要的函数块,为辅源文件。

1.主源文件

 1.打印菜单!

9.void menu()  
10.{  
11.    printf("               欢迎使用Miao编写的教务管理系统                \n");  
12.    Sleep(50);  
13.    printf("请按任意将进入学生管理系统:\n");  
14.    getchar();  
15.    printf("=============================================================\n"); Sleep(50);  
16.    printf("=============================================================\n"); Sleep(50);  
17.    printf("||             1.学生学习成绩录入                          ||\n"); Sleep(50);  
18.    printf("||             2.学生学习成绩输出                          ||\n"); Sleep(50);  
19.    printf("||             3.删除某学生信息                            ||\n"); Sleep(50);  
20.    printf("||             4.按姓名查询某学生信息并输出                ||\n"); Sleep(50);  
21.    printf("||             5.修改某学生信息                            ||\n"); Sleep(50);  
22.    printf("||             6.添加某学生信息                            ||\n"); Sleep(50);  
23.    printf("||             7.按总成绩排名                              ||\n"); Sleep(50);  
24.    printf("=============================================================\n"); Sleep(50);  
25.    printf("=============================================================\n"); Sleep(50);  
26.}   

打印时运用了getchar和sleep函数,增加了代码的可读性的同时也使其更加贴近于生活,使其变得有趣!

2.构建管理系统的框架:

int main()
{system("color e3\n");int num, Item;struct Student*  Arr = NULL;struct Student* p = NULL;while (1){menu();printf("\n请选择操作命令;\n");scanf("%d", &Item);switch (Item){case 1://输入学生信息{system("cls");num = Num();p = Input( Arr, num);}break;case 2://输出学生信息{Play_One_Play();system("cls");Output(p, num);}break;case 3://删除学生信息{system("cls");Delete(p, num);}break;case 4://查找学生信息{system("cls");Search(p, num);}break;case 5://修改学生信息{system("cls");Change(p, num);}break;case 6://添加学生信息{system("cls");Add(p, num);}break;case 7://将学生的总成绩按从大到小排序{Play_One_Play();system("cls");ScoreTotal(p, num);}break;}}return 0;
}

使用switch函数实现!其中使用了system 中colour函数,使最后运行的界面变为黄色!如:

//设置默认的控制台前景和背景颜色。
//
//5 :紫色背景色
//A :淡绿色的字体颜色
//
//每个数字可以为以下任何值 :
//0 = 黑色   8 = 灰色
//1 = 蓝色   9 = 蓝色
//2 = 绿色   A = 淡绿色
//3 = 浅蓝色 B = 淡浅绿色
//4 = 红色   C = 淡红色
//5 = 紫色   D = 淡紫色
//6 = 黄色   E = 淡黄色
//7 = 白色   F = 亮白色

同时使用了system清屏的功能,使得运行起来更加美观,流畅!

二:辅源文件 

 1.使用结构体,方便后面的编写

int num;
struct Student
{char Name[25];//姓名int Age;//年龄int Num;//学号float Score[2];//高数 英语成绩float Total;//总成绩
};
int Num()
{printf("请输入学生人数:\n");scanf("%d", &num);return num;
}

 2.输入学生信息

struct Student* Input(struct Student*  Arr, int len)//输入学生的基本信息
{Arr = (struct Student*)malloc(len * sizeof(struct Student));int i;for (i = 0; i < len; i++){printf("请输入第%d个学生的姓名:\n", i + 1);scanf("%s",  Arr[i].Name);printf("请输入第%d个学生的年龄:\n", i + 1);scanf("%d", & Arr[i].Age);printf("请输入第%d个学生的学号:\n", i + 1);scanf("%d", & Arr[i].Num);printf("请输入第%d个学生的英语成绩:\n", i + 1);scanf("%f", & Arr[i].Score[0]);printf("请输入第%d个学生的高数成绩:\n", i + 1);scanf("%f", & Arr[i].Score[1]);//printf("请输入第%d个学生:\n姓名\t年龄\t学号\t高数\t英语\n",i);//scanf("%s\t%d\t%d\t%f\t%f");//计算总分Arr[i].Total =  Arr[i].Score[0] +  Arr[i].Score[1];}return  Arr;
}

使用动态内存分布,使用一个申请内存一个内存,减少了浪费。 

3.输出学生基本信息

void Output(struct Student*  Arr, int len)
{printf("姓名\t年龄\t学号\t高数\t英语\t总分\n");for (int i = 0; i < len; i++){printf("%s\t%d\t%d\t%g\t%g\t%g\n",  Arr[i].Name,  Arr[i].Age,  Arr[i].Num,  Arr[i].Score[0], Arr[i].Score[1],  Arr[i].Total);}
}

 3.按姓名查询

void Search(struct Student*  Arr, int len)
{int i;char Name[10];printf("请输入你需要查找的学生的姓名\n");scanf("%s", Name);for (i = 0; i < len; i++)//查找学生编号{if (0 == strcmp( Arr[i].Name, Name)){num = i;}}Output(& Arr[num], i);//输出}

 3.删除学生信息

void Delete(struct Student*  Arr, int len)
{int i, num;char Name[10];printf("请输入你要删除数据的姓名:\n");scanf("%s", Name);for (i = 0; i < len; i++){if (0 == strcmp( Arr[i].Name, Name)){num = i;}}for (i = num; i < len; i++)//删除学生{Arr[i - 1] =  Arr[i];}Output( Arr, len - 1);//输出
}

4.修改学生信息

void Change(struct Student*  Arr, int len)
{char Name[10];printf("请输入你需要修改的学生的姓名:\n");scanf("%s", Name);int i, num;for (i = 0; i < len; i++){if (0 == strcmp( Arr[i].Name, Name)){num = i;}}printf("请输入学生的姓名:\n");scanf("%s",  Arr[num].Name);printf("请输入学生的年龄:\n");scanf("%d", & Arr[num].Age);printf("请输入学生的学号:\n");scanf("%d", & Arr[num].Num);printf("请输入学生的高数成绩:\n");scanf("%f", & Arr[num].Score[0]);printf("请输入学生的英语成绩:\n");scanf("%f", & Arr[num].Score[1]);Arr[num].Total =  Arr[num].Score[0] +  Arr[num].Score[1];Output( Arr, len);
}

使用strcmp函数来比较字符串是否相同,来实现其功能。

5.添加学生

void Add(struct Student*  Arr, int len)
{int num, i;printf("请输入添加的学生的人数:\n");scanf("%d", &num);struct Student* p = NULL;p = (struct Student*)malloc(sizeof(struct Student) * num);for (i = 0; i < num; i++){printf("请输入第%d个学生的姓名:\n", i + 1);scanf("%s", p[i].Name);printf("请输入第%d个学生的年龄:\n", i + 1);scanf("%d", &p[i].Age);printf("请输入第%d个学生的学号:\n", i + 1);scanf("%d", &p[i].Num);printf("请输入第%d个学生的高数成绩:\n", i + 1);scanf("%f", &p[i].Score[0]);printf("请输入第%d个学生的英语成绩:\n", i + 1);scanf("%f", &p[i].Score[1]);p[i].Total = p[i].Score[0] + p[i].Score[1];}Output( Arr, len);Output(p, num);
}

 同理,使用的动态内存的申请!

6.按成绩打印学生排名

void ScoreTotal(struct Student*  Arr, int len)
{struct Student temp;int max;for (int i = 0; i < len - 1; i++){max = i;for (int j = i + 1; j < len; j++){if ( Arr[j].Total >  Arr[max].Total){max = j;}}if (max != i){temp =  Arr[max];Arr[max] =  Arr[i];Arr[i] = temp;}}Output( Arr, len);
}

使用冒泡排序,来实现排名!

三:心得体会

在编写代码时,很明显的感觉到自己结构体和指针这两个方面学习的不是特别好,自己无法正确的使用,因此在使用时有很大的麻烦!还有就是自己在此之前好久都没有认真动脑筋写过一道题,认真学习一个学习一个算法,因此自己在编写的时候很明显的感觉到了一种生疏感,以后自己一定要经常编写,来完善自己的能力!!!

这个代码依旧有许许多多的不足之处:输入的学号过长时,就无法与上面学号二字对其,在添加学生在输出后,所添加的学生上依旧有一行“学生 学号 等等”,也没有抽出比指定分数高的同学。有待完善的地方还有许许多多,自己在以后要用自己的知识将这个系统慢慢完善!

自己在写这个代码时同样也收货了许多的东西,例如为了使定义的函数的可读性更高,要随时打开英语翻译,将该函数的名字用其英文来定义。在写每一个函数是尽量做到注释,让自己在写完后更好的检查代码,同时也让读者更好的看懂代码。自己也可以在写代码时加入一些人性化的东西!增加代码的趣味性的同时也是自己在写代码时有一个更好的心情与激情!

写完这个管理系统,我想这并不意味这学习c语言的结束,恰恰相反,这正是学习的开始,相信自己在未来可以用自己的知识去编写,完善,创新一个新的软件!做出一个让自己满意,让使用者舒适的真正的好程序!


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

相关文章

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…

curl命令的使用操作,你知道多少?

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