以下是一个使用 C++ 实现学生课程选课系统的示例代码,包含了基本功能和额外要求: ```cpp #include <iostream> #include <string> #include <vector> #include <map> // 课程结构体 struct Course { std::string name; std::string teacher; std::string time; std::string location; }; // 学生选课结构体 struct StudentSelection { std::string studentName; std::string courseName; std::string selectionTime; }; // 添加新课程 void addCourse(std::vector<Course>& courses) { Course newCourse; std::cout << "请输入课程名称: "; std::cin >> newCourse.name; std::cout << "请输入授课教师: "; std::cin >> newCourse.teacher; std::cout << "请输入上课时间: "; std::cin >> newCourse.time; std::cout << "请输入上课地点: "; std::cin >> newCourse.location; courses.push_back(newCourse); } // 学生选课 void studentSelectCourse(std::vector<StudentSelection>& selections, std::vector<Course>& courses) { StudentSelection newSelection; std::cout << "请输入学生姓名: "; std::cin >> newSelection.studentName; std::cout << "请选择课程名称: "; std::string courseName; std::cin >> courseName; bool found = false; for (const auto& course : courses) { if (course.name == courseName) { found = true; newSelection.courseName = courseName; std::cout << "请输入选课时间: "; std::cin >> newSelection.selectionTime; selections.push_back(newSelection); break; } } if (!found) { std::cout << "未找到该课程,请重新输入。" << std::endl; } } // 学生退课 void studentDropCourse(std::vector<StudentSelection>& selections, std::string studentName, std::string courseName) { for (auto it = selections.begin(); it!= selections.end(); ++it) { if (it->studentName == studentName && it->courseName == courseName) { selections.erase(it); break; } } } // 显示课程选课情况 void displayCourseSelection(const std::vector<StudentSelection>& selections, const std::vector<Course>& courses) { for (const auto& course : courses) { std::cout << "课程名称: " << course.name << ", 授课教师: " << course.teacher << ", 上课时间: " << course.time << ", 上课地点: " << course.location << std::endl; std::cout << "选课学生信息: " << std::endl; for (const auto& selection : selections) { if (selection.courseName == course.name) { std::cout << " 学生姓名: " << selection.studentName << ", 选课时间: " << selection.selectionTime << std::endl; } } } } // 修改课程信息 void modifyCourseInfo(std::vector<Course>& courses, std::string courseName) { for (auto& course : courses) { if (course.name == courseName) { std::cout << "请输入新的授课教师: "; std::cin >> course.teacher; std::cout << "请输入新的上课时间: "; std::cin >> course.time; std::cout << "请输入新的上课地点: "; std::cin >> course.location; break; } } } // 删除课程信息 void deleteCourseInfo(std::vector<Course>& courses, std::string courseName) { for (auto it = courses.begin(); it!= courses.end(); ++it) { if (it->name == courseName) { courses.erase(it); break; } } } // 学生选课统计 void studentSelectionStatistics(const std::vector<StudentSelection>& selections) { std::map<std::string, int> courseCount; for (const auto& selection : selections) { courseCount[selection.courseName]++; } for (const auto& pair : courseCount) { std::cout << "课程 " << pair.first << " 的选课人数为: " << pair.second << std::endl; } } // 课程时间表 void courseTimetable(const std::vector<Course>& courses) { std::cout << "课程时间表: " << std::endl; for (const auto& course : courses) { std::cout << course.name << " " << course.time << std::endl; } } int main() { std::vector<Course> courses; std::vector<StudentSelection> selections; int choice; do { 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 << "8. 课程时间表" << std::endl; std::cout << "0. 退出" << std::endl; std::cout << "请选择操作: "; std::cin >> choice; switch (choice) { case 1: addCourse(courses); break; case 2: studentSelectCourse(selections, courses); break; case 3: std::string studentName, courseName; std::cout << "请输入学生姓名: "; std::cin >> studentName; std::cout << "请输入课程名称: "; std::cin >> courseName; studentDropCourse(selections, studentName, courseName); break; case 4: displayCourseSelection(selections, courses); break; case 5: std::cout << "请输入要修改的课程名称: "; std::string modifyCourse; std::cin >> modifyCourse; modifyCourseInfo(courses, modifyCourse); break; case 6: std::cout << "请输入要删除的课程名称: "; std::string deleteCourse; std::cin >> deleteCourse; deleteCourseInfo(courses, deleteCourse); break; case 7: studentSelectionStatistics(selections); break; case 8: courseTimetable(courses); break; case 0: break; default: std::cout << "无效的选择,请重新输入。" << std::endl; } } while (choice!= 0); return 0; } ``` 以下是三个改进建议: 1. 对输入的有效性进行更全面的检查,例如检查输入的时间格式是否正确。 2. 将数据存储部分与业务逻辑分离,以提高代码的可维护性和可扩展性。 3. 为用户界面添加更多的交互提示和错误信息,以提高用户体验。 [2024-12-22 19:50:07 | AI写代码神器 | 1767点数解答]