139 lines
4.0 KiB
C++

#include <sstream>
#include "FlightTicket.h"
int FlightTicket::numberOfFirstClass = 0;
FlightTicket::FlightTicket() :
price(0.0), flightFrom("From?"), flightTo("To?"), addBaggage(false),
ticketType(FlightTicketType::Economy) {
ptrFlightDate = new Date(1, 1, 1971);
}
FlightTicket::FlightTicket(const FlightTicket& t) :
price(t.price), flightFrom(t.flightFrom), flightTo(t.flightTo),
addBaggage(t.addBaggage), ticketType(t.ticketType), ptrFlightDate(t.ptrFlightDate) {
if (ticketType == FlightTicketType::FirstClass)
numberOfFirstClass++;
}
FlightTicket::FlightTicket(double price, std::string ff, std::string ft,
bool bag, FlightTicketType type, Date* date1) :
price(price), flightFrom(ff), flightTo(ft), addBaggage(bag),
ticketType(type), ptrFlightDate(date1) {
if (ticketType == FlightTicketType::FirstClass)
numberOfFirstClass++;
}
FlightTicket::~FlightTicket() {
}
double FlightTicket::getTotalPrice() const {
double sum = price;
if (FlightTicketType::Business == ticketType)
sum *= 1.20;
else if (FlightTicketType::FirstClass == ticketType)
sum *= 1.50;
if (addBaggage == true)
sum += 50;
return sum;
}
std::string FlightTicket::toString() const {
std::stringstream ss;
ss << "Flight ticket details: " << "\n";
ss << "\tPrice: " << price << "\n";
ss << "\tAdditional baggage: " << (addBaggage ? "Yes" : "No") << "\n";
ss << "\tFrom: " << flightFrom << "\n";
ss << "\tTo: " << flightTo << "\n";
ss << "\tTicket type: " << getTicketTypeString()
<< "\n";
ss << "\tDeparture: " << this->ptrFlightDate->toString() << "\n";
return ss.str();
}
double FlightTicket::getPrice() const {
return price;
}
void FlightTicket::setPrice(double price) {
this->price = price;
}
bool FlightTicket::isAddBaggage() const {
return addBaggage;
}
void FlightTicket::setAddBaggage(bool addBaggage) {
this->addBaggage = addBaggage;
}
Date* FlightTicket::getFlightDate() const {
return ptrFlightDate;
}
void FlightTicket::setFlightDate(Date* flightDate) {
this->ptrFlightDate = flightDate;
}
const std::string& FlightTicket::getFlightFrom() const {
return flightFrom;
}
void FlightTicket::setFlightFrom(const std::string& flightFrom) {
this->flightFrom = flightFrom;
}
const std::string& FlightTicket::getFlightTo() const {
return flightTo;
}
void FlightTicket::setFlightTo(const std::string& flightTo) {
this->flightTo = flightTo;
}
FlightTicketType FlightTicket::getTicketType() const {
return ticketType;
}
void FlightTicket::setTicketType(FlightTicketType ticketType) {
if (ticketType < FlightTicketType::Economy
|| ticketType > FlightTicketType::FirstClass) {
std::cout << "Wrong flight ticket type ";
this->ticketType = FlightTicketType::Economy;
} else
this->ticketType = ticketType;
if (ticketType == FlightTicketType::FirstClass)
numberOfFirstClass++;
}
std::string FlightTicket::getTicketTypeString() const {
switch (ticketType) {
case FlightTicketType::Economy:
return "Economy";
break;
case FlightTicketType::Business:
return "Business";
break;
case FlightTicketType::FirstClass:
return "First Class";
break;
default:
return "?";
}
}
int FlightTicket::GetNumberOfFirstClass() {
return numberOfFirstClass;
}
bool FlightTicket::isEqual(const FlightTicket& drugi) const {
if (this->price == drugi.price && this->addBaggage == drugi.addBaggage
&& this->getTicketType() == drugi.getTicketType()
&& this->flightFrom == drugi.flightFrom
&& this->flightTo == drugi.flightTo
&& this->ptrFlightDate->isEqual(*drugi.ptrFlightDate))
return true;
return false;
}