#include "iostream"\n#include "fstream"\n#include "sstream"\n#include "vector"\n#include "algorithm"\n\nusing namespace std;\n\n// 学生基本信息结构体\nstruct StudentInfo {\n string id;\n string name;\n string gender;\n string dormitory;\n string phoneNumber;\n};\n\n// 学生成绩基本信息结构体\nstruct CourseInfo {\n string id;\n string courseCode;\n string courseName;\n int credit;\n int regularGrade;\n int experimentGrade;\n int finalGrade;\n int comprehensiveGrade;\n int earnedCredit;\n};\n\n// 学生管理系统类\nclass StudentManagementSystem {\nprivate:\n vector studentInfoList;\n vector courseInfoList;\n\npublic:\n // 构造函数,从文件中读取学生基本信息和成绩信息\n StudentManagementSystem() {\n loadStudentInfoFromFile();\n loadCourseInfoFromFile();\n }\n\n // 数据录入功能\n void inputData() {\n // 从用户输入获取学生基本信息\n StudentInfo studentInfo;\n cout << "请输入学生学号:";\n cin >> studentInfo.id;\n cout << "请输入学生姓名:";\n cin >> studentInfo.name;\n cout << "请输入学生性别:";\n cin >> studentInfo.gender;\n cout << "请输入学生宿舍号:";\n cin >> studentInfo.dormitory;\n cout << "请输入学生电话号码:";\n cin >> studentInfo.phoneNumber;\n\n // 将学生基本信息保存到学生信息列表中\n studentInfoList.push_back(studentInfo);\n\n // 从用户输入获取学生成绩信息\n CourseInfo courseInfo;\n cout << "请输入课程编号:";\n cin >> courseInfo.id;\n cout << "请输入课程名称:";\n cin >> courseInfo.courseName;\n cout << "请输入课程学分:";\n cin >> courseInfo.credit;\n cout << "请输入平时成绩:";\n cin >> courseInfo.regularGrade;\n cout << "请输入实验成绩:";\n cin >> courseInfo.experimentGrade;\n cout << "请输入卷面成绩:";\n cin >> courseInfo.finalGrade;\n\n // 根据条件计算综合成绩和实得学分\n if (courseInfo.experimentGrade == -1) {\n courseInfo.comprehensiveGrade = courseInfo.regularGrade * 0.3 + courseInfo.finalGrade * 0.7;\n } else {\n courseInfo.comprehensiveGrade = courseInfo.regularGrade * 0.15 + courseInfo.experimentGrade * 0.15 + courseInfo.finalGrade * 0.7;\n }\n\n if (courseInfo.comprehensiveGrade >= 90) {\n courseInfo.earnedCredit = courseInfo.credit;\n } else if (courseInfo.comprehensiveGrade >= 80) {\n courseInfo.earnedCredit = courseInfo.credit * 0.8;\n } else if (courseInfo.comprehensiveGrade >= 70) {\n courseInfo.earnedCredit = courseInfo.credit * 0.75;\n } else if (courseInfo.comprehensiveGrade >= 60) {\n courseInfo.earnedCredit = courseInfo.credit * 0.6;\n } else {\n courseInfo.earnedCredit = 0;\n }\n\n // 将学生成绩信息保存到学生成绩列表中\n courseInfoList.push_back(courseInfo);\n\n // 将学生基本信息和学生成绩信息写入文件中\n saveStudentInfoToFile();\n saveCourseInfoToFile();\n }\n\n // 学生基本情况查询\n void searchStudentInfo() {\n int choice;\n cout << "请选择查询方式:1.按学号查询 2.按姓名查询:";\n cin >> choice;\n\n if (choice == 1) {\n string id;\n cout << "请输入学号:";\n cin >> id;\n\n // 在学生信息列表中查找匹配的学生信息\n for (const auto& studentInfo : studentInfoList) {\n if (studentInfo.id == id) {\n displayStudentInfo(studentInfo);\n break;\n }\n }\n } else if (choice == 2) {\n string name;\n cout << "请输入姓名:";\n cin >> name;\n\n // 在学生信息列表中查找匹配的学生信息\n for (const auto& studentInfo : studentInfoList) {\n if (studentInfo.name == name) {\n displayStudentInfo(studentInfo);\n }\n }\n }\n }\n\n // 成绩查询\n void searchCourseInfo() {\n string id;\n cout << "请输入学号:";\n cin >> id;\n\n // 在学生成绩列表中查找匹配的学生成绩信息\n for (const auto& courseInfo : courseInfoList) {\n if (courseInfo.id == id) {\n displayCourseInfo(courseInfo);\n }\n }\n }\n\n // 删除功能\n void deleteStudent(string id) {\n // 在学生信息列表中查找匹配的学生信息并删除\n for (auto it = studentInfoList.begin(); it != studentInfoList.end(); ++it) {\n if (it->id == id) {\n studentInfoList.erase(it);\n break;\n }\n }\n\n // 在学生成绩信息列表中查找匹配的学生成绩信息并删除\n for (auto it = courseInfoList.begin(); it != courseInfoList.end(); ++it) {\n if (it->id == id) {\n courseInfoList.erase(it);\n break;\n }\n }\n\n // 更新文件中的学生信息和学生成绩信息\n saveStudentInfoToFile();\n saveCourseInfoToFile();\n }\n\n // 排序功能\n void sortData() {\n int choice;\n cout << "请选择排序方式:1.按综合成绩升序 2.按综合成绩降序 3.按实得学分升序 4.按实得学分降序:";\n cin >> choice;\n\n if (choice == 1) {\n sort(courseInfoList.begin(), courseInfoList.end(), [](const CourseInfo& a, const CourseInfo& b) {\n return a.comprehensiveGrade < b.comprehensiveGrade;\n });\n } else if (choice == 2) {\n sort(courseInfoList.begin(), courseInfoList.end(), [](const CourseInfo& a, const CourseInfo& b) {\n return a.comprehensiveGrade > b.comprehensiveGrade;\n });\n } else if (choice == 3) {\n sort(courseInfoList.begin(), courseInfoList.end(), [](const CourseInfo& a, const CourseInfo& b) {\n return a.earnedCredit < b.earnedCredit;\n });\n } else if (choice == 4) {\n sort(courseInfoList.begin(), courseInfoList.end(), [](const CourseInfo& a, const CourseInfo& b) {\n return a.earnedCredit > b.earnedCredit;\n });\n }\n\n // 显示排序后的数据\n for (const auto& courseInfo : courseInfoList) {\n displayCourseInfo(courseInfo);\n }\n }\n\nprivate:\n // 从文件中加载学生基本信息\n void loadStudentInfoFromFile() {\n ifstream file("A.txt");\n if (file.is_open()) {\n string line;\n while (getline(file, line)) {\n StudentInfo studentInfo;\n istringstream iss(line);\n iss >> studentInfo.id >> studentInfo.name >> studentInfo.gender >> studentInfo.dormitory >> studentInfo.phoneNumber;\n studentInfoList.push_back(studentInfo);\n }\n file.close();\n }\n }\n\n // 从文件中加载学生成绩基本信息\n void loadCourseInfoFromFile() {\n ifstream file("B.txt");\n if (file.is_open()) {\n string line;\n while (getline(file, line)) {\n CourseInfo courseInfo;\n istringstream iss(line);\n iss >> courseInfo.id >> courseInfo.courseCode >> courseInfo.courseName >> courseInfo.credit >> courseInfo.regularGrade >> courseInfo.experimentGrade >> courseInfo.finalGrade;\n courseInfoList.push_back(courseInfo);\n }\n file.close();\n }\n }\n\n // 将学生基本信息保存到文件中\n void saveStudentInfoToFile() {\n ofstream file("A.txt");\n if (file.is_open()) {\n for (const auto& studentInfo : studentInfoList) {\n file << studentInfo.id << " " << studentInfo.name << " " << studentInfo.gender << " " << studentInfo.dormitory << " " << studentInfo.phoneNumber << endl;\n }\n file.close();\n }\n }\n\n // 将学生成绩基本信息保存到文件中\n void saveCourseInfoToFile() {\n ofstream file("B.txt");\n if (file.is_open()) {\n for (const auto& courseInfo : courseInfoList) {\n file << courseInfo.id << " " << courseInfo.courseCode << " " << courseInfo.courseName << " " << courseInfo.credit << " " << courseInfo.regularGrade << " " << courseInfo.experimentGrade << " " << courseInfo.finalGrade << endl;\n }\n file.close();\n }\n }\n\n // 显示学生基本信息\n void displayStudentInfo(const StudentInfo& studentInfo) {\n cout << "学号:" << studentInfo.id << endl;\n cout << "姓名:" << studentInfo.name << endl;\n cout << "性别:" << studentInfo.gender << endl;\n cout << "宿舍号码:" << studentInfo.dormitory << endl;\n cout << "电话号码:" << studentInfo.phoneNumber << endl;\n }\n\n // 显示学生成绩基本信息\n void displayCourseInfo(const CourseInfo& courseInfo) {\n cout << "学号:" << courseInfo.id << endl;\n cout << "课程编号:" << courseInfo.courseCode << endl;\n cout << "课程名称:" << courseInfo.courseName << endl;\n cout << "综合成绩:" << courseInfo.comprehensiveGrade << endl;\n cout << "实得学分:" << courseInfo.earnedCredit << endl;\n cout << endl;\n }\n};\n\nint main() {\n StudentManagementSystem system;\n\n int choice;\n while (true) {\n cout << "请选择操作:1.数据录入 2.学生基本情况查询 3.成绩查询 4.删除功能 5.排序功能 6.退出:";\n cin >> choice;\n\n switch (choice) {\n case 1:\n system.inputData();\n break;\n case 2:\n system.searchStudentInfo();\n break;\n case 3:\n system.searchCourseInfo();\n break;\n case 4:\n string id;\n cout << "请输入要删除的学生学号:";\n cin >> id;\n system.deleteStudent(id);\n break;\n case 5:\n system.sortData();\n break;\n case 6:\n return 0;\n default:\n cout << "无效操作,请重新输入。" << endl;\n }\n }\n\n return 0;\n