以下是为您编写的 C++ 程序示例: ```cpp #include <iostream> #include <string> #include <vector> #include <algorithm> struct Student { int id; std::string name; int score1; int score2; int score3; int totalScore; }; // 添加学生信息 void addStudent(std::vector<Student>& students) { Student student; std::cout << "请输入学号: "; std::cin >> student.id; std::cout << "请输入课程成绩 1: "; std::cin >> student.score1; std::cout << "请输入课程成绩 2: "; std::cin >> student.score2; std::cout << "请输入课程成绩 3: "; std::cin >> student.score3; std::cout << "请输入姓名: "; std::cin.ignore(); std::getline(std::cin, student.name); // 检查是否有重复学号,若有则更新 auto it = std::find_if(students.begin(), students.end(), [&student](const Student& s) { return s.id == student.id; }); if (it!= students.end()) { *it = student; } else { student.totalScore = student.score1 + student.score2 + student.score3; students.push_back(student); } } // 修改学生信息 void modifyStudent(std::vector<Student>& students) { int id; std::cout << "请输入学号: "; std::cin >> id; auto it = std::find_if(students.begin(), students.end(), [id](const Student& s) { return s.id == id; }); if (it!= students.end()) { std::cout << "请输入新的课程成绩 1: "; std::cin >> it->score1; std::cout << "请输入新的课程成绩 2: "; std::cin >> it->score2; std::cout << "请输入新的课程成绩 3: "; std::cin >> it->score3; std::cout << "请输入新的姓名: "; std::cin.ignore(); std::getline(std::cin, it->name); it->totalScore = it->score1 + it->score2 + it->score3; } else { std::cout << "未找到该学生,无法修改!" << std::endl; } } // 按学号删除学生 void deleteStudentByID(std::vector<Student>& students) { int id; std::cout << "请输入学号: "; std::cin >> id; auto it = std::find_if(students.begin(), students.end(), [id](const Student& s) { return s.id == id; }); if (it!= students.end()) { students.erase(it); } else { std::cout << "未找到该学生,无法删除!" << std::endl; } } // 按学号查询学生信息 void queryStudentByID(const std::vector<Student>& students) { int id; std::cout << "请输入学号: "; std::cin >> id; auto it = std::find_if(students.begin(), students.end(), [id](const Student& s) { return s.id == id; }); if (it!= students.end()) { std::cout << "学号: " << it->id << ", 姓名: " << it->name << ", 课程成绩 1: " << it->score1 << ", 课程成绩 2: " << it->score2 << ", 课程成绩 3: " << it->score3 << std::endl; } else { std::cout << "未找到该学生!" << std::endl; } } // 按姓名查询学生信息 void queryStudentByName(const std::vector<Student>& students) { std::string name; std::cout << "请输入姓名: "; std::cin.ignore(); std::getline(std::cin, name); std::vector<Student> foundStudents; for (const auto& student : students) { if (student.name == name) { foundStudents.push_back(student); } } if (foundStudents.empty()) { std::cout << "未找到该学生!" << std::endl; } else { std::sort(foundStudents.begin(), foundStudents.end(), [](const Student& a, const Student& b) { return a.id < b.id; }); for (const auto& student : foundStudents) { std::cout << "学号: " << student.id << ", 姓名: " << student.name << ", 课程成绩 1: " << student.score1 << ", 课程成绩 2: " << student.score2 << ", 课程成绩 3: " << student.score3 << std::endl; } } } // 按学号升序排序 void sortStudentsByID(std::vector<Student>& students) { std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) { return a.id < b.id; }); } // 按总分降序排序 void sortStudentsByTotalScore(std::vector<Student>& students) { std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) { if (a.totalScore!= b.totalScore) { return a.totalScore > b.totalScore; } else { return a.id < b.id; } }); } int main() { std::vector<Student> students; int choice; while (true) { std::cout << "请选择操作:" << std::endl; std::cout << "1 - 添加学生信息" << std::endl; std::cout << "2 - 修改学生信息" << std::endl; std::cout << "3 - 按学号删除学生" << std::endl; std::cout << "4 - 按学号查询学生信息" << std::endl; std::cout << "5 - 按姓名查询学生信息" << std::endl; std::cout << "6 - 按学号升序排序" << std::endl; std::cout << "7 - 按总分降序排序" << std::endl; std::cout << "0 - 退出" << std::endl; std::cin >> choice; switch (choice) { case 1: addStudent(students); break; case 2: modifyStudent(students); break; case 3: deleteStudentByID(students); break; case 4: queryStudentByID(students); break; case 5: queryStudentByName(students); break; case 6: sortStudentsByID(students); break; case 7: sortStudentsByTotalScore(students); break; case 0: return 0; default: std::cout << "无效的选择,请重新输入!" << std::endl; } } return 0; } ``` 以下是 3 点额外需要注意的逻辑点: 1. 在处理用户输入时,要注意输入的合法性检查,比如学号是否为整数,成绩是否在合理范围内,姓名长度是否符合要求等。 2. 在进行排序和查找操作时,要考虑算法的效率和复杂度,尽量选择合适的数据结构和算法来提高程序的性能。 3. 对于可能出现的异常情况,比如内存分配失败、文件读写错误等,要有相应的错误处理机制,以保证程序的稳定性和可靠性。 [2024-12-12 11:58:41 | AI写代码神器 | 1860点数解答]