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

// 学生入住信息管理
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;
```系统,代码能运行,但是在入住信息管理出现了问题:
