#include <>
#include <>
#include <>
#define m_l 10
#define m_num 30
#define m_cs 6
typedef struct student
{
long num ;
char name[m_l];
float score[m_cs];
float sum;
float aver;
}STU;
int menu(void);
void Readscore(STU stu[],int n,int m);
void Aversumofeverystudent(STU stu[],int n,int m);
void Aversumofeverycourse(STU stu[],int n,int m);
void Sortbyscore(STU stu[],int n,int m,int (*compare)(float a,float b)); int Ascending(float a,float b);
int Descending(float a,float b);
void swapfloat(float *x,float *y);
void swaplong(long *x,long *y);
void swapchar(char x[],char y[]);
void Assortbynum(STU stu[], int n, int m);
void Sortbyname(STU stu[], int n, int m);
void Searchbynum(STU stu[], int n, int m);
void Searchbyname(STU stu[], int n, int m);
void StatisticAnlysis(STU stu[], int n, int m); void Printscore(STU stu[], int n, int m);
void Writetofile(STU stu[], int n, int m);
void Readfromfile(STU stu[], int *n, int *m);
int main()
{
char ch;
int n=0,m=0;
STU stu[m_num];
printf("请输入学生人数(n<=%d):\n",m_num);
scanf("%d",&n);
printf("请输入课程数目(m<=%d):\n",m_cs);
scanf("%d",&m);
while(1)
{
ch=menu();
switch(ch)
{
case 1:
Readscore(stu,n,m);
break;
case 2:
Aversumofeverystudent(stu ,n,m); break;
case 3:
Aversumofeverycourse(stu ,n,m);
case 4:
Sortbyscore(stu ,n,m,Descending); printf("\n成绩降序排序\n");
Printscore( stu ,n, m);
break;
case 5:
Sortbyscore(stu ,n,m,Ascending); printf("\n成绩升序排序\n");
Printscore( stu ,n, m);
break;
case 6:
Assortbynum( stu , n, m);
printf("\n学号升序排序\n");
Printscore( stu ,n, m);
break;
case 7:
Sortbyname( stu , n, m);
printf("\n姓名字典升序排序\n"); Printscore( stu ,n, m);
break;
case 8:
Searchbynum( stu , n, m);
break;
case 9:
Searchbyname( stu , n, m);
break;
StatisticAnlysis( stu , n, m); break;
case 11:
Printscore( stu ,n, m);
break;
case 12:
Writetofile(stu,n,m);
break;
case 13:
Readfromfile(stu,&n,&m);
break;
case 0:
printf("\n欢迎下次继续使用"); exit(0);
default:
printf("\n输入错误");
}
}
return 0;
}
int menu(void)
{
int items;
printf("欢迎使用学生成绩管理系统\n");
printf("1.输入成绩\n");
printf("2.计算各个学生总成绩和平均成绩\n"); printf("3.计算各门学科总成绩和平均成绩\n"); printf("4.成绩降序排序\n");
printf("5.成绩升序排序\n");
printf("6.学号升序排序\n");
printf("7.姓名升序排序\n");
printf("8.通过学号查找成绩\n");
printf("9.通过姓名查找成绩\n");
printf("10.标准分析\n");
printf("11.显示成绩\n");
printf("12.写入文件\n");
printf("13.读取文件\n");
printf("0.退出\n");
printf("请做出您的选择\n");
scanf("%d",&items);
return items;
}
void Readscore(STU stu[],int n,int m)
{
int i,j;
printf("请输入学生学号,姓名,成绩\n");
for(i=0;i { scanf("%ld%s",&stu[i].num,stu[i].name); stu[i].sum=0; for(j=0;j { scanf("%f",&stu[i].score[j]); stu[i].sum+=stu[i].score[j]; } if(m>0) stu[i].aver= m>0 stu[i].sum/m : -1; } } void Aversumofeverystudent(STU stu[],int n,int m) { int i,j; for(i=0;i { printf("学生%d:总成绩:%.1f,平均成绩: %.1f\n",i+1,stu[i].sum,stu[i].aver); } } void Aversumofeverycourse(STU stu[],int n,int m) { int i,j; float sum[m_cs],aver[m_cs]; for(i=0;i { sum[i]=0; for(j=0;j { sum[i]+=stu[j].score[i]; } aver[i]= n>0sum[i]/n:-1; printf("课程 %d:总成绩: %.1f,平均成绩: %.1f\n",i+1,sum[i],aver[i]); } } void Sortbyscore(STU stu[],int n,int m,int (*compare)(float a,float b)) { int i,j,k,t; for(i=0;i { k=i; for(j=i+1;j { if((*compare)(stu[j].sum,stu[k].sum)) k=j; } if(k!=i) { for(t=0;t { swapfloat(&stu[k].score[t],&stu[i].score[t]); } swapfloat(&stu[k].sum,&stu[i].sum); swapfloat(&stu[k].aver,&stu[i].aver); swaplong(&stu[k].num,&stu[i].num); swapchar(stu[k].name,stu[i].name); } } } int Ascending(float a,float b) { return a } int Descending(float a,float b) { return a>b; } void swapfloat(float *x,float *y) { float b; b=*x; *x=*y; *y=b; } void swaplong(long *x,long *y) { long b; b=*x; *x=*y; *y=b; } void swapchar(char x[],char y[]) { char b[m_l]; strcpy(b,x); strcpy(x,y); strcpy(y,b); } void Assortbynum(STU stu[], int n, int m) { int i,j,k,t; for(i=0;i { k=i; for(j=i+1;j { if(stu[j].num k=j; } if(k!=i) { for(t=0;t { swapfloat(&stu[k].score[t],&stu[i].score[t]); } swapfloat(&stu[k].sum,&stu[i].sum); swapfloat(&stu[k].aver,&stu[i].aver); swaplong(&stu[k].num,&stu[i].num); swapchar(stu[k].name,stu[i].name); } } } void Sortbyname(STU stu[], int n, int m) { int i,j,t; for(i=0;i { for(j=i+1;j { if(strcmp(stu[j].name,stu[i].name)<0) { for(t=0;t { swapfloat(&stu[i].score[t],&stu[j].score[t]); } swapfloat(&stu[j].sum,&stu[i].sum); swapfloat(&stu[j].aver,&stu[i].aver); swaplong(&stu[j].num,&stu[i].num); swapchar(stu[j].name,stu[i].name); } } } } void Searchbynum(STU stu[], int n, int m) { long num; int i,j; printf("输入你所想要查找的学号\n"); scanf("%ld",&num); for(i=0;i { if(stu[i].num==num) { printf("%ld\t%s\t",stu[i].num,stu[i].name); for(j=0;j { printf("%.0f\t",stu[i].score[j]); } printf("%.0f\t%.0f\n",stu[i].sum,stu[i].aver); return; } } printf("\n查无此号 \n"); } void Searchbyname(STU stu[], int n, int m) { char name[m_l]; int i,j; printf("输入你所想要查找的姓名\n"); scanf("%s",name); for(i=0;i { if(strcmp(stu[i].name,name)==0) { printf("%ld\t%s\t",stu[i].num,stu[i].name); for(j=0;j { printf("%.0f\t",stu[i].score[j]); } printf("%.0f\t%.0f\n",stu[i].sum,stu[i].aver); return; } } printf("\n查无此人 \n"); } void StatisticAnlysis(STU stu[], int n, int m) { int i,j,total,t[6]; for(j=0;j { printf("学科:%d:\n",j+1); memset(t,0,sizeof(t)); for(i=0;i { if(stu[i].score[j]>=0&&stu[i].score[j]<60) t[0]++; else if(stu[i].score[j]<70) t[1]++; else if(stu[i].score[j]<80) t[2]++; else if(stu[i].score[j]<90) t[3]++; else if(stu[i].score[j]<100) t[4]++; else if(stu[i].score[j]==100) t[5]++; } total=0; for(i=0;i<=5;i++) { total+=t[i]; } for(i=0;i<=5;i++) { if(i==0) printf("<60\t%d\t%.2f%%\n",t[i],(float)t[i]/n*100); else if(i==5) printf("=100\t%d\t%.2f%%\n",t[i],(float)t[i]/n*100); else printf("%d-%d\t%d\t%.2f%%\n",t[i],(i+5)*10,(i+5)*10+9,(float)t[i]/n*100); } } } void Printscore(STU stu[], int n, int m) { int i,j; for(i=0;i { printf("%ld\t%s\t",stu[i].num,stu[i].name); for(j=0;j { printf("%.1f\t",stu[i].score[j]); } printf("%.1f\t%.1f\n",stu[i].sum,stu[i].aver); } } void Writetofile(STU stu[], int n, int m) { FILE *fp; int i,j; if((fp=fopen("","w"))==NULL) { printf("打开“”失败!\n"); exit(0); } fprintf(fp,"%d\t%d\n",n,m); for(i=0;i { fprintf(fp,"%10ld%10s",stu[i].num,stu[i].name); for(j=0;j { fprintf(fp,"%",stu[i].score[j]); } fprintf(fp,"%%\n",stu[i].sum,stu[i].aver); } fclose(fp); } void Readfromfile(STU stu[],int *n,int *m) { FILE *fp; int i,j; if((fp=fopen("","r"))==NULL) { printf("打开 !失败\n"); exit(0); } fscanf(fp,"%d\t%d",n,m); for(i=0;i<*n;i++) { fscanf(fp,"%10ld",&stu[i].num); fscanf(fp,"%s",&stu[i].name); for(j=0;j<*m;j++) { fscanf(fp,"%10f",&stu[i].score[j]); } fscanf(fp,"%10f%10f\n",&stu[i].sum,&stu[i].aver); } fclose(fp); }