改进了一下~
程序代码:
/* 老师要求: (1)键盘录入成绩 (2)课程的总分和平均分 (3)成绩从高到低名次表 (4)成绩从低到高名次表 (5)学号从小到大成绩表 (6)姓名字典顺序成绩表 (7)输入学号或者姓名查询学生成绩及排名 (8)统计优良中差类别所占百分比 */ #include<stdio.h> #include<string.h> #include<windows.h> #include<conio.h> #define s 3 struct student { char name[20]; int num; int score[3]; float av; int sum; } p[s]; int i,j,r,t; int flag=0; r=0; int main() { void (*p)()=NULL; void menu(); void scan(); void sumandav(); void sort3(); void sort4(); void sort5(); void sort6(); void search7(); void count8(); char ch=0; while (1) { r=0;/*排名要重置啊~*/ menu(); printf("请选择功能%c:\n",032); switch(ch=getch()-'0') { case 1 : p=scan; break; case 2: p=sumandav; break; case 3: p=sort3; break; case 4: p=sort4; break; case 5: p=sort5; break; case 6: p=sort6; break; case 7: p=search7; break; case 8: p=count8; break; case 9: exit(0); default: p=NULL; break; } if ((flag!=0||p==scan)&&(ch>0&&ch<10)) { system("cls"); (*p)(); system("pause"); } else if (ch>0&&ch<10&&flag==0) { system("cls"); puts("请先初始化数据"); system("pause"); } } return 0; } void menu() { system("cls"); printf("\t *学生成绩管理系统100.0版* \n"); printf("\t 功能 \n"); printf("\t1,键盘录入成绩\n"); printf("\t2,课程的总分和平均分\n"); printf("\t3,成绩从高到低名次表\n"); printf("\t4,成绩从低到高名次表\n"); printf("\t5,学号从小到大成绩表\n"); printf("\t6,姓名字典顺序成绩表\n"); printf("\t7,输入学号或者姓名查询学生成绩及排名\n"); printf("\t8,统计优良中差类别所占百分比\n"); printf("\t9,都不喜欢拜拜%c!\n",001); } void scan() { for(j=0; j<s; j++) { printf("请输入第%d个学生的(学号-姓名-科目1-科目2-科目3):\n",j+1); scanf("%d%s%d%d%d",&p[j].num,p[j].name,&p[j].score[0],&p[j].score[1],&p[j].score[2]); p[j].av=(float )(p[j].score[0]+p[j].score[1]+p[j].score[2])/3; p[j].sum=p[j].score[0]+p[j].score[1]+p[j].score[2]; } flag=1; printf("输入成功,即将执行下一步操作\n"); } void sumandav() { // scan(); printf(" 学号 姓名 高数 c语言 英语 总分 平均分 \n"); for(j=0; j<s; j++) { printf("%-5d%-5s%-5d%-5d%-5d%-5d%-7.1f\n",p[j].num,p[j].name,p[j].score[0],p[j].score[1],p[j].score[2],p[j].sum,p[j].av); } } void sort3() { struct student t={0}; for(j=0; j<s-1; j++) { for(i=0; i<s-1-j; i++) { if(p[i].sum<p[i+1].sum) { t=p[i]; p[i]=p[i+1]; p[i+1]=t; } } } printf(" 学号 姓名 高数 c语言 英语 总分 平均分 排名(总分down)\n"); for(j=0; j<s; j++) { r++; printf("%-5d%-5s%-5d%-5d%-5d%-5d%-7.1f%-5d\n",p[j].num,p[j].name,p[j].score[0],p[j].score[1],p[j].score[2],p[j].sum,p[j].av,r); } } void sort4() { // void scan(); struct student t={0}; // scan(); for(j=0; j<s-1; j++) { for(i=0; i<s-1-j; i++) { if(p[i].sum<p[i+1].sum)////////// { t=p[i]; p[i]=p[i+1]; p[i+1]=t; } } } printf("学号 姓名 高数 c语言 英语 总分 平均分 排名(总分up)\n"); for(j=0,r=4; j<s; j++)///////////////// { r--; printf("%-5d%-5s%-5d%-5d%-5d%-5d%-7.1f%-5d\n",p[j].num,p[j].name,p[j].score[0],p[j].score[1],p[j].score[2],p[j].sum,p[j].av,r); } } void sort5() { // void scan(); struct student t={0}; // scan(); for(j=0; j<s-1; j++) { for(i=0; i<s-1-j; i++) { if(p[i].num>p[i+1].num) { t=p[i]; p[i]=p[i+1]; p[i+1]=t; } } } printf("学号 姓名 高数 c语言 英语 总分 平均分 排名(学号)\n"); for(j=0,r=4; j<s; j++) { r--; printf("%-5d%-5s%-5d%-5d%-5d%-5d%-7.1f%-5d\n",p[j].num,p[j].name,p[j].score[0],p[j].score[1],p[j].score[2],p[j].sum,p[j].av,r); } } void sort6() { char t1[20]={0}; struct student t={0}; // scan(); for(j=0; j<s-1; j++) { for(i=0; i<s-1-j; i++) { if(strcmp(p[i].name,p[i+1].name)>0) { t = p[i]; //strcpy(t1,p[i].name); p[i] = p[i+1]; //strcpy(p[i].name,p[i+1].name); p[i+1] = t; //strcpy(p[i+1].name,t1); } } } printf("学号 姓名 高数 c语言 英语 总分 平均分 排名(姓名)\n"); for(j=0; j<s; j++) { r++; printf("%-5d%-5s%-5d%-5d%-5d%-5d%-7.1f%-5d\n",p[j].num,p[j].name,p[j].score[0],p[j].score[1],p[j].score[2],p[j].sum,p[j].av,r); } } void search7() { void my_sort(); char name3[20]; int num1; int rr[3]={0}; int i=0; int j=0; // scan(); my_sort(); printf("您想查找的学生的学号或者姓名:\n"); scanf("%d%s",&num1,name3);///////////// for(i=0; i<s; i++) { if((strcmp(name3,p[i].name)==0)||(num1==p[i].num)) { printf("高数 c语言 英语 总分 排名\n"); printf("%-5d%-5d%-5d%-5d%-5d\n",p[i].score[0],p[i].score[1],p[i].score[2],p[i].sum,i+1); break; } } } void my_sort() { int i=0; int j=0; struct student t={0}; for(j=0; j<s-1; j++) { for(i=0; i<s-1-j; i++) { if(p[i].sum<p[i+1].sum) { t=p[i]; p[i]=p[i+1]; p[i+1]=t; } } } } void count8() { float k=0,q=0,x=0,f=0; float m,n,sb,xsb; // void scan(); // scan(); for(i=0; i<s; i++) { if(p[i].sum<180) { k++; } else if(p[i].sum>=180&&p[i].sum<=210) { q++; } else if(p[i].sum>210&&p[i].sum<=240) { x++; } else if(p[i].sum>240&&p[i].sum<=300) { f++; } } m=f/s; n=x/s; sb=q/s; xsb=k/s; printf("优:%.1f 良:%.1f 中:%.1f 差:%.1f\n",m,n,sb,xsb); }
[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]