Программная система управления контентом портала с архивом конструкторской документации

Краткая характеристика функционала Solid Works Enterprise PDM. Методы и средства разработки системы управления контентом портала с архивом конструкторской документации. Логическая и компонентная архитектура. Решения по пользовательскому интерфейсу.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 10.02.2017
Размер файла 2,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

7.3 Определение общей продолжительности работ по проектированию и разработке программного продукта

В разработке системы принимал участие один инженер-программист.

Длительность выполнения работ по проектированию и разработке системы представлена в таблице 8.

Таблица 8 - Длительность выполнения работ

Этап работ

Длительность этапа (часы)

1

Разработка ТЗ

19

2

Анализ ТЗ, работа с источниками

54

3

Разработка основных этапов работы

10

4

Общее проектирование модулей системы

29

5

Кодирование программы

192

6

Тестирование и отладка программы

67

7

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

29

Итого

400

По данным таблицы 8 построим график организации работ на этапе проектирования разработки в зависимости от времени (рисунок 20.1).

Рисунок 20 - График организации работ

Так как все работы выполняет один разработчик, то распараллеливание тех или иных этапов невозможно. Время, которое планируется затратить на разработку программы, составляет Tпр = 400 часов.

7.4 Расчет суммарных затрат на разработку программного продукта

К затратам на проектирование и разработку ПП (Зс) относятся:

Материальные затраты (Зм);

Затраты на электроэнергию(Зэ);

Затраты на оплату труда(Зт);

Отчисления на социальные нужды(Зо);

Амортизация оборудования (За).

Прочие затраты (Зп).

Затраты на проектирование и разработку ПП рассчитываются по формуле (1):

Зс = Зм +Зэ+Зт+Зо+За+Зпр (1)

7.4.1 Расчет материальных затрат

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

7.4.2 Расчет затрат на оплату электроэнергии

Рассчитаем затраты на электроэнергию (ЗЭ), результаты расчета сведены в таблицу 9.

Таблица 9 - Расчет затраты на электроэнергию

Наименование оборудования

Паспортная мощность, кВт

Коэффициент использования мощности

Время работы оборудования для разработки ПП, ч

Цена электроэнергии,

Сумма, руб.

Блок питания ЭВМ

0.25

0.9

400

3.5

315

Монитор

0.05

0.9

400

3.5

63

ИТОГО затраты на электроэнергию

378

Общая сумма затрат на электроэнергию (ЗЭ) рассчитывается по формуле (2):

(2)

где Мi -паспортная мощность i-го электрооборудования, кВт;

Кi - коэффициент использования мощности i-го электрооборудования (принимается Кi=0.70.9);

Тi - время работы i-го оборудования за весь период разработки ПП, час;

Ц - стоимость электроэнергии, руб/кВтч (по данным бухгалтерии, или тариф для потребителей - физ.лиц);

i - вид оборудования;

n - количество оборудования i-того вида.

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

7.4.3 Расчет затрат на оплату труда

Затраты на оплату труда разработчика (ЗТ) рассчитываются исходя из его часовой ставки и времени его работы, формула (3).

Зт= Зо+Зд (3)

Где Зо- основная зарплата;

Зд- дополнительная зарплата (для юр.лиц);

Основная заработная плата (Зо) определяется по формуле (4):

(4)

где t -- время выполнения i-го вида работ, ч;

s -- часовая (дневная) тарифная ставка исполнителя при выполнении

i-го вида работ, руб/ч.

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

Si = 18000 руб. / (25 * 8) = 90 руб./ч

С учетом этого затраты на оплату труда разработчика равны

ЗТ = 90 * 400 = 36000 руб.

7.4.4 Расчет отчислений на социальные нужды

Рассчитаем суммарную величину страховых взносов (ЗО) по формуле (5).

(5)

где Зо- основная заработная плата;

Зд- дополнительные денежные вознаграждения.

з - ставка страховых взносов (в соответствии с федеральным законом от 03.12.2011 N 379-Ф3, для основной массы плательщиков с 1 января 2012 года ставка страховых взносов установлена в размере 30%).

ЗО = (36000 * 30)/100 = 10800 руб

7.4.5 Расчет затрат на амортизацию

Проведем расчет амортизационных отчислений, результаты расчета сведены в таблицу 6.5.

Общая величина амортизационных отчислений (За) определяется по формуле (6):

, (6)

где Фi -стоимость i-го оборудования, руб.;

НАi - годовая норма амортизации i-го оборудования, %;

ТНИРi - время работы i-го оборудования за весь период разработки ПП, ч;

Тэфi - эффективный фонд времени работы i-го оборудования за год, ч/год (для оборудования возрастом до 5 лет, составляет 1870 ч);

i - вид оборудования;

n - количество оборудования i-того вида.

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

, (7)

где ТNi - возможный срок полезного использования i-го оборудования, год.

Таблица 10 - Общая стоимость оборудования

Наименование оборудования

Стоимость оборудования, руб.

Блок питания ЭВМ

22000

Монитор

7000

Итого

29000

Затраты на амортизацию равны 0, так как амортизируемым имуществом признается имущество со сроком полезного использования более 12 месяцев и первоначальной стоимостью более 40000 рублей. [6]

7.4.6 Расчет прочих затрат

В ходе разработки системы к прочим затратам можно отнести оплату интернет-трафика. Тариф Интернет-провайдера Мегалинк составляет 500 рублей в месяц. Разработка системы длилась 400 рабочих часов, это приблизительно равно двум месяцам. Следовательно прочие затраты составили только оплата интернет-трафика равной 1000 рублей.

7.4.7 Смета затрат на разработку

Затраты на проектирование и разработку равны:

Зс = 378руб + 36000руб + 10800руб + 1000руб = 48178 руб.

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

Таблица 11 - Смета затрат на разработку ПО

Статьи затрат

Сумма, руб.

Материальные затраты, в том числе:

материалы

электроэнергия

Затраты на оплату труда.

Страховые взносы.

Амортизация оборудования.

Прочие затраты.

378

36000

10800

0

1000

ИТОГО

48178

7.4.8 Определение цены реализации

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

В случае реализации программного продукта продажная цена складывалась бы из его себестоимости, закладываемой прибыли и НДС. В таблице 12 приводятся данные для определения цены продукции и полученная цена. После анализа ситуации на рынке аналогичной продукции, закладываемая норма прибыли была принята 20%.

Таблица 12 - Определение цены реализации системы

Наименование статьи калькуляции

Сумма, руб.

Себестоимость

48178

Закладываемая прибыль (20%)

9635,60

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

7.5 Расчет сравнительной технико-экономической эффективности

7.5.1 Расчет коэффициента качества

Рассчитаем весовые коэффициенты критериев сравнения (таблица 6.7) и интегрального коэффициента качества.

Интегральный коэффициент качества вычисляется по формуле (8) K= (разработки)/ (аналога) (8)

Таблица 13 - Расчет весовых коэффициентов критериев сравнения

Критерий

Сравнения

Экспертная оценка важности

Нормированный весовой коэффициент

Аналог

Разработка

Показатель

Значение

Показатель

Значение

1

Быстродействие

8

0,2105

6

1,2632

8

1,6842

2

Требовательность к системным ресурсам

6,5

0,1711

5

0,8553

7

1,1974

3

Функциональность

8,5

0,2237

9

2,0132

8

1,7895

4

Минимизация трафика

7

0,1842

6

1,1053

9

1,6579

5

Эргономика

8

0,2105

8

1,6842

8

1,6842

Итого

38

=34

=

6,92

=40

=8,01

Получаем K= (разработки)/ (аналога) = 8,01/6,92 = 1,16

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

7.5.2 Расчет коэффициента цены потребления

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

(9)

где К - единовременные затраты на разработку (приобретение) и внедрение ПП; Зэ - текущие затраты на эксплуатацию ПП за выбранный для сравнения период работы изделия.

Для разработанного приложения и для аналога примем К равным стоимости единичной копии системы.

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

Цена аналога в зависимости от курса доллара на 13.06.2015 составляет 74587,35 рублей.

Сводные данные по вычислению коэффициента цены потребления приведены в таблице 14.

Таблица 14 - Вычисление интегрального стоимостного показателя

Наименование статьи калькуляции

Аналог

Сумма, руб.

Разработка

Сумма, руб.

Единовременные затраты

74587,35

57813,6

Итого, интегральный стоимостный показатель (цена потребления)

74587,35

57813,6

Коэффициент цены потребления, Кэ=Ip/Ia

0,77

7.4.5 Расчет показателя сравнительной технико-экономической эффективности

Сравнительная технико-экономическая эффективность разработки определяется по формуле:

, (10)

где - сравнительная технико-экономическая эффективность разработки;

Kk- интегральный показатель качества;

Кэ- интегральный показатель цены потребления.

Расчет сравнительной технико-экономической эффективности разработки представлен в таблице 15.

Таблица 15 - Расчет сравнительной технико-экономической эффективности разработки

Параметр,

Весовой

Аналог

Разработка

оценка

коэфф.

Быстродействие

0,2105

1

0,2105

1,3333

0,2806

Требовательность к системным ресурсам

0,1711

1

0,1711

1,4

0,2395

Функциональность

0,2237

1

0,2237

0,8888

0,1988

Минимизация трафика

0,1842

1

0,1842

1,5

0,2763

Эргономика

0,2105

1

0,2105

1

0,2105

Интегральный техн. показатель, Q

1

1,2057

Коэффициент качества

1,2057

Интегральный стоимостной показатель, I

74587,35

57813,6

Коэффициент цены потребления

0,77

Сравнительная технико-экономическая эффективность, Эср

1,6

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

7.5 Вывод

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

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

В качестве основного средства продвижения разработанной системы предполагается использовать ресурсы глобальной сети Интернет. Размещение объявлений и баннеров на различных сайтах ориентированных на потенциальных пользователей и сервисах контекстной рекламы (Яндекс.Директ, Google AdWords), позволит привлечь внимание аудитории. Информацию о продукте все интересующиеся смогут получить на специальном сайте, там же будут опубликовываться новости и списки изменений в проекте.

8. Безопасность и экологичность проекта

8.1 Особенности функционального назначения

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

8.2 Описание процесса эксплуатации объекта

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

Обычный пользователь

Администратор

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

Открыть браузер и зайти под своей учетной записью в модуль;

Найти нужный раздел документации или совершить поиск по схемам;

Получить всю необходимую информацию;

Закончить работу.

Для работы в модуле администратор совершает следующие действия:

Открыть браузер и зайти под своей учетной записью в модуль.

Зайти в административную панель системы

Произвести редактирование или добавление пользователя

Сохранить все изменения

Выйти

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

Рисунок 21 - Блок-схема действий обычного пользователя и администратора

8.3 Оценка эргономичности пользовательского интерфейса

Проведём оценку эргономичности пользовательского интерфейса, заполнив таблицу 16. В ячейки, отражающие степень выраженности показателя, следует внести значение от 1 до 5. В ячейки, отражающие выполнение или невыполнение показателя заносятся значения 0 или 1, означающие «Нет» и «Да» соответственно. По каждой группе показателей собирается статистика путём подсчёта суммы баллов и внесения полученных значений в соответствующие ячейки.

Таблица 16 - Критерии и показатели оценки эргономичности пользовательского интерфейса программных продуктов

Критерии и показатели оценки

Программный модуль разрабатываемой системы

Solidworcks Enterprise PDM

Autodesk Vault Professional

Логичность компоновки элементов

42

35

35

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

4

4

3

Порядок заполнения полей (во всех окнах поля расположены по логике заполнения сверху вниз или слева направо)

5

5

5

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

4

4

3

Обоснованное соотношение между «детальностью» и «обобщенностью» выводимой на экран информации (нахождение компромисса между желанием вывести много записей одновременно и/или сразу увидеть детальную информацию по каждой из них)

4

3

3

Единство в выборе способа работы с однотипными данными (таблицы, списки, меню, консоль)

5

4

4

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

5

3

4

Видимое разделение редактируемых обязательных и необязательных, а также нередактируемых полей

4

4

4

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

5

3

3

Возможность совершать несколько различных действий (решать несколько задач) одновременно

3

3

3

Отсутствие перекрывающихся окон на экране

1

1

1

Отсутствие рядом расположенных кнопок с противоположным действием

1

0

1

Отсутствие дублирующих полей ввода

1

1

1

Интуитивность и ассоциативность диалогового режима

32

31

26

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

4

4

4

Наличие контекстных подсказок, меню дальнейших событий или объектов, запоминание типичных путей диалога

4

4

3

Наличие средств, позволяющих пользователям восстановить данные после ошибочных действий

4

4

4

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

4

4

3

Возможность настройки интерфейса для пользователей с разным опытом работы с компьютером

3

3

3

Типичность интерфейса: использование стандартных элементов взаимодействия, их традиционное или общепринятое расположение

4

4

4

Постоянная возможность вызова главного меню (главной страницы)

1

1

1

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

4

4

3

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

4

3

1

Полнота реализации обратной связи с пользователем

16

15

12

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

4

4

3

3.2 Отображение режима работы системы (автономного, штатного, защищенного и пр.)

0

0

0

3.3 Настраиваемое отображение значений важных для текущей задачи показателей

3

2

2

3.4 Отражение действий пользователя (нажатия клавиш, запуск процесса, динамика выполнения процесса, получение ожидаемого и иного результата)

5

5

5

3.5 Ясность и информативность сообщений системы

4

4

2

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

26

25

20

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

4

3

3

Использованные сочетания оттенков цвета совместимы

4

4

3

Контрастность объектов различения с фоном комфортная и не требует перенастройки дисплея

4

4

4

Шрифт основного текста и заголовков легко читаем или может быть изменен

4

4

4

Размер шрифта основного текста, подписей элементов интерфейса может быть увеличен или уменьшен пользователем

5

5

3

Единство стиля оформления (фона, формата заголовков и основного текста, пиктограмм)

5

5

3

Итоговая сумма баллов

116

106

93

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

8.4 Оценка напряженности процесса эксплуатации объекта

Проведём сравнительную оценку напряжённость процесса эксплуатации системы в процессе работы. Для этого заполним таблицу 7.2, в которой отражается степень влияния каждого из 28 факторов на напряжённость трудового процесса. Факторы трудового процесса сформированы в соответствии с гигиеническим руководством Р 2.2.2006-05. всего используются семь оценок (классов): 1.0 - значение фактора оптимально, 2.0 - допустимо, 3.1, 3.2, 3.3, 3.4 - вредно в той или иной степени, 4.0 - опасно.[7]

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

Таблица 17 - Показатели напряженности трудового процесса до и после внедрения

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

Класс условий труда

До внедрения

После внедрения

1. Интеллектуальные нагрузки

2.0

1.0

1.1. Содержание работы

2.0

1.0

1.2. Восприятие сигналов (информации) и их оценка

2.0

1.0

1.3. Распределение функций по степени сложности задания

2.0

1.0

1.4. Характер выполняемой работы

2.0

1.0

2. Сенсорные нагрузки

3.1

2.0

2.1. Длительность сосредоточенного наблюдения (% времени смены)

2.0

1.0

2.2.Плотность сигналов (световых, звуковых) и сообщений в среднем за 1 час работы

2.0

2.0

2.3. Число производственных объектов одновременного наблюдения

1.0

1.0

2.4. Размер объекта различения (при расстоянии от глаз работающего до объекта различения не более 0,5 м) в мм при длительности сосредоточенного наблюдения (% времени смены)

3.1

2.0

2.5. Работа с оптическими приборами (микроскопы, лупы и т.п.) при длительности сосредоточенного наблюдения (% времени смены)

1.0

1.0

2.6. Наблюдение за экранами видеотерминалов

(часов в смену):

при буквенно-цифровом типе отображения информации: при графическом типе отображения информации:

1.0

1.0

1.0

1.0

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

1.0

1.0

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

1.0

1.0

3. Эмоциональные нагрузки

3.1

1.0

З.1.Степень ответственности за результат собственной деятельности. Значимость ошибки

3.1

1.0

3.2. Степень риска для собственной жизни

1.0

1.0

3.3. Степень ответственности за безопасность других лиц

1.0

1.0

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

1.0

1.0

4. Монотонность нагрузки

3.1

2.0

4.1. Число элементов (приемов), необходимых для реализации простого задания или в многократно повторяющихся операциях

3.1

1.0

4.2. Продолжительность (в сек) выполнения простых заданий или повторяющихся операций

2.0

2.0

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

3.1

1.0

4.4. Монотонность производственной обстановки (время пассивного наблюдения за ходом техпроцесса в % от времени смены)

2.0

2.0

5. Режим труда и отдыха

2.0

2.0

5.1. Фактическая продолжительность рабочего дня

2.0

2.0

5.2. Сменность работы

2.0

1.0

5.3. Наличие регламентированных перерывов и их продолжительность

1.0

1.0

Общая оценка напряженности трудового процесса

14.5

9.0

Общая оценка напряжённости после внедрения “Оптимальна” так как данная оценка устанавливается в случаях, когда 17 и более показателей имеют оценку 1 класса, а остальные относятся ко 2 классу. При этом отсутствуют показатели, относящиеся к 3 (вредному) классу.

Общая оценка напряжённости до внедрения «Допустимый» так как мы имеем оценку 3.1 меньше чем у 6 показателей.

8.5 Разработка мер профилактики и повышения безопасности человеко-машинного взаимодействия

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

Так как при восьмичасовом рабочем дне длительность работы с системой на ЭВМ не превышает 4 часов, то длительность регламентированных перерывов составляет 70 минут, или 9 минут в один час работы.

По рекомендациям СанПиН должен составлять 10-15 минут. Для предупреждения переутомления в состав обязательных мероприятий необходимо включить:

проведение мероприятий для глаз через каждые 20-25 минут работы;

организация перерыва в течение 10 минут каждый час.

Заключение

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

Заключение

В результате проведенной работы были спроектированы и реализованы модули редактора и вебсайта. Были решены поставленные в работе задачи в полном объеме.

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

Выбраны средства и инструменты, позволившие эффективно решить поставленные задачи.

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

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

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

Разработанная система обладает следующими преимуществами:

Редактировать содержимое системы может только редактор;

Система включает в себя разграничение пользователей по ролям.

Масштабирование схем и чертежей;

Поиск оборудования на схемах;

Глобальный и локальный поиск оборудования и схем;

Разграничение прав доступа к системе через администраторскую панель вебсайта;

Система работает с помощью клиент - серверной архитектуры, пользователю не надо дополнительное место на жестком диске;

Разделение системы на два модуля:

Редактор, для наполнения контента;

вебсайт, для просмотра контента.

Автоматическая синхронизация редактора и сервера системы;

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

1. Википедия: PDM - Система [Электронный ресурс].URL - (Дата обращения 10.05.2015)

2. Solidworks Russia: Описание Solidworks Enterprice PDM [Электронный ресурс]. URL - (Дата обращения 20.05.2015)

3. САПР: Основные особенности Autodesk Vault [Электронный ресурс]. (Дата обращения 30.05.2015)

4. 1С: 1С:Предприятие 8. PDM Управление инженерными данными [Электронный ресурс]. URL - (Дата обращения 01.06.2015)

5. Аскон: Лоцман:КБ [Электронный ресурс]. URL - (Дата обращения 01.06.2015)

6. Морозова Т.В. Методические указания по выполнению технико-экономического обоснования дипломных работ студентов инженерных специальностей: учебно - методическое пособие [Текст]. / Т.В. Морозова - Таганрог, 2015. - 40с.

7. Компаниец В.С. Учебно-методическое пособие по выполнению раздела «Безопасность человеко-машинного взаимодействия» в выпускных квалификационных работах студентов ИКТИБ: учебно - методическое пособие [Текст]. / Компаниец В.С - Таганрог, 2015. - 47с.

Приложение А

ИСХОДНЫЙ КОД МОДУЛЯ ВЕБСАЙТ

Файл start.php

<?php

Class start extends CI_Controller

{

public $viewData = array();

public function __construct() {

parent::__construct();

$this->viewData = array();

if($this->User_model->isAuthorize() || $this->User_model->isAdmin())

{

redirect('Dashboard/index');

}

}

public function index()

{

if($this->User_model->isAuthorize() || $this->User_model->isAdmin())

{

redirect('Dashboard/index');

}

$this->viewData['jobs'] = $this->User_model->GetJobs();

$this->load->view('login',$this->viewData);

//redirect('reader/links');

}

public function enter()

{

$error = '';

$data = $this->input->post(NULL,TRUE);

$this->load->library('form_validation');

$this->form_validation->set_error_delimiters('<div class="alert alert-danger fade in"><button type ="button" class = "close" data-dismiss="alert" aria-hidden="true">Ч</button>', '</div>');

$this->form_validation->set_rules('password','Пароль','trim|required|xss_clean');

if($this->form_validation->run() == FALSE)

{

$error = validation_errors();

$this->session->set_flashdata('error',$error);

redirect('start/index','refresh');

}

if($this->User_model->checkPass($data['password']))

{

redirect('Dashboard/index','refresh');

}

else

{

$error = '<div class="alert alert-danger fade in"><button type ="button" class = "close" data-dismiss="alert" aria-hidden="true">Ч</button><strong style = "padding-left:10px"><span>Нет такого пароля!</span></strong></div>';

$this->session->set_flashdata('error_log',$error);

$this->session->set_flashdata('password',$data['password']);

redirect('start/index','refresh');

}

}

public function registration()

{

$this->load->view('registration');

}

public function addUser()

{

$error = array();

$data = $this->input->post(NULL,TRUE);

$this->load->library("form_validation");

$this->form_validation->set_error_delimiters('<div class="alert alert-danger fade in"><button type ="button" class = "close" data-dismiss="alert" aria-hidden="true">Ч</button>', '</div>');

$this->form_validation->set_rules('name','ФИО','trim|required|xss_clean');

$this->form_validation->set_rules('job','Работа','trim|required|xss_clean');

$this->form_validation->set_rules('position','Должность','trim|required|xss_clean');

$this->form_validation->set_rules('email','Email','trim|required|xss_clean|valid_email|is_unique[user.email]');

$this->form_validation->set_rules('password','Пароль','trim|required|xss_clean|is_unique[user.password]');

$this->form_validation->set_rules('ret_pass','Пароль','trim|required|xss_clean|matches[password]');

if($this->form_validation->run() == FALSE)

{

$error = validation_errors();

$this->session->set_flashdata('error_registration',$error);

$this->session->set_flashdata('data',$data);

redirect('/start','refresh');

}

else

{

array_pop($data);

if($this->User_model->addUser($data))

{

$message = 'Вы успешно зарегистрировались.Ответ прийдет по электронной почте.';

$this->session->set_flashdata('message',$message);

redirect('/start/index','refresh');

}

$error = 'Попробуйте повторить регистрацию';

$this->session->set_flashdata('error_registration',$error);

redirect('/start','refresh');

}

}

public function checkpass()

{

$data = $this->input->post(NULL,TRUE);

$password = $data['password'];

//Проверяем, есть ли пробелы в пароле

if(preg_match("/([\s])/", $password))

{

$html = '<div style="background:#ff0000; width:100%; height:10px;"></div>';

$html .= "Недопустимые символы в пароле";

}

else

{

if(strlen($password) < 6)

{

$html = '<div style="background:#ff0000; width:100%; height:10px;"></div>';

$html .= "*Не менее 6 (Lat&цифры&символы)";

}

else

{

$strong = 0;

//Проверяем, есть ли в пароле числа

if(preg_match("/([0-9]+)/", $password))

{

$strong++;

}

//Проверяем, есть ли в пароле буквы в нижнем регистре

if(preg_match("/([a-z]+)/", $password))

{

$strong++;

}

//Проверяем, есть ли в пароле буквы в верхнем регистре

if(preg_match("/([A-Z]+)/", $password))

{

$strong++;

}

//Проверяем, есть ли в пароле спецсимволы

if(preg_match("/\W/", $password))

{

$strong++;

}

//В зависимости от сложности пароля выводим полоски

if($strong == 1)

{

$html = '<div style="background:#ff0000; width:25%; height:10px;"></div>';

$html .= "Очень слабый";

}

if($strong == 2)

{

$html = '<div style="background:#edc431; width:50%; height:10px;"></div>';

$html .= "Слабый";

}

if($strong == 3)

{

$html = '<div style="background:#edc431; width:50%; height:10px;"></div>';

$html .= "Простой";

}

if($strong == 4)

{

$html = '<div style="background:#2dda2f; width:100%; height:10px;"></div>';

$html .= "Надежный";

}

}

}

echo $html;

}

public function info()

{

echo phpinfo();

}

}

Файл Admin.php

<?php

class Admin extends CI_Controller

{

public $viewData = array();

public function __construct() {

parent::__construct();

$this->load->model('User_model');

$this->viewData = array();

if(!$this->User_model->isAuthorize() || !$this->User_model->isAdmin())

{

redirect('start/index');

}

}

public function Staff()

{

$referer_page = site_url('public_html/1081.html');

if(isset($_SERVER['HTTP_REFERER']))

{

$referer_page = $_SERVER['HTTP_REFERER'];

}

$this->db->order_by("level", "ASC");

$all_user_object = $this->db->get('user');

$users = array();

$i = 0;

foreach($all_user_object->result() as $all_user)

{

$users[$i]['id'] = $all_user->iduser;

$users[$i]['name'] = $all_user->name;

$users[$i]['job'] = $all_user->job;

$users[$i]['subdivision'] = $all_user->subdivision;

$users[$i]['position'] = $all_user->position;

$users[$i]['email'] = $all_user->email;

$users[$i]['password'] = $all_user->password;

$users[$i]['level'] = $all_user->level;

$i++;

}

$this->viewData['jobs'] = $this->User_model->GetJobsArray();

$this->viewData['jobs_string'] = $this->User_model->GetJobs();

$this->viewData['users'] = $users;

$this->viewData['referer'] = $referer_page;

$this->load->view('Admin/staff',$this->viewData);

}

public function ChangeUser()

{

$data = $this->input->post(NULL,TRUE);

$result = array();

$error = '';

$this->load->library('form_validation');

$this->form_validation->set_error_delimiters('<div class="alert alert-danger fade in">', '</div>');

// $this->form_validation->set_rules('staffNumber','Номер','trim|required|xss_clean|is_natural_no_zero');

$this->form_validation->set_rules('staffName','ФИО','trim|required|xss_clean');

$this->form_validation->set_rules('staffPosition','Место работы','trim|required|xss_clean');

$this->form_validation->set_rules('staffSubdivision','Подразделение','Работа','trim|required|xss_clean');

$this->form_validation->set_rules('staffJob','Должность','trim|required|xss_clean');

if($data['newUser'])

{

$this->form_validation->set_rules('staffEmail','Email','trim|required|xss_clean|valid_email|is_unique[user.email]');

$this->form_validation->set_rules('staffPass','Пароль','trim|required|xss_clean|min_length[3]|is_unique[user.password]');

}

else

{

$this->form_validation->set_rules('staffEmail','Email','trim|required|xss_clean|valid_email');

$this->form_validation->set_rules('staffPass','Пароль','trim|required|xss_clean|min_length[3]');

}

$this->form_validation->set_rules('staffNote','Уровень','trim|required|xss_clean|is_natural');

if($this->form_validation->run() == FALSE)

{

$success = FALSE;

$error = validation_errors();

}

else

{

$email = $data['staffEmail'];

$data_update['name'] = $data['staffName'];

$data_update['job'] = $this->User_model->identifiedJob($data['staffJob']);

$data_update['subdivision'] = $data['staffSubdivision'];

$data_update['position'] = $data['staffPosition'];

$data_update['password'] = $data['staffPass'];

$data_update['level'] = $data['staffNote'];

$data_update['email'] = $email;

$this->db->where('email',$email);

$this->db->from('user');

$count = $this->db->count_all_results();

if($count)

{

$changePass = $this->User_model->strPass($data['staffPass'],$data['staffEmail']);

if($changePass && $data['staffNote'] == 0)

{

$data_update['level'] = 1;

}

$this->db->where('email',$email);

$success = $this->db->update('user', $data_update);

$result['type'] = 'update';

$result['changePass'] = $changePass;

}

else

{

$success = $this->User_model->addUser($data_update);

$result['type'] = 'insert';

}

$result['data'] = $data_update;

// echo $success

}

$result['success'] = $success;

$result['error'] = $error;

print(json_encode($result));

}

public function ChangeJob()

{

$data = $this->input->post(NULL,TRUE);

$result = array();

$this->load->library('form_validation');

$this->form_validation->set_rules('addJob','Работа','trim|required|xss_clean');

$this->form_validation->set_rules('id','ID','trim|required|xss_clean');

if($this->form_validation->run() == FALSE)

{

$result['success'] = FALSE;

}

else

{

$data['id'] = preg_replace('/[^0-9]/', '', $data['id']);

if($data['id'] && $data['id'] == 1)

{

$result['id'] = $this->User_model->InsertAndUpdateJob($data,1);

if($result['id'])

{

$result['success'] = TRUE;

}

else

{

$result['success'] = FALSE;

}

$result['type'] = 'insert';

}

else

{

$result['success'] = $this->User_model->InsertAndUpdateJob($data);

$result['id'] = $data['id'];

$result['type'] = 'update';

}

$result['newJob'] = $data['addJob'];

$result['jobs_string'] = $this->User_model->GetJobs();

print json_encode($result);

}

}

public function SortUser()

{

$data = $this->input->post(NULL,TRUE);

switch ($data['type'])

{

case 'fname':

$famyli = 1;

break;

case 'level':

$famyli = 0;

break;

default :

$famyli = -1;

break;

}

if($famyli != -1)

{

$result['success'] = TRUE;

$result['sort'] = $this->User_model->Sort_User($famyli);

}

else

{

$result['success'] = FALSE;

}

print(json_encode($result));

}

}

?>

Файл Dashboard.php

<?php

class Dashboard extends CI_Controller

{

public $viewData = array();

public function __construct() {

parent::__construct();

$this->viewData = array();

if(!$this->User_model->isAuthorize())

{

redirect('start/index');

}

}

public function index()

{

//echo 'hello';

//redirect(site_url('public_html/1081.html'));

$this->viewData['num'] = 2;

//$this->load->view('public_html/1081.html');

session_start();

$_SESSION['user_id'] = $this->session->userdata('user_id');

redirect('public_html/1081.html');

}

public function logout()

{

session_start();

session_unset();

$this->session->unset_userdata('user_id');

redirect('start/');

}

public function Search()

{

$data = $this->input->post(NULL,TRUE);

$error = '';

$success = TRUE;

$querys = array();

$flag = 1;

$this->load->library('form_validation');

$this->form_validation->set_rules('query','Запрос','trim|required|xss_clean|min_length[3]');

if($this->form_validation->run() == FALSE)

{

$error = validation_errors();

$success = FALSE;

}

else

{

if($data['station'] == 'Главная')

{

$this->db->like('name',$data['query']);

$this->db->order_by('aes','ASC');

$query_result = $this->db->get('shemas');

$this->db->like('name',$data['query']);

$this->db->from('shemas');

$count = $this->db->count_all_results();

$this->db->like('name',$data['query']);

$this->db->from('rig');

$count_rig = $this->db->count_all_results();

}

else

{

$this->db->like('name',$data['query']);

$this->db->like('aes',$data['station']);

$query_result = $this->db->get('shemas');

$this->db->like('name',$data['query']);

$this->db->like('aes',$data['station']);

$this->db->from('shemas');

$count = $this->db->count_all_results();

$count_query_rig = $this->db->query("SELECT COUNT(*) as cnt FROM rig INNER JOIN shemas ON rig.idshemas = shemas.idshemas WHERE rig.name LIKE '%".$data['query']."%' AND shemas.aes = '$data[station]'");

foreach ($count_query_rig->result() as $cnt)

{

$count_rig = $cnt->cnt;

}

}

if($count_rig)

{

/*$rigs_id_array = array();

$this->db->like('name',$data['query']);

$resulr_id_rig = $this->db->get('rig');

foreach($resulr_id_rig->result() as $id_rig)

{

$rigs_id_array[] = $id_rig;

}

$this->db->select('rig.picture as picture,shemas.aes as aes,shemas.block as block,shemas.link as link');

$this->db->from('rig');

$this->db->join('shemas','rig.idshemas = shemas.idshemas');

$query_rig = $this->db->get();*/

$query_rig = $this->db->query("SELECT rig.picture as picture,rig.name as name,shemas.aes as aes,shemas.block as block,shemas.link as link FROM rig INNER JOIN shemas ON rig.idshemas = shemas.idshemas

WHERE rig.name LIKE '%".$data['query']."%'");

}

$i = 1;

if($count)

{

foreach($query_result->result() as $query)

{

$querys[$i]['idshemas'] = $query->idshemas;

$querys[$i]['picture'] = $query->picture;

$querys[$i]['name'] = $query->name;

$querys[$i]['aes'] = $query->aes;

$querys[$i]['block'] = $query->block;

$querys[$i]['link'] = $query->link;

$querys[$i]['rigname'] = '';

$i++;

}

}

else

{

$flag = 0;

}

if($count_rig)

{

$flag = 1;

foreach($query_rig->result() as $rigs)

{

$querys[$i]['picture'] = $rigs->picture;

$querys[$i]['aes'] = $rigs->aes;

$querys[$i]['block'] = $rigs->block;

$querys[$i]['name'] = $rigs->link;

$querys[$i]['rigname'] = $rigs->name;

$i++;

}

}

}

if(!$flag)

{

$error = 'Нет результатов';

$success = FALSE;

}

$result = array('success' => $success,'error'=>$error,'querys'=>$querys,'count' => $count,'query' => $data['query']);

print(json_encode($result));

}

}

Файл user_model.php

<?php

class User_model extends CI_Model

{

private $user_id = 0;

public function __construct()

{

parent::__construct();

if($this->session->userdata('user_id'))

{

$this->user_id = $this->session->userdata('user_id');

}

}

public function hello()

{

return 'hello';

}

public function isAuthorize()

{

return (($this->user_id)?(true):(false));

}

public function addUser($data = array())

{

$this->db->select_max('iduser');

$query = $this->db->get('user');

$id = 0;

foreach($query->result() as $idusr)

{

$id = $idusr->iduser;

break;

}

$id++;

// $this->user_id = $id;

// $this->session->set_userdata('user_id',$id);

$data['iduser'] = $id;

return $this->db->insert('user',$data);

}

public function checkPass($password = '')

{

$id = 0;

$this->db->select('iduser');

$this->db->where('password',$password);

$this->db->where('level >',0);

$query = $this->db->get('user');

foreach($query->result() as $iduser)

{

$id = $iduser->iduser;

break;

}

if($id)

{

$this->user_id = $id;

$this->session->set_userdata('user_id',$id);

return TRUE;

}

return FALSE;

}

}

Приложение Б

ИСХОДНЫЙ КОД МОДУЛЯ РЕДАКТОР

using System.Collections.Generic;

using System.Windows.Forms;

using System.IO;

using System.Threading;

namespace StationGuide.Browser

{

static class Program

{

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

//check,if there are some .SPG files in the folder with application

FileInfo[] files = (new DirectoryInfo(Directory.GetCurrentDirectory())).GetFiles();

List<FileInfo> spgList = new List<FileInfo>();

foreach (FileInfo fi in files)

{

if (fi.Extension.ToLower() == ".spg")

{

spgList.Add(fi);

}

}

//if file with this extension is only one...

String packName = String.Empty;

if (spgList.Count == 1)

{

// ... we take this file as secured package for application;

packName = spgList[0].Name;

}

else

{

String message = spgList.Count == 0 ? "Файл пакета библиотеки не найден. В следующем окне выберите необходимый файл" : "Найдено несколько файлов пакетов библиотек. В следующем окне выберите необходимый файл";

MessageBox.Show(message, "Ошибка открытия файла пакета библиотеки");

// ottherwise (if there are no files or more then one) - we ask user where and which package file is

OpenPackageForm opf = new OpenPackageForm();

opf.ShowDialog();

if (opf.IsAppClosing)

{

return;

}

packName = opf.PackageName;

}

// if we haven't name of package file we stop application's work

if (String.IsNullOrEmpty(packName))

{

return;

}

SecurePackaging.ISecuredPackageReader package = new StationGuide.SecurePackaging.DesSecuredPackageReader(packName);

//try to open package in sdpec password checking window

Application.Run(new PasswordForm(package));

//if package was opend we start server and browser, otherwise - app would be closed

if (package.IsOpened)

{

Server.StationGuideServer server = new Server.StationGuideServer(package);

server.Start();

Application.Run(new BrowserForm());

server.Stop();

}

}

}

}

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;

namespace StationGuide.Browser.GraphicsResources

{

/// <summary>

/// Brushes, using in Browser application

/// </summary>

public static class AppBrushes

{

/// <summary>

/// Gets brush for border

/// </summary>

public static Brush Border { get { return Brushes.Gray; } }

/// <summary>

/// Gets brush for active tab

/// </summary>

public static Brush ActiveTab { get { return new System.Drawing.Drawing2D.LinearGradientBrush(new Point(0, 30), new Point(0, 0), Color.White, SystemColors.ControlLight); } }

/// <summary>

/// Gets brush for unactive tab

/// </summary>

public static Brush UnactiveTab { get { return new System.Drawing.Drawing2D.LinearGradientBrush(new Point(0, 30), new Point(0, 0), SystemColors.Control, Color.Silver); } }

/// <summary>

/// Gets brush for panels

/// </summary>

public static Brush Panel { get { return Brushes.White; } }

/// <summary>

/// Gets brush for text

/// </summary>

public static Brush Text { get { return Brushes.Black; } }

}

}

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;

namespace StationGuide.Browser.GraphicsResources

{

/// <summary>

/// Pens' collection, using in Browser application

/// </summary>

public static class AppPens

{

/// <summary>

/// Gets pen for border

/// </summary>

public static Pen Border { get { return new Pen(AppBrushes.Border); } }

/// <summary>

/// Gets pen for erase border by drawing another line

/// </summary>

public static Pen NoBorder { get { return new Pen(AppBrushes.Panel); } }

}

}

using System;

using System.Collections.Generic;

using System.Text;

using StationGuide.SecurePackaging;

using System.Windows.Forms;

namespace StationGuide.Browser.Server

{

/// <summary>

/// Handler of http-request for secured package with StationGuide library

/// </summary>

public class GuideRequestHandler : HybridDSP.Net.HTTP.IHTTPRequestHandler

{

/// <summary>

/// main constructor

/// </summary>

/// <param name="package"></param>

public GuideRequestHandler(SecurePackaging.ISecuredPackageReader package)

{

_package = package;

}

/// <summary>

/// Handles request

/// </summary>

/// <param name="request">request-object</param>

/// <param name="response">responce-object</param>

public void HandleRequest(HybridDSP.Net.HTTP.HTTPServerRequest request, HybridDSP.Net.HTTP.HTTPServerResponse response)

{

System.IO.FileInfo fi = new System.IO.FileInfo(System.Web.HttpUtility.UrlDecode(request.URI, Encoding.UTF8));

Byte[] buffer = null;

try

{

try

{

buffer = _package.Read(fi.Name);

}

catch

{

response.StatusAndReason = HybridDSP.Net.HTTP.HTTPServerResponse.HTTPStatus.HTTP_NOT_FOUND;

response.Send();

}

String type = String.Empty;

Encoding enc = null;

switch (fi.Extension.ToLower())

{

case ".html":

type = "text/html";

enc = Encoding.UTF8;

//Form1 f = new Form1();

//f.Text = Encoding.Default.GetString(buffer);

//f.ShowDialog();

break;

case ".htm":

type = "text/html";

enc = Encoding.UTF8;

break;

case ".css":

type = "text/css";

enc = Encoding.UTF8;

break;

case ".js":

type = "text/javascript";

enc = Encoding.UTF8;

break;

case ".png":

type = "image/png";

break;

case ".jpg":

type = "image/jpeg";

break;

case ".gif":

type = "image/gif";

break;

}

response.SendBuffer(buffer, type);

}

catch

{

response.StatusAndReason = HybridDSP.Net.HTTP.HTTPServerResponse.HTTPStatus.HTTP_NOT_FOUND;

response.Send();

}

}

SecurePackaging.ISecuredPackageReader _package;

}

}

using System;

using System.Collections.Generic;

using System.Text;

namespace StationGuide.Browser.Server

{

/// <summary>

/// Factory of requests' handlers for StationGuide's server

/// </summary>

public class HttpRequestHandlerFactory : HybridDSP.Net.HTTP.IHTTPRequestHandlerFactory

{

/// <summary>

/// Main caonstructor

/// </summary>

/// <param name="package">secured package</param>

public HttpRequestHandlerFactory(SecurePackaging.ISecuredPackageReader package)

{

_package = package;

}

/// <summary>

/// Creates handler

/// </summary>

/// <param name="request">object of http-request</param>

/// <returns>handler for current request</returns>

public HybridDSP.Net.HTTP.IHTTPRequestHandler CreateRequestHandler(HybridDSP.Net.HTTP.HTTPServerRequest request)

{

return new GuideRequestHandler(_package);

}

/// <summary>

/// secured package of StationGuide's library

/// </summary>

SecurePackaging.ISecuredPackageReader _package;

}

}

using System;

using System.Collections.Generic;

using System.Text;

using HttpServer;

using System.Net.Sockets;

namespace StationGuide.Browser.Server

{

/// <summary>

/// Web Server, resources of which are in the secured package

/// </summary>

public class StationGuideServer

{

#region constants

/// <summary>

/// Number of first server's port on LocalHost, maybe another port if this is busy

/// </summary>

protected const Int32 StartPortNumber = 50000;

#endregion

#region public static members

/// <summary>

/// Gets or privately sets Home page's name

/// </summary>

public static String HomePage { get; private set; }

public static Int32 PortNumber { get; private set; }

#endregion

#region public constructors

/// <summary>

/// Main constructor

/// </summary>

/// <param name="package">package with all server's resources</param>

public StationGuideServer(StationGuide.SecurePackaging.ISecuredPackageReader package)

{

PortNumber = StartPortNumber;

_listener = HttpListener.Create(new System.Net.IPAddress(new Byte[] { 127, 0, 0, 1 }), PortNumber);

_listener.RequestReceived += OnRequest;

_package = package;

HomePage = _package.HomePage;

}

#endregion

#region public methods

/// <summary>

/// Starts the server

/// </summary>

public void Start()

{

PortNumber = _listener.Start(1);

}

/// <summary>

/// Stops the server (not is nesessary at the end of app's work)

/// </summary>

public void Stop()

{

_listener.Stop();

}

#endregion

#region protected methods

/// <summary>

/// Handler of http-request

/// </summary>

protected void OnRequest(object sender, HttpServer.RequestEventArgs e)

{

e.Response.Connection.Type = HttpServer.Headers.ConnectionType.Close;

System.IO.FileInfo fi = new System.IO.FileInfo(e.Request.Uri.LocalPath);

Byte[] buffer = null;

try

{

buffer = _package.Read(fi.Name);

}

catch

{

e.Response.Status = System.Net.HttpStatusCode.NotFound;

}

if (buffer != null)

{

String type = String.Empty;

Encoding enc = null;

type = ContentTypeHelper.GetType(fi.Extension);

if (type.StartsWith("text"))

{

enc = Encoding.UTF8;

}

e.Response.ContentType = new HttpServer.Headers.ContentTypeHeader(type);

if (enc != null)

{

e.Response.Encoding = enc;

}

if (type.StartsWith("application") && type!="application/x-shockwave-flash")

{

e.Response.Add(new HttpServer.Headers.StringHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", fi.FullName)));

}

e.Response.Body.Write(buffer, 0, buffer.Length);

}

}

#endregion

#region private fields

/// <summary>

/// http-listener

/// </summary>

private HttpListener _listener;

/// <summary>

/// secured package - main source of all server resources

/// </summary>

private StationGuide.SecurePackaging.ISecuredPackageReader _package;

#endregion

}

}

Размещено на Allbest.ru


Подобные документы

  • Процесс создания и развития динамических веб-страниц с использованием систем управления контентом. Последовательность установки и настройки движка и плагинов CMS E-107 на хостинге. Разграничение ролей администратора и пользователей интернет-портала.

    курсовая работа [2,3 M], добавлен 29.06.2014

  • Понятие и основные функции систем управления web-контентом. Система управления web-контентом как программный комплекс, предоставляющий функции создания, редактирования, контроля и организации web-страниц. Обзор и анализ существующих систем WCMS.

    курсовая работа [419,4 K], добавлен 29.12.2014

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

    дипломная работа [3,0 M], добавлен 18.03.2012

  • Понятие портала как Intranet системы. Технологии функционирования Web-портала. Особенности и функции портала учебного заведения. Использование Web-портала в учебном процессе. Структура образовательного Intranet/Internet-портала школы № 24 г.Нефтеюганска.

    дипломная работа [3,0 M], добавлен 02.05.2012

  • Разработка и практическое внедрение контента "Joomla!", порядок установки и настройки системы управления им. Выбор дизайна, цветовой гаммы и анимации сайта, методика его добавления. Создание информационной структуры в системе управления контентом.

    дипломная работа [3,4 M], добавлен 22.06.2009

  • Описания системы управления контентом сайта, предназначенной для создания, внедрения и управления коммерческими или некоммерческими веб-сайтами и порталами. Возможности системы DotNetNuke. Анализ функций управления контентом. Установка сайта на сервер.

    курсовая работа [2,9 M], добавлен 11.01.2015

  • Организация совместного процесса создания, редактирования и управления контентом. Достоинства разработанной CMS. Добавление, редактирование и удаление страниц, файлов, новостей. Программный продукт для создания и легкого управления контентом страницы.

    дипломная работа [2,1 M], добавлен 15.10.2013

  • Компьютерные обучающие системы. Основные принципы новых информационных технологий обучения. Развитие глобальной сети Интернет, понятие web-сайта. Процессор гипертекста, СУБД MySQL. Система управления контентом "Joomla". Установка локального сервера.

    дипломная работа [4,4 M], добавлен 19.04.2011

  • Принципы разработки в системе программного обеспечения САПР. Выбор среды для формирования моделей и функций. Процесс создания моделей деталей. Разработка API-приложения для среды разработки. Тестирование разработанного функционала портала-хранилища.

    курсовая работа [704,0 K], добавлен 18.01.2017

  • Типы документации на программное обеспечение. Особенности создания документации в EA. Изучение метода генерации документации в формате RTF. Шаблоны как инструмент для настройки пользовательских требований и стилизации документации программного продукта.

    реферат [239,9 K], добавлен 31.05.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.