鱼C论坛

 找回密码
 立即注册
查看: 2530|回复: 10

一个小问题

[复制链接]
发表于 2014-1-1 16:50:06 | 显示全部楼层 |阅读模式
3鱼币
在网上借鉴了一个学生成绩管理系统的源代码,可运行的时间在排序成绩那一块 总有问题,就是进去无论选哪种排序方式它都会返回主菜单,求大神 帮看程序问题出哪了{:1_1:}{:1_1:}
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<windows.h>
  4. #include<conio.h>
  5. void homepage();        //主界面
  6. void input();           //录入 插入
  7. void display();         //显示全部成绩
  8. void del();             //删除记录
  9. void sort();            //排序
  10. void waiting();         //等待界面
  11. void quit();            //退出界面
  12. struct student
  13. {
  14.         int num;
  15.         char name[15];
  16.         float score[3];
  17.         float avg;
  18. };
  19. int count=0;           //当前学生个数
  20. int sort_type=0;       //当前排序类型
  21. struct student stu[10];
  22. void main()
  23. {
  24.         int i,k=0;
  25.         char username[15],pwd[6];
  26.         system("color 3d");
  27.         printf("\n\n");
  28.         printf("  \t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
  29.         printf("  \t┃**********************************************************┃\n");
  30.         printf("  \t┃***┏━━━━━━━━━━━━━━━━━━━━━━━━┓***┃\n");
  31.         printf("  \t┃***┃************************************************┃***┃\n");
  32.         printf("  \t┃***┃***                                         ****┃***┃\n");
  33.         printf("  \t┃***┃***  *^__^*欢迎使用班级成绩管理系统*^__^*   ****┃***┃\n");
  34.         printf("  \t┃***┃***                                         ****┃***┃\n");
  35.         printf("  \t┃***┃***     O(∩_∩)O江西师范大学O(∩_∩)O      ****┃***┃\n");
  36.         printf("  \t┃***┃***                                         ****┃***┃\n");
  37.         printf("  \t┃***┃***            软件工程     李新                   ****┃***┃\n");
  38.         printf("  \t┃***┃***                                         ****┃***┃\n");
  39.         printf("  \t┃***┃***                         2013.12.31      ****┃***┃\n");
  40.         printf("  \t┃***┃***                                         ****┃***┃\n");
  41.         printf("  \t┃***┃************************************************┃***┃\n");
  42.         printf("  \t┃***┗━━━━━━━━━━━━━━━━━━━━━━━━┛***┃\n");
  43.         printf("  \t┃**********************************************************┃\n");
  44.         printf("  \t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
  45.    
  46. for(i=0;i<3;i++)
  47.         {
  48.     printf("\n请输入管理员账号:");
  49.         gets(username);
  50.         printf("\n请输入6位密码:");
  51.         gets(pwd);
  52.         if((strcmp(username,"lixin")==0)&&(strcmp(pwd,"123456")==0))
  53.         {
  54.                 printf("\n您已经成功登录\n");
  55.                 k=1;
  56.                 for(i=0;i<20;i++)
  57.                 {
  58.                         printf(".");
  59.                         Sleep(100);
  60.                 }
  61.                 system("cls");
  62.                 homepage();
  63.                 break;
  64.         }
  65.         else
  66.                 printf("\n用户名或密码无效 请重新输入:\n");
  67.         continue;
  68.         }
  69.         if(k==0)
  70.                 printf("\n连续输入错误3次 将退出程序\n");
  71.         Sleep(2000);
  72.         quit();
  73. }

  74. void homepage()
  75. {
  76.         char n;
  77.         printf("\n\n");
  78.         printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
  79.         printf("\t┃************************************************************┃\n");
  80.         printf("\t┃*                             *                            *┃\n");
  81.         printf("\t┃*        1.录入成绩           *           2.显示成绩       *┃\n");
  82.         printf("\t┃*                             *                            *┃\n");
  83.         printf("\t┃************************************************************┃\n");
  84.         printf("\t┃*                             *                            *┃\n");
  85.         printf("\t┃*        3.删除记录           *           4.排序成绩       *┃\n");
  86.         printf("\t┃*                             *                            *┃\n");
  87.         printf("\t┃************************************************************┃\n");
  88.         printf("\t┃*                                                          *┃\n");
  89.         printf("\t┃*                        0.退出程序                        *┃\n");
  90.         printf("\t┃*                                                          *┃\n");
  91.         printf("\t┃************************************************************┃\n");
  92.         printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
  93.         while ((n!='1')&&(n!='2')&&(n!='3')&&(n!='4')&&(n!='0'))
  94.         {
  95.                 printf("\n请选择:");
  96.                 fflush(stdin);
  97.             scanf("%c",&n);
  98.             switch(n)
  99.                 {
  100.             case '1':
  101.                     input();
  102.                     break;
  103.                 case '2':
  104.                         if(count<10)
  105.                             display();
  106.                         else
  107.                         {
  108.                 printf("记录数已满\n");
  109.                                 Sleep(2000);
  110.                                 system("cls");
  111.                                 homepage();
  112.                         }
  113.             break;
  114.         case '3':
  115.                         del();
  116.                         break;
  117.                 case '4':
  118.                         sort();
  119.                 case '0':
  120.                         quit();
  121.                         break;
  122.                 default:
  123.                         printf("\n选项错误\n");
  124.                 }
  125.         }
  126. }


  127. void display()
  128. {
  129.         int i;
  130.         char c;
  131.         system("cls");
  132.         switch(sort_type)
  133.         {
  134.         case 0:
  135.                 printf("\t\t未排序:\n\n");
  136.                 break;
  137.         case 1:
  138.                 printf("\t\t按学号排序:\n\n");
  139.                 break;
  140.         case 2:
  141.                 printf("\t\t按c语言成绩排序:\n\n");
  142.                 break;
  143.         case 3:
  144.                 printf("\t\t按数学成绩排序:\n\n");
  145.                 break;
  146.         case 4:
  147.                 printf("\t\t按英语成绩排序:\n\n");
  148.                 break;
  149.         case 5:
  150.                 printf("\t\t按平均成绩排序:\n\n");
  151.                 break;
  152.         }
  153.         printf("\t学号\t姓名\tc语言\t数学\t英语\t平均成绩\n");
  154.         for(i=0;i<count;i++)
  155.         {
  156.                 printf("\t%d\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avg);
  157.         }
  158.         printf("\n\n按任意键返回\n");
  159.         c=getch();
  160.         system("cls");
  161.     homepage();
  162. }

  163. void input()
  164. {
  165.         int i,numcheck;
  166.         char c;
  167.         system ("cls");


  168.                 do
  169.                 {
  170.                         printf("学号:\n");
  171.                         scanf("%d",&stu[count].num);
  172.                         numcheck=1;
  173.                         if(stu[count].num<0)
  174.                                 printf("请输入正整数:\n");
  175.                         for(i=0;i<count;i++)
  176.                         {
  177.                                 if(stu[count].num==stu[i].num)
  178.                                 {
  179.                                         numcheck=0;
  180.                                         printf("学号重复,重新输入:\n");
  181.                                 }
  182.                         }
  183.                 }while(!numcheck);
  184.                 printf("姓名:\n");
  185.                 fflush(stdin);
  186.                 gets(stu[count].name);
  187.                 for(i=0;i<3;i++)
  188.                 {
  189.                         printf("第%d门课成绩:\n",i+1);
  190.                         scanf("%f",&stu[count].score[i]);
  191.                 }
  192.                 stu[count].avg=(stu[count].score[0]+stu[count].score[1]+stu[count].score[2])/3;
  193.                 printf("是否继续输入(y/n):\n");
  194.                 do
  195.                 {
  196.                         c=getchar();
  197.                         if(c=='y'||c=='Y')
  198.                         {
  199.                                 count++;
  200.                                 if(count<10)
  201.                     input();
  202.                                 else
  203.                                 {
  204.                                         printf("记录数已满\n");
  205.                                         Sleep(2000);
  206.                                         system("cls");
  207.                                         homepage();
  208.                                 }
  209.                         }
  210.                         else if(c=='n'||c=='N')
  211.                         {
  212.                                 count++;
  213.                                 system("cls");
  214.                                 homepage();
  215.                         }
  216.                         else;
  217.                 }while((c!='y')&&(c!='n')&&(c!='Y')&&(c!='N'));

  218. }
  219. void del()
  220. {
  221.         int i,j,del_num,match=0;
  222.         char c;
  223.         system("cls");
  224.         printf("请输入要删除的学生学号:\n");
  225.         scanf("%d",&del_num);
  226.         waiting();
  227.         for(i=0;i<count;i++)
  228.         {
  229.                 if(stu[i].num==del_num)
  230.                 {
  231.                         match=1;
  232.                         for(j=i;j<count;j++)
  233.                 /*        {
  234.                                 stu[j].num=stu[j+1].num;
  235.                                 strcpy(stu[j].name,stu[j+1].name);
  236.                                 stu[j].score[0]=stu[j+1].score[0];
  237.                                 stu[j].score[1]=stu[j+1].score[1];
  238.                                 stu[j].score[2]=stu[j+1].score[2];
  239.                                 stu[j].avg=stu[j+1].avg;
  240.                         }*/
  241.                         stu[j]=stu[j+1];
  242.                 }
  243.         }
  244.         if(!match)
  245.                 printf("没有要找的学号.\n");
  246.         printf("是否继续删除?(y/n)");
  247.         fflush(stdin);
  248.         do
  249.                 {
  250.                         c=getchar();
  251.                         if(c=='y'||c=='Y')
  252.                         {
  253.                                 count--;
  254.                                 del();
  255.                         }
  256.                         else if(c=='n'||c=='N')
  257.                         {
  258.                                 count--;
  259.                                 system("cls");
  260.                                 homepage();
  261.                         }
  262.                         else;
  263.                 }while((c!='y')&&(c!='n'));

  264. }

  265. void sort()
  266. {
  267.         int i,j;
  268.         int choice;
  269.         struct student temp;
  270.         system("cls");
  271.         printf("\t\t请选择排序功能:\n");
  272.         printf("\t1.按学号排序\n");
  273.         printf("\t2.按c语言成绩排序\n");
  274.         printf("\t3.按数学成绩排序\n");
  275.         printf("\t4.按英语成绩排序\n");
  276.         printf("\t5.按平均成绩排序\n");
  277.         do
  278.         {
  279.                 scanf("%d",&choice);
  280.         }while((choice!=1)&&(choice!=2)&&(choice!=3)&&(choice!=4)&&(choice!=5));
  281.         switch(choice)
  282.         {
  283.         case 1:
  284.                 {
  285.                         for(i=0;i<count-1;i++)
  286.                         {
  287.                                 for(j=0;j<count-i-1;j++)
  288.                                 {
  289.                                         if(stu[j].num>stu[j+1].num)
  290.                                         {
  291.                                                 temp=stu[j];
  292.                                                 stu[j]=stu[j+1];
  293.                                                 stu[j+1]=temp;
  294.                                         }
  295.                                 }
  296.                         }
  297.                         sort_type=1;
  298.                         break;
  299.                 }
  300.                 case 2:
  301.                 {
  302.                         for(i=0;i<count-1;i++)
  303.                         {
  304.                                 for(j=0;j<count-i-1;j++)
  305.                                 {
  306.                                         if(stu[j].score[0]<stu[j+1].score[0])
  307.                                         {
  308.                                                 temp=stu[j];
  309.                                                 stu[j]=stu[j+1];
  310.                                                 stu[j+1]=temp;
  311.                                         }
  312.                                 }
  313.                         }
  314.                         sort_type=2;
  315.                         break;
  316.                 }
  317.                 case 3:
  318.                 {
  319.                         for(i=0;i<count-1;i++)
  320.                         {
  321.                                 for(j=0;j<count-i-1;j++)
  322.                                 {
  323.                                         if(stu[j].score[1]<stu[j+1].score[1])
  324.                                         {
  325.                                                 temp=stu[j];
  326.                                                 stu[j]=stu[j+1];
  327.                                                 stu[j+1]=temp;
  328.                                         }
  329.                                 }
  330.                         }
  331.                         sort_type=3;
  332.                         break;
  333.                 }
  334.                 case 4:
  335.                 {
  336.                         for(i=0;i<count-1;i++)
  337.                         {
  338.                                 for(j=0;j<count-i-1;j++)
  339.                                 {
  340.                                         if(stu[j].score[2]<stu[j+1].score[2])
  341.                                         {
  342.                                                 temp=stu[j];
  343.                                                 stu[j]=stu[j+1];
  344.                                                 stu[j+1]=temp;
  345.                                         }
  346.                                 }
  347.                         }
  348.                         sort_type=4;
  349.                         break;
  350.                 }
  351.                 case 5:
  352.                 {
  353.                         for(i=0;i<count-1;i++)
  354.                         {
  355.                                 for(j=0;j<count-i-1;j++)
  356.                                 {
  357.                                         if(stu[j].avg<stu[j+1].avg)
  358.                                         {
  359.                                                 temp=stu[j];
  360.                                                 stu[j]=stu[j+1];
  361.                                                 stu[j+1]=temp;
  362.                                         }
  363.                                 }
  364.                         }
  365.                         sort_type=5;
  366.                         break;
  367.                 }
  368.         }
  369.         system("cls");
  370.         waiting();
  371.         homepage();

  372. }

  373. void waiting()
  374. {
  375.         int i;
  376.         printf("\n\t请稍侯...........");
  377.         for(i=0;i<25;i++)
  378.         {
  379.             switch(i%4)
  380.                 {
  381.                 case 1:printf("\b\");break;
  382.                 case 2:printf("\b-");break;
  383.                 case 3:printf("\b/");break;
  384.                 case 0:printf("\b|");break;
  385.                 }
  386.                 Sleep(100);
  387.         }
  388.         system("cls");
  389. }
  390. void quit()
  391. {
  392.         system("cls");
  393.         printf("\n\n");
  394.         printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
  395.         printf("\t┃************************************************************┃\n");
  396.         printf("\t┃*                                                          *┃\n");
  397.         printf("\t┃*        *^__^*  谢谢使用班级成绩管理系统  *^__^*          *┃\n");
  398.         printf("\t┃*                                                          *┃\n");
  399.             printf("\t┃*               *^__^*  开心每一天  *^__^*                 *┃\n");
  400.         printf("\t┃*                                                          *┃\n");
  401.             printf("\t┃*                     江西师范大学                         *┃\n");
  402.             printf("\t┃*              软件工程软件技术四班  李新                  *┃\n");
  403.         printf("\t┃************************************************************┃\n");
  404.         printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n");
  405.         
  406. }
复制代码

QQ截图20140101164417.png

最佳答案

查看完整内容

排序完不显示结果,回到主菜单之后选择2显示成绩,就会看到排序后的结果。。。 PS:想排序完直接显示结果,可以自己在排序完调用display。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-1 16:50:07 | 显示全部楼层
排序完不显示结果,回到主菜单之后选择2显示成绩,就会看到排序后的结果。。。
PS:想排序完直接显示结果,可以自己在排序完调用display。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-2 00:32:57 | 显示全部楼层
你这代码貌似很长的样子!!!!!!!!!!!!!!!!1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-4 13:10:57 | 显示全部楼层
等大圣吧:ton:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-5 00:33:26 | 显示全部楼层
我是路过的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-5 00:38:33 | 显示全部楼层
看你这代码貌似排序玩没有直接输出啊就是把数据排了下要看结果的话 按2 显示成绩 应该就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-5 11:17:28 | 显示全部楼层
很简单,但是看着蛋疼!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-5 11:37:26 | 显示全部楼层
程序排序完成就是返回主菜单。程序设计就是这样的。问题是你想排序完成后做什么。:lol:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-9 03:26:37 | 显示全部楼层
顶三楼,就是这样的,排序之后没调用显示函数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-18 17:30:39 | 显示全部楼层
本帖最后由 隐袭战龙 于 2014-1-18 18:24 编辑

你这个程序很多错误,比如在94行,你没有让用户输入n就直接判断了,可以把循环改为do-while。而且我在输入0的时候,程序崩溃了。而且你这个程序是相当于无限制的使用函数的,会把栈用光
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-19 16:42:03 | 显示全部楼层
你这代码又粗又长,一点也不小
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-12 23:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表