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

目录

前言

简介

学生信息录入功能

学生单个信息查询

查询全部学生信息

修改学生信息

删除学生信息 

退出

完整代码 


前言

        在临近期末之际,相信好多初学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();
	
}

创作不易,给个三连吧 

### 回答1: 好的,学生成绩管理系统可以使用C语言来实现。以下是一个简单的实现,包括添加学生信息、查找学生信息、修改学生信息和删除学生信息等功能。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> struct student { char name[50]; int id; int score; }; int main() { struct student s[100]; int choice, i, n = 0, id, found = 0; do { printf("\n\n---学生成绩管理系统---\n"); printf("1. 添加学生信息\n"); printf("2. 查找学生信息\n"); printf("3. 修改学生信息\n"); printf("4. 删除学生信息\n"); printf("5. 显示所有学生信息\n"); printf("0. 退出\n"); printf("请输入您的选择:"); scanf("%d", &choice); switch (choice) { case 1: printf("请输入学生姓名:"); scanf("%s", s[n].name); printf("请输入学生学号:"); scanf("%d", &s[n].id); printf("请输入学生成绩:"); scanf("%d", &s[n].score); n++; printf("学生信息添加成功!\n"); break; case 2: printf("请输入要查找的学生学号:"); scanf("%d", &id); found = 0; for (i = 0; i < n; i++) { if (s[i].id == id) { printf("学生姓名:%s\n", s[i].name); printf("学生学号:%d\n", s[i].id); printf("学生成绩:%d\n", s[i].score); found = 1; break; } } if (!found) { printf("没有找到该学生信息!\n"); } break; case 3: printf("请输入要修改的学生学号:"); scanf("%d", &id); found = 0; for (i = 0; i < n; i++) { if (s[i].id == id) { printf("请输入学生姓名:"); scanf("%s", s[i].name); printf("请输入学生成绩:"); scanf("%d", &s[i].score); found = 1; printf("学生信息修改成功!\n"); break; } } if (!found) { printf("没有找到该学生信息!\n"); } break; case 4: printf("请输入要删除的学生学号:"); scanf("%d", &id); found = 0; for (i = 0; i < n; i++) { if (s[i].id == id) { for (int j = i; j < n - 1; j++) { s[j] = s[j + 1]; } n--; found = 1; printf("学生信息删除成功!\n"); break; } } if (!found) { printf("没有找到该学生信息!\n"); } break; case 5: printf("所有学生信息如下:\n"); for (i = 0; i < n; i++) { printf("学生姓名:%s\n", s[i].name); printf("学生学号:%d\n", s[i].id); printf("学生成绩:%d\n", s[i].score); } break; case 0: printf("感谢使用学生成绩管理系统!\n"); break; default: printf("输入错误,请重新输入!\n"); break; } } while (choice != 0); return 0; } ``` 以上代码仅为一个简单的示例,实际开发中还需要考虑一些细节问题,比如数据的存储和读取、输入的合法性判断等。同时,也可以根据实际需求来进行功能扩展和优化。 ### 回答2: 学生成绩管理系统是一个基于C语言开发的应用程序,主要用于学校或教育机构对学生成绩进行管理和分析。 该系统的主要功能包括学生信息录入、成绩录入、成绩查询、成绩分析和报告输出等。通过学生信息录入功能,管理员或教师可以将学生的基本信息录入系统,包括学号、姓名、性别、年级等。成绩录入功能则允许管理员或教师录入学生的各门课程的成绩信息,包括考试成绩、平时成绩等。 学生成绩查询功能可以根据学生的学号或姓名快速查询其对应的成绩信息。而成绩分析功能可以进行单个学生或整个班级的成绩分析,包括各科目成绩的平均分、最高分、最低分等统计数据,以及对学生的成绩进行排名等。管理员或教师可以根据这些分析结果了解学生的学习情况,并进行针对性的辅导。 另外,学生成绩管理系统还可以生成成绩报告或成绩单,以便管理员或教师将学生的成绩情况及时告知给学生或家长。报告输出功能可以根据需要进行灵活的设置,可以生成简单的成绩单,也可以生成详细的成绩报告。 总的来说,学生成绩管理系统利用C语言的编程优势,结合数据库技术,能够高效、准确地管理学生的成绩信息,并提供各种查询、分析和报告功能,帮助学校和教育机构更好地进行学生成绩管理工作。
评论 86
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石原里美的微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值