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

Обоснование проектных решений по программному обеспечению

Содержание:

ВВЕДЕНИЕ

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

Цель курсовой работы – проектирование информационной системы для реализации бизнес-процесса «Анализ и изучение конкуренции» на примере компании «Суши-тайм».

Для достижения поставленной цели необходимо решить следующие задачи:

  • проанализировать текущую организацию бизнес-процесса анализа и изучения конкуренции в компании «Суши-тайм» и возникающего документооборота;
  • выбрать и обосновать проектные решения по информационному и программному обеспечению;
  • составить информационную модель проектируемой информационной системы;
  • разработать базу данных и программные модули ИС;
  • описать контрольный пример реализации проекта.

1 глава. Аналитическая часть.

1.1. Выбор комплекса задач автоматизации.

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

Анализом и изучением конкуренции в компании «Суши-тайм» занимается отдел маркетинга и продвижения. В составе отдела трудится всего два сотрудника – маркетолога. В их функции помимо анализа и изучения конкуренции также входят разработка и ведение рекламных компаний, акций, маркетинговых исследований, продвижение компании и её услуг как онлайн, так и офлайн.

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

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

1.2. Характеристика существующих бизнес – процессов.

Для анализа бизнес-процесса анализа и изучения конкурентов в компании «Суши-тайм» воспользуемся функционально-структурным моделированием этой деятельности. В качестве основной методологии построения функциональных моделей выступает IDEF0.

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

Исследование функций производится независимо от способов и методов их выполнения. Такой «функциональный» подход обеспечивает четкое разделение аспектов назначения описываемой системы от вопросов её реализации.

IDEF0 часто используется при исследовании и проектировании систем на логическом уровне.

IDEF0 определяет два графических объекта:

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

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

Модель IDEF0 представляет собой набор взаимоувязанных диаграмм. Каждая диаграмма является описанием системы или ее отдельных функциональных блоков в рамках некоторого уровня детализации.

Контекстная диаграмма – диаграмма самого верхнего уровня иерархии, дает самое общее представление о системе. На контекстной диаграмме (КД) отображается только один функциональный блок (контекстная функция).

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

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

Контекстная диаграмма бизнес-процесса анализа и изучения конкуренции изображена на рисунке 1 (для построения диаграмм использовалось CASE- средство AllFusion Process Modeler 7)

Рисунок 1. Контекстная диаграмма

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

Следующий этап построения функциональной модели – декомпозиция контекстной диаграммы на составляющие её бизнес-процессы. Диаграмма декомпозиции процесса анализа и изучения конкуренции представлена на рисунке 2.

Рисунок 2. Диаграмма декомпозиции

Анализ и изучение конкуренции состоит из трех основных этапов:

  • поиск новых конкурентов, то есть поиск компаний-конкурентов, которые недавно открылись;
  • анализ конкурентов;
  • формирование списка мероприятий, предназначенных для повышения конкурентоспособности компании.

1.3. Характеристика документооборота, возникающего при решении задачи.

В процессе выполнения бизнес-процесса анализа и изучения конкуренции в компании «Суши-тайм» формируется три документа: список конкурентов, отчет по конкурентам и список мероприятий. На рисунках ниже (рисунки 3-5) приведены схемы документооборота для каждого из этих документов.

Рисунок 3. Схема документооборота для списка конкурентов

Рисунок 4. Схема документооборота для отчета по конкурентам

Рисунок 5. Схема документооборота для списка мероприятий

1.4. Обоснование проектных решений по информационному обеспечению.

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

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

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

Достоинствами реляционной модели являются:

  • процесс проектирования баз данных наиболее формализован,
  • вследствие этого реляционная модель имеет более широкие возможности для проектирования баз данных.

Недостатки данной модели:

  • низкая производительность при больших объемах баз данных;
  • высокая избыточность данных и связанная с этим проблема обеспечения непротиворечивости данных при их обновлении.
  • более высокий уровень независимости данных.

По сравнению с другими моделями данных можно выделить следующие преимущества реляционной модели:

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

Разработанная система с использованием базы данных, позволяет:

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

Входными данными для проектируемой информационной системы автоматизации анализа и изучения конкуренции выступают данные о компаниях-конкурентах:

  • название;
  • телефон;
  • адрес;
  • дата открытия;
  • адрес сайта
  • комментарий
  • слабые стороны
  • тип конкурента

Кроме того, к каждому конкуренту необходимо сохранять историю проводимых им маркетинговых акций:

  • описание;
  • дата запуска;
  • дата окончания;
  • тип акции.

Всего в информационной системе используется три справочника:

  • сотрудники (они же пользователи ИС);
  • типы конкурентов;
  • типы акций;
  • возможности (или особенности) конкурентов.

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

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

Описание используемых классификаторов приведено в таблице 1.

Таблица 1

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

№ пп

Наименование кодируемого множества объектов

Значность кода

Мощность кода

Система кодирования

1

Идентификационный номер конкурента

4

9999

Порядковая

2

Идентификационный номер акции

4

9999

Порядковая

3

Идентификационный номер сотрудника

4

9999

Порядковая

4

Идентификационный номер типа акции

4

9999

Порядковая

5

Идентификационный номер типа конкурента

4

9999

Порядковая

6

Идентификационный номер типа возможности конкурента

4

9999

Порядковая

1.5. Обоснование проектных решений по программному обеспечению.

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

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

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

В качестве языка программирования был выбран язык php.

PHP (PersonalHomePageTools – «Инструмент для создания персональных веб-страниц») – является скриптовым языком программирования общего пользования, используемый для создания Web-приложений. В данный момент времени поддерживают подавляющие большинство хостинг-провайдеров и стал одним из ведущих языком программирования, использующих для разработки динамических Web-сайтов.

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

  • автоматически извлекаемые GET и POST -параметров, а также переменных окружения веб-сервера в предопределённые массивы;
  • взаимодействует с очень большим количеством разныхСУБД (MySQL, SQLite,MySQLi, Oracle (OCI8), PostgreSQL, Microsoft SQL Server и пр.);
  • автоматическая отправка HTTP-заголовков;
  • работает с HTTP-авторизацией;
  • работает с сессиями и cookies;
  • работает с удалёнными и локальными файлами, сокетами;
  • обрабатывает файлы, загруженные на сервер;

В качестве системы управления базой данных была выбрана СУБД MySQL.

MySQL – разработка шведской компании MySQL AB. СУБД MySQL является программным обеспечением с открытым исходным кодом, распространяемым по лицензии GNU (GPL) и коммерческой лицензии для ситуаций, не подпадающих под действие лицензии GPL.

MySQL поддерживает реляционную модель данных, т. е. представляет собой реляционную СУБД.

Основные достоинства СУБД MySQL:

  • Высокое качество – MySQL характеризуется устойчивой работой.
  • Наряду с Oracle, MySQL считается одной из самых быстрых СУБД в мире.
  • Открытый код доступен для просмотра и модернизации, что позволяет постоянно улучшать программный продукт.
  • СУБД MySQL, разработанная с использованием языков C/C++, протестирована на многих платформах, среди которых Windows, Linux, FreeBSD, Mac OS X, OS/2, Solaris и др.
  • MySQL поддерживает API (Application Programming Interface, программный интерфейс приложения) для С, C++, Eiffel, Java, Perl, PHP, Python, Ruby и Tcl. MySQL можно успешно применять как для построения Web-страниц с использованием Perl, PHP и Java, так и для работы прикладной программы, созданной с использованием Delphi, Builder C++ или платформы .NET.4
  • СУБД MySQL предоставляет широкий выбор типов таблиц, в том числе и сторонних разработчиков, что позволяет реализовать оптимальную для решаемой задачи производительность и функциональность.
  • Локализация в MySQL выполнена корректно. У пользователя, как правило, не возникает проблем при обработке русского содержимого БД

MySQL поддерживает несколько типов данных.

Числовые данные. К ним относят целые числа, не содержащие дробной части (например, 124), а также вещественные числа, имеющие как целую, так и дробную части (например, 56.45). Числовые данные делятся на точечные (bit, boolean, integer и decimal) и приближенные (float, real и double precision).

Строковые данные— последовательность символов, заключенных в одинарные или двойные кавычки: 'Hello world', '123', "MySQL". Поскольку в качестве стандарта в SQL определены одинарные кавычки, для совместимости с другими базами данных рекомендуется использовать именно их. Различают строковые типы CHAR, VARCHAR, BLOB, TEXT, MEDIUMTEXT, MEDIUMBLOB, LONGTEXT, LONGBLOB, ENUM, SET.

Календарные данные.

СУБД MySQL имеет пять календарных типов данных: DАТЕ, DATETIME, TIME, TIMESTAMP и YEAR. Тип DАТЕ предназначен для хранения даты, TIME — для времени суток, a TIMESTAMP – для представления и даты, и времени суток. Тип TIMESTAMP предназначен для представления даты и времени суток в виде числа секунд, прошедших с полуночи 1 января 1970 года. Тип данных YEAR позволяет хранить только год.

Для значений, имеющих тип DATE и DATATIME принят формат YYYY-MM-DD или YY-MM-DD. В типах TIME и DATATIME время приводится в привычном формате hh:mm:ss

2 глава. Проектная часть.

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

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

Рисунок 6. Информационная модель

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

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

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

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

Таблица 2

Справочники информационной системы

№ пп

Название справочника

Ответственный за ведение

Средний объём справочника в записях

Среднюю частоту актуализации

Средний объем актуализации, %

1

Пользователи

Маркетолог

2

1 раз в полгода

50

2

Типы конкурентов

Маркетолог

10

1 раз в месяц

10

3

Типы акций

Маркетолог

10

1 раз в месяц

10

4

Возможности конкурентов

Маркетолог

50

1 раз в неделю

5

За ведение всех справочников отвечает маркетолог, для каждого вида справочника своя частота актуализации и средний объем актуализации.

Реквизитный состав каждого справочника представлен в виде таблицы 3.

Таблица 3

Реквизитный состав справочников информационной системы

№ п/п

Наименование справочника

Перечень реквизитов

1

Пользователи

ФИО пользователя;

логин;

пароль;

электронная почта;

2

Типы конкурентов

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

3

Типы акций

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

4

Возможности (или особенности) конкурентов

Наименование возможности

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

На рисунке 7 изображена форма для работы с записями справочника «Пользователи».

C:\Users\Mixa\YandexDisk\Скриншоты\2017-07-10_19-26-44.png

Рисунок 7. Форма Пользователь

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

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

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

C:\Users\Mixa\YandexDisk\Скриншоты\2017-08-15_19-45-53.png

Рисунок 8. Форма Тип конкурента

C:\Users\Mixa\YandexDisk\Скриншоты\2017-08-15_19-46-17.png

Рисунок 9. Форма Тип акции

C:\Users\Mixa\YandexDisk\Скриншоты\2017-08-15_19-47-29.png

Рисунок 10. Форма Возможности конкурентов

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

C:\Users\Mixa\YandexDisk\Скриншоты\2017-08-16_13-51-44.png

Рисунок 11. Форма для создания конкурента

C:\Users\Mixa\YandexDisk\Скриншоты\2017-08-16_13-57-26.png

Рисунок 12. Форма добавления акции

Данные, введенные в формы, которые приведены выше, сохраняются в базе данных и используются для формирования выходных данных.

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

В качестве выходных данных выступает список конкурентов и отчет по конкурентам.

Подробное описание выходных данных в таблице 4.

Таблица 4

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

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

Список конкурентов

Отчет по конкурентам

Реквизиты

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

Телефон

Адрес

Сайт

Тип конкурента

Количество акций

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

Тип конкурента

Возможности (сильные стороны)

Слабы стороны

Активные акции

Комментарий

Таблицы, на основе которых формируется

Конкурент

Акции

Тип конкурента

Конкурент

Акции

Тип конкурента

Тип акции

Возможности

Частота формирования

По мере необходимости

По мере необходимости

Способ доставки

Экранная форма, с возможностью выгрузки в файл Excel

Экранная форма, с возможностью выгрузки в файл Excel

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

Базовый набор функций разработанной информационной системы можно изобразить в виде дерева, изображенного на рисунке 13.

Рисунок 13. Дерево функций

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

Рисунок 14. Сценарий диалога

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

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

В качестве системы управления базой данный для разрабатываемой информационной системы была выбрана СУБД MySQL.

Для хранения всех необходимых данных была спроектирована и создана база данных, состоящая из 7 таблиц. ER-модель спроектированной базы данных представлена на рисунке 15.

Рисунок 15. ER-модель базы данных

Описание всех таблиц базы данных представлено в таблицах 5-11.

Таблица 5

Таблица users

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

Идентификатор поля

Тип поля

Длина поля

Прочее

Код пользователя

id

int

4

AI

ФИО пользователя

fio

varchar

120

Логин пользователя

login

varchar

120

Пароль пользователя (в зашифрованном виде)

password

varchar

120

Email пользователя

email

varchar

120

Таблица 6

Таблица competitors

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

Идентификатор поля

Тип поля

Длина поля

Прочее

Код конкурента

id

int

4

AI

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

caption

varchar

120

Телефон

phone

varchar

120

Адрес

address

varchar

120

Веб-сайт

website

varchar

120

Дата открытия

opendate

datetime

10

Комментарий

comment

varhar

255

Слабые стороны

weak

longtext

65655

Тип конкурента

typeid

int

4

Сотрудник, добавивший конкурента

authorid

int

4

Таблица 7

Таблица comptypes

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

Идентификатор поля

Тип поля

Длина поля

Прочее

Код типа

id

int

4

AI

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

caption

varchar

120

Таблица 8

Таблица actiontypes

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

Идентификатор поля

Тип поля

Длина поля

Прочее

Код типа

id

int

4

AI

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

caption

varchar

120

Таблица 9

Таблица features

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

Идентификатор поля

Тип поля

Длина поля

Прочее

Код возможности

id

int

4

AI

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

caption

varchar

120

Таблица 10

Таблица competitors_features

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

Идентификатор поля

Тип поля

Длина поля

Прочее

Код возможности

featureid

int

4

Код конкурента

competitorid

int

4

Комментарий

caption

varchar

120

Таблица 11

Таблица actions

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

Идентификатор поля

Тип поля

Длина поля

Прочее

Код акции

id

int

4

Название

caption

varchar

120

Описание

description

TEXT

65655

Дата запуска

begindate

datetime

10

Дата окончания

enddate

datetime

10

Тип акции

typeid

int

4

Код конкурента

competitorid

int

4

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

Популярность языка php обусловила появление большого числа фреймворков, основанных на нем. Фреймворк – программная платформа, определяющая структуру программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта.

Для написания информационной системы автоматизации анализа и изучения конкуренции использовался фреймворк языка php Symfony 2. Данный фреймворк работает с подходом к программированию, называемый Model-view-controller (MVC, «модель-представление-контроллер», «модель-вид-контроллер»).

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

  • Модель (англ. Model). Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Объекты данной группы не содержат информации, как эти знания можно визуализировать.
  • Представление, вид (англ. View). Отвечает за отображение информации (визуализацию). Часто в качестве представления выступает форма (окно) с графическими элементами. Главная задача – представить информацию, хранимой в модели в виде, воспринимаемым пользователем.
  • Контроллер (англ. Controller). Обеспечивает связь между пользователем и системой: контролирует ввод данных пользователем и использует модель и представление для реализации необходимой реакции.

Важно отметить, что как представление, так и контроллер зависят от модели. Однако модель не зависит ни от представления, ни от контроллера. Тем самым достигается назначение такого разделения: оно позволяет строить модель независимо от визуального представления, а также создавать несколько различных представлений для одной модели.

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

Рисунок 16 – Архитектура ИС (Model-view-controller)

Список разработанных программных модулей и их назначений представлен в таблице 12.

Таблица 12

Программные модули

Номер

Название

Описание

1

routing.yml

Файл с настройками маршрутов для маршрутизатора Symfony 2

2

DefaultContoller.php

Класс контроллера, обрабатывающий маршрут главной страницы информационной системы

3

DepartmentController.php

Класс контроллера, содержащий методы для отображения данных и форм об отделах компании, обработки отправленных форм

4

DocController.php

Класс контроллера, содержащий методы для отображения данных и форм работы с документами, комментариями и файлами к ним, обработки отправленных форм

5

StaffController

Класс контроллера, содержащий методы для отображения данных и форм о должностях компании, обработки отправленных форм

6

TypeDocController.php

Класс контроллера, содержащий методы для отображения данных и форм о типах документов, обработки отправленных форм

7

SecurityController.php

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

8

UsersController.php

Класс контроллера, содержащий методы для отображения данных и форм о пользователях, обработки отправленных форм

9

User.php

Класс модели, содержащий атрибуты и методы для работы с объектом пользователя

10

Department.php

Класс модели, содержащий атрибуты и методы для работы с объектом отдела

11

Doc.php

Класс модели, содержащий атрибуты и методы для работы с документом

12

Comment.php

Класс модели, содержащий атрибуты и методы для работы с объектом комментария к документу

13

Status.php

Класс модели, содержащий атрибуты и методы для работы с объектом статуса документа

14

Role.php

Класс модели, содержащий атрибуты и методы для работы с объектом роли пользователя

15

TypeDoc.php

Класс модели, содержащий атрибуты и методы для работы с типом документа

16

Staff.php

Класс модели, содержащий атрибуты и методы для работы с должностью

17

DepartmentFormType.php

Класс формы управления данными отдела

18

LoginFormType.php

Класс формы авторизации

19

DocFormType.php

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

20

CommentFormType

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

21

DocFilterFormType.php

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

22

StatusFormType.php

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

23

StaffFormType.php

Класс формы управления данными должности

24

TypeDocFormType.php

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

25

ProfileFormType.php

Класс формы для реализации работы с профилем пользователя

26

UserFormType.php

Класс формы для реализации работы с данными пользователя

27

UserFilterType.php

Класс формы для реализации фильтра в списке пользователей

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

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

Еще одним фундаментальным понятием ООП является класс.

Классом называют шаблон, на основе которого создается конкретный программные объект. То есть в классе описаны все свойства и методы, определяющие поведение каждого объекта, созданного на основе этого класса. Также принято каждый объект, созданный на основе класса называть экземпляром этого класса.

Следующими важнейшими принципами ООП являются наследование и полиморфизм.

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

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

В структуре программных модулей разработанной ИС Можно четко проследить механизм наследования. Всего присутствует три родительских класса: InitializableController.php, AbstractEntity.php, AbstractFormType.php.

Первый является родителем для всех контроллеров ИС, он содержит объявления таких методов и свойств, которые в дальнейшем используются в каждом контроллере:

//проверка авторизации

/** @var AuthorizationChecker */

protected $authChecker;

//массив форм

/** @var array */

protected $forms;

//менеджер для доступа к модели

/** @var EntityManager */

protected $manager;

//массив объектов модели

/** @var array|EntityRepository[] */

protected $repositories;

//получение http-запроса

/** @var Request */

protected $request;

//доступ к сессии пользователя

/** @var Session */

protected $session;

//доступ к объекту текущего пользователя

/** @var User */

protected $user;

//доступ к текущему представлению

/** @var array */

protected $view;

//массив для отображения текущего раздела в панели навигации

/** @var array */

protected $navigation;

Второй родительский класс является родителем для всех сущностей. В нем выделено три основных свойства (атрибута сущности):

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

/**

* @var \DateTime

* @ORM\Column(name = "createdat", type = "datetime")

*/

protected $createdAt;

//Идентификатор

/**

* @var int

* @ORM\Column(name = "id", type = "integer")

* @ORM\Id

* @ORM\GeneratedValue(strategy = "AUTO")

*/

protected $id;

//дата изменения

/**

* @var \DateTime

* @ORM\Column(name = "modifiedat", type = "datetime")

*/

protected $modifiedAt;

А также конструктор создания нового объекта класса:

public function __construct()

{

$this->createdAt = new \DateTime();

$this->modifiedAt = new \DateTime();

}

И триггер обновления объекта, который меняет свойство «Дата последнего обновления записи»:

/**

* @ORM\PreUpdate

* @ORM\PrePersist

*/

public function preUpdate()

{

$this->modifiedAt = new \DateTime();

}

Последний родительский класс – это класс для форм ИС. В нем также задаются основные константы, конструктор:

const METHOD_GET = 'GET';

const METHOD_POST = 'POST';

protected $method;

protected $name;

public function __construct($name, $method = self::METHOD_POST)

{

$this->name = $name;

$this->method = $method;

}

public function getName()

{

return $this->name;

}

public function setDefaultOptions(OptionsResolverInterface $resolver)

{

$resolver->setDefaults(array('method' => $this->method));

}

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

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

Пример записи (главная страница ИС):

index:

path: /

defaults: { _controller: "AppBundle:DefaultController:Index" }

Такая запись означает следующее:

  • первая строка – название маршрута (index);
  • вторая строка – путь, или URL-адрес маршрута (/);
  • третья строка – имя класса контроллера, который должен обрабатывать маршрут, а также метод этого контроллера, ответственный именно за этот маршрут;

Обработка маршрута выполняется в контроллере DefaultController.php. При переходе по маршруту (отправке запроса на url /) начинает свою работу метод IndexAction. Данный метод проверяет наличие у пользователя открытой сессии авторизации, и если такой нет, то перенаправляет пользователя на форму авторизации (маршрут /login, Контроллер SecurityController.php).

Для обработки шаблонов и формирования на их основе html-страниц, отображаемых пользователю, используется распространенный шаблонизатор twig. Twig – компилирующий обработчик шаблонов с открытым исходным кодом, написанный на языке программирования PHP. Синтаксис, поддерживаемый шаблонизатором позволяет использовать в шаблонах ветвления, циклы, а удобная структура кода позволяет значительно сократить итоговый объем программного кода. Также стоит отметить, что шаблонизатор генерирует на основе своих шаблонов чистый php-код, который обрабатывается значительно быстрее.

При переадресации на маршрут открытия формы авторизации (/login), срабатывает метод loginAction контроллера SecurityController.php. Он создает экземпляр формы LoginFormType.php и обрабатывает её отправку.

После успешного прохождения авторизации, пользователю отображается страница со списком за явок пользователя. Данную страницу формирует метод indexAction контроллера DefaultController.php на основании шаблона General:index.html.twig.

Исходный код программных модулей приведен в приложении.

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

При открытии страницы сайта открывается форма авторизации (Рисунок 17).

C:\Users\Mixa\YandexDisk\Скриншоты\2017-07-11_21-11-28.png

Рисунок 17. Форма авторизации

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

C:\Users\Mixa\YandexDisk\Скриншоты\2017-08-16_15-27-17.png

Рисунок 18. Список конкурентов

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

C:\Users\Mixa\YandexDisk\Скриншоты\2017-08-16_13-51-44.png

Рисунок 19. Форма добавления конкурента

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

C:\Users\Mixa\YandexDisk\Скриншоты\2017-08-16_15-21-08.png

Рисунок 20. Форма работы с конкурентом

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

Для работы с данными профиля пользователю необходимо нажать на свое имя в верхней панели сайта. Откроется форма работы с профилем (Рисунок 21).

C:\Users\Mixa\YandexDisk\Скриншоты\2017-07-10_18-37-46.png

Рисунок 21. Форма работы с данными профиля

ЗАКЛЮЧЕНИЕ

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

  • Была проанализирована текущая организация бизнес-процесса анализа и изучения конкуренции в компании «Суши-тайм», были выделены основные этапы выполнения бизнес-процесса, изучен возникающий документооборот;
  • Были выбраны и обоснованы проектные решения по информационному и программному обеспечению;
  • Была составлена информационная модель информационной системы;
  • Была разработана база данных и программные модули, реализующие работу ИС.
  • Был описан контрольный пример реализации проекта.

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

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. ГОСТ 2.105 – 95. Общие требования к текстовым документам.

2. ГОСТ 7.32 – 2001. Отчет по научно-исследовательской работе. Структура и правила оформления.

3. ГОСТ 7.82-2001. Библиографическое описание электронных ресурсов.

4. ГОСТ 24.702-85 Эффективность автоматизированных систем управления.

5. ГОСТ Р 7.0.5-2008. Библиографическая запись. Библиографическое описание.

6. Алистер Коберн, Современные методы описания функциональных требований к системам, М.: издательство "Лори", 2017. – 288 с

7. Гайфуллин Б.Н., Обухов И.А., Автоматизация систем управления предприятиями стандарта ERP-MRPII. – М:Интерфейс-пресс, 2010 г. – 114 c.

8. Гончаров А. Самоучитель. HMTL / А. Гончаров. – Спб. : Питер, 2011. – 240 с.

9. Дунаев В. HTML, скрипты и стили / В. Дунаев. – Спб. : БХВ-Петербург, 2015. – 816 с.

10. Жадеев А. PHP для начинающих / А. Жадеев. – Спб.: «Питер», 2014. – 592 c.

11. Колисниченко Д. PHP и MySQL. Разработка WEB-приложений / Д. Колисниченков – Спб: БХВ-Петербург, 2013. – 560 с.

12. Конналли Т. Базы данных. Проектирование, реализация и сопровождение. Теория и практика / Т. Коналли, К. Бегг. – М.: Издательский дом «Вильямс», 2013. – 1093 c.

13. Лобова Г. Моделирование и анализ бизнес-процессов SADT. – М.: LAP Lambert Academic Publishing, 2014. – 352 c.

14. Макдональд, М. Созданиец Web-сайта. Недостающее руководство / М. Макдональд. – Спб. : БХВ-Петербург, 2013. – 624 с.

15. Маклаков С. В. Моделирование бизнес-процессов с AllFusion Process Modeler (BPwin 4.1) / С.В. Маклаков. – М. : ДИАЛОГ-МИФИ, 2013. – 340 c.

16. Маклаков С.В. Создание информационных систем с AllFusion Modeling Suite / С.В. Маклаков. – М. : ДИАЛОГ-МИФИ, 2013. – 512 c.

17. Маклаков С.В. BPwin и Erwin. CASE-средства разработки информационных систем / С.В. Маклаков. – М. : ДИАЛОГ–МИФИ, 2014. – 369 c.

18. Тельнов, Ю.Ф. Информационные системы и технологии. Information System and Technologies: науч. издание под ред. Тельнова Ю. Ф. – М: Юнити-Дана,2012 – 303 с.

19. Флэнаган, Д. Javascript. Подробное руководство / Д. Флэнаган : пер с англ. – М. : Символ-Плюс, 2013. – 1080 с.

21. Проектирование информационных систем. http://проектирование-ис.рф/лекции/лекция-12/

ПРИЛОЖЕНИЯ

<?php

namespace AppBundle\Controller;

use AppBundle\Entity\Comment;

use AppBundle\Entity\ProductCategory;

use AppBundle\Entity\Ticket;

use AppBundle\Entity\TicketStatus;

use AppBundle\Entity\TypeTicket;

use AppBundle\Form\Type\MyTicketFilterFormType;

use AppBundle\Form\Type\ProductCategoryFilterFormType;

use AppBundle\Form\Type\ProductCategoryFormType;

use AppBundle\Form\Type\ProductFormType;

use AppBundle\Entity\Role;

use AppBundle\Entity\Product;

use AppBundle\Form\Type\TicketCommentFormType;

use AppBundle\Form\Type\TicketFilterFormType;

use AppBundle\Form\Type\TicketFormType;

use AppBundle\Form\Type\TypeTicketFilterFormType;

use AppBundle\Form\Type\TypeTicketFormType;

use Sensio\Bundle\FrameworkExtraBundle\Configuration as Config;

use Symfony\Component\Form\FormError;

use Symfony\Component\HttpFoundation\RedirectResponse;

use Symfony\Component\HttpFoundation\Response;

class TicketController extends InitializableController

{

/**

* @return RedirectResponse|Response

* @Config\Route("/tickets", name = "site_tickets_index")

*/

public function indexAction()

{

if (($this->authChecker->isGranted(Role::TEHNIC)) || ($this->authChecker->isGranted(Role::PROGER))) {

$form=$this->createForm(new MyTicketFilterFormType());

$id = null;

$status=null;

$my = null;

$form->handleRequest($this->request);

$tickets = $this->getRepository('Ticket')->createQueryBuilder('t')

->leftJoin('t.status', 's')

->leftJoin('t.user', 'u')

->where('1=1');

if ($form->isSubmitted() && $form->isValid()) {

$id = $form->get('id')->getData();

$status = $form->get('status')->getData();

$my = $form->get('my')->getData();

}

if (!empty($id)) {

$tickets->andWhere('t.id = :id ')->setParameter('id', $id);

}

if (!empty($status)) {

$tickets->andWhere('s.id = :status ')->setParameter('status', $status);

}

if (!empty($my)) {

$tickets->andWhere('u.id = :user ')->setParameter('user', $this->user->getId());

}

}

else {

$form=$this->createForm(new TicketFilterFormType());

$id = null;

$status=null;

$form->handleRequest($this->request);

$tickets = $this->getRepository('Ticket')->createQueryBuilder('t')

->leftJoin('t.status', 's')

->leftJoin('t.author', 'u')

->where('1=1');

if ($form->isSubmitted() && $form->isValid()) {

$id = $form->get('id')->getData();

$status = $form->get('status')->getData();

}

if (!empty($id)) {

$tickets->andWhere('t.id = :id ')->setParameter('id', $id);

}

if (!empty($status)) {

$tickets->andWhere('s.id = :status ')->setParameter('status', $status);

}

$tickets->andWhere('u.id = :user ')->setParameter('user', $this->user->getId());

}

$tickets=$tickets->getQuery()->getResult();

$this->view['tickets'] = $tickets;

$this->view['form'] = $form->createView();

$this->navigation = array('active' => 'tickets');

return $this->render('AppBundle:Tickets:index.html.twig');

}

/**

* @return RedirectResponse|Response

* @Config\Route("/tickets/add", name = "site_tickets_add")

*/

public function addAction()

{

$ticket = new Ticket();

$form = $this->createForm(new TicketFormType(), $ticket);

$form->handleRequest($this->request);

if ($form->isSubmitted() && $form->isValid()) {

$ticket->setAuthor($this->user);

/* @var TicketStatus $status*/

$status=$this->getRepository('TicketStatus')->findOneBy(array('id'=>1));

$ticket->setStatus($status);

$this->manager->persist($ticket);

$this->manager->flush();

$this->addNotice('success',

'tickets.html.twig',

array('notice' => 'added', 'id' => $ticket->getId())

);

return $this->redirectToRoute('site_tickets_index');

}

$this->forms['ticket'] = $form->createView();

$this->navigation = array('active' => 'tickets');

$this->view['ticket']=null;

return $this->render('AppBundle:Tickets:add.html.twig');

}

/**

* @param Ticket $ticket

* @return RedirectResponse|Response

* @Config\Route("/tickets/{ticket}/edit", name = "site_tickets_edit")

* @Config\ParamConverter("ticket", options = {"mapping": {"ticket": "id"}})

*/

public function editAction(Ticket $ticket)

{

$comment= new Comment();

$form = $this->createForm(new TicketCommentFormType(), $comment);

$form->handleRequest($this->request);

if ($form->isSubmitted() && $form->isValid()) {

$comment->setTicket($ticket);

$comment->setAuthor($this->user);

if (is_null($ticket->getUser()) && $this->user != $ticket->getAuthor()) {

$ticket->setUser($this->user);

$this->manager->persist($ticket);

}

$comment->upload();

$this->manager->persist($comment);

$this->manager->flush();

return $this->redirectToRoute('site_tickets_edit', array('ticket'=>$ticket->getId()));

}

$this->forms['comment'] = $form->createView();

$this->view['ticket'] = $ticket;

$this->navigation = array('active' => 'tickets');

return $this->render('AppBundle:Tickets:edit.html.twig');

}

/**

* @param Ticket $ticket

* @param TicketStatus $status

* @return RedirectResponse|Response

* @Config\Route("/tickets/{ticket}/change/{status}", name = "site_tickets_change")

* @Config\ParamConverter("ticket", options = {"mapping": {"ticket": "id"}})

* @Config\ParamConverter("status", options = {"mapping": {"srarus": "id"}})

*/

public function changeAction(Ticket $ticket, TicketStatus $status)

{

$ticket->setStatus($status);

if ($status->getId()==4) {

$this->addNotice('success',

'tickets.html.twig',

array('notice' => 'closed', 'id' => $ticket->getId())

);

}

if ($status->getId()==3) {

$this->addNotice('info',

'tickets.html.twig',

array('notice' => 'sendmodified', 'id' => $ticket->getId())

);

$ticket->setUser(null);

}

$this->manager->persist($ticket);

$this->manager->flush();

$this->navigation = array('active' => 'tickets');

return $this->render('AppBundle:Tickets:index.html.twig');

}

}

<?php

namespace AppBundle\Controller;

use AppBundle\Form\Type\LoginFormType;

use AppBundle\Form\Type\ProfileFormType;

use AppBundle\Controller\InitializableController;

use AppBundle\Entity\Role;

use AppBundle\Entity\User;

use Sensio\Bundle\FrameworkExtraBundle\Configuration as Config;

use Symfony\Component\Form\FormError;

use Symfony\Component\HttpFoundation\RedirectResponse;

use Symfony\Component\HttpFoundation\Response;

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

use Symfony\Component\Security\Core\Encoder\UserPasswordEncoder;

use Symfony\Component\Security\Core\Security;

class SecurityController extends InitializableController

{

/**

* @return RedirectResponse|Response

* @Config\Route("/login", name = "site_security_login")

*/

public function loginAction()

{

if ($this->authChecker->isGranted(Role::USER)) return $this->redirectToRoute('homepage');

$error = null;

if ($this->request->attributes->has(Security::AUTHENTICATION_ERROR))

$error = $this->request->attributes->get(Security::AUTHENTICATION_ERROR);

else {

$error = $this->session->get(Security::AUTHENTICATION_ERROR, null);

$this->session->remove(Security::AUTHENTICATION_ERROR);

}

if (!is_null($error)) {

$this->addNotice('error', 'security_login.html.twig', array('notice' => 'auth_error'));

}

$form = $this->createForm(new LoginFormType(), new User());

$this->navigation = array('active' => 'login');

$this->forms = array(

'login' => $form->createView(),

'last_username' => $this->session->get(Security::LAST_USERNAME, null)

);

return $this->render('AppBundle:Security:login.html.twig');

}

/**

* @throws NotFoundHttpException

* @Config\Route("/login-check", name = "site_security_login_check")

*/

public function loginCheckAction()

{

throw $this->createNotFoundException();

}

/**

* @throws NotFoundHttpException

* @Config\Route("/logout", name = "site_security_logout")

*/

public function logoutAction()

{

throw $this->createNotFoundException();

}

/**

* @return RedirectResponse|Response

* @Config\Route("/profile", name = "site_security_profile")

*/

public function profileAction()

{

$form = $this->createForm(new ProfileFormType(), $this->user);

$form->handleRequest($this->request);

if ($form->isSubmitted() && $form->isValid()) {

if (!is_null($form->get('password')->getData())) {

/** @var UserPasswordEncoder $encoder */

$encoder = $this->get('security.password_encoder');

$this->user->setSalt(User::generateSalt())

->setPassword($encoder->encodePassword($this->user, $this->user->getPassword()));

$this->manager->persist($this->user);

$this->manager->flush();

}

$this->addNotice('success',

'security_profile.html.twig',

array('notice' => 'user_changed')

);

return $this->redirectToRoute('homepage');

}

$this->forms['profile'] = $form->createView();

$this->navigation = array('active' => 'homepage');

return $this->render('AppBundle:Security:profile.html.twig');

}

}