Задача о магазине - 2 (забывчивые покупатели). В магазине работают два отдела, каждый отдел обладает уникальным ассортиментом. В каждом отделе работает один продавец. В магазин ходят исключительно забывчивые покупатели, поэтому каждый покупатель носит с собой список товаров, которые желает купить. Покупатель приобретает товары точно в том порядке, в каком они записаны в его списке. При этом товары в списке расположены в случайном порядке, что заставляет покупателя переходить от отдела к отделу, если это требуется для совершения покупок. Продавец может обслужить только одного покупателя за раз. Покупатель, вставший в очередь, засыпает пока не дойдет до продавца. Продавец засыпает, если в его отделе нет покупателей, и просыпается, если появится хотя бы один. Создать многопоточное приложение,моделирующее работу магазина в течение рабочего дня.
Проект имеет стандартную для C++ структуру, так что для компиляции можете использовать любой удобный для вас инструмент :)
Программа изначально разрабатывалась с учетом всех требований включительно до оценки 8. С самого начала присутствует работа с файлами, генерация случайных данных и прочий необходимый функционал.
При вводе значений, программа подразумевает, что пользователь вводит данные в корректном формате. В программе заложена обработка критических ситуаций (к примеру, отсутствие пути к файлу, при наличии аргумента --input_file
), однако, пожалуйста, вводите адекватные значение
АВС это не КПО, не вижу смысла тратить преимущественную часть времени разработки программы на проработку всех возможных вариантов ввода. Все же цель работы - показать навыки работы с многопоточностью
b
- товар из хлебного отделаm
- товар из молочного отдела
[кол-во покупателей][набор товаров разделенные ';']
Пример: 2mmm;bbb;
Сгенерируется два Покупателя. Первому надо купить 3 товара из молочного отдела, втором 3 товар из хлебного отдела.
Пример: 1bm;
Один покупатель, которому надо купить хлеб и молоко
При запросе на ввод покупателей от программы, следует ввести значения вида [набор товаров разделенные ';']
n раз.
Аргумент | Описание | Пример |
---|---|---|
Ввод | Допустимо одновременное использование только одного из аргументов | |
--input_file <входной файл> |
Получение данных для создания Покупателей из файла | |
--random <кол-во покупателей> |
Запуск программы в режиме генерацией случайных данных | |
--data <кол-во-покупателей_данные> |
Получение данных для создания Покупателей из аргумента | ./a.out --data 2mbmbmbm;mmmmm; |
Вывод | ||
--output_file <выходной файл> |
Дублирование выхода программы в файл |
| /cpp-source - исходный код программы на языке C++
| /results - Результаты прогонов на разных наборах данных
Данная задача является моделью вычислений "Клиент-Сервер".
(Это модель, когда клиентский поток запрашивает сервер и ждет ответа. Серверный поток ожидает запроса от клиента, затем действует в соответствии с поступившим запросом)
Наблюдается схожесть с определением: в нашем случае, когда Покупатель обращается к Консультанту, он точно так же ожидает от него ответа.
Ознакомиться с результатами работы программы можно в папке (/results)[/results].
Каждый покупатель носит с собой список товаров, которые он желает купить. Придя в магазин, он смотрит первый невычеркнутый товар и определяет отдел в который следует обратиться. Покупатель, встает в очередь, ждет пока она не закончится, и затем обращается к продавцу, производит покупку. После этого, покупатель покидает отдел и повторяет процесс снова пока не останется не купленных товаров.
Продавец ждет пока кто-нибудь не встанет в очередь. Как только приходит покупатель, он помогает ему совершить покупку. После этого он засыпает и процесс повторяется снова до закрытия магазина. Важно: Продавец может обслуживать только одного покупателя за раз.
Абстракция
Реализован класс Store
который содержит внутри себя 2 отдела (Department
) - молочный и хлебный.
Внутри каждого отдела заключен объект консультанта - Consultant
.
Customer
- это покупатель, который последовательно читая список товаров, обращается в нужный отдел.
Ознакомится с тем, как отображается каждый из субъектов предметной области на программу, советую обратится к коду. Там довольно много кода с комментариями, и вставлять все это сюда как-то не хочется :)
Дополнительных изменений не потребовалось. Ознакомиться с результатами работы программы в файловом режиме можно ознакомиться в папке (/results)[/results].
Дополнительных изменений не потребовалось. Ознакомиться с результатами работы программы в режиме генерации случайных данных можно ознакомиться в папке (/results)[/results].
- Приведено условие задачи.
- Описана модель параллельных вычислений, используемая при разработке многопоточной программы.
- Описаны входные данные программы, включающие вариативные диапазоны, возможные при многократных запусках.
- Реализовано консольное приложение, решающее поставленную задачу с использованием одного варианта синхропримитивов.
- Ввод данных в приложение реализован с консоли.
- Результаты работы приведены в отчете.
В дополнение к требованиям на предыдущую оценку
- В программу добавлены комментарии, поясняющие выполняемые действия и описание используемых переменных.
- В отчете должен быть приведен сценарий, описывающий одновременное поведение представленных в условии задания сущностей в терминах предметной области. То есть, описано поведение объектов разрабатываемой программы как взаимодействующих субъектов, а не то, как это будет реализовано в программе.
В дополнение к требованиям на предыдущую оценку
- В отчете подробно описан обобщенный алгоритм, используемый при реализации программы исходного словесного сценария. В котором показано, как на программу отображается каждый из субъектов предметной области.
- Реализован ввод данных из командной строки.
- Результаты изменений отражены в отчете.
В дополнение к требованиям на предыдущую оценку
- В программу добавлены ввод данных из файла и вывод результатов в файл.
- Приведены входные и выходные файлы с различными результатами выполнения программы.
- Результаты работы программы должны выводиться на экран и записываться в файл.
- Ввод данных из командной строки расширен с учетом введенных изменений.
- Результаты изменений отражены в отчете.
В дополнение к требованиям на предыдущую оценку
- В программу добавлена генерация случайных данных в допустимых диапазонах.
- Приведены входные и выходные файлы с различными результатами выполнения программы.
- Ввод данных из командной строки расширен с учетом введенных изменений.
- Результаты изменений отражены в отчете.