Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<string>
- #include <vector>
- using namespace std;
- struct Trip
- {
- vector<HotelProvider::BookingId> hotels;
- vector<FlightProvider::BookingId> flights;
- };
- class TripManager
- {
- public:
- using BookingId = string;
- struct BookingData
- {
- string city_from;
- string city_to;
- string date_from;
- string date_to;
- };
- Trip Book(const BookingData& data)
- {
- Trip trip;
- {
- FlightProvider::BookingData data;
- trip.flights.push_back(flight_provider.Book(data));
- }
- {
- HotelProvider::BookingData data;
- trip.hotels.push_back(hotel_provider.Book(data));
- }
- {
- FlightProvider::BookingData data;
- trip.flights.push_back(flight_provider.Book(data));
- }
- return trip;
- }
- void Cancel(Trip& trip)
- {
- for (auto& id : trip.hotels)
- {
- hotel_provider.Cancel(id);
- }
- trip.hotels.clear();
- for (auto& id : trip.flights)
- {
- flight_provider.Cancel(id);
- }
- trip.flights.clear();
- }
- private:
- HotelProvider hotel_provider;
- FlightProvider flight_provider;
- };
- int main()
- {
- try
- {
- TripManager tm;
- auto trip = tm.Book({});
- tm.Cancel(trip);
- }
- catch (...)
- {
- cerr << "Exception\n";
- }
- }
- ****************************************************************************************************************************************************************************************************************************************
- booking_managers.h
- #pragma once
- #include<iostream>
- #include<string>
- #include<vector>
- using namespace std;
- class FlightProvider
- {
- public:
- using BookingId = int;
- struct BookingData
- {
- string city_from;
- string city_to;
- string date;
- };
- BookingId Book(const BookingData& data)
- {
- ++counter;
- cerr << "Flight booking: " << counter << "\n";
- return counter;
- }
- void Cancel(const BookingId& id)
- {
- --counter;
- cerr << "Cancel flight: " << id << "\n";
- }
- private:
- int counter = 0;
- };
- class HotelProvider
- {
- public:
- using BookingId = int;
- struct BookingData
- {
- string city;
- string date_from;
- string date_to;
- };
- BookingId Book(const BookingData& data)
- {
- ++counter;
- if (counter > 1)
- {
- throw runtime_error("Overbooking");
- }
- cerr << "Hotel booking: " << counter << "\n";
- return counter;
- }
- void Cancel(const BookingId& id)
- {
- --counter;
- cerr << "Cancel flight: " << id << "\n";
- }
- private:
- int counter = 0;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement