酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

任务描述 设计一个学生成绩管理c++程序,实现对n个学生的3门课程的成绩的记录与统计工作。学生信息包括:学号,姓名,课程成绩1,课程成绩2,课程成绩3。 程序基本功能要求如下: 1---添加学生信息(依次输入学号、三门课程的分数、姓名) 2---修改学生信息(依次输入学号、三门课程的分数、姓名) 3---按学号删除学生(输入学号) 4---按学号查询学生信息(输入学号,输出学号、姓名、三门课程的分数) 5---按姓名查询学生信息(输入姓名,按学号升序依次输出学生信息) 6---按学号升序排序 7---按总分降序排序 0---退出 提示 本题不做复杂度要求。 学生数 n<1000, 姓名字符不超过50,姓名可能带有空格,姓名可能重复,但学号具有唯一性。 按总分降序排序时,同分的学生按照学号升序输出。 注意考虑以下异常输入 操作1 试图添加重复学生:以新添加的学生更新 操作2 试图修改不存在的学生信息:不做任何修改 操作3 试图删除不存在的学生:不做任何修改 操作4 查找不存在的学号:不输出任何信息 操作5 查找不存在的学生姓名:不输出任何信息 测试说明 测试将包括若干行,每行的第一个数

以下是为您编写的 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点数解答]

相关提问