Question
I need to create two methods in the class Accomodation first a public member function with name get_arrival without parameter returning the arrival date.and the
I need to create two methods in the class Accomodation first a public member function with name get_arrival without parameter returning the arrival date.and the second is a public member function with name get_checkout without parameter returning the departure date (arrival date plus number of nights added by above defined operator in class Date).
these functions should make me able to ask and print the Date in yyyy-mm-dd form.
#include
using namespace std;
class Date {
private: int daysInMonth [12]={31,28,31,30,31,30,31,31,30,31,30,31}; short unsigned int day,month,year;
public: Date (int yy,int mm, int dd){
year=yy; month=mm; day=dd;
}
Date operator+(int n){ int newDay = day + n; int newMonth = month; int newYear = year;
while (newDay > daysInMonth[newMonth - 1]) { newDay -= daysInMonth[newMonth - 1]; newMonth++;
if (newMonth > 12) { newMonth = 1; newYear++; } }
return Date(newYear, newMonth, newDay); }
friend std::istream& operator>>(std::istream& is, Date& date) { char dash1, dash2; is >> date.year >> dash1 >> date.month >> dash2 >> date.day; return is; }
friend std::ostream &operator<<(std::ostream &os, const Date &d) { os << d.year << "-" << d.month << "-" << d.day; return os; }
};
enum struct Meals { no_meals, breakfast, half_board, all_inclusive };
std::ostream& operator<<(std::ostream& os, Meals meals) { switch (meals) { case Meals::no_meals: os << "no meals"; break; case Meals::breakfast: os << "breakfast"; break; case Meals::half_board: os << "half board"; break; case Meals::all_inclusive: os << "all inclusive"; break; } return os; }
double get_price(Meals meals) { switch (meals) { case Meals::no_meals: return 0; case Meals::breakfast: return 10; case Meals::half_board: return 20; case Meals::all_inclusive: return 50; } }
class Accomodation { private: std::string location; int nights; int singles; int doubles; double priceNightSingle; double priceNightDouble; double priceOneDayParking; Meals board; bool parking;
public: Accomodation(double priceNightSingle, double priceNightDouble, double priceOneDayParking) : priceNightSingle(priceNightSingle), priceNightDouble(priceNightDouble), priceOneDayParking(priceOneDayParking) { ask_data(); }
~Accomodation() { std::cout << "Accomodation successfully booked!" << std::endl; }
int get_guests() { return singles + doubles * 2; }
double get_price() { double price = (singles * priceNightSingle) + (doubles * priceNightDouble); if (parking) { price += (nights * priceOneDayParking); } return price + (get_guests() * get_price(board)); }
void ask_data() { std::cout << "Enter location of accomodation: "; std::cin >> location; std::cout << "Enter number of nights (max 28): "; std::cin >> nights; std::cout << "Enter number of single rooms: "; std::cin >> singles; std::cout << "Enter number of double rooms: "; std::cin >> doubles; std::cout << "Enter desired board (no_meals, breakfast, half_board, all_inclusive): "; std::cin >> board; std::cout << "Do you want to book a parking place? (y/n) "; char choice; std::cin >> choice; parking = (choice == 'y'); std::cout << "Total price: " << get_price() << " EUR" << std::endl; }
class Request { private: const unsigned int no; static unsigned int lastNo; Accomodation* accomodation; Request* next;
public: Request(Accomodation* accomodation, Request* next = nullptr) : no(++lastNo), accomodation(accomodation), next(next) {}
~Request() { std::cout << "Request #" << no << " has been deleted." << std::endl; delete accomodation; }
unsigned int get_no() { return no; }
Request* get_next() { return next; }
void set_next(Request* next) { this->next = next; }
double get_price() { return accomodation->get_price(); }
void print() { std::cout << "Request #" << no << ": "; accomodation->print(); } };
unsigned int Request::lastNo = 0;
void print() { std::cout << "Location: " << location << std::endl; std::cout << "Guests: " << get_guests() << std::endl; std::cout << "Nights: " << nights << std::endl; std::cout << "Single rooms: " << singles << " (" << priceNightSingle << " EUR/night)" << std::endl; std::cout << "Double rooms: " << doubles << " (" << priceNightDouble << " EUR/night)" << std::endl; std::cout << "Board: " << board << " (" << get_price(board) << " EUR/person/day)" << std::endl; std::cout << "Parking: " << (parking ? "yes" : "no") << " (" << (parking ? priceOneDayParking : 0) << " EUR/day)" << std::endl; std::cout << "Total price: " << get_price() << " EUR" << std::endl; } };
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started