小羔羊964 2023-12-13 00:21 采纳率: 88.9%
浏览 8

学生宿舍管理系统问题

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_DORMS 100
#define MAX_STUDENTS 100

typedef struct {
    int id;
    char name[50];
} Student;

typedef struct {
    int id;
    Student students[MAX_STUDENTS];
    int student_count;
} Dorm;

Dorm dorms[MAX_DORMS];
int dorm_count = 0;
//添加宿舍信息
void add_dorm() {
    Dorm new_dorm;
    printf("请输入宿舍ID:");
    scanf("%d", &new_dorm.id);
    new_dorm.student_count = 0;
    dorms[dorm_count++] = new_dorm;
    printf("宿舍添加成功!\n");
}

//查询宿舍信息
void query_dorm() {
    int id;
    printf("请输入要查询的宿舍ID:");
    scanf("%d", &id);
    for (int i = 0; i < dorm_count; i++) {
        if (dorms[i].id == id) {
            printf("宿舍ID:%d\t", dorms[i].id);
            printf("学生数量:%d\n", dorms[i].student_count);
            break;
        }
    }
}


//分配宿舍
void assign_dorm() {
    int student_id, dorm_id;
    char name;
    printf("请输入学生ID:");
    scanf("%d", &student_id);
    printf("请输入学生姓名:");
    scanf("%s",&name);
    printf("请输入宿舍ID:");
    scanf("%d", &dorm_id);
    for (int i = 0; i < dorm_count; i++) {
        if (dorms[i].id == dorm_id) {
            if (dorms[i].student_count >= 6) {
                printf("该宿舍已满6人,无法分配!\n");
                return;
            }
            for (int j = 0; j < dorms[i].student_count; j++) {
                if (dorms[i].students[j].id == student_id) {
                    printf("该学生已分配到其他宿舍!\n");
                    return;
                }
            }
            dorms[i].student_count++;
            dorms[i].students[dorms[i].student_count] = dorms[i].students[student_id];
            dorms[i].students[dorms[i].student_count].id=student_id;
            dorms[i].students[dorms[i].student_count].name[50]=name;
            printf("学生分配成功!\n");
            return;
        }
    }
    printf("未找到该宿舍!\n");
}

//查询学生住宿情况
void query_student_dorm() {
    int student_id;
    printf("请输入要查询的学生ID:");
    scanf("%d", &student_id);
    for (int i = 0; i < dorm_count; i++) {
        for (int j = 0; j < dorms[i].student_count; j++) {
            if (dorms[i].students[j].id == student_id) {
                printf("学生ID:%d\t", dorms[i].students[j].id);
                printf("学生姓名:%s\t", dorms[i].students[j].name);
                printf("宿舍ID:%d", dorms[i].id);
                return;
            }
        }
    }
    printf("未找到该学生!\n");
}
//删除学生
void delete_dorm() {
    int student_id;
    printf("请输入要删除的学生ID:");
    scanf("%d", &student_id);
    for (int i = 0; i < dorm_count; i++){
        for (int j = 0; j < dorms[i].student_count; j++) {
            if (dorms[i].students[j].id == student_id){
                for (int k = j; k < dorms[i].student_count-1; ++k) {
                    dorms[i].students[k]=dorms[i].students[k+1];
                }
                dorms[i].student_count--;
                printf("学生删除成功!\n");
                return;
            }
        }
        printf("该学生不存在");
        return;
    }
}
//修改学生住宿情况
void modify_student_dorm() {
    int student_id, dorm_id;
    printf("请输入要修改的学生ID:");
    scanf("%d", &student_id);
    printf("请输入要修改为的宿舍ID:");
    scanf("%d", &dorm_id);
    for (int i = 0; i < dorm_count; i++) {
        for (int j = 0; j < dorms[i].student_count; j++) {
            if (dorms[i].students[j].id == student_id) {
                for (int k = 0; k < dorm_count; k++) {
                    if (dorms[k].id == dorm_id) {
                        dorms[i].students[j] = dorms[k].students[student_id];
                        printf("学生住宿情况修改成功!\n");
                        return;
                    }
                }
                printf("未找到该宿舍!\n");
                return;
            }
        }
    }
    printf("未找到该学生!\n");
}



int main() {
    int choice;
    while (1) {
        printf("\t\t学生宿舍管理系统\n");
        printf("1. 添加宿舍信息\t\t");
        printf("2. 查询宿舍信息\t\t");
        printf("3. 分配宿舍\n");
        printf("4. 查询学生住宿情况\t");
        printf("5. 修改学生住宿情况\t");
        printf("6.删除学生信息\n");
        printf("7. 退出程序\n");
        printf("请输入您的选择:");
        scanf("%d", &choice);

        switch (choice) {
            case (1):
                add_dorm();
                break;
            case (2):
                query_dorm();
                break;
            case (3):
                assign_dorm();
                break;
            case (4):
                query_student_dorm();
                break;
            case (5):
                modify_student_dorm();
                break;
            case (6):
                delete_dorm();
                break;
            case (7):
                exit(0);
            default:
                printf("无效的选择,请重新输入。");
        }
    }
    return 0;
}

为什么查询学生住宿信息姓名是乱码
怎么修改assign_dorm模块,可以一次输入多个学生

  • 写回答

1条回答 默认 最新

  • 小孟多 2023-12-13 09:31
    关注

    在你的代码中,查询学生住宿信息姓名出现乱码的原因是你使用了错误的输入格式。在分配宿舍时,你只使用了一个字符来存储学生的姓名,这是不够的。另外,你也需要修改assign_dorm函数以允许一次性输入多个学生。

    首先,让我们解决查询学生住宿信息姓名乱码的问题。你需要修改assign_dorm函数中关于学生姓名的处理,同时也要修改Student结构体的定义。

    typedef struct {
        int id;
        char name[50];  // 修改为数组,以存储姓名
    } Student;
    
    
    

    接下来,在assign_dorm函数中,你需要修改输入方式并用循环来一次性输入多个学生的信息。以下是你可以修改的部分:

    void assign_dorm() {
        int dorm_id, student_count;
        printf("请输入宿舍ID:");
        scanf("%d", &dorm_id);
        printf("请输入学生数量:");
        scanf("%d", &student_count);
    
        for (int i = 0; i < student_count; i++) {
            Student new_student;
            printf("请输入第%d个学生的ID:", i + 1);
            scanf("%d", &new_student.id);
            printf("请输入第%d个学生的姓名:", i + 1);
            scanf("%s", new_student.name);
    
            // 在此处添加学生到宿舍的逻辑
            // ...
        }
    
        // 其余部分不变
    }
    
    
    

    通过以上修改,你现在能够在assign_dorm函数中一次性输入多个学生信息,并且解决了查询学生住宿信息姓名乱码的问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月13日