Программа Бюро путешествий Acme (Acme Travel Agency)
Реализация
Далее реализуем систему управления гостиницами, используя коллекции вместо массивов. При этом мы будем возвращать программе-клиенту запрошенную ею информацию в методе TestHotel::Main вместо того, чтобы делать это непосредственно в классе HotelBroker. Ранее в этой же главе мы рассмотрели новую реализацию класса Customers (Клиенты). Принципы, применявшиеся при тех переделках, будут использованы и для обновления класса HotelBroker.
Структуры
Прежде всего следует разобраться со структурой данных, передаваемых клиенту по его запросу. Мы используем класс ArrayList (Список массивов). А что же будет храниться в указанном списке массивов? В нашем случае это могут быть объекты Customer (Клиент) и Hotel (Гостиница). Проблема применимости такого подхода состоит в том, что кроме данных, которые клиенту могут понадобиться, оба этих класса содержат также данные, необходимые для реализации класса, но не нужные программе-клиенту вовсе. Для того чтобы решить эту проблему, определим несколько структур.
В файле Customers.h определим структуру CustomerListltem, предназначенную для возврата информации о клиенте.
_value struct CustomerListltem { public: int nCustomerld; String *pFirstName; String *pLastName; String *pEmailAddress; };
В файле AcmeDefinitions.h определим структуры для хранения данных о гостиницах и заказах, а также результатов резервирования.
_value struct HotelListltem { public: String *pCity; String *pHotelName; int nNumberRooms; Decimal decRate; // Десятичное число }; _value struct ReservationListltem { public: int nCustomerld; int nReservationld; String *pHotelName; String *pCity; DateTime dtArrivalDate; DateTime dtDepartureDate; int nNumberDays; }; _value struct ReservationResult { public: int nReservationld; Decimal decReservationCost; // Десятичное число Decimal decRate; // Десятичное число String *pComment; };
ReservationResult возвращает значение Reservationld или -1 при возникновении проблем (в этом случае в поле pComment содержится более подробное описание возникших проблем; если же никаких проблем нет, там находится строка "ОК.").
А теперь вам стоит изучить файлы исходного кода, находящиеся в папке CaseStudy, откомпилировать и скомпоновать приложение, и запустить его.