Advertisement
RobertDeMilo

BB4.17 Разбор задачи 2

Jun 21st, 2024
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.42 KB | None | 0 0
  1. #include "booking_managers.h"
  2.  
  3. #include <iostream>
  4. #include<string>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. class Trip
  10. {
  11. private:
  12.     HotelProvider& hotel_provider;
  13.     FlightProvider& flight_provider;
  14.  
  15. public:
  16.     vector<HotelProvider::BookingId> hotels;
  17.     vector<FlightProvider::BookingId> flights;
  18.     Trip(HotelProvider& hp, FlightProvider& fp): hotel_provider(hp), flight_provider(fp)
  19.     {
  20.  
  21.     }
  22.  
  23.     Trip(const Trip&) = delete;
  24.     Trip(Trip&&) = default;
  25.  
  26.     Trip& operator = (const Trip&) = delete;
  27.     Trip& operator = (Trip&&) = default;
  28.  
  29.  
  30.     void Cancel()
  31.     {
  32.         for (auto& id : hotels)
  33.         {
  34.             hotel_provider.Cancel(id);
  35.         }
  36.         hotels.clear();
  37.         for (auto& id : flights)
  38.         {
  39.             flight_provider.Cancel(id);
  40.         }
  41.         flights.clear();
  42.     }
  43.     ~Trip()
  44.     {
  45.         Cancel();
  46.     }
  47. };
  48.  
  49. class TripManager
  50. {
  51. public:
  52.     using BookingId = string;
  53.  
  54.     struct BookingData
  55.     {
  56.         string city_from;
  57.         string city_to;
  58.         string date_from;
  59.         string date_to;
  60.     };
  61.    
  62.     Trip Book(const BookingData& data)
  63.     {
  64.         Trip trip(hotel_provider, flight_provider);
  65.         //try
  66.         //{
  67.             {
  68.                 FlightProvider::BookingData data;
  69.                 trip.flights.push_back(flight_provider.Book(data));
  70.             }
  71.             {
  72.                 HotelProvider::BookingData data;
  73.                 trip.hotels.push_back(hotel_provider.Book(data));
  74.             }
  75.             {
  76.                 FlightProvider::BookingData data;
  77.                 trip.flights.push_back(flight_provider.Book(data));
  78.             }
  79.         //}
  80.         /*catch (...)
  81.         {
  82.             Cancel(trip);
  83.             throw;
  84.         }*/
  85.        
  86.         return trip;
  87.     }
  88.     void Cancel(Trip& trip)
  89.     {
  90.         /*for (auto& id : trip.hotels)
  91.         {
  92.             hotel_provider.Cancel(id);
  93.         }
  94.         trip.hotels.clear();
  95.         for (auto& id : trip.flights)
  96.         {
  97.             flight_provider.Cancel(id);
  98.         }
  99.         trip.flights.clear();*/
  100.         trip.Cancel();
  101.     }
  102.  
  103. private:
  104.    
  105.     HotelProvider hotel_provider;
  106.     FlightProvider flight_provider;
  107. };
  108.  
  109. int main()
  110. {
  111.     try
  112.     {
  113.         TripManager tm;
  114.         auto trip = tm.Book({});
  115.         tm.Cancel(trip);
  116.     }
  117.     catch (...)
  118.     {
  119.         cerr << "Exception\n";
  120.     }
  121.    
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement