Создание бизнес-модели предприятия, согласно инструментарию планирования бизнес-процессов

В современных условиях многие компании повышают свою конкурентоспособность за счет создания холдинговых структур, объединяя тем самым под общим управлением процессы разработки, производства и дистрибуции товаров и услуг. Интегрированная холдинговая структура - совокупность материнской компании и контролируемых ею дочерних предприятий...

2015-09-20

1.17 MB

15 чел.


Поделитесь работой в социальных сетях

Если эта работа Вам не подошла внизу страницы есть список похожих работ. Так же Вы можете воспользоваться кнопкой поиск


Оглавление

 

Введение

Теория бизнес-процессов впервые появилась меньше двадцати лет назад и сначала была встречена с полным равнодушием. Даже те немногие, кто заинтересовался идеей, выражали скептицизм в отношении ее реальных достоинств, и только в связи с массовым внедрением Всеобщего качества в организациях идея управления бизнес-процессами начала набирать обороты.

Нет смысла спорить о том, что управление бизнес-процессами – один из важнейших инструментов управления в современной компании. В будущем роль управления процессами будет только возрастать. Виртуализация, автоматизация производства, повсеместное использование роботов приведут к тому, что ограничением при повышении эффективности бизнеса будут не сырье и оборудование, а применяемые способы создания ценности. Другими словами, алгоритмы создания продуктов и услуг. Умение управлять бизнес-процессами станет одной из ключевых компетенций менеджеров среднего звена.

На сегодняшний день инжиниринг, направленный на проектирование бизнес-процессов в целях достижения улучшения деятельности организации, является одним из самых современных инструментов и ключевой точкой управления любой организации. Постоянное совершенствование бизнеса означает способность делать все процессы быстрее с меньшими затратами, учитывая качество продукции и уровень обслуживания клиентов.

В современных условиях многие компании повышают свою

конкурентоспособность за счет создания холдинговых структур, объединяя тем самым под общим управлением процессы разработки, производства и дистрибуции товаров и услуг. Интегрированная холдинговая структура - совокупность материнской компании и контролируемых ею дочерних предприятий, связанных единым технологическим циклом и объединенных одним видом бизнеса, с целью снижения общих издержек, завоевания новых секторов рынка и повышения конкурентоспособности.

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

Цель выпускной работы – это создание бизнес-модели предприятия, согласно инструментарию планирования бизнес-процессов.

Таким образом, из поставленной цели вытекают следующие задачи:

  •  ознакомление с основными понятиями и классификацией бизнес-процессов;
  •  изучение структуры бизнес-процессов;
  •  моделирование бизнес-процессов
  •  изучение грамматики бизнес-процессов и её порождение;
  •  реализация бизнес-процесса на примере конкретного предприятия;
  •  тестирование реализованного бизнес-процесса;
  •  анализ результатов.

  1.  Понятие бизнес-процессов и их роль в современном управлении

Бизнес-процесс - это логичный, последовательный, взаимосвязанный набор мероприятий, который потребляет ресурсы, создаёт ценность и выдаёт результат.

1.1 Структура и классификация бизнес-процессов

Типовая структура бизнес-процессов (Рис.1. Структура бизнес-процессов) управления представляется стандартной цепочкой управленческого цикла, который состоит из следующих этапов:

  •  Этап 1. "Планирование". На данной этапе собирается информация, проводится ее анализ и разрабатывается план действий.
  •  Этап 2. "Организация". После разработки плана нужно обеспечить его реализацию - довести мероприятия до сотрудников, замотивировать и обеспечить сотрудников необходимыми для реализации плана ресурсами.
  •  Этап 3. "Учет". По истечении установленного периода нужно собрать фактическую информацию о выполнении запланированных работ и достигнутых результатов.
  •  Этап 4. "Контроль". После проведения учета план сопоставляется с фактической информацией и проводится анализ фактических отклонений.
  •  Этап 5. "Регулирование". На последнем пятом этапе принимается решение о последующих действиях - корректировки плана, поощрении или наказании сотрудников, которые эти планы реализовывали.

Рис.1. Структура бизнес-процессов

В зависимости от места бизнес-процессов в организационной структуре компании выделяют следующие бизнес-процессы: (Рис.2. Классификация бизнес-процессов)

Первая группа бизнес-процессов - это основные процессы:

  •  Розничная торговля аудио–видео продукции,
  •  Производство и продажа аудио–видео продукции,
  •  Производство и продажа торгового оборудования

Вторая группа бизнес-процессов - это обеспечивающие процессы:

  •  Обеспечение безопасности,
  •  Административно-хозяйственное обеспечение – АХО,
  •  Юридическое обеспечение.

Третья группа процессов - это процессы управления.

  •  Стратегическое управление,
  •  Управление персоналом,
  •  Управление финансами,
  •  Управление маркетингом,
  •  Управление товарным запасом.     

Рис.2. Классификация бизнес-процессов.

  1.  Инструменты бизнес-моделирования и особенности его применения

Бизнес-моделирование представляет собой процесс разработки и внедрения различных бизнес-моделей организации (стратегия, бизнес-процессы, организационная структура, качество и др.) с целью формализации и оптимизации её деятельности.

Существует 4 основных способа разработки бизнес-моделей. Перечислим их в порядке убывания уровня эффективности построения и использования бизнес-моделей.

  •  В правилах специализированного программного продукта бизнес-моделирования: комбинация графики, таблиц и текста.
  •  Графический: дерево, блок-схема, технологическая карта и т.п.
  •  Табличный
  •  Текстовый

Бизнес-моделированием занимаются многие организации, но каждая находится на разных этапах развития по данному направлению. Кто-то уже разработал и активно использует комплексную бизнес-модель (совокупность моделей, документов и систем, описывающих всю деятельность организации). Кто-то имеет только графические модели и регламенты нескольких бизнес-процессов.

Рис. 3. Иерархический список бизнес-процессов предприятия

Основные виды бизнес-моделей, которые разрабатываются в организациях:   

  •  дерево (иерархический список) бизнес-процессов – см. Рис.1;
  •  графические модели бизнес-процессов;
  •  модель организационной структуры;
  •  модели целей и показателей;
  •  модели библиотеки документов (дерево документов), модели информационных систем;
  •  модели продуктов и услуг;
  •  модели по менеджменту качества и многое другое.

Все эти модели позволяют разработать профессиональные программные продукты бизнес-моделирования.

Некоторые известных на рынке решений программные продукты: Business Studio, ARIS, All Fusion Process Modeler (BPWIN), Бизнес-инженер, Microsoft Visio. У каждого из них есть свои функциональные особенности, ограничения и преимущества.

  1.  Модель бизнес-процессов

Моделью бизнес-процесса называется его формализованное (графическое, тестовое, символьное) описание, отражающее реально существующую или предполагаемую деятельность предприятия. Модель, как правило, содержит следующие сведения о бизнес-процессе:

  •  набор составляющих процесс шагов — бизнес-функций;
  •  порядок выполнения бизнес-функций;
  •  механизмы контроля и управления в рамках бизнес-процесса;
  •  исполнителей каждой бизнес-функции;
  •  входящие документы/информацию, исходящие документы/информацию;
  •  ресурсы, необходимые для выполнения каждой бизнес-функции;
  •  документацию/условия, регламентирующие выполнение каждой бизнес- функции;
  •  параметры, характеризующие выполнение бизнес-функций и процесса в целом.

Во всем мире в настоящее время осуществляется переход от традиционной функциональной организации производства к процессной организации. При этом под бизнес-процессом подразумевается деятельность предприятия или его отделов, имеющая ценность для клиента.

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

Пример бизнес-процесса – получение товара по заказу. Такая деятельность предполагает получение заявки, проверку наличия товара, счет, контроль платежа и доставку. Важность этих компонентов безусловна, но для клиента сами по себе они не представляют весомой ценности. Клиенту интересен лишь целостный результат, быстрое получение и качество товара.

Детализация бизнес-процесса осуществляется с помощью бизнес-функций, бизнес-операций и бизнес-правил. Деятельность одного исполнителя по решению задачи бизнес-процесса является бизнес-функцией. Бизнес-операцией же является отдельная операция, описывающая деятельность конкретного должностного лица над конкретным информационным объектом. Бизнес-правила вводят ограничения на исполнение бизнес-процесса, например, определяют последовательность выполнения некоторых функций или операций, ограничивают конкретные значения информационных объектов и т.п.

  1.  Проектирования бизнес-процесса

Решение задачи проектирования бизнес-процесса основано на введении специальной атрибутной правосторонней порождающей грамматики для бизнес-процесса, назначение которой заключается в умении строить любые правильные цепочки выполнения бизнес-процесса (т.е. возможные последовательности необходимых для выполнения процесса бизнес-функций), не генерируя при этом ни одной неправильной цепочки.

 Порождающей грамматикой для бизнес-процесса называется упорядоченная восьмерка объектов G = (Mt, Mn, Mo, P, Es, Ms, En, Mn). где

Mt – множество терминальных символов;

Mn – множество нетерминальных символов;

Mo Mn – множество начальных символов;

P – множество порождающих правил;

Es – конечное множество синтезируемых атрибутов;

Ms – множество методов синтеза атрибутов;

En – конечное множество наследуемых атрибутов;

Mn – множество методов наследования атрибутов.

Первые четыре объекта G определяют традиционным образом порождающую грамматику. Следующие четыре объекта определяют множество свойств (атрибутов), характеризующих символы порождаемых цепочек, и правила обработки этих свойств. Последний символ предназначен для обеспечения возможности порождения подцепочек бизнес-функций, которые могут (но не обязательно должны) выполняться параллельно.

Таким образом, грамматика бизнес-процесса представляет собой порождающую грамматику с дополнительными механизмами передачи информации и обработки некоторых не контекстно-свободных аспектов синтаксиса языка описания бизнес-процесса (например, требования ограничений по ресурсам). Введение в грамматику синтезируемых атрибутов и методов их синтеза позволяет порождать только цепочки, удовлетворяющие заранее известным жестким ограничениям на совокупное использование бизнес-процессом одного или нескольких ресурсов. Назначение наследуемых атрибутов заключается в необходимости передавать на последующие шаги порождения бизнес-процесса информацию о местах выполнения бизнес-функций в организационно штатной структуре предприятия. В случае, когда бизнес-функция может быть выполнена в различных подразделениях предприятия, наследуемый атрибут несет информацию по выбору правил порождения хвоста цепочки выполнения бизнес-процесса.

Укрупненный алгоритм работы метода включает следующие 5 шагов:

  •  Трансляция моделей, формализующих результаты обследования на традиционных языках моделирования в граф бизнес-процесса.
  •  Уточнение графа бизнес-процесса на предмет возможности последовательности и параллельности выполнения бизнес-функций, а также введение значений синтезируемых атрибутов, ограничений на них и методов их синтеза.
  •  Построение грамматики бизнес-процесса на основании его графа.
  •  Генерация (на основании порождающей грамматики) ограниченного множества вариантов выполнения бизнес-процесса на основании набора его бизнес-функций с учетом ограничений.
  •  Принятие решения по проектируемому бизнес-процессу.
  1.  Разработка инструментария планирования бизнес-процесса и его применение деятельности предприятия “Холдинг Афанасий”
  2.  
  3.  
    1.   Среда разработки

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 и многое другое.

  1.   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.   Разработка программного продукта

Для выполнения выпускной работы требовалось разработать инструментарий для планирования бизнес-процессов. Перед автором стояла задача построения модели и структуры предприятия.

Моделью предприятия послужил “Холдинг Афанасий” (Тверской Пивоваренный завод). Так как предприятие крупное, следует рассмотреть и описать конкретный бизнес-процесс. А именно процесс сбыта приготавливаемой продукции.

Из теоретической части выпускной работы мы знаем, что детализация бизнес-процесса осуществляется с помощью бизнес-функций, бизнес-операций и бизнес-правил. Поэтому, процесс сбыта содержит следующие бизнес-функции:

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{О}

На основании приведенной грамматики может быть порождено конечное число вариантов исполнения бизнес-процесса сбыта.

Рис. 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



 

Другие похожие работы, которые могут вас заинтересовать.
19944. Раскрытие сущности бизнес-планирования и применение теоретических основ при разработке бизнес-плана торговой организации 115.72 KB
  Для гибкого реагирования всех структурных подразделений предприятия на изменение рыночной ситуации требуется не просто оперативное планирование. Руководство любого предприятия все время ощущает необходимость выбора. Однако ученые а также руководители крупных предприятий относят планирование к деятельности высшего порядка и считают что формальное планирование предоставляет немало выгод: помогает руководству предприятия мыслить перспективно; способствует четкой координации предпринимаемых предприятием усилий; формирует систему целевых...
19799. Реинжиниринг бизнес-процессов 27.74 KB
  Непрекращающееся развитие технологий управления поднимает требования к конкурентоспособности предприятий и организации на принципиально новый уровень и заставляет многие компании искать инновационные решения для повышения эффективности своего бизнеса.
3261. Реинжиниринг бизнес-процессов «ОАО Ростелеком» 1.88 MB
  Бизнес-процессы. Объектом изменений при реинжиниринге являются бизнес-процессы. Именно в этом состоит основное отличие реинжиниринга от реструктуризации, в которой объектом изменений является организационная структура.
15940. Моделирование и планирование бизнес-процессов 500.22 KB
  В компании имеются следующие структурные подразделения: Складская служба Бухгалтерия Магазин Коммерческий отдел который подразделяется на отдел продаж и отдел снабжения. Основные процедуры в компании таковы: Начальник отдела продаж ОП изучает и обобщает спрос клиентов на стройматериалы требования к внешнему виду качеству материалов и стоимостным характеристикам а также анализирует отчет по продажам получаемый от магазина. Составленный отчет он передает начальнику отдела снабжения ОС. Начальник отдела снабжения...
17277. СОВЕРШЕНСТВОВАНИЕ БИЗНЕС ПРОЦЕССОВ ООО «АЛЫЕ ПАРУСА» 601.38 KB
  Существует немного других отраслей в которых сбор обработка применение и передача информации были бы настолько же важны для ежедневного функционирования как в туристической индустрии. Такой подход требует ответа на ряд нетехнологических вопросов: в чем выражается доход от внедрения информационных систем и услуг как его измерить какие организационные и кадровые преобразования следует предпринять для полноценной реализации проекта внедрения информационных технологий. Кроме того для получения информации о месте пребывания его...
19374. Необходимость использования консультантов при реинжиниринге бизнес-процессов 61.17 KB
  Необходимость использования консультантов при реинжиниринге бизнес-процессов Работа по обеспечению реинжиниринга бизнес-процессов сопровождается серией интервью с персоналом заказчика процессным консультированием семинарами и тренингами а также мероприятиями необходимыми для построения базовых моделей бизнес - процессов как есть с последующей разработкой рекомендаций как должно быть . Особую роль в обеспечении эффективности реинжиниринга бизнес-процессов принадлежит консультантам. Возможными целями проекта могут быть: Перепроектирование...
16608. Принципы динамического моделирования бизнес-процессов управления проектом 2.28 MB
  Принципы динамического моделирования бизнес-процессов управления проектом конспект доклада Современные проекты характеризуются большим количеством ограничений и критериев касающихся сроков качества имеющихся ресурсов и прочих аспектов. В том или ином виде данная область присутствует во всех основных методологиях управления проектами на основе анализа которых можно выделить следующие общие принципы: Интеграционная задача решается в общем виде за счёт универсальной модели бизнес-процессов что не является вполне корректным в...
20424. Разработка алгоритмов построения типовых бизнес-процессов на основе слабоструктурированных данных 755.56 KB
  Разработка алгоритмов построения типовых бизнес-процессов на основе слабоструктурированных данных. Также построена модель выявления типовых бизнес-процессов описан механизм ее реализации. Анализ методов оценки эффективности бизнес процессов.
11606. МОДЕЛИРОВАНИЕ ОСНОВНЫХ БИЗНЕС-ПРОЦЕССОВ АГРОФИРМЫ «СЕЧЕНОВСКАЯ». ПРОГРАММА «ПРОЖЕКТ ЭКСПЕРТ» 1.32 MB
  Осуществление производственного процесса в сельском хозяйстве в условиях рыночной системы хозяйствования предполагает полную самостоятельность и ответственность, самоокупаемость и самофинансирование производства. Для этого необходимо обеспечить рациональное использование всех имеющихся ресурсов, то есть использовать их так, чтобы от этого была наибольшая отдача.
16809. Адаптивное проектирование бизнес-процессов как инструмент реализации стратегий развития промышленных предприятий 121.9 KB
  Промышленные предприятия в процессе своего развития неизбежно сталкиваются с необходимостью изменения своих стратегий. Как правило, наиболее активно такие изменения происходят при вступлении предприятия в кризисный период, который может быть связан как с внутренними (особенности жизненного цикла предприятия), так и с внешними факторами (кризис в отрасли или в мировой экономике в целом). В связи с этим для обеспечения устойчивого развития промышленного предприятия необходимо, чтобы его операционная деятельность соответствующим образом изменялась при каждом изменении стратегии развития предприятия
© "REFLEADER" http://refleader.ru/
Все права на сайт и размещенные работы
защищены законом об авторском праве.