Создание бизнес-модели предприятия, согласно инструментарию планирования бизнес-процессов
Оглавление
Введение
Теория бизнес-процессов впервые появилась меньше двадцати лет назад и сначала была встречена с полным равнодушием. Даже те немногие, кто заинтересовался идеей, выражали скептицизм в отношении ее реальных достоинств, и только в связи с массовым внедрением Всеобщего качества в организациях идея управления бизнес-процессами начала набирать обороты.
Нет смысла спорить о том, что управление бизнес-процессами один из важнейших инструментов управления в современной компании. В будущем роль управления процессами будет только возрастать. Виртуализация, автоматизация производства, повсеместное использование роботов приведут к тому, что ограничением при повышении эффективности бизнеса будут не сырье и оборудование, а применяемые способы создания ценности. Другими словами, алгоритмы создания продуктов и услуг. Умение управлять бизнес-процессами станет одной из ключевых компетенций менеджеров среднего звена.
На сегодняшний день инжиниринг, направленный на проектирование бизнес-процессов в целях достижения улучшения деятельности организации, является одним из самых современных инструментов и ключевой точкой управления любой организации. Постоянное совершенствование бизнеса означает способность делать все процессы быстрее с меньшими затратами, учитывая качество продукции и уровень обслуживания клиентов.
В современных условиях многие компании повышают свою
конкурентоспособность за счет создания холдинговых структур, объединяя тем самым под общим управлением процессы разработки, производства и дистрибуции товаров и услуг. Интегрированная холдинговая структура - совокупность материнской компании и контролируемых ею дочерних предприятий, связанных единым технологическим циклом и объединенных одним видом бизнеса, с целью снижения общих издержек, завоевания новых секторов рынка и повышения конкурентоспособности.
Выпускная квалификационная работа посвящена задачам и проектам из области бизнес-моделирования. В ней систематизирована информация, которая должна помочь более глубокому пониманию значения и особенностей моделирования бизнес-процессов в организациях.
Цель выпускной работы это создание бизнес-модели предприятия, согласно инструментарию планирования бизнес-процессов.
Таким образом, из поставленной цели вытекают следующие задачи:
- ознакомление с основными понятиями и классификацией бизнес-процессов;
- изучение структуры бизнес-процессов;
- моделирование бизнес-процессов
- изучение грамматики бизнес-процессов и её порождение;
- реализация бизнес-процесса на примере конкретного предприятия;
- тестирование реализованного бизнес-процесса;
- анализ результатов.
- Понятие бизнес-процессов и их роль в современном управлении
Бизнес-процесс - это логичный, последовательный, взаимосвязанный набор мероприятий, который потребляет ресурсы, создаёт ценность и выдаёт результат.
1.1 Структура и классификация бизнес-процессов
Типовая структура бизнес-процессов (Рис.1. Структура бизнес-процессов) управления представляется стандартной цепочкой управленческого цикла, который состоит из следующих этапов:
- Этап 1. "Планирование". На данной этапе собирается информация, проводится ее анализ и разрабатывается план действий.
- Этап 2. "Организация". После разработки плана нужно обеспечить его реализацию - довести мероприятия до сотрудников, замотивировать и обеспечить сотрудников необходимыми для реализации плана ресурсами.
- Этап 3. "Учет". По истечении установленного периода нужно собрать фактическую информацию о выполнении запланированных работ и достигнутых результатов.
- Этап 4. "Контроль". После проведения учета план сопоставляется с фактической информацией и проводится анализ фактических отклонений.
- Этап 5. "Регулирование". На последнем пятом этапе принимается решение о последующих действиях - корректировки плана, поощрении или наказании сотрудников, которые эти планы реализовывали.
Рис.1. Структура бизнес-процессов
В зависимости от места бизнес-процессов в организационной структуре компании выделяют следующие бизнес-процессы: (Рис.2. Классификация бизнес-процессов)
Первая группа бизнес-процессов - это основные процессы:
- Розничная торговля аудиовидео продукции,
- Производство и продажа аудиовидео продукции,
- Производство и продажа торгового оборудования
Вторая группа бизнес-процессов - это обеспечивающие процессы:
- Обеспечение безопасности,
- Административно-хозяйственное обеспечение АХО,
- Юридическое обеспечение.
Третья группа процессов - это процессы управления.
- Стратегическое управление,
- Управление персоналом,
- Управление финансами,
- Управление маркетингом,
- Управление товарным запасом.
Рис.2. Классификация бизнес-процессов.
- Инструменты бизнес-моделирования и особенности его применения
Бизнес-моделирование представляет собой процесс разработки и внедрения различных бизнес-моделей организации (стратегия, бизнес-процессы, организационная структура, качество и др.) с целью формализации и оптимизации её деятельности.
Существует 4 основных способа разработки бизнес-моделей. Перечислим их в порядке убывания уровня эффективности построения и использования бизнес-моделей.
- В правилах специализированного программного продукта бизнес-моделирования: комбинация графики, таблиц и текста.
- Графический: дерево, блок-схема, технологическая карта и т.п.
- Табличный
- Текстовый
Бизнес-моделированием занимаются многие организации, но каждая находится на разных этапах развития по данному направлению. Кто-то уже разработал и активно использует комплексную бизнес-модель (совокупность моделей, документов и систем, описывающих всю деятельность организации). Кто-то имеет только графические модели и регламенты нескольких бизнес-процессов.
Рис. 3. Иерархический список бизнес-процессов предприятия
Основные виды бизнес-моделей, которые разрабатываются в организациях:
- дерево (иерархический список) бизнес-процессов см. Рис.1;
- графические модели бизнес-процессов;
- модель организационной структуры;
- модели целей и показателей;
- модели библиотеки документов (дерево документов), модели информационных систем;
- модели продуктов и услуг;
- модели по менеджменту качества и многое другое.
Все эти модели позволяют разработать профессиональные программные продукты бизнес-моделирования.
Некоторые известных на рынке решений программные продукты: Business Studio, ARIS, All Fusion Process Modeler (BPWIN), Бизнес-инженер, Microsoft Visio. У каждого из них есть свои функциональные особенности, ограничения и преимущества.
- Модель бизнес-процессов
Моделью бизнес-процесса называется его формализованное (графическое, тестовое, символьное) описание, отражающее реально существующую или предполагаемую деятельность предприятия. Модель, как правило, содержит следующие сведения о бизнес-процессе:
- набор составляющих процесс шагов бизнес-функций;
- порядок выполнения бизнес-функций;
- механизмы контроля и управления в рамках бизнес-процесса;
- исполнителей каждой бизнес-функции;
- входящие документы/информацию, исходящие документы/информацию;
- ресурсы, необходимые для выполнения каждой бизнес-функции;
- документацию/условия, регламентирующие выполнение каждой бизнес- функции;
- параметры, характеризующие выполнение бизнес-функций и процесса в целом.
Во всем мире в настоящее время осуществляется переход от традиционной функциональной организации производства к процессной организации. При этом под бизнес-процессом подразумевается деятельность предприятия или его отделов, имеющая ценность для клиента.
Традиционная функциональная организация принадлежит в идеям Адама Смита и основывается на разбиении на простейшие задания, исполняемые по конвейерной схеме с четкими рамками структурных подразделений предприятия. Процессная организация же предполагает различные версии и сложные маршруты исполнения процессов.
Пример бизнес-процесса получение товара по заказу. Такая деятельность предполагает получение заявки, проверку наличия товара, счет, контроль платежа и доставку. Важность этих компонентов безусловна, но для клиента сами по себе они не представляют весомой ценности. Клиенту интересен лишь целостный результат, быстрое получение и качество товара.
Детализация бизнес-процесса осуществляется с помощью бизнес-функций, бизнес-операций и бизнес-правил. Деятельность одного исполнителя по решению задачи бизнес-процесса является бизнес-функцией. Бизнес-операцией же является отдельная операция, описывающая деятельность конкретного должностного лица над конкретным информационным объектом. Бизнес-правила вводят ограничения на исполнение бизнес-процесса, например, определяют последовательность выполнения некоторых функций или операций, ограничивают конкретные значения информационных объектов и т.п.
- Проектирования бизнес-процесса
Решение задачи проектирования бизнес-процесса основано на введении специальной атрибутной правосторонней порождающей грамматики для бизнес-процесса, назначение которой заключается в умении строить любые правильные цепочки выполнения бизнес-процесса (т.е. возможные последовательности необходимых для выполнения процесса бизнес-функций), не генерируя при этом ни одной неправильной цепочки.
Порождающей грамматикой для бизнес-процесса называется упорядоченная восьмерка объектов G = (Mt, Mn, Mo, P, Es, Ms, En, Mn). где
Mt множество терминальных символов;
Mn множество нетерминальных символов;
Mo Mn множество начальных символов;
P множество порождающих правил;
Es конечное множество синтезируемых атрибутов;
Ms множество методов синтеза атрибутов;
En конечное множество наследуемых атрибутов;
Mn множество методов наследования атрибутов.
Первые четыре объекта G определяют традиционным образом порождающую грамматику. Следующие четыре объекта определяют множество свойств (атрибутов), характеризующих символы порождаемых цепочек, и правила обработки этих свойств. Последний символ предназначен для обеспечения возможности порождения подцепочек бизнес-функций, которые могут (но не обязательно должны) выполняться параллельно.
Таким образом, грамматика бизнес-процесса представляет собой порождающую грамматику с дополнительными механизмами передачи информации и обработки некоторых не контекстно-свободных аспектов синтаксиса языка описания бизнес-процесса (например, требования ограничений по ресурсам). Введение в грамматику синтезируемых атрибутов и методов их синтеза позволяет порождать только цепочки, удовлетворяющие заранее известным жестким ограничениям на совокупное использование бизнес-процессом одного или нескольких ресурсов. Назначение наследуемых атрибутов заключается в необходимости передавать на последующие шаги порождения бизнес-процесса информацию о местах выполнения бизнес-функций в организационно штатной структуре предприятия. В случае, когда бизнес-функция может быть выполнена в различных подразделениях предприятия, наследуемый атрибут несет информацию по выбору правил порождения хвоста цепочки выполнения бизнес-процесса.
Укрупненный алгоритм работы метода включает следующие 5 шагов:
- Трансляция моделей, формализующих результаты обследования на традиционных языках моделирования в граф бизнес-процесса.
- Уточнение графа бизнес-процесса на предмет возможности последовательности и параллельности выполнения бизнес-функций, а также введение значений синтезируемых атрибутов, ограничений на них и методов их синтеза.
- Построение грамматики бизнес-процесса на основании его графа.
- Генерация (на основании порождающей грамматики) ограниченного множества вариантов выполнения бизнес-процесса на основании набора его бизнес-функций с учетом ограничений.
- Принятие решения по проектируемому бизнес-процессу.
- Разработка инструментария планирования бизнес-процесса и его применение деятельности предприятия “Холдинг Афанасий”
-
- Среда разработки
Miсrоsоft Visuаl Studiо 2010 средство для разработчиков ПО, которое позволяет решать основные задачи разработки: система упрощает создание, отладку и развёртывание приложений на различных платформах, включая ShаrеРоint и облачную среду.
Мощные средства редактирования и визуального дизайна позволяют реализовать самые смелые замыслы. Visuаl Studiо открывает новые возможности для приложений за счёт использования вычислительных мощностей локального компьютера и облака. Кроме того, Visuаl Studiо является интегрированной средой, в которой разработчики могут использовать уже имеющиеся навыки для написания кода, отладки, модульного тестирования и развертывания непрерывно расширяющейся номенклатуры типов приложений. Visuаl Studiо упрощает реализацию общих задач и обеспечивает индивидуальный подход, что позволяет разработчикам максимально использовать возможности базовых платформ.
Мощные инструменты Visuаl Studiо помогают быстро создавать высококачественный код. Интегрированная поддержка разработки через тестирование и новые инструменты отладки ПО для многоядерных процессоров позволяют без труда находить и устранять дефекты, обеспечивая создание высококачественного решения.
Visuаl Studiо включает функцию поддержки нескольких мониторов, которая позволяет наиболее удобно организовать работу. Независимо от сложности проекта Visuаl Studiо можно использовать для реализации идей и решений для широкого спектра платформ, включая Windоws, Windоws Sеrvеr, веб-среду, облачную среду, Оffiсе и ShаrеРоint и многое другое.
- R3 как инструментария для планирования бизнес-процессов в “Холдинг Афанасий”
Рис. 4. О предприятии
Пиво "Афанасий" стабильно входит в рейтинг 200 крупнейших предприятий, который проводит журнал "Эксперт". А бренд "Афанасий" (один из первых пивных брендов России) существует на рынке более 10 лет.
История тверского пивоварения началась в 1887 году, когда австрийский подданный Эмиль Слатинский основал на берегу Твери (в советское время Калинина) первую парную пивоварню, получившую название "Тверская Бавария". Производимое в этих местах пиво высоко ценилось знатоками.
На данном предприятии работает ERP-система SAP R/3. (Рис 6-9)
Благодаря открытому стандартному пользовательскому интерфейсу партнеры SAP и консультанты могут создавать предварительно сконфигурированные отраслевые решения на базе хозяйственных сценариев SAP R/3. Кроме того, открытые интерфейсы дают клиентам SAP возможность разрабатывать собственные шаблоны для внедрения системы SAP R/3 (Рис1.). Бизнес-конфигуратор SAP R/3, поддерживающий процедуры создания и ведения моделей предприятия с автоматической генерацией соответствующих задач и профилей настройки; Ссылочная модель SAP R/3 - обширная метамодель внедрения SAP R/3, включающая организационную модель, модель процессов, модель данных, модель распределения функций и модель бизнес-объектов; Репозиторий SAP R/3 - основной банк данных для Ссылочной модели, отраслевых моделей и созданных моделей предприятия.
Система обеспечивает динамическое графическое моделирование бизнес-процессов и может работать в диалоговом режиме. При создании модели предприятия могут использоваться типовые сценарии бизнес-процессов, поставляемые SAP и ее партнерами. Инструментарий бизнес-инжиниринга может применяться и для реализации собственных методов внедрения SAP R/3, в том числе с использованием привычных инструментов динамического моделирования бизнес-процессов от других производителей.
\
Рис. 5. SAP R3
Рис. 6. Окно ООД “Список транспорта и его маршрут”
Рис. 7. Окно ООД “Процесс оформления документов”
Рис. 8. Окно логистики
Рис. 9. Процесс создания Счет-фактуры
- Разработка программного продукта
Для выполнения выпускной работы требовалось разработать инструментарий для планирования бизнес-процессов. Перед автором стояла задача построения модели и структуры предприятия.
Моделью предприятия послужил “Холдинг Афанасий” (Тверской Пивоваренный завод). Так как предприятие крупное, следует рассмотреть и описать конкретный бизнес-процесс. А именно процесс сбыта приготавливаемой продукции.
Из теоретической части выпускной работы мы знаем, что детализация бизнес-процесса осуществляется с помощью бизнес-функций, бизнес-операций и бизнес-правил. Поэтому, процесс сбыта содержит следующие бизнес-функции:
1 - Принятие заявок
2 - Формирование задания для отгрузки
3 - Распределение транспортных средств
4 - Отгрузка
5 - Подготовка документов
6 - Экспедирование
7 - Контроль и анализ договоров
Рис. 10. Бизнес-процесс сбыта “Холдинг Афанасий”
Перечисленные бизнес-функции выполняются в следующих подразделениях предприятия:
- Отдел логистики (Рис. 6. Структура отдела логистики)
Основной задачей логистики является оптимизация внутренних и внешних материальных потоков, а также сопутствующих им информационных и финансовых потоков, оптимизация бизнес-процессов с целью минимизации общих затрат ресурсов. Сущность классического определения общих целей функции логистики таково, что потребитель должен получить необходимые по качеству и количеству товары, в нужное время, в нужном месте, от надежного поставщика с хорошим уровнем обслуживания (как до осуществления продажи продукции, так и после нее) и при заданном уровне общих затрат.
- Транспортная компания
Транспортно-экспедиционная компания (ТЭК) компания, занимающаяся организацией перевозок грузов от грузоотправителя (клиента) к грузополучателю. В большинстве случаев ТЭК является компанией посредником между клиентом и перевозчиком, предоставляя услуги по поиску исполнителя и транспорта удовлетворяющим критерием перевозки груза. От компетентности и профессионализма данной компании зависит качество и своевременность перевозки грузов.
- Отдел обработки документов
Данный отдел отвечает за создание поставок, присваивание водителей к центровозам. Проверять и корректировать созданные поставки, поддерживать связь с офис-менеджерами, менеджерами по логистике и кладовщиками. Заниматься подготовкой документов на отгружаемый товар. Контролировать время погрузки.
- Склад готовой продукции
В логистике склад выполняет функцию аккумулирования резервов материальных ресурсов, необходимых для демпфирования колебаний объёмов поставок и спроса, а также синхронизации скоростей потоков товаров в системах продвижения от изготовителей к потребителям или потоков материалов в технологических производственных системах.
Рис.11. Структура отдела логистики
При выполнении бизнес-процесса учитываются следующие ресурсы:
- Временные затраты
- Требуемое число исполнителей
- Заработная плата
Порождающая варианты рассматриваемого бизнес-процесса грамматика будет выглядеть следующим образом
G = (Mt, Mn, Mo, P, Es, Ms, En, Mn)
Mt = {Nф} множество терминальных символов;
Mn {No,1,2,3,4,5,6,7} множество нетерминальных символов;
Mo = {No} Mn множество начальных символов;
P множество порождающих правил;
Es = {r}множество кортежей ресурсных характеристик грамматики, при этом каждый компонент {r} определяет соответствующие ресурсы;
Ms множество методов синтеза атрибутов;
En = {Л, О, Т, С} множество возможных мест выполнения бизнес-функции (Отдел Логистики, Транспортная компания, ООД, Склад);
Mn множество методов наследования атрибутов.
Перечислим множество порождающих правил (без включения ресурсных характеристик)
No 1{Л} | 1{О}
1{Л} 2{Л}
1{О} 2{Л}
2{Л} 3{Т} | 7{О}
3{Т} 2{Л} | 4{Т} | 4{С}
4{Т} 3{Т} | 5{О}
4{С} 3{Т} | 5{О}
5{О} 6{Т} | 6{Л}
6{Т} 7{О}
6{Л} 7{О}
7{О} Nф
На основании приведенной грамматики может быть порождено конечное число вариантов исполнения бизнес-процесса сбыта.
Рис. 12. Приведенная грамматика
Из множества построенных вариантов выделим приемлемые с позиции лица, принимающего решение (ЛПР). Такое выделение будет осуществляться в два этапа
- Автоматическое отбрасывание неприемлемых вариантов на основе ряда объективных критериев;
- Субъективная оценка ситуации.
Одним из объективных критериев может являться требование обязательного использования при выполнении бизнес-процесса всех входящих в него функций без исключения. Поэтому можно отбросить варианты, включающие выполнение не всех функций 1-7.
Далее введем в модель множества ресурсных характеристик порождающей грамматики, такие как временные затраты, число исполнителей и плата за их действия.
Для наглядности, воспользуемся случайно возможными входными данными.
Для этого введем диапазон ресурсных характеристик: диапазон времени - 7, диапазон исполнителей 100, диапазон зарплат 5000. Таким образом, для нашей грамматики формируем разброс значений параметров, что позволяет сократить общее число порождаемых вариантов выполнения бизнес-процесса.
Оценим варианты выполнения бизнес-процесса, используя метод Парето. Этот метод просто в реализации и требует минимум информации от ЛПР, он используется в тех случаях, когда нет необходимости учитывать веса критериев, а число анализируемых показателей невелико.
Каждый из вариантов-бизнес процесса характеризуется такими показателями как:
- Время исполнения
- Количество исполнителей
- Стоимость исполнения
Для нахождения оптимального бизнес-процесса мы вводим значения данных показателей. В итоге получаем. (Рис. 13. Нахождение оптимального бизнес-процесса).
Рис. 13. Нахождение оптимального бизнес-процесса
Далее выбираем оптимальный вариант, исходя из показателей которыми мы пользуемся. (Рис.14. Оптимальный бизнес-процесс)
Рис.14. Оптимальный бизнес-процесс
Заключение
При выполнении выпускной работы были изучена структура бизнес-процессов, рассмотрены понятия и классификация.
Были изучены грамматики бизнес-процессов и порождение бизнес-процессов.
Реализован бизнес-процесс на примере конкретного предприятия.
Была изучена и использована информация, которая позволила отобразить значения и особенности моделирования бизнес-процессов в организациях.
Создана бизнес-модель предприятия, отображаемая инструментарии планирования бизнес-процессов.
В процессе создания инструментария решены следующие задачи:
- ознакомление с основными понятиями и классификацией бизнес-процессов;
- изучение структуры бизнес-процессов;
- моделирование бизнес-процессов
- изучение грамматики бизнес-процессов и её порождение;
- реализован бизнес-процесс на примере “Холдинга Афанасий”;
- тестирование реализованного бизнес-процесса;
- анализ результатов.
Рис. 15.1. Программный продукт
Рис. 15.2. Программный продукт
Список использованной литературы и источники
1. Калянов Г.Н. Моделирование, анализ, реорганизация и автоматизация бизнеспроцессов. М.: Финансы и статистика, 2006. 240 с.
2. Калянов Г.Н. Использование формальных грамматик в задачах реинжиниринга бизнес-процессов // Труды 12-й Национальной конференции по искусственному интеллекту КИИ-2010. М., 2010. Т. 4. С. 172-179.
3. Калянов Г.Н. Теоретические основы реорганизации бизнес-процессов // LAP LAMBERT Academic Publishing, 2012. 184 c.
4. Калянов Г.Н. Тестирование информационных потоков // Труды 13-й Российской научно-практической конференции «Реинжиниринг бизнес-процессов на основе современных информационных технологий. Системы управления процессами и знаниями». М., 2010. С. 146-151.
5. Калянов Г.Н. Системный анализ требований к КИС // Труды 15-й Российской научно-практической конференции «Реинжиниринг бизнес-процессов на основе современных информационных технологий. Системы управления знаниями». М., 2012. С. 96-98.
6. Басовский Л. Е., Протасьев В. Б. Управление качеством: // Учебник. - М.: ИНФРА - М, 2006. - 212 с.
7.Бизнес-реинжиниринг: Учебное пособие / Под ред. Н. В. Васильева - М.: Экмос, 2005. - 224 с.
8. Бусленко Н. П. Моделирование сложных систем. // М.: Юрайт, 2006. - 311 с.
9. Глудкин О. П., Горбунов Н. М. Всеобщее управление качеством:// Учебное пособие.- М.: Лаборатория Базовых знаний, 2005.- 490 с.
10. Ершов. А. К. Управление качеством. // М.: Логос, 2008. 288 с.
11. Михеева Е. Н., Сероштан М. В. Управление качеством. М.: Дашков и Ко, 2009. 708 с.
12. Миронов М. Г. Управление качеством. М.: Проспект, 2006. 288с.
13. Репин В.В., Елиферов В.Г. Процессный подход к управлению: Моделирование бизнес-процессов. - М.: РИА Стандарты и качество, 2004. - 408 c.
14. Ротер М., Шук Д. Учитесь видеть бизнес-процессы. Практика построения карт потоков создания ценности. - М.: Альпина Бизнес Букс, 2008. - 144 c.
15. Кизиков И.В., Савченко Я.В. " Методика выбора бизнес-процессов для оптимизации в интегрированных холдинговых структурах" [Электонный ресурс]/И.В. Кизиков, Я.В. Савченко Электрон. текстовые дан. - Екатеринбург: ФГБОУ ВПО "УГЭУ", 2011.
16. Исаев Р.А. Инструменты бизнес-моделирования и особенности его применения/Р.А. Исаев М.: ИНФРА-М, 2011. 400 с. Ил.
17. Исаев Р.А. Банковский менеджмент и бизнес-инжиниринг/ Р.А. Исаев М.: ИНФРА-М, 2011. 400 с. Ил.
18. Ковалев С.М., Ковалев В.М. Технология структуризации и описания организации шаг за шагом/ С.М. Ковалев, В.М. Ковалев// Консультант директора. - 2008. - №8.
19. Электронный ресурс удаленного доступа (Internet). Режим доступа: http://www.bibliofond.ru/view.aspx?id=650564, свободный
20. Робсон М., Уллах Ф. Реинжиниринг бизнес-процессов: Практическое руководство / Пер. с англ.; Под ред. Н.Д. Эриашвили. - М.: ЮНИТИ-ДАНА, 2003. - 222 с.
21. Ткаченко И.Н., Кизиков И.В. Оптимизация бизнес-процессов интегрированных холдинговых структур // Управленец. - 2011. - № 3-4. - С. 40-45.
Приложение
BussinesProcess.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing.Drawing2D;
using System.Drawing;
namespace Диплом
{
public struct Job
{
public String namePeople;
public String nameOffice;
public IList<String> funktion;
}
public class BussinesProcess
{
public String nameProcess;
public bool PrOrJob;
public Job funk;
public IList<BussinesProcess> neiboor;
public bool fun;
public BussinesProcess funktion;
public Point m;
}
}
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace Диплом
{
public partial class Form1 : Form
{
bool fl;/////////////////выбор диаграмм
Graphics graphics;
Bitmap B_map;
IList<String> именаБлоковБизнесФункций = new List<String>();
IList<String> именаОтделов = new List<String>();
Rectangle[] Отделы = new Rectangle[4];
public int kef = 10;
Rectangle[] бизнесФункции = new Rectangle[7];
Rectangle[] началоКонец = new Rectangle[2];
Rectangle[] бизнесФункции1 = new Rectangle[7];
public Form1()
{
InitializeComponent();
B_map = new Bitmap(900, 700);
graphics = Graphics.FromImage(B_map);
graphics.Clear(Color.White);
pictureBox1.Image = B_map;
именаБлоковБизнесФункций.Add("Принятие заявок");
именаБлоковБизнесФункций.Add("Формирование задания для отгрузки");
именаБлоковБизнесФункций.Add("Распределение транспортных средств");
именаБлоковБизнесФункций.Add("Отгрузка");
именаБлоковБизнесФункций.Add("Подготовка документов");
именаБлоковБизнесФункций.Add("Экспедирование");
именаБлоковБизнесФункций.Add("Контроль и анализ договоров");
именаОтделов.Add("Логистика");
именаОтделов.Add("Транспортная\nкомпания");
именаОтделов.Add("Отдел обра-\nботки доку-\nментов");
именаОтделов.Add("Склад");
richTextBox1.ReadOnly = true;
button2.Enabled = false;
for (int i = 0; i < 2; i++)
{
Point P1;
if (i < 1)
{
P1 = new Point((900 / 2) + 30, 5);
началоКонец[i].Location = P1;
началоКонец[i].Width = 30;
началоКонец[i].Height = 30;
}
else
{
P1 = new Point((900 / 2) + (900 / 3) + 30, 640);
началоКонец[i].Location = P1;
началоКонец[i].Width = 30;
началоКонец[i].Height = 30;
}
}
for (int i = 0; i < 7; i++)
{
Point P1 = new Point((900 / 2) + (900 / 4) - 30, i * 100 + 5);
бизнесФункции1[i].Location = P1;
бизнесФункции1[i].Width = 30;
бизнесФункции1[i].Height = 30;
}
for (int i = 0; i < 7; i++)
{
Point P1 = new Point(900 / 4 - 30, i * 100 + 5);
бизнесФункции[i].Location = P1;
бизнесФункции[i].Width = 30;
бизнесФункции[i].Height = 30;
}
for (int i = 0; i < 4; i++)
{
Point P1;
if (i < 2)
{
P1 = new Point(20, 250 + i * 250);
}
else
{
P1 = new Point((900 / 3) + 30, 250 + (i - 2) * 250);
}
Отделы[i].Location = P1;
Отделы[i].Width = 100;
Отделы[i].Height = 50;
}
}
public void RisArrow(Point X, Point Y)
{
Pen penLINE = new Pen(Color.Black, 2);
graphics.DrawLine(penLINE, X, Y);
double ugol = Math.Atan2(X.X - Y.X, X.Y - Y.Y);
graphics.DrawLine(penLINE, Y.X, Y.Y, Convert.ToInt32(Y.X + 15 * Math.Sin(0.3 + ugol)), Convert.ToInt32(Y.Y + 15 * Math.Cos(0.3 + ugol)));
graphics.DrawLine(penLINE, Y.X, Y.Y, Convert.ToInt32(Y.X + 15 * Math.Sin(ugol - 0.3)), Convert.ToInt32(Y.Y + 15 * Math.Cos(ugol - 0.3)));
pictureBox1.Image = B_map;
}
private void button1_Click(object sender, EventArgs e)
{
richTextBox1.Text = "";
for (int i = 0; i < именаБлоковБизнесФункций.Count; i++)
{
richTextBox1.Text += Convert.ToString(i + 1) + " - " + именаБлоковБизнесФункций[i] + "\n";
}
Pen pen = new Pen(Color.Black,2);
Point p1 = new Point(900/2,0);
Point p2 = new Point(900/2,700);
graphics.DrawLine(pen,p1,p2);
pen.Color = Color.Red;
pen.Width = 3;
graphics.DrawRectangles(pen, бизнесФункции);
graphics.DrawRectangles(pen, бизнесФункции1);
pen.Color = Color.Green;
pen.Width = 3;
graphics.DrawRectangles(pen, Отделы);
graphics.DrawRectangles(pen, началоКонец);
for (int i = 0; i < 7; i++)
{
String Text = String.Format("{0}", Convert.ToString(i+1));
Brush Кисть = new SolidBrush(Color.Black);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, бизнесФункции[i].Location.X + kef, бизнесФункции[i].Location.Y + kef);
}
for (int i = 0; i < 2; i++)
{
if (i < 1)
{
String Text = String.Format("{0}", "Nо");
Brush Кисть = new SolidBrush(Color.Black);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, началоКонец[i].Location.X + kef, началоКонец[i].Location.Y + kef);
}
else
{
String Text = String.Format("{0}", "Nф");
Brush Кисть = new SolidBrush(Color.Black);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, началоКонец[i].Location.X + kef, началоКонец[i].Location.Y + kef);
}
}
for (int i = 0; i < 7; i++)
{
String Text = String.Format("{0}", Convert.ToString(i + 1));
Brush Кисть = new SolidBrush(Color.Black);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, бизнесФункции1[i].Location.X + kef, бизнесФункции1[i].Location.Y + kef);
}
for (int i = 0; i < 4; i++)
{
String Text = String.Format("{0}", именаОтделов[i]);
Brush Кисть = new SolidBrush(Color.Black);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, Отделы[i].Location.X + kef, Отделы[i].Location.Y + kef);
}
///////////////////////////////////////////Стрелки для 2 диаграммы
for (int i = 0; i < 6; i++)
{
Point X = new Point(бизнесФункции1[i].Location.X + 30 / 2, бизнесФункции1[i].Location.Y + 30);
Point Y = new Point(бизнесФункции1[i + 1].Location.X + 30 / 2, бизнесФункции1[i + 1].Location.Y);
RisArrow(X, Y);
}
for (int i = 0; i < 2; i++)
{
Point X;
Point Y;
if (i < 1)
{
X = new Point(началоКонец[i].Location.X + 30, началоКонец[i].Location.Y + 30 / 2);
Y = new Point(бизнесФункции1[i].Location.X, бизнесФункции1[i].Location.Y + 30 / 2);
RisArrow(X, Y);
}
else
{
X = new Point(бизнесФункции1[бизнесФункции1.Length - 1].Location.X + 30, бизнесФункции1[бизнесФункции1.Length - 1].Location.Y + 30 / 2);
Y = new Point(началоКонец[i].Location.X, началоКонец[i].Location.Y + 30 / 2);
RisArrow(X, Y);
}
}
for (int i = 0; i < 3; i++)
{
pen.Width = 2;
pen.Color = Color.Black;
Point X;
Point Y;
switch (i)
{
case 0: {
X = new Point(бизнесФункции1[1].Location.X, бизнесФункции1[1].Location.Y + 30 / 2);
Y = new Point(бизнесФункции1[1].Location.X - 60, бизнесФункции1[1].Location.Y + 30 / 2);
graphics.DrawLine(pen, X, Y);
X = Y;
Y.X = бизнесФункции1[бизнесФункции1.Length - 1].Location.X - 60;
Y.Y = бизнесФункции1[бизнесФункции1.Length - 1].Location.Y + 30 / 2;
graphics.DrawLine(pen, X, Y);
X = Y;
Y.X = бизнесФункции1[бизнесФункции1.Length - 1].Location.X;
RisArrow(X, Y);
break; }
case 1:
{
X = new Point(бизнесФункции1[2].Location.X + 30, бизнесФункции1[2].Location.Y + 30 / 2);
Y = new Point(бизнесФункции1[2].Location.X + 60, бизнесФункции1[2].Location.Y + 30 / 2);
graphics.DrawLine(pen, X, Y);
X = Y;
Y.X = бизнесФункции1[1].Location.X + 60;
Y.Y = бизнесФункции1[1].Location.Y + 30 / 2;
graphics.DrawLine(pen, X, Y);
X = Y;
Y.X = бизнесФункции1[1].Location.X + 30;
RisArrow(X, Y);
break;
}
case 2: {
X = new Point(бизнесФункции1[3].Location.X, бизнесФункции1[3].Location.Y + 30 / 2);
Y = new Point(бизнесФункции1[3].Location.X - 30, бизнесФункции1[3].Location.Y + 30 / 2);
graphics.DrawLine(pen, X, Y);
X = Y;
Y.X = бизнесФункции1[2].Location.X - 30;
Y.Y = бизнесФункции1[2].Location.Y + 30 / 2;
graphics.DrawLine(pen, X, Y);
X = Y;
Y.X = бизнесФункции1[1].Location.X;
RisArrow(X, Y);
break;
}
}
}
///////////////////////////////////////////Стрелки для 1 диаграммы
Point X1 = new Point(бизнесФункции[0].Location.X,бизнесФункции[0].Location.Y + 30/2);
Point Y1 = new Point(Отделы[0].Location.X + 100 / 4, Отделы[0].Location.Y);
RisArrow(X1, Y1);
X1.X += 30;
Y1.X = Отделы[2].Location.X + 100 / 4;
Y1.Y = Отделы[2].Location.Y;
RisArrow(X1, Y1);
X1.X -= 30;
X1.Y = бизнесФункции[1].Location.Y + 30 / 2;
Y1.X = Отделы[0].Location.X + (100/4) * 3;
Y1.Y = Отделы[0].Location.Y;
RisArrow(X1, Y1);
X1.Y = бизнесФункции[2].Location.Y + 30 / 2;
Y1.X = Отделы[1].Location.X + 100 / 4;
Y1.Y = Отделы[1].Location.Y;
RisArrow(X1, Y1);
X1.Y = бизнесФункции[3].Location.Y + 30 / 2;
Y1.X = Отделы[1].Location.X + (100 / 4) * 3;
Y1.Y = Отделы[1].Location.Y;
RisArrow(X1, Y1);
X1.X += 30;
Y1.X = Отделы[3].Location.X + 100 / 4;
Y1.Y = Отделы[3].Location.Y;
RisArrow(X1, Y1);
X1.Y = бизнесФункции[4].Location.Y + 30 / 2;
Y1.X = Отделы[2].Location.X + (100 / 4) * 3;
Y1.Y = Отделы[2].Location.Y + 50;
RisArrow(X1, Y1);
X1.X -= 30;
X1.Y = бизнесФункции[5].Location.Y + 30 / 2;
Y1.X = Отделы[0].Location.X + (100 / 4) * 3;
Y1.Y = Отделы[0].Location.Y + 50;
RisArrow(X1, Y1);
Y1.X = Отделы[1].Location.X + 100;
Y1.Y = Отделы[1].Location.Y + 50 / 2;
RisArrow(X1, Y1);
X1.X += 30;
X1.Y = бизнесФункции[6].Location.Y + 30 / 2;
Y1.X = Отделы[2].Location.X + 100 / 4;
Y1.Y = Отделы[2].Location.Y + 50;
RisArrow(X1, Y1);
pictureBox1.Image = B_map;
fl = true;
button2.Enabled = true;
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
if (fl == true)
{
int k = -1;
for (int i = 0; i < Отделы.Length; i++)
{
if (e.Location.X >= Отделы[i].Location.X && e.Location.X <= Отделы[i].Location.X + 100 && e.Location.Y >= Отделы[i].Location.Y && e.Location.Y <= Отделы[i].Location.Y + 50)
k = i;
}
switch (k)
{
case 0:
{
Form2 f2 = new Form2();
f2.ShowDialog();
break;
}
case 1:
{
MessageBox.Show("Форма ТК");
break;
}
case 2:
{
MessageBox.Show("Форма ООД");
break;
}
case 3:
{
MessageBox.Show("Форма Склад");
break;
}
default: break;
}
}
}
private void button2_Click(object sender, EventArgs e)
{
Form3 f = new Form3();
f.ShowDialog();
}
}
}
Form1.Designer.cs
namespace Диплом
{
partial class Form1
{
/// <summary>
/// Требуется переменная конструктора.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Код, автоматически созданный конструктором форм Windows
/// <summary>
/// Обязательный метод для поддержки конструктора - не изменяйте
/// содержимое данного метода при помощи редактора кода.
/// </summary>
private void InitializeComponent()
{
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.Location = new System.Drawing.Point(13, 13);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(900, 700);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
this.pictureBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);
//
// richTextBox1
//
this.richTextBox1.Location = new System.Drawing.Point(919, 224);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(419, 494);
this.richTextBox1.TabIndex = 1;
this.richTextBox1.Text = "";
//
// button1
//
this.button1.Location = new System.Drawing.Point(919, 179);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(116, 39);
this.button1.TabIndex = 2;
this.button1.Text = "Нарисовать диаграммы";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(919, 12);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(116, 39);
this.button2.TabIndex = 3;
this.button2.Text = "Построить бизнес-процесс";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1350, 730);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.richTextBox1);
this.Controls.Add(this.pictureBox1);
this.Name = "Form1";
this.Text = "Диплом";
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
}
}
Form2.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Диплом
{
public partial class Form2 : Form
{
BussinesProcess BP;
Graphics graphics;
Bitmap B_map;
public int kef = 10;
public int kefX = 50 + 90;
public int kefY = 50 + 40;
public int W = 90;
public int H = 40;
public Form2()
{
int K = 10;
BP = new BussinesProcess();
String NM;
InitializeComponent();
B_map = new Bitmap(900, 700);
graphics = Graphics.FromImage(B_map);
graphics.Clear(Color.White);
pictureBox1.Image = B_map;
BP.funk = new Job();
BP.neiboor = new List<BussinesProcess>();
BP.nameProcess = "Логистика";
BP.PrOrJob = false;
BP.fun = false;
/////////////////////////////////////////////////////////////////////
BussinesProcess b = new BussinesProcess();
b.PrOrJob = true;
b.fun = false;
b.funk = new Job();
b.funk.funktion = new List<String>();
b.neiboor = new List<BussinesProcess>();
b.nameProcess = "Начальник от-\nдела логистики";
//////////////////////////////////////////////////////////////////////
b.funk.namePeople = "Марья Ивановна";
b.funk.nameOffice = "Начальник отдела логистики";
NM = "Найм новых сотрудников";
b.funk.funktion.Add(NM);
NM = "Распределение ресурсов";
b.funk.funktion.Add(NM);
NM = "Контроль качества";
b.funk.funktion.Add(NM);
/////////////////////////////////////////////////////////////////////
BussinesProcess b1 = new BussinesProcess();
b1.PrOrJob = true;
b1.fun = false;
b1.funk = new Job();
b1.funk.funktion = new List<String>();
b1.nameProcess = "Логист";
/////////////////////////////////////////////////////////////////////
b1.funk.nameOffice = "Логист";
b1.funk.namePeople = "Сидоров Петя";
NM = "Выбор типа транспортного средства.";
b1.funk.funktion.Add(NM);
NM = "Выбор вида транспортного средства.";
b1.funk.funktion.Add(NM);
NM = "Совместное планирование транспортных процессов со складскими и производственными операциями.";
b1.funk.funktion.Add(NM);
NM = "Совместное планирование транспортных процессов на различных видах транспорта.";
b1.funk.funktion.Add(NM);
NM = "Обеспечение технологического единства транспортно-складского процесса.";
b1.funk.funktion.Add(NM);
NM = "Определение рациональных маршрутов поставки.";
b1.funk.funktion.Add(NM);
/////////////////////////////////////////////////////////////////////
b.neiboor.Add(b1);
/////////////////////////////////////////////////////////////////////
b1 = new BussinesProcess();
b1.PrOrJob = true;
b1.fun = false;
b1.funk = new Job();
b1.funk.funktion = new List<String>();
b1.nameProcess = "Отдел экспе-\nдирования";
/////////////////////////////////////////////////////////////////////
b1.funk.nameOffice = "Экспедитор";
b1.funk.namePeople = "Иванов Федька";
NM = "Доставка товара.";
b1.funk.funktion.Add(NM);
NM = "Получение денежных средств.";
b1.funk.funktion.Add(NM);
NM = "Доставка денежных средств на базу.";
b1.funk.funktion.Add(NM);
/////////////////////////////////////////////////////////////////////
b.neiboor.Add(b1);
BP.neiboor.Add(b);
}
public IList<Point> raspredY(int size, int Y)
{
IList<Point> arr = new List<Point>(size);
for (int i = 0; i < size; i++)
{
Point xy = new Point();
xy.Y = Y;
xy.X = kefX + (i+1) * 500 / (size + 1);
arr.Add(xy);
}
return arr;
}
public void RisArrow(Point X, Point Y)
{
Pen penLINE = new Pen(Color.Black, 2);
graphics.DrawLine(penLINE, X, Y);
double ugol = Math.Atan2(X.X - Y.X, X.Y - Y.Y);
graphics.DrawLine(penLINE, Y.X, Y.Y, Convert.ToInt32(Y.X + 15 * Math.Sin(0.3 + ugol)), Convert.ToInt32(Y.Y + 15 * Math.Cos(0.3 + ugol)));
graphics.DrawLine(penLINE, Y.X, Y.Y, Convert.ToInt32(Y.X + 15 * Math.Sin(ugol - 0.3)), Convert.ToInt32(Y.Y + 15 * Math.Cos(ugol - 0.3)));
pictureBox1.Image = B_map;
}
public void RisBlock(BussinesProcess a)
{
Pen pen = new Pen(Color.Red, 3);
graphics.DrawRectangle(pen, a.m.X, a.m.Y, W, H);
String Text = String.Format("{0}", a.nameProcess);
Brush Кисть = new SolidBrush(Color.Black);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, a.m.X + kef, a.m.Y + kef);
pictureBox1.Image = B_map;
}
private void Form2_Load(object sender, EventArgs e)
{
BP.m.Y = 10;
int Y = kefY + BP.m.Y;
BP.m.X = kefX + 500 / (1 + 1);
IList<Point> arr = new List<Point>();
arr = raspredY(BP.neiboor.Count, Y);
for (int i = 0; i < BP.neiboor.Count; i++)
{
BP.neiboor[i].m = arr[i];
}
Y = Y + kefY;
RisBlock(BP);
for (int i = 0; i < BP.neiboor.Count; i++)
{
RisBlock(BP.neiboor[i]);
}
for (int i = 0; i < BP.neiboor.Count; i++)
{
arr = raspredY(BP.neiboor[i].neiboor.Count, Y);
for (int j = 0; j < BP.neiboor[i].neiboor.Count; j++)
{
BP.neiboor[i].neiboor[j].m = arr[j];
RisBlock(BP.neiboor[i].neiboor[j]);
}
}
Point XX = new Point();
XX.X = BP.m.X + W / 2;
XX.Y = BP.m.Y + H;
for (int i = 0; i < BP.neiboor.Count; i++)
{
Point YY = new Point();
YY.Y = BP.neiboor[i].m.Y;
YY.X = BP.neiboor[i].m.X + W / 2;
RisArrow(XX, YY);
Point XYY = new Point();
XYY.X = YY.X;
XYY.Y = YY.Y + H;
for (int j = 0; j < BP.neiboor[i].neiboor.Count; j++)
{
Point YYY = new Point();
YYY.Y = BP.neiboor[i].neiboor[j].m.Y;
YYY.X = BP.neiboor[i].neiboor[j].m.X + W / 2;
RisArrow(XYY, YYY);
}
}
}
private void pictureBox1_MouseClick(object sender, EventArgs e)
{
}
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
for (int i = 0; i < BP.neiboor.Count; i++)
{
if (BP.neiboor[i].PrOrJob == true && BP.neiboor[i].m.X <= e.Location.X
&& BP.neiboor[i].m.X + W >= e.Location.X
&& BP.neiboor[i].m.Y <= e.Location.Y
&& BP.neiboor[i].m.Y + H >= e.Location.Y)
{
String Str = "";
Str = BP.neiboor[i].funk.nameOffice + "\n";
for (int j = 0; j < BP.neiboor[i].funk.funktion.Count; j++)
{
Str += Convert.ToString(j + 1) + " - " + BP.neiboor[i].funk.funktion[j] + "\n";
}
MessageBox.Show(Str);
}
else
{
for (int j = 0; j < BP.neiboor[i].neiboor.Count; j++)
{
if (BP.neiboor[i].neiboor[j].PrOrJob == true && BP.neiboor[i].neiboor[j].m.X <= e.Location.X
&& BP.neiboor[i].neiboor[j].m.X + W >= e.Location.X
&& BP.neiboor[i].neiboor[j].m.Y <= e.Location.Y
&& BP.neiboor[i].neiboor[j].m.Y + H >= e.Location.Y)
{
String Str = "";
Str = BP.neiboor[i].neiboor[j].funk.nameOffice + "\n";
for (int j1 = 0; j1 < BP.neiboor[i].neiboor[j].funk.funktion.Count; j1++)
{
Str += Convert.ToString(j1 + 1) + " - " + BP.neiboor[i].neiboor[j].funk.funktion[j1] + "\n";
}
MessageBox.Show(Str);
}
}
}
}
}
}
}
Form2.Designer.cs
namespace Диплом
{
partial class Form2
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.pictureBox1 = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.Location = new System.Drawing.Point(12, 12);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(900, 700);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
this.pictureBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);
//
// Form2
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(924, 725);
this.Controls.Add(this.pictureBox1);
this.Name = "Form2";
this.Text = "Логистика";
this.Load += new System.EventHandler(this.Form2_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.PictureBox pictureBox1;
}
}
Form3.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Диплом
{
public partial class Form3 : Form
{
public struct El
{
public int numBP;
public String nameBL;
public bool fl;
public bool Start;
public int t;
public int n;
public int s;
}
public struct StrGr
{
public El A;
public IList<El> B;
}
public struct Variant
{
public IList<El> var;
}
public struct Znach
{
public int t;
public int n;
public int s;
}
IList<Znach> znach = new List<Znach>();
IList<Variant> varianty = new List<Variant>();
IList<StrGr> grammatik= new List<StrGr>();
public Form3()
{
InitializeComponent();
richTextBox2.ReadOnly = true;
richTextBox1.ReadOnly = true;
El Start = new El();
Start.fl = false;
Start.Start = true;
Start.nameBL = "";
Start.numBP = -1;
Start.n = 0;
Start.s = Start.t = -1;
El Finish = new El();
Finish.fl = false;
Finish.Start = false;
Finish.nameBL = "";
Finish.numBP = -1;
Finish.n = 0;
Finish.s = Finish.t = -1;
El l1 = new El();
l1.fl = true;
l1.Start = true;
l1.numBP = 1;
l1.nameBL = "Логистика";
l1.n = 0;
l1.s = l1.t = -1;
El o1 = new El();
o1.fl = true;
o1.Start = true;
o1.numBP = 1;
o1.nameBL = "Отдел обработки документов";
o1.n = 0;
o1.s = o1.t = -1;
El l2 = new El();
l2.fl = true;
l2.Start = true;
l2.numBP = 2;
l2.nameBL = "Логистика";
l2.n = 0;
l2.s = l2.t = -1;
El t3 = new El();
t3.fl = true;
t3.Start = true;
t3.numBP = 3;
t3.nameBL = "Транспортная компания";
t3.n = 0;
t3.s = t3.t = -1;
El t4 = new El();
t4.fl = true;
t4.Start = true;
t4.numBP = 4;
t4.nameBL = "Транспортная компания";
t4.n = 0;
t4.s = t4.t = -1;
El s4 = new El();
s4.fl = true;
s4.Start = true;
s4.numBP = 4;
s4.nameBL = "Склад";
s4.n = 0;
s4.s = s4.t = -1;
El o5 = new El();
o5.fl = true;
o5.Start = true;
o5.numBP = 5;
o5.nameBL = "Отдел обработки документов";
o5.n = 0;
o5.s = o5.t = -1;
El t6 = new El();
t6.fl = true;
t6.Start = true;
t6.numBP = 6;
t6.nameBL = "Транспортная компания";
t6.n = 0;
t6.s = t6.t = -1;
El l6 = new El();
l6.fl = true;
l6.Start = true;
l6.numBP = 6;
l6.nameBL = "Логистика";
l6.n = 0;
l6.s = l6.t = -1;
El o7 = new El();
o7.fl = true;
o7.Start = true;
o7.numBP = 7;
o7.nameBL = "Отдел обработки документов";
o7.n = 0;
o7.s = o7.t = -1;
StrGr g1 = new StrGr();
g1.A = Start;
g1.B = new List<El>();
g1.B.Add(l1);
g1.B.Add(o1);
StrGr g2 = new StrGr();
g2.A = l1;
g2.B = new List<El>();
g2.B.Add(l2);
StrGr g3 = new StrGr();
g3.A = o1;
g3.B = new List<El>();
g3.B.Add(l2);
StrGr g4 = new StrGr();
g4.A = l2;
g4.B = new List<El>();
g4.B.Add(t3);
g4.B.Add(o7);
StrGr g5 = new StrGr();
g5.A = t3;
g5.B = new List<El>();
g5.B.Add(l2);
g5.B.Add(t4);
g5.B.Add(s4);
StrGr g6 = new StrGr();
g6.A = t4;
g6.B = new List<El>();
g6.B.Add(t3);
g6.B.Add(o5);
StrGr g7 = new StrGr();
g7.A = s4;
g7.B = new List<El>();
g7.B.Add(t3);
g7.B.Add(o5);
StrGr g8 = new StrGr();
g8.A = o5;
g8.B = new List<El>();
g8.B.Add(t6);
g8.B.Add(l6);
StrGr g9 = new StrGr();
g9.A = t6;
g9.B = new List<El>();
g9.B.Add(o7);
StrGr g10 = new StrGr();
g10.A = l6;
g10.B = new List<El>();
g10.B.Add(o7);
StrGr g11 = new StrGr();
g11.A = o7;
g11.B = new List<El>();
g11.B.Add(Finish);
grammatik.Add(g1);
grammatik.Add(g2);
grammatik.Add(g3);
grammatik.Add(g4);
grammatik.Add(g5);
grammatik.Add(g6);
grammatik.Add(g7);
grammatik.Add(g8);
grammatik.Add(g9);
grammatik.Add(g10);
grammatik.Add(g11);
}
private void Form3_Load(object sender, EventArgs e)
{
PrintGrammatik();
}
void PrintGrammatikResurs()
{
richTextBox1.Text = "";
for (int i = 0; i < grammatik.Count; i++)
{
if (!grammatik[i].A.fl)
{
if (grammatik[i].A.Start)
richTextBox1.Text += "No -> ";
else
richTextBox1.Text += "Nф -> ";
}
else
{
richTextBox1.Text += Convert.ToString(grammatik[i].A.numBP) + "{" + grammatik[i].A.nameBL[0] + "} -> ";
}
for (int j = 0; j < grammatik[i].B.Count - 1; j++)
{
if (!grammatik[i].B[j].fl)
{
if (grammatik[i].B[j].Start)
richTextBox1.Text += "No | ";
else
richTextBox1.Text += "Nф | ";
}
else
{
richTextBox1.Text += Convert.ToString(grammatik[i].B[j].numBP) + "{" + grammatik[i].B[j].nameBL[0] + "} t = " + grammatik[i].B[j].t + " n = " + grammatik[i].B[j].n + " s = " + grammatik[i].B[j].s + " | ";
}
}
if (!grammatik[i].B[grammatik[i].B.Count - 1].fl)
{
if (grammatik[i].B[grammatik[i].B.Count - 1].Start)
richTextBox1.Text += "No \n";
else
richTextBox1.Text += "Nф \n";
}
else
{
richTextBox1.Text += Convert.ToString(grammatik[i].B[grammatik[i].B.Count - 1].numBP) + "{" + grammatik[i].B[grammatik[i].B.Count - 1].nameBL[0] + "} t = " + grammatik[i].B[grammatik[i].B.Count - 1].t + " n = " + grammatik[i].B[grammatik[i].B.Count - 1].n + " s = " + grammatik[i].B[grammatik[i].B.Count - 1].s + "\n";
}
}
}
void PrintGrammatik()
{
richTextBox1.Text = "";
for (int i = 0; i < grammatik.Count; i++)
{
if (!grammatik[i].A.fl)
{
if (grammatik[i].A.Start)
richTextBox1.Text += "No -> ";
else
richTextBox1.Text += "Nф -> ";
}
else
{
richTextBox1.Text += Convert.ToString(grammatik[i].A.numBP) + "{" + grammatik[i].A.nameBL[0] + "} -> ";
}
for (int j = 0; j < grammatik[i].B.Count - 1; j++)
{
if (!grammatik[i].B[j].fl)
{
if (grammatik[i].B[j].Start)
richTextBox1.Text += "No | ";
else
richTextBox1.Text += "Nф | ";
}
else
{
richTextBox1.Text += Convert.ToString(grammatik[i].B[j].numBP) + "{" + grammatik[i].B[j].nameBL[0] + "} | ";
}
}
if (!grammatik[i].B[grammatik[i].B.Count - 1].fl)
{
if (grammatik[i].B[grammatik[i].B.Count - 1].Start)
richTextBox1.Text += "No \n";
else
richTextBox1.Text += "Nф \n";
}
else
{
richTextBox1.Text += Convert.ToString(grammatik[i].B[grammatik[i].B.Count - 1].numBP) + "{" + grammatik[i].B[grammatik[i].B.Count - 1].nameBL[0] + "} \n";
}
}
}
private void button2_Click(object sender, EventArgs e)
{
Random rnd = new Random();
if (textBox34.Text == "" || textBox34.Text == " " ||
textBox35.Text == "" || textBox35.Text == " " ||
textBox36.Text == "" || textBox36.Text == " ")
{
MessageBox.Show("Незаполнены диапазоны");
return;
}
int t = Convert.ToInt32(textBox34.Text);
int n = Convert.ToInt32(textBox35.Text);
int s = Convert.ToInt32(textBox36.Text);
for (int i = 0; i < grammatik.Count; i++)
{
switch (i)
{
case 0:
{
textBox1.Text = Convert.ToString(rnd.Next(1,t));
textBox11.Text = Convert.ToString(rnd.Next(1, n));
textBox21.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 1:
{
textBox2.Text = Convert.ToString(rnd.Next(1, t));
textBox12.Text = Convert.ToString(rnd.Next(1, n));
textBox22.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 2:
{
textBox3.Text = Convert.ToString(rnd.Next(1, t));
textBox13.Text = Convert.ToString(rnd.Next(1, n));
textBox23.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 3:
{
textBox4.Text = Convert.ToString(rnd.Next(1, t));
textBox14.Text = Convert.ToString(rnd.Next(1, n));
textBox24.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 4:
{
textBox5.Text = Convert.ToString(rnd.Next(1, t));
textBox15.Text = Convert.ToString(rnd.Next(1, n));
textBox25.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 5:
{
textBox6.Text = Convert.ToString(rnd.Next(1, t));
textBox16.Text = Convert.ToString(rnd.Next(1, n));
textBox26.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 6:
{
textBox7.Text = Convert.ToString(rnd.Next(1, t));
textBox17.Text = Convert.ToString(rnd.Next(1, n));
textBox27.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 7:
{
textBox8.Text = Convert.ToString(rnd.Next(1, t));
textBox18.Text = Convert.ToString(rnd.Next(1, n));
textBox28.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 8:
{
textBox9.Text = Convert.ToString(rnd.Next(1, t));
textBox19.Text = Convert.ToString(rnd.Next(1, n));
textBox29.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 9:
{
textBox10.Text = Convert.ToString(rnd.Next(1, t));
textBox20.Text = Convert.ToString(rnd.Next(1, n));
textBox30.Text = Convert.ToString(rnd.Next(1, s));
break;
}
}
}
}
private void button1_Click(object sender, EventArgs e)
{
int maxT;
int maxN;
int maxS;
if (textBox31.Text == "" || textBox31.Text == " " ||
textBox32.Text == "" || textBox32.Text == " " ||
textBox33.Text == "" || textBox33.Text == " ")
{
MessageBox.Show("Незаполнены предпочтения по ресурсам");
return;
}
maxT = Convert.ToInt32(textBox31.Text);
maxN = Convert.ToInt32(textBox32.Text);
maxS = Convert.ToInt32(textBox33.Text);
for (int i = 0; i < grammatik.Count; i++)
{
for (int j = 0; j < grammatik[i].B.Count; j++)
{
if(grammatik[i].B[j].fl)
{
switch (grammatik[i].B[j].numBP)
{
case 1:
{
switch(grammatik[i].B[j].nameBL[0])
{
case 'О':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox2.Text);
a.n = Convert.ToInt32(textBox12.Text);
a.s = Convert.ToInt32(textBox22.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
case 'Л':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox1.Text);
a.n = Convert.ToInt32(textBox11.Text);
a.s = Convert.ToInt32(textBox21.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
case 2:
{
switch (grammatik[i].B[j].nameBL[0])
{
case 'Л':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox3.Text);
a.n = Convert.ToInt32(textBox13.Text);
a.s = Convert.ToInt32(textBox23.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
case 3:
{
switch (grammatik[i].B[j].nameBL[0])
{
case 'Т':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox4.Text);
a.n = Convert.ToInt32(textBox14.Text);
a.s = Convert.ToInt32(textBox24.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
case 4:
{
switch (grammatik[i].B[j].nameBL[0])
{
case 'Т':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox5.Text);
a.n = Convert.ToInt32(textBox15.Text);
a.s = Convert.ToInt32(textBox25.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
case 'С':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox6.Text);
a.n = Convert.ToInt32(textBox16.Text);
a.s = Convert.ToInt32(textBox26.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
case 5:
{
switch (grammatik[i].B[j].nameBL[0])
{
case 'О':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox7.Text);
a.n = Convert.ToInt32(textBox17.Text);
a.s = Convert.ToInt32(textBox27.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
case 6:
{
switch (grammatik[i].B[j].nameBL[0])
{
case 'Т':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox8.Text);
a.n = Convert.ToInt32(textBox18.Text);
a.s = Convert.ToInt32(textBox28.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
case 'Л':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox9.Text);
a.n = Convert.ToInt32(textBox19.Text);
a.s = Convert.ToInt32(textBox29.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
case 7:
{
switch (grammatik[i].B[j].nameBL[0])
{
case 'О':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox10.Text);
a.n = Convert.ToInt32(textBox20.Text);
a.s = Convert.ToInt32(textBox30.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
}
}
}
}
// PrintGrammatikResurs();
Variant X = new Variant();
X.var = new List<El>();
richTextBox2.Text = "";
rekObchod(X);
for (int i = 0; i < varianty.Count; i++)
{
Znach A = new Znach();
A.n = 0;
A.s = 0;
A.t = 0;
for (int j = 0; j < varianty[i].var.Count; j++)
{
A.t += varianty[i].var[j].t;
A.n += varianty[i].var[j].n;
A.s += varianty[i].var[j].s * A.n;
}
znach.Add(A);
}
if (maxN == -1)
maxN = 99999999;
if (maxT == -1)
maxT = 99999999;
if (maxS == -1)
maxS = 99999999;
PrintVar(maxT,maxN,maxS);
}
void PrintVar(int t, int n, int s)
{
richTextBox2.Text = "Варианты которые вам подходят:\n";
for (int i = 0; i < varianty.Count; i++)
{
if (znach[i].t < t && znach[i].n < n && znach[i].s < s)
{
richTextBox2.Text += "No -> ";
for (int j = 0; j < varianty[i].var.Count; j++)
{
richTextBox2.Text += varianty[i].var[j].numBP + "{" + varianty[i].var[j].nameBL[0] + "} -> ";
}
richTextBox2.Text += " Nф: " + "t = " + znach[i].t + "; n = " + znach[i].n + "; s = " + znach[i].s + "\n";
}
}
}
void rekObchod(Variant a)
{
if (a.var.Count <= 0)
{
for (int i = 0; i < grammatik[0].B.Count; i++)
{
a.var.Add(grammatik[0].B[i]);
rekObchod(a);
a.var.RemoveAt(0);
}
}
else
{
for (int i = 0; i < grammatik.Count; i++)
{
if (grammatik[i].A.nameBL == a.var[a.var.Count - 1].nameBL && grammatik[i].A.numBP == a.var[a.var.Count - 1].numBP)
{
for (int j = 0; j < grammatik[i].B.Count; j++)
{
a.var.Add(grammatik[i].B[j]);
if (a.var[a.var.Count - 1].fl == false)
{
a.var.RemoveAt(a.var.Count - 1);
Variant b = new Variant();
b.var = new List<El>();
for (int k = 0; k < a.var.Count; k++)
b.var.Add(a.var[k]);
varianty.Add(b);
return;
}
else
if (a.var[a.var.Count - 1].numBP != grammatik[i].A.numBP + 1)
{
a.var.RemoveAt(a.var.Count - 1);
continue;
}
else
{
rekObchod(a);
a.var.RemoveAt(a.var.Count - 1);
}
}
}
}
}
}
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace Диплом
{
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
PAGE \* MERGEFORMAT 28
Создание бизнес-модели предприятия, согласно инструментарию планирования бизнес-процессов