Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб. 3 ПиАПС.docx
Скачиваний:
0
Добавлен:
29.05.2025
Размер:
408.62 Кб
Скачать

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;

}

Соседние файлы в предмете Проектирование и архитектура программных систем