↓↓ требования
разработать эмулятор таксопарка
1. Таксопарк
Состоит из водителей и машин.
Должны быть функции выбора водителя/машины для перевозки клиента на N
километров. У таксопарка должна быть касса. Пополняется после перевозки клиента на N*20
рублей. Если багаж клиента превышает 30 кг, то берется дополнительная плата в N*(масса
перевеса в кг).
2. Водитель
Может быть либо в отпуске, либо на работе. Так же может заболеть. Нужны просто
функции управления этими состояниями, которыми мог бы пользоваться сторонний код,
использующий этот эмулятор. У водителя так же есть стаж в виде количества километров,
которые он проехал, перевозя клиентов. Так же у водителя тоже есть своя «касса».
Пополняется таксопарком после перевозки клиента на сумму в 15% от суммы, полученной
таксопарком за эту перевозку. За каждым водителем закреплена своя машина.
3. Машина
Имеет пробег в N километров. Стабильно ломается после каждых 50 тыс. км. Для
простоты сломаться она может только после перевозки клиента. Чиниться машина всегда
должна только при достаточном балансе кассы таксопарка. Починка машины стоит 10 тыс. р.
Число машин может быть больше числа водителей (но, для простоты, - не меньше).
4. Клиент
Это один или несколько человек, а так же масса (в кг) их багажа.
5. Финальные требования к коду
Код эмулятора должен иметь нижеперечисленные функции (возможности). Просьба:
по выполнении задания, снова перечитать их и убедиться, что все они соблюдены.
1. Перевезти клиента на N км со средней скоростью X км/ч. При этом пользователю
данной функции должна быть предоставлена возможность узнать параметры
выбранных водителя/машины.
2. Должна быть некая функция, назовём её DoMainProcessing, которая периодически
вызывается внешним кодом, использующим эмулятор (например, раз в секунду или
две). Она должна определять момент, когда водитель выполнил перевозку клиента
(что зависит от расстояния и средней скорости) и готов выполнить следующую.
Должна ремонтировать поломанные машины (при наличии возможности, то есть
достаточного числа средств). Необходимость в этой функции продиктована, в том
числе, требованием 7-го пункта (см. ниже).
3. Перечисление водителей/машин и запрос их параметров. Добавление новых
водителей и машин.
4. Запрос баланса кассы таксопарка.
5. Возможность отправки выбранного водителя в отпуск, пересадки его на другую
машину.
6. Код должен быть потокобезопасным.
7. Запрещено использование дополнительных потоков. Вся работа эмулятора должна
происходить в том же потоке/потоках, в котором/которых вызываются его функции
программой, использующей эмулятор.
Примечание. Реализовывать функции сохранения состояния таксопарка на диск и
восстановления состояния оттуда, а так же тестовый графический интерфейс пользователя
для эмулятора — не нужно. Не нужно так же тестирование работоспособности кода и
соответственно создание демонстрационного кода, который этим эмулятором пользовался
бы. Требуется только создание эмулятора, например в виде статически подключаемой
библиотеки, или просто набора одного и более .cpp и .h файлов, которые легко можно было
бы добавить в некий проект для использования.