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

//为什么我输入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();
}


寒月映雪
浏览 1186回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP