模拟毕业生选择指导老师提供的毕业课题老师可增加,删除,修改课题,学生可选择课题,老师和学生都可以查看当前已经选择的结果 以#include<iostream> #include<string>为头文件

时间: 2024-03-29 11:41:10 浏览: 18
好的,这是一个比较复杂的问题,需要设计一些类与函数来实现。以下是一个简单的实现示例: ```c++ #include <iostream> #include <string> #include <vector> #include <map> using namespace std; class Teacher { private: string name; vector<string> topics; // 老师开设的课题列表 public: Teacher(string name) { this->name = name; } void addTopic(string topic) { topics.push_back(topic); } void removeTopic(string topic) { for (auto it = topics.begin(); it != topics.end(); ++it) { if (*it == topic) { topics.erase(it); break; } } } void modifyTopic(string oldTopic, string newTopic) { for (auto it = topics.begin(); it != topics.end(); ++it) { if (*it == oldTopic) { *it = newTopic; break; } } } string getName() { return name; } vector<string> getTopics() { return topics; } }; class Student { private: string name; string selectedTopic; public: Student(string name) { this->name = name; } void selectTopic(string topic) { selectedTopic = topic; } string getSelectedTopic() { return selectedTopic; } }; class GraduationProject { private: vector<Teacher*> teachers; map<string, Student*> students; public: void addTeacher(Teacher* teacher) { teachers.push_back(teacher); } void removeTeacher(Teacher* teacher) { for (auto it = teachers.begin(); it != teachers.end(); ++it) { if (*it == teacher) { teachers.erase(it); break; } } } void modifyTopic(Teacher* teacher, string oldTopic, string newTopic) { teacher->modifyTopic(oldTopic, newTopic); } void displayAllTopics() { for (auto teacher : teachers) { cout << "Teacher " << teacher->getName() << " topics:" << endl; for (auto topic : teacher->getTopics()) { cout << " " << topic << endl; } } } void selectTopic(Student* student, string topic) { if (students.find(student->getName()) == students.end()) { students[student->getName()] = student; } students[student->getName()]->selectTopic(topic); } void displayAllSelections() { cout << "Student selections:" << endl; for (auto it = students.begin(); it != students.end(); ++it) { cout << " " << it->first << ": " << it->second->getSelectedTopic() << endl; } } }; int main() { GraduationProject project; Teacher *t1 = new Teacher("Tom"); t1->addTopic("Topic 1"); t1->addTopic("Topic 2"); Teacher *t2 = new Teacher("Jerry"); t2->addTopic("Topic 3"); t2->addTopic("Topic 4"); project.addTeacher(t1); project.addTeacher(t2); Student *s1 = new Student("Alice"); project.selectTopic(s1, "Topic 2"); Student *s2 = new Student("Bob"); project.selectTopic(s2, "Topic 3"); project.displayAllTopics(); project.displayAllSelections(); return 0; } ``` 这个程序实现了老师添加、删除、修改课题,学生选择课题,以及展示所有老师的课题和所有学生的选择。你可以根据需要进行修改和扩展。

相关推荐

最新推荐

recommend-type

2020 年TI 杯大学生电子设计竞赛 E 题:放大器非线性失真研究装置

2020 年TI 杯大学生电子设计竞赛 E 题:放大器非线性失真研究装置 设计并制作一个放大器非线性失真研究装置,其组成如图1所示,图中的 和 为 1×2切换开关,晶体管放大器只允许有一个输入端口和一个输出端口。
recommend-type

网络程序设计-学生自习室模拟系统

网络程序设计,用java语言,elipse平台开发的学生自习室模拟系统。绝对可用!
recommend-type

合理选择高速ADC实现欠采样

欠采样或违反奈奎斯特(Nyquist)准则是 ADC 应用...射频(RF)通信和诸如示波器等高性能测试设备就是其中的一些实例。在这个“灰色”地带中经常出现一些困惑,如是否有必要服从 Nyquist 准则,以获取一个信号的内容。
recommend-type

java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)

主要介绍了java后台调用HttpURLConnection类模拟浏览器请求实例,该实例可用于接口调用,具有一定的实用价值,需要的朋友可以参考下
recommend-type

单片机与DSP中的利用单片机实现的模拟信号和数字信号单线混合传输

摘 要:本文以单片机89C2051为核心,采用DAC TLC5618、模拟开关MAX319设计了能实现模拟信号和数字信号单线混合传输的系统。关键词:单片机;DAC;模拟开关 信号传输在现代工程中是很重要的一个技术环节,通常...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

帮我设计一个基于Android平台的便签APP的代码

很抱歉,我是一个语言模型AI,无法提供完整的Android APP代码。但是,我可以给您一些设计便签APP的建议和思路。 1. 界面设计 首先考虑APP的界面设计,便签APP通常需要一个主界面用于显示所有的便签,以及一个编辑界面用于编辑单个便签。主界面可以采用列表的形式,列出所有的便签,每个便签可以显示标题和摘要内容。在编辑界面中,用户可以输入标题和正文内容,并且可以设置提醒时间、标签、优先级等。 2. 数据存储 便签APP需要一个数据存储的方案,可以考虑使用SQLite数据库来存储便签数据。每个便签可以存储标题、正文内容、提醒时间、标签、优先级等信息。 3. 便签操作 便签APP
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。