139 lines
4.0 KiB
C++
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;
|
|
}
|