Вы находитесь на странице: 1из 59

Министерство образования и науки Российской Федерации

ФГБОУ ВО Хакасский государственный университет им. Н.Ф. Катанова


Инженерно-технологический институт
Кафедра программного обеспечения вычислительной техники и автоматизированных систем

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе
по дисциплине «Технологии программирования»
по теме:
ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ. КОНКУРЕНЦИЯ НА
КОММЕРЧЕСКОМ РЫНКЕ

Проверил
Старший преподаватель
кафедры ПОВТиАС Иванцов Анатолий Александрович
оценка, подпись, дата

Выполнил
студент группы 49 Беккер Валентин Эдуардович_
подпись, дата

Абакан 2021
РЕФЕРАТ

Курсовая работа: 71 с., 19 рис., 0 табл., 30 источник, 2 прил.


MS WORD 2016, MS EXCEL 2016, ЭКОНОМИСТ, UML, VBA, XML.
Тема курсовой работы: Имитационное моделирование. Конкуренция на
коммерческом рынке
Объект исследования курсовой работы: Рынок с убыточными фирмами.
Предмет исследования: автоматизированное рабочее место
экономиста для исследования поведения рынка и определения оптимальной
стратегии для получения максимальной выгоды.
Основное направление данной работы заключается в создании
программного обеспечения, позволяющее реализовать имитационную
лабораторию рынка с несколькими убыточными лабораториями. Приведен
анализ предметной области, описание этапов разработки системы,
позволяющей автоматизировать деятельность экономиста при исследовании
поведения рынка.
При выполнении работы использованы технологии компонентного
программирования.
В процессе работы определены актуальность исследования, объект, цель
и задачи научного исследования, произведён анализ предметной области.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ .......................................................................................................... 8
1 Анализ и моделирование предметной области .............................................. 11
1.1 Анализ функциональной модели ИС, построение UML диаграмм
USECASE проекта .......................................................................................... 11

1.2 Анализ логической модели ИС, построение UML диаграмм классов


проекта ............................................................................................................ 18

1.3 Анализ динамической модели ИС, построение UML динамических


диаграмм проекта ........................................................................................... 19

1.4 Анализ физической модели ИС, построение UML диаграмм компонент


проекта ............................................................................................................ 21

1.5 Анализ физической модели ИС, построение UML диаграмм размещения


проекта ............................................................................................................ 22

2 Реализация программного комплекса ............................................................ 24


2.1 Реализация уровня данных в трехуровневой архитектуре проекта ....... 24

2.2 Реализация уровня бизнес правил в трехуровневой архитектуре проекта


......................................................................................................................... 31

2.3 Реализация уровня пользовательского интерфейса в трехуровневой


архитектуре проекта ....................................................................................... 31

2.4 Создание инсталляционного пакета для ИС ................................... 34

3 Документирование проекта ............................................................................ 36


3.1 Порядок ввода в эксплуатацию проекта информационной системы .... 36

3.2 Руководство администратора информационной системы ..................... 36

3.3 Руководство пользователя для клиентских частей проекта ................... 37


4 Оценка результатов создания информационной системы с точки зрения
исполнителя проекта, условного заказчика и условного конечного
пользователя ....................................................................................................... 39
ЗАКЛЮЧЕНИЕ .................................................................................................. 40
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ ............................................... 41
ПРИЛОЖЕНИЕ А – Технологии программирования ...................................... 44
ПРИЛОЖЕНИЕ Б – Листинг ............................................................................. 45
ТЕРМИНЫ И ОПРЕДЕЛЕНИЯ
В настоящей КР применяют следующие термины с соответствующими
определениями:
Имитационное метод исследования, при котором изучаемая
моделирование - система заменяется моделью, с достаточной
точностью описывающей реальную, с которой
проводятся эксперименты с целью получения
информации об этой системе
Экономист - должность, специальность, специалист в
экономике или её разделах, эксперт по
экономическим вопросам промышленности,
сельского хозяйства, банковского дела и так далее
Программа - последовательность инструкций (команд),
описывающая алгоритм решения с помощью
компьютера соответствующей задачи, для
реализации которой эта программа была
разработана.
CASE - набор инструментов и методов автоматизации
анализа, проектирования и разработки программ
VBA - упрощенная версия Visual Basic, встроенная в
множество продуктов линейки Microsoft Office.
Она позволяет писать программы прямо в файле
конкретного документа.
RUP - Рациональный унифицированный процесс — одна
из спиральных методологий разработки
программного обеспечения. Методология
поддерживается компанией Rational Software. В
качестве языка моделирования в общей базе
знаний используется язык UML
UML - язык графического описания для объектного
моделирования в области разработки
программного обеспечения, моделирования
бизнес– процессов, системного проектирования и
отображения организационных структур
XML - Расширяемый язык разметки. Спецификация XML
описывает XML-документы и частично описывает
поведение XML-процессоров (программ,
читающих XML-документы и обеспечивающих
доступ к их содержимому).

6
ПЕРЕЧЕНЬ СОКРАЩЕНИЙ И ОБОЗНАЧЕНИЙ

В настоящей КР применяют следующие сокращения и обозначения:


ИС – информационная система
ПК – персональный компьютер
ПО – программное обеспечение
ПП – программный продукт
CASE – computer-aided software engineering;
MS – Microsoft
RUP – Rational Unified Process;
UML – Unified Modelling Language;
VBA - Visual Basic for Applications.

7
ВВЕДЕНИЕ
В нынешнее время, введу Коронавирусной инфекции, малые и средние
предприятия страдают в большей степени, чем, раннее, до пандемии, из-за
этого они массово объявляют себя банкротами, а некоторые из нескольких
сливаются в единую структуру, чтобы, за счет объединения банков
покупателей, получить положительную прибыль [3].
Введу выше перечисленного, экономистам необходимо облегчить свою
работу, чтобы проще исследовать поведения рынка для дальнейшего
определения оптимальной стратегии.
Тема курсовой работы: Имитационное моделирование. Конкуренция на
коммерческом рынке
Актуальность данной темы заключается в том, что существующий
инструментарий не позволяет экономистам эффективно контролировать
процесс исследования рынка, при процессе поглощения фирм.
Вследствие чего принято решение разработать ПО для экономистов,
которое имитирует поведения рынка. Что в данное время востребовано.
Целью курсовой работы является проектирование и создание
имитационного ПО, предназначенного для исследования процесса сливания
фирм в одну.
Для выполнения данной цели, необходимо решить следующие задачи:
1) исследовать предметную область – определить: область рынка, виды
фирм, процесс поглощения;
2) Смоделировать модель рынка;
3) Реализовать имитационное ПО;
4) Задокументировать проект;
5) Оценить результаты созданного проекта.
Объект исследования курсовой работы: Рынок с поглощающими друг
друга фирмами.

8
Предмет исследования: Автоматизация рабочего места экономиста для
упрощения процесса исследования рынка с поглощающимися фирмами.
Методы работы
Результаты исследований, выполненных в работе, базируются на
современных методах объектно–ориентированного подхода: объектно–
ориентированном анализе, объектно–ориентированном проектировании,
принципах объектно– ориентированного и компонентного программирования.
Для объектно–ориентированного подхода разработаны графические
методы моделирования предметной области, обобщенные в языке
унифицированного моделирования UML.
UML представляет собой объектно–ориентированный язык
моделирования, обладающий следующими основными характеристиками:
 является языком визуального моделирования, который обеспечивает
разработку репрезентативных моделей для организации взаимодействия
заказчика и разработчика ИС, различных групп разработчиков ИС;
 содержит механизмы расширения и специализации базовых
концепций языка.
Практическая значимость:
Разработанное ПО может быть использована экономистами для
получения быстрого результата исследования, необходимого для получения
существенной информации, формирования промежуточных и итоговых
отчетов о поведении рынка.
Для наглядности работы программного продукта возможна реализация
построения графиков, в которых описывается поведение рынка в
количественном измерении успешных фирм в каждом году.
Структура работы:
Пояснительная записка к работе на тему Имитационное моделирование.
Конкуренция на коммерческом рынке выполнена на 43 листах машинного

9
текста, содержит 19 рисунков. Состоит из введения, четырех разделов и
заключения.
Список использованной литературы содержит 30 источников сети
Интернет.
В первом разделе проводится исследование предметной области,
определение требования к системе автоматизации и обзор существующего
программного обеспечения.
Во втором разделе производится проектирование архитектуры
информационной системы. Представлена диаграмма UML с выделением
подсистем, информационно – логическая модель. На основе инфологической
модели составлена физическая модель данных.
В третьем разделе содержится описание процесса реализации, выбор
среды разработки и особенности реализации системы.
В четвертом разделе описаны оценки результатов созданного ПП.
В заключении подведены итоги работы над системой автоматизации
процесса моделирования конкуренции на коммерческом рынке, отмечены
преимущества разработанного программного продукта.

Рисунок 1 – Структура курсовой работы


10
1 Анализ и моделирование предметной области
1.1 Анализ функциональной модели ИС, построение UML диаграмм
USECASE проекта
Разработка курсовой работы и связанного с ней проекта велась в рамках
курса “Технологии программирования”.
Широко использовались приемы коллективной работы. Большая часть
работы проводилась с использованием дистанционных технологий. Для
реализации проекта были использованы ресурсы учебного сервера Moodle
Learning Management System.
Процесс разработки проекта основан на спиральной модели жизненного
цикла в трактовке RUP. RUP -рациональный унифицированный процесс
(Rational Unified Process) — одна из спиральных методологий разработки
программного обеспечения. Методология поддерживается компанией Rational
Software. В качестве языка моделирования в общей базе знаний используется
язык UML. Основной практической рекомендацией RUP является проведение
анализа и проектирование системы на основе четырех моделей предметной
области проекта: Функциональной, Логической, Динамической и Физической.
Чтобы успешно разработать эти модели было выбрано CASE– средство
(программа) StarUML, потому что данное ПО распространяется бесплатно,
доступно для свободной установки с официального сайта StarUML. CASE
(computer-aided software engineering) - набор инструментов и методов
автоматизации анализа, проектирования и разработки программ.
Для того чтобы правильно спроектировать программную систему
необходимо рассматривать ее с различных точек зрения в этом может помочь
системная архитектура.
Архитектура программной системы может быть описана с помощью
четырех взаимосвязанных моделей или представлений, как показано на
рисунке 2 на следующей страницы.

11
Рисунок 2 – Моделирование системной архитектуры
StarUML позволяет сократить время разработки информационных
систем, и повысить их качество.
Выделяют следующие группы CASE средств:
 CASE средства верхнего уровня.
Ориентированы на начальные этапы построения информационной
системы, связанные с анализом и планированием.
CASE средства верхнего уровня обеспечивают стратегическое
планирование, расстановку целей, задач и приоритетов, а также графическое
представление необходимой информации. Содержат графические
инструменты построения диаграмм, таких как диаграммы, сущность связь (ER
диаграммы), диаграммы потока данных (DFD), структурные схемы, деревья
решений и пр [8].
 CASE средства нижнего уровня.
Эти CASE средства применяются для проектирования, разработки
программного кода, тестирования и внедрения.
CASE средства нижнего уровня зависят от данных, которые
предоставляют средства верхнего уровня. Они помогают создать
информационную систему, однако не являются полноценными
инструментами разработки программного обеспечения.
 Интегрированные CASE средства (I – CASE).
Охватывают полный жизненный цикл разработки информационной
системы. Они позволяют обмениваться данными между инструментами

12
верхнего и нижнего уровня и являются своего рода «мостом» между CASE
средствами верхнего и нижнего уровней.
Для реализации данной работы, было выбрано CASE– средство
StarUML, потому что данное ПО распространяется бесплатно, доступно для
свободной установки с официального сайта StarUML.
Архитектура разрабатываемой платформы
Для работы со статистическими данными экономисту необходимо
клиентское приложение – программа, которая имитирует рынок в условиях
поглощения фирм друг другом.
Данная система должна позволить пользователю вести работу со
статистическими данными в реальном времени.
Поэтому, для данной системы наиболее подходящий выбор –
двухуровневая архитектура «клиент– сервер».
В структуру системы автоматизации обычно входят три основных
элемента:
 презентационный – графический интерфейс, созданный на основе
окон и элементов управления, взаимодействующий с пользователем;
 прикладная логика – это набор алгоритмов, реализующих
вычисления и контролирующих поток управления в приложении, генерация
деловой информации на основе получаемых данных и защита ее целостности;
 сервисы данных – управляют информацией, отвечают за ее
сохранение и обеспечивают функциональность, необходимую для обработки
данных.
Чтобы разработать любую программу, в начале, необходимо, подробно
изучить области деятельности, в которой должно работать будущее
приложение, определить основные требования со стороны заказчика, а также
оценить объем работы, которую необходимо выполнить.
Функциональная, логическая, динамическая и физическая модель –
каждая из них является одной из возможных проекций предметной области
13
проекта, а также способна рассмотреть ее на определенном этапе
функционирования.
Для описания моделей средствами UML, будут использоваться
диаграммы вида [7]:
 Вариантов использования (use case diagram);
 Классов (class diagram);
 Кооперации (collaboration diagram);
 Последовательности действий (sequence diagram);
 Деятельности (activity diagram).
 Физическая система (component diagram)

Рисунок 3 – Функциональная модели рынка


На рынке работают n убыточных компаний-фирм. В период отсутствия
заказов они стали поглощать друг друга с целью показать прибыль к концу
14
отчетного периода за счет клиентов поглощенных компаний. Схема
поглощения показана на рисунке 2 на данной странице.
Для того чтобы показать прибыль, фирме нужно поглотить не менее k
фирм (неважно каких - прибыльных или убыточных).
Слияния и поглощения — класс экономических процессов укрупнения
бизнеса и капитала, происходящих на макро- и микроэкономическом уровнях,
в результате которых на рынке появляются более крупные компании.
В данном случае используется только поглощение одной фирмы другой.
Поглощение — сделка, совершаемая с целью установления 100%
контроля основного общества над хозяйствующим обществом и
осуществляемая путём приобретения более 30 % уставного капитала (акций,
долей, и т. п.) поглощаемой компании с последующим присоединением
поглощаемой компании к основному обществу
При поглощении фирмы-жертвы фирмой-хищником происходит полное
её исчезание с рынка, при этом все её клиенты переходят фирме-хищнику, что
позволяет фирме в конце года показать положительную прибыль.
Успешной фирмой считается та, которая поглотит определенное
количество фирм-жертв к концу года, при этом фирма-жертва может стать
фирмой-хищник и наоборот. При поглощении успешной фирмы, она уже
входит в статистику.
Не успешная фирма считается та, которая не поглотила к концу года
определенное количество фирм.
На рисунке 4 на следующей странице представлена модель отношения
между выбранными нами актерами и вариантами использования.
Отношение — семантическая связь между отдельными элементами
модели.
Актеры:
 экономист или заказчик;
 аналитик.
15
 программист;
 руководитель разработкой.
Программист – это специалист, который занимается
программированием или же созданием компьютерных программ.
Программист в данной модели реализует ПО, которое может
формировать статистические данные о поглощении фирм на рынке, также оно
формирует базу данных в виде папки с данными и XML документ для
построения графика в Excel.
Аналитик – это тот же экономист, но функция его заключается в
аналитической помощи программисту.
Заказчик – это физическое или юридическое лицо, которое
заинтересованно в ПП, которое облегчит работу экономисту.

Рисунок 4 – Диаграмма вариантов использования


Экономист – это специалист в области экономической науки, который
работает в области исследования, планирования и руководства хозяйственной
деятельности.

16
На предприятиях или в организациях данные специалисты принимают
участие в разработке системы бюджетирования, осуществлении контроля
бюджетом, а также в подготовке и создании периодической и управленческой
отчетности фирмы.
В данной модели экономист производит исследование рынка на
имитационном ПО, сделанным программистом.
Руководитель разработки – это человек, который управляет процессом
разработки, направляет подчиненных и объединяет результаты их работы.
Варианты использования:
 случайное поведение рынка;
 оптимальное поведение рынка;
 сохранение данных в файловой системе;
 сохранение данных в XML файле;
 создание графика по данным XML.
Актер может взаимодействовать с несколькими вариантами
использования ПО. В данном случае актер «Экономист» обращается к
нескольким сервисам данной системы, которая обрабатывает запросы и
выдает необходимые решения.
Однако способы взаимодействия элементов модели предполагают обмен
сигналами или сообщениями, которые инициируют реализацию
функционального поведения моделируемой системы.
Язык UML располагает несколькими видами отношений
между актерами и вариантами использования:
 ассоциации;
 включения;
 расширения;
 обобщения.
В данном случае используется отношение ассоциация.

17
Отношение ассоциации – ассоциация служит для обозначения
специфической роли актера при его взаимодействии с отдельным вариантом
использования.
На диаграмме вариантов использования, так же, как и на других
диаграммах, отношение ассоциации обозначается сплошной линией
между актером и вариантом использования. Такая линия может содержать
дополнительные обозначения, например, имя.
1.2 Анализ логической модели ИС, построение UML диаграмм
классов проекта

Рисунок 5 – Логическая модель рынка


Логическая модель – поддерживает, прежде всего, функциональные
требования, предъявляемые к системе, то есть те услуги, которые она должна
предоставлять конечным пользователям [9].
18
С помощью языка UML статические аспекты этого вида можно
передавать диаграммами классов и объектов.
Диаграмма классов содержит детальную информацию об архитектуре
программной системы, может содержать интерфейсы, пакеты, отношения и
даже отдельные экземпляры классификаторов, такие как объекты и связи.
Создаем диаграмму классов для нашего проекта.
Для большей наглядности имена классов, атрибутов и операций можно
задать на русском языке.
UML-описание логической модели конкуренции на коммерческом
рынке представлена на рисунке 5 на прошлой странице.
Данная структура состоит из трех основных таблиц: Rinok – описывает
функции рынка; Firma – описывает функции одной функции; Strategia –
описывает стратегию поглощения фирм.
Strategia – это класс объекта, который определяет тактику конкуренции.
Однако этот класс не является сущностью в предметной области,
поэтому нужно считать его классом в клиентском модуле.
1.3 Анализ динамической модели ИС, построение UML
динамических диаграмм проекта
Диаграммы деятельности являются динамической частью системы, они
помогают моделировать последовательные и параллельные шаги, а также
переходы из одного состояния в другое, проще говоря, исполняют
определенное поведение в потоке управления системы, визуализируют
алгоритм [10].
Для определения продолжительности потока используются два
состояния – начальное и конечное.
Начальное состояние необходимо для определения начала потока.
Конечное состояние используется для определения точки завершения
потока.

19
Рисунок 6 – Диаграмма деятельности
Далее будет рассмотрена диаграмма деятельности Диаграмма
последовательности действий на рисунке 7 на данной странице.
Диаграмма последовательности действий рассматривает
взаимодействие объектов, упорядоченных во времени.
При запуске программы пользователем, происходит ряд
последовательных действий, как показано на рисунке 7 на следующей
странице:
1) запускается один эксперимент, для начала записи данных;
2) создается рынок, который состоит из N фирм;
3) выбирается тактика: оптимальная или случайная;
20
4) случайным образом фирмам присваивается роль жертвы или
хищника;
5) фирмы-хищники поедают фирмы-жертвы;
6) вышеперечисленный процесс повторяется столько раз, сколько
необходимо Экономисту;

Рисунок 7 – Диаграмма последовательности


1.4 Анализ физической модели ИС, построение UML диаграмм
компонент проекта

Рисунок 8 – Диаграмма компонентов


21
Чтобы создать какую–либо физическую систему необходимо
реализовать все элементы логического представления в конкретные
материальные сущности.
Для описания таких реальных сущностей предназначен другой аспект
модельного представления, а именно физическое представление модели.
Реализация системы осуществляется с помощью разработки
программного кода, определения языка программирования.
Однако даже если программный код разработан, это еще не является
окончательной реализацией проекта.
Программная система будет способна выполнять функции своего
целевого предназначения только в том случае, когда исполняемые модули,
библиотеки классов и процедур, стандартные графические интерфейсы,
файлы баз данных и т.д. будут реализованы в проекте.
Для физического представления моделей в языке UML используются так
называемые диаграммы реализации, которые включают в себя две отдельные
канонические диаграммы: диаграмму компонентов на рисунке 8 на
предыдущей странице и диаграмму развертывания на рисунке 9 на следующей
странице.
1.5 Анализ физической модели ИС, построение UML диаграмм
размещения проекта
Рабочее место Экономиста состоит из ПК, на котором установлена
операционная система Windows, для того, чтобы была возможность
установить Microsoft Word и Microsoft Excel. Далее скачиваем файл
Рынок.docm, в котором находятся компоненты проекта.
При работе, у экономиста несколько вариантов пути решения своей
задачи: 1) бесконечная статистика, с указанием года и количества; 2)
оптимальная стратегия для рынка; 3) сохранение статистических данных в
файловой системе; 4) сохранение статистических данных в XML файле; 5)
создание графика по данным XML файла.
22
Так же при необходимости печати графика или данных XML,
необходимо подключить к ПК принтер, как показано на рисунке 9 на
предыдущей страницу.

Рисунок 9 – Диаграмма развертывания


Выводы по разделу
 Проведен анализ и моделирование предметной области;
 Обоснованы причины создания данного ПО, а именно для того, чтобы
у экономиста появилась возможность имитировать рынок поглощения фирм;
 Приведено UML-описание функциональной, логической,
динамической и физической моделей проекта Рынок нескольких фирм.

23
2 Реализация программного комплекса
2.1 Реализация уровня данных в трехуровневой архитектуре
проекта

Рисунок 10 – Трехуровневая архитектура


Трехуровневая архитектура – это архитектура, включающая в себя три
компонента: клиента, сервер приложений, база данных. Как показано на
рисунке.
Клиент – интерфейсный компонент, представляемый конечному
пользователю. Данный уровень по требованию безопасности не должен иметь
прямых связей с базой данных. На этом уровне обычно выносится только

24
простейшая бизнес-логика: интерфейс авторизации, проверка вводимых
значений на допустимость и соответствие формату, алгоритмы шифрования,
несложные операции с данными – сортировка, группировка, подсчёт значений,
уже загруженными на терминал.
Сервер приложений – компонент, расположенный на втором уровне, на
нем сосредоточена большая часть бизнес-логики другая часть
распространяется на уровень клиента, как и говорилось выше, а также
элементы логики, погруженные в базу данных – процедуры и триггеры.
Реализация данного компонента данного компонента обеспечивается
связующим программным обеспечением. Серверы проектируются таким
образом, чтобы добавление к ним дополнительных экземпляров обеспечивало
горизонтальное масштабирование производительности программного
комплекса и не требовало внесения изменений в программный код
приложения.
Сервер баз данных – обеспечение хранения данных, которая выносится
на отдельный уровень, реализуется, как правилом системами управления
базами данных.
В нашем случае конфигурация всех трех компонентов совмещены на
одной вычислительной машине. Хотя в продуктивных конфигурациях, как
правило используется выделенные вычислительные узлы для сервера баз
данных и клиентской части.
Для реализации проекта «Рынок» используются ряд технологий
программирования, которые связаны между собой, как показано на рисунке
A.1 в приложении.
Структурное программирование:
Центральная технологический принцип структурного
программирования состоит в том, что формулировку алгоритма и его запись в
виде программы рекомендуются выполнять на основе базиса из трех
алгоритмических конструкций, применяя этого принципа будет более ясная
25
структура программы, в особенности, если использовать выделения
структурных уравнений с помощью отступов, что, несомненно, облегчит
поиск в ней ошибок и упростит её модификацию.
Модульное программирование:
С применением модульного программирования появляются
возможности коллективной разработки программ как набора «независимых»
частей, последовательного уменьшения сложности методом разбиения
сложной задачи на более простые подзадачи, наконец, возможности
повторного использования созданного ранее кода.
Объектно-ориентированное программирование:
Суть объективной декомпозиции состоит выделении в предметной
области классов и объектов, а также связей между ними, и лишь потом данных
и алгоритмов, которыми характеризуется каждый класс. Таким образом,
именно классы становятся основным «строительным блоком» в объектно-
ориентированном программирование, тогда как ранее таковыми блоками
являлись алгоритмы.
Компонентное программирование:
Компонентное программирование – представляет собой развитие
объектно-ориентированной технологии. В отличие от ООП введен следующий
уровень абстракции – классы объединяются в компоненты.
Компонент:
 программный код в виде самостоятельного модуля;
 может быть использован в неизменном виде;
 может допускать настройку;
 обладает поведением или же функциональностью.
Основной принцип компонентного программирования: сборка
приложения из готовых компонент, в общем случае, написанных на разных
языках.

26
Компонент изолирован от внешнего мира своим интерфейсом – набором
методов или же сигнатурами. Компонентная программа – набор независимых
компонент, связанных друг с другом посредством интерфейсов.
В сравнении с двухуровневой структурой клиент-сервер или файл-
сервер архитектурной трёхуровневая архитектура обеспечивает, как правило,
большую масштабируемость, за счет горизонтальной масштабируемости
сервера приложений и мультиплексирования соединений, большую
конфигурируемость, за счет изолированности уровней друг от друга.
Реализация приложений, доступных из веб-браузера или из тонкого клиента,
как правило, подразумевает развёртывание программного комплекса в
трёхуровневой структуре. При этом обычно разработка трёхзвенных
программных комплексов сложнее, чем для двухзвенных, также наличие
дополнительного связующего программного обеспечения может налагать
дополнительные издержки в администрировании таких комплексов.
Реализация проекта текущей курсовой работы распадается на три части
подпроекта:
 создание проекта «Рынок» – набора утилитных программ для
формирования статистических данных;
 реализация процесса сохранения статистических данных в двух
способах: в файловой системе и XML файле;
 создание программы для проекта, которая формирует график по
сохраненным данных.
Для создания данного проекта был использован язык программирования
VBA (Visual Basic for Applications), на котором были написаны все офисные
программы, по типу MS Word, MS Excel, которые нам и необходимы [15].
Благодаря этому, информацию можно интегрировать из MS Word в MS
Excel, через XML файлы.
В Visual Basic for Applications есть модули, классы, подключаемые
компоненты
27
Рисунок 11 – Компоненты VBA
На рисунке выше под номером 11 желтым цветом обведен набор
модулей классов который представляет программную реализацию объектной
модели предметной области Рынок нескольких фирм. Другими словами, это
программная реализация логической модели диаграмм классов.
Классы созданные в результате разработки проекта:
 Firma, листинг 2;
 IStrategia, листинг 3;
 Rinok, листинг 4;
 Statistika, листинг 5;
 StrategiaOPT, листинг 6;
 StrategiaRND, листинг 7.
Зеленым цветом обведен набор компонентов, который представляет
подключаемые программы – объектные библиотеки, которые предоставляют
клиентским программам нужные услуги посредством своих объектов.
Компоненты подключенные в результате разработки проекта:
 Visual Basic for Applications;
 Microsoft Word 16.0 Object Library;
28
 OLE Automation;
 Normal;
 Microsoft Office 16.0 Object Library;
 Microsoft Forms 2.0 Object Library;
 Microsoft Scripting Runtime;
 Microsoft Excel 16.0 Object Library;
 Microsoft XML, v6.0.
Красным цветом обведен основной документ проекта, в котором
используются компоненты и классы для написания программы, листинг 1.

Рисунок 12 – XML файл

29
Для уровня данных использован компонент XML как показано на
рисунке 12 на прошлой странице и использование файловой системы, как
показано на рисунке 13 на данной странице.
Благодаря подключенной библиотеке, можно работать с XML файлами:
создавать, записывать и читать, что упрощает интеграцию в другие системы,
в нашем случае в MS Excel [19].
Язык разметки XML предназначен для удобного кодирования и чтения
информации машинным и ручным способом. Структура файла и его
параметры прописываются с помощью тегов, атрибутов и препроцессоров.

Рисунок 13 – Данные в файловой системе

30
2.2 Реализация уровня бизнес правил в трехуровневой архитектуре
проекта
Формирование бизнес правил происходит благодаря подключенным
компонентам и созданным классами – объектами.
Firma – класс, который проверяет живая ли фирма или её уже съели и
создает коллекцию съеденных фирм и указывает их количество;
IStrategia – присваивает фирме статус хищника, который поглощает
фирмы-жертвы;
Rinok – производит процесс поглощения фирм;
Statistika – класс для создании XML файла;
StrategiaOPT – класс формирующий оптимальную статистику;
StrategiaRND – класс формирующий случайную статистику.
2.3 Реализация уровня пользовательского интерфейса в
трехуровневой архитектуре проекта

Рисунок 14 – Пользовательский интерфейс


31
Для реализации интерфейса данного проекта была выбрана среда
разработки MS Word 2016.
Выше представлен интерфейс проекта «Рынок» на рисунке 14 на
предыдущей странице.
Как можно видеть, при запуске проекта «Рынок», нас встречает меню, в
котором:
1) Две ячейки с N и K, N – это количество фирм на рынке, K – это
количество необходимых поглощений, для того, чтобы фирма стала успешной
в этом году.
2) Три кнопки:
 Синяя – запускает процесс формирования случайной стратегии,
использую переменные N и K;
 Оранжевая – запускает процесс формирования оптимальной
стратегии, использую переменные N и K;
 Красная – останавливает любой процесс, совершаемой данной
программой.
3) Далее представлена таблица «Эксперименты для N фирм», в которой
выводятся статистические данные сформированные в процессе работы
данного ПО.
На рисунке 14 на предыдущей странице представлена таблица,
показывающая результат оптимальной стратегии.

Рисунок 15 – таблица со случайными данными

32
На рисунке 15 на предыдущей странице представлена таблица,
показывающая результат случайной стратегии:
На первой строке указано рекордное количество успешных фирм и в
каком году это произошло, в нашем случае в 3 году – успешных фирм 6;
На второй строке указывается какой год сейчас имитируется и сколько
в нем успешных фирм, в нашем случае идет 52 год, в котором 3 успешных
фирм;
4) Дальше расположены две синие кнопки, предназначенные для
создания и удаления папки со статистическими данными.

Рисунок 16 – Статистических данные в файловой системе


На рисунке 16 на данной странице показано слева направо путь папки со
статистическими данными:
Сначала создается папка statistica, в которой далее создаются папки под
номерами с 1 до 99 – это перечисление годов, то есть каждая папка, это
отдельный год, в каждой папке создается текстовый документ stat.txt, его
описание расположено на рисунке 13.

33
5) Первая оранжевая кнопка предназначены для создания XML файла со
статистическими данными.
6) Вторая оранжевая кнопка предназначена для формирования графика
по статистическим данным XML файла, как показано на рисунке 17 на данной
странице [26].

Рисунок 17 – График статистических данных


2.4 Создание инсталляционного пакета для ИС
Создания инсталляционного пакета напрямую зависит на этап
развертывание программного продукта, поэтому необходимо тщательно
проработать инсталляцию пакета.
Для этого была выбрана программа Inno Setup 6.1.2, представлена на
рисунке 18 на следующей странице. У данной утилиты множество плюсов:
 Поддержка современных версий Windows;
 Создает одиночные EXE файлы для облегчения установки и
распространение программ;
 Имеет собственную среду программирования – Object Pascal;
34
 Доступен исходный код;
 Имеет мастер для создания инсталляторов, в который входит
множество функций.
Таким образом было создан EXE файл для установки проекта «Рынок»,
«РынокSetup.exe».

Рисунок 18 – Окно Inno Setup 6.1.2


Выводы по разделу
 Сформирован уровень данных, который представлен в виде текстовых
документов в файловой системе и в виде XML файлов;
 Реализован уровень бизнес правил, в который входит ряд
компонентов и классов для формирования статистики;
 Создан пользовательский интерфейс, который включает в себя ряд
кнопок для формирования статистики, её сохранения и реализации по ней
графиков в Excel.
 Создан инсталляционный пакет для проекта «Рынок», с помощью
программы Inno Setup 6.1.2.

35
3 Документирование проекта
3.1 Порядок ввода в эксплуатацию проекта информационной
системы
Для ввода в эксплуатацию имитационного программного продукта
«Рынок», необходимо иметь на персональном компьютере ОС, например,
Windows 7 и Microsoft Office 2016 и выше или MS Word 2016 и MS Excel 2016
и выше.
Для начала ПО необходимо скачать на ПК и установить, с помощью EXE
файла «Рынокsetup.exe». Далее, при наличии на ПК MS Word 2016, можно
будет его открыть, так как данный программный продукт работает только в
среде Word.
После открытия файла можно начинать работу, прописав исходных
данных в определенных формах проекта.
3.2 Руководство администратора информационной системы
Администратор Проекта должен первоочередное установить
лицензионную версию MS Word 2016 и MS Excel 2016, так как данная база
данных работает в среде Word и Excel.
Чтобы открыть программный продукт, необходимо установить
программу, с помощью инсталлятора «Рынокsetup».
При открытии проекта «Рынок» в MS Word 2016 в верхней панели
содержится меню разработчика, в котором открывается режим конструктора,
также в меню находится раздел макросов и Visual Basic for Applications.
Чтобы открыть для редактирования ПП, необходимо перейти в режим
конструктора, в котором можно менять формы объектов, также при двойном
щелчке по объекту происходит переход в Visual Basic for Applications, в
котором уже прописан данный объект.
В Visual Basic for Applications можно перейти, если нажать на
соответствующую кнопку в меню разработчика.

36
Если необходимо создать новый объект, то это можно сделать с
помощью конструктор, расположенных на вкладке «Разработчик», в отделе
«Элементы управления».
Администратору необходимо установить ПО «Рынок», с помощью
инсталлятора «Рынокsetup».
3.3 Руководство пользователя для клиентских частей проекта
Пользователь клиентской части должен первоочередное установить
лицензионную версию MS Word 2016 и MS Excel 2016, так как данная база
данных работает только в среде Word.
Чтобы открыть программный продукт, необходимо установить файл, с
помощью инсталлятора «Рынокsetup».
Как можно видеть, при запуске проекта «Рынок», нас встречает меню, в
котором:
1) Две ячейки с N и K, N – это количество фирм на рынке, K – это
количество необходимых поглощений, для того, чтобы фирма стала успешной
в этом году.
2) Три кнопки:
 Синяя – запускает процесс формирования случайной стратегии,
использую переменные N и K;
 Оранжевая – запускает процесс формирования оптимальной
стратегии, использую переменные N и K;
 Красная – останавливает любой процесс, совершаемой данной
программой.
3) Далее представлена таблица «Эксперименты для N фирм», в которой
выводятся статистические данные сформированные в процессе работы
данного ПО.
На рисунке 14 представлена таблица, показывающая результат
оптимальной стратегии.

37
На рисунке 16 показано слева направо путь папки со статистическими
данными:
Сначала создается папка statistica, в которой далее создаются папки под
номерами с 1 до 99 – это перечисление годов, то есть каждая папка, это
отдельный год, в каждой папке создается текстовый документ stat.txt, его
описание расположено на рисунке 13.
5) Первая оранжевая кнопка предназначены для создания XML файла со
статистическими данными.
6) Вторая оранжевая кнопка предназначена для формирования графика
по статистическим данным XML файла, как показано на рисунке 17.
Выводы по разделу
 Расписан порядок развертывания проекта «Рынок» на персональный
компьютер;
 Для администратора написано руководство по использованию данной
программой – то, как как редактировать весь программный продукт;
 Указаны основные функции, применимые пользователем при работе
в проекте «Рынок».

38
4 Оценка результатов создания информационной системы с точки
зрения исполнителя проекта, условного заказчика и условного конечного
пользователя
Оценка разработчика:
С точки зрения разработчика реализовано основные функций для
имитации рынка и ведения статистических данных. Функции представляют
собой: минимальный набор для формирования статистики, её сохранения и
интерпретации её в график данных.
Оценка заказчика:
Все необходимые функции реализованы и при этом потрачено минимум
средств, что и является главным плюсом обычных офисных программ,
например, как MS Word 2016 и MS Excel 2016. Данное ПО позволит выводить
статистические данные для экономиста, при этом в любом виде, в текстовом
или графическом.
Оценка пользователя:
У данного продукта легкий интерфейс, что облегчает работу с данными.
Несмотря на не большое количество функций данная программа
удовлетворяет основным потребностям экономиста.
Выводы по разделу
Даны оценки готового проекта «Рынок» с точки зрения разработчика,
заказчика и пользователя, которые раскрывают главные плюсы данной
программы.

39
ЗАКЛЮЧЕНИЕ
1) Проанализирована предметная область – процесс поглощения фирм
друг другом, определены виды фирм в данном процессе – хищник и жертва.
Выбрана среда для реализации данного проекта по курсовой работе – VBA;
2) С помощью UML в программе StarUML смоделирована модель рынка:
функциональной модели ИС, логической модели ИС, динамической модели
ИС, физической модели компонентов ИС, физической модели размещения
проекта ИС;
3) Реализована физическая модель: созданы классы и подключены
дополнительные компоненты в VBA. На их основе написан код
имитационного продукта. Также реализован пользовательский интерфейс;
4) Описан процесс ввода проекта «Рынок» в эксплуатацию. Расписаны
руководства для Администратора и пользователя данного продукта;
5) Проведены оценки результатов создания данного ПО с точки зрения:
Разработчика, заказчика и пользователя.

40
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
1. Технологии программирования (группы 29 49) 2021 [Электронный
ресурс] URL: http://85.143.215.29/moodle37/course/ (дата обращения:20.05.2021).
2. Технологии программирования (курсовые работы группы 29 49) 2021
[Электронный ресурс] URL: http://85.143.215.29/moodle37/course/ (дата
обращения:20.05.2021).
3. Слияния на карантине [Электронный ресурс] URL:
https://www.kommersant.ru/ (дата обращения: 20.05.2021).
4. ФАС В СМИ: СДЕЛКИ СЛИЯНИЙ И ПОГЛОЩЕНИЙ: ЧТО НУЖНО
УЧЕСТЬ В НОВЫХ РЕАЛИЯХ? ПРАКТИЧЕСКИЕ СОВЕТЫ ОТ
ЭКСПЕРТОВ [Электронный ресурс] URL: https://fas.gov.ru (дата обращения:
20.05.2021).
5. UML-диаграммы классов [Электронный ресурс] URL: https://prog-
cpp.ru (дата обращения: 20.05.2021).
6. Диаграммы использования [Электронный ресурс] URL:
http://book.uml3.ru/sec_1_5 (дата обращения: 20.05.2021).
7. Виды диаграмм UML [Электронный ресурс] URL: https://www.intuit.ru
(дата обращения: 20.05.2021).
8. Романов В.Ю. Объектно-ориентированные CASE-технологии Язык
UML 2.5. [текст] / В.Ю. Романов. – Москва: Издательство ФГБОУ ВО
«Московский государственный университет им. М.В.Ломоносова», 2018. –
211 с.
9. Построение логической модели данных [Электронный ресурс] URL:
https://studfile.net/preview/6219484/page:3/ (дата обращения: 2.05.2021).
10. Динамическая модель технического объекта на макроуровне
[Электронный ресурс] URL:
https://studref.com/649800/tehnika/dinamicheskaya_model_tehnicheskogo_obekta_m
akrourovne (дата обращения: 2.05.2021).

41
11. Статические и динамические модели [Электронный ресурс] URL:
https://studfile.net/preview/7317653/page:2/ (дата обращения: 2.05.2021).
12. Моделирование на Uml [Электронный ресурс] URL:
http://book.uml3.ru (дата обращения: 20.05.2021).
13. Моделирование на UML: Учебно-методическое пособие.
[Электронный ресурс] URL: http://window.edu.ru (дата обращения: 20.05.2021).
14. Унифицированный язык моделирования (UML) [Электронный
ресурс] URL: http://www.interface.ru (дата обращения: 20.05.2021).
15. Михеев Р. VBA и программирование в MS Office для пользователей
[текст] / Р. Михеев, 2018. – 211 с.
16. Кудрявцев Н.Г., Кудин Д. В., Беликова М. Ю. Программирование на
VBA MS Excel: учебное пособие [текст] / Н. Г. Кудрявцев, Д. В. Кудин, М. Ю.
Беликова  Горно-Алтайск: РИО ГАГУ, 2015.  116 с.
17. Комолова, Н. В. Программирование на VBA в Excel 2016.
Самоучитель [текст] / Н. В. Комолова, Е. С. Яковлева. — СПб.: БХВ-
Петербург, 2017. — 432 с.
18. Теория и практика UML. [Электронный ресурс] URL: http://it-
gost.ru/articles/view_articles/96 (дата обращения: 2.05.2021).
19. Шувалова, И.С. Программирование на языке VBA: методические
указания к практическим и лабораторным работам по дисциплине
«Информатика» [текст] / И.С. Шувалова. – М.: МАДИ, 2017. – 92 с
20. Шоев Р. В., Сурядный А. С. Microsoft Office 2016: учебный курс [Текст]
/ Р.В. Шоев, А.С. Сурядный. – Ростов-на-Дону: Феникс, 2015. -500с.
21. Разработка и внедрение информационной системы [Электронный
ресурс]: URL: https://intuit.ru/studies/courses/13833/1230/lecture/24067 (дата
обращения: 15.04.2021).
22. 10.4 Коллекция Documents и объекты Document [Электронный ресурс]
URL:

42
http://www.askit.ru/custom/vba_office/m10/10_04_01_word_documents_collection.h
tm (дата обращения: 10.05.2021).
23. Объекты Selection [Электронный ресурс] URL:
http://www.askit.ru/custom/vba_office/m10/10_05_01_word_selection_object.htm
(дата обращения: 10.05.2021).
24. 10.5.3 Работа с объектом Range, его свойства и методы [Электронный
ресурс] URL:
http://www.askit.ru/custom/vba_office/m10/10_05_03_word_range_object.htm (дата
обращения: 10.05.2021).
25. Головин И.Г., Баева Н.В. Языки управления приложениями: Учебно-
методическое пособие. [Текст] / И.Г. Головин, Н.В. Баева. — М.: Издательский
отдел факультета ВМиК МГУ имени М.В. Ломоносова (лицензия ИД № 05899
от 24.09.2001); МАКС Пресс, 2015. — 92 с.
26. Петрова, В.А. Программирование и решение сложных задач в Excel:
учеб. пособие [Текст] / В.А.Петрова. – Екатеринбург: Урал. ун-та, 2016. – 88 с.
27. Джелен, Билл, Сирстад, Трейси. Применение VBA и макросов в
Microsoft Excel. [Текст]: Пер. с англ. М. : Издательский дом ‘‘Вильямс’’, 2006.
624 с.: ил. Парал. тит. англ.
28. Кудлаев А.А. Программирование в среде MS EXCEL. Учебно-
методическое пособие по курсу «Технология программирования». [Текст] /
А.А. Кудлаев М. — Москва: МИИГАиК, 2016. — 35 с.
29. ГОСТ 7.32-2017. Система стандартов по информации, библиотечному
и издательскому делу. Отчет о научно-исследовательской работе. Структура и
правила оформления. Принято Межгосударственным советом по
стандартизации, метрологии и сертификации (протокол от 25.09.2017 г.
№9103*П).
30. ГОСТ 7.1-2003. Система стандартов по информации, библиотечному и
издательскому делу. Библиографическая запись. Библиографическое описание.
Общие требования и правила составления. (Дата ввода 01.07.2004).

43
ПРИЛОЖЕНИЕ А
Технология программирования

Рисунок А.1 – Виды технологии программирования


44
ПРИЛОЖЕНИЕ Б
Листинг
Листинг 1 – ThisDocument
Function FinAnaliz(oRinok, K) As String
' Ýòà ôóíêöèÿ âîçâðàùàåò ìíîãîñòðî÷å÷íûé òåêñò ñäåðæàùèé ïîëíûé îò÷åò î
ñîñòîÿíèè êîíêóðåíöèè â äàííûé ìîìåíò (â òåêùåì ñîñòîÿíèè îáúåêòà oRinok)
Dim re As String
re = ""
Dim e As Firma
'Debug.Print
Dim npp As Long
npp = 0
Dim ÊîëÕîðÎò÷
ÊîëÕîðÎò÷ = 0
For Each e In oRinok.CollectionFirms
npp = npp + 1
Æåëóäîê = "{"
Dim j
For j = 1 To e.CountEaten
Æåëóäîê = Æåëóäîê & e.Batteries.Item(j).Id & " "
Next j
Æåëóäîê = Æåëóäîê & "}"
ÆèâàÿËè = IIf(e.Alive, "Æèâàÿ", "Ñúåòàÿ")
uspex = "Íå óñïåøíàÿ"
If e.CountEaten >= K Then
uspex = "Äà óñïåøíàÿ"
ÊîëÕîðÎò÷ = ÊîëÕîðÎò÷ + 1
End If

45
Debug.Print e.Id, ÆèâàÿËè, "Óñïåëà ïîãëîòèòü: " & e.CountEaten & "
Ñòàòóñ: " & uspex, " Æåëóäîê: " & Æåëóäîê
re = re & Chr(13)
re = re & e.Id & " "
re = re & ÆèâàÿËè & " "
re = re & "Óñïåëà ïîãëîòèòü: " & e.CountEaten
re = re & " Ñòàòóñ: " & uspex
re = re & " Æåëóäîê: " & Æåëóäîê
Next
Debug.Print "Èòîãî óñïåøíûõ ôèðì: " & ÊîëÕîðÎò÷
re = re & Chr(13)
re = re & "Èòîãî óñïåøíûõ ôèðì: " & ÊîëÕîðÎò÷
FinAnaliz = re
End Function
Function countGoodFirms(oRinok, K) As Long
Dim e As Firma
Dim npp As Long
npp = 0
Dim ÊîëÕîðÎò÷
ÊîëÕîðÎò÷ = 0
For Each e In oRinok.CollectionFirms
npp = npp + 1
If e.CountEaten >= K Then
ÊîëÕîðÎò÷ = ÊîëÕîðÎò÷ + 1
End If
Next
countGoodFirms = ÊîëÕîðÎò÷
End Function
Function DoOneYear(oRinok, oStrategia) As Boolean
46
'Çàïóñê îäíîãî ãîäà - òî åñòü ïîêà ôèðì > 1 ïðîöåññ ïîåäàíèÿ ïðîäîëæàåòñÿ
Do While oRinok.LiveCompanies.Count > 1
If oStrategia.IStrategia_doChoice(oRinok) Then
Call
oStrategia.IStrategia_agressor.Eat(oStrategia.IStrategia_jertva)
End If
Loop
DoOneYear = True
End Function
Sub DoBesconechnoNK(N, K)
' Ççàïóñêàåì öèêë (áåñêîíå÷íî ìîãî ðàç (ëåò) íîâóþ êîíêóðåíöèþ)
' ïðè ýòîì äèàìèêó èçîáðàæàåì â "Òàáëèöà 2Ýêñïåðèìåíòû äëÿ N ôèðì"
'Íàéäåì ðàáî÷óþ òàáëèöó äëÿ ðàáîòû ñ íåé:
' ïðîáëåìà - êàê íàéòè íóæíóþ òàáëèöó
' ïîêà ñ÷èòàåì ÷òî ýòî 2-ÿ òàáëèöà
Dim t As Word.Table
Set t = Word.ActiveDocument.Tables(1)
'Î÷èñòèì ñòàðûå äàííûå â òàáëèöå :
t.Rows(3).Cells(1).Range.Text = ""
t.Cell(3, 2).Range.Text = ""
t.Cell(3, 3).Range.Text = ""
t.Rows(2).Cells(1).Range.Text = ""
t.Cell(2, 2).Range.Text = ""
t.Cell(2, 3).Range.Text = ""
cntMaximum = 0
Dim CurrentYear
CurrentYear = 1
Do While True
DoEvents
47
Dim oRinok As Rinok
Set oRinok = New Rinok
Call oRinok.MyConstructor(N)
Dim oStrategia As New StrategiaRND
Dim ok As Boolean
ok = DoOneYear(oRinok, oStrategia)
Dim cntGoodFirms
cntGoodFirms = countGoodFirms(oRinok, K)
t.Rows(3).Cells(1).Range.Text = CurrentYear
t.Rows(3).Cells(2).Range.Text = cntGoodFirms
If cntGoodFirms > cntMaximum Then
cntMaximum = cntGoodFirms
t.Rows(2).Cells(1).Range.Text = CurrentYear
t.Rows(2).Cells(3).Range.Text = cntMaximum
Call oRinok.FinAnaliz(K)
End If
CurrentYear = CurrentYear + 1
DoEvents
Loop
End Sub
Private Sub CommandButton1_Click()
Call DoBesconechnoNK(CLng(TextBox2.Value),
CLng(TextBox3.Value))
End Sub
Private Sub CommandButton2_Click()
Dim t As Word.Table
Set t = Word.ActiveDocument.Tables(1)
'Î÷èñòèì ñòàðûå äàííûå â òàáëèöå 1:
t.Rows(3).Cells(1).Range.Text = ""
48
t.Cell(3, 2).Range.Text = ""
t.Cell(3, 3).Range.Text = ""
t.Rows(2).Cells(1).Range.Text = ""
t.Cell(2, 2).Range.Text = ""
t.Cell(2, 3).Range.Text = ""
N = CLng(TextBox2.Value)
K = CLng(TextBox3.Value)
Dim oRinok As New Rinok
Call oRinok.MyConstructor(N)
Dim oStrategia As New StrategiaOPT
oStrategia.K = K
Do While oRinok.LiveCompanies.Count > 1
If oStrategia.IStrategia_doChoice(oRinok) Then
Call oStrategia.IStrategia_agressor.Eat(oStrategia.IStrategia_jertva)
t.Rows(3).Cells(1).Range.Text = 1
End If
Loop
t.Rows(3).Cells(2).Range.Text = countGoodFirms(oRinok, K)
Call oRinok.FinAnaliz(K)
f = (N \ (K + 1)) + (N Mod (K + 1))
End Sub
Private Sub CommandButton3_Click()
End
End Sub
Private Sub CommandButton5_Click()
' Óäàëèòü ïàïêó ñòàòèñòèêè
Dim oFSO As New Scripting.FileSystemObject
' Ïðîâåðèì èëè ñîçäàäèì êîðíåâóþ ïàïêó äëÿ ñòàòèñòèêè
Dim sPathToRoot
49
sPathToRoot = Application.ActiveDocument.Path & "\statistica"
'Debug.Print sPathToRoot
Dim oFolderRoot As Scripting.Folder
If oFSO.FolderExists(sPathToRoot) Then
Call oFSO.DeleteFolder(sPathToRoot)
MsgBox "Ïàïêà " & sPathToRoot & " óäàëåíà!"
Else
MsgBox "Ïàïêà " & sPathToRoot & " íå íàéäåíà! Óäàëÿòü íå÷åãî!"
End If
End Sub
Private Sub CommandButton4_Click()
'Çàïóñê ýêñïåðèìåòîâ ñ ôîðìèðîâàíèåì ñòàòèñòèêè â ôàéëîâîé ñèñòåìå
Dim oFSO As New Scripting.FileSystemObject
' Ïðîâåðèì èëè ñîçäàäèì êîðíåâóþ ïàïêó äëÿ ñòàòèñòèêè
Dim sPathToRoot
sPathToRoot = Application.ActiveDocument.Path & "\statistica"
'Debug.Print sPathToRoot
Dim oFolderRoot As Scripting.Folder
If Not oFSO.FolderExists(sPathToRoot) Then
Set oFolderRoot = oFSO.CreateFolder(sPathToRoot)
Else
Set oFolderRoot = oFSO.GetFolder(sPathToRoot)
End If
Dim CurrentYear
CurrentYear = 1
Dim N As Long
N = TextBox2.Value
Dim K As Long
K = TextBox3.Value
50
Do While CurrentYear < 100
DoEvents
'Ïðîâåäåì êîíêóðåíöèþ â òåêóùåì ãîäó CurrentYear (ïóñòü ôèðìû ïîåäÿò äðóã
äðóãà äî êîíöà)
Dim oRinok As Rinok
Set oRinok = New Rinok
Call oRinok.MyConstructor(N)
Dim oStrategia As New StrategiaRND
Dim ok As Boolean
ok = DoOneYear(oRinok, oStrategia)
Dim cntGoodFirms
cntGoodFirms = countGoodFirms(oRinok, K)
'Òåïåðü íàì âñå èçâåñòíî ïðî ñîñòîÿíèå Ðûíêà â êîíöå ãîäà
' îðãàíèçóåì âûâîä ñòàò. äàííûõ â ôàéë
Ïðîâåðèì èëè ñîçäàäèì â êîðíåâîé ïàïêå ïîäïàïêó äëÿ ñòàòèñòèêè ãîäà
CurrentYear
Dim sPathToCurrentYear
sPathToCurrentYear = sPathToRoot & "\" & CurrentYear '=
Application.ActiveDocument.Path & "\statistica"
'Debug.Print sPathToRoot
Dim oFolderCurrentYear As Scripting.Folder
If Not oFSO.FolderExists(sPathToCurrentYear) Then
Set oFolderCurrentYear = oFSO.CreateFolder(sPathToCurrentYear)
Else
Set oFolderCurrentYear = oFSO.GetFolder(sPathToCurrentYear)
End If
'Ïðîâåðèì èëè ñîçäàäèì òåêñòîâûé ôàéë äëÿ ñòàòèñòèêè ãîäà CurrentYear
Dim oTextStream As TextStream

51
Set oTextStream = oFSO.CreateTextFile(sPathToCurrentYear &
"\stat.txt", True)
oTextStream.WriteLine Me.FinAnaliz(oRinok, 3)
oTextStream.Close
CurrentYear = CurrentYear + 1
Loop
MsgBox "Ãîòîâî!"
End Sub
Private Sub CommandButton6_Click()
' statistika.XML
Dim oXML As New MSXML2.DOMDocument60
Set oNode = oXML.createElement("statistika")
Set oNode = oXML.appendChild(oNode)
Dim CurrentYear
CurrentYear = 1
Dim N As Long
N = TextBox2.Value
Dim K As Long
K = TextBox3.Value
Do While CurrentYear < 51
DoEvents
'Ïðîâåäåì êîíêóðåíöèþ â òåêóùåì ãîäó CurrentYear (ïóñòü ôèðìû ïîåäÿò äðóã
äðóãà äî êîíöà)
Dim oRinok As Rinok
Set oRinok = New Rinok
Call oRinok.MyConstructor(N)
Dim oStrategia As New StrategiaRND
Dim ok As Boolean
ok = DoOneYear(oRinok, oStrategia)
52
Dim cntGoodFirms
cntGoodFirms = countGoodFirms(oRinok, K)
DoEvents
Call oXML.DocumentElement.setAttribute("Years", CurrentYear)
DoEvents
Set oNode =
oXML.DocumentElement.SelectSingleNode("GoodFirms[@Year=" &
CurrentYear & "]")
If oNode Is Nothing Then
Set oNode = oXML.createElement("GoodFirms")
Set oNode = oXML.DocumentElement.appendChild(oNode)
Call oNode.setAttribute("Year", CurrentYear)
Call oNode.setAttribute("colich", cntGoodFirms)
End If
DoEvents
Call oXML.Save(Word.ActiveDocument.Path & "\statistika.XML")
CurrentYear = CurrentYear + 1
Loop
MsgBox "Ãîòîâî!"
End Sub
Private Sub CommandButton8_Click()
' Ïîñòðîèòü ãðàôèê ïî äàííûì statistika.XML
' 1. Çàãðóçèì XML äîêóìåíò:
Dim oXML As MSXML2.DOMDocument60
Set oXML = New MSXML2.DOMDocument60
oXML.async = False
Dim sPathToFile
sPathToFile = Word.ActiveDocument.Path & "\statistika.XML"
If Not oXML.Load(sPathToFile) Then
53
MsgBox "Ôàéë íå íàéäåí"
Exit Sub
End If
Debug.Print oXML.XML
' 2. Ïîðàáîòàåì ñ Excel: Ïîñòðîèì òàáëè÷íûé ãðàôèê:
Dim oExcel As Excel.Application
Set oExcel = New Excel.Application
oExcel.Visible = True
Dim wb As Excel.Workbook
Set wb = oExcel.Workbooks.Add
oExcel.Worksheets(1).Select
Dim c As Long
c=2
oExcel.Cells(1, 1) = "Ãîä"
oExcel.Cells(1, 2) = "Êîëè÷åñòâî"
For X = 0 To 50
oExcel.Cells(c, 1) = X
Dim sXpath
sXpath = "GoodFirms[@Year=" & X & "]"
Dim curColich
Dim oNode
Set oNode = oXML.DocumentElement.SelectSingleNode(sXpath)
If oNode Is Nothing Then
curColich = 0
Else
curColich = oNode.getAttribute("colich")
End If
oExcel.Cells(c, 2) = curColich
c=c+1
54
Next X
With Charts.Add
.SetSourceData Source:=Worksheets(1).Range("B3:B52")
' Çàãîëîâîê
.HasTitle = True
.ChartTitle.Text = "Ñòàòèñòèêà"
.Activate
End With
End Sub
Листинг 2 – Firma
Public Id As Long
Public Alive As Boolean ' живая ли эта фирма?
Public Batteries As Collection ' Коллекция съетых этой фирмой жертв
Private Sub Class_Initialize()
Set Batteries = New Collection
Alive = True
End Sub
Public Sub Eat(oVictim As Firma) ' Съесть Жертву
oVictim.Alive = False
Call Batteries.Add(oVictim)
End Sub
Public Function CountEaten() As Long 'СколькоСъедено
CountEaten = Batteries.Count
End Function
Листинг 3 – IStrategia
Public agressor As Firma
Public jertva As Firma
Public Function doChoice(oRinok As Rinok) As Boolean
End Function
55
Листинг 4 – Rinok
'Класс Rinok
Public CollectionFirms As Collection
Public Function MyConstructor(N)
'(псевдо)Конструктор
cntFirms = N
Set CollectionFirms = New Collection
Dim o As Firma
For i = 1 To cntFirms
Set o = New Firma
o.Id = i
Call CollectionFirms.Add(o) ', "k" & o.Id)
Next
End Function
Public Function LiveCompanies() As Collection
'Живые фирмы
Set LiveCompanies = New Collection
Dim e As Firma
For Each e In Me.CollectionFirms
If e.Alive Then
Call LiveCompanies.Add(e)
End If
Next
End Function
Function FinAnaliz(K) As Long
Dim e As Firma
Dim npp As Long
npp = 0
Dim КолХорОтч
56
КолХорОтч = 0
For Each e In Me.CollectionFirms
npp = npp + 1
Желудок = "{"
Dim j
For j = 1 To e.CountEaten
Желудок = Желудок & e.Batteries.Item(j).Id & " "
Next j
Желудок = Желудок & "}"
ЖиваяЛи = IIf(e.Alive, "Живая", "Съетая")
uspex = "Не успешная"
If e.CountEaten >= K Then
uspex = "Да успешная"
КолХорОтч = КолХорОтч + 1
End If
Debug.Print e.Id, ЖиваяЛи, "Успела поглотить: " & e.CountEaten & "
Статус: " & uspex, " Желудок: " & Желудок
Next
Debug.Print "Итого успешных фирм: " & КолХорОтч
FinAnaliz = КолХорОтч
'Debug.Print
End Function
Листинг 5 – Statistika
Public oXML As MSXML2.DOMDocument
Private Sub Class_Initialize()
Set oXML = New MSXML2.DOMDocument
Set oNode = oXML.createElement("Ststistika")
Set oNode = oXML.appendChild(oNode)
Call oXML.DocumentElement.setAttribute("DateTimeCreated", Now)
57
End Sub
Public Function Save(sName)
Dim sPath
sPath = Application.ActiveDocument.Path & "\" & sName
oXML.Save (sPath)
End Function
Листинг 6 – StrategiaOPT
Implements IStrategia
Private m_agressor As Firma
Private m_jertva As Firma
Public K As Long
Private Property Set IStrategia_agressor(ByVal RHS As Firma)
Set m_agressor = RHS
End Property
Public Property Get IStrategia_agressor() As Firma
Set IStrategia_agressor = m_agressor
End Property
Public Function IStrategia_doChoice(oRinok As Rinok) As Boolean
'Тактика: ПроизвестиОптимальныйВыборУчастниковНям
Set m_agressor = Nothing
Set m_jertva = Nothing
If oRinok.LiveCompanies.Count < 2 Then
IStrategia_doChoice = False
Exit Function
End If
Dim oFirma As Firma
For Each oFirma In oRinok.LiveCompanies
If oFirma.Batteries.Count < K Then
Set m_agressor = oFirma
58
' жертва:
For Each oFirmaTest In oRinok.CollectionFirms
If (oFirmaTest.Id <> oFirma.Id) And (oFirmaTest.Alive) Then
Set m_jertva = oFirmaTest
IStrategia_doChoice = True
Exit Function
Exit For
End If
Next oFirmaTest
End If
Next oFirma
Exit Function
End Function
Private Property Set IStrategia_jertva(ByVal RHS As Firma)
End Property
Public Property Get IStrategia_jertva() As Firma
Set IStrategia_jertva = m_jertva
End Property
Листинг 7 – StrategiaRND
Implements IStrategia
Private m_agressor As Firma
Private m_jertva As Firma
Private Property Set IStrategia_agressor(ByVal RHS As Firma)
End Property
Public Property Get IStrategia_agressor() As Firma
Set IStrategia_agressor = m_agressor
End Property
Public Function IStrategia_doChoice(oRinok As Rinok) As Boolean
'ПроизвестиСлучайныйВыборУчастниковНям
59
Dim КоличЕствоЖивых
КоличЕствоЖивых = oRinok.LiveCompanies.Count
Dim firstIDX, SecondIDX
Call Randomize(-Time)
'на каждом шаге один живой съедает другого живого:
' случайным образом
КоличЕствоЖивых = oRinok.LiveCompanies.Count
' Сгенерим два разных Членов
firstIDX = 1 + Int(Rnd * КоличЕствоЖивых)
SecondIDX = 1 + Int(Rnd * КоличЕствоЖивых)
Do While firstIDX = SecondIDX
SecondIDX = 1 + Int(Rnd * КоличЕствоЖивых)
Loop
Set m_agressor = oRinok.LiveCompanies.Item(firstIDX)
Set m_jertva = oRinok.LiveCompanies.Item(SecondIDX)
IStrategia_doChoice = True
End Function
Private Property Set IStrategia_jertva(ByVal RHS As Firma)
End Property
Public Property Get IStrategia_jertva() As Firma
Set IStrategia_jertva = m_jertva
End Property

60

Вам также может понравиться