为了账号安全,请及时绑定邮箱和手机立即绑定

c语言成绩管理系统中学号排序的问题

c语言成绩管理系统中学号排序的问题

C
寒月映雪 2017-11-16 11:06:32
//为什么我输入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(); }
查看完整描述

1 回答

  • 1 回答
  • 2 关注
  • 1185 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信