#include<stdio.h>
#include<string.h>
#define N 4
struct student
{
	int xh;
	char mz[20];
	char xb;
	int  bj;
	float yw;
	float sx;
	float yy;
}stu[N];
void cd()//主菜单
{
	printf("*******************************************************\n");
	printf("  1: 输入学生数据   2: 修改学生数据  3: 处理数据       \n");
	printf("  4:输出学生数据    5: 退出系统                        \n");
    printf("*******************************************************\n");
}
void sr()//数据输入
{
	int i=0,num;
	do{
		printf("请输入第%d个学生的学号(输入0结束):",i+1);
		scanf("%d",&stu[i].xh);
		num=stu[i].xh;
		if(num==0)  continue;
		printf("请输入第%d个学生的姓名:",i+1);
		scanf("%s",stu[i].mz);
		printf("请输入第%d个学生的性别:",i+1);
     	scanf("%d",&stu[i].xb);
		printf("请输入第%d个学生的班级:",i+1);
		scanf("%d",&stu[i].bj);
		printf("请输入第%d个学生的语文成绩:",i+1);
		scanf("%f",&stu[i].yw);
		printf("请输入第%d个学生的数学成绩:",i+1);
		scanf("%f",&stu[i].sx);
		printf("请输入第%d个学生的英语成绩:",i+1);
		scanf("%f",&stu[i].yy);
		i++;
	}while(num!=0);
}
void xg()//修改
{
	
	int x,i,n,j=1;
	printf("请输入需要修改学生的学号:");
	scanf("%d",&x);
	for(i=0;i<N;i++)
	{
		if(x!=stu[i].xh)
			j++;
		if(j>N) printf("无该学生记录!\n");
		if(x==stu[i].xh)
		{
			printf("学号\t姓名\t性别\t班级\t语文\t数学\t英语\n");
			printf("-----------------------------------------------------------------------------\n");
			printf("%d\t%s\t%c\t%d\t%.1f\t%.1f\t%.1f\n",stu[i].xh,stu[i].mz,stu[i].xb,stu[i].bj,stu[i].yw,stu[i].sx,stu[i].yy);
			printf("**********************************************************\n");
			printf("1:学号        2:姓名       3:性别          4:班级         \n");
			printf("5:语文成绩    6:数学成绩   7:英语成绩      8:退出修改     \n");
			printf("**********************************************************\n");
			printf("请选择需要修改的项目(1~8):");
			scanf("%d",&n);
		if(n==1)
		{
		printf("请输入该学生的新学号:");
		scanf("%d",&stu[i].xh);
		}
		if(n==2)
		{
		printf("请输入该学生的新姓名:");
		scanf("%s",stu[i].mz);
		}
		if(n==3)
		{	
		printf("请输入该学生的性别:");
		getchar();
		scanf("%c",&stu[i].xb);
		}
		if(n==4)
		{	
		printf("请输入该学生的新班级:");
		scanf("%d",&stu[i].bj);
		}
		if(n==5)
		{	
		printf("请输入该学生的语文成绩:");
		scanf("%f",&stu[i].yw);
		}
		if(n==6)
		{
		printf("请输入该学生的数学成绩:");
		scanf("%f",&stu[i].sx);
		}
		if(n==7)
		{
		printf("请输入该学生的英语成绩:");
		scanf("%f",&stu[i].yy);
		}
		if(n==8)    break;
		if(n>8||n<1) printf("输入数据错误,请重新输入/n");
		printf("修改后的学生信息为:\n");
		printf("学号\t姓名\t性别\t班级\t语文\t数学\t英语\n");
		printf("-----------------------------------------------------------------------------\n");
		printf("%d\t%s\t%c\t%d\t%.1f\t%.1f\t%.1f\n",stu[i].xh,stu[i].mz,stu[i].xb,stu[i].bj,stu[i].yw,stu[i].sx,stu[i].yy);
		}
	}
}
void ave()//平均值
{
	int j;
	float k;
	printf("所有学生的平均成绩是:\n");
			printf("学号\t姓名\t平均\n");
			printf("-------------------------\n");
			for(j=0;j<N;j++)
			{	if(stu[j].xh!=0)
				{
				k=(stu[j].yw+stu[j].sx+stu[j].yy)/3.0;
				printf("%d\t%s\t%.1f\n",stu[j].xh,stu[j].mz,k);
				}
				else	continue;	
			}
}
void tjgxsxx()//统计不及格学生信息
{
	int j;
	printf("有不及格科目的学生是:\n");
	printf("学号\t姓名\t性别\t班级\t语文\t数学\t英语\n");
	printf("------------------------------------------------------------------\n");
	for(j=0;j<N;j++)
	{	
		if(stu[j].xh!=0)
		{	
			if(stu[j].yw<60.0||stu[j].sx<60.0||stu[j].yy<60.0)
				printf("%d\t%s\t%c\t%d\t%.1f\t%.1f\t%.1f\n",stu[j].xh,stu[j].mz,stu[j].xb,stu[j].bj,stu[j].yw,stu[j].sx,stu[j].yy);
		}
		else continue;
	}
}
void tj()//统计
{
	int i;
	do{
		printf("******************************************************\n");
		printf("1:统计平均分     2:统计不及格学生信息    3:返回       \n");
		printf("******************************************************\n");
		printf("请再选择具体的统计内容(1~3):");
		scanf("%d",&i);
		if(i==1)
		{
			ave();
		}
		if(i==2)
		{
			tjgxsxx();
		}
	}while(i<3);

}
void px()//排序
{
	struct student x;
	int i,j;
	for(j=0;j<N;j++)
	{
		for(i=0;i<N-j;i++)
		{	
		if(stu[i].xh==0)
			break;
		if(stu[i].xh>stu[i+1].xh)
		{
			x=stu[i];
			stu[i]=stu[i+1];
			stu[i+1]=x;
		}
	}
	}
	printf("排序后结果为:\n");
	printf("学号\t姓名\t性别\t班级\t语文\t数学\t英语\n");
	printf("---------------------------------------------------------------\n");
	for(j=0;j<N+1;j++)	
	{
		if(stu[j].xh==0)
			continue;
			printf("%d\t%s\t%c\t%d\t%.2f\t%.2f\t%.2f\n",stu[j].xh,stu[j].mz,stu[j].xb,stu[j].bj,stu[j].yw,stu[j].sx,stu[j].yy);
		}
}

void cx()//查询
{
    int i,x,j=1;
	printf("请输入要查询的学生的学号:");
	scanf("%d",&x);
	for(i=0;i<N;i++)
	{	
		if(x!=stu[i].xh)
			j++;
		if(j>N) printf("无该学生记录!");
		if(x==stu[i].xh) 
		{
			printf("学号\t姓名\t性别\t班级\t语文\t数学\t英语\n");
			printf("------------------------------------------------------------\n");
			printf("%d\t%s\t%c\t%d\t%.1f\t%.1f\t%.1f\n",stu[i].xh,stu[i].mz,stu[i].xb,stu[i].bj,stu[i].yw,stu[i].sx,stu[i].yy);
		}
	}
}

void cl()//处理数据
{
	int n;
	do{
	printf("*******************************************************\n");
	printf("1:按学号排序         2:查询                               \n");
	printf("3:统计               4:返回主菜单                         \n");
	printf("*******************************************************\n");
	printf("请选择具体的处理内容(1~4):");
	scanf("%d",&n);
	if(n==1)	px();
	if(n==2)	cx();
	if(n==3)    tj();
	}while(n<4);
}
void sc()//输出数据
{
	int i;
	printf("\t学号\t姓名\t性别\t班级\t语文\t数学\t英语\n");
	printf("----------------------------------------------------------\n");
	for(i=0;i<N;i++)
		{	
			if(stu[i].xh!=0)
				printf("\t%d\t%s\t%c\t%d\t%.2f\t%.2f\t%.2f\n",stu[i].xh,stu[i].mz,stu[i].xb,stu[i].bj,stu[i].yw,stu[i].sx,stu[i].yy);
			else
				continue;
		}
	
}

void main()//主函数
{
    int i;
    cd();
	printf("请选择需要进行的操作(1~5):");
	scanf("%d",&i);
	while(i!=5)
	{
		if(i==1)
		{
			sr();	
		}
		if(i==2)
		{
			xg();
		}
		if(i==3)
		{
			cl();
		}
		if(i==4)
		{
			sc();
		}
		if(i>5)printf("输入错误,请重新输入\n");
		cd();
		printf("请选择需要进行的操作(1~5):");
		scanf("%d",&i);
	}
	printf("谢谢使用!!!\n");
}