Автор: Пользователь скрыл имя, 13 Октября 2011 в 17:18, курсовая работа
Объектом разработки является система имитационного моделирования «работы оптового магазина».
Целью курсового проектирования является разработка программного продукта – системы имитационного моделирования.
Программный продукт может применяться любом оптовом магазине
Введение 6
1 Поставновка задачи 7
1.1 Описание предметной области 7
1.2 Цели и задачи курсового проектирования 8
2 Выбор метода решения 9
2.1 Описание ОО подхода 9
3 Метод решения 10
3.1 Объектно-ориентированный анализ 10
3.2 Объектно-ориентированное проектирование 15
3.2.1 Диаграмма классов 15
3.2.2 Диаграмма объектов 17
3.2.3 Диаграмма состояний и переходов 19
3.2.4 Диаграмма взаимодействия 20
3.3 Объектно-ориентированное программирование 22
3.3.1 Диаграмма процессов 22
Выводы 23
Перечень ссылок 24
Приложение А. Техническое задание 25
Приложение Б. Руководство пользователя 29
Приложение В. Экранные формы 30
Приложение Г. Листинг программы 31
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И
Государственный
университет информатики и
Д050103.1.01.10/059.КП
Кафедра программного обеспечения
интеллектуальных
систем
Курсовой
проект
по дисциплине:
«Объектно-ориентированное
Руководители:
____________ ст.пр. С.П. Некрашевич
(дата, подпись)
____________ асс. О.О. Савельев
(дата, подпись)
____________ асс. Е.В. Курило
(дата, подпись)
Разработал:
____________ ст.гр. ПО-10В
(дата, подпись) М.А. Боковой
Донецк
– 2011
МИНИСТЕРСТВО
ОБРАЗОВАНИЯ И
НАУКИ УКРАИНЫ
Государственный университет
Факультет: Современных компьютерных информационных технологий
Специальность: Программное обеспечение автоматизированных систем
Кафедра:
Программного обеспечения
интеллектуальных систем
ЗАДАНИЕ НА КУРСОВОЙ ПРОЕКТ
по
дисциплине: «Объектно-ориентированное
программирование»
Студенту Боковому Максиму Андреевичу группы ПО-10В
(фамилия, имя, отчество)
Тема проекта
Имитационное моделирование
динамических систем
и процессов с использованием
объектно-ориентированного
подхода. «Имитация
работы оптового магазина»
Исходные данные к проекту О
Перечень
искомых результатов Словарь
ПрО. ОО словарь ПрО.
Диаграммы классов,
объектов, состояний
и переходов, взаимодействия,
модулей, процессов.
Протоколы классов.
Результаты моделирования:
загрузка клерков, время
обслуживания одного
клиента, число удовлетворенных
заявок.
Рекомендуемая
литература 1. Шлеер
С. Объектно-ориентированный
анализ: моделирование
мира в состояниях /
Шлеер С., Меллор С. –
К.: Диалектика, 1993. –
240 с. 2. Буч Г. Объектно-ориентированный
анализ и проектирование
с примерами приложений
на C++ / Гради Буч. – М.:
Невский проспект, 2000.
– 2-е изд. – 359 с. 3. Буч
Г. Объектно-ориентированный
анализ и проектирование
с примерами приложений /
Гради Буч, Роберт А.
Максимчук, Майкл У.
Энгл, Бобби Дж. Янг,
Джим Коналлен, Келли
А. Хьюстон. – М.: Вильямс, 2008.
– 3-е изд. – 720 с. 4. Страуструп
Б. Язык программирования C++.
Специальное издание
/ Бьерн Страуструп.
– М.: Бином, 2008. – 3-е
изд. – 1054 с.
Дата выдачи задания 17.02.2011
Дата защиты проекта 08.06.2011
Руководители
(подпись) (должность,
Ф.И.О.)
асс. О.О. Савельев
(подпись) (должность,
Ф.И.О.)
асс. Е.В. Курило
(подпись) (должность, Ф.И.О.)
Разработчик
(подпись) (Ф.И.О.)
РЕФЕРАТ
Пояснительная записка: 37 с., 9 рис., 6 табл., 5 источников, 4 прил. Объектом разработки является система имитационного моделирования «работы оптового магазина». Целью
курсового проектирования является
разработка программного продукта –
системы имитационного Программный
продукт может применяться Имитационное моделирование, ОО анализ, ОО проектирование, ОО программирование, диаграммы, Booch, UML | ||||||||||
Д050103.1.01.10/059.КП | ||||||||||
Фамилия | Подпись | Дата | ||||||||
Разработал | М.А. Боковой | Имитация работы оптового магазина | Литера | Лист | Листов | |||||
Рук. проекта | С.П. Некрашевич | у | 3 | 37 | ||||||
О.О. Савельев | ГУИ
и ИИ, каф. ПОИС
группа ПО-10В | |||||||||
Е.В. Курило | ||||||||||
Н.контроль | О.О. Савельев | |||||||||
Е.В. Курило | ||||||||||
Зав. каф. | А.И. Шевченко |
СОДЕРЖАНИЕ Введение 6 1 Поставновка задачи 7 1.1 Описание предметной области 7 1.2 Цели и задачи курсового проектирования 8 2 Выбор метода решения 9 2.1 Описание ОО подхода 9 3 Метод решения 10 3.1 Объектно-ориентированный анализ 10 3.2 Объектно-ориентированное проектирование 15 3.2.1 Диаграмма классов 15 3.2.2 Диаграмма объектов 17 3.2.3 Диаграмма состояний и переходов 19 3.2.4 Диаграмма взаимодействия 20 3.3 Объектно-ориентированное программирование 22 3.3.1 Диаграмма процессов 22 Выводы 23 Перечень ссылок 24 Приложение А. Техническое задание 25 Приложение Б. Руководство пользователя 29 Приложение В. Экранные формы 30 Приложение Г. Листинг программы 31 | |||||
Разработал | Фамилия | Подпись | Дата | Д050103.1.01.10/059.КП | Лист |
ст.гр. ПО-10В | М.А. Боковой | 4 | |||
Перечень обозначений, символов, единиц, сокращений и терминов
| |||||||||||||||||||||||||||||||||||||||||||||||
Разработал | Фамилия | Подпись | Дата | Д050103.1.01.10/059.КП | Лист | ||||||||||||||||||||||||||||||||||||||||||
ст.гр. ПО-10В | М.А. Боковой | 5 | |||||||||||||||||||||||||||||||||||||||||||||
ВВЕДЕНИЕ
Объектно-
Объектно-
В ходе развития объектно-ориентированного программирования, получили второе рождение и другие направления, такие как имитационное моделирование.
Имитационное
моделирование — это метод, позволяющий
строить модели, описывающие процессы
так, как они проходили бы в
действительности. Такую модель можно
«проиграть» во времени как для
одного испытания, так и заданного
их множества. При этом результаты будут
определяться случайным характером
процессов. По этим данным можно получить
достаточно устойчивую статистику. Имитационное
моделирование — это метод
исследования, основанный на том, что
изучаемая система заменяется имитатором
и с ним проводятся эксперименты
с целью получения информации
об этой системе. Экспериментирование
с имитатором называют имитацией (имитация
— это постижение сути явления, не
прибегая к экспериментам на реальном
объекте).
В оптовом магазине используется новая процедура обслуживания клиентов. Клиенты, попадая в магазин, определяют по каталогу наименования товаров, которые они хотели бы приобрести. После этого клиент обслуживается клерком, который идет на расположенный рядом склад и приносит необходимый товар. Каждый из клерков может обслуживать одновременно не более шести клиентов. Время, которое затрачивает клерк на путь к складу, равномерно распределено на интервале от 0.5 до 1.5 минут. Время поиска товара нужного наименования зависит от числа наименований, которое клерк должен найти на складе. Схема обслуживания клиентов показана на рисунке 1.1.
Это
время нормально распределено
с математическим ожиданием, равным
утроенному числу искомых наименований,
и среднеквадратичным отклонением,
равным 0.2 математического ожидания.
Следовательно, если, например, со склада
надо взять товар одного наименования,
время на его поиск будет нормально
распределено с математическим ожиданием,
равным 3 минуты и среднеквадратичным
отклонением, равным 0.6 минут. Время
возвращения со склада равномерно распределено
на интервале от 0.5 до 1.5 минут. По возвращении
со склада клерк рассчитывается со
всеми клиентами, которых он обслуживает.
Время расчета с клиентом равномерно
распределено на интервале от 1 до 3
минут. Расчет производится в том порядке,
в каком к клерку поступали заявки на товар.
Интервалы между моментами поступления
заявок на товары от клиентов экспоненциально
распределены с математическим ожиданием,
равным 2 минуты. Клиентов в магазине обслуживают
три клерка.
Обозначения:
- i-ый клерк, i=1, 2, 3;
-клиенты, обслуживаемые i-ым клерком или
ожидающие начала обслуживания клерком.
Рисунок 1.1 – Схема обслуживания клиентов клерком.
Цели курсового проектирования:
– систематизировать,
закрепить и расширить
– закрепить
и развить навыки самостоятельного
решения задач в области
– закрепить
и развить навыки выбора средств
проектирования, программирования и
вычислительных средств для эффективной
реализации программных продуктов
с применением объектно-
– развить навыки выполнения научных исследований и творческие способности в области разработки программных продуктов.
Основная
задача курсового проектирования –
подготовка студентов к самостоятельной
практической инженерной деятельности
в области создания программных
продуктов с применением
Курсовой
проект является самостоятельной работой
студента. За все принятые в курсовом
проекте технические решения
и правильность всех данных несет
ответственность студент –
Цель моделирования - определить следующее:
– загрузка клерков;
– время, необходимое на обслуживание одного клиента с момента подачи заявки на товар до оплаты счета за покупку;
– число
заявок, удовлетворяемых клерком за один
выход на склад.
В данном разделе кратко приводятся основные теоретические положения объектно-ориентированного подхода разработки программных продуктов (класс, объект, инкапсуляция, наследование, полиморфизм).
В этой главе приведены основные понятия и определения:
Класс — разновидность абстрактного типа данных в объектно-ориентированном программировании, характеризуемый способом своего построения. Наряду с понятием «объекта» класс является ключевым понятием в ООП (хотя существуют и бесклассовые объектно-ориентированные языки, например, JavaScript). Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно и интерфейс, и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен.
Объект — некоторая сущность в виртуальном пространстве, обладающая определённым состоянием и поведением, имеет заданные значения свойств (атрибутов) и операций над ними (методов). Как правило, при рассмотрении объектов выделяется то, что объекты принадлежат одному или нескольким классам, которые в свою очередь определяют поведение (являются моделью) объекта. Время с момента создания объекта (конструкция) до его уничтожения (деструкция) называется временем жизни объекта. Объект наряду с понятием «класс», является важным понятием объектно-ориентированного подхода в программировании. Объекты обладают свойствами наследования, инкапсуляции и полиморфизма.
Инкапсуляция - это механизм, который объединяет данные и код, манипулирующий зтими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования. В объектно-ориентированном программировании код и данные могут быть объединены вместе; в этом случае говорят, что создаётся так называемый "чёрный ящик". Когда коды и данные объединяются таким способом, создаётся объект.
Наследование — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией, полиморфизмом и абстракцией), позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом.
Полиморфизм
— возможность объектов с одинаковой
спецификацией иметь различную реализацию.
Объектно-ориентированный
анализ системы можно провести двумя
традиционными методами: методом
Аббота и CRC-карточек, а также методом
построения диаграмм вариантов использования.
Первым этапом создания объектно-ориентированного программного продукта является создание метамодели. В данном случае таковой является выделение из задания так называемых активных субъектов (предметов или существ, которые будут совершать какие-то действия), пассивных объектов (предметов или ресурсов, над которыми будут совершаться действия), сценариев использования (действий, совершаемых объектами) и создания общей концепции будущего продукта. Говоря иными словами, нужно выделить основные «действующие лица» будущего проекта, описать действия, которые они будут совершать, и создать общее представление, всего этого в рамках проекта.
После анализа задания были выделены такие компоненты:
Активные
субъекты:
Клерк Клиент |
Пассивные объекты:
Товар Очередь |
Сценарий использования, описывающий процесс получения клиентом товара, представлен в таблице 3.1.1.
Таблица 3.1.1 – Получение клиентом товара
Критерий | Описание |
Имя сценария | Получение клиентом товара. |
Имя субъекта | Клиент |
Предусловие | Клиент выбрал очередь к клерку. |
Постусловие | Клиент получил товар. |
Режим |
|
Сценарий использования, описывающий формирование клиентом заявки, отображен в таблице 3.1.2.
Таблица 3.1.2 – Формирование заявки
Критерий | Описание |
Имя сценария | Формирование заявки. |
Имя субъекта | Клиент |
Предусловие | Клиент приходит в оптовый магазин. |
Критерий | Описание |
Постусловие | Клиент выбирает очередь. |
Режим |
|
Сценарий использования, отображающий процесс обслуживания клерком клиента, описан в таблице 3.1.3.
Таблица 3.1.3 – Обслуживание клиента
Критерий | Описание |
Имя сценария | Обслуживание клиента. |
Имя субъекта | Клерк |
Предусловие | Клерк свободен и очередь не пуста, а также кол-во заявок в очереди не более 6. |
Постусловие | Товар выдан. |
Режим |
|
Сценарий
использования, отображающий действия
клиента после получения
Таблица 3.1.4. – Клерк отправляется за товаром
Критерий | Описание |
Имя сценария | Клерк отправляется за товаром. |
Имя субъекта | Клерк |
Предусловие | Клерк получил заявки. |
Постусловие | Клерк готов рассчитаться с клиентами. |
Режим |
|
Исходя из постановки задачи и на основе уже проделанной работы, было выяснено, что будут необходимы некоторые классы.
Поведение клерка в системе будет моделировать класс CClerk.
Кроме конструктора, он будет хранить в себе значение ссылку на очередь, которая ним обслуживается, а также переменную, которая будет отражать состояние клерка в данный момент времени.
Класс Clerk.
а) состояние;
б) ссылка на очередь.
2. Методы:
а) конструктор;
б) возврат состояния.
Поведение
клиента в системе будет
Класс Client.
а) состояние;
б) ссылка на очередь;
в) ссылка на заявку.
2. Методы
а)конструктор;
б) возврат состояния.
Поведение
очереди в системе будет
Класс Queue.
а) список клиентов.
2. Методы:
а) конструктор;
б) возврат размера очереди;
в) добавление нового клиента;
г) удаление клиента.
Заявку, сделанную клиентом, будет отображать класс CGoods. Данный класс будет отображать количество наименований товара, который клиент хочет получить у клерка, а также конструктор, который будет инициализировать данное поле.
Класс Goods.
а) количество наименований товара.
2. Методы:
а) конструктор.
Общее поведение системы, а также управление всеми классами будет совершать класс CMarket. Он будет хранить массив ссылок на се очереди, массив ссылок на всех клерков. Кроме этого в данном классе будет храниться глобальное время моделирования системы.
Класс Reactor.
а) массив ссылок на очереди;
б) массив ссылок на клерков;
в) глобальное время системы.
2. Методы:
а)
конструктор.
Следующим
этапом разработки объектно-ориентированного
программного продукта является построение
диаграмм вариантов использования.
Диаграммы
вариантов использования (Use-Case Diagrams)
являются действенным методом анализа,
относящимся к методологии UML. Варианты
использования – это описание последовательности
действий, которые может осуществить система
в ответ на внешние воздействия.
Диаграммы вариантов использования объектов показаны на рисунках 3.1.1 и 3.1.2.
Рисунок 3.1.1 – Диаграмма вариантов использования
для экземпляра класса CMarket
Рисунок 3.1.2 – Диаграмма вариантов использования для экземпляра класса Clerk
Это
диаграммы вариантов
Результатами объектно-ориентированного проектирования являются диаграммы, выполненные в нотациях Booch или UML. В нотации Booch к фазе проектирования относятся – диаграммы классов, объектов, состояний и переходов, взаимодействия; а в нотации UML – диаграммы классов, последовательностей, кооперации, состояний, деятельности.
Рисунок 3.2.1 – Диаграмма классов
Диаграмма классов описывает отношения между объектами программы. На данной диаграмме использованы два вида отношений: ассоциация и агрегация. В основе расположен класс CMarket. У него в свойствах, как было оговорено раннее, есть все объекты, участвующие в программе, которые он имеет право создавать и удалять. Такому виду отношений (отношение часть-целое) соответствует агрегация. На схеме она показана линией с ромбиком возле главного класса. В свою очередь объекты классов, для своего функционирования, нуждаются в данных объектов других классов. Среди свойств они имеют указатели на соответствующие объекты. А на диаграмме это отражено отношением ассоциации (линией с кратностью возле каждого из классов).
Диаграмма классов изображена на рисунке 3.2.1.
Некоторые свойства классов описаны в таблице 3.2.1
Таблица 3.2.1 – Классы и их свойства
Переменная | Описание |
Класс CMarket | |
m_Clerk[3] | Ссылки на всех клерков в магазине |
m_ClerkQueue[3] | Ссылки на очереди к клеркам |
m_CatalogueQueue | Ссылка на первичную очередь |
m_GlobalTime | Глобальное время системы |
m_TimeToNewClient | Время до создания нового клиента |
m_TimeToNewBid | Время до подачи новой заявки |
Класс CGoods | |
m_Num | Кол-во наименований товаров |
Класс CClerk | |
m_OwnNumber | Личный номер каждого клерка |
m_State | Текущее состояние клерка |
m_TimeToStateChange | Время до изменения состояния клерком |
Переменная | Описание |
m_NumOfServicingClients | Кол-во клиентов, обслуживаемых клерком |
m_Queue | Ссылка на очередь, которую обслуживает данный клерк |
Класс CQueue | |
m_Queue | Список всех клиентов данной очереди, в порядке их добавления |
m_OwnNumber | Личный номер каждой очереди |
m_State | Текущее состояние клиента |
m_Queue | Ссылка на очередь, в которой находится клиент |
Некоторые методы классов описаны в таблице 3.2.2
Таблица 3.2.2 – Классы и их методы
Метод | Описание |
Класс CClient | |
StateChange() | Изменение состояния клиента, который находится в очереди к клерку |
StateChange(CQueue *Queue) | Изменение состояния клиента, который находится в первичной очереди (помещение его в очередь, на которую указывает Queue) |
Класс CClerk | |
StateChange() | Изменение текущего состояния клерка |
Класс CQueue | |
int Size() | Возвращает значение длины очереди |
Push(CClient *Client ) | Добавление в очередь нового клиента |
CClient* Pop() | Извлекает первого клиента из очереди и возвращает указатель на него системе |
Класс CMarket | |
Work() | Обеспечивает логику работы и управление системой |
Диаграмма объектов отображает значения системы в какой-то момент времени (в данном случае – 11ч, 5мин) и взаимосвязи между конкретными объектами системы. Объекты отображаются двумя прямоугольниками. В верхнем написано имя, в нижнем – свойства объекта и их значения.
Объект
Market владеет всеми остальными объектами.
Также на диаграмме изображены 3 очереди
к клеркам (Queue) и одна очередь за каталогами
(CatalogueQueue). Каждая очередь связана с клиентами
(Cient), которых она содержит. Объекты, которые
представляют собой заявки (Goods), сформированные
клиентами, связаны только с клиентами.
Диаграмма
объектов изображена на рисунке 3.2.2.
Рисунок 3.2.2. – Диаграмма объектов |
Диаграммы состояний для классов
CClerk и CClient показаны на рисунках 3.2.3.1 и
3.2.3.2 соответственно.
Рисунок 3.2.3.1 – Диаграмма состояний
для класса Clerk
Рисунок
3.2.3.2 – Диаграмма состояний для
класса Client
Диаграмма
состояний создается для
В данном случае такими объектами являются клерк и клиент.
После
создания клерк переходит в состояние
ожидания заявок
(isWaiting). Когда система сообщает клерку,
что в очереди появились клиенты, клерк
забирает заявки и переходит в состояние
isGoingToWarehouse, которое означает,
что клерк идет на склад. Следующее состояние
(isSearchingGoods) наступает, когда клерк пришел
на склад. Из названия понятно, что это
состояние отображает поиск товаров клерком.
Когда товары найдены клерк возвращается
со склада (isGoingFromWarehouse).
Клиент
после создания имеет состояние
isMakingBid. И сохраняет его до тех пор, пока
не перейдет в очередь на обслуживание
клерком. Тогда состояние клиента меняется
на isWaitingForServicing. В данном состоянии клиент
находится, пока не подаст заявку клерку.
Когда клерк пошел на склад за товаром,
который заказывал данный клиент, то состояние
клиента -
isWaitingForGoods. Во время расчета с клерком
клиент принимает состояние isSettlingUp.
Диаграмма
взаимодействия показывает взаимодействие
объектов на протяжении работы программы.
В самой верхней части
Объект класса CMarket создает все остальные действующие объекты программы. Сначала он создает объекты Clerk, потом объекты Queue. После того, как наступит время создания нового клиента, произойдет данное действие. Новый клиент сначала добавляется в очередь (CatalogueQueue) , в которой клиенты работают с каталогом. Когда наступает время подачи новой заявки, первый в этой очереди клиент переходит в самую короткую очередь (ClerkQueue), которая обслуживается одним из клерков. Тут же создается экземпляр класса CGoods. Далее клерк забирает максимально возможное число заявок (не более 6) и идет на склад. Потом ищет необходимые товары, а потом возвращается со склада. После чего рассчитывается с клиентами. За этим следует удаление клиентов и заказов (CGoods), связанных с ними.
Диаграмма
взаимодействия показана на рисунке 3.2.4.
Рисунок
3.2.4 – Диаграмма взаимодействия
Диаграмма
процессов (рис 3.3) используется для
распределения процессов по процессорам
в физическом проекте системы. Отдельная
диаграмма процессов показывает один
ракурс структуры процессов системы. При
разработке проекта мы используем диаграмму
процессов для отображения физической
совокупности процессоров и устройств,
обеспечивающих работу системы.
Рисунок3.3-
Диаграмма процессов
При
выполнении курсового проекта для
достижения поставленной цели был проведен
объектно-ориентированный
По
результатам анализа было проведено
объектно-ориентированное
ж) диаграмма объектов;
з) диаграмма пакетов.
Результатом реализации диаграмм стал программный продукт, моделирующий работу оптового магазина.
Таким образом, в ходе работы к предметной области «Оптовый магазин» были применены навыки имитационного моделирования с использованием ООП, результатом чего стал программный продукт, имитирующий работу оптового магазина.
Приложение
А
ТЕХНИЧЕСКОЕ
ЗАДАНИЕ
А.1
Общие сведения
Тема курсового проекта: «Имитационное моделирование динамических систем и процессов с использованием объектно-ориентированного подхода. Имитация работы оптового магазина».
Система проектируется студентом 1-го курса Государственного университета информатики и искусственного интеллекта, факультета СКИТ, группы ПО-10В, Боковым Максимом Андреевичем.
Основанием
для разработки ПП является задание,
выданное кафедрой ПОИС. Плановый срок
начала работы по созданию системы
имитационного моделирования: 17.02.11,
срок окончания: __________. Курсовой проект
должен выполняться согласно графику,
приведенному в таблице А.1.
Таблица А.1 – Этапы, результаты и сроки разработки ПП
№ | Этап работы | Результат работы | Срок выполнения
(№ недели) |
Модуль 1 | |||
1 | Получение задания на КП | Задание на разработку (1 стр.) | 1-2 |
2 | Выявление требований к разрабатываемому программному продукту | Техническое задание
(3-5 стр.) |
3-4 |
3 | Проведение ОО анализа предметной области | Словарь предметной области. Сценарии использования системы. ОО словарь предметной области. | 3-4 |
4 | Проведение ОО проектирования | Диаграммы классов, объектов | 5-6 |
5 | Проведение ОО проектирования | Диаграммы состояний и переходов, взаимодействия | 7-8 |
6 | Проведение ОО проектирования | Диаграммы модулей, процессов | 10-11 |
7 | Проектирование протоколов классов | Протоколы классов | 12-13 |
8 | Реализация классов | Описание реализации классов | 12-13 |
Продолжение таблицы А.1
№ | Этап работы | Результат работы | Срок выполнения
(№ недели) |
Модуль 2 | |||
9 | Реализация и отладка программы. Проведение тестирования ПП. | Текст программы. Описание программы и тестов. | 13-14 |
10 | Проведение имитационного моделирования, получение статистики работы. | Экранные формы (1-2 стр.). Руководство пользователя (1 стр.). | 13-14 |
11 | Оформление
пояснительной записки и |
Прошитая ПЗ с CD-ROM (30-50 стр.), сдается преподавателю лично не позже чем за 3 дня до защиты КП. | 14 |
12 | Защита курсового проекта | 15-17 |
А.2 Назначения и цели создания программы
Данный
программный продукт
А.3 Характеристика объекта автоматизации
В оптовом магазине используется новая процедура обслуживания клиентов. Клиенты, попадая в магазин, определяют по каталогу наименования товаров, которые они хотели бы приобрести. После этого клиент обслуживается клерком, который идет на расположенный рядом склад и приносит необходимый товар. Каждый из клерков может обслуживать одновременно не более шести клиентов. Время, которое затрачивает клерк на путь к складу, равномерно распределено на интервале от 0.5 до 1.5 минут. Время поиска товара нужного наименования зависит от числа наименований, которое клерк должен найти на складе.
Это время нормально распределено с математическим ожиданием, равным утроенному числу искомых наименований, и среднеквадратичным отклонением, равным 0.2 математического ожидания. Следовательно, если, например, со склада надо взять товар одного наименования, время на его поиск будет нормально распределено с математическим ожиданием, равным 3 минуты и среднеквадратичным отклонением, равным 0.6 минут. Время возвращения со склада равномерно распределено на интервале от 0.5 до 1.5 минут. По возвращении со склада клерк рассчитывается со всеми клиентами, которых он обслуживает. Время расчета с клиентом равномерно распределено на интервале от 1 до 3 минут. Расчет производится в том порядке, в каком к клерку поступали заявки на товар. Интервалы между моментами поступления заявок на товары от клиентов экспоненциально распределены с математическим ожиданием, равным 2 минуты. Клиентов в магазине обслуживают три клерка.
А.4 Требования к программному продукту
А.4.1 Требования к системе в целом
В целом
к системе предъявляются
а) имитация работы оптового магазина;
б) возможность имитации поведения при различных значениях времени появления нового клиента и подачи заявки;
в) вывод статистики: загрузку клерков, время обслуживания одного клиента, число заявок, удовлетворяемых клерком за один выход на склад.
А.4.2 Требования к задачам и функциям программного продукта
В процессе работы необходимо обеспечить выполнение следующих функций:
А.4.3 Требования к техническому обеспечению
К техническому обеспечению предъявляются следующие требования:
А.4.4 Требования к программному обеспечению
Для
стабильной работы к программному обеспечению
предъявляется следующее
Программным обеспечением для проектирования программы является CASE-средство CS Odessa Concept Draw, а для разработки – Microsoft Visual Studio 2010. Для запуска программы необходимо наличие операционной системы Windows 7, и соответствующих библиотек Microsoft Visual C++ Redistributable.
А.4.5 Требования к организационному обеспечению
В программную документацию должны входить:
А.4.6 Требования к комплекту поставки ПП
Программный
продукт поставляется с пояснительной
запиской к курсовому проекту
в файле ПЗ.doc, руководством пользователя
в файле Help.doc, исходными кодами в виде
проекта среды разработки в папке SRC, исполнительным
файлом программы start.exe и файлом с данными
о разработчике readme.txt.
Приложение Б
Интерфейс программного продукта оформлен на английском языке.
После запуска программы вы увидите окно, в котором вам необходимо последовательно ответить на пять запросов:
-
ввести значение нижней
-
ввести значение верхней
-
ввести значение нижней
-
ввести значение верхней
-
ввести время, в течение
Данные значения измеряются в минутах. Позволяется вводить дробные значения – они будут преобразованы в целое с округлением.
После того как вы введете все необходимые значения, начнется процесс моделирования.
В
результате вы увидите всю необходимую
статистическую информацию.
Рисунок В.1 – Статистические данные моделирования системы
Приложение
Г
ЛИСТИНГ ПРОГРАММЫ
Г.1. Файл “Total.h”
#include <deque>
#include <iostream>
using namespace std;
class CGoods
{
public:
int m_Num;
CGoods(int Num);
};
class CClient;
class CQueue
{
public:
deque <CClient*> m_Queue;
int m_OwnNumber;
CQueue(int OwnNumber, int *CurrTime);
int GetNumOfGoods(int NumOfServicingClients);
bool IsEmpty();
int GetNumOfWaitingClients();
int Size();
void OnWaiting(int NumOfClients);
void Push(CClient *Client);
CClient* Pop(void);
int *m_CurrTime;
};
class CClerk
{
public:
enum ClerkState {IsWaiting, IsGoingToWarehouse, IsSearchingGoods, IsGoingFromWarehouse, IsSettlingUp };
enum ClerkState m_State;
int m_OwnNumber;
int m_TimeToStateChange;
int m_NumOfServicingClients;
CQueue *m_Queue;
CClerk(CQueue *Queue, int OwnNumber, int *CurrTime, int *Stat1, int *Stat2);
void StateChange();
int *m_CurrTime;
int *m_Stat1;
int *m_Stat2;
};
class CClient
{
public:
enum ClientState {IsMakingBid, IsWaitingForServicing, IsWaitingForGoods, IsSettlingUp};
enum ClientState m_State;
CQueue *m_Queue;
CGoods *m_Goods;
CClient(CQueue *Queue, int *CurrTime, int *Stat, unsigned int *ServTime);
void StateChange();
void StateChange(CQueue *Queue);
~CClient(void);
int GetServicingTime();
int m_SSTime;
int *m_CurrTime;
int *m_Stat;
unsigned int *m_ServTime;
};
class CMarket
{
public:
CClerk *m_Clerk[3];
CQueue *m_ClerkQueue[3];
CQueue *m_CatalogueQueue;
int m_GlobalTime;
int m_TimeToNewClient;
int m_TimeToNewBid;
CMarket(float NewClient[2], float NewBid[2]);
void Work(int MaxTime);
int m_Workload[3];
int m_NumOfServClients;
unsigned int m_TotalServTime;
int m_NumGOTWh;
int m_TNBids;
int m_NewClient[2];
int m_NewBid[2];
int m_NumOfClients;
};
Г.2. Файл “Clerk.cpp”
#include "Total.h"
#include <iostream>
using namespace std;
CClerk::CClerk(CQueue *Queue, int OwnNumber, int *CurrTime, int *Stat1, int *Stat2)
{
m_Queue=Queue;
m_OwnNumber=OwnNumber;
m_State=IsWaiting;
m_TimeToStateChange=-1;
m_CurrTime=CurrTime;
m_Stat1=Stat1;
m_Stat2=Stat2;
}
void CClerk::StateChange()
{
if
(m_State==IsWaiting&&!m_Queue-
{
m_State=
(*m_Stat1)++;
m_
m_
if (m_NumOfServicingClients>6) m_NumOfServicingClients=6;
m_Queue->
return;
}
if
(!m_TimeToStateChange&&m_
{
m_State=
m_
(*m_Stat2)+=m_
return;
}
if
(!m_TimeToStateChange&&m_
{
m_State=
m_
return;
}
if
(!m_TimeToStateChange&&m_
{
m_State=
m_
m_Queue->m_Queue.
return;
}
if
(!m_TimeToStateChange&&m_
{
m_
CClient *Client=m_Queue->Pop();
delete Client;
if (!m_NumOfServicingClients)
{
if (m_Queue->IsEmpty())
{
m_
m_
return
}
m_State=
(*m_Stat1)++
m_
m_
if (m_NumOfServicingClients>6) m_NumOfServicingClients=6;
m_Queue->
return;
}
m_
m_Queue->m_Queue.
}
}
Г.3. Файл “Client.cpp”
#include "Total.h"
#include <iostream>
CClient::CClient(CQueue *Queue, int *CurrTime, int *Stat, unsigned int *ServTime)
{
m_Queue=Queue;
m_State=IsMakingBid;
m_CurrTime=CurrTime;
m_Stat=Stat;
m_ServTime=ServTime;
}
void CClient::StateChange()
{
if
(m_State==
{
m_SSTime=*m_
m_State=
return;
}
*m_ServTime+=(*m_
m_State=IsSettlingUp;
}
void CClient::StateChange(CQueue *Queue)
{
m_State=
m_Queue=Queue;
m_Goods=new CGoods(2+rand()%4);
}
int CClient::GetServicingTime()
{
return m_SSTime;
}
CClient::~CClient(void)
{
(*m_Stat)++;
delete m_Goods;
}
Г.4. Файл “Market.cpp”
#include "Total.h"
#include <queue>
#include "conio.h"
CMarket::CMarket(float NewClient[2], float NewBid[2])
{
m_NewClient[0]=int(
m_NewBid[0]=int(NewBid[
m_GlobalTime=0;
for (int i=0; i<3; i++)
{
m_ClerkQueue[i]=
m_Clerk[i]=new CClerk(m_ClerkQueue[i], i+1, &m_GlobalTime, &m_NumGOTWh, &m_TNBids);
m_Workload[i]=0;
}
m_CatalogueQueue=new CQueue(0, &m_GlobalTime);
m_NumOfServClients=0;
m_TotalServTime=0;
m_NumGOTWh=0;
m_TNBids=0;
m_NumOfClients=0;
}
void CMarket::Work(int MaxTime)
{
m_TimeToNewClient=m_
m_TimeToNewBid=m_NewBid[
for(; m_GlobalTime<=MaxTime; m_GlobalTime++)
{
for (int i=0; i<3; i++) m_Workload[i]+=m_ClerkQueue[i]
m_TimeToNewClient-
if (m_TimeToNewBid>0) m_TimeToNewBid--;
for (int i=0; i<3; i++)
{
if (m_Clerk[i]->m_State!=CClerk::
}
if (m_TimeToNewClient==0)
{
CClient *Client=new CClient(m_CatalogueQueue, &m_GlobalTime, &m_NumOfServClients, &m_TotalServTime);
m_
m_
m_
}
if (m_TimeToNewBid==0)
{
if (!(m_CatalogueQueue->IsEmpty()
{
int Smaller=0;
for (int i=1; i<3; i++)
{
}
CClien
m_
Client
}
m_
}
for (int i=0; i<3; i++)
{
m_Clerk[i]->
}
//getch();
}
cout<<"\n*** Statisctics ***\n\n";
cout<<"Total number of clients : "<<m_NumOfClients<<endl;
cout<<"Total number of served clients : "<<m_NumOfServClients<<endl;
cout<<"Workload:\n";
for
(int i=0; i<3; i++) cout<<" Clerk #"<<i+1<<"
: "<<float(m_Workload[i])/m_
cout<<"The
average time of client servicing : "<<float(m_TotalServTime)/5/m_
cout<<"The
average number of allowed bids for one going to warehouse : "<<float(m_TNBids)/m_NumGOTWh<
cout<<endl<<endl<<"To quit press any key...";
getch();
}
Г.5. Файл “Goods.cpp”
#include "Total.h"
#include <iostream>
CGoods::CGoods(int Num)
{
m_Num=Num;
}
Г.6. Файл “main.cpp”
#include "Total.h"
#include <iostream>
using namespace std;
int main()
{
float NewClient[2];
float NewBid[2];
float
WorkTime;
cout<<"Enter LOWER BOUND of time of new client appearance(in minutes)>";
cin>>NewClient[0];
cout<<"Enter UPPER BOUND of time of new client appearance(in minutes)>";
cin>>NewClient[1];
cout<<"Enter LOWER BOUND of time of new bid appearance (in minutes)> ";
cin>>NewBid[0];
cout<<"Enter UPPER BOUND of time of new bid appearance (in minutes)> ";
cin>>NewBid[1];
cout<<"Enter time of working (in minutes)> ";
cin>>WorkTime;
CMarket Market(NewClient, NewBid);
Market.Work(int(
return 0;
}
Г.7. Файл “Queue.cpp”
#include <deque>
#include "Total.h"
#include <iostream>
using namespace std;
CQueue::CQueue(int OwnNumber, int *CurrTime)
{
m_OwnNumber=OwnNumber;
m_CurrTime=CurrTime;
}
int CQueue::
{
return m_Queue.size();
}
void CQueue::OnWaiting(int NumOfClients)
{
for(deque<CClient*>::
{
(*i)->StateChange(
NumOfClients--;
};
}
int CQueue::GetNumOfGoods(int NumOfServicingClients)
{
int k=0;
for(deque<CClient*>::
{
k+=(*i)->m_Goods->
NumOfServicingClie
};
return k;
}
int CQueue::Size()
{
return m_Queue.size();
}
bool CQueue::IsEmpty()
{
return m_Queue.empty();
}
void CQueue::Push(CClient *Client)
{
m_Queue.push_back(
}
CClient* CQueue::Pop()
{
CClient *C=m_Queue.front();
m_Queue.pop_front();
return C;
}