#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#define StuNum		30	  		//学生人数最大值
#define CourseNum	3			//科目数

struct student					//定义结构数组
{
	char	studentID[10];		//学号			
	int		score[CourseNum];   //成绩
	char	name[20];           //姓名  	
	float	average;     	    //平均
};		
typedef struct student STU;
STU stu[StuNum];
int n;

void inputscore(void);      //函数声明
void searchscore(void);
void statistic(void);
void studentrank(void);
void averge(void);
void menu(void);

void main()                 //主函数体
{	
	short int flag=0;
  	menu();
  	do
  	{	flag=1;
  		switch(getch())
  		{	
			case '1' : inputscore();break;    
  			case '2' : studentrank();break;
  			case '3' : searchscore();break;	
			case '4' : statistic();break;
  			case '5' : exit(0);			
  			default  : printf("输入出现错误\a\n");
  		}
  		printf("按任意键继续╮(╯▽╰)╭\n");
  		getch();
		menu();
  		
  	}while (flag==1);
}

void menu(void)       //菜单函数
{
	system("cls");
	printf("\n");
	printf("********************************************************************************\n");
	printf("\n\t\tO(∩_∩)O欢迎进入学生成绩管理系统(⊙v⊙)\n\n");
	printf(" \t1.录入学生成绩信息\t\t\t2.查看学生成绩排名\n\n");
	printf(" \t3.查询学生成绩信息\t\t\t4.学生成绩分析\n\n");
	printf("\t5.退出系统\n\n");
	printf("********************************************************************************\n");
	printf("请输入你所需执行功能的序号:");
}

void inputscore(void)       //成绩录入
{
	int i,j;
	system("cls");
	printf("请输入学生总数:\n");
	scanf("%d",&n);	
	for(i=0;i<n;i++)
	{
		printf("请输入第%d学生的学号 姓名:",i+1);
		scanf("%s%s",stu[i].studentID,stu[i].name);
		printf("请按顺序输入学生成绩:\n\n");
		printf("高数 英语 C语言\n");
			for(j=0;j<CourseNum;j++)
			scanf("%f",&stu[i].score[j]);
	}
	printf("%d",stu[0].score[0]);
		printf("成功输入\n");
}

void avergescore(void)         //平均成绩
{
	int i,j;	
	for(i=0;i<n;i++)
	{	
		stu[i].average=0;
			for(j=0;j<CourseNum;j++)
			{
				stu[i].average=stu[i].score[j];
			}
				stu[i].average=stu[i].average/CourseNum;
	}
}

void studentrank(void)     // 学生排名*交换法
{	
	int i,j,k;
	STU t;
	avergescore();
	system("cls");
	for(i=0;i<n-1;i++)
	{	
		for(k=i,j=i+1;j<n;j++)
		if(stu[j].average>stu[k].average)
			k=j;
			if(k!=j)
				{	
				t=stu[k];
				stu[k]=stu[i];
				stu[i]=t;
				}
	}
	printf("名次\t学号\t姓名\t高数\t英语\tC语言\t平均分\n");
	for(i=0;i<n;i++)
		{	
		printf("%d\t%s\t%s\t",i+1,stu[i].studentID,stu[i].name);
		for(j=0;j<CourseNum;j++)
		printf("%4.2f\t",stu[i].score[j]);
		printf("%4.2f",stu[i].average);
		printf("\n");
		}
}

void searchscore(void)         //成绩查询
{
	char a[10];
	int i,j;
	system("cls");
	printf("请输入需查询的学生学号\n");
	scanf("%s",a);
		for(i=0;i<n;i++)
	{
			if(strcmp(stu[i].studentID,a)==0)
			{	printf("名次\t学号\t姓名\t高数\t英语\tC语言\t平均分\n");
				printf("%d\t%s\t%s\t",i+1,stu[i].studentID,stu[i].name);	
			for(j=0;j<CourseNum;j++)
				printf("%4.2f\t",stu[i].score[j]);
				printf("%4.2f",stu[i].average);
				printf("\n");
				break;						//找到该学生成绩信息后跳出for循环//
			}		
			else
			printf("未找到该学生信息\n");
		}
}


void statistic(void)      //综合成绩分析
{
	STU *p=stu;
	int i,j;
	float count=0,sum=0;
	system("cls");
		for(i=0;i<n;i++)
	{
		sum=sum+((p+i)->average);}
		printf("该班级平均分为%4.2f\n\n",sum/n);		//平均分计算
		for(i=0;i<n;i++)
	{	
		if((p+i)->average>=60)
		count++;
	}
		printf("该班级及格率为%4.2f%%\n\n",count/n*100);	//及格率计算
		count=0.0;
			for(i=0;i<n;i++)
		{
			if((p+i)->average>=80)
			count++;
		}
		printf("该班级优秀率为%4.2f%%\n\n",count/n*100);	//优秀率计算
		printf("平均分低于60的学生名单\n");
		for(i=0;i<n;i++)
		{
			if(stu[i].average<60)
			printf("%s%s\n",stu[i].name);
		}							
		printf("平均分高于80的学生名单\n");
		for(i=0;i<n;i++)
		{
			if(stu[i].average>80)
			printf("%s\n",stu[i].name);
		}
}