c语言学生成绩管理系统(增、删、查、改、排序、分析优秀及格率等)

复制时运行出错请看这里:c语言学生成绩管理系统
完整代码点击这里:github免费完整代码
github不能访问请点击这里 gitee链接

c语言学生成绩管理系统(增、删、查、改、排序、分析优秀及格率等)详细内容

一、功能描述
实现学生基本信息的管理,包括学生资料的录入、查询、修改、删除、浏览等操作,实现学生成绩信息的管理,包括学生成绩的录入、查询、修改、删除、浏览等操作。学生的基本信息包括:学号、姓名、班级、所选科目等,程序应提供班级与科目信息的录入功能。分析每个班单科成绩。(排序,最高分,最低分,及格率(60以上),优秀率(90以上))。保存信息到c盘目录下,以txt文件保存
c语言学生成绩管理系统(增、删、查、改、排序、分析优秀及格率等)_第1张图片
c语言学生成绩管理系统(增、删、查、改、排序、分析优秀及格率等)_第2张图片
在这里插入图片描述

1、总体设计
1)分析程序的功能
用户录入信息,实现增删查改和分析(排序)。信息保存到c盘
2)系统总体结构:
分为9个结构。用户实现学生成绩的增删查改,并在用户输入指令后,实现成绩
的分析。
模块 函数名称
录入学生的资料和成绩 input

//01录入学生的资料和成绩.
 struct node*input(node *head){
	int i=0,j=1;
	struct node *p,*n;
	p=(struct node*)malloc(sizeof(struct node));
	p=head;
	while(1){
		if(j>0){
			i++;
			n=(struct node*)malloc(sizeof(struct node));
			printf("请输入第%d个学生的学号,姓名\n",i);
			scanf("%d %s",&n->date,&n->name);
			getchar();
			printf("请输入科目(文或理)和班级(1或者2)\n");
			scanf("%s %d",&n->kemu,&n->me_class);
			fflush(stdin);
			printf("请输当前学生的语文,数学,英语成绩\n");
			scanf("%lf %lf %lf",&n->yuwen,&n->shuxue,&n->yingyu);
			getchar();
			n->num=n->yuwen+n->shuxue+n->yingyu;
			n->avg=(p->num)/3;
			p->next=n;
			p=n;
			printf("是否继续输入下一个同学的信息?输入 1 继续,输入  0  就停止输入\n");
			fflush(stdin);
			scanf("%d",&j);
			fflush(stdin);
		}
	
		else {
			p->next=last=NULL;
				p=last;
			
			break;
		}
	}
	free(p);//释放p
	return head;
}

增加学生信息及成绩 add

 struct node*add(struct node*head){
	 if(head->next==NULL){
		printf("还没有存储数据,请先存储数据");
		return head;
	 }
	 else{
		struct node*head1,*p;
		head1=(struct node*)malloc(sizeof(struct node));
		printf("正在添加学生信息及成绩\n");
		head1=input(head1);//插入的节点用链表的方式存储.
		p=head->next;
		while(p->next!=NULL){
			p=p->next;
		}
		p->next=head1->next;//因为头结点是空的所以应该链接头结点的下一个节点。
		return head;
	 }
 }

查询学生信息及成绩 find

struct node*find(struct node*head){
	int i;
	struct node*p;
	if(head==NULL){
		printf("还没有存储数据,请先存储数据\n");
	}
	else{
		printf("请输入你要找查的学号:");
		scanf("%d",&i);
		p=head->next;
		while(p->date!=i&&p->next!=NULL){
				p=p->next;
		}
			if(p->date==i){
				printf("学号\t姓名\t班级\t科目\t语文\t\t数学\t\t英语\n");
	printf("%d\t%s\t%d\t%s\t%lf\t%lf\t%lf",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
				printf("\n");
				return p;
			}
			else{
			printf("没有找到你要查找的同学\n");
			return NULL;
			}
	}
	
 }

删除学生信息及成绩 del

void del(struct node*head){
 int key,j=0;
	struct node*p,*s;
	s=head->next;
	p=head;
	printf("请输入你要删除学生的学号");
	fflush(stdin);//删除缓存的数据。
	scanf("%d",&key);
	while(s!=NULL){
		if(s->date!=key){
			p=s;
			s=s->next;
		}
		else
			break;	
	}
	if(s!=NULL){
		p->next=s->next;
		free(s);
		printf("删除成功\n");
	}
	else
		printf("删除失败\n");
 }

修改学生信息和成绩 change

struct node*change(struct node*head){
	struct node*p=NULL;
	p=find(head);
	if(p==NULL){
		printf("修改失败\n");
		return head;
	}
	else{
		printf("请输入修改的学生信息\n");
		printf("姓名 班级 科目\n");
		scanf("%s %d %s",&p->name,&p->me_class ,&p->kemu);
		fflush(stdin);
		printf("请输入修改的学生成绩\n");
		printf("语文 数学 英语\n");
		scanf("%lf %lf %lf",&p->yuwen,&p->shuxue,&p->yingyu);
		fflush(stdin);//getchar()
		printf("\n学号\t姓名\t班级\t科目\t语文\t\t数学\t\t英语\n");
	printf("%d\t%s\t%d\t%s\t%lf\t%lf\t%lf\n",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
		return head;
	}
 }

浏览学生信息及成绩 output

struct node* output(struct node*head)
 {
	if(head==NULL)
		printf("还没有数据请先输入数据\n");
	else
	{
		struct node *p;
		p=head->next;
		printf("学号\t姓名\t班级\t科目\t语文\t\t数学\t\t英语\n");
		while(p!=NULL)
		{		printf("%d\t%s\t%d\t%s\t%lf\t%lf\t%lf",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
			p=p->next;
			printf("\n");
		}
	printf("\n");
	}
	return head;
 }

文件夹操作 file

void file(struct node*head)
 {
 int i=0;
	FILE *fp;
	struct node*p=head->next;
	fp=fopen("C:\\学生成绩单.txt","wt");

	fprintf(fp,"学号\t姓名\t班级\t科目\t语文\t\t   数学\t\t   英语\n");
	 while(p!=NULL) 
 {
	 fprintf(fp,"%d\t%s\t%d\t%s\t%lf\t\t%lf\t\t%lf\n",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
	 p = p->next;
	 i++;
 }
	 if(i>0)
		 printf("\t\t\t\t\t—————成功保存c盘—————\n");
	 else printf("\t\t\t\t\t—————没有数据保存失败到桌面—————\n");
	fclose(fp);
 
 }

输出成绩统计 Outtj

void Outtj(struct node1 stu[50],int si,int n)
{
	double  avg1=0,avg2=0,avg3=0;
	double  k1=0,k2=0,k3=0;//及格率
	double  j1=0,j2=0,j3=0;//优秀率
	double  max1;
	double  min1;
	int j;
	
		max1=stu[0].yuwen;
		min1=stu[0].yuwen;
	for(j=0;j<si;j++)
	{	
		avg1+=stu[j].yuwen;
		if(stu[j].yuwen>=60) k1++;
		if(stu[j].yuwen>=90) j1++;
		if(stu[j].yuwen>max1) max1=stu[j].yuwen;
		if(stu[j].yuwen<min1) min1=stu[j].yuwen;
	}
	avg1/=j;
	k1/=j;
	j1/=j;
	printf("\t\t*********%d班成绩*************\n",n);
	printf("语文平均成绩\t\t及格率\t\t优秀率\t\t最高分\t\t最低分\n");
	printf("%f\t\t%f\t%f\t%lf\t%lf\n",avg1,k1,j1,max1,min1);
		max1=stu[0].shuxue;
		min1=stu[0].shuxue;
	for(j=0;j<si;j++)
	{
		avg2+=stu[j].shuxue;
		if(stu[j].shuxue>=60)k2++;
		if(stu[j].shuxue>=90)j2++;
		if(stu[j].shuxue>max1) max1=stu[j].shuxue;
		if(stu[j].shuxue<min1) min1=stu[j].shuxue;
	}
	avg2/=j;
	k2/=j;
	j2/=j;
	printf("数学平均成绩\t\t及格率\t\t优秀率\t\t最高分\t\t最低分\n");
	printf("%lf\t\t%lf\t%lf\t%lf\t%lf\n",avg2,k2,j2,max1,min1);
		max1=stu[0].yingyu;
		min1=stu[0].yingyu;
	for(j=0;j<si;j++)
	{
		avg3+=stu[j].yingyu ;
		if(stu[j].yingyu>=60) k3++;
		if(stu[j].yingyu>=90)j3++;
		if(stu[j].yingyu>max1) max1=stu[j].yingyu;
		if(stu[j].yingyu<min1) min1=stu[j].yingyu;
	}
	avg3/=(j);
	k3/=(j);
	j3/=(j);
	printf("英语平均成绩\t\t及格率\t\t优秀率\t\t最高分\t\t最低分\n");
	printf("%lf\t\t%lf\t%lf\t%lf\t%lf\n",avg3,k3,j3,max1,min1);

}

输出成绩排序 OutPx

void OutPx(struct node*head,struct node1 stu[],int si,int n){//stu[50]数组,int si长度,int n班级。
	int j,k=0;
	int i,h;//控制学科。
	 struct xueke
	{
		char aa[15];
	 }km[4]={{"语文"},{"数学"},{"英语"},{"总成绩"}};
	lbzsz(head);
	printf("\t\t%d班的成绩排序\n",n);
	for(i=0,h=1;i<4;i++,h++){//for1
		for(j=0;j<si;j++){//for2
			for(k=0;k<si-1-j;k++){//for3
				if(h==1){
					if(stu[k].yuwen<stu[k+1].yuwen){
					t=stu[k+1];
					stu[k+1] =stu[k] ;
					stu[k]=t;
					}
				}
				if(h==2){
					if(stu[k].shuxue<stu[k+1].shuxue){
					t =stu[k+1];
					stu[k+1] =stu[k] ;
					stu[k] =t ;
					}
				}
				if(h==3){
					if(stu[k].yingyu<stu[k+1].yingyu){
					t=stu[k+1];
					stu[k+1] =stu[k] ;
					stu[k] =t ;
					}
				}
				if(h==4){
					if(stu[k].num  <stu[k+1].num  ){
					t =stu[k+1];
					stu[k+1] =stu[k] ;
					stu[k] =t ;
					}
				}
			}//for3结束
		}//for2结束
		printf("%s排名\n学号\t姓名\t班级\t%s成绩\t排名\n",km[i].aa,km[i].aa);
		if(h==1){
			for(j=0,k=1;j<si;j++,k++)
			printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].yuwen,k);
			}
		if(h==2){
				for(j=0,k=1;j<si;j++,k++)
					printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].shuxue ,k);
			}
		if(h==3){
				for(j=0,k=1;j<si;j++,k++)
				printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].yingyu ,k);
			}
		if(h==4){
				for(j=0,k=1;j<si;j++,k++)
				printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].num  ,k);
			}
	}
  }

三、总程序清单

#include
#include
#include"stdd.h"
#include
#include"cjfx.h"

 int main()
 {
	int i,j=1;
	struct node*head;
	last=NULL;
	head=(struct node*)malloc(sizeof(struct node));
	head->next =NULL;
	printf("\t\t---欢迎使用学生成绩管理系统---\n");
	while(j){
		i= menu();
		switch(i){
			case 0:
				j=0; 
				printf("退出成功");
				break;
			case 1:
				head=input(head);system("pause");break;//创建节点函数
			case 2:
				head=add(head);system("pause");break;//增加学生信息及成绩
			case 3:
				find(head);system("pause");break;//查询学生信息及成绩
			case 4:
				del(head);system("pause");break;    //删除学生信息及成绩;
			case 5:
				head=change(head);system("pause");break;//05修改学生信息和成绩
			case 6:
				 output(head);system("pause");break;//浏览学生信息及成绩
			case 7:
				 file(head);system("pause");break;//(自己创新)保存到桌面
			case 8:
				 main1(head);system("pause");break;//(创新)学生成绩分析
			default:break;
	
		}
		printf("\n");
		printf("\t\t——————————————\n");
	}//while结束
	system("pause");
 }

#include
#include
#include
struct node1
{
	int date;	//学号
	int me_class;	  //班级
	double yuwen;//语文成绩
	double shuxue;//数学成绩
	double yingyu;//英语成绩
	double num;			//总分
	double avg;			//平均分
	char name[20];		//姓名	 
	char kemu[20];		//所选科目
}stu1[50],stu2[50],t;
int si1=0,si2=0;
void lbzsz(struct node*head);
void OutPx(struct node*head,struct node1 stu[50],int si,int n);//输出成绩排序//输出成绩统计
void Outtj(struct node1 stu[50],int si,int n);//输出成绩统计
int cjmenu(){
	 int i=1;
		printf("\t\t 1.1班成绩排序\n");
		printf("\t\t 2.2班成绩排序\n");
		printf("\t\t 3.1班成绩统计\n");
		printf("\t\t 4.2班成绩统计\n");
		printf("\t\t 0.退出\n");
		printf("\t\t-----------------------------\n");
		printf("\t请选择序号\n");
		scanf_s("%d",&i);
		while(1)
		{
			if(i<0||i>4)
			{
				printf("***没有此选项。请重新选择***\n");
				system("pause");
			}
			break;
		}

	return i;
}
void main1(struct node*head)
{
	int i,j=1;
	printf("\t\t---成绩分析系统---\n");
	while(j){
		i= cjmenu();
		 lbzsz(head);
		switch(i){
			case 0:
				j=0; 
				printf("退出成功");
				break;
			case 1:
				 OutPx(head,stu1,si1,1);system("pause");break;system("pause");
			case 2:
				OutPx(head,stu2,si2,2);system("pause");break;system("pause");
			case 3:
				Outtj(stu1,si1,1);system("pause");break;system("pause");
			case 4:
				Outtj(stu2,si2,2);system("pause");break;system("pause");
			default:break;
	
		}
		printf("\n");
		printf("\t\t——————————————\n");
	}//while结束
 }
//链表存入两个数组
void lbzsz(struct node*head)
{
	struct node*p;
	p=head;
	if(head->next==NULL)
		{printf("没有数据请先存入数据");}
	if(head->next)
	{
		for(si1=0,si2=0;p->next !=NULL;)
		{
			p=p->next ;
			if(p->me_class %2==0)
			{
				stu2[si2].avg =p->avg ;//平均分
				stu2[si2].date=p->date;//学号
				strcpy(stu2[si2].kemu,p->kemu);//字符串要用strcpy
				stu2[si2].me_class=p->me_class;
				strcpy(stu2[si2].name,p->name);
				stu2[si2].num=p->num;
				stu2[si2].shuxue=p->shuxue;
				stu2[si2].yingyu=p->yingyu;
				stu2[si2].yuwen=p->yuwen;
				si2++;
			}
			else
			{
				stu1[si1].avg =p->avg ;//平均分
				stu1[si1].date=p->date;//学号
				strcpy(stu1[si1].kemu,p->kemu);
				stu1[si1].me_class=p->me_class;
				strcpy(stu1[si1].name,p->name);
				stu1[si1].num=p->num;
				stu1[si1].shuxue=p->shuxue;
				stu1[si1].yingyu=p->yingyu;
				stu1[si1].yuwen=p->yuwen;
				si1++;
			}
		}
	
	}
	/******************************************************/
	
}//链表存入两个数组
//输出成绩排序
void OutPx(struct node*head,struct node1 stu[],int si,int n){//stu[50]数组,int si长度,int n班级。
	int j,k=0;
	int i,h;//控制学科。
	 struct xueke
	{
		char aa[15];
	 }km[4]={{"语文"},{"数学"},{"英语"},{"总成绩"}};
	lbzsz(head);
	printf("\t\t%d班的成绩排序\n",n);
	for(i=0,h=1;i<4;i++,h++){//for1
		for(j=0;j<si;j++){//for2
			for(k=0;k<si-1-j;k++){//for3
				if(h==1){
					if(stu[k].yuwen<stu[k+1].yuwen){
					t=stu[k+1];
					stu[k+1] =stu[k] ;
					stu[k]=t;
					}
				}
				if(h==2){
					if(stu[k].shuxue<stu[k+1].shuxue){
					t =stu[k+1];
					stu[k+1] =stu[k] ;
					stu[k] =t ;
					}
				}
				if(h==3){
					if(stu[k].yingyu<stu[k+1].yingyu){
					t=stu[k+1];
					stu[k+1] =stu[k] ;
					stu[k] =t ;
					}
				}
				if(h==4){
					if(stu[k].num  <stu[k+1].num  ){
					t =stu[k+1];
					stu[k+1] =stu[k] ;
					stu[k] =t ;
					}
				}
			}//for3结束
		}//for2结束
		printf("%s排名\n学号\t姓名\t班级\t%s成绩\t排名\n",km[i].aa,km[i].aa);
		if(h==1){
			for(j=0,k=1;j<si;j++,k++)
			printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].yuwen,k);
			}
		if(h==2){
				for(j=0,k=1;j<si;j++,k++)
					printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].shuxue ,k);
			}
		if(h==3){
				for(j=0,k=1;j<si;j++,k++)
				printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].yingyu ,k);
			}
		if(h==4){
				for(j=0,k=1;j<si;j++,k++)
				printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].num  ,k);
			}
	}
  }
//输出成绩统计
void Outtj(struct node1 stu[50],int si,int n)
{
	double  avg1=0,avg2=0,avg3=0;
	double  k1=0,k2=0,k3=0;//及格率
	double  j1=0,j2=0,j3=0;//优秀率
	double  max1;
	double  min1;
	int j;
	
		max1=stu[0].yuwen;
		min1=stu[0].yuwen;
	for(j=0;j<si;j++)
	{	
		avg1+=stu[j].yuwen;
		if(stu[j].yuwen>=60) k1++;
		if(stu[j].yuwen>=90) j1++;
		if(stu[j].yuwen>max1) max1=stu[j].yuwen;
		if(stu[j].yuwen<min1) min1=stu[j].yuwen;
	}
	avg1/=j;
	k1/=j;
	j1/=j;
	printf("\t\t*********%d班成绩*************\n",n);
	printf("语文平均成绩\t\t及格率\t\t优秀率\t\t最高分\t\t最低分\n");
	printf("%f\t\t%f\t%f\t%lf\t%lf\n",avg1,k1,j1,max1,min1);
		max1=stu[0].shuxue;
		min1=stu[0].shuxue;
	for(j=0;j<si;j++)
	{
		avg2+=stu[j].shuxue;
		if(stu[j].shuxue>=60)k2++;
		if(stu[j].shuxue>=90)j2++;
		if(stu[j].shuxue>max1) max1=stu[j].shuxue;
		if(stu[j].shuxue<min1) min1=stu[j].shuxue;
	}
	avg2/=j;
	k2/=j;
	j2/=j;
	printf("数学平均成绩\t\t及格率\t\t优秀率\t\t最高分\t\t最低分\n");
	printf("%lf\t\t%lf\t%lf\t%lf\t%lf\n",avg2,k2,j2,max1,min1);
		max1=stu[0].yingyu;
		min1=stu[0].yingyu;
	for(j=0;j<si;j++)
	{
		avg3+=stu[j].yingyu ;
		if(stu[j].yingyu>=60) k3++;
		if(stu[j].yingyu>=90)j3++;
		if(stu[j].yingyu>max1) max1=stu[j].yingyu;
		if(stu[j].yingyu<min1) min1=stu[j].yingyu;
	}
	avg3/=(j);
	k3/=(j);
	j3/=(j);
	printf("英语平均成绩\t\t及格率\t\t优秀率\t\t最高分\t\t最低分\n");
	printf("%lf\t\t%lf\t%lf\t%lf\t%lf\n",avg3,k3,j3,max1,min1);

}
#include
//结构体
struct node
{
	int date;	//学号
	int me_class;	  //班级
	double yuwen;//语文成绩
	double shuxue;//数学成绩
	double yingyu;//英语成绩
	double num;			//总分
	double avg;			//平均分
	char name[20];		//姓名	 
	char kemu[20];		//所选科目
	struct node *next;
};
struct node*input(struct node*head);   //01录入学生的资料和成绩.
struct node*add(struct node*head);	   //02增加学生信息及成绩
struct node*find(struct node*head);    //3.查询学生信息及成绩
void del(struct node*head);			   //04删除学生信息及成绩;
struct node*change(struct node*head);  //05修改学生信息和成绩
struct node* output(struct node*head); //06浏览学生信息及成绩
void file(struct node*head);   //文件夹操作。

 //主菜单
int menu(){
	 int i=1;
		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.保存学生成绩到c盘\n");
		printf("\t\t 8.成绩分析系统\n");
		printf("\t\t 0.退出\n");
		printf("\t\t-----------------------------\n");
		printf("\t请选择序号\n");
		scanf_s("%d",&i);
		while(1)
		{
			if(i<0||i>8)
			{
				printf("***没有此选项。请重新选择***\n");
				system("pause");
			}
			break;
		}

	return i;
}
struct node *last;//尾节点
 //01录入学生的资料和成绩.
 struct node*input(node *head)//
{
	int i=0,j=1;
	struct node *p,*n;
	p=(struct node*)malloc(sizeof(struct node));
	p=head;
	while(1)
	{

		if(j>0)
		{
			i++;
			n=(struct node*)malloc(sizeof(struct node));
			printf("请输入第%d个学生的学号,姓名\n",i);
			scanf("%d %s",&n->date,&n->name);
			getchar();
			printf("请输入科目(文或理)和班级(1或者2)\n");
			scanf("%s %d",&n->kemu,&n->me_class);
			fflush(stdin);
			printf("请输当前学生的语文,数学,英语成绩\n");
			scanf("%lf %lf %lf",&n->yuwen,&n->shuxue,&n->yingyu);
			getchar();
			n->num=n->yuwen+n->shuxue+n->yingyu;
			n->avg=(p->num)/3;
			
			p->next=n;
			p=n;
			printf("是否继续输入下一个同学的信息?输入 1 继续,输入  0  就停止输入\n");
			fflush(stdin);
			scanf("%d",&j);
			fflush(stdin);
		}
	
		else 
		{
			p->next=last=NULL;
				p=last;
			
			break;
		}
	}
	free(p);//释放p
	return head;
}
//02增加学生信息及成绩
 struct node*add(struct node*head)
 {
	 if(head->next==NULL)
	 {
		printf("还没有存储数据,请先存储数据");
		return head;
	 }
	 else
	{
		struct node*head1,*p;
		head1=(struct node*)malloc(sizeof(struct node));
		printf("正在添加学生信息及成绩\n");
		head1=input(head1);//插入的节点用链表的方式存储.
		p=head->next;
		while(p->next!=NULL)
		{
			p=p->next;
		}
		p->next=head1->next;//因为头结点是空的所以应该链接头结点的下一个节点。
		return head;
	 }
 }
  //3.查询学生信息及成绩
 struct node*find(struct node*head)
 {
	int i;
	struct node*p;
	if(head==NULL)
	{
		printf("还没有存储数据,请先存储数据\n");
	}
	else
	{
		printf("请输入你要找查的学号:");
		scanf("%d",&i);
		p=head->next;
		while(p->date!=i&&p->next!=NULL)
		{
				p=p->next;
		}
			if(p->date==i)
			{
				printf("学号\t姓名\t班级\t科目\t语文\t\t数学\t\t英语\n");
				printf("%d\t%s\t%d\t%s\t%lf\t%lf\t%lf",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
				printf("\n");
				return p;
			}
			else
			{
			printf("没有找到你要查找的同学\n");
			return NULL;
			}
	}
	
 }
 //04删除学生信息及成绩;
 void del(struct node*head)
 {
 int key,j=0;
	struct node*p,*s;
	s=head->next;
	p=head;
	printf("请输入你要删除学生的学号");
	fflush(stdin);//删除缓存的数据。
	scanf("%d",&key);
	
	while(s!=NULL)
	{
		if(s->date!=key)
		{
			p=s;
			s=s->next;
		}
		else
			break;	
	}
	if(s!=NULL)
	{
		p->next=s->next;
		free(s);
		printf("删除成功\n");
	}
	else
		printf("删除失败\n");
 }
 //05修改学生信息和成绩
 struct node*change(struct node*head)
 {
	struct node*p=NULL;
	p=find(head);
	if(p==NULL)
	{
		printf("修改失败\n");
		return head;
	}
	else
	{
		printf("请输入修改的学生信息\n");
		printf("姓名 班级 科目\n");
		scanf("%s %d %s",&p->name,&p->me_class ,&p->kemu);
		fflush(stdin);
		printf("请输入修改的学生成绩\n");
		printf("语文 数学 英语\n");
		scanf("%lf %lf %lf",&p->yuwen,&p->shuxue,&p->yingyu);
		fflush(stdin);//getchar()
		printf("\n学号\t姓名\t班级\t科目\t语文\t\t数学\t\t英语\n");
		printf("%d\t%s\t%d\t%s\t%lf\t%lf\t%lf\n",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
		return head;
	}
 }
 //06浏览学生信息及成绩(测试)
 struct node* output(struct node*head)
 {
	if(head==NULL)
		printf("还没有数据请先输入数据\n");
	else
	{
		struct node *p;
		p=head->next;
		printf("学号\t姓名\t班级\t科目\t语文\t\t数学\t\t英语\n");
		while(p!=NULL)
		{
			printf("%d\t%s\t%d\t%s\t%lf\t%lf\t%lf",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
			p=p->next;
			printf("\n");
		}
	printf("\n");
	
	}
	return head;
 }
 void file(struct node*head)
 {
 int i=0;
	FILE *fp;
	struct node*p=head->next;
	fp=fopen("C:\\学生成绩单.txt","wt");

	fprintf(fp,"学号\t姓名\t班级\t科目\t语文\t\t   数学\t\t   英语\n");
	 while(p!=NULL) 
 {
	 fprintf(fp,"%d\t%s\t%d\t%s\t%lf\t\t%lf\t\t%lf\n",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
	 p = p->next;
	 i++;
 }
	 if(i>0)
		 printf("\t\t\t\t\t—————成功保存c盘—————\n");
	 else printf("\t\t\t\t\t—————没有数据保存失败到桌面—————\n");
	fclose(fp);
 
 }

复制时运行出错请看这里:c语言学生成绩管理系统

你可能感兴趣的:(项目,链表,c语言)