
Void info() override {
cout << "\nЭкипаж:" << endl;
for (auto& person : people) {
person->info();
}
}
bool checkCountOfCrewMembers() {
bool checkCountOfPilots = (countPilots == constCountPilots) ? true : false;
bool checkCountOfStewardess = (countStewardess == constCountStewardess) ? true : false;
if (checkCountOfPilots && checkCountOfStewardess) {
return true;
}
else {
if (!checkCountOfPilots) {
cout << "\n\033[31mОшибка: Необходимое количество пилотов: " << constCountPilots << "\033[0m" << endl;
}
if (!checkCountOfStewardess) {
cout << "\n\033[31mОшибка: Необходимое количество стюардесс: " << constCountStewardess << "\033[0m" << endl;
}
return false;
}
}
~Crew() {
for (int i = 0; i < people.size(); ++i)
delete people[i];
}
};
class Airplane : public Group {
const double maxAllowableLoad = 210;
public:
Void info() override {
int count = 0;
int countEconomyClassPassengers = 0;
bool flagCount = true;
bool flagLoading = true;
double totalBaggageWeight = getTotalBaggageWeight();
flagLoading = checkLoading(totalBaggageWeight);
if (!flagLoading) {
for (auto& component : people) {
Group* group = dynamic_cast<Group*>(component);
EconomyClass* economyClass = dynamic_cast<EconomyClass*>(group);
if (economyClass) {
countEconomyClassPassengers = group->getPeopleCount();
vector<Component*> economyClassPassengers = economyClass->getPeople();
for (int i = countEconomyClassPassengers - 1; i >= 0; i--) {
Passenger* economyClassPassenger = dynamic_cast<Passenger*>(economyClassPassengers[i]);
economyClassPassenger->baggageRemoval();
cout << "\n\033[33mЧасть багажа пассажира " << economyClassPassenger->getName() << " была снята\033[0m" << endl;
totalBaggageWeight = getTotalBaggageWeight();
flagLoading = checkLoading(totalBaggageWeight);
if (flagLoading) {
break;
}
}
}
}
}
cout << "\nСамолёт:" << endl;
for (auto& component : people) {
component->info();
Group* group = dynamic_cast<Group*>(component);
Crew* crew = dynamic_cast<Crew*>(group);
EconomyClass* economyClass = dynamic_cast<EconomyClass*>(group);
if (!crew) {
count += group->getPeopleCount();
}
else if (crew) {
flagCount = crew->checkCountOfCrewMembers();
}
}
if (count < 1) {
flagCount = false;
cout << "\n\033[31mОшибка: Должен быть хотя бы один пассажир.\033[0m" << endl;
}
if (!flagLoading) {
cout << "\n\033[31mОшибка: Самолёт перегружен.\033[0m" << endl;
}
cout << "\n------------------------------------------" << endl;
cout << "Общее число пассажиров: " << count << endl;
cout << "Общий вес багажа: " << totalBaggageWeight << " кг" << endl;
cout << "Максимальная допустимая загрузка самолета багажом: " << maxAllowableLoad << " кг" << endl;
if (!flagCount || !flagLoading) {
cout << "\n\033[31mСамолёт НЕ готов к полёту!\033[0m" << endl;
}
else {
cout << "\n\033[32mСамолёт готов к полёту!\033[0m" << endl;
}
}
bool checkLoading(double totalBaggageWeight) {
bool flag = (totalBaggageWeight > maxAllowableLoad) ? false : true;
return flag;
}
//void checkFlightReadiness() {
//bool flag = true;
//if (checkCountOfCrewMembers())
//}
};
int main() {
setlocale(LC_ALL, "rus");
Airplane airplane;
FirstClass firstClass;
BusinessClass businessClass;
EconomyClass economyClass;
Crew Crew;
firstClass.add(new Passenger("fc1", 30));
firstClass.add(new Passenger("fc2", 40));
/*firstClass.add(new Passenger("fc3", 40));
firstClass.add(new Passenger("fc4", 40));
firstClass.add(new Passenger("fc5", 40));
firstClass.add(new Passenger("fc6", 40));
firstClass.add(new Passenger("fc7", 40));
firstClass.add(new Passenger("fc8", 40));
firstClass.add(new Passenger("fc9", 40));
firstClass.add(new Passenger("fc10", 40));
firstClass.add(new Passenger("fc11", 40));*/
businessClass.add(new Passenger("bc1", 50));
businessClass.add(new Passenger("bc2", 15));
businessClass.add(new Passenger("bc2", 0));
economyClass.add(new Passenger("ec1", 65));
economyClass.add(new Passenger("ec2", 15));
economyClass.add(new Passenger("ec3", 50));
//economyClass.add(new Pilot("pilot_false"));
Crew.add(new Pilot("p1"));
Crew.add(new Pilot("p2"));
//Crew.add(new Pilot("p3"));
//Crew.add(new Pilot("p4"));
Crew.add(new Stewardess("s1"));
Crew.add(new Stewardess("s2"));
Crew.add(new Stewardess("s3"));
Crew.add(new Stewardess("s4"));
Crew.add(new Stewardess("s5"));
Crew.add(new Stewardess("s6"));
//Crew.add(new Passenger("passenger_false", 15));
airplane.add(&firstClass);
airplane.add(&businessClass);
airplane.add(&economyClass);
airplane.add(&Crew);
airplane.info();
return 0;
}