Завершено
6
17.01.2020, 12:53
17.01.2020, 13:24
Напишите программу, которая имитирует способ обслуживания клиентов в офисе.
В офисе есть N
столов (количество задается в конфигурационном файле),
где клиенты могут быть обслужены одновременно.
Клиенты могут войти в офис в любое время. Они берут билет с
номером из билетной машины и ждут, пока их номер не станет следующим
для обслуживания на одном из столов. Клиенты обслуживаются в порядке
их поступления в офис или, точнее, в порядке, указанном в их билете.
Каждый раз, когда служба поддержки заканчивает обслуживать клиента,
обслуживается следующий клиент. Симуляция должна прекратиться после
того, как определенное количество клиентов получат билеты и их обслужат.
Класс ticketing_machine
моделирует простую машину,
которая выдает инкрементные номера билетов, начиная с начального, указанного
пользователем числа.
Класс customer
представляет покупателя, который входит в
офис и получает билет из билетной машины.
Класс logger
потокобезопасный (thread-safety
) класс
для логирования сообщений в поток (std::ostream
). Вся информация
(открытие/закрытие стола, появление нового клиента с номером билета,
обслуживание клиента за i-ым столом, размер текущей очереди при изменении,
завершение обслуживания клиента за i-ым столом) должна логироваться.
Общее количество клиентов CustomerAmount
, которые могут посетить офис,
задается в конфигурационном файле.
Новый клиент заходит в офис, например, каждые 200-500 миллисекунд
(т.е. в диапазоне от 200 до 500 мс, диапазон задается в конфигурационном файле),
получает билет и ждет своей очереди. При обслуживании клиента тратится, например,
от 2000 до 3000 мс (диапазон задается в конфигурационном файле) времени.
Офис перестает принимать клиентов, после того как в него зайдут CustomerAmount
клиентов, и переходит в режим закрытия. Столы обслуживания работают до тех пор, пока
офис не перейдет в режим закрытия, но не раньше, чем будут обслужены все клиенты, находящиеся
в очереди.