/
lyapdy
/
Object_oriented_programming_cpp_318
Обзор
Документация
Войти
/
lyapdy
/
Object_oriented_programming_cpp_318
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
lab6/task_3.cpp
153 строки
4 KB
danillyapunov
lab6commit
10 янв 2026, 15:23
10 янв 2026, 15:23
b29f1a0
Код
Авторство
О чём код?
#include <iostream> #include <vector> #include <string> #include "task_3.h" Car::Car(const std::string& m) : model(m) {} Trip::Trip(const std::string& from, const std::string& to) : departurePoint(from), arrivalPoint(to) {} void Trip::markCompleted() { completed = true; std::cout << "Рейс успешно завершён." << '\n'; } Driver::Driver(const std::string& n) : name(n) {} void Driver::assignCar(Car* car) { assignedCar = car; std::cout << name << ": назначен на автомобиль \"" << car->model << "\"" << '\n'; } void Driver::startTrip(Trip* trip) { if(suspended) { std::cout << name << ": не может начать рейс (отстранён от работы)" << '\n'; return; } if(busy || !assignedCar || !assignedCar->isWorkingCondition) { std::cout << name << ": невозможен старт рейса (занят или автомобиль неисправен)" << '\n'; return; } currentTrip = trip; busy = true; std::cout << name << ": начал рейс из " << trip->departurePoint << " в " << trip->arrivalPoint << '\n'; } void Driver::finishTrip() { if(currentTrip && busy) { currentTrip->markCompleted(); busy = false; currentTrip = nullptr; } else { std::cout << name << ": нельзя завершить рейс (нет активного рейса или уже свободен)" << '\n'; } } bool Driver::canStartNewTrip() const { return !busy && assignedCar && assignedCar->isWorkingCondition && !suspended; } void Driver::repairCar() { if(suspended) { std::cout << name << ": не может отремонтировать автомобиль (отстранён от работы)" << '\n'; return; } if(assignedCar) { assignedCar->isWorkingCondition = true; std::cout << name << ": отремонтировал автомобиль \"" << assignedCar->model << "\"." << '\n'; } else { std::cout << name << ": нет назначенного автомобиля для ремонта." << '\n'; } } std::string Driver::getName() const { return name; } void Driver::setSuspended(bool s) { suspended = s; if(suspended) { std::cout << name << ": отстранён от работы." << '\n'; } else { std::cout << name << ": восстановлен в должности." << '\n'; } } bool Driver::isSuspended() const { return suspended; } void Dispatcher::addDriver(Driver* newDriver) { drivers.push_back(newDriver); } void Dispatcher::createTrip(const std::string& dep, const std::string& arr) { trips.emplace_back(new Trip(dep, arr)); std::cout << "Создан новый рейс: " << dep << " ? " << arr << '\n'; } Trip* Dispatcher::getFirstUnfinishedTrip() { for(auto t : trips) { if(!t->completed) return t; } return nullptr; } Trip* Dispatcher::getLastUnfinishedTrip() { for(int i = trips.size()-1; i >= 0; --i) { if(!trips[i]->completed) return trips[i]; } return nullptr; } void Dispatcher::assignTripToDriver(Driver* drv, Trip* trip) { if(!drv->canStartNewTrip()) { std::cout << "Невозможно назначить рейс водителю " << drv->getName() << "." << '\n'; return; } drv->startTrip(trip); } void Dispatcher::repairCarForDriver(Driver* drv) { drv->repairCar(); } void Dispatcher::suspendDriver(Driver* drv, bool suspend) { drv->setSuspended(suspend); } void DispatcherApp::run() { Dispatcher disp; Car car1("КамАЗ"), car2("ГАЗель"); Driver driver1("Игорь Иванович"), driver2("Дмитрий Сергеевич"); disp.addDriver(&driver1); disp.addDriver(&driver2); driver1.assignCar(&car1); driver2.assignCar(&car2); disp.createTrip("Москва", "Санкт-Петербург"); disp.createTrip("Краснодар", "Ростов-на-Дону"); Trip* firstTrip = disp.getFirstUnfinishedTrip(); Trip* secondTrip = disp.getLastUnfinishedTrip(); disp.assignTripToDriver(&driver1, firstTrip); disp.assignTripToDriver(&driver2, secondTrip); driver1.finishTrip(); disp.suspendDriver(&driver2, true); disp.assignTripToDriver(&driver2, firstTrip); driver2.repairCar(); disp.suspendDriver(&driver2, false); disp.assignTripToDriver(&driver2, secondTrip); system("pause"); }