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();
	
}

创作不易,给个三连吧 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年12月11日
下一篇 2023年12月11日

相关推荐