ПЗ (1229304), страница 7
Текст из файла (страница 7)
Третий подраздел информирует участников о цене установленной самим участником, о количестве и прибыли вырученной от продажи. А также о количестве недовольных покупателей и сколько продукции ушло на склад хранения.
Последний четвертый подраздел показывает финансовое состояние банка и чистую прибыль, полученную за один шаг симуляции.
Отчет доли рынка, в данном отчете можно легко наблюдать результаты выбранной стратегии каждого из участников симуляции. В соответствии с (рисунком 17) участнику представляется отчет доли рынка.
Рисунок 17 Отчет доли рынка участника
По данному отчету видно соотношение объемов продукции, проданные каждым участником на рынке, из чего можно сделать выводы о том, какой из участников лидирует в продаже собственной продукции, а кому следует выбрать иную стратегию к получению желаемых результатов.
Графический Отчет банка состоит из основных параметров отчета банка. В отчете банка приведены все возможные параметры и данные к ним, а в графическом отчете банка выведена только основная часть этих параметров (рисунок 18).
Рисунок 18 Основная часть параметров отчета банка в графическом виде
4 РЕАЛИЗАЦИЯ ПРОГРАММНОГО КОМПЛЕКСА
4.1 Обзор технологий реализации программного комплекса
Для повышения эффективности операционной деятельности в банке применяются единые системные подходы по управлению всех видов бизнес-процессов, в том числе и к развивающему, обучающему блоку. Установлены и стандарты к программным комплексам. Банк в данном случае является заказчиком, поэтому необходимо понимать потребности заказчика, выполнять его требования и стремиться превзойти его ожидания.
Одной из широко используемых сред разработки является Builder, который позволяет создавать различные приложения: от простейших однооконных приложений до программ распределения баз данных. Так же Builder предназначен для операционных систем, поэтому именно с помощью данной среды программирования банк разрабатывает обучающие программные модули. Для разработки программного комплекса выбран язык программирования C++ и среда разработки Builder, так как это позволяет использовать уже существующие стандартные компоненты для разработки программного обеспечения (интерфейса пользователя) в банке, позволяет быстро решать поставленные задачи с помощью набора стандартных классов, генерировать «безопасный код», позволяет избежать большую часть ошибок, возникающих при использовании динамической памяти.
C++Builder включает обширный набор средств, которые повышают производительность труда программистов и сокращают продолжительность цикла разработки. Эффективная поддержка автономных проектов на С++ значительно расширяет возможности управления процессами разработки, при минимизации трудозатрат.
4.2 Взаимодействие сервера и клиента
Разработанный программный комплекс взаимодействует на основе клиент-серверной модели. Для работы в сети используется технология передачи данных между сокетами по протоколу TCP/IP. Данными, которыми обмениваются клиент и сервер являются текстового формата. Разработано ряд функций, с помощью которых происходит взаимодействие приложений [17].
Для обмена данными используются функции MakeBuf(), MakeBufEx(), ReadUSFromBuf(), ReadUSFromBufEx(), Send_to_Client(). Функция MakeBuf() создает буфер необходимого размера для переданной в нее строки. Затем посредством компонента ClientSocket функцией SendBuf() передаем данные серверу или клиенту. Обратной функцией MakeBuf() является функция ReadUSFromBuf(), которая преобразует буферу в текст. Так же были реализованы расширения уже созданных функций MakeBuf() и ReadUSFromBuf() – это функции MakeBufEx() и ReadUSFromBufEx(), которые позволяют передавать данные клиента вместе с его уникальными данными, то есть позволяют идентифицировать участника как уникального в моделируемой симуляции. Уникальность данных учитывается в начале моделирования симуляции, а именно при подключении. Имя участника не должно повторяться в созданной симуляции. К имени создается уникальное число, которое генерируется в зависимости от времени. Функция Send_to_Client() используется сервером для массовой отправки посчитанных результатов клиентам.
Для чтения и упаковки данных используются функции Receive_Inf(), Read_From_Text(), Send_Inf(). Переданные по сети данные, необходимо разобрать и после заполнить переменные. В тексте содержится наименование переменной и ее значение. Функция Receive_Inf() заполняет все переменные переданными значения с помощью функции Read_From_Text(). В функцию Read_From_Text() передаются два параметра: текст и наименование переменной, после чего функция возвращает ее значение. Взаимодействие этих двух функций достигается понимание переданной информации. Функция Send_Inf() используется для упаковки данных с последующей ее передачей по сети.
С первого запуска и до завершения работы программного комплекса ведется логирование работоспособности приложения. Для этого была реализована функция func_log() для создания файла-лога. В зависимости от количества переданных в функцию параметров ведутся разные логи. Логирование помогает следить за выполнение тех или иных действий приложения. В программном комплексе ведутся два вида лога:
-
выполнение последовательности функций (LogFile.txt);
-
состояние объектов на текущий момент (Control System.txt).
Логирование ведется, как на приложении сервер, так и на приложении клиент. У сервера ведется два вида лога, а у клиента только второй.
Механизм передачи данных каждым приложение осуществляется следующим образом. Клиент или сервер для передачи данных открывает соединение, после передачи, закрывает соединение. За счет данного разработанного механизма передачи данных постоянного соединения клиента с сервером не требует. Для определения, что клиент еще участвует в симуляции, разработан счетчик времени, по истечению которого клиент должен отправить данные, а сервер получить. Если этого не происходит, то считается что, клиент отключен и больше не участвует в процессе симуляции.
4.3 Сервер
На сервере для хранения данных каждого пользователя создана структура данных. В структуре описаны все необходимые параметры, которые необходимы для управления предприятием, что позволяет легко оперировать данными каждого пользователя.
Перед тем как запустить сервер, необходимо заполнить параметры в конфигурационном файле. На этапе запуска сервера выполняется считывание и проверка правильности заполнения параметров. Для считывания используется функция Read_From_File(), после которой выполняется функция check_serv_config(), для проверки введенных параметров. В (таблице 1) приведены значения, которым может удовлетворять тот или другой параметр. При вводе ошибочно, какого-либо из параметров, при запуске сработает исключение и будет выдано соответствующее сообщение. После проверки параметров, происходит инициализация переменных.
Таблица 1 – Значение параметров
| Наименование параметра | Описание | Принимаемое значение параметра | |
| Минимальное | Максимальное | ||
| quantity_of_users | Кол-во пользователей | 2 | 50 |
| tcp_port | Номер порта | 1000 | 65000 |
| timer | время для принятия решения (в секундах) | 60 | 300 |
| cur_cash | капитал банка | 100 | 1000000 |
| pow_cur_lev | Начальный уровень фондов | 10 | 10000 |
| pow_inc_price | Начальная стоимость единицы прироста фондов | 1 | 300 |
| SRW_start_inc_price | Начальная стоимость единицы прироста НИР | 1 | 400 |
| st_inner_price | Стартовая себестоимость продукции | 30 | 350 |
| V_market | Объем рынка | 100 | 1000000 |
| amort_perc | Процент амортизации | 5 | 45 |
| max_occupy | Предел банковского кредита | 1000 | 200000 |
| bank_perc | Процент кредита | 5 | 45 |
| tax | Налоговая ставка | 5 | 45 |
При подключении клиентов все сообщения сначала обрабатываются функцией TcpServer1Accept(). Функция, обрабатывая сообщения, проверяет правильность отправленных данных. Если данные не правильные, то сервер отправляет сообщение об ошибке с ее кодом. При правильных данных клиента, сервер запоминает его и присваивает ему уникальный код. С помощью уникального кода клиенту создается новый порт. Порт и код клиента отправляются клиенту. Так происходит для каждого клиента. Таким образом, сервер в дальнейшем будет идентифицировать данные каждого клиента. После того как количество клиентов становиться столько, сколько указано в серверной форме, сервер отправляет всем клиентам сообщение о начале процесса симуляции. В дальнейшем все сообщения от клиентов будут обрабатываться функцией TcpServer1Accept2().
При обработке сообщений от клиентов в функции TcpServer1Accept2(), происходит его идентификация, после чего проверяется список отключенных клиентов. Для этого была разработана функция Check_clients(). Если клиент не находится в этом списке или присутствует, но со значением минус один, то считается что клиент не участвует в процессе симуляции. Обратной к этой функции является функция Get_NonDead_List(), которая определяет количество участвующих в процессе симуляции. Необходимость данной функции заключается введении лога для отслеживания, на каком этапе и сколько участвовало клиентов. Также, с помощью данной функции проверяется, все ли активные клиенты прислали данные. Если в течение указанного времени, которое установлено в конфигурационном файле, клиенты не отправили свои данные для их обработки, то такие клиенты считаются отключенными и заносятся в соответствующий список.
После того как все клиенты прислали на сервер данные, происходит их обработка в следующем порядке:
-
пересчёт уровня фондов;
-
пересчёт уровня НИР;
-
вложения в рекламу;
-
пересчёт себестоимости;
-
расчёт выпуска продукции;
-
расчёт привлекательности;
-
расчёт изменения состояния рынка;
-
определение разделения рынка;
-
расчёт амортизации;
-
возврат денежных средств ЦБ с учетом процентной ставки;
-
расчёт прибыли с учетом налоговой ставки.
Рассчитанные данные отправляются сервером каждому клиенту, сервер переходит в состояние ожидания приема данных, далее сервер получает данные и происходит обработка данных и рассылка клиентам. Таким образом, пройден первый шаг симуляции. Далее шаги повторяются до тех пор, пока не определится наилучший участник.















