Alex ander bro 2025-02-15 09:57 采纳率: 0%
浏览 13

c++宿舍信息管理系统

我用c++语言写了一个宿舍信息管理系统,当我在运行窗口输入学生号和宿舍号之后就出现了异常,怎么解决,以下是相关的图片和代码

img

// 学生入住信息管理  
void manageResidentInfo(DormitorySystem* system, string studentID, string dormNumber, int action) {
    cout << "选择操作: 1. 入住 2. 换宿舍 3. 退宿舍" << endl;
    cin >> action;

    switch (action) {
    case 1: // 入住  
        cout << "输入学生ID: ";
        cin >> studentID;
        cout << "输入宿舍号: ";
        cin >> dormNumber;
        addResident(system, studentID, dormNumber);
        break;
    case 2: // 换宿舍  
        cout << "输入学生ID: ";
        cin >> studentID;
        cout << "输入新宿舍号: ";
        cin >> dormNumber;
        changeDormitory(system, studentID, dormNumber);
        break;
    case 3: // 退宿舍  
        cout << "输入学生ID: ";
        cin >> studentID;
        removeResident(system, studentID);
        break;
    default:
        cout << "无效的操作!" << endl;
        break;

    }
}
void addResident(DormitorySystem* system, const string& studentID, const string& dormNumber) {
    if (system == nullptr || system->dormitories == nullptr) {
        cout << "宿舍系统未初始化!" << endl;
        return;
    }

    // 检查宿舍是否存在  
    DormitoryNode* dorm = system->dormitories;
    while (dorm) {
        if (dorm->dormitory.roomNumber == dormNumber) {
            // 检查学生是否已经入住  
            ResidentNode* currentResident = dorm->students;
            while (currentResident) {
                if (currentResident->stu.ID == studentID) {
                    cout << "学生 " << currentResident->stu.studentName << " 已经在宿舍 " << dormNumber << " 中!" << endl;
                    return; // 学生已在该宿舍中,直接返回  
                }
                currentResident = currentResident->next;
            }

            // 如果宿舍未满,可以入住  
            if (dorm->dormitory.currentOccupants < dorm->dormitory.maxCapacity) {
                ResidentNode* newResident = new ResidentNode;
                newResident->next = nullptr; // 初始化 next 指针  
                cout << "输入学生姓名: ";
                cin >> newResident->stu.studentName;
                newResident->stu.ID = studentID;
                cout << "输入专业: ";
                cin >> newResident->stu.major;
                cout << "输入班级: ";
                cin >> newResident->stu.class_name;
                newResident->stu.isInDorm = true;
                newResident->stu.dormNumber = dormNumber;

                // 添加学生到宿舍  
                newResident->next = dorm->students;
                dorm->students = newResident;
                dorm->dormitory.currentOccupants++;
                cout << "学生 " << newResident->stu.studentName << " 已入住宿舍 " << dormNumber << endl;
            }
            else {
                cout << "宿舍已满,无法入住!" << endl;
            }
            return;
        }
        dorm = dorm->next;
    }
    cout << "未找到宿舍 " << dormNumber << "!" << endl;
}
int main() {
    DormitorySystem dormitorySystem;
    dormitorySystem.dormitories = nullptr; // 初始化宿舍链表为空  
    SecurityManagement securityManagement; // 创建安全管理实例  
    FeeManagement feeManagement;           // 创建费用管理实例  
    string queryType;
    int choice;
    do {
        cout << "\n宿舍管理系统" << endl;
        cout << "1. 导入宿舍信息" << endl;
        cout << "2. 保存宿舍信息" << endl;
        cout << "3. 录入宿舍信息" << endl;
        cout << "4. 宿舍入住信息管理" << endl;
        cout << "5. 查询信息" << endl;
        cout << "6. 修改宿舍信息" << endl;
        cout << "7. 删除入住信息" << endl;
        cout << "8. 按专业统计入住情况" << endl;
        cout << "9. 输出宿舍信息" << endl;
        cout << "10. 添加安全日志" << endl;
        cout << "11. 显示安全日志" << endl;
        cout << "12. 添加费用记录" << endl;
        cout << "13. 显示费用记录" << endl;
        cout << "14. 保存安全日志到文件" << endl;
        cout << "15. 从文件加载安全日志" << endl;
        cout << "16 保存费用记录到文件" << endl;
        cout << "17. 从文件加载费用记录" << endl;
        cout << "0. 退出" << endl;
        cout << "请选择操作: ";
        cin >> choice;
        string studentID, dormNumber, studentName, major, class_name, description;
        float amount;
        switch (choice) {
        case 1:
            importDormitoryInfo(&dormitorySystem, "dormitory_info.txt");
            importStudentInfo(&dormitorySystem, "student.txt");
            break;
        case 2:
            saveDormitoryInfo(&dormitorySystem, "dormitory_info.txt");
            saveStudentInfo(&dormitorySystem, "student.txt");
            break;
        case 3:
            inputDormitoryInfo(&dormitorySystem);
            break;
        case 4:
            cout << "输入学生学号: ";
            cin >> studentID;
            cout << "输入宿舍号: ";
            cin >> dormNumber;
            int action;
            cout << "选择操作 (1: 入住, 2: 更换宿舍, 3: 退宿): ";
            cin >> action;
            manageResidentInfo(&dormitorySystem, studentID, dormNumber, action);
            break;
        case 5:
            queryInfo(&dormitorySystem);
            break;
        case 6:
            cout << "输入宿舍号: ";
            cin >> dormNumber;
            modifyDormitoryInfo(&dormitorySystem, dormNumber);
            break;
        case 7:
            cout << "输入学生学号: ";
            cin >> studentID;
            deleteResidentInfo(&dormitorySystem, studentID);
            break;
        case 8:
            calculateStats(&dormitorySystem);
            break;
        case 9:
            outputInfo(&dormitorySystem);
            break;
        case 10: // 添加安全日志  
            cout << "输入安全日志描述: ";
            cin.ignore(); // 清除输入缓冲区  
            getline(cin, description);
            securityManagement.addSecurityLog(description);
            break;
        case 11: // 显示安全日志  
            securityManagement.displaySecurityLogs();
            break;
        case 12: // 添加费用记录  
            cout << "输入学生学号: ";
            cin >> studentID;
            cout << "输入费用金额: ";
            cin >> amount;
            cout << "输入备注: ";
            cin.ignore(); // 清除输入缓冲区  
            getline(cin, description);
            feeManagement.addFee(studentID, amount, description);
            break;
        case 13: // 显示费用记录  
            feeManagement.displayFees();
            break;
        case 14: // 保存安全日志到文件  
            securityManagement.saveLogsToFile("security_logs.txt");
            break;
        case 15: // 从文件加载安全日志  
            securityManagement.loadLogsFromFile("security_logs.txt");
            break;
        case 16: // 保存费用记录到文件  
            feeManagement.saveFeesToFile("fee_records.txt");
            break;
        case 17: // 从文件加载费用记录  
            feeManagement.loadFeesFromFile("fee_records.txt");
            break;
        case 0:
            cout << "退出系统" << endl;
            break;
        default:
            cout << "无效的选项,请重试。" << endl;
        }
    } while (choice != 0);
    return 0;


```系统,代码能运行,但是在入住信息管理出现了问题:
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/828bdea7ded04e9e8c1341c4ffc41c7f.png "#left")
  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-02-15 09:57
    关注

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

    解决方案

    根据你提供的信息,问题是你的宿舍信息管理系统在输入学生号和宿舍号后出现异常。为了解决这个问题,我们需要查看你的代码和图片来确定具体的错误原因。

    从你的代码中,我可以看到你定义了一个名为 manageResidentInfo 的函数,但是你没有提供函数的实现代码。因此,我无法确定具体的错误原因。

    但是,我可以给你一些可能的解决方案:

    1. 检查输入数据的合法性:在输入学生号和宿舍号时,需要检查输入的数据是否合法。如果输入的数据不合法,可能会导致程序出现异常。
    2. 检查函数的实现代码:如果你没有提供函数的实现代码,我建议你检查函数的实现代码是否正确。如果函数的实现代码有错误,可能会导致程序出现异常。
    3. 使用try-catch语句:你可以使用try-catch语句来捕捉异常,然后在catch块中处理异常。

    以下是一个简单的示例代码,演示如何使用try-catch语句来捕捉异常:

    void manageResidentInfo() {
        int studentId, dormitoryId;
        cout << "请输入学生号:";
        cin >> studentId;
        cout << "请输入宿舍号:";
        cin >> dormitoryId;
    
        try {
            // 你的代码逻辑
        } catch (exception& e) {
            cout << "错误信息:" << e.what() << endl;
        }
    }
    

    在上面的代码中,我们使用try-catch语句来捕捉异常。如果在try块中出现异常,程序将跳转到catch块,并输出错误信息。

    如果你需要更多帮助,请提供更多的代码和图片,我将尽力帮助你解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月15日