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

article/2025/10/27 10:28:53

目录

前言

简介

学生信息录入功能

学生单个信息查询

查询全部学生信息

修改学生信息

删除学生信息 

退出

完整代码 


前言

        在临近期末之际,相信好多初学C语言的同学都开始为写C语言课程设计这件事开始焦虑了吧?或许会不知所措,或许会有所畏惧,亦或是对那几百行的代码望而止步了吧,毕竟这是作为程序员的第一个小项目——需要自己一个人着手去敲代码、测试等操作,不过这些事情都不需要去害怕,我们缺少的并不是知识的多少,根本原因是内心深处是否有自信的存在,只要我们鼓起勇气尝试着做第一步、第二步,逐渐地熟能生巧就好了!今天我给大家带来一篇C语言课程设计——学生成绩管理系统,希望能够帮助大家以后在敲代码的道路上越走越远。

简介

        现在我们步入正题吧,主要来介绍一下改学生成绩管理系统都运用了哪些知识以及实现了哪些功能:首先是知识方面,主要是使用了简单的循环语句、函数、结构体、链表存储数据;然后是功能方面,主要是学生信息录入学生单个信息查询查询全部学生信息修改学生信息删除学生信息退出系统。接下来就一起来看代码吧!

学生信息录入功能

void Add(){system("cls");int count;printf("请输入要录入信息的个数:");scanf("%d",&count);struct Student *s1,*s2,*temp;s1=s2=(struct Student*)malloc(LEN);if(head==NULL){head = s1;}else{end->next = s1 ;}int i = 1;	while(count>0){printf("请输入第%d位学生信息:\n",i++);printf("学号:\n");scanf("%s",&s1->number);printf("姓名:\n");scanf("%s",&s1->name);printf("性别:\n");scanf("%s",&s1->sex);printf("语文成绩:\n");scanf("%d",&s1->Chinese);printf("数学成绩:\n");scanf("%d",&s1->Math);printf("英语成绩:\n");scanf("%d",&s1->English);count--;s2->next=s1;s2=s1;s1=(struct Student*)malloc(LEN);printf("添加成功!\n");system("pause");system("cls");}s2->next= NULL;end = s2;printf("全部添加成功!\n");system("pause");
}

学生单个信息查询

函数作用:有目的性地寻找学生的所有信息。

实现方法:将链表中的数据一一遍历,与所输入的数据进行对比,若匹配成功,则将该指针所指向结构体中的数据输出。

void View(){system("cls");struct Student *VS;printf("输入要查询信息的学生学号:\n");char num[10];int flag=1;scanf("%s",&num);for(VS=head;VS!=NULL;){if(strcmp(VS->number,num)==0){printf("成功找到!\n");printf("学号:%s\t姓名:%s\t性别:%s\n",VS->number,VS->name,VS->sex);printf("语文:%d\t数学:%d\t英语:%d",VS->Chinese,VS->Math,VS->English);flag=0;break;}VS=VS->next;}if(flag){printf("不好意思,未找到!\n");}system("pause");
}

查询全部学生信息

函数作用:将学生信息管理系统中所有数据呈现出来。

实现方法:定义一个结构体指针变量(局部变量)VA,将头指针head赋值给VA,通过循环输出pt指针所指向的结构体,并将所指向结构体中的next所指向的地址赋值给VA,从而实现对下一个结构体的访问。

void ViewAll(){system("cls");struct Student *VA;if(head!=NULL){printf("所有学生成绩如下:\n");for(VA=head;VA!=NULL;){printf("学号:%s\t姓名:%s\t性别:%s\n",VA->number,VA->name,VA->sex);printf("语文:%d\t数学:%d\t英语:%d\n",VA->Chinese,VA->Math,VA->English);VA=VA->next; }}else{printf("该系统中还未录入信息");}	system("pause");
}

修改学生信息

void Repair(){system("cls");struct Student *RS;char num[10];int flag = 1;printf("输入要修改成绩学生的学号:\n");scanf("%s",num);for(RS=head;RS!=NULL;){if(strcmp(RS->number,num)==0){printf("成功找到该学生");printf("学号:%s\t姓名:%s\t性别:%s\n",RS->number,RS->name,RS->sex);printf("语文:%d\t数学:%d\t英语:%d\n",RS->Chinese,RS->Math,RS->English);flag = 0;printf("学号:\n");scanf("%s",&RS->number);printf("姓名:\n");scanf("%s",&RS->name);printf("性别:\n");scanf("%s",&RS->sex);printf("语文成绩:\n");scanf("%d",&RS->Chinese);printf("数学成绩:\n");scanf("%d",&RS->Math);printf("英语成绩:\n");scanf("%d",&RS->English);printf("修改成功");system("pause");}RS=RS->next;}if(flag){printf("输入信息有误,未查询到");system("pause");}
}

删除学生信息 

函数作用:有目的性地删除一些失效信息

实现方法:依然是通过遍历找到想要删除的指针,不过在这之前应该定义一个结构体指针用来获取DS的地址。其目的是为了能够在删除该指针之前将该指针之前的数据与之后的数据能够连接起来。

void Delete(){system("cls");int flag =1;while(flag){printf("请输入要删除的学生学号:");char num[10];scanf("%s",&num);struct Student * DS,*temp;for(DS=head;DS!=NULL;){if(strcmp(DS->number,num)==0){if(DS==head){head = DS->next;flag = 0;printf("删除成功!\n");system("pause");}else{flag = 0;printf("删除成功!\n");temp->next= DS->next;free(DS);system("pause");}}temp = DS;DS=DS->next;}if(flag){printf("未找到该学生学号!\n");system("pause");}}
}

退出

exit(0),简单的皮一下! 

完整代码 

本次由于时间的原因,所以未对所有代码作详解 ,希望大家可以理解。不过大家如果有不理解的地方或者代码有误的地方,都可以私聊我,随时为你解答。

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)
struct Student{char number[20];		//学号 char name[10];		//姓名 char sex[4];			//性别 int Chinese;			//语文成绩 int Math;				//数学成绩 int English;			//英语成绩 struct Student* next;	//指向下一个数据的指针 
};
struct Student* head = NULL;
struct Student* end = NULL;void Menu(){void Menu();void Add();void View();void Delete();void Repair();void ViewAll();system("cls");printf("1、学生信息录入\n");printf("2、学生单个成绩查询\n");printf("3、查询全部学生成绩\n");printf("4、修改学生信息\n");printf("5、删除学生信息\n");printf("6、退出系统\n");int choice;printf("请选择要使用的功能:\n");loop:scanf("%d",&choice);switch (choice) {case 1:Add();Menu();case 2:View();Menu();case 3:ViewAll();Menu();case 4:Repair();Menu();case 5:Delete();Menu();case 6:exit(0);default:printf("输入有误,请重新选择:");goto loop;	}
} void Add(){system("cls");int count;printf("请输入要录入信息的个数:");scanf("%d",&count);struct Student *s1,*s2,*temp;s1=s2=(struct Student*)malloc(LEN);if(head==NULL){head = s1;}else{end->next = s1 ;}int i = 1;	while(count>0){printf("请输入第%d位学生信息:\n",i++);printf("学号:\n");scanf("%s",&s1->number);printf("姓名:\n");scanf("%s",&s1->name);printf("性别:\n");scanf("%s",&s1->sex);printf("语文成绩:\n");scanf("%d",&s1->Chinese);printf("数学成绩:\n");scanf("%d",&s1->Math);printf("英语成绩:\n");scanf("%d",&s1->English);count--;s2->next=s1;s2=s1;s1=(struct Student*)malloc(LEN);printf("添加成功!\n");system("pause");system("cls");}s2->next= NULL;end = s2;printf("全部添加成功!\n");system("pause");
}
void View(){system("cls");struct Student *VS;printf("输入要查询信息的学生学号:\n");char num[10];int flag=1;scanf("%s",&num);for(VS=head;VS!=NULL;){if(strcmp(VS->number,num)==0){printf("成功找到!\n");printf("学号:%s\t姓名:%s\t性别:%s\n",VS->number,VS->name,VS->sex);printf("语文:%d\t数学:%d\t英语:%d",VS->Chinese,VS->Math,VS->English);flag=0;break;}VS=VS->next;}if(flag){printf("不好意思,未找到!\n");}system("pause");
}
void ViewAll(){system("cls");struct Student *VA;if(head!=NULL){printf("所有学生成绩如下:\n");for(VA=head;VA!=NULL;){printf("学号:%s\t姓名:%s\t性别:%s\n",VA->number,VA->name,VA->sex);printf("语文:%d\t数学:%d\t英语:%d\n",VA->Chinese,VA->Math,VA->English);VA=VA->next; }}else{printf("该系统中还未录入信息");}	system("pause");
}
void Repair(){system("cls");struct Student *RS;char num[10];int flag = 1;printf("输入要修改成绩学生的学号:\n");scanf("%s",num);for(RS=head;RS!=NULL;){if(strcmp(RS->number,num)==0){printf("成功找到该学生");printf("学号:%s\t姓名:%s\t性别:%s\n",RS->number,RS->name,RS->sex);printf("语文:%d\t数学:%d\t英语:%d\n",RS->Chinese,RS->Math,RS->English);flag = 0;printf("学号:\n");scanf("%s",&RS->number);printf("姓名:\n");scanf("%s",&RS->name);printf("性别:\n");scanf("%s",&RS->sex);printf("语文成绩:\n");scanf("%d",&RS->Chinese);printf("数学成绩:\n");scanf("%d",&RS->Math);printf("英语成绩:\n");scanf("%d",&RS->English);printf("修改成功");system("pause");}RS=RS->next;}if(flag){printf("输入信息有误,未查询到");system("pause");}
}
void Delete(){system("cls");int flag =1;while(flag){printf("请输入要删除的学生学号:");char num[10];scanf("%s",&num);struct Student * DS,*temp;for(DS=head;DS!=NULL;){if(strcmp(DS->number,num)==0){if(DS==head){head = DS->next;flag = 0;printf("删除成功!\n");system("pause");}else{flag = 0;printf("删除成功!\n");temp->next= DS->next;free(DS);system("pause");}}temp = DS;DS=DS->next;}if(flag){printf("未找到该学生学号!\n");system("pause");}}
}int main(){void Menu();void Add();void View();void Delete();void Repair();void ViewAll();Menu();}

创作不易,给个三连吧 


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

相关文章

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…

curl 命令详解

curl 是一种命令行工具&#xff0c;作用是发出网络请求&#xff0c;然后获取数据&#xff0c;显示在"标准输出"&#xff08;stdout&#xff09;上面。它支持多种协议&#xff0c;下面列举其常用功能。 一、查看网页源码 直接在 curl 命令后加上网址&#xff0c;就可以…