酒店类 C++ 代码解析:添加房间、预订和取消订单、续房服务等功能
这是一个酒店类,包含了添加和删除房间、查询可用房间数量、预订和取消订单、续房服务、展示订单等功能。其中,房间类和订单类也被定义在了该文件中。具体解释见注释。
class Hotel {
public:
void add_room(Room::Type type)
{
rooms.push_back(Room(type));
}
void remove_room(int index) //退房
{
if (index >= 0 && index < rooms.size())
{
rooms.erase(rooms.begin() + index);
}
}
int get_available_rooms(Room::Type type) const
{
int count = 0;
for (const auto& room : rooms)
{
if (room.get_type() == type && room.is_room_available())
{
count++;
}
}
return count;
}
bool add_order(Room::Type room_type, int num_rooms, const string& name, const string& phone, const string& email, time_t expiration, int day)
{
if (get_available_rooms(room_type) >= num_rooms)
{
orders.push_back(Order(next_order_id++, room_type, num_rooms, name, phone, email, expiration, day));
return true;
}
return false;
}
bool renew_order(int order_id, int day)//用于续房服务
{
for (auto& order : orders)
{
if (order.get_id() == order_id && order.get_expiration() >= time(nullptr))
{
order = Order(order.get_id(), order.get_room_type(), order.get_num_rooms(), order.get_name(), order.get_phone(), order.get_email(), order.get_expiration() + (86400 * day), order.get_day() + day);
return true;
}
}
return false;
}
void cancel_order(int order_id)
{
for (auto& order : orders)
{
if (order.get_id() == order_id)
{
order = orders.back();
orders.pop_back();
break;
}
}
}
void show_orders() const
{
cout << left << setw(10) << "ID" << setw(15) << "Room Type" << setw(15) << "Num Rooms" << setw(15) << "Name" << setw(15) << "Phone" << setw(15) << "Email" << setw(15) << "Day" << endl;
for (const auto& order : orders)
{
cout << left << setw(10) << order.get_id() << setw(15) << (order.get_room_type() == Room::Type::Standard ? "Standard" : "Deluxe") << setw(15) << order.get_num_rooms() << std::setw(15) << order.get_name() << setw(15) << order.get_phone() << setw(15) << order.get_email() << setw(15) << order.get_day() << endl;
}
}
//删除过期订单
void remove_expired_orders()
{
time_t now = time(nullptr);
orders.erase(std::remove_if(orders.begin(), orders.end(), [now](const Order& order) { return order.get_expiration() < now; }), orders.end());
}
private:
vector<Room> rooms;
vector<Order> orders;
int next_order_id = 1;
};
代码功能解析:
- 添加房间:
add_room(Room::Type type): 向酒店添加一个指定类型的房间。 - 删除房间:
remove_room(int index): 删除指定索引的房间(例如,客人退房)。 - 查询可用房间数量:
get_available_rooms(Room::Type type): 返回指定类型房间的可用数量。 - 预订房间:
add_order(Room::Type room_type, int num_rooms, const string& name, const string& phone, const string& email, time_t expiration, int day): 预订指定类型的房间,需要提供预订人信息、预订时长等。 - 续房:
renew_order(int order_id, int day): 延长现有订单的入住天数。 - 取消订单:
cancel_order(int order_id): 取消指定订单。 - 展示订单:
show_orders(): 展示当前所有订单的信息。 - 删除过期订单:
remove_expired_orders(): 定期删除已经过期的订单。
代码中涉及到的其他类:
- Room 类: 表示一个酒店房间,包含房间类型、是否可用等信息。
- Order 类: 表示一个订单,包含预订房间类型、数量、预订人信息、入住时间等信息。
代码示例:
int main() {
Hotel hotel;
// 添加房间
hotel.add_room(Room::Type::Standard);
hotel.add_room(Room::Type::Deluxe);
// 预订房间
hotel.add_order(Room::Type::Standard, 1, "John Doe", "1234567890", "john.doe@example.com", time(nullptr) + (86400 * 3), 3);
// 查询可用房间数量
cout << "Available Standard rooms: " << hotel.get_available_rooms(Room::Type::Standard) << endl;
// 展示订单
hotel.show_orders();
return 0;
}
注意:
- 该代码仅供参考,需要根据实际情况进行修改和完善。
- 该代码依赖于
Room类和Order类,需要根据实际情况定义这两个类。 - 该代码使用了一些 C++ 标准库的函数和类,例如
vector、time、cout等。
希望以上解释对您理解该酒店类代码有所帮助。如果您还有其他问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/ob3R 著作权归作者所有。请勿转载和采集!