创个小新 2023-05-20 16:33 采纳率: 50%
浏览 47
已结题

学生信息管理系统的操作

img

img


刚入门c语言的大学生不会做啊,请大家帮帮忙,真的不好搞谢谢!

img


为什么最后运行不出来呢?

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2023-05-21 09:52
    关注

    把代码贴上来,方便大家修改。图中红色箭头所指“插入代码块” ,ctrl + c , ctrl + v。

    img


    整体修改完善如下,供参考:

    #include <stdio.h>
    #include <string.h>
    #define N 3
    struct Student
    {
        char num[13]; // 学号
        char name[11];// 姓名
        char sex[5];  // 性别
        int  age;     // 年龄
        int  cprogram;// c 成绩
        int  english; // e 成绩
        int  math;    // m 成绩
        double aver;  // 平均成绩
    }stu[N];
    
    void input(struct Student stu[], int n)
    {
        int i;
        for(i = 0;i < n; i++)
        {
            printf("请输入第%d/%d个学生的信息:\n",i+1,n);
            printf("------------------------------------------\n");
            printf("学号(12个字符以内):");
            scanf("%s",stu[i].num);
            getchar();
            printf("姓名(10个字符以内):");
            scanf(" %s",stu[i].name);
            getchar();
            printf("性别(4个字符以内):");
            scanf(" %s",stu[i].sex);
            getchar();
            printf("年龄(整数):");
            scanf(" %d",&stu[i].age);
            printf("《c语言》成绩(整数):");
            scanf("%d",&stu[i].cprogram);
            printf("《英 语》成绩(整数):");
            scanf("%d",&stu[i].english);
            printf("《高 数》成绩(整数):");
            scanf("%d",&stu[i].math);
            stu[i].aver=(stu[i].cprogram+stu[i].english+stu[i].math)/3.0;
            printf("------------------------------------------\n\n");
        }
    }
    
    void output(struct Student stu[], int n)
    {
        int i;
        if (n <= 0) return;
        printf("%-13s %-11s %-5s %-8s %-8s %-8s %-8s %-8s\n","学号","姓名",
                                       "性别","年龄","c语言","英语","高数","平均分");
        printf("---------------------------------------------------------------------------\n");
        for (i = 0; i < n; i++)
            printf("%-13s %-11s %-5s %-8d %-8d %-8d %-8d %-8.1f\n",stu[i].num,stu[i].name,
             stu[i].sex,stu[i].age,stu[i].cprogram,stu[i].english,stu[i].math,stu[i].aver);
        printf("---------------------------------------------------------------------------\n\n");
    }
    
    void menu()
    {
        printf("请选择排序字段:\n");
        printf("---------------------------------------------------------------------------------\n");
        printf("(1)学号 (2)姓名 (3)性别 (4)年龄 (5)c语言 (6)英语 (7)高数 (8)平均分 (0)退出程序\n");
        printf("---------------------------------------------------------------------------------\n");
    }
    void menu1()
    {
        printf("请选择排序方向:\n");
        printf("---------------------------------------------------------------------------------\n");
        printf("    (1)升序                           (2)降序                   (0)退出程序\n");
        printf("---------------------------------------------------------------------------------\n");
    }
    void sort(struct Student stu[], int n, int field, int direction)
    {
        int i, j;
        struct Student tmp;
        if (field < 1 || field > 8 || direction < 1 || direction > 2) return;
        for (i = n - 1; i > 0; i--){
            for (j = 0; j < i; j++){
                if (field == 1 && direction == 2 && strcmp(stu[j].num, stu[j+1].num)  < 0  || //学号 降序
                    field == 1 && direction == 1 && strcmp(stu[j].num, stu[j+1].num)  > 0  || //学号 升序
                    field == 2 && direction == 2 && strcmp(stu[j].name,stu[j+1].name) < 0  || //姓名 降序
                    field == 2 && direction == 1 && strcmp(stu[j].name,stu[j+1].name) > 0  || //姓名 升序
                    field == 3 && direction == 2 && strcmp(stu[j].sex, stu[j+1].sex)  < 0  || //性别 降序
                    field == 3 && direction == 1 && strcmp(stu[j].sex, stu[j+1].sex)  > 0  || //性别 升序
                    field == 4 && direction == 2 && stu[j].age < stu[j+1].age              || //年龄 降序
                    field == 4 && direction == 1 && stu[j].age > stu[j+1].age              || //年龄 升序
                    field == 5 && direction == 2 && stu[j].cprogram < stu[j+1].cprogram    || //c语言 降序
                    field == 5 && direction == 1 && stu[j].cprogram > stu[j+1].cprogram    || //c语言 升序
                    field == 6 && direction == 2 && stu[j].english  < stu[j+1].english     || //英语 降序
                    field == 6 && direction == 1 && stu[j].english  > stu[j+1].english     || //英语 升序
                    field == 7 && direction == 2 && stu[j].math     < stu[j+1].math        || //高数 降序
                    field == 7 && direction == 1 && stu[j].math     > stu[j+1].math        || //高数 升序
                    field == 8 && direction == 2 && stu[j].aver     < stu[j+1].aver        || //平均分降序
                    field == 8 && direction == 1 && stu[j].aver     > stu[j+1].aver         ) //平均分升序
                    {
                        tmp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = tmp;
                    }
    
            }
        }
    }
    
    int main()
    {
        int exit = 1, field, direction;
        printf("现某班有%d名学生,请分别依次输入%d个学生的信息:\n\n",N,N);
        input(stu, N);
        //output(stu,N);
        while (exit){
            menu();
            scanf("%d", &field);
            if (field >= 1 && field <= 8){
                do {
                    menu1();
                    scanf("%d", &direction);
                }while (direction < 0 || direction > 2);
                if (direction >= 1 && direction <= 2){
                    sort(stu, N, field, direction);
                    printf("\n排序后的学生信息:\n");
                    printf("===================\n");
                    output(stu,N);
                }
                else if (direction == 0)
                    exit = 0;
            }
            else if (field == 0)
                exit = 0;
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 已采纳回答 5月24日
  • 修改了问题 5月20日
  • 创建了问题 5月20日