Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Проектирование ИС по управленческому учету в проектной организации АО «Промэнергопроект»

Содержание:

Введение

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

Объектом исследования в рамках данной работы выступает компания ООО «Промэнергопроект», которая занята в сфере оказания услуг по разработке комплексных проектов.

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

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

Цель работы – на базе современных средств проектирования и разработки программного обеспечения разработать ИС «Менеджер Проектов», позволяющую автоматизировать процессы управленческого учета выполнения проектов в ООО «Промэнергопроект».

Предполагаемый эффект от применения разрабатываемой ИС «Менеджер Проектов» на предприятии может быть выражен улучшением таких характеристик, как:

  • эффективность учета проектов;
  • управление проектами: контроль выполнения проектов, их частей;
  • автоматизация постановки и контроля задач конкретным исполнителям по текущим проектам.

По ходу проектного исследования в работе применены современные методологии, вспомогательные программные средства и системы, включающие:

  • RUP – методология и стандарт разработки программного обеспечения;
  • UML – спецификация 2.0 унифицированного языка моделирования программного обеспечения;
  • AllFusion Process Modeler 7.1 – CASE-система построения диаграмм бизнес-процессов в нотациях IDEF, DFD;
  • SAP Power Designer – CASE-система проектирования программного и информационного обеспечения;
  • Технологии Code Engineering и Database Forward Engineering, позволяющие в автоматизированном режиме генерировать шаблоны исходного кода программного обеспечения и сценарии создания базы данных;
  • Visual Basic .NET – язык программирования высокого уровня (ЯВПУ)

MySQL, NET, Visual Studio – среды и средства разработки программного и информационного обеспечения системы.

Технико-экономическая характеристика предметной области и предприятия

Характеристика предприятия и его деятельности

ООО «Промэнергопроект» — динамично развивающаяся организация, которая предлагает своим заказчикам широкий спектр услуг по проектированию зданий и сооружений II уровня ответственности.

ООО «Промэнергопроект» ведет комплексное проектирование объектов: промышленного, общественного, сельскохозяйственного, жилищного назначений, энергетики, очистки промышленных и ливневых стоков, линейных сооружений теплоснабжения, водоснабжения и канализации, газоснабжения и электроснабжения.

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

Проектная деятельность ООО «Промэнергопроект» предполагает обработку поступающих заявок от заказчиков на выполнение проектов. При этом проектные работы ведутся инженерами различных категорий под руководством главных инженеров проекта (ГИП).

ООО «Промэнергопроект» выполняет комплексное проектирование объектов промышленного, общественного, сельскохозяйственного, жилищного назначения, энергетики, линейных сооружений (теплотрассы и тепломагистрали, сети напряжением до 35 кВ, сети водоснабжения и канализации), пищевой и перерабатывающей промышленности.

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

В своей структуре ООО «Промэнергопроект» имеет отделы: архитектурно-строительный, административный, теплоэнергетический, технологический, отопления и промвентиляции, водоснабжения и канализации, электротехнический, сметный.

Организационная структура управления предприятием

Схема организационной структуры управления Компании приведена на рисунке 1.

Рисунок 1 – Организационная структура Компании

Организационная структура Компании включает в себя следующие подразделения:

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

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

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

  • группа разработки – разработка технических инженерных решений;
  • группа дизайна – разработка дизайна для технических инженерных решений;
  • группа тестирования – оценка качества разработанных проектов;
  • группа сопровождения – внедрение и обслуживание проектов.

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

Выбор комплекса задач автоматизации и характеристика существующих бизнес-процессов

Для описания бизнес-процессов Компании в данной работе применена методология структурного анализа и проектирования SADT, которая базируется на структурном анализе систем и графическом представлении организации в виде системы функций [7]. В частности, использована нотация функционального моделирования IDEF0, которая сводится к декомпозиции функций на отдельные бизнес-процессы, в результате чего разрабатывается иерархическая модель; при этом декомпозицию можно производить многократно до детального описания всех процессов [5].

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

Для построения IDEF0 моделей использована система AllFusion Process Modeler 7.1.

Проектные работы регламентируются действующими стандартами, нормами и правилами в области проектных работ (рисунок 2).

Рисунок 2 – Контекстная диаграмма IDEF0

Проектная деятельность ООО «Промэнергопроект» ставит комплекс задач, включающий три основные группы:

  • Организация работы с заказчиками, в результате которой подготавливаются исходные данные и составляются задания на проектные работы для производственных отделов. Задания заказчиков рассматриваются компетентными инженерами и утверждаются ГИП.
  • Непосредственное выполнение проектов инженерами производственных отделов. Каждое производственное подразделение имеет своего ГИПа, который руководит проектом. Результатом деятельности производственных отделов являются выпущенные серии проектов, предоставляемые заказчику. Проекты также могут быть отправлены на доработку в случае обнаружения ошибок.
  • Обеспечение развития технической подготовки и развития сотрудников. Такой уровень подготовки и развития специалистов обеспечивается посредством организации и проведения обучающих курсов по различным профильным направлениям.

Схема описанных задач приведена на диаграмме бизнес-процессов на рисунке 3 (диаграмма выполнена с помощью программного средства AllFusion Process Modeler 7.1).

Рисунок 3 – Схема бизнес-процессов

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

Рисунок 4 – Схема взаимодействия с заказчиками

Стандартный процесс выполнение проекта показан на диаграмме на рисунке 5 и проходит в три этапа:

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

Рисунок 5 – Схема процессов деятельности производственных отделов

На рисунках 6 – 9 приведены функциональные схемы бизнес-процессов «To-Be», то есть как будет после внедрения в рассмотренные процессы новой информационной системы – ИС «Менеджер Проектов». Все изменения, отраженные на данной функциональной модели, касаются использования новой АИС для учета проектной деятельности: учета проектов, создания и контроля выполнения задач в соответствии с моделью предметной области, приведенной на рисунке 6.

Все изменения на диаграммах показаны синим цветом.

Рисунок 6 – Контекстная диаграмма IDEF0 «To-Be»

Рисунок 7 – Схема бизнес-процессов «To-Be»

Рисунок 8 – Схема взаимодействия с заказчиками «To-Be»

Рисунок 9 – Схема процессов деятельности производственных отделов «To-Be»

Информационное обеспечение задачи

Информационная модель и её описание

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

Рисунок 10 – Информационная модель системы

Из построенной информационной модели видны основные направления информационных потоков:

  1. Ведение справочников администратором системы. Администратор ведет справочники подразделений и исполнителей, а также заказчиков, внося изменения в соответствующие таблицы базы данных посредством экранных форм.
  2. Регистрация в системе проектов и их серий менеджером проектов, используя соответствующие таблицы БД и экранные формы.
  3. Учет выполнения задач. Менеджер проектов по актуальным проектам создает для исполнителей задачи. Исполнители получают списки актуальных задач, исполняют их и с помощью соответствующей экранной формы отмечают процесс их выполнения.
  4. На основании списка проектов, серий и процесса выполнения задач руководитель получает отчет о ходе выполнения проектов.

Используемые классификаторы и системы кодирования

В системе используются следующие классификаторы:

  1. Классификатор проектов – линейный, шестизначный, присваивается менеджером проектов. Пример: 281821.
  2. Классификатор серий – нелинейный, составной, состоит из двух частей в формате «КОД_ПРОЕКТА-КОД_СЕРИИ». Здесь код проекта – классификатор проекта, к которому относится серия, код серии – 2-символьная константа из следующего множества:

ВК – разделы водоснабжения и канализации;

ПВ – разделы отопления и промвентиляции;

ЭМ – разделы электротехники;

СМ – разделы сметной документации;

ТХ – технологические разделы;

АС – разделы автоматизированных систем управления.

Пример классификатора: 281821-АС.

  1. Классификаторы, определяющие коды отделов, исполнителей, задач и заказчиков являются порядковыми и линейными в формате «0000», например, 0001. Эти классификаторы создаются с помощью встроенных в СУБД возможностей использованием целочисленных полей-счетчиков с автоинкрементом.

Характеристика нормативно-справочной, входной и оперативной информации

Характеристика входной справочной и оперативной информации CRM-системы приведена в таблице 1.

Таблица 1

Характеристика входной справочной и оперативной информации

Данные

Форма

Период

Объем (состав)

Цель

Отделы

Диалог ввода данных

При пуско-наладке системы и в случае добавления в структуру компании новых отделов

Краткое и полное наименования, телефон

Хранение списка подразделений для учета выполнения проектов по отделам

Исполнители

Диалог ввода данных

При пуско-наладке системы и в случае приема новых сотрудников в отделы

ФИО, должность, отдел, учетные данные (логин, пароль, тип)

Хранение списка исполнителей для учета выполнения проектов по исполнителям, делегирования им задач

Заказчики

Диалог ввода данных

При налаживании контактов с новыми заказчиками

Наименование фирмы, адрес, электронная почта, реквизиты, Ф.И.О. и телефон контактного лица

Учет проектов заказчиков

Задачи

Диалог ввода данных

По мере создания задач исполнителям по активным проектам

Наименование, создатель, получатель, дата создания, дата факта исполнения, комментарии

Контроль выполнения задач, самоорганизация, напоминания

Продолжение таблицы 1

Характеристика входной справочной и оперативной информации

Данные

Форма

Период

Объем (состав)

Цель

Проекты

Диалог ввода данных

По мере появления новых проектов

Наименование, Код, Заказчик, Дата создания и окончания проектирования

Учёт проектов

Серии

Диалог ввода данных

По мере появления новых серий проектов

Наименование, Код, Код проекта, Ведущий отдел, Дата создания и окончания проектирования, комментарии

Учёт проектных серий

Характеристика результатной информации

Характеристика результатной оперативной информации CRM-системы приведена в таблице 2.

Таблица 2

Характеристика результатной информации

Данные

Форма

Период

Объем (состав)

Цель

Список задач

Табличная

При входе исполнителя в систему, при каждом обращении к списку задач

Наименование, создатель, дата создания, дата факта исполнения, комментарии

Контроль выполнения задач, самоорганизация, напоминания

Отчет по выполненным проектам

Отчет в HTML-формате

По запросу

Наименование проекта, Код проекта, Ведущий отдел, Руководитель проекта, Дата создания, окончания, срок проекта, комментарии

Учёт проектных серий

Программное обеспечение задачи

Общие положения (дерево функций и сценарий диалога)

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

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

  • ведение вспомогательных справочников (заказчиков, исполнителей, отделов);
  • регистрация и учет проектов и их серий;
  • учет выполнения задач исполнителями;

Рисунок 11 – Дерево функций ИС

В число служебных функций ИС входят функции, которые так или иначе обслуживают выполнение основных функций. К служебным функциям ИС относятся:

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

Диалог системы с пользователями организован через главное меню –для каждого типа пользователя определен свой состав главного меню (рисунок 12).

Меню администратора составляет перечень подсистем управления вспомогательными справочниками (заказчиков, исполнителей, отделов).

Меню менеджера проектов предоставляет доступ к подсистеме учета проектов и их серий, а также позволяет создавать задачи для исполнителей.

Меню исполнителя содержит учетную таблицу «своих» задач и возможности учета их выполнения.

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

Рисунок 12 – Сценарий диалога ИС

Любому пользователю доступны сервисные функции: авторизации, настройки подключения к БД, завершения работы системы.

Характеристика базы данных

На этапе физического построения базы данных принимаются решения о способах реализации БД, выбирается СУБД (в данном случае – MySQL: выбор СУБД ИС «Менеджер Проектов» определен исходными требованиями к разработке системы). Цель данного этапа – описание способа физической реализации логической модели (выбор таблиц, сопоставление их полям типов данных, поддерживаемых выбранной СУБД, реализация ограничений и обеспечения целостности данных). В результате должна получиться схема физической структуры БД и ее описание.

На физической модели данных ИС «Менеджер Проектов» будут уточняться конкретные таблицы и поля (их именования будут преобразованы в латиницу), указаны конкретные типы данных полей, описаны ограничения на них – подробная спецификация приведена в таблице 3.

Таблица 3

Спецификация базы данных

Атрибут

Тип данных

MySQL

Именование поля

Обяза-тельный

Таблица Department – «Отдел»

Код

integer

dep_id

Да

Сокращенное наименование

varchar[10]

dep_shortname

Да

Полное наименование

varchar[50]

dep_fullname

Да

Телефон

varchar[12]

dep_phone

Да

Таблица Employee – «Сотрудник»

Табельный номер

integer

emp_id

Да

Отдел

integer

emp_department_id

Да

Фамилия

varchar[50]

emp_surname

Да

Имя

varchar[50]

emp_firstname

Да

Отчество

varchar[50]

emp_fathername

Да

Должность

varchar[50]

emp_post

Да

Признак руководителя

bool

emp_isboss

Да

Логин

varchar[10]

emp_login

Да

Пароль

varchar[10]

emp_password

Да

Права

integer

emp_role

Да

Таблица Part – «РазделПроекта»

Серия

varchar[20]

prt_id

Да

Код проекта

varchar[20]

prt_project_id

Да

Ведущий отдел

integer

prt_department_id

Да

Дата создания

date

prt_create

Да

Дата исполнения по договору

date

prt_deadline

Да

Дата фактического завершения

date

prt_completed

Нет

Статус

varchar[20]

prt_status

Да

Комментарий

varchar[255]

prt_comments

Нет

Название

varchar[255]

prt_name

Да

Таблица Task – «Задача»

Код

integer

tsk_id

Да

Раздел

varchar[20]

tsk_part

Да

Исполнитель

integer

tsk_executor_id

Да

Наименование

varchar[255]

tsk_name

Да

Дата создания

date

tsk_create

Да

Дата исполнения по договору

date

tsk_deadline

Да

Дата фактического завершения

date

tsk_completed

Нет

Статус

varchar[20]

tsk_status

Да

Комментарий

varchar[255]

tsk_comments

Нет

Продолжение таблицы 3

Спецификация базы данных

Атрибут

Тип данных

MySQL

Именование поля

Обяза-тельный

Таблица Project – «Проект»

Код

varchar[20]

prj_id

Да

Заказчик

integer

prj_customer_id

Да

Руководитель

integer

prj_owner_id

Да

Наименование

varchar[255]

prj_name

Да

Дата создания

date

prj_create

Да

Дата исполнения по договору

date

prj_complete

Нет

Дата фактического завершения

date

prj_deadline

Да

Таблица Customer – «Заказчик»

Код

integer

cst_id

Да

Наименование

varchar[100]

cst_name

Да

Адрес

varchar[100]

cst_address

Нет

Телефон

varchar[25]

cst_phone

Нет

EMail

varchar[30]

cst_mail

Нет

Реквизиты

varchar[255]

cst_requisites

Нет

Контактное лицо

varchar[50]

cst_contact

Нет

На рисунке 13 приведена схема физической модели данных ИС.

Рисунок 13 – Физическая модель даных

Структурная схема пакета (дерево вызова программных модулей)

Программные модули системы сосредоточены в ее объектной модели. При построении объектной модели системы – диаграммы классов, которая является основой объектно-ориентированного подхода к созданию системы [1]. Диаграммы классов являются основными составляющими модели любого программного обеспечения [2].

Основная идея, которая лежит в основе модели классов ИС «Менеджер Проектов», состоит в использовании классов со стереотипом «сущность». Данные экземпляров этих классов будут храниться в базе данных. Диаграмма классов-сущностей похожа на функциональную модель «сущность-связь», которая определяет схему данных (IDEF1X). Однако, в отличии от моделей IDEF1X, на диаграмме классов существует возможность задать не только атрибуты классов, но и их операции [3].

В объектной структуре предметной области ИС выделяются классы-сущности: Department, Employee, Project, Serie, Task, Customer. Поскольку все классы сущности с одной стороны связаны с базой данных, а с другой стороны – должны управляться пользователем (пользователь может создавать, редактировать и удалять экземпляры сущностей, в том числе и из БД), то первым уровнем в иерархии классов целесообразно сделать интерфейсы. Преимущества интерфейсов состоят в использовании возможности избежать множественного наследования в схеме классов – известно, что множественное наследование «портит» объектную архитектуру системы и увеличивает вероятность ошибок на этапах проектирования и кодирования [6]. Кроме того, множественное наследование не поддерживается платформой .NET и языком программирования VB. В качестве интерфейсов в схеме классов необходимо выделить следующие:

  1. IDBManagement – интерфейс связи класса-сущности с соответствующей таблицей в базе данных. Интерфейс будет иметь адаптер подключения к соответствующей таблице в БД (TableAdapter) и набор свойств для отправки БД запросов манипулирования данными: InsertRow, UpdateRow, DeleteRow (соответственно, вставка, обновление и удаление), а также метод инициализации, по которому класс сущности будет инициализировать свои поля – Initialize – данный метод будет предназначаться для идентификации конкретного объекта-экземпляра сущности по его ключевому полю (первичному ключу из базы данных, например при выполнении операций с экземпляром, выбранным пользователем из таблицы на форме).
  2. IUserManagement – интерфейс доступа пользователя к манипулированию данными. Интерфейс будет предлагать форму ввода / редактирования данных экземпляра класса и методы выполнения пользователем команд управления: CreateNew, EditData, Delete.

Диаграмма модулей (классов) ИС «Менеджер Проектов» приведена на рисунке 14.

Рисунок 14 – Диаграмма классов ИС

Описание программных модулей

Использование любой функции в информационной системе начинается с процесса получения прав доступа к функциям и данным – процедуры авторизации пользователя. Авторизация пользователя осуществляется по личному логину и паролю учетной записи пользователя. Учетные записи хранятся в базе данных. На рисунке 15 приведена диаграмма активности, соответствующая алгоритму авторизации пользователя в ИС. На данной диаграмме показаны области ответственности пользователя и системы в процессе выполнения процедуры авторизации.

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

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

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

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

  • Создание новых записей. При этом система использует формы диалога ввода данных новой записи. Поля ввода диалога заполняются значениями по умолчанию и меняются в процессе заполнения.
  • Редактирование выбранных записей. При этом система использует форму диалога редактирования данных выбранной записи.
  • Удаление выбранных записей. При этом система запрашивает у пользователя подтверждение на удаление каждой выбранной позиции.

Отображение диалогов ввода / редактирования данных предусматривают проверку введенных пользователем данных:

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

Каждая выполненная операция по манипулированию данными применяет выполненную команду к БД и инициирует принудительное обновление отображаемой учетной таблицы данных.

Изложенные принципы процесса управления данными представлены на диаграмме типового алгоритма ведения информационных таблиц, приведенного на рисунке 16.

Рисунок 16 – Диаграмма активности процесса управления данными

Контрольный пример реализации проекта и его описание

В рамках контрольного примера работы ИС необходимо проверить все ее функции.

Основу пользовательского интерфейса ИС будет составлять одно основное окно, в котором посредством главного меню пользователь может переключаться между подсистемами в соответствии с делегированным ему доступом.

На рисунке 17 приведен вид главного окна системы, основными элементами которого являются:

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

Рисунок 17 – Главная форма ИС

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

Для обеспечения корректности ввода данных предусматриваются следующие меры (на уровне пользовательского интерфейса):

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

На рисунке 18 приведен вид диалога ввода данных в справочник отделов.

Рисунок 18 – Форма ввода данных отдела

На рисунке 19 приведен вид формы диалога ввода данных в справочник сотрудников.

Рисунок 19 – Форма ввода данных сотрудника

На рисунке 20 приведен вид формы диалога ввода данных заказчика.

Рисунок 20 – Форма ввода данных заказчика

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

Исполнение справочников (и учетных таблиц) в ИС выполнено на базе пользовательских контейнеров типа Panel, наполняемых системой в зависимости от контекста использования.

На рисунке 21 приведен вид сформированной подсистемы справочника отделов.

Рисунок 21 – Вид справочника отделов

На рисунке 22 приведен вид сформированной подсистемы справочника сотрудников.

Рисунок 22 – Вид справочника сотрудников

На рисунке 23 приведен вид сформированной подсистемы справочника заказчиков.

Рисунок 23 – Вид справочника заказчиков

Структуру, схожую со справочниками, имеет также подсистема учета проектов. Она также выполнена в табличном виде с соответствующими панелями команд и статуса.

Прототип подсистемы учета проектов приведен на рисунке 24. Подсистема снабжена фильтром.

Выделяя в верхней таблице определенный проект, в нижней таблице будут отображены все серии по данному проекту.

Рисунок 24 – Вид подсистемы учета проектов

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

На рисунке 25 приведен пример формы создания списка задач по серии проекта.

Рисунок 25 – Подсистема создания задач по серии проекта

На рисунке 26 приведен вид формы диалога ввода данных в справочник проектов.

Рисунок 26 – Форма ввода данных проекта

На рисунке 27 приведен вид формы диалога ввода данных в справочник серий по конкретным проектам.

Рисунок 27 – Форма ввода данных серии проекта

На рисунке 28 приведен вид формы диалога ввода данных в системе учета задач по сериям проектов.

Рисунок 28 – Форма ввода данных задачи по серии проекта

Для руководителя предприятия в ИС предусмотрена отдельная подсистема, в которой генерируется документ-отчет по выполненным (выполняемым) проектам. Вид формы документа в ИС приведен на рисунке 29 (исполняется в специальном компоненте WebBrowser и наполняется в процессе выполнения программы в формате HTML). Для документа предусмотрено меню команд, из которого возможно сохранить, просмотреть или распечатать отчет или закрыть его.

Рисунок 29 – Пример формы отчета

Немаловажными компонентами системы являются также и сервисные подсистемы. Таких подсистем в ИС две: подсистема авторизации пользователя и подсистема подключения к базе данных.

На рисунке 30 приведен вид панели подсистемы авторизации пользователя. На этой панели расположены элементы, типичные для процесса входа пользователя в систему – текстовые поля для ввода логина и пароля. Для последнего используется специальный компонент с неотображаемыми вводимыми символами. Процедура авторизации проводится стандартным способом: система ищет по базе данных пользователя, соответствующего введенным данным. Если такой пользователь найден, то система читает из базы данных идентификатор роли этого пользователя и устанавливает для него соответствующий доступ (к функциям и данным). Если пользователя не найдено, то система выдаст соответствующее сообщение с предложением ввести комбинацию «логин / пароль» заново.

Рисунок 30 – Вид панели авторизации пользователя

Пример панели подключения к базе данных, приведенный на рисунке 31, предлагает соответствующий набор полей для конструирования строки подключения к серверу базы данных.

Рисунок 31 – Вид панели подключения к базе данных

Заключение

Анализ бизнес-процессов ООО «Промэнергопроект», показал, что разработка информационной системы учета выполнения проектов является средством, существенно повышающим эффективность рабочей деятельности по учету проектов.

В данной работе было рассмотрено создание такой системы – ИС «Менеджер Проектов». При разработке ИС «Менеджер Проектов» интенсивно использовались автоматизированные средства проектирования систем, такие как All Fusion Process Modeler, Power Designer.

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

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

Отдельной важной частью проектирования системы было выполнено проектирование информационного обеспечения в виде базы данных в СУБД MySQL.

Проектирование и реализация информационной системы были осуществлены с применением современных методов разработки и дизайна.

Разработка всех UML-моделей программного обеспечения и проектирование информационного обеспечения ИС выполнены в среде проектирования Power Designer.

В ходе выполнения данного проекта были решены следующие задачи:

  • анализ предметной области и ее подробное описание, выявление основных функций и требований, описание бизнес-процессов.
  • спроектированы и реализованы ПО и БД ИС «Менеджер Проектов».

Список использованных источников

  1. Бардина Н.В. Диаграмма классов и модель «сущность-связь» как логические модели информационной системы. // Модели, системы, сети в экономике, технике, природе и обществе. 2012., № 2 (3)
  2. Буч Грейди, Рамбо Джеймс, Джекобсон Айвар. Язык UML. Руководство пользователя, Серия “Для программистов”: Перевод с англ. - М.: ДМК, 2000. – 432 с.
  3. Дейт К. Введение в системы баз данных / К. Дейт, К. Дж. Дейт. – 9-е изд. – Киев: Диалектика, 2006. – 1072 с.
  4. Интернет-энциклопедия Wikipedia. Линейная организационная структура. [Электронный ресурс] // [Режим доступа: https://ru.wikipedia.org/wiki/Линейная_организационная_структура] (Дата обращения: 27.03.2020)
  5. Коцюба И.Ю., Чунаков А.В., Шишков А.Н. – Основы проектирования информационных систем. Учебное пособие. – СПб: Университет ИТМО, 2015. – 206 с.
  6. Шаховская О.В., Милаев Д.В. Применение диаграммы классов для проектирования объектно-ориентированных информационных систем. // Современная наука: актуальные проблемы и пути их решения. 2015. № 5(18)
  7. Orientsoft. Software development & Business consulting. Функциональное моделирование на базе IDEF0. Учебный курс – Минск: 2002 – 35с.

Приложение 1. Фрагменты исходного кода ИС на языке программирования VB.Net

Глобальный класс системы

Imports System.IO

''' <summary>

''' Глобальный класс общего назначения

''' </summary>

Public Class PMGlobal

''' <summary>

''' Файл с настройками подключения к БД

''' </summary>

Public Shared CONNECTION_SETTINGS_FILE As String = "server.dat"

''' <summary>

''' Текущий пользователь системы

''' </summary>

Public Shared CurrentUser As Employee = Nothing

''' <summary>

''' Ссылка на главную форму системы

''' </summary>

Public Shared MainWindow As frmMain = Nothing

''' <summary>

''' Структура строки подключения к БД

''' </summary>

Public Structure ConnectionString

Public ServerAddress As String

Public ServerLogin As String

Public ServerPassword As String

Public DataBaseName As String

Public ServerPort As String

Public Connected As Boolean

''' <summary>

''' Установка параметров строки подключения к БД

''' </summary>

''' <param name="__server_name_">Имя (адрес) сервера</param>

''' <param name="__login_">Логин СУБД</param>

''' <param name="__password_">Пароль СУБД</param>

''' <param name="__db_">Имя БД</param>

''' <param name="__port_">Порт</param>

Public Sub SetValues(__server_name_ As String, __login_ As String, __password_ As String, __db_ As String, __port_ As String)

ServerAddress = __server_name_

ServerLogin = __login_

ServerPassword = __password_

DataBaseName = __db_

ServerPort = __port_

End Sub

''' <summary>

''' Сброс флага подключения к БД

''' </summary>

Public Sub ResetConnection()

Connected = False

End Sub

''' <summary>

''' Установка флага подключения к БД

''' </summary>

Public Sub Successfully()

Connected = True

End Sub

End Structure

''' <summary>

''' Параметры строки подключения к БД

''' </summary>

Public Shared DB_CS As ConnectionString

''' <summary>

''' Получение настроек подключения из файла

''' </summary>

''' <param name="__filename_">Файл с настройками</param>

''' <returns>Структура с параметрами плдключения к БД</returns>

Public Shared Function LoadConnectionSettings(__filename_ As String) As ConnectionString

' Новая строка подключения

Dim NewCS As ConnectionString = New ConnectionString()

' Поток чтения данных их файла

Dim FS As FileStream = Nothing

Dim SR As StreamReader = Nothing

' Попытка прочитать данные

Try

FS = New FileStream(__filename_, FileMode.Open)

SR = New StreamReader(FS)

' Чтение данных

NewCS.ServerAddress = SR.ReadLine().Split({"="c}, StringSplitOptions.RemoveEmptyEntries)(1)

NewCS.ServerLogin = SR.ReadLine().Split({"="c}, StringSplitOptions.RemoveEmptyEntries)(1)

NewCS.ServerPassword = SR.ReadLine().Split({"="c}, StringSplitOptions.RemoveEmptyEntries)(1)

NewCS.DataBaseName = SR.ReadLine().Split({"="c}, StringSplitOptions.RemoveEmptyEntries)(1)

NewCS.ServerPort = SR.ReadLine().Split({"="c}, StringSplitOptions.RemoveEmptyEntries)(1)

' Закрыть файл

SR.Close()

FS.Close()

' Возврат значения

Return NewCS

Catch

NewCS.DataBaseName = "failed!"

Return NewCS

End Try

End Function

''' <summary>

''' Сохранение настроек подключения в файл

''' </summary>

Public Shared Sub SaveConnectionSettings(__filename_ As String)

' Поток записи данных в файл

Dim FS As FileStream = Nothing

Dim SW As StreamWriter = Nothing

' Попытка записать данные

Try

FS = New FileStream(__filename_, FileMode.Create)

SW = New StreamWriter(FS)

' Запись данных

SW.WriteLine("adress=" & DB_CS.ServerAddress)

SW.WriteLine("login=" & DB_CS.ServerLogin)

SW.WriteLine("password=" & DB_CS.ServerPassword)

SW.WriteLine("db=" & DB_CS.DataBaseName)

SW.WriteLine("port=" & DB_CS.ServerPort)

' Закрыть файл

SW.Close()

FS.Close()

Catch

End Try

End Sub

''' <summary>

''' Попытка установить подключение к БД

''' </summary>

''' <returns>Результат подключения</returns>

Public Shared Function SetConnectionWithDB() As Boolean

' Попытка подключиться

Try

' Настройка подключения

Dim connString As String = "server=" + DB_CS.ServerAddress +

";uid=" + DB_CS.ServerLogin +

";database=" + DB_CS.DataBaseName +

";charset=utf8" +

";port=" + DB_CS.ServerPort +

";password=" + DB_CS.ServerPassword + ";"

My.Settings.Item("PMDBCS") = connString

' Попытка прочитать данные

Dim TestTA As pmdbDataSetTableAdapters.employeeTableAdapter =

New pmdbDataSetTableAdapters.employeeTableAdapter()

Dim TestTable As pmdbDataSet.employeeDataTable = TestTA.GetData()

' Если данные прочитаны, значит попытка успешна

DB_CS.Successfully()

MainWindow.CurrentDBName = DB_CS.DataBaseName

TestTable.Dispose()

TestTA.Dispose()

Return DB_CS.Connected

Catch ex As Exception

MessageBox.Show("Неправильно указаны параметры подключения к БД!" +

Environment.NewLine + ex.Message, Application.ProductName,

MessageBoxButtons.OK, MessageBoxIcon.Error)

Return False

End Try

End Function

''' <summary>

''' Показать форму настройки подключения к БД

''' </summary>

Public Shared Sub ShowConnectionSettings()

' Сброс активной подсистемы

MainWindow.SubsystemView.Controls.Clear()

' Предварительный сброс флага подключения к БД

DB_CS.ResetConnection()

MainWindow.CurrentDBName = "unknown"

' Очистить данные авторизованного пользователя на форме

MainWindow.CurrentUserName = "Не идентифицирован"

MainWindow.CurrentUserRole = "Не идентифицирована"

' Сброс данных пользователя

CurrentUser = Nothing

' Создание формы подключения к БД

Dim ddbcf As dialogDatabaseConnection = New dialogDatabaseConnection()

' Отображение подсистемы на главной форме

MainWindow.SubsystemView.Controls.Add(ddbcf)

' Развернуть панель на всю клиентскую область

ddbcf.Dock = DockStyle.Fill

End Sub

''' <summary>

''' Показать форму авторизации пользователя

''' </summary>

Public Shared Sub ShowLoginForm()

If DB_CS.Connected Then

' Сброс активной подсистемы

MainWindow.SubsystemView.Controls.Clear()

' Очистить данные авторизованного пользователя на форме

MainWindow.CurrentUserName = "Не идентифицирован"

MainWindow.CurrentUserRole = "Не идентифицирована"

' Сброс данных пользователя

CurrentUser = Nothing

' Создание формы авторизации пользователя

Dim daf As dialogLogin = New dialogLogin()

' Отображение подсистемы на главной форме

MainWindow.SubsystemView.Controls.Add(daf)

' Развернуть панель на всю клиентскую область

daf.Dock = DockStyle.Fill

Else

' Сообщение о необходимости подключения к БД

MessageBox.Show("Установите подключение к базе данных прежде, чем выполнять авторизацию!",

Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)

MainWindow.CurrentDBName = "unknown"

' Показать форму настройки подключения к БД

ShowConnectionSettings()

End If

End Sub

End Class

Пример класса сущности (на примере проекта)

''' <summary>

''' Класс проекта

''' </summary>

Public Class Project

Implements IDBProcess, IUserCommands

REM -----------------------------------------------------------------

REM АТРИБУТЫ

REM -----------------------------------------------------------------

Public ID As String

Public Name As String

Public HisCustomer As Customer

Public HisOwner As Employee

Public CreateDate As Date

Public CompleteDate As Date?

Public Deadline As Date

Public Editable As Boolean

Public OldID As String

REM -----------------------------------------------------------------

''' <summary>

''' Адаптер подключения к БД - таблица проектов

''' </summary>

Private ADAPTER As pmdbDataSetTableAdapters.projectTableAdapter = New pmdbDataSetTableAdapters.projectTableAdapter()

''' <summary>

''' Конструктор

''' </summary>

''' <param name="__id_">Необязательный идентификатор</param>

Public Sub New(Optional __id_ As Object = Nothing)

' Инициализация атрибутов

Identify(__id_)

' По умолчанию - можно редактировать

Editable = True

End Sub

''' <summary>

''' Инициализация объекта

''' </summary>

''' <param name="__id_">Необязательный идентификатор</param>

Public Sub Identify(Optional __id_ As Object = Nothing) Implements IDBProcess.Identify

Try

' Инициализация по идентификатору

If __id_ IsNot Nothing Then

' Получение данных из таблицы

Dim TABLE As pmdbDataSet.projectDataTable = ADAPTER.GetDataByID(__id_)

' Чтение полученных данных

If TABLE.Rows.Count > 0 Then

ID = __id_

HisCustomer = New Customer(Convert.ToInt32(TABLE.Rows(0).ItemArray(1)))

HisOwner = New Employee(Convert.ToInt32(TABLE.Rows(0).ItemArray(2)))

Name = Convert.ToString(TABLE.Rows(0).ItemArray(3))

CreateDate = Convert.ToDateTime(TABLE.Rows(0).ItemArray(4))

If Convert.ToString(TABLE.Rows(0).ItemArray(5)) = String.Empty Then

CompleteDate = Nothing

Else

CompleteDate = Convert.ToDateTime(TABLE.Rows(0).ItemArray(5))

End If

Deadline = Convert.ToDateTime(TABLE.Rows(0).ItemArray(6))

' Освободить таблицу

TABLE.Dispose()

Else

MessageBox.Show("Запись не найдена!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)

End If

Else ' Инициализация по умолчанию

HisCustomer = New Customer()

HisOwner = PMGlobal.CurrentUser

CreateDate = Date.Now.Date

Deadline = CreateDate.AddMonths(1)

CompleteDate = Nothing

Name = ""

End If

Catch ex As Exception

MessageBox.Show("Ошибка при выполнении операции: " + ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)

End Try

End Sub

''' <summary>

''' Удаление записи из БД

''' </summary>

''' <returns>Результат операции</returns>

Public Function TryToDelete() As Boolean Implements IDBProcess.TryToDelete

Try

' Выполнение команды через адаптер таблицы

ADAPTER.DeleteQuery(ID)

' Возврат успеха

Return True

Catch ex As Exception

MessageBox.Show("Ошибка при выполнении операции: " + ex.Message, Application.ProductName,

MessageBoxButtons.OK, MessageBoxIcon.Error)

' Возврат неудачи

Return False

End Try

End Function

''' <summary>

''' Вставка записи в БД

''' </summary>

''' <returns>Результат операции</returns>

Public Function TryToInsert() As Boolean Implements IDBProcess.TryToInsert

Try

' Добавление новой записи в БД

ADAPTER.InsertQuery(ID, HisCustomer.ID, PMGlobal.CurrentUser.ID, Name, CreateDate, Deadline)

' Возврат успеха

Return True

Catch ex As Exception

MessageBox.Show("Ошибка при выполнении операции: " + ex.Message, Application.ProductName,

MessageBoxButtons.OK, MessageBoxIcon.Error)

' Возврат неудачи

Return False

End Try

End Function

''' <summary>

''' Обновление записи в БД

''' </summary>

''' <returns>Результат операции</returns>

Public Function TryToUpdate() As Boolean Implements IDBProcess.TryToUpdate

Try

' Выполнение команды через адаптер таблицы

ADAPTER.UpdateQuery(ID, HisCustomer.ID, HisOwner.ID, Name, CreateDate, Deadline, OldID)

' Возврат успеха

Return True

Catch ex As Exception

MessageBox.Show("Ошибка при выполнении операции: " + ex.Message, Application.ProductName,

MessageBoxButtons.OK, MessageBoxIcon.Error)

' Возврат неудачи

Return False

End Try

End Function

''' <summary>

''' Завершить серию проекта

''' </summary>

''' <returns>Результат операции</returns>

Public Function Complete() As Boolean

Try

' Выполнение команды через адаптер таблицы

ADAPTER.Complete(Date.Now.Date, ID)

' Возврат успеха

Return True

Catch ex As Exception

MessageBox.Show("Ошибка при выполнении операции: " + ex.Message, Application.ProductName,

MessageBoxButtons.OK, MessageBoxIcon.Error)

' Возврат неудачи

Return False

End Try

End Function

''' <summary>

''' Диалог ввода данных

''' </summary>

Private Dialog As dialogProject

''' <summary>

''' Команда пользователя - создать новый

''' </summary>

''' <param name="add_id">Дополнительный идентификатор</param>

''' <returns>Результат выполнения команды</returns>

Public Function CreateNew(Optional add_id As Object = 0) As Boolean Implements IUserCommands.CreateNew

Try

' Создание диалога ввода данных

Dialog = New dialogProject(HisCustomer.ID, ID, Editable)

' Наполнение полей диалога актуальными данными

Dialog.ItsCustomerID = HisCustomer.ID

Dialog.CreateDate = CreateDate

Dialog.Deadline = Deadline

Dialog.ProjectName = Name

Dialog.Code = ID

' Организация диалога с пользователем

If Dialog.ShowDialog() = DialogResult.OK Then

' Применение введенных значений

HisCustomer = New Customer(Dialog.ItsCustomerID)

ID = Dialog.Code

Name = Dialog.ProjectName

CreateDate = Dialog.CreateDate

Deadline = Dialog.Deadline

' Выполнить вставку в БД

Return TryToInsert()

Else

' Возврат неудачи - отмена действия пользователем

Return False

End If

Catch ex As Exception

MessageBox.Show("Ошибка при выполнении операции: " + ex.Message, Application.ProductName,

MessageBoxButtons.OK, MessageBoxIcon.Error)

' Возврат неудачи

Return False

End Try

End Function

''' <summary>

''' Команда пользователя - удалить

''' </summary>

''' <returns>Результат выполнения команды</returns>

Public Function Delete() As Boolean Implements IUserCommands.Delete

Try

' Запрос на удаление

If MessageBox.Show("Подтверждаете удаление выбранной записи ?", "Удаление",

MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then

' Удалить из БД

Return TryToDelete()

End If

' Возврат неудачи - отмена действия пользователем

Return False

Catch ex As Exception

MessageBox.Show("Ошибка при выполнении операции: " + ex.Message, Application.ProductName,

MessageBoxButtons.OK, MessageBoxIcon.Error)

' Возврат неудачи

Return False

End Try

End Function

''' <summary>

''' Команда пользователя - редактировать

''' </summary>

''' <param name="add_id">Дополнительный идентификатор</param>

''' <returns>Результат выполнения команды</returns>

Public Function Edit(Optional add_id As Object = 0) As Boolean Implements IUserCommands.Edit

Try

' Запомнить предыдущий ID

OldID = ID

' Создание диалога ввода данных

Dialog = New dialogProject(HisCustomer.ID, ID, Editable)

' Наполнение полей диалога актуальными данными

Dialog.ItsCustomerID = HisCustomer.ID

Dialog.CreateDate = CreateDate

Dialog.Deadline = Deadline

Dialog.ProjectName = Name

Dialog.Code = ID

' Организация диалога с пользователем

If Dialog.ShowDialog() = DialogResult.OK Then

' Применение введенных значений

HisCustomer = New Customer(Dialog.ItsCustomerID)

ID = Dialog.Code

Name = Dialog.ProjectName

CreateDate = Dialog.CreateDate

Deadline = Dialog.Deadline

' Выполнить обновление в БД

Return TryToUpdate()

Else

' Возврат неудачи - отмена действия пользователем

Return False

End If

Catch ex As Exception

MessageBox.Show("Ошибка при выполнении операции: " + ex.Message, Application.ProductName,

MessageBoxButtons.OK, MessageBoxIcon.Error)

' Возврат неудачи

Return False

End Try

End Function

''' <summary>

''' Поиск среди проектов проекта с заданным кодом

''' </summary>

''' <param name="Code">Заданный код проекта для поиска</param>

''' <returns>Результат поиска</returns>

Public Shared Function IsCodeExists(Code As String) As Boolean

Try

' Адаптер подключения к БД - таблица проектов

Dim ADAPTER As pmdbDataSetTableAdapters.projectTableAdapter =

New pmdbDataSetTableAdapters.projectTableAdapter()

' Поиск проекта заданного кода в таблице проектов

Dim PDT As pmdbDataSet.projectDataTable = ADAPTER.GetDataByID(Code)

' Возвращаем результат поиска

If PDT.Rows.Count > 0 Then Return True Else Return False

Catch ex As Exception

Return False

End Try

End Function

''' <summary>

''' Итоговый отчет по проектам

''' </summary>

''' <returns>Форматированный HTML-текст отчета</returns>

Public Shared Function GetReport() As String

' Переменная для форматированного HTML-отчета

Dim HTML As String = ""

' Служебная переменная-счетчик

Dim i As Integer = 1

' Адаптер подключения к БД - таблица проектов

Dim ADAPTER As pmdbDataSetTableAdapters.projectTableAdapter =

New pmdbDataSetTableAdapters.projectTableAdapter()

' Таблица проектов

Dim PDT As pmdbDataSet.projectDataTable = ADAPTER.GetData()

'---------------------------------------------------

' ГЕНЕРАЦИЯ HTML-КОДА

'---------------------------------------------------

HTML += "<html>"

HTML += " <head>"

HTML += " <title></title>"

HTML += " </head>"

HTML += " <body>"

HTML += " <H2 align=center>ВЫПОЛНЕННЫЕ ПРОЕКТЫ</font></H2>"

HTML += " <p align=center><font family='courier new'>версия от <u><i>" + Date.Now.ToLongDateString() + "</i></u></font></p>"

' Начало таблицы

HTML += "<table width='100%' cellspacing=1 cellpadding=1 border=all>"

' Шапка таблицы

HTML += "<tr>"

HTML += "<td align=center><b>№п.п.</b></td>"

HTML += "<td align=center><b>Проект</b></td>"

HTML += "<td align=center><b>Наименование</b></td>"

HTML += "<td align=center><b>Заказчик</b></td>"

HTML += "<td align=center><b>Руководитель</b></td>"

HTML += "<td align=center><b>Создан</b></td>"

HTML += "<td align=center><b>Завершен</b></td>"

HTML += "<td align=center><b>Срок</b></td>"

HTML += "</tr>"

' Наполнение таблицы

For Each dr As DataRow In PDT.Rows

' Получение кода проекта

Dim p_id As String = Convert.ToString(dr.ItemArray(0))

Dim P As Project = New Project(p_id)

' Размещение строки таблицы

HTML += "<tr>"

' Столбцы

HTML += $"<td>{i}</td>" : i = i + 1

HTML += $"<td>{P.ID}</td>"

HTML += $"<td>{P.Name}</td>"

HTML += $"<td>{P.HisCustomer.Name}</td>"

HTML += $"<td>{P.HisOwner.SurName} {P.HisOwner.FirstName.Substring(0, 1)} {P.HisOwner.FatherName.Substring(0, 1)}</td>"

HTML += $"<td>{P.CreateDate.ToShortDateString()}</td>"

If P.CompleteDate Is Nothing Then

HTML += $"<td>выполняется</td>"

Else

HTML += $"<td>{Convert.ToDateTime(P.CompleteDate).ToShortDateString()}</td>"

End If

HTML += $"<td>{P.Deadline.ToShortDateString()}</td>"

' Конец строки

HTML += "</tr>"

Next dr

' Конец таблицы

HTML += "</table>"

' Конец HTML

HTML += " </body>"

HTML += "</html>"

' Освобождение таблиц

PDT.Dispose()

ADAPTER.Dispose()

' Возврат текста отчета

Return HTML

End Function

End Class

Код класса главного окна

''' <summary>

''' Главная форма

''' </summary>

Public Class frmMain

''' <summary>

''' Конструктор

''' </summary>

Public Sub New()

' Создание и инициализация компонентов

InitializeComponent()

' Установить ссылку на себя глобально

PMGlobal.MainWindow = Me

' Прочитать настройки подключения к БД

PMGlobal.DB_CS = PMGlobal.LoadConnectionSettings(PMGlobal.CONNECTION_SETTINGS_FILE)

' Попытка подключиться к БД

If Not PMGlobal.SetConnectionWithDB() Then

' Показать панель настройки подключения к БД

PMGlobal.ShowConnectionSettings()

Else ' Подключение установлено

' Показать панель авторизации пользователя

PMGlobal.ShowLoginForm()

End If

End Sub

''' <summary>

''' Главный контейнер

''' </summary>

Public ReadOnly Property SubsystemView As Panel

Get

Return pnlMainContainer

End Get

End Property

''' <summary>

''' Метка с отображением имени авторизованного пользователя

''' </summary>

Public WriteOnly Property CurrentUserName As String

Set(value As String)

tslblUserName.Text = value

End Set

End Property

''' <summary>

''' Метка с отображением роли авторизованного пользователя

''' </summary>

Public WriteOnly Property CurrentUserRole As String

Set(value As String)

tslblUserRole.Text = value

End Set

End Property

''' <summary>

''' Метка с отображением названия БД

''' </summary>

Public WriteOnly Property CurrentDBName As String

Set(value As String)

tslblDBName.Text = value

End Set

End Property

''' <summary>

''' Сменить пользователя

''' </summary>

''' <param name="sender">Объект, вызвавший событие</param>

''' <param name="e">Параметры события</param>

Private Sub tsbtnLogin_Click(sender As Object, e As EventArgs) Handles tsbtnLogin.Click

PMGlobal.ShowLoginForm()

End Sub

''' <summary>

''' Изменить настройки подключения к БД

''' </summary>

''' <param name="sender">Объект, вызвавший событие</param>

''' <param name="e">Параметры события</param>

Private Sub tsbtnDatabase_Click(sender As Object, e As EventArgs) Handles tsbtnDatabase.Click

PMGlobal.ShowConnectionSettings()

End Sub

''' <summary>

''' Завершение работы

''' </summary>

''' <param name="sender">Объект, вызвавший событие</param>

''' <param name="e">Параметры события</param>

Private Sub tsbtnQuit_Click(sender As Object, e As EventArgs) Handles tsbtnQuit.Click

Close()

End Sub

''' <summary>

''' Запрос на завершение работы программы при закрытии формы

''' </summary>

''' <param name="sender">Объект, вызвавший событие</param>

''' <param name="e">Параметры события</param>

Private Sub frmMain_FormClosing(sender As Object, e As FormClosingEventArgs) _

Handles MyBase.FormClosing

If MessageBox.Show("Завершить работу программы?", Application.ProductName,

MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then

e.Cancel = True

End If

End Sub

''' <summary>

''' Обновление даты и времени

''' </summary>

''' <param name="sender">Объект, вызвавший событие</param>

''' <param name="e">Параметры события</param>

Private Sub tmrDateTimeUpdating_Tick(sender As Object, e As EventArgs) _

Handles tmrDateTimeUpdating.Tick

' Обновление

tslblDate.Text = $"{Now.ToLongDateString()} {Now.ToShortTimeString()}"

End Sub

End Class