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

Класс 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 знак операции + перегружен.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.