C++实现学生课程选课系统:从基础功能到优化建议全揭秘
以下是一个使用 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. 为用户界面添加更多的交互提示和错误信息,以提高用户体验。 ######[AI写代码神器 | 1767点数解答 | 2024-12-22 19:50:07]
- Even More Odd Photos:求解 Farmer John 奶牛分组最大组数的算法解析(字节豆包 | 841点数解答 | 2026-02-03 15:18:32)33
- 基础倒水问题:n 个杯子 k 次倒水后水量全揭秘!(字节豆包 | 160点数解答 | 2026-02-04 21:37:25)35
- “龙虎斗”游戏难题破解:Python代码实现最小气势差距兵营选择(字节豆包 | 709点数解答 | 2026-02-05 17:06:22)36
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- C++实现计算字符矩阵中十字图形个数(字节豆包 | 333点数解答 | 2026-03-14 19:46:38)17
- C++实现矩阵中十字图形个数的计算(字节豆包 | 847点数解答 | 2026-03-14 20:19:15)17
- Java程序模拟教学选课:林老师开课,58 位学生选课男女比例大揭秘( | 2653点数解答 | 2024-04-02 11:00:16)470
- Java程序设计课程:模拟教学管理,统计58位选课学生男女比重( | 363点数解答 | 2024-04-05 18:31:39)473
- R语言实战:用配对样本t检验评估课程强化集训对学生成绩的提升效果(GPT | 630点数解答 | 2024-11-26 22:00:01)321
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- 解析React 15与Vue 2:从O(n^3)到O(n),Diff算法时间复杂度计算及性能对比 (阿里通义 | 379点数解答 | 2023-11-09 01:49:19)332
- 缜密逻辑,全新无名杀“风餐”技能代码精心打造与深度解析 (字节豆包 | 469点数解答 | 2025-04-05 11:37:06)240