#include <stdio.h>
#include <jx.e>
#include <scoreprintf.e>
#define STUD_N 40
void Readscore(int score[][COURSE_N],long num[],int n);
void Averforstd(int score[][COURSE_N],int sum[],float aver[],int n);
void Averforcourse(int score[][COURSE_N],int sum[],float aver[],int n);
void Print(int score[][COURSE_N],long num[],int sumS[],float averS[],int sumC[],float averC[],int n);
void Fact(int score[][COURSE_N],int n);
void Fact2(int score[][COURSE_N],int n);
void Fact3(int score[][COURSE_N],int n);
void Print2(int score[][COURSE_N],int n);
void Print3(int score[][COURSE_N],int n);
void Print4(int score[][COURSE_N],int n);
int Findmax1(int score[][COURSE_N],int n);
int Findmax2(int score[][COURSE_N],int n);
int Findmax3(int score[][COURSE_N],int n);
int Findmin1(int score[][COURSE_N],int n);
int Findmin2(int score[][COURSE_N],int n);
int Findmin3(int score[][COURSE_N],int n);
int main()
{
int score[STUD_N][COURSE_N],sumS[STUD_N],sumC[COURSE_N],n,m;
int max1,max2,max3,min1,min2,min3;
long num[STUD_N];
float averS[STUD_N],averC[COURSE_N];
printf(" *******学生成绩管理系统v2.0********\n\n\n\n");
printf("请输入班级总人数(人数应小于40):\n");
scanf("%d",&n);
Readscore(score,num,n);
Averforstd(score,sumS,averS,n);
Averforcourse(score,sumC,averC,n);
Print(score,num,sumS,averS,sumC,averC,n);
max1=Findmax1(score,n);
max2=Findmax2(score,n);
max3=Findmax3(score,n);
min1=Findmin1(score,n);
min2=Findmin2(score,n);
min3=Findmin3(score,n);
printf("\n---------------------------------------------------------------------\n");
printf("\n数学最高分是:%d\t最低分是:%d\n",max1,min1);
printf("英语最高分是:%d\t最低分是:%d\n",max2,min2);
printf("物理最高分是:%d\t最低分是:%d\n",max3,min3);
printf("\n---------------------------------------------------------------------\n");
do{
printf("\n1.降序排序成绩\n2.升序排序成绩\n3.查找\n4.退出\n");
scanf("%d",&m);
if(m==1)
{
Fact(score,n);
Fact2(score,n);
Fact3(score,n);
Print2(score,n);
Print3(score,n);
Print4(score,n);
}
if(m==2)
{
Facm(score,n);
Face(score,n);
Facp(score,n);
JP1(score,n);
JP2(score,n);
JP3(score,n);
}
if(m==3)
{
int i,j;
i=-1;
long id;
printf("请输入学号:");
scanf("%ld",&id);
do{
i++;
if(num[i]==id)
printf("\n%ld\t",num[i]);
}
while(num[i]!=id);
for(j=0;j<COURSE_N;j++)
{
printf("%4d\t",score[i][j]);
}
printf("\n\n%ld号的在班级的排名为第%d名。\n",num[i],i+1);
}
if(m==4)
{
printf("--------------任意键退出-------------\n");
}
}while(m!=4);
return 0;
}
/*函数功能:输入n个学生的学号以及三门课程的成绩*/
void Readscore(int score[][COURSE_N],long num[],int n)
{
int i,j;
printf("\n---------------------------------------------------------------------\n");
printf("\n输入每个学生的学号和分数\n");
printf("例如:\n");
printf("学号\t数学\t英语\t物理\n");
for(i=0;i<n;i++)
{
scanf("%ld",&num[i]);
for(j=0;j<COURSE_N;j++)
{
scanf("%d",&score[i][j]);
}
}
}
/*函数功能:计算每个学生的总分和平均分*/
void Averforstd(int score[][COURSE_N],int sum[],float aver[],int n)
{
int i,j;
for(i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<COURSE_N;j++)
{
sum[i]=sum[i]+score[i][j];
}
aver[i]=(float)sum[i]/COURSE_N;
}
}
/*函数功能:计算每门课程的总分和平均分*/
void Averforcourse(int score[][COURSE_N],int sum[],float aver[],int n)
{
int i,j;
for(j=0;j<COURSE_N;j++)
{
sum[j]=0;
for(i=0;i<n;i++)
{
sum[j]=sum[j]+score[i][j];
}
aver[j]=(float)sum[j]/n;
}
}
/*函数功能:找出n个学生数学的最高分*/
int Findmax1(int score[][COURSE_N],int n)
{
int max,i;
int j=0;
max=score[0][j];
for(i=0;i<n;i++)
{
if(score[i][j]>max)
max=score[i][j];
}
return max;
}
/*函数功能:找出n个学生英语的最高分*/
int Findmax2(int score[][COURSE_N],int n)
{
int max,i;
int j=1;
max=score[0][j];
for(i=0;i<n;i++)
{
if(score[i][j]>max)
max=score[i][j];
}
return max;
}
/*函数功能:找出n个学生物理的最高分*/
int Findmax3(int score[][COURSE_N],int n)
{
int max,i;
int j=2;
max=score[0][j];
for(i=0;i<n;i++)
{
if(score[i][j]>max)
max=score[i][j];
}
return max;
}
/*找出n个学生数学的最低分*/
int Findmin1(int score[][COURSE_N],int n)
{
int min,i;
int j=0;
min=score[0][j];
for(i=0;i<n;i++)
{
if(score[i][j]<min)
min=score[i][j];
}
return min;
}
/*找出n个学生英语的最低分*/
int Findmin2(int score[][COURSE_N],int n)
{
int min,i;
int j=1;
min=score[0][j];
for(i=0;i<n;i++)
{
if(score[i][j]<min)
min=score[i][j];
}
return min;
}
/*找出n个学生物理的最低分*/
int Findmin3(int score[][COURSE_N],int n)
{
int min,i;
int j=2;
min=score[0][j];
for(i=0;i<n;i++)
{
if(score[i][j]<min)
min=score[i][j];
}
return min;
}
/*函数功能:数学成绩排序*/
void Fact(int score[][COURSE_N],int n)
{
int k,i,h;
int l=0;
for(i=0;i<n-1;i++)
{
for(h=i+1;h<n;h++)
{
if(score[h][l]>score[i][l])
{
k=score[h][l];
score[h][l]=score[i][l];
score[i][l]=k;
}
}
}
}
/*函数功能:打印每个学生的各科分数、总分、学号,和班级总分、平均分*/
void Print(int score[][COURSE_N],long num[],int sumS[],float averS[],int sumC[] ,float averC[],int n)
{
int i,j;
printf("\n---------------------------------------------------------------------\n\n");
printf("\t学生ID\t 数学\t 英语\t 物理\t 总分\t 平均分\n");
for(i=0;i<n;i++)
{
printf("%12ld\t",num[i]);
for(j=0;j<COURSE_N;j++)
{
printf("%4d\t",score[i][j]);
}
printf("%4d\t%5.1f\n",sumS[i],averS[i]);
}
printf("单科总分\t");
for(j=0;j<COURSE_N;j++)
{
printf("%4d\t",sumC[j]);
}
printf("\n单科均分\t");
for(j=0;j<COURSE_N;j++)
{
printf("%4.1f\t",averC[j]);
}
printf("\n");
}
/*打印数学成绩单*/
void Print2(int score[][COURSE_N],int n)
{
int i,j;
j=0;
printf("\n---------------------------------------------------------------------\n");
printf("\n数学成绩单如下:\n\n");
for(i=0;i<n;i++)
{
printf("%4d",score[i][j]);
}
printf("\n");
}
/*函数功能:英语成绩排序*/
void Fact2(int score[][COURSE_N],int n)
{
int k,i,h;
int l=1;
for(i=0;i<n-1;i++)
{
for(h=i+1;h<n;h++)
{
if(score[h][l]>score[i][l])
{
k=score[h][l];
score[h][l]=score[i][l];
score[i][l]=k;
}
}
}
}
/*函数功能:物理成绩排序*/
void Fact3(int score[][COURSE_N],int n)
{
int k,i,h;
int l=2;
for(i=0;i<n-1;i++)
{
for(h=i+1;h<n;h++)
{
if(score[h][l]>score[i][l])
{
k=score[h][l];
score[h][l]=score[i][l];
score[i][l]=k;
}
}
}
}
/*打印英语成绩单*/
void Print3(int score[][COURSE_N],int n)
{
int i,j;
j=1;
printf("英语成绩单如下:\n\n");
for(i=0;i<n;i++)
{
printf("%4d",score[i][j]);
}
printf("\n");
}
/*打印物理成绩单*/
void Print4(int score[][COURSE_N],int n)
{
int i,j;
j=2;
printf("物理成绩单如下:\n\n");
for(i=0;i<n;i++)
{
printf("%4d",score[i][j]);
}
printf("\n");
}