rainman在穹顶外 发表于 2014-1-1 16:50:06

一个小问题

在网上借鉴了一个学生成绩管理系统的源代码,可运行的时间在排序成绩那一块 总有问题,就是进去无论选哪种排序方式它都会返回主菜单,求大神 帮看程序问题出哪了{:1_1:}{:1_1:}#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
void homepage();      //主界面
void input();         //录入 插入
void display();         //显示全部成绩
void del();             //删除记录
void sort();            //排序
void waiting();         //等待界面
void quit();            //退出界面
struct student
{
      int num;
      char name;
      float score;
      float avg;
};
int count=0;         //当前学生个数
int sort_type=0;       //当前排序类型
struct student stu;
void main()
{
      int i,k=0;
      char username,pwd;
      system("color 3d");
      printf("\n\n");
      printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
      printf("\t┃**********************************************************┃\n");
      printf("\t┃***┏━━━━━━━━━━━━━━━━━━━━━━━━┓***┃\n");
      printf("\t┃***┃************************************************┃***┃\n");
      printf("\t┃***┃***                                       ****┃***┃\n");
      printf("\t┃***┃****^__^*欢迎使用班级成绩管理系统*^__^*   ****┃***┃\n");
      printf("\t┃***┃***                                       ****┃***┃\n");
      printf("\t┃***┃***   O(∩_∩)O江西师范大学O(∩_∩)O      ****┃***┃\n");
      printf("\t┃***┃***                                       ****┃***┃\n");
      printf("\t┃***┃***            软件工程   李新                   ****┃***┃\n");
      printf("\t┃***┃***                                       ****┃***┃\n");
      printf("\t┃***┃***                         2013.12.31      ****┃***┃\n");
      printf("\t┃***┃***                                       ****┃***┃\n");
      printf("\t┃***┃************************************************┃***┃\n");
      printf("\t┃***┗━━━━━━━━━━━━━━━━━━━━━━━━┛***┃\n");
      printf("\t┃**********************************************************┃\n");
      printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
   
for(i=0;i<3;i++)
      {
    printf("\n请输入管理员账号:");
      gets(username);
      printf("\n请输入6位密码:");
      gets(pwd);
      if((strcmp(username,"lixin")==0)&&(strcmp(pwd,"123456")==0))
      {
                printf("\n您已经成功登录\n");
                k=1;
                for(i=0;i<20;i++)
                {
                        printf(".");
                        Sleep(100);
                }
                system("cls");
                homepage();
                break;
      }
      else
                printf("\n用户名或密码无效 请重新输入:\n");
      continue;
      }
      if(k==0)
                printf("\n连续输入错误3次 将退出程序\n");
      Sleep(2000);
      quit();
}

void homepage()
{
      char n;
      printf("\n\n");
      printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
      printf("\t┃************************************************************┃\n");
      printf("\t┃*                           *                            *┃\n");
      printf("\t┃*      1.录入成绩         *         2.显示成绩       *┃\n");
      printf("\t┃*                           *                            *┃\n");
      printf("\t┃************************************************************┃\n");
      printf("\t┃*                           *                            *┃\n");
      printf("\t┃*      3.删除记录         *         4.排序成绩       *┃\n");
      printf("\t┃*                           *                            *┃\n");
      printf("\t┃************************************************************┃\n");
      printf("\t┃*                                                          *┃\n");
      printf("\t┃*                        0.退出程序                        *┃\n");
      printf("\t┃*                                                          *┃\n");
      printf("\t┃************************************************************┃\n");
      printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
      while ((n!='1')&&(n!='2')&&(n!='3')&&(n!='4')&&(n!='0'))
      {
                printf("\n请选择:");
                fflush(stdin);
            scanf("%c",&n);
            switch(n)
                {
            case '1':
                  input();
                  break;
                case '2':
                        if(count<10)
                            display();
                        else
                        {
                printf("记录数已满\n");
                              Sleep(2000);
                              system("cls");
                              homepage();
                        }
            break;
      case '3':
                        del();
                        break;
                case '4':
                        sort();
                case '0':
                        quit();
                        break;
                default:
                        printf("\n选项错误\n");
                }
      }
}


void display()
{
      int i;
      char c;
      system("cls");
      switch(sort_type)
      {
      case 0:
                printf("\t\t未排序:\n\n");
                break;
      case 1:
                printf("\t\t按学号排序:\n\n");
                break;
      case 2:
                printf("\t\t按c语言成绩排序:\n\n");
                break;
      case 3:
                printf("\t\t按数学成绩排序:\n\n");
                break;
      case 4:
                printf("\t\t按英语成绩排序:\n\n");
                break;
      case 5:
                printf("\t\t按平均成绩排序:\n\n");
                break;
      }
      printf("\t学号\t姓名\tc语言\t数学\t英语\t平均成绩\n");
      for(i=0;i<count;i++)
      {
                printf("\t%d\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",stu.num,stu.name,stu.score,stu.score,stu.score,stu.avg);
      }
      printf("\n\n按任意键返回\n");
      c=getch();
      system("cls");
    homepage();
}

void input()
{
      int i,numcheck;
      char c;
      system ("cls");


                do
                {
                        printf("学号:\n");
                        scanf("%d",&stu.num);
                        numcheck=1;
                        if(stu.num<0)
                              printf("请输入正整数:\n");
                        for(i=0;i<count;i++)
                        {
                              if(stu.num==stu.num)
                              {
                                        numcheck=0;
                                        printf("学号重复,重新输入:\n");
                              }
                        }
                }while(!numcheck);
                printf("姓名:\n");
                fflush(stdin);
                gets(stu.name);
                for(i=0;i<3;i++)
                {
                        printf("第%d门课成绩:\n",i+1);
                        scanf("%f",&stu.score);
                }
                stu.avg=(stu.score+stu.score+stu.score)/3;
                printf("是否继续输入(y/n):\n");
                do
                {
                        c=getchar();
                        if(c=='y'||c=='Y')
                        {
                              count++;
                              if(count<10)
                  input();
                              else
                              {
                                        printf("记录数已满\n");
                                        Sleep(2000);
                                        system("cls");
                                        homepage();
                              }
                        }
                        else if(c=='n'||c=='N')
                        {
                              count++;
                              system("cls");
                              homepage();
                        }
                        else;
                }while((c!='y')&&(c!='n')&&(c!='Y')&&(c!='N'));

}
void del()
{
      int i,j,del_num,match=0;
      char c;
      system("cls");
      printf("请输入要删除的学生学号:\n");
      scanf("%d",&del_num);
      waiting();
      for(i=0;i<count;i++)
      {
                if(stu.num==del_num)
                {
                        match=1;
                        for(j=i;j<count;j++)
                /*      {
                              stu.num=stu.num;
                              strcpy(stu.name,stu.name);
                              stu.score=stu.score;
                              stu.score=stu.score;
                              stu.score=stu.score;
                              stu.avg=stu.avg;
                        }*/
                        stu=stu;
                }
      }
      if(!match)
                printf("没有要找的学号.\n");
      printf("是否继续删除?(y/n)");
      fflush(stdin);
      do
                {
                        c=getchar();
                        if(c=='y'||c=='Y')
                        {
                              count--;
                              del();
                        }
                        else if(c=='n'||c=='N')
                        {
                              count--;
                              system("cls");
                              homepage();
                        }
                        else;
                }while((c!='y')&&(c!='n'));

}

void sort()
{
      int i,j;
      int choice;
      struct student temp;
      system("cls");
      printf("\t\t请选择排序功能:\n");
      printf("\t1.按学号排序\n");
      printf("\t2.按c语言成绩排序\n");
      printf("\t3.按数学成绩排序\n");
      printf("\t4.按英语成绩排序\n");
      printf("\t5.按平均成绩排序\n");
      do
      {
                scanf("%d",&choice);
      }while((choice!=1)&&(choice!=2)&&(choice!=3)&&(choice!=4)&&(choice!=5));
      switch(choice)
      {
      case 1:
                {
                        for(i=0;i<count-1;i++)
                        {
                              for(j=0;j<count-i-1;j++)
                              {
                                        if(stu.num>stu.num)
                                        {
                                                temp=stu;
                                                stu=stu;
                                                stu=temp;
                                        }
                              }
                        }
                        sort_type=1;
                        break;
                }
                case 2:
                {
                        for(i=0;i<count-1;i++)
                        {
                              for(j=0;j<count-i-1;j++)
                              {
                                        if(stu.score<stu.score)
                                        {
                                                temp=stu;
                                                stu=stu;
                                                stu=temp;
                                        }
                              }
                        }
                        sort_type=2;
                        break;
                }
                case 3:
                {
                        for(i=0;i<count-1;i++)
                        {
                              for(j=0;j<count-i-1;j++)
                              {
                                        if(stu.score<stu.score)
                                        {
                                                temp=stu;
                                                stu=stu;
                                                stu=temp;
                                        }
                              }
                        }
                        sort_type=3;
                        break;
                }
                case 4:
                {
                        for(i=0;i<count-1;i++)
                        {
                              for(j=0;j<count-i-1;j++)
                              {
                                        if(stu.score<stu.score)
                                        {
                                                temp=stu;
                                                stu=stu;
                                                stu=temp;
                                        }
                              }
                        }
                        sort_type=4;
                        break;
                }
                case 5:
                {
                        for(i=0;i<count-1;i++)
                        {
                              for(j=0;j<count-i-1;j++)
                              {
                                        if(stu.avg<stu.avg)
                                        {
                                                temp=stu;
                                                stu=stu;
                                                stu=temp;
                                        }
                              }
                        }
                        sort_type=5;
                        break;
                }
      }
      system("cls");
      waiting();
      homepage();

}

void waiting()
{
      int i;
      printf("\n\t请稍侯...........");
      for(i=0;i<25;i++)
      {
            switch(i%4)
                {
                case 1:printf("\b\\");break;
                case 2:printf("\b-");break;
                case 3:printf("\b/");break;
                case 0:printf("\b|");break;
                }
                Sleep(100);
      }
      system("cls");
}
void quit()
{
      system("cls");
      printf("\n\n");
      printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
      printf("\t┃************************************************************┃\n");
      printf("\t┃*                                                          *┃\n");
      printf("\t┃*      *^__^*谢谢使用班级成绩管理系统*^__^*          *┃\n");
      printf("\t┃*                                                          *┃\n");
          printf("\t┃*               *^__^*开心每一天*^__^*               *┃\n");
      printf("\t┃*                                                          *┃\n");
          printf("\t┃*                     江西师范大学                         *┃\n");
          printf("\t┃*            软件工程软件技术四班李新                  *┃\n");
      printf("\t┃************************************************************┃\n");
      printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n");
      
}


liufei_vip 发表于 2014-1-1 16:50:07

排序完不显示结果,回到主菜单之后选择2显示成绩,就会看到排序后的结果。。。
PS:想排序完直接显示结果,可以自己在排序完调用display。。。。

Skyline 发表于 2014-1-2 00:32:57

你这代码貌似很长的样子!!!!!!!!!!!!!!!!1

我疯狂我成功 发表于 2014-1-4 13:10:57

等大圣吧:ton:

asd2881323 发表于 2014-1-5 00:33:26

我是路过的{:5_103:}

牡丹花下死做鬼 发表于 2014-1-5 00:38:33

看你这代码貌似排序玩没有直接输出啊就是把数据排了下要看结果的话 按2 显示成绩 应该就好了

磊少 发表于 2014-1-5 11:17:28

很简单,但是看着蛋疼!!!

dlzhwm 发表于 2014-1-5 11:37:26

程序排序完成就是返回主菜单。程序设计就是这样的。问题是你想排序完成后做什么。:lol:

五号智能 发表于 2014-1-9 03:26:37

顶三楼,就是这样的,排序之后没调用显示函数

隐袭战龙 发表于 2014-1-18 17:30:39

本帖最后由 隐袭战龙 于 2014-1-18 18:24 编辑

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

飞驰吧!少年 发表于 2014-1-19 16:42:03

你这代码又粗又长,一点也不小
页: [1]
查看完整版本: 一个小问题