Класс HotelReservation. Класс HotelBroker.
Частные вспомогательные функции помогают найти идентификатор гостиницы и добавить город в список. Город можно добавить только тогда, когда его в списке еще нет: список не может содержать два одинаковых города.
int Findld(String *city, String *name) { for (int i = 0; i < NumberUnits; i++) { Hotel *hotel = dynamic_cast<Hotel *>(units[i]); // Гостиница if ((String::Compare(hotel › City, city) == 0) // сравнить (гостиница › Город, город) && (String::Compare( // сравнить (гостиница › HotelName, название) hotel › HotelName, name) == 0)) return hotel › Hotel!d; // гостиница } return -1; } void AddCity(String *city) { // проверить, есть ли город уже в списке, добавить, если нет if ('Contains(city)) // если (! Содержит (город)) cities[nextCity++] = city; // города [nextCity ++] = город; } bool Contains(String *city) { for (int 1=0; i < NumberCity; i++) { if (String::Compare(cities[i], city) == 0) // сравниваются (города [i], город) return true; // истина } return false; // ложь }
Итак, мы реализовали методы вывода списка всех гостиниц, гостиниц определенного города и списка всех городов. Стоит взглянуть на код, чтобы понять, как реализуется простое форматирование текста.
Наконец, мы подошли к описанию ключевого в классе HotelBroker метода Reserve (Резерв), с помощью которого можно зарезервировать номер.
ReservationResult *Reserve( int customerld, String *city, String *name, DateTime dt, int numDays) { int id = Findld(city, name); // int идентификатор = Findld (город, название{имя}); if (id == -1) // если (идентификатор ==-1) { ReservationResult *result = new ReservationResult; result › Reservation!d = -1; // результат result › Comment = "Hotel not found"; // результат › Комментарий = "Гостиница не найдена"; return result; // результат } HotelReservation *res = new HotelReservation; res › UnitId = id; // идентификатор res › CustomerId = customerld; res › HotelName = name; // название res › City = city; // Город = город res › ArrivalDate = dt; res › DepartureDate = dc.Add(TimeSpan(numDays, 0, 0, 0)); // Добавить на период res › NumberDays = numDays; return Broker::Reserve(res); }
Реализовать класс HotelBroker оказалось несложно, потому что в его основе лежит логика, реализованная в классе Broker (Брокер). Если гостиницы нет в списке гостиниц, то возвращается сообщение об ошибке. После этого создается объект НоtelReservation, который передается в качестве параметра методу Reserve (Резерв) базового класса. В производном классе мы создаем объект резервирования, так как нам нужны все поля класса HotelReservation, а не только поля, унаследованные от класса Reservation (Резервирование).
Для того чтобы подсчитать дату отбытия (прибавить количество дней, на которые зарезервирован номер, к дате прибытия), мы используем структуру TimeSpan вместо ранее использовавшейся для этих целей структуры DateTime. Такое вычисление сделать нетрудно, поскольку в структуре DateTime знак операции + перегружен.