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