Что такое Microsoft.NET?

  35790931     

Метод Reserve (Резерв)



Метод Reserve (Резерв)

Основным методом класса Broker (Брокер) является метод Reserve (Резерв).

ReservationResult *Reserve(Reservation *res) // Резервирование
{
int unitid = res->Unit!d;
DateTime dt = res->Date; // Дата
int numDays = res->NumberDays;
ReservationResult *result = new ReservationResult;
// Проверить, находятся ли даты
// в пределах поддерживаемого диапазона
int day = dt.DayOfYear - 1;
if (day + numDays > MaxDay) // если (день + numDays> MaxDay)
{
result->Reservation!d = -1; // результат
result->Comment = "Dates out of range";
// результат-> Комментарий = "Даты вне диапазона";
return result; // результат }
// Проверить, доступны ли комнаты для всех дат
for (int i = day; i < day + numDays; i++)
{
if (numCust[i, unitid] >= units[unitid]->capacity)
// вместимость
{
result->Reservation!d = -1; // результат
result->Coiranent = "Room not available";
// результат-> Комментарий = "Комната не доступна";
return result; // результат
}
}
// Резервировать комнату для требуемых дат
for (int i = day; i < day + numDays; i++) n
umCust[i, unitid] += 1;
// Добавить резервирование (Add reservation)
// к списку резервирования,
// возвратить результат
AddReservation(res);
result->Reservation!d = res->Reservation!d; // результат
result->ReservationCost = // результат
units[unitid]->cost * numDays; // стоимость
result->Rate = units[unitid]->cost; // результат = стоимость;
result->Comment = "OK"; // результата Комментарий = "хорошо";
return result;
}

Метод Reserve (Резерв) разработан так, чтобы с его помощью можно было зарезервировать разные типы резервируемых объектов. Таким образом, объект Reservation (Резервирование), который хранится в списке резервируемых объектов, создается в классе, производном от Broker (Брокер), и передается в метод Reserve (Резерв) в качестве параметра. Например, объект HotelBroker резервирует объект HotelReservation и т.д. Потом создается объект ReservationResult, который и будет возвращен (поля Unitid, Date (Дата) и NumberDays наследуются из базового класса Reservation (Резервирование)).

ReservationResult *Reserve(Reservation *res) // Резервирование
{
int unitid = res->UnitId;
DateTime dt = res->Date; // Дата
int numDays = res->NumberDays;
ReservationResult *result = new ReservationResult;

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



Содержание раздела