Иллюстрированный самоучитель по Architecture .NET

Логика базовых классов

Затем мы проверяем, попадают ли даты резервирования в определенный период времени, который поддерживается системой (чтобы облегчить задачу, возьмем период в один год). Для этой цели используем структуру 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;
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.