/*学生成绩管理系统*/ #define N 20 #include <stdio.h> #include <math.h> #include <time.h> #include <stdlib.h> #include <string.h> int getch() ; struct student {char name[10]; char num[5]; int score[3]; int total; }stu[N]; void openfile(void) {FILE *fp; int i; if((fp=fopen("c2-4","rb"))==NULL) {printf("\nCan not open the file c2-4.\n"); return;} for(i=0;i<N;i++) if(stu[i].score[0]==0) break; for(;i<N;i++) if(fread(&stu[i],sizeof(struct student),1,fp)!=1) {if(stu[i].score[2]==0) break; printf("\nFile read error.\n");} fclose(fp); printf("\n\t祝贺!! 文件已经成功打开!按任意键返回:");
} void savefile(void) {FILE *fp; int i; if((fp=fopen("c2-4","wb"))==NULL) {printf("\nCan not open the file c2-4.\n"); return;} for(i=0;stu[i].score[2]!=0;i++) if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf("\nFile write error.\n"); printf("\n 数据已经全部保存!按任意键返回:"); void getch(void); fclose(fp); }
void del(void) {char name[10]; int i,j; printf("\n请输入要删除的学生姓名:"); scanf("%s",name); for(i=0;i<N;i++) {if(strcmp(stu[i].name,name)==0) break;} if(i<N){ for(j=i;stu[j].score[2]!=0;j++) {strcpy(stu[j].name,stu[j+1].name); strcpy(stu[j].num,stu[j+1].num); stu[j].score[0]=stu[j+1].score[0]; stu[j].score[1]=stu[j+1].score[1]; stu[j].score[2]=stu[j+1].score[2]; stu[j].total=stu[j+1].total; } stu[j-1].score[2]=0; printf("\n成功删除学生数据!按任意键继续:"); } else printf("\n该学生不存在!按任意键返回:"); void getch(void); }
/*-----------------------------------------------------*/ void insert(void) {int k,i,n,j; int sum; for(i=0;i<N;i++) if(stu[i].score[0]==0) {k=i; break;} printf("\n请输入新学生数据:\n"); printf("你想要输入几个学生的数据: "); while(1) {scanf("%d",&n); if(n+k>20) {printf("\n学生数已满! 请选个小一点的数!==>"); n=0;} else break; } for(;i<n+k;i++) {sum=0; printf("\n学 生 %d:\n",i+1); printf("学生姓名 :"); while(1) {scanf("%s",stu[i].name); if(strlen(stu[i].name)>9) printf("名字太长! 再输一次! :"); else break; } printf("学生学号 :"); while(1) {scanf("%s",stu[i].num); if(strlen(stu[i].num)>4) printf("学号太长! 再输一次! :"); else break; } for(j=0;j<3;j++) { if(j==0) printf("数学成绩 :"); else if(j==1) printf("英语成绩 :"); else printf("C语言成绩:"); while(1) {scanf("%d",&stu[i].score[j]); if(stu[i].score[j]>100||stu[i].score[j]<0) printf("输入错误! 重新输入! :"); else break; } sum+=stu[i].score[j]; stu[i].total=sum; } } printf("\n按任意键确认并返回!"); void getch(void); } void change(void) { int i,j,k; int sum; char name[10]; printf("\n请输入要修改的学生姓名: "); scanf("%s",name); for(i=0;i<N;i++) if(strcmp(stu[i].name,name)==0) {j=i;break;} printf("学生新姓名 :"); while(1) {scanf("%s",stu[j].name); if(strlen(stu[j].name)>9) printf("名字太长! 再输一次! :"); else break; } printf("学生新学号 :"); while(1) {scanf("%s",stu[j].num); if(strlen(stu[j].num)>4) printf("学号太长! 再输一次! :"); else break; } for(k=0;k<3;k++) {sum=0; if(k==0) printf("新数学成绩 :"); else if(k==1) printf("新英语成绩 :"); else printf("新C语言成绩:"); while(1) {scanf("%d",&stu[j].score[k]); if(stu[j].score[k]>100||stu[j].score[k]<0) printf("输入错误! 重新输入! :"); else break; } sum+=stu[j].score[k]; } stu[j].total=sum; printf("\n按任意键确认并返回!"); void getch(void); } /*----------------------------------------------------------*/ void sort(void) {struct student temp; int t,i,j,p,k; printf("\n按哪门课排序:0=>数学 1=>英语 2=>C语言 3=>总分.请选择:"); scanf("%d",&k); for(i=0;i<N-1;i++) {t=i; if(k<3) {for(j=i+1;j<N;j++) if(stu[i].score[k]<stu[j].score[k]) t=j; else; } else {for(j=i+1;j<N;j++) if(stu[i].total<stu[j].total) t=j; } if(t!=i) {strcpy(temp.name,stu[i].name); strcpy(stu[i].name,stu[t].name); strcpy(stu[t].name,temp.name); strcpy(temp.num,stu[i].num); strcpy(stu[i].num,stu[t].num); strcpy(stu[t].num,temp.num); for(p=0;p<3;p++) {temp.score[p]=stu[i].score[p]; stu[i].score[p]=stu[t].score[p]; stu[t].score[p]=temp.score[p]; } temp.total=stu[i].total; stu[i].total=stu[t].total; stu[t].total=temp.total; } } printf("\n排序已经完成!按任意键确认并返回!"); void getch(void); } /*----------------------------------------------------------*/ void print(void) { int i,j; printf("\n\t 所有学生的数据\n"); printf("\n 姓名 学号 数学 英语 C语言 总分\n"); for(i=0;stu[i].score[0]!=0;i++) {printf("\n%8s%8s",stu[i].name,stu[i].num); for(j=0;j<3;j++) printf("%8d",stu[i].score[j]); printf("%8d",stu[i].total); printf("\n"); } printf("\n\t 打印完毕!按任意键确认并返回!"); void getch(void); } /*----------------------------------------------------------*/ void ave(int n) {int i; char name[10]; float sum=0,sum1=0,sum2=0,sum3=0; if(n==1) {printf("\n请输入学生姓名:"); scanf("%s",name); for(i=0;i<N;i++) if(strcmp(stu[i].name,name)==0) {sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; printf("\n学生 %s 的平均分为 : %8.2f \n",name,sum/3.0); break;} else; if(i==N) printf("\n\t该学生不存在!!\n"); } if(n==2) {for(i=0;stu[i].score[2]!=0;i++) {sum1+=stu[i].score[0]; sum2+=stu[i].score[1]; sum3+=stu[i].score[2];} printf("\n\t各课程的平均分:\n"); printf("\t英 语 : %8.2f\n",sum1/i); printf("\t数 学 : %8.2f\n",sum2/i); printf("\tC语 言 : %8.2f\n",sum3/i); } printf("\n计算完成!按任意键确认并返回!"); void getch(void); } /*------------------------------------------------*/ void find(void) { int i,j,k=0; char name[10]; while(1) { printf("\n输入要查找的学生姓名,输入'N'返回: "); scanf("%s",name); if(name[0]=='n'||name[0]=='N') break; else {for(i=0;i<N;i++) if(strcmp(stu[i].name,name)==0) {printf(" 姓名 学号 数学 英语 C语言 总分\n"); printf("\n%8s%8s",stu[i].name,stu[i].num); for(j=0;j<3;j++) printf("%8d",stu[i].score[j]); printf("%8d",stu[i].total); k=1; } } if(k==0) printf("\n没有找到这个学生!!\n"); } } /*--------------------------------------------------------*/ void score(void) {char select; int i; for(i=0;i<N;i++) stu[i].score[0]=0; while(1) {/*clrscr();*/ printf("\n\t ************** 学生成绩管理系统 ***************\n"); printf("\t *** 0 :打开文件 c2-4. ***\n"); printf("\t *** 1 :输入或者插入学生数据. ***\n"); printf("\t *** 2 :修改学生数据. ***\n"); printf("\t *** 3 :计算一个学生的平均分. ***\n"); printf("\t *** 4 :计算每门课程的平均分. ***\n"); printf("\t *** 5 :删除一个学生数据. ***\n"); printf("\t *** 6 :保存数据到文件 c2-4. ***\n"); printf("\t *** 7 :打印所有学生数据. ***\n"); printf("\t *** 8 :按所选课程成绩排序. ***\n"); printf("\t *** 9 :查找一个学生数据. ***\n"); printf("\t *** Q :退出程序. ***\n"); printf("\t *************************************************\n"); printf("\t 请选择执行选项: "); while(1) {char select; select=getch(); if((select>57||select<48)&&select!='q'&&select!='Q') printf("\n输入错误!!! 重新输入!!==>"); else break; } /* clrscr(); */ switch(select) {case '0':openfile();break; case '1':insert();break; case '2':change();break; case '3':ave(1);break; case '4':ave(2);break; case '5':del();break; case '6':savefile();break; case '7':print();break; case '8':sort();break; case '9':find();break; case 'q':break; case 'Q':break; } if(select=='q'||select=='Q') break; } }