Логика базовых классов
Затем мы проверяем, попадают ли даты резервирования в определенный период времени, который поддерживается системой (чтобы облегчить задачу, возьмем период в один год). Для этой цели используем структуру DateTime из пространства имен System (Система). Если какая-то дата не входит в указанный период, будет выдано сообщение об ошибке.
// Проверить, лежат ли даты в пределах поддерживаемого диапазона int day = dt.DayOfYear -1; if (day + numDays > MaxDay) // если (день + numDays> MaxDay) { result › Reservation!d = -1; // результат result › Comment = "Dates out of range"; // результат › Комментарий = "Даты вне диапазона"; return result; // результат }
Потом нужно для каждого из запрашиваемых дней проверить, доступен ли этот ресурс, то есть, не будет ли число резервирований превышать объем ресурса (гостиницы). Мы сделаем это с помощью массива numCust. Первый индекс этого двумерного массива определяет конкретную дату, а второй – идентификационный код резервируемого объекта (Обратите внимание на то, что поля и методы названы именами, которые описывают их суть, например, HotelBroker).
// Проверить, доступны ли комнаты для всех дат for (int i = day; i < day + numDays; i++) { if (numCust[i, unitid] >= units[unitid] › capacity) // вместимость { result › Reservation!d = -1; // результат result › Comment = "Room not available"; // результат › Комментарий = "Комната не доступна"; return result; // результат } }
Далее нужно зарезервировать номер на указанный период времени, увеличив количество клиентов в numCust на единицу в каждый из дней, на которые клиент делает запрос.
// Резервировать комнату для требуемых дат for (int i = day; i < day + numDays; i++) numCust[i, unitid] += 1;
Наконец, мы добавляем резервирование к списку резервирований и возвращаем результат.
// Добавить резервирование к списку резервирований // и возвратить результат AddReservation(res); result › Reservation!d = res › Reservation!d; // результат result › ReservationCost = // результат units[unitid] › cost * numDays; // стоимость result › Rate = units[unitid] › cost; // результат = стоимость; result › Comment = "OK"; // результат › Комментарий = "хорошо"; return result; }
Список резервирований и резервируемых объектов
Класс Broker (Брокер) также содержит список резервирований и резервируемых объектов. Для нашей реализации в виде массивов мы реализуем только методы добавления (Add), а в последующих версиях примера рассмотрим, как удалять элементы из списка.
void AddReservation(Reservation *res) // Резервирование { reservations[nextReservation++] = res; // резервирование } void AddUnit(Reservabie *unit) { units[nextUnit++] = unit; }