oop课程设计任务 (指导) 书1 学生课程选课系统 基本要求: 设计一个学生课程选课系统, 使之能提供以下基本功能: - 添加新课程信息 (课程名称、授课教师、上课时间、地点等) ; - 学生选课 (包括选课学生信息、选课时间等) ; -学生退课; - 显示课程选课情况 (包括选课学生信息、上课时间、地点等) ; - 修改课程信息 (包括课程名称、授课教师、上课时间、地点等) ; - 删除课程信息; - 其他功能 (如学生选课统计、课程时间表等) 。(用c++知识写,务必完整可运行) 额外要求:1.增加错误处理机制,例如在添加课程或学生选课等操作时,处理输入错误的情况。 2. 优化数据存储,例如使用数据库来存储课程和学生信息,提高数据管理的效率和可靠性。 3.增加用户界面,使用户能够更方便地与系统进行交互,而不仅仅是通过代码中的函数调用。


以下是一个使用 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点数解答]
- 用java创建窗体jframe综合使用空间容器进行界面的布局,并编程实现在多个不同的界面之间相互跳转。 (1)单击“登录”按钮,能够根据输入的账号密码进行登录;如果登录失败,能够提示;如果登录成功,提示登录成功之后,能到达操作界面。 (2)单击“注册”按钮,登录界面消失,出现注册界面。 (3)单击“退出”按钮,程序退出。 或者,在上面图二中: (1)当单击“添加个人信息”菜单后进入“个人信息添加”界面,添加完成后跳转到个人信息显示界面,如果不想添加可返回到图二。 (2)当单击“修改个人信息”菜单进入到“个人信息修改”界面,修改成功后跳转到个人信息显示界面,如果不想修改可返回到图二。 (3)当单击“查看个人信息”菜单进入到“个人信息显示”界面,查看完毕可返回到图二。 (4)当单击“删除个人信息”菜单进入到“个人信息删除”界面,删除成功后跳转到个人信息显示界面,如果不想修改可返回到图二。(503点数解答 | 2024-06-06 23:49:29)264
- 1.使用pandas库读取数据“data.csv”,展示其前5行数据。 2.对数据进行探索,查看数据类型、缺失值以及数据基本的数值统计详细信息。 3.对数据data日期格式数据做日期转换。 4.查看data**信息统计情况。 (1)查看发布**信息中所在城市city的岗位数量统计信息,统计**信息较多的前五名城市。 (2)保留学历是本科和大专的**信息. 0618220232 061822( (3)修改“district”列,如“高新区”,需要改成“成都-高新区” (4)找出"positionadvantage”职位优势这一列中有“双休”条件的**信息,在所有发布的**信息中的占比,保留2位小数。(5)根据“salary”工资列,新增最低工资和最高工资两列,列名分别设置为“最低工资”和“最高工资”,(如10k-30k,则最低 工资为10k,最高工资为20k) 5.对数据data作统计分析(1)统计分析各城市**数量分布图(2)**学历占比图 **学历占比图(3)通过**学历分析图,给出你对**发布情况的分析结论.(4)统计每一天发布的**数量图,按天来统计(提示:需要先将时间按每天来统(1539点数解答 | 2024-06-30 15:56:50)243
- c++程序: 实现一个单门课程成绩管理系统。进入系统时,用户可选择身份:1.教师;2学生。 以教师身份进入后,如果上次已保存了数据,可将文件中数据读取出来,并允许修改部分数据。如果未保存数据,则允许教师录入新的数据。具体功能包括: 可录入或修改课程信息,包括:课程编号、课程名称; 可录入或修改课程的评分项目 (数量任意,不低于3项),包括:项目名称、所占分比例(需进行合法性检测,各项目比例之和为100%);示例如下: 项目名称 所占比例 实验 30% 作业 20% 期中考试 20% 期末考试 30% 注: 一旦录入学生成绩后,评分项目不允许修改;未录入成绩数据时,允许进行修改。 3.可录入、修改、刑除学生(学生数量不限)读门课程的各项成绩,并按照其比例自动算出总成绩;学生基本信息包括学号、姓名;示例如下: 请录入“c++编程”课程成绩 学号:201901 姓名:张三 实验:60 作业:70 期中考试:60 期未考试:80 信息显示功能。可显示课程信息、评分项目信息、所有学生的成绩单。 5.能够将上述数据保存在文件中,二进制、文本文件均可。(课程信息和评 分项目信息可保存一个文件,成绩单(6361点数解答 | 2024-05-24 02:01:02)329
- c++程序编写: 实现一个单门课程成绩管理系统。进入系统时,用户可选择身份:1.教师;2学生。 以教师身份进入后,如果上次已保存了数据,可将文件中数据读取出来,并允许修改部分数据。如果未保存数据,则允许教师录入新的数据。具体功能包括: 可录入或修改课程信息,包括:课程编号、课程名称; 可录入或修改课程的评分项目 (数量任意,不低于3项),包括:项目名称、所占分比例(需进行合法性检测,各项目比例之和为100%);示例如下: 项目名称 所占比例 实验 30% 作业 20% 期中考试 20% 期末考试 30% 注: 一旦录入学生成绩后,评分项目不允许修改;未录入成绩数据时,允许进行修改。 3.可录入、修改、刑除学生(学生数量不限)读门课程的各项成绩,并按照其比例自动算出总成绩;学生基本信息包括学号、姓名;示例如下: 学号:201901 姓名:张三 实验:60 作业:70 期中考试:60 期未考试:80 信息显示功能。可显示课程信息、评分项目信息、所有学生的成绩单。 5.能够将上述数据保存在文件中,二进制、文本文件均可。(课程信息和评 分项目信息可保存一个文件,成绩单可保存一个文件;也可全部保(68点数解答 | 2024-05-24 10:17:09)210
- c++程序: 实现一个单门课程成绩管理系统。进入系统时,用户可选择身份:1.教师;2学生。 以教师身份进入后,如果上次已保存了数据,可将文件中数据读取出来,并允许修改部分数据。如果未保存数据,则允许教师录入新的数据。具体功能包括: 可录入或修改课程信息,包括:课程编号、课程名称; 可录入或修改课程的评分项目 (数量任意,不低于3项),包括:项目名称、所占分比例(需进行合法性检测,各项目比例之和为100%);示例如下: 项目名称 所占比例 实验 30% 作业 20% 期中考试 20% 期末考试 30% 注: 一旦录入学生成绩后,评分项目不允许修改;未录入成绩数据时,允许进行修改。 3.可录入、修改、刑除学生(学生数量不限)读门课程的各项成绩,并按照其比例自动算出总成绩;学生基本信息包括学号、姓名;示例如下: 学号:201901 姓名:张三 实验:60 作业:70 期中考试:60 期未考试:80 信息显示功能。可显示课程信息、评分项目信息、所有学生的成绩单。 5.能够将上述数据保存在文件中,二进制、文本文件均可。(课程信息和评 分项目信息可保存一个文件,成绩单可保存一个文件;也可全部保存为(4293点数解答 | 2024-05-24 10:20:03)260
- 编程实现一个简单的密码设置系统,从键盘输入字符命令,分别实现相应的功能。 初始化设置密码为123456,等待命令输入: (1)输入字符‘1’,功能:密码确认。提示输入密码,密码正确,返回“密码正确”,否则返回密码错误。 (2)输入字符‘2’,功能:设置密码。输入设置密码后,系统提示设置正确。 (3)输入字符‘3’,功能:显示密码。 (4)输入字符‘4’,功能:重置密码。密码重置为6个0; (5)输入字符‘0’,功能:系统退出。 (6)输入其他字符,系统提示输入错误请重新输入。 (286点数解答 | 2025-03-28 10:43:21)196
- 编程实现一个简单的密码设置系统,从键盘输入字符命令,分别实现相应的功能。 初始化设置密码为123456,等待命令输入: (1)输入字符‘1’,功能:密码确认。提示输入密码,密码正确,返回“密码正确”,否则返回密码错误。 (2)输入字符‘2’,功能:设置密码。输入设置密码后,系统提示设置正确。 (3)输入字符‘3’,功能:显示密码。 (4)输入字符‘4’,功能:重置密码。密码重置为6个0; (5)输入字符‘0’,功能:系统退出。 (6)输入其他字符,系统提示输入错误请重新输入。 用c语言 (414点数解答 | 2025-03-28 10:43:55)187
- 程实现一个简单的密码设置系统,从键盘输入字符命令,分别实现相应的功能。 初始化设置密码为123456,等待命令输入: (1)输入字符‘1’,功能:密码确认。提示输入密码,密码正确,返回“密码正确”,否则返回密码错误。 (2)输入字符‘2’,功能:设置密码。输入设置密码后,系统提示设置正确。 (3)输入字符‘3’,功能:显示密码。 (4)输入字符‘4’,功能:重置密码。密码重置为6个0; (5)输入字符‘0’,功能:系统退出。 (6)输入其他字符,系统提示输入错误请重新输入 用c语言 (519点数解答 | 2025-03-28 12:42:02)225
- 初始化设置密码为123456,等待命令输入: (1)输入字符‘1’,功能:密码确认。提示输入密码,密码正确,返回“密码正确”,否则返回密码错误。 (2)输入字符‘2’,功能:设置密码。输入设置密码后,系统提示设置正确。 (3)输入字符‘3’,功能:显示密码。 (4)输入字符‘4’,功能:重置密码。密码重置为6个0; (5)输入字符‘0’,功能:系统退出。 (6)输入其他字符,系统提示输入错误请重新输入。 用c语言(409点数解答 | 2025-04-05 18:09:56)183
- 初始化设置密码为123456,等待命令输入: (1)输入字符‘1’,功能:密码确认。提示输入密码,密码正确,返回“密码正确”,否则返回密码错误。 (2)输入字符‘2’,功能:设置密码。输入设置密码后,系统提示设置正确。 (3)输入字符‘3’,功能:显示密码。 (4)输入字符‘4’,功能:重置密码。密码重置为6个0; (5)输入字符‘0’,功能:系统退出。 (6)输入其他字符,系统提示输入错误请重新输入。 用c语言 (454点数解答 | 2025-04-05 18:48:42)184
- 初始化设置密码为123456,等待命令输入: (1)输入字符‘1’,功能:密码确认。提示输入密码,密码正确,返回“密码正确”,否则返回密码错误。 (2)输入字符‘2’,功能:设置密码。输入设置密码后,系统提示设置正确。 (3)输入字符‘3’,功能:显示密码。 (4)输入字符‘4’,功能:重置密码。密码重置为6个0; (5)输入字符‘0’,功能:系统退出。 (6)输入其他字符,系统提示输入错误请重新输入 C语言 (413点数解答 | 2025-04-06 15:37:16)129
- 初始化设置密码为123456,等待命令输入: (1)输入字符‘1’,功能:密码确认。提示输入密码,密码正确,返回“密码正确”,否则返回密码错误。 (2)输入字符‘2’,功能:设置密码。输入设置密码后,系统提示设置正确。 (3)输入字符‘3’,功能:显示密码。 (4)输入字符‘4’,功能:重置密码。密码重置为6个0; (5)输入字符‘0’,功能:系统退出。 (6)输入其他字符,系统提示输入错误请重新输入 C语言(403点数解答 | 2025-04-06 15:37:54)154