C语言初学者可完成的简易的学生成绩管理系统

        该学生成绩管理系统为我大一的一次课设,只是用结构体和链表实现了,“增删查改”功能,后续修改时我又加入了按学生总分进行链表排序和保存简单的txt文件。       

        首先介绍我建立的结构体,它可以储存学号,学生姓名,各科成绩和总成绩,并定义了,新类型stu。

typedef struct student
{
	char xuehao[1000];//学号 
	char name[20];//姓名 
	char Class[20];//班级 
	float mathgrade;//数学成绩 
	float eglishgrade;//英语成绩 
	float computeregrade;//计算机成绩 
	float pingjun;//平均成绩 
	float zong;//总分 
	struct student *next;
} stu;
stu *head;

        下面是主函数,包括一个简易的登录界面,并进入初始化界面(函数)

 

int main()
{
	head = (stu*)malloc(sizeof(stu));
	head->next=NULL;
	char zhanghao1[20] = "a"/*储存注册账号*/,zhanghao2[20]/*储存登录账号*/;
	char mima1[20]="a"/*储存注册密码*/,mima2[20]/*储存登录密码*/;
	int j;
	for(int i=0;i!=1;)
	{
		printf("\t\t****************************\n");
		printf("\t\t******学生成绩管理系统******\n");
		printf("\t\t****************************\n");
		printf("\t\t请选择\n\t\t1.登录\n\t\t2.注册\n\t\t");
		char a[100];
		scanf("%s",a);
		if(strcmp(a,"1")==0 && strcmp(zhanghao1,"a")==0 && strcmp(mima1,"a")==0)//建立了一个简陋的注册登录界面 
		{
			printf("\t\t请先注册账号\n"); 
			printf("\t\t请输入需要创建的账号;");
			scanf("%s",zhanghao1);
			printf("\t\t请输入需要注册的密码:");
			scanf("%s",mima1);
			system("pause");
			system("cls");
			continue;
		}else if(strcmp(a,"1")==0 && strcmp(zhanghao1,"a")!=0 && strcmp(mima1,"a")!=0)
		{
			printf("\t\t请输入登录账号:");
			scanf("%s",zhanghao2);
			printf("\t\t请输入登录密码:");
			scanf("%s",mima2); 
			for(;;)
			{
				if(strcmp(zhanghao1,zhanghao2)!=0 || strcmp(mima1,mima2)!=0)
				{
					printf("\t\t账号密码错误\n\t\t请重新输入账号:");
					scanf("%s",zhanghao2);
					printf("\t\t请重新输入密码:");
					scanf("%s",mima2);
					j++;
					if(j==3)
					{
						break;	
					}
				}
				else
				{
					printf("成功登录\n");
					i=1;
					break;
				}
			}
		}else if(strcmp(a,"2")==0)
		{
			printf("\t\t请输入账号:");
			scanf("%s",zhanghao1);
			printf("\t\t请输入密码:");
			scanf("%s",mima1);
			system("pause");
			system("cls");
			continue; 
		}else
		{
			printf("\t\t请输入1或2");
			system("pause");
			system("cls");
			continue; 
		}
		if(j==3)
		{
			printf("\t\t输入错误次数过多");
			break; 
		}
		chushi();
		if (tui == 1) {
			break;
		}
		system("pause");
		system("cls");
	}
	return 0;
}

  

        初始化函数,创建初始化界面,并利用switch选择结构进入其他功能函数。

 

void chushi()//初始化界面 
{
	system("pause");	
	system("cls");
	void pai(stu *head);
	void baocun(stu*head);
	while (1)
	{
		printf("\t\t****************************\n");
		printf("\t\t******学生成绩管理系统******\n");
		printf("\t\t****************************\n");
		printf("\t\t 1、新增学生成绩信息并保存\n");
		printf("\t\t 2、显示所有学生成绩信息\n");
		printf("\t\t 3、查询学生成绩信息\n");
		printf("\t\t 4、修改学生成绩信息\n");
		printf("\t\t 5、删除学生成绩信息\n");
		printf("\t\t 6、按照学生总成绩排序\n");
		printf("\t\t 7、生成text文件保存\n");
		printf("\t\t 0、退出系统\n");
		printf("\t\t 请输入你的选择:");
		int a,b;
		b=scanf("%d",&a);
		while(b!=1)
		{
			while((getchar())!='\n')
			{
				printf("警告:只能输入数字");
			}
			b = scanf("%d",&a);
		}
		system("cls");
		switch(a)//利用switch选择结构 
		{
			case 1:
				zeng(head);
				break;
			case 2:
				xianshi(head);
				break;
			case 3:
				find(head);
				break;
			case 4:
				chance(head);
				break;
			case 5:
				cancel(head);
				break;
			case 6:
				pai(head);
				break;
			case 7:
				baocun(head);
				break;		
			case 0:
				tui = 1;
				printf("感谢你使用学生通信录管理系统,请关掉程序!!!\n");
				break;
		}
		if(tui==1)
		{
			break;	
		}
	}	
}

        下面是功能函数我就不做过多的赘述大家自己看即可:

链表增函数:

void zeng(stu*head)//增加学生成绩信息 
{
	while (1) 
	{
		stu *p, *tail, *q;
		tail = head;
		while (tail->next != NULL) { //尾插法
		tail = tail -> next;
		}
		q = head->next;
		int a = 0;
		char xuehao1[20];
		printf("请输入学生号\n");
		scanf("%s",xuehao1);
		while(q != NULL)
		{
			if(strcmp(q->xuehao,xuehao1) == 0)//判断是否输入重复学号 
			{
				a=1;
				printf("学号无法重复请输入\n");
				break; 
			}else
			{
				q=q->next;
			}
		}
		if(a==1)
		{
			continue;
		}
		p=(stu*)malloc(sizeof(stu));//为新结构体申请空间 
		strcpy(p->xuehao,xuehao1);//复制学号到结构体中 
		printf("请输入姓名");
		scanf("%s",p->name);
		printf("请输入班级");
		scanf("%s",p->Class);
		float mathgrade1,eglishgrade1,computeregrade1,pingjun1;
		int j;
		printf("请输入数学成绩:");
		while (1)//该循环为防止输入错误类型和小于1大于100的分数 
		{
			j=scanf("%f",&mathgrade1);
			if(j==0||getchar()!='\n')
			{
				printf("非法输入字符,请重新输入数字:");
				while(getchar() != '\n');//清除缓存区 
				continue; 
			}
			if(mathgrade1<=100 && mathgrade1>=1)
			{
				p->mathgrade=mathgrade1;
				break;
			}else
			{
				printf("非法输入成绩,请重新输入:"); 
				continue;
			}
		}
		printf("请输入英语成绩:");
		while (1)
		{
			j=scanf("%f",&eglishgrade1);
			if(j==0||getchar()!='\n')
			{
				printf("非法输入字符,请重新输入数字:");
				while(getchar() != '\n');//清除缓存区 
				continue; 
			}
			if(eglishgrade1<=100 && eglishgrade1>=1)
			{
				p->eglishgrade=eglishgrade1;
				break;
			}else
			{
				printf("非法输入成绩,请重新输入:"); 
				continue;
			}
		}
		printf("请输入计算机成绩:");
		while (1)
		{
			j=scanf("%f",&computeregrade1);
			if(j==0||getchar()!='\n')
			{
				printf("非法输入字符,请重新输入数字:");
				while(getchar() != '\n');//清除缓存区 
				continue; 
			}
			if(computeregrade1<=100 && computeregrade1>=1)
			{
				p->computeregrade=computeregrade1;
				break;
			}else
			{
				printf("非法输入成绩,请重新输入:"); 
				continue;
			}
		}
		pingjun1=(mathgrade1+eglishgrade1+computeregrade1)/3.0;//计算平均成绩 
		printf("平均成绩:%.2f\n",pingjun1);
		p->pingjun=pingjun1;
		p->zong=mathgrade1+eglishgrade1+computeregrade1;
		printf("总分:%.2f",p->zong);
		p->next=NULL;//使新创建的结构体指向空 
		tail->next=p;//使新结构体与链表链接(尾插法) 
		int i;
		printf("是否继续添加\n添加输入1结束输入0\n");
		while (1) {
			scanf("%d", &i);
			if (i == 1 || i == 0) 
			{
				break;
			} else {
				printf("请输入1或0\n");
				continue;
			}
		}
		if (i == 0) 
		{
			system("pause");//暂停
			system("cls");//返回 
			break;
		}
	}
}

 

删除函数:

 

void cancel(stu*head)//删除学生信息 
{
	stu *p1=NULL,*p2=NULL;//申请结构体指针 
	p1=head;//初始化 
	p2=head->next;//初始化 
	printf("请输入需要删除的学号:");
	char xuehao1[1000]; 
	scanf("%s",xuehao1);//存入输入的学号 
	int a=0;
	while(p2 != NULL)
	{
		if(strcmp(xuehao1,p2->xuehao)==0)//寻找需要删除的部分 
		{
			p1->next=p2->next;
			free(p2);
			a=1;
			break;
		}
		p1=p2;
		p2=p2->next;
	}
	if(a==1)
	{
		printf("删除成功");
	}else
	{
		printf("没有找到这个学生,删除失败\n");
	}
	system("pause");
	system("cls");
} 

查找函数:

void find(stu*head)//查找需要的学生信息 
{
	stu *p1=NULL;
	int a=0;
	char xuehao2[1000];
	p1=head->next;
	printf("请输入需要查找的学号:");
	scanf("%s",xuehao2);
	while(p1 != NULL)
	{
		if(strcmp(xuehao2,p1->xuehao)==0)
		{
			printf("学号:%s\n",p1->xuehao);
			printf("姓名:%s\n",p1->name);
			printf("班级:%s\n",p1->Class);
			printf("数学成绩:%.2f\n",p1->mathgrade);
			printf("英语成绩:%.2f\n",p1->eglishgrade);
			printf("计算机成绩:%.2f\n",p1->computeregrade);
			printf("平均成绩:%.2f\n",p1->pingjun);
			printf("总分:%.2f\n",p1->zong);
			system("pause");
			system("cls");
			a=1;
			break;
		}
		p1=p1->next;
	}
	if(a==0)
	{
		printf("查无此人\n");
		system("pause");
		system("cls"); 
	}	
}

 

修改函数

void change(stu*head)//更换学生信息 
{
	while(1)
	{
		stu *p1=NULL,*p2=NULL;
		int a=0;
		p1=head->next;
		p2=head->next;
		int b=1;
		char xuehao1[1000];
		if(b==1)
		{
			printf("请输入需要修改的学号");
			scanf("%s",xuehao1);
			while(p1 != NULL)
			{
				if(strcmp(p1->xuehao,xuehao1)==0)
				{
					printf("学号:%s\n",p1->xuehao);
					printf("名字:%s\n",p1->name);
					printf("班级:%s\n",p1->Class);
					printf("数学成绩:%.2f\n",p1->mathgrade);
					printf("英语成绩:%.2f\n",p1->eglishgrade);
					printf("计算机成绩:%.2f\n",p1->computeregrade);
					printf("平均成绩:%.2f\n",p1->pingjun);
					printf("总分:%.2f\n",p1->zong);
					printf("请输入修改后的学号:"); 
					scanf("%s",p1->xuehao);
					printf("请输入修改后的姓名:");
					scanf("%s",p1->name);
					printf("请输入修改后的班级:");
					scanf("%s",p1->Class);
					int e;
					printf("请输入修改后的数学成绩:");
					while(1)
					{
						e=scanf("%f",&p1->mathgrade);
						if(e==0||getchar()!='\n')
						{
							printf("非法输入字符,请重新输入数字:");
							while(getchar() != '\n');
							continue;
						}
						if(p1->mathgrade >= 1 && p1->mathgrade <= 100)
						{
							break;
						}else
						{
							printf("非法输入成绩,请重新输入:");
							continue; 
						}
					}
					printf("请输入修改后的英语成绩:");
					while(1)
					{
						e=scanf("%f",&p1->eglishgrade);
						if(e==0||getchar()!='\n')
						{
							printf("非法输入字符,请重新输入数字:");
							while(getchar() != '\n');
							continue;
						}
						if(p1->eglishgrade >=1 && p1->eglishgrade <= 100)
						{
							break;
						}else
						{
							printf("非法输入成绩,请重新输入:");
							continue; 
						}
					}
					printf("请输入修改后的计算机成绩:");
					while(1)
					{
						e=scanf("%f",&p1->computeregrade);
						if(e==0||getchar()!='\n')
						{
							printf("非法输入字符,请重新输入数字:");
							while(getchar() != '\n');
							continue;
						}
						if(p1->computeregrade >= 1 && p1->computeregrade <= 100)
						{
							break;
						}else
						{
							printf("非法输入成绩,请重新输入:");
							continue; 
						}
					}
					p1->pingjun=(p1->mathgrade+p1->eglishgrade+p1->computeregrade)/3.0;
					printf("\n修改后平均成绩为:%.2lf",p1->pingjun);
					p1->zong=(p1->mathgrade+p1->eglishgrade+p1->computeregrade);
					a=2;
					break;
				}
				
				p1=p1->next;
			}
		}
		if(a==0){
			printf("查无此人");
			system("pause");
			system("cls");
			break;
		}
		printf("继续修改请输入1,结束修改请输入0\n");
		while(1)
		{
			scanf("%d",&a);
			if(a==0||a==1)
			{
				break;
			}else
			{
				printf("请输入0或1\n");
				continue;
			}
	    }
		if(a==0)
		{
			system("pause");
			system("cls");
			break;
		}
	}
}

int tui=0;

排序函数:

void pai(stu *head)//冒泡排序 
{
	stu *p1;
	p1=head;
	int a=0;
	while(p1 != NULL)//该循环为统计链表的结构体个数 
	{
		a++;
		p1=p1->next; 
	}
	for(int i=1;i<a;i++)
	{
		stu *q1=NULL,*q2=NULL,*q3=NULL;//指针初始化 
		q3=head;
		q1=head->next; 
		q2=q1->next;
		for(int j=1 ; j<a-i;j++)
		{
			if(q1->pingjun > q2->pingjun)
			{
				q1->next=q2->next;
				q3->next=q2;
				q2->next=q1;
			}
			q3=q3->next;//指针移动 
			q1=q3->next;//指针移动 
			q2=q1->next;//指针移动 
		}
	}
	printf("完成排序\n");
	system("pause");	
	system("cls");
}

 

 

 

显示函数 :

void xianshi(stu*head)//显示所以学生信息 
{
	stu *p2=NULL;
	p2=head->next;
	while(p2 != NULL)
	{
		printf("学号:%s\n",p2->xuehao);
		printf("名字:%s\n",p2->name);
		printf("班级:%s\n",p2->Class);
		printf("数学成绩:%.2f\n",p2->mathgrade);
		printf("英语成绩:%.2f\n",p2->eglishgrade);
		printf("计算机成绩:%.2f\n",p2->computeregrade);
		printf("平均成绩:%.2f\n",p2->pingjun);
		printf("总分:%.2f\n",p2->zong);
		printf("\n"); 
		p2=p2->next; 
	}
	system("pause");
	system("cls");
}

 保存txt文件:

void baocun(stu*head)//将输入的学生信息保存在txt格式文件中 
{
	char a1[20]={"学生姓名:"};
	char a2[20]={"学号:"};
	char a3[20]={"数学成绩:"};
	char a4[20]={"英语成绩:"}; 
	char a5[20]={"计算机成绩:"};
	char a6[20]={"总分:"}; 
	stu *p2=NULL;
	p2=head->next;
	FILE* fp;
	if( (fp=fopen("E:\\学生成绩.txt","wb") )== NULL) 
		 {
			  printf("打开写入文件xue.txt失败\n");
			  return;
		 }
	while(p2!=NULL)
	{
		fprintf(fp,"%s",a1);
		fprintf(fp,"%s\n",p2->name);
		fprintf(fp,"%s",a2);
		fprintf(fp,"%s\n",p2->xuehao);
		fprintf(fp,"%s",a3);
		fprintf(fp,"%.2f\n",p2->mathgrade);
		fprintf(fp,"%s",a4);
		fprintf(fp,"%.2f\n",p2->eglishgrade);
		fprintf(fp,"%s",a5);
		fprintf(fp,"%.2f\n",p2->computeregrade);
		fprintf(fp,"%s",a6);
		fprintf(fp,"%.2f\n",p2->zong);
		p2=p2->next;
	}
	fclose(fp);
	printf("保存成功\n");
	system("pause");	
	system("cls");
}

 以上就是该系统各功能的代码

下面是这个系统各段代码的组合完全体(可直接运行实现全功能)。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct student
{
	char xuehao[1000];//学号 
	char name[20];//姓名 
	char Class[20];//班级 
	float mathgrade;//数学成绩 
	float eglishgrade;//英语成绩 
	float computeregrade;//计算机成绩 
	float pingjun;//平均成绩 
	float zong;//总分 
	struct student *next;
} stu;
stu *head;

void zeng(stu*head)//增加学生成绩信息 
{
	while (1) 
	{
		stu *p, *tail, *q;
		tail = head;
		while (tail->next != NULL) { //尾插法
		tail = tail -> next;
		}
		q = head->next;
		int a = 0;
		char xuehao1[20];
		printf("请输入学生号\n");
		scanf("%s",xuehao1);
		while(q != NULL)
		{
			if(strcmp(q->xuehao,xuehao1) == 0)//判断是否输入重复学号 
			{
				a=1;
				printf("学号无法重复请输入\n");
				break; 
			}else
			{
				q=q->next;
			}
		}
		if(a==1)
		{
			continue;
		}
		p=(stu*)malloc(sizeof(stu));//为新结构体申请空间 
		strcpy(p->xuehao,xuehao1);//复制学号到结构体中 
		printf("请输入姓名");
		scanf("%s",p->name);
		printf("请输入班级");
		scanf("%s",p->Class);
		float mathgrade1,eglishgrade1,computeregrade1,pingjun1;
		int j;
		printf("请输入数学成绩:");
		while (1)//该循环为防止输入错误类型和小于1大于100的分数 
		{
			j=scanf("%f",&mathgrade1);
			if(j==0||getchar()!='\n')
			{
				printf("非法输入字符,请重新输入数字:");
				while(getchar() != '\n');//清除缓存区 
				continue; 
			}
			if(mathgrade1<=100 && mathgrade1>=1)
			{
				p->mathgrade=mathgrade1;
				break;
			}else
			{
				printf("非法输入成绩,请重新输入:"); 
				continue;
			}
		}
		printf("请输入英语成绩:");
		while (1)
		{
			j=scanf("%f",&eglishgrade1);
			if(j==0||getchar()!='\n')
			{
				printf("非法输入字符,请重新输入数字:");
				while(getchar() != '\n');//清除缓存区 
				continue; 
			}
			if(eglishgrade1<=100 && eglishgrade1>=1)
			{
				p->eglishgrade=eglishgrade1;
				break;
			}else
			{
				printf("非法输入成绩,请重新输入:"); 
				continue;
			}
		}
		printf("请输入计算机成绩:");
		while (1)
		{
			j=scanf("%f",&computeregrade1);
			if(j==0||getchar()!='\n')
			{
				printf("非法输入字符,请重新输入数字:");
				while(getchar() != '\n');//清除缓存区 
				continue; 
			}
			if(computeregrade1<=100 && computeregrade1>=1)
			{
				p->computeregrade=computeregrade1;
				break;
			}else
			{
				printf("非法输入成绩,请重新输入:"); 
				continue;
			}
		}
		pingjun1=(mathgrade1+eglishgrade1+computeregrade1)/3.0;//计算平均成绩 
		printf("平均成绩:%.2f\n",pingjun1);
		p->pingjun=pingjun1;
		p->zong=mathgrade1+eglishgrade1+computeregrade1;
		printf("总分:%.2f",p->zong);
		p->next=NULL;//使新创建的结构体指向空 
		tail->next=p;//使新结构体与链表链接(尾插法) 
		int i;
		printf("是否继续添加\n添加输入1结束输入0\n");
		while (1) {
			scanf("%d", &i);
			if (i == 1 || i == 0) 
			{
				break;
			} else {
				printf("请输入1或0\n");
				continue;
			}
		}
		if (i == 0) 
		{
			system("pause");//暂停
			system("cls");//返回 
			break;
		}
	}
}

void cancel(stu*head)//删除学生信息 
{
	stu *p1=NULL,*p2=NULL;//申请结构体指针 
	p1=head;//初始化 
	p2=head->next;//初始化 
	printf("请输入需要删除的学号:");
	char xuehao1[1000]; 
	scanf("%s",xuehao1);//存入输入的学号 
	int a=0;
	while(p2 != NULL)
	{
		if(strcmp(xuehao1,p2->xuehao)==0)//寻找需要删除的部分 
		{
			p1->next=p2->next;
			free(p2);
			a=1;
			break;
		}
		p1=p2;
		p2=p2->next;
	}
	if(a==1)
	{
		printf("删除成功");
	}else
	{
		printf("没有找到这个学生,删除失败\n");
	}
	system("pause");
	system("cls");
} 

void xianshi(stu*head)//显示所以学生信息 
{
	stu *p2=NULL;
	p2=head->next;
	while(p2 != NULL)
	{
		printf("学号:%s\n",p2->xuehao);
		printf("名字:%s\n",p2->name);
		printf("班级:%s\n",p2->Class);
		printf("数学成绩:%.2f\n",p2->mathgrade);
		printf("英语成绩:%.2f\n",p2->eglishgrade);
		printf("计算机成绩:%.2f\n",p2->computeregrade);
		printf("平均成绩:%.2f\n",p2->pingjun);
		printf("总分:%.2f\n",p2->zong);
		printf("\n"); 
		p2=p2->next; 
	}
	system("pause");
	system("cls");
}

void find(stu*head)//查找需要的学生信息 
{
	stu *p1=NULL;
	int a=0;
	char xuehao2[1000];
	p1=head->next;
	printf("请输入需要查找的学号:");
	scanf("%s",xuehao2);
	while(p1 != NULL)
	{
		if(strcmp(xuehao2,p1->xuehao)==0)
		{
			printf("学号:%s\n",p1->xuehao);
			printf("姓名:%s\n",p1->name);
			printf("班级:%s\n",p1->Class);
			printf("数学成绩:%.2f\n",p1->mathgrade);
			printf("英语成绩:%.2f\n",p1->eglishgrade);
			printf("计算机成绩:%.2f\n",p1->computeregrade);
			printf("平均成绩:%.2f\n",p1->pingjun);
			printf("总分:%.2f\n",p1->zong);
			system("pause");
			system("cls");
			a=1;
			break;
		}
		p1=p1->next;
	}
	if(a==0)
	{
		printf("查无此人\n");
		system("pause");
		system("cls"); 
	}	
}

void change(stu*head)//更换学生信息 
{
	while(1)
	{
		stu *p1=NULL,*p2=NULL;
		int a=0;
		p1=head->next;
		p2=head->next;
		int b=1;
		char xuehao1[1000];
		if(b==1)
		{
			printf("请输入需要修改的学号");
			scanf("%s",xuehao1);
			while(p1 != NULL)
			{
				if(strcmp(p1->xuehao,xuehao1)==0)
				{
					printf("学号:%s\n",p1->xuehao);
					printf("名字:%s\n",p1->name);
					printf("班级:%s\n",p1->Class);
					printf("数学成绩:%.2f\n",p1->mathgrade);
					printf("英语成绩:%.2f\n",p1->eglishgrade);
					printf("计算机成绩:%.2f\n",p1->computeregrade);
					printf("平均成绩:%.2f\n",p1->pingjun);
					printf("总分:%.2f\n",p1->zong);
					printf("请输入修改后的学号:"); 
					scanf("%s",p1->xuehao);
					printf("请输入修改后的姓名:");
					scanf("%s",p1->name);
					printf("请输入修改后的班级:");
					scanf("%s",p1->Class);
					int e;
					printf("请输入修改后的数学成绩:");
					while(1)
					{
						e=scanf("%f",&p1->mathgrade);
						if(e==0||getchar()!='\n')
						{
							printf("非法输入字符,请重新输入数字:");
							while(getchar() != '\n');
							continue;
						}
						if(p1->mathgrade >= 1 && p1->mathgrade <= 100)
						{
							break;
						}else
						{
							printf("非法输入成绩,请重新输入:");
							continue; 
						}
					}
					printf("请输入修改后的英语成绩:");
					while(1)
					{
						e=scanf("%f",&p1->eglishgrade);
						if(e==0||getchar()!='\n')
						{
							printf("非法输入字符,请重新输入数字:");
							while(getchar() != '\n');
							continue;
						}
						if(p1->eglishgrade >=1 && p1->eglishgrade <= 100)
						{
							break;
						}else
						{
							printf("非法输入成绩,请重新输入:");
							continue; 
						}
					}
					printf("请输入修改后的计算机成绩:");
					while(1)
					{
						e=scanf("%f",&p1->computeregrade);
						if(e==0||getchar()!='\n')
						{
							printf("非法输入字符,请重新输入数字:");
							while(getchar() != '\n');
							continue;
						}
						if(p1->computeregrade >= 1 && p1->computeregrade <= 100)
						{
							break;
						}else
						{
							printf("非法输入成绩,请重新输入:");
							continue; 
						}
					}
					p1->pingjun=(p1->mathgrade+p1->eglishgrade+p1->computeregrade)/3.0;
					printf("\n修改后平均成绩为:%.2lf",p1->pingjun);
					p1->zong=(p1->mathgrade+p1->eglishgrade+p1->computeregrade);
					a=2;
					break;
				}
				
				p1=p1->next;
			}
		}
		if(a==0){
			printf("查无此人");
			system("pause");
			system("cls");
			break;
		}
		printf("继续修改请输入1,结束修改请输入0\n");
		while(1)
		{
			scanf("%d",&a);
			if(a==0||a==1)
			{
				break;
			}else
			{
				printf("请输入0或1\n");
				continue;
			}
	    }
		if(a==0)
		{
			system("pause");
			system("cls");
			break;
		}
	}
}

int tui=0;

void chushi()//初始化界面 
{
	system("pause");	
	system("cls");
	void pai(stu *head);
	void baocun(stu*head);
	while (1)
	{
		printf("\t\t****************************\n");
		printf("\t\t******学生成绩管理系统******\n");
		printf("\t\t****************************\n");
		printf("\t\t 1、新增学生成绩信息并保存\n");
		printf("\t\t 2、显示所有学生成绩信息\n");
		printf("\t\t 3、查询学生成绩信息\n");
		printf("\t\t 4、修改学生成绩信息\n");
		printf("\t\t 5、删除学生成绩信息\n");
		printf("\t\t 6、按照学生总成绩排序\n");
		printf("\t\t 7、生成text文件保存\n");
		printf("\t\t 0、退出系统\n");
		printf("\t\t 请输入你的选择:");
		int a,b;
		b=scanf("%d",&a);
		while(b!=1)
		{
			while((getchar())!='\n')
			{
				printf("警告:只能输入数字");
			}
			b = scanf("%d",&a);
		}
		system("cls");
		switch(a)//利用switch选择结构 
		{
			case 1:
				zeng(head);
				break;
			case 2:
				xianshi(head);
				break;
			case 3:
				find(head);
				break;
			case 4:
				chance(head);
				break;
			case 5:
				cancel(head);
				break;
			case 6:
				pai(head);
				break;
			case 7:
				baocun(head);
				break;		
			case 0:
				tui = 1;
				printf("感谢你使用学生通信录管理系统,请关掉程序!!!\n");
				break;
		}
		if(tui==1)
		{
			break;	
		}
	}	
}

int main()
{
	head = (stu*)malloc(sizeof(stu));
	head->next=NULL;
	char zhanghao1[20] = "a"/*储存注册账号*/,zhanghao2[20]/*储存登录账号*/;
	char mima1[20]="a"/*储存注册密码*/,mima2[20]/*储存登录密码*/;
	int j;
	for(int i=0;i!=1;)
	{
		printf("\t\t****************************\n");
		printf("\t\t******学生成绩管理系统******\n");
		printf("\t\t****************************\n");
		printf("\t\t请选择\n\t\t1.登录\n\t\t2.注册\n\t\t");
		char a[100];
		scanf("%s",a);
		if(strcmp(a,"1")==0 && strcmp(zhanghao1,"a")==0 && strcmp(mima1,"a")==0)//建立了一个简陋的注册登录界面 
		{
			printf("\t\t请先注册账号\n"); 
			printf("\t\t请输入需要创建的账号;");
			scanf("%s",zhanghao1);
			printf("\t\t请输入需要注册的密码:");
			scanf("%s",mima1);
			system("pause");
			system("cls");
			continue;
		}else if(strcmp(a,"1")==0 && strcmp(zhanghao1,"a")!=0 && strcmp(mima1,"a")!=0)
		{
			printf("\t\t请输入登录账号:");
			scanf("%s",zhanghao2);
			printf("\t\t请输入登录密码:");
			scanf("%s",mima2); 
			for(;;)
			{
				if(strcmp(zhanghao1,zhanghao2)!=0 || strcmp(mima1,mima2)!=0)
				{
					printf("\t\t账号密码错误\n\t\t请重新输入账号:");
					scanf("%s",zhanghao2);
					printf("\t\t请重新输入密码:");
					scanf("%s",mima2);
					j++;
					if(j==3)
					{
						break;	
					}
				}
				else
				{
					printf("成功登录\n");
					i=1;
					break;
				}
			}
		}else if(strcmp(a,"2")==0)
		{
			printf("\t\t请输入账号:");
			scanf("%s",zhanghao1);
			printf("\t\t请输入密码:");
			scanf("%s",mima1);
			system("pause");
			system("cls");
			continue; 
		}else
		{
			printf("\t\t请输入1或2");
			system("pause");
			system("cls");
			continue; 
		}
		if(j==3)
		{
			printf("\t\t输入错误次数过多");
			break; 
		}
		chushi();
		if (tui == 1) {
			break;
		}
		system("pause");
		system("cls");
	}
	return 0;
}

void pai(stu *head)//冒泡排序 
{
	stu *p1;
	p1=head;
	int a=0;
	while(p1 != NULL)//该循环为统计链表的结构体个数 
	{
		a++;
		p1=p1->next; 
	}
	for(int i=1;i<a;i++)
	{
		stu *q1=NULL,*q2=NULL,*q3=NULL;//指针初始化 
		q3=head;
		q1=head->next; 
		q2=q1->next;
		for(int j=1 ; j<a-i;j++)
		{
			if(q1->pingjun > q2->pingjun)
			{
				q1->next=q2->next;
				q3->next=q2;
				q2->next=q1;
			}
			q3=q3->next;//指针移动 
			q1=q3->next;//指针移动 
			q2=q1->next;//指针移动 
		}
	}
	printf("完成排序\n");
	system("pause");	
	system("cls");
}

void baocun(stu*head)//将输入的学生信息保存在txt格式文件中 
{
	char a1[20]={"学生姓名:"};
	char a2[20]={"学号:"};
	char a3[20]={"数学成绩:"};
	char a4[20]={"英语成绩:"}; 
	char a5[20]={"计算机成绩:"};
	char a6[20]={"总分:"}; 
	stu *p2=NULL;
	p2=head->next;
	FILE* fp;
	if( (fp=fopen("E:\\学生成绩.txt","wb") )== NULL) 
		 {
			  printf("打开写入文件xue.txt失败\n");
			  return;
		 }
	while(p2!=NULL)
	{
		fprintf(fp,"%s",a1);
		fprintf(fp,"%s\n",p2->name);
		fprintf(fp,"%s",a2);
		fprintf(fp,"%s\n",p2->xuehao);
		fprintf(fp,"%s",a3);
		fprintf(fp,"%.2f\n",p2->mathgrade);
		fprintf(fp,"%s",a4);
		fprintf(fp,"%.2f\n",p2->eglishgrade);
		fprintf(fp,"%s",a5);
		fprintf(fp,"%.2f\n",p2->computeregrade);
		fprintf(fp,"%s",a6);
		fprintf(fp,"%.2f\n",p2->zong);
		p2=p2->next;
	}
	fclose(fp);
	printf("保存成功\n");
	system("pause");	
	system("cls");
}


这是我的第一篇博客,水平不高。

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值