c语言实现信息管理系统应该怎么做

这个是我目前在网上找的和我们上课讲的所结合的,用switch-case实现这个是不是不太好,而且贴的这个代码也是有错误的,这个应该怎么修改?


#include<stdio.h>
struct std{
    int num;
    char name[20];
    double chinese;
};
int main(){
    int choice; 
    struct std s[100];
    int i=0,n,x,num;
printf("**************************************");
printf("***********    欢迎进入    ***********");
printf("*******某某小学学生信息管理系统*******");
printf("|------------------------------------|");
printf("|          1.录入学生信息            |");
printf("|          2.显示学生信息            |");
printf("|          3.查询学生信息            |");
printf("|          4.查询成绩信息            |");
printf("|          5.退出信息系统            |");
printf("**************************************");
switch (choice){
    case 1:
        printf("请输入学生的总人数(不能超过2000人):");
        scanf("%d",&n);
        for(i=0;i<num;i++){
        printf("请输入第d个学生的信息:",i+1);
        scanf("%d%s%lf",&s[i].xuehao,s[i].name,&s[i].chinese);
        }
        printf("学生信息已成功添加!\n");
        break;
    case 2:
        printf("学生信息列表:\n");
            for (i = 0; i < num_students; i++) {
                printf("学号:%d,姓名:%s,成绩:%.2f\n"s[i].num,s[i].name,s[i].chinese);
            }
        break;
    }
}

【以下回答由 GPT 生成】

问题标题:如何使用C语言实现一个信息管理系统?

问题内容: 目前我在网上找到了一个与我们上课讲的内容结合的C语言代码,但我觉得这个代码使用switch-case实现可能不太好,并且其中也有错误。请问应该如何修改这个代码呢?

以下是代码:

#include<stdio.h>
struct std{
    int num;
    char name[20];
    double chinese;
};

int main(){
    int choice; 
    struct std s[100];
    int i=0, n, x, num;

    printf("**************************************");
    printf("***********    欢迎进入    ***********");
    printf("*******某某小学学生信息管理系统*******");
    printf("|------------------------------------|");
    printf("|          1.录入学生信息            |");
    printf("|          2.显示学生信息            |");
    printf("|          3.查询学生信息            |");
    printf("|          4.查询成绩信息            |");
    printf("|          5.退出信息系统            |");
    printf("**************************************");

    switch(choice){
        case 1:
            printf("请输入学生的总人数(不能超过2000人):");
            scanf("%d", &n);

            for(i=0; i<n; i++){
                printf("请输入第%d个学生的信息:", i+1);
                scanf("%d%s%lf", &s[i].num, s[i].name, &s[i].chinese);
            }

            printf("学生信息已成功添加!\n");
            break;

        case 2:
            printf("学生信息列表:\n");
            for(i=0; i<num_students; i++){
                printf("学号:%d,姓名:%s,成绩:%.2f\n", s[i].num, s[i].name, s[i].chinese);
            }
            break;
    }
}

解决方案:

首先,需要将代码中的switch语句放到一个循环中,以便多次执行用户选择的操作。循环的退出条件可以是用户选择退出信息系统(选择5)。另外,使用do-while循环结构可以确保至少执行一次。

其次,为了防止代码中存在的错误,可以将变量choice的初始化放到循环内,并且添加一个default分支处理无效的选择。

另外,为了在显示学生信息时知道有多少学生已经录入,可以添加一个记录学生数量的变量num_students

根据以上的需求和问题,我修改了代码如下:

#include<stdio.h>

struct std{
    int num;
    char name[20];
    double chinese;
};

int main(){
    struct std s[100];
    int i = 0;
    int choice;
    int n;
    int num_students = 0; // 记录学生数量

    printf("**************************************\n");
    printf("***********    欢迎进入    ***********\n");
    printf("*******某某小学学生信息管理系统*******\n");
    printf("|------------------------------------|\n");
    printf("|          1.录入学生信息            |\n");
    printf("|          2.显示学生信息            |\n");
    printf("|          3.查询学生信息            |\n");
    printf("|          4.查询成绩信息            |\n");
    printf("|          5.退出信息系统            |\n");
    printf("**************************************\n");

    do {
        printf("请输入您的选择:");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                printf("请输入学生的总人数(不能超过2000人):");
                scanf("%d", &n);

                for (i = 0; i < n; i++) {
                    printf("请输入第%d个学生的信息:", i + 1);
                    scanf("%d%s%lf", &s[i].num, s[i].name, &s[i].chinese);
                }

                num_students = n; // 更新学生数量
                printf("学生信息已成功添加!\n");
                break;

            case 2:
                if (num_students == 0) {
                    printf("没有学生信息可以显示。\n");
                    break;
                }

                printf("学生信息列表:\n");
                for (i = 0; i < num_students; i++) {
                    printf("学号:%d,姓名:%s,成绩:%.2f\n", s[i].num, s[i].name, s[i].chinese);
                }
                break;

            case 3:
                // 添加查询学生信息的代码
                break;

            case 4:
                // 添加查询成绩信息的代码
                break;

            case 5:
                printf("感谢使用学生信息管理系统!\n");
                break;

            default:
                printf("无效的选择,请重新输入。\n");
                break;
        }

    } while (choice != 5);

    return 0;
}

上述修改后的代码使用do-while循环结构,使得用户可以多次选择操作,直到选择退出信息系统。同时,在学生信息显示前添加了对学生数量的判断,如果学生数量为0,则显示相应的提示信息。

希望这样的修改能满足您的需求。如果您还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

代码大体框架还是可以用的
struct std s[100];
这个可以定义成全局变量,然后每个模块做成一个独立的函数。