-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAircraft.cpp
More file actions
65 lines (55 loc) · 2.98 KB
/
Aircraft.cpp
File metadata and controls
65 lines (55 loc) · 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "Aircraft.h"
Aircraft::Aircraft()
: aircraftId("Невалиден"), aircraftClass(), crewCost(0) {}
Aircraft::Aircraft(const std::string& aircraftId, const AircraftClass& aircraftClass, double crewCost)
: aircraftId(aircraftId), aircraftClass(aircraftClass), crewCost(crewCost) {}
std::string Aircraft::getAircraftId() const {
return aircraftId;
}
void Aircraft::setAircraftId(const std::string& aircraftId) {
if (aircraftId.empty()) {
throw std::invalid_argument("ID на самолета не може да е празно.");
}
this->aircraftId = aircraftId;
}
AircraftClass Aircraft::getAircraftClass() const {
return aircraftClass;
}
void Aircraft::setAircraftClass(const AircraftClass& aircraftClass) {
this->aircraftClass = aircraftClass;
}
double Aircraft::getCrewCost() const {
return crewCost;
}
void Aircraft::setCrewCost(double crewCost) {
if (crewCost < 0) {
throw std::invalid_argument("Разходите трябва да са позитивно число.");
}
this->crewCost = crewCost;
}
double Aircraft::calculateFlightCost(double distance, int passengers) const {
if (distance <= 0) {
throw std::invalid_argument("Дистанцията трбява да е позотивна");
}
if (passengers <= 0 || passengers > aircraftClass.getSeats()) {
throw std::invalid_argument("Броя на пътниците трябва да позитивен и в рамките на броя на седалките.");
}
double fuelCost = distance * passengers * aircraftClass.getFuelConsumptionPerKMPerSeat();
double totalCost = fuelCost + crewCost;
return totalCost;
}
std::ostream& operator<<(std::ostream& os, const Aircraft& aircraft) {
os << "Информация за самолета:\n"
<< "ID на самолета: " << aircraft.aircraftId << "\n"
<< "Клас: " << aircraft.getAircraftClass().getType() << "\n"
<< "Производител: " << aircraft.getAircraftClass().getManufacturer() << "\n"
<< "Модел: " << aircraft.getAircraftClass().getModel() << "\n"
<< "Брой места: " << aircraft.getAircraftClass().getSeats() << "\n"
<< "Минимална дължина на пистата (м): " << aircraft.getAircraftClass().getMinRunwayLength() << "\n"
<< "Разход на гориво на км на седалка (литри): " << aircraft.getAircraftClass().getFuelConsumptionPerKMPerSeat() << "\n"
<< "Максимално разстояние което може да измине: " << aircraft.getAircraftClass().calculateMaxFlightDistance() << " км \n"
<< "Капацитет на резервоара за гориво (литри): " << aircraft.getAircraftClass().getFuelTankCapacity() << "\n"
<< "Средна скорост (км/ч): " << aircraft.getAircraftClass().getAverageSpeed() << "\n"
<< "Разход за екипаж ($): " << aircraft.crewCost << "\n";
return os;
}