Alex ander bro 2025-02-18 22:52 采纳率: 0%
浏览 7

c++宿舍信息管理系统的设计

在我用c++编写的宿舍信息管理系统中的学生 入住信息管理中的退宿舍的功能,一下第一个退宿舍的代码没有出现异常,第二个退宿舍的代码当我输入数据后vs出现了以下图片中的异常,第二个代码增加了一个检查该学生号是否入住的检查。怎么解决?

img

void checkOutStudent(DormitorySystem* system, const string& studentID) {
    DormitoryNode* dormNode = system->dormitories;
    while (dormNode != nullptr) {
        ResidentNode* prev = nullptr;
        ResidentNode* current = dormNode->students;
        while (current != nullptr) {
            if (current->stu.ID == studentID) {
                // 找到学生,进行退宿  
                if (prev != nullptr) {
                    prev->next = current->next;
                }
                else {
                    dormNode->students = current->next;
                }
                dormNode->dormitory.currentOccupants--;
                delete current;

                cout << "学生 " << studentID << " 成功退宿。\n";
                return;
            }
            prev = current;
            current = current->next;
        }
        dormNode = dormNode->next;
    }
    cout << "学生 " << studentID << " 不在任何宿舍中。\n";
}
void checkOutStudent(DormitorySystem* system, const string& studentID) {
    // 先检查学生是否已经入住
    bool isStudentInDormitory = false;
    DormitoryNode* dormNode = system->dormitories;
    while (dormNode != nullptr) {
        ResidentNode* current = dormNode->students;
        while (current != nullptr) {
            if (current->stu.ID == studentID) {
                isStudentInDormitory = true;
                break;
            }
            current = current->next;
        }
        if (isStudentInDormitory) break;
        dormNode = dormNode->next;
    }

    if (!isStudentInDormitory) {
        cout << "学生 " << studentID << " 不在任何宿舍中。\n";
        return;
    }

    // 如果学生已经入住,则进行退宿操作
    dormNode = system->dormitories;
    while (dormNode != nullptr) {
        ResidentNode* prev = nullptr;
        ResidentNode* current = dormNode->students;
        while (current != nullptr) {
            if (current->stu.ID == studentID) {
                // 找到学生,进行退宿  
                if (prev != nullptr) {
                    prev->next = current->next;
                }
                else {
                    dormNode->students = current->next;
                }
                dormNode->dormitory.currentOccupants--;
                delete current;

                cout << "学生 " << studentID << " 成功退宿。\n";
                return;
            }
            prev = current;
            current = current->next;
        }
        dormNode = dormNode->next;
    }
}



  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-02-18 22:52
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题解答

    你遇到了一个C++程序设计的问题,关于宿舍信息管理系统的退宿舍功能。第一个退宿舍的代码没有出现异常,但是第二个退宿舍的代码在输入数据后出现了异常。

    问题分析

    问题可能是由于第二个退宿舍的代码中添加了检查该学生是否已经退宿舍的逻辑,导致程序出现了异常。

    解决方案

    可以尝试以下解决方案:

    1. 检查第二个退宿舍的代码中是否有语法错误或逻辑错误。
    2. 使用调试工具(如Visual Studio的调试器)来检查程序的执行过程,找到出现异常的位置。
    3. 如果问题仍然无法解决,可以提供更多的代码信息和错误信息,以便更好地帮助你解决问题。

    核心代码

    以下是一个简单的退宿舍功能的示例代码:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    struct Student {
        string name;
        string room;
    };
    
    void retireRoom(Student& student) {
        cout << "退宿舍:" << student.name << endl;
        student.room = "";
    }
    
    int main() {
        Student student1 = {"John", "A101"};
        Student student2 = {"Mary", "A102"};
    
        retireRoom(student1); // 第一个退宿舍
        retireRoom(student2); // 第二个退宿舍
    
        return 0;
    }
    

    这个示例代码中,retireRoom函数用于退宿舍,main函数中创建了两个学生对象,并分别退宿舍。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月18日