class RoomManager { private: // Conference Room 1, the smaller one. // Only require the date information for appointment. set<int> _room1; // Conference Room 2, the bigger one. // Require both date and event information for appointment. map<int, string> _room2; public: // Insert an appointment to the smaller Conference Room (1). bool InsertAppointment(const int& date); // Insert an appointment to the bigger Conference Room (2). bool InsertAppointment(const int& date, const string& event); // Cancel an appointment on designated date. // If room_id == 1, cancel the corresponding appointment of _room1. // If room_id == 2, cancel the corresponding appointment of _room2. bool CancelAppointment(const int& room_id, const int& date); // Print all existing appointments in chronological order. // If room_id == 1, just print the date information. Each piece of information is separated by ' '. // If room_id == 2, print the information in form of "date(event)". Each piece of information is separated by ' '. // If there is no even one existing appointment yet, print "No Appointment". void PrintAppointments(const int& room_id) const; };写完这个代码
时间: 2024-03-17 19:44:20 浏览: 30
,我们可以使用 RoomManager 类来管理两个会议室的预约信息。其中,Conference Room 1 只需要日期信息即可进行预约,而 Conference Room 2 需要日期和事件信息才能进行预约。
下面是完整的 RoomManager 类的代码实现:
```c++
#include <iostream>
#include <set>
#include <map>
using namespace std;
class RoomManager {
private:
// Conference Room 1, the smaller one.
// Only require the date information for appointment.
set<int> _room1;
// Conference Room 2, the bigger one.
// Require both date and event information for appointment.
map<int, string> _room2;
public:
// Insert an appointment to the smaller Conference Room (1).
bool InsertAppointment(const int& date) {
if (_room1.find(date) != _room1.end()) {
// There is already an appointment on this date.
return false;
} else {
_room1.insert(date);
return true;
}
}
// Insert an appointment to the bigger Conference Room (2).
bool InsertAppointment(const int& date, const string& event) {
if (_room2.find(date) != _room2.end()) {
// There is already an appointment on this date.
return false;
} else {
_room2[date] = event;
return true;
}
}
// Cancel an appointment on designated date.
// If room_id == 1, cancel the corresponding appointment of _room1.
// If room_id == 2, cancel the corresponding appointment of _room2.
bool CancelAppointment(const int& room_id, const int& date) {
if (room_id == 1) {
if (_room1.find(date) != _room1.end()) {
_room1.erase(date);
return true;
} else {
// There is no appointment on this date.
return false;
}
} else if (room_id == 2) {
if (_room2.find(date) != _room2.end()) {
_room2.erase(date);
return true;
} else {
// There is no appointment on this date.
return false;
}
} else {
// Invalid room_id.
return false;
}
}
// Print all existing appointments in chronological order.
// If room_id == 1, just print the date information. Each piece of information is separated by ' '.
// If room_id == 2, print the information in form of "date(event)". Each piece of information is separated by ' '.
// If there is no even one existing appointment yet, print "No Appointment".
void PrintAppointments(const int& room_id) const {
if (room_id == 1) {
if (_room1.empty()) {
cout << "No Appointment";
} else {
for (const auto& date : _room1) {
cout << date << " ";
}
}
} else if (room_id == 2) {
if (_room2.empty()) {
cout << "No Appointment";
} else {
for (const auto& appointment : _room2) {
cout << appointment.first << "(" << appointment.second << ") ";
}
}
} else {
// Invalid room_id.
cout << "Invalid room_id";
}
cout << endl;
}
};
int main() {
RoomManager rm;
rm.InsertAppointment(20220101);
rm.InsertAppointment(20220102, "Meeting with John");
rm.InsertAppointment(20220103);
rm.InsertAppointment(20220102, "Meeting with Peter");
rm.PrintAppointments(1);
rm.PrintAppointments(2);
rm.CancelAppointment(1, 20220103);
rm.CancelAppointment(2, 20220102);
rm.PrintAppointments(1);
rm.PrintAppointments(2);
return 0;
}
```
这里的 main 函数演示了 RoomManager 类的使用方法。我们可以看到,通过 RoomManager 类,我们可以方便地进行会议室预约、取消预约和打印预约信息等操作。