鱼C论坛

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

一个小问题

[复制链接]
发表于 2014-1-1 16:50:06 | 显示全部楼层 |阅读模式
3鱼币
在网上借鉴了一个学生成绩管理系统的源代码,可运行的时间在排序成绩那一块 总有问题,就是进去无论选哪种排序方式它都会返回主菜单,求大神 帮看程序问题出哪了{: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[15];
        float score[3];
        float avg;
};
int count=0;           //当前学生个数
int sort_type=0;       //当前排序类型
struct student stu[10];
void main()
{
        int i,k=0;
        char username[15],pwd[6];
        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[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].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[count].num);
                        numcheck=1;
                        if(stu[count].num<0)
                                printf("请输入正整数:\n");
                        for(i=0;i<count;i++)
                        {
                                if(stu[count].num==stu[i].num)
                                {
                                        numcheck=0;
                                        printf("学号重复,重新输入:\n");
                                }
                        }
                }while(!numcheck);
                printf("姓名:\n");
                fflush(stdin);
                gets(stu[count].name);
                for(i=0;i<3;i++)
                {
                        printf("第%d门课成绩:\n",i+1);
                        scanf("%f",&stu[count].score[i]);
                }
                stu[count].avg=(stu[count].score[0]+stu[count].score[1]+stu[count].score[2])/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[i].num==del_num)
                {
                        match=1;
                        for(j=i;j<count;j++)
                /*        {
                                stu[j].num=stu[j+1].num;
                                strcpy(stu[j].name,stu[j+1].name);
                                stu[j].score[0]=stu[j+1].score[0];
                                stu[j].score[1]=stu[j+1].score[1];
                                stu[j].score[2]=stu[j+1].score[2];
                                stu[j].avg=stu[j+1].avg;
                        }*/
                        stu[j]=stu[j+1];
                }
        }
        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[j].num>stu[j+1].num)
                                        {
                                                temp=stu[j];
                                                stu[j]=stu[j+1];
                                                stu[j+1]=temp;
                                        }
                                }
                        }
                        sort_type=1;
                        break;
                }
                case 2:
                {
                        for(i=0;i<count-1;i++)
                        {
                                for(j=0;j<count-i-1;j++)
                                {
                                        if(stu[j].score[0]<stu[j+1].score[0])
                                        {
                                                temp=stu[j];
                                                stu[j]=stu[j+1];
                                                stu[j+1]=temp;
                                        }
                                }
                        }
                        sort_type=2;
                        break;
                }
                case 3:
                {
                        for(i=0;i<count-1;i++)
                        {
                                for(j=0;j<count-i-1;j++)
                                {
                                        if(stu[j].score[1]<stu[j+1].score[1])
                                        {
                                                temp=stu[j];
                                                stu[j]=stu[j+1];
                                                stu[j+1]=temp;
                                        }
                                }
                        }
                        sort_type=3;
                        break;
                }
                case 4:
                {
                        for(i=0;i<count-1;i++)
                        {
                                for(j=0;j<count-i-1;j++)
                                {
                                        if(stu[j].score[2]<stu[j+1].score[2])
                                        {
                                                temp=stu[j];
                                                stu[j]=stu[j+1];
                                                stu[j+1]=temp;
                                        }
                                }
                        }
                        sort_type=4;
                        break;
                }
                case 5:
                {
                        for(i=0;i<count-1;i++)
                        {
                                for(j=0;j<count-i-1;j++)
                                {
                                        if(stu[j].avg<stu[j+1].avg)
                                        {
                                                temp=stu[j];
                                                stu[j]=stu[j+1];
                                                stu[j+1]=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");
        
}
QQ截图20140101164417.png

最佳答案

查看完整内容

排序完不显示结果,回到主菜单之后选择2显示成绩,就会看到排序后的结果。。。 PS:想排序完直接显示结果,可以自己在排序完调用display。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2014-1-2 00:32:57 | 显示全部楼层
你这代码貌似很长的样子!!!!!!!!!!!!!!!!1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-4 13:10:57 | 显示全部楼层
等大圣吧:ton:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-5 00:33:26 | 显示全部楼层
我是路过的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2014-1-5 11:17:28 | 显示全部楼层
很简单,但是看着蛋疼!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2014-1-9 03:26:37 | 显示全部楼层
顶三楼,就是这样的,排序之后没调用显示函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

发表于 2014-1-19 16:42:03 | 显示全部楼层
你这代码又粗又长,一点也不小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 11:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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