//为什么我输入1再输入3,输入1 1 1回车3 3 3回车2 2 2后输入5输入1之后并没有进行按照学号升序排列? #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int main_menu(); //主界面 int menu_5(); //输入'5'时的界面 void overview(); //实现全览功能的函数 void ID_select(); //按学号顺序 int menu_6(); //输入'6'时的界面 void statistics(); //实现统计功能的函数 void add(); //学生成绩新增 void mark_statistics(); //成绩分布统计 //定义学生结构体 struct Student { char ID[20]; char Name[20]; int Mark; }; //声明学生数组及学生数量 struct Student students[1000]; int num=0; int main() { char ch; while(1) { switch(main_menu()) //获取main_menu()函数输入的数据 { case 1: system("CLS"); add(); break; case 2: system("CLS"); printf("\n查询学生成绩信息功能待完成!\n"); //以后版本插入函数 check() break; case 3: system("CLS"); printf("\n修改学生成绩信息功能待完成!\n"); //以后版本插入函数 revise() break; case 4: system("CLS"); printf("\n删除学生成绩信息功能待完成!\n"); //以后版本修改函数 deleted() break; case 5: //system("CLS"); overview(); break; case 6: system("CLS"); statistics(); break; case 0: system("CLS"); printf("\n确认退出系统?(Y/N) "); scanf(" %c",&ch); if (ch == 'Y'||ch == 'y') { return 0; } else if (ch == 'N'||ch == 'n') { return main(); } } } return 0; } //主界面函数 int main_menu() { char ch; do { printf("----- 学生成绩管理系统 V2.0 -----\n"); printf("\t1. 学生成绩新增\n"); printf("\t2. 学生成绩查询\n"); printf("\t3. 学生成绩修改\n"); printf("\t4. 学生成绩删除\n"); printf("\t5. 班级成绩全览\n"); printf("\t6. 班级成绩统计\n"); printf("\t0. 退出\n"); printf("输入 : \n"); ch = getch(); if(ch < '0'||ch > '7') //判断输入错误 { printf("\n error!\n"); return (ch - 48); } }while(ch < '0'||ch > '7'); return (ch - 48); } //学生成绩新增 void add() { int i; system("CLS"); printf("请输入班级人数: "); scanf("%d",&num); printf("请输入每个学生学号、姓名及成绩\n"); for(i = 0;i < num;i++) { scanf("%s%s%d",students[i].ID,students[i].Name,&students[i].Mark); } printf("成绩录入已完成!\n"); } //输入'5'时的界面 int menu_5() { char ch; do{ printf("\t1---按学号顺序浏览\n"); printf("\t2---按成绩排名浏览\n"); printf("\t0---返回上一级\n"); printf("输入 : \n"); ch = getch(); }while(ch < '0'||ch > '2'); return (ch - 48); } //实现全览功能的函数 void overview() { system("CLS"); char ch = 0; do{ switch(menu_5()) { case 0: system("CLS"); return; case 1: printf("按学号顺序成绩列表如下:\n"); ID_select(); break; case 2: system("CLS"); printf("按成绩顺序浏览成绩功能待完成!\n"); break; } }while(ch < '0'||ch > '2'); return; } //按学号顺序 void ID_select() { int i,j; struct Student t; //中间变量t for(i = 0;i < num;i++) { for(j = 0;j < num-1;j++) { if (students[j-1].ID>students[j].ID) { t = students[j-1]; students[j-1] = students[j]; students[j] = t; } } printf("%s %s %d\n",students[i].ID,students[i].Name,students[i].Mark); } } //输入'6'时的界面 int menu_6() { char ch; do{ system("CLS"); printf("\t1----成绩分布统计\n"); printf("\t2----统计不及格人数及名单\n"); printf("\t3----统计优秀人数及名单\n"); printf("\t4----统计及格人数及名单\n"); printf("\t0----返回上一级\n"); printf("输入 : "); ch = getch(); }while(ch < '0'||ch > '4'); return (ch - 48); } //实现统计功能的函数 void statistics() { system("CLS"); char ch = 0; do{ switch(menu_6()) { case 0: system("CLS"); return; case 1: mark_statistics(); break; case 2: system("CLS"); printf("功能待完成!\n"); break; case 3: system("CLS"); printf("功能待完成!\n"); break; case 4: system("CLS"); printf("功能待完成!\n"); break; } }while(ch < '0'||ch > '4'); } //成绩分布统计 void mark_statistics() { int fail=-1; //不及格 int pass=0; //及格 int secondary=0; //中等 int good=0; //良好 int excellent=0; //优秀 int i; double ratio_1,ratio_2,ratio_3,ratio_4,ratio_5; printf("成绩分布如下 :\n"); printf("总人数\t不及格\t及格\t中等\t良好\t优秀\n"); for(i = 0;i <= num;i++) { if(students[i].Mark < 60 && students[i].Mark >= 0) fail++; else if(students[i].Mark >= 60 && students[i].Mark < 70) pass++; else if(students[i].Mark >= 70 && students[i].Mark < 80) secondary++; else if(students[i].Mark >= 80 && students[i].Mark < 90) good++; else if(students[i].Mark >= 90 && students[i].Mark <= 100) excellent++; } ratio_1 = (double)fail/num*100; ratio_2 = (double)pass/num*100; ratio_3 = (double)secondary/num*100; ratio_4 = (double)good/num*100; ratio_5 = (double)excellent/num*100; printf("%d\t%d\t%d\t%d\t%d\t%d\n",num,fail,pass,secondary,good,excellent); printf("比例:\t%.1lf%%\t%.1lf%%\t%.1lf%%\t%.1lf%%\t%.1lf%%\n",ratio_1,ratio_2,ratio_3,ratio_4,ratio_5); getch(); }
相关分类