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

Анализ существующих систем автоматизации документооборота. Выбор шаблона проектирования. Microsoft SQL Server как комплексная высокопроизводительная платформа баз данных. Язык программирования C#. Разработка интерфейса и иллюстрация работы системы.

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

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

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

, (6.5)

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

- годовой плановый фонд времени работы вычислительного комплекса, ч.;

- коэффициент загрузки (не более 0,9 - 0,95).

Годовой плановый фонд времени работы вычислительного комплекса определяется по формуле (6.6):

,, (6.6)

где - номинальный фонд времени работы вычислительного комплекса, ч.;

- годовые затраты времени на профилактические работы (принимаются 15% от ).

= 12•21•8=2016 (ч.);

= 2016 • 0,15 = 302,4 (ч.);

= 2016 - 302,4 = 1713,6 (ч.).

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

, (6.7)

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

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

- затраты на текущий и профилактический ремонт технических и программных средств принимаются 2,5 - 5 % от стоимости комплекса, (руб.);

- затраты на расходные материалы, составляют 1 % от стоимости ЭВМ, (руб.);

- стоимость силовой электроэнергии, потребляемой комплексом, (руб.);

- прочие затраты, (руб.). Учитываются в случае аренды машинного времени.

Обслуживающий персонал существует в штатном расписании учреждения.

= (8000/168)•302,4•1,15= 16560 (руб.);

Сдоп.з/п = 16560 · 0,14 = 2318,4 (руб.);

Сотч = (16560 + 2318,4) • 0,302 = 5701,3 (руб.).

Сумма годовых амортизационных отчислений комплекса технических средств и стандартного пакета программного обеспечения по данным бухгалтерии ОмГТУ составляет 25 % от стоимости оборудования, руб. и рассчитывается по формуле (6.8):

CAM = 0,25 · Cоб, (6.8)

где CAM - сумма на амортизационные отчисления комплекса технических средств;

Cоб - стоимость оборудования.

Рассчитаем стоимость компьютера на одно рабочее место программиста:

- системный блок - 12590 (руб.);

- монитор ЖК 19'' - 4450 (руб.);

- периферийные устройства - 820 (руб.).

Итого стоимость ЭВМ без программного обеспечения составляет 17860 (руб.).

Отсюда величина амортизационных отчислений в год:

Сам = 17860 · 0,25 = 4465 (руб.).

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

Срем = 0,03 · Соб

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

Затраты на ремонт и содержание оборудования в год:

Срем = 0,03 · 17860 = 535,8 (руб.).

Стоимость силовой электроэнергии, потребляемой комплексом в год, рассчитывается по формуле 6.9:

CЭЛ = W · S · Фном,, (6.9)

где Фном - номинальный фонд времени работы вычислительного комплекса;

W - мощность, (кВт);

S - стоимость 1 кВтч, (руб.).

Согласно техническому паспорту W равна 0,3 кВт. Стоимость 1 кВтч для бюджетных организаций равна 2,65 руб.

CЭЛ = 0,3 · 2,65 · 8 • 12 • 21= 1602 (руб.).

Затраты на расходные материалы, составляют 1 % от стоимости ЭВМ в год:

См = 0,01 · 17860 = 178,6 (руб.).

Итого, все годовые расходы составляют:

= 16560 + 2318,4 + 4988,6 + 4465 + 535,8 + 1602 + 178,6 = 30648,4 (руб.).

Тогда стоимость одного машино-часа равна:

= 30648,4 / (1713,6 • 0,8) = 22,4 (руб./ч.).

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

= 22,4 • 696 = 15590,4 (руб.).

6.4 Контрагентные и накладные расходы

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

Накладные расходы Снакл. вычисляются в долях к основной заработной плате разработчиков и составляют 100 % к основной заработной плате.

Снакл. = · 1,00 = 57212 · 1 = 57212 (руб.).

6.5 Общая смета затрат

Результаты расчета затрат на разработку приведены в таблице 6.3.

Таблица 6.3 - Результаты расчета затрат на разработку

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

Величина затрат, (руб.)

Основная заработная плата

57212

Дополнительная заработная плата

8009

Отчисления во внебюджетные соц. фонды

17087

Расчет расходов по использованию ЭВМ и ПО

30648,4

Накладные расходы

57212

Итого

170168,4

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

Затраты на разработку программного продукта составляют 170168,4 рубль. Диаграмма структуры затрат показана в соответствии с рисунком 6.1 Видно, что основную долю из них составляют основная заработная плата разработчиков и накладные расходы.

Рисунок 6.1 - Диаграмма структуры затрат на разработку программного продукта

В настоящем разделе была рассчитана трудоемкость разработки программного комплекса, определен состав исполнителей и произведен расчет стоимости разработки системы. Затраты на разработку данного проекта составили 170168,4 рублей. В соответствии с рисунком 6.1, на котором представлена диаграмма соотношения затрат на разработку ПО, видно, что основную часть затрат составили заработная плата разработчиков (33%) и накладные расходы предприятия (33%).

7. Безопасность жизнедеятельности

7.1 Охрана труда

7.1.1 Анализ опасных и вредных производственных факторов на рабочем месте инженера-программиста

Рассмотрим процесс написания приложения для автоматизации учебных программ одним разработчиком в помещении: длиной 7 метра, шириной 4 метра и высотой 3,5 метра.

В последние годы большое внимание уделяется улучшению условий труда пользователей электронно-вычислительных машин (ПЭВМ), несмотря на то, что качество и безопасность самых ПЭВМ и ВДТ постоянно улучшаются. В развитых странах, в том числе в США, Германии, Швеции, вопрос об опасности работы за дисплеями поднялся до уровня национальной проблемы, а в Германии работа за дисплеями входит в список 40 наиболее вредных и опасных профессий.

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

Главным фактором, влияющим на производительность труда людей, работающих с ПЭВМ и ВДТ, являются комфортные и безопасные условия труда.

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

* особенностями организации рабочего места;

* условиями производственной среды (освещением, микроклиматом, шумом, электромагнитными и электростатическими полями, визуальными эргономическими параметрами дисплея и т. д.);

* характеристиками информационного взаимодействия человека и персональных электронно-вычислительных машин.

При выполнении работ на персональном компьютере (ПК) согласно ГОСТу 12.0.003-74 “ССБТ. Опасные и вредные производственные факторы. Классификация” могут иметь место следующие факторы:

* повышенная температура поверхностей ПК;

* повышенная или пониженная температура воздуха рабочей зоны;

* выделение в воздух рабочей зоны ряда химических веществ;

* повышенная или пониженная влажность воздуха;

* повышенный или пониженный уровень отрицательных и положительных аэроионов;

* повышенное значение напряжения в электрической цепи, замыкание;

* повышенный уровень статического электричества;

* повышенный уровень электромагнитных излучений;

* повышенная напряженность электрического поля;

* отсутствие или недостаток естественного света;

* недостаточная искусственная освещенность рабочей зоны;

* повышенная яркость света;

* повышенная контрастность;

* прямая и отраженная блёскость;

* зрительное напряжение;

* монотонность трудового процесса;

* нервно-эмоциональные перегрузки.

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

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

Цель:

Необходимо произвести анализ опасных и вредных производственных факторов при работе с ПК.

Рассмотрим помещение, в котором находится рабочее место пользователя ПК. Оно имеет следующие характеристики:

- длина помещения 7 м;

- ширина помещения 4 м;

- высота 3.5 м;

- число окон 2;

- окраска интерьера: белый потолок, белые стены, пол бетонный, покрытый линолеумом серого цвета.

7.2 Организация рабочего места

Согласно СанПиН 2.2.2/2.4.1340-03, в таблицах 7.1 и 7.2 представлены нормы, необходимые для пользователей ПК.

Таблица 7.1 - Высота одноместного стола для занятий с ПК[6]

Рост работника в обуви, см

Высота над полом, мм

поверхность стола

пространство для ног, не менее

161 - 175

700

640

выше 175

760

700

Примечание. Ширина и глубина пространства для ног определяются конструкцией стола.

На рабочем месте п ПК параметры рабочего стола соответствуют нормам, стул регулируется по высоте в соответствии ростом работника, согласно СанПиН 2.2.2/2.4.1340-03

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

Категория работы с ПК

Уровень нагрузки за рабочую смену при видах работ с ПК

Суммарное время регламентированных перерывов, мин.

группа А, количество знаков

группа Б, количество знаков

группа В,ч

при 8-часовой смене

при 12-часовой смене

I

до 20 000

до 15 000

до 2

50

80

7.3 Микроклимат

Рабочее место пользователя ПК относится к категории работ 1. Нормы производственного микроклимата, установленные для данной категории работ, ГОСТ 12.1.005-88 приведены в таблице 7.3.

Таблица 7.3 - Параметры микроклимата для помещений, где установлены персональные компьютеры

Значения параметров

Период года

Температура, о С

Относительная влажность, %

Скорость движения воздуха, м/с

Оптимальные

Холодный и переходный

21 - 23

40 - 60

не более 0,1

Теплый

22 - 24

40 - 60

не более 0,2

Нормы подачи свежего воздуха в помещения, где расположены компьютеры, согласно ГОСТ 12.1.005-88 приведены в таблице 7.4.

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

Характеристика помещения

Объемный расход подаваемого в помещение свежего воздуха, м3 /на одного человека в час

Объем до 20 м3 на человека

20…40 м3 на человека

Более 40 м3 на человека

Не менее 30

Не менее 20

Естественная вентиляция

На рабочем месте пользователя ПК температура воздуха в течение всего года держится в допустимых пределах. Относительная влажность воздуха в теплый период находится в пределах 45-50%, в холодный - 55-60%. Объем помещения составляет 32 м3/человека. Действует естественная вентиляция, обеспечивающая более 30 м3 воздуха на человека в час.

7.4 Производственный шум

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

Допустимые уровни звукового давления в октавных полосах со среднегеометрическими частотами для программистов ЭВМ в соответствии с ГОСТ 12.1.003-83 приведены в таблице 7.5.

Таблица 7.5 - Уровень шума

Рабочие места

Уровни звукового давления, дБ, в октавных полосах со среднегеометрическими частотами, Гц

Уровень звука и эквивалентный уровень звука, дБ

31,5

3

125

50

00

1000

2000

4000

8000

Оператор ЭВМ

86

1

1

4

9

45

42

40

38

50

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

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

где Li - уровень звукового давления i-го источника шума;

n - количество источников шума.

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

Таблица 7.6. Уровни звукового давления различных источников. [5]

Источник шума

Уровень шума, дБ

Жесткий диск

30

Вентиляторы

48

Монитор

14

Клавиатура

10

Маршрутизатор

40

Коммуникатор

36

=10·lg(103+104,8 +101,4+101+104+103,6)=48,9 дБ

Из этого следует, что на рабочем месте пользователя значение не превышает допустимый уровень шума для рабочего места пользователя, который равен 50 дБ (ГОСТ 12.1.003-83).

7.5 Освещение

В таблице 7.7 приведены нормы освещенности в соответствии с СНиП 23.05-95.

Таблица 7.7 - Нормы освещенности

Характеристика зрительной работы

Минимальный размер объекта различения, мм

Совмещенное боковое освещение, КЕО, %

Естественное боковое освещение, КЕО, %

Искусственное освещение, лк

Комбин

ированное

Общее

Выс. точност

0.3 -0.5

1.2

2

1000

300

Необходимо рассчитать необходимый световой поток, согласно СНиП 23.05-95.

В помещении, где находится рабочее место пользователя, используется смешанное освещение. В качестве естественного - боковое освещение через окна. Нормами для данных работ установлена необходимая освещенность рабочего места Ен=300лк (средняя точность работы по различению деталей размером от 1 до 10 мм).

Общий световой поток определяется по формуле

,

где Ен - нормированная освещенность (Ен = 300лк);

Sn - площадь помещения;

- коэффициент, учитывающий старение ламп и загрязнение светильников (= 1,5);

Z- коэффициент, учитывающий неравномерность освещения помещения (Z = 1,1);

?- коэффициент использования светового потока; определяется в зависимости от коэффициентов отражения от стен, потолка, рабочих поверхностей, типов светильников и геометрии помещения.(?=0,26)

Площадь помещения

S = А * В = 7 * 4 = 28 м2

Определяем общий световой поток:

Для организации общего искусственного освещения выбраны лампы типа ЛБ65[1].

Световой поток одной лампы ЛБ65 составляет не менее Fл = 4600 лм.

Число N ламп, необходимых для организации общего освещения определяется по формуле:

В качестве светильников выбираем ЛСП 22-2х65-002, габариты которого равны 1625х148х220. Отсюда следует, что для обеспечения светового потока Fобщ=53307 лм надо использовать 6 светильников по 2 лампы ЛБ65 в каждом.

Электрическая мощность одной лампы ЛБ65 Wл=65 Вт.

Мощность всей осветительной системы:

Wобщ = Wл * N = 65 * 12 = 780 Вт.

7.6 Электромагнитные излучения

Для определения требований к монитору рассмотрим таблицу 7.8.

Дополнительные требования к монитору (в соответствии с СанПиН 2.2.2/2.4.1340-03): окраска корпуса в спокойном, мягком тоне с диффузным рассеянием света.

На рабочем месте пользователя ПК соблюдаются требования СанПиН 2.2.2/2.4.1340-03

Таблица 7.8 - Требования к монитору [6]

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

СанПиН 2.2.2./2.4.1340-03

Напряженность ЭПМ в 0.5 м вокруг дисплея по электрической составляющей, не более (В/м):

в диапазоне частот 5Гц…2кГц

в диапазоне частот 2…400кГц

25

Плотность магнитного потока в 0.5 м вокруг дисплея, не более, (нТл):

в диапазоне частот 5Гц…2кГц

в диапазоне частот 2 …400кГц

250

25

Поверхностный электростатический потенциал, не более, (В):

500

7.7 Безопасность в чрезвычайных ситуациях

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

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

Предел огнестойкости строительных конструкций определяется временем (ч) от начала пожара до возникновения одного из признаков: а) образования в конструкции сквозных трещин; б) повышения температуры на необогреваемой поверхности конструкции в среднем более чем на 140 °С или в какой-либо точке этой поверхности более чем на 180 °С по сравнению с температурой конструкции до испытания, или более 220 °С независимо от температуры конструкции до испытания; г) потери конструкцией несущей способности.

Предел огнестойкости отдельных строительных конструкций зависит от их размеров (толщины или сечения) и физических свойств материалов. Например, каменные стены здания толщиной 120 мм имеют предел огнестойкости 2,5 ч, а при толщине 250 мм предел огнестойкости повышается до 5,5 ч.

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

Таблица 7.9 - Категории помещений СНиП II-А.5-70

Степень огнестойкости

Основные строительные конструкции

несущие стены, стены лестничных клеток, колонны

наружные стены из навесных панелей и наружные фахверковые стены

плиты, настилы и другие несущие конструкции междуэтажных и чердачных перекрытий

плиты, настилы и другие несущие конструкции покрытий

внутренние несущие стены (перегородки)

противопожарные стены

I

Несгораемые (2,5)

Несгораемые (0,5)

Несгораемые (1,0)

Несгораемые (0,5)

Несгораемые (0,5)

Несгораемые (2,5)

II

Несгораемые (2,0)

Несгораемые (0,25); трудносгораемые (0,5)

Несгораемые (0,75)

Несгораемые (0,25)

Трудносгораемые (0,25)

Несгораемые (2,5)

III

Несгораемые (2,0)

Несгораемые (0,25); трудносгораемые (0,15)

Трудносгораемые (0,75)

Сгораемые

Трудносгораемые (0,25)

Несгораемые (2,5)

IV

Трудносгораемые (0,5)

Трудносгораемые (0,25)

Трудносгораемые (0,25)

»

Трудносгораемые (0,25)

Несгораемые (2,5)

V

Сгораемые

Сгораемые

Сгораемые

»

Сгораемые

Несгораемые (2,5)

В соответствии с нормами СНиП II-А.5-70 помещение пользователей ПК относится к категории I. Установлен порошковый огнетушитель, который заряжен специальным порошковым составам и использующийся при возгораниях твердых, жидких и газообразных веществ, а также электроустановок с напряжением не превышающим 1000 В.

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

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

- общий световой поток Fобщ = 53307 лм. Световой поток находится в пределах нормы;

- уровень шума на рабочем месте равен 48,9 дБ. Показатель лежит в допустимых пределах;

- уровень электромагнитного излучения в норме;

- параметры рабочего стола соответствуют норме;

- пожарная безопасность на рабочем месте обеспечена.

Состояние рабочего места пользователя ПК соответствует всем требованиям безопасности жизнедеятельности. Это было достигнуто благодаря вышеописанным мероприятиям.

Заключение

В результате дипломного проектирования было разработано программное обеспечение для автоматизации формирования учебных программ на кафедре ИВТ факультета ИТиКС ОмГТУ.

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

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

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

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

- реализован простой удобный интерфейс;

- предусмотрена возможность хранения в БД шаблонов и черновиков учебных программ;

Для разработки программного комплекса использовалась платформа.NET (язык C#), поддерживающий шаблон проектирования MVC. В качестве СУБД использовался продукт Microsoft SQL Server 2008 R2. Написание кода велось на программном продукте Microsoft Visual Studio 2013.

Произведен экономический расчет затрат на разработку программного комплекса. Затраты на разработку проекта составили 170168,4 рублей.

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

Разработанный в рамках дипломного проекта программный комплекс представляет практический интерес для кафедры «Информатика и вычислительная техника» факультета информационных технологий и компьютерных систем ОмГТУ. Начало тестовой эксплуатации на предприятии назначено на 1 июля 2014 года.

Библиографический список

1. Википедия. Model-View-Controller [Электронный ресурс]. - Режим доступа: http://ru.wikipedia.org/wiki/Model-View-Controller. - Загл. с экрана.

2. Википедия. Visual Studio [Электронный ресурс]. - Режим доступа: http://ru.wikipedia.org/wiki/Visual_Studio. - Загл. с экрана.

3. ГОСТ 12.1.038-82 Система стандартов безопасности труда. Электробезопасность. Предельно допустимые значения напряжений прикосновения и токов. Дата введения 1983-07-01 М.: Изд-во стандартов, 1982. - 8 с.

4. ГОСТ 19.701 - 90 ЕСПД. Схемы алгоритмов, программ, данных и систем. - Взамен ГОСТ 19.002.80; введ. 1992.01.01. - М.: Изд-во стандартов, 1990. - 24 с.

5. ГОСТ 7.1 - 2003 Библиографическая запись. Библиографическое описание. Общие требования и правила составления. - Взамен ГОСТ 7.1-84; введ. 2004.07.01. - М.: ИПК Изд-во стандартов, 2004

6. Михайлов, А.А. Расчет затрат на разработку программного продукта: метод. указания по выполнению организационно-экономической части дипломного проекта / А.А. Михайлов, П.В. Рузанов. - Омск: Изд-во ОмГТУ, 2009. - 22 с.

7. Потапов, В.И. Дипломное проектирование: метод. указания для студентов, обучающихся по специальности 230101 и направления подгот. бакалавров 230100 / В.И. Потапов, Б.И. Елькин, О.П. Шафеева. - Омск: Изд-во ОмГТУ, 2007. - 64 с.

8. Программирование. Сравнение MySQL с другими СУБД [Электронный ресурс]. - Режим доступа: http://program.rin.ru/razdel/html/490.html. - Загл. с экрана.

9. СанПиН 2.2.1/2.1.1.1278-03. Гигиенические требования к естественному, искусственному и совмещенному освещению жилых и общественных зданий: Санитарные правила и нормы. М.: Информ.-изд. центр Минздрава России, 2003. - 29 с.

10. СанПиН 2.2.4.1294-03. Гигиенические требования к аэроионному составу воздуха производственных и общественных помещений. Санитарные правила и нормы. М.: Информ.-изд. центр Минздрава России, 2003. - 5 с.

11. СанПиН 2.2.4.548-96. Гигиенические требования к микроклимату производственных помещений: Санитарные правила и нормы. М.: Информ.-изд. центр Минздрава России, 1997. - 11 с.

12. Tadviser. СЭД (Программные технологии) [Электронный ресурс]. - Режим доступа: http://www.tadviser.ru/index.php/Статья:СЭД_(Программные технологии)

Приложение А

Листинг парсера по дисциплине физика

using System;

using System.Collections.Generic;

using System.Linq;

using Novacode;

namespace WorkingPrograms

{

public class PhysicParser

{

private List<string> buffer;

public PhysicParser(DocX loadedDoc)

{

buffer = new List<string>();

foreach (var p in loadedDoc.Paragraphs)

{

buffer.Add(p.Text);

}

}

public string GetSubjectName()

{

return buffer[buffer.IndexOf(buffer.FirstOrDefault(b => b.Contains("по дисциплине"))) + 1].Split(new[] { "»" }, StringSplitOptions.RemoveEmptyEntries)[0].Substring(2);

}

public string GetSubjectNameCipher()

{

return buffer[buffer.IndexOf(buffer.FirstOrDefault(b => b.Contains("по дисциплине"))) + 1].Split(new[] { "»" }, StringSplitOptions.RemoveEmptyEntries)[1].Trim();

}

public string GetDegree()

{

return buffer[buffer.IndexOf(buffer.FirstOrDefault(b => b.Contains("для направления подготовки")))].Split(

new[] { "для направления подготовки" }, StringSplitOptions.RemoveEmptyEntries)[0].Trim();

}

public string GetSpecialtyCipher()

{

return buffer[buffer.IndexOf(buffer.FirstOrDefault(b => b.Contains("для направления подготовки"))) + 1].Split(new[] { "«" }, StringSplitOptions.RemoveEmptyEntries)[0].Trim();

}

public string GetSpecialityName()

{

return buffer[buffer.IndexOf(buffer.FirstOrDefault(b => b.Contains("для направления подготовки"))) + 1].Split(new[] { "«", "»" }, StringSplitOptions.RemoveEmptyEntries)[1].Trim();

}

public string GetTrainingProfile()

{

return buffer[buffer.IndexOf(buffer.FirstOrDefault(b => b.Contains("профили подготовки")))].Split(new[] { "профили подготовки" }, StringSplitOptions.RemoveEmptyEntries)[0].Trim();

}

public string GetDegree2(string split)

{

const string splitter = "Разработана в соответствии с ФГОС ВПО, ООП по направлению подготовки";

return

buffer[

buffer.IndexOf(

buffer.FirstOrDefault(

b => b.Contains(splitter)))].Split(new []{splitter, split}, StringSplitOptions.RemoveEmptyEntries)[1];

}

Приложение Б

Листинг главного окна приложения

using System;

using System.Collections.Generic;

using System.IO;

using System.IO.Pipes;

using System.Linq;

using System.Windows.Forms;

using Novacode;

using WorkingPrograms.Model;

namespace WorkingPrograms

{

public partial class Form1 : Form

{

private WorkingProgrammsEntities db;

private int subjectID;

private string fileName;

public Form1()

{

InitializeComponent();

db = new WorkingProgrammsEntities();

comboBox1.DataSource = db.Subjects.ToList();

comboBox1.DisplayMember = "Name";

openFileDialog1.Filter = "*.docx|*.docx";

openFileDialog2.Filter = "*.docx|*.docx";

saveFileDialog1.Filter = "*.docx|*.docx";

openFileDialog1.FileName = string.Empty;

openFileDialog2.FileName = string.Empty;

progressBar1.Maximum = 100;

comboBox2.DataSource = db.WorkingProgrammsFiles.ToList();

subjectsComboBox.DataSource = db.Subjects.ToList();

comboBox2.DisplayMember = "FileName";

subjectsComboBox.DisplayMember = "Name";

subjectsForAdminComboBox.DataSource = db.Subjects.ToList();

subjectsForAdminComboBox.DisplayMember = "Name";

button1.Visible = checkBox1.Checked;

comboBox2.Visible = !checkBox1.Checked;

}

private void button1_Click(object sender, EventArgs e)

{

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

fileName = openFileDialog1.FileName;

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

subjectID = ((Subject)comboBox1.SelectedItem).SubjectID;

}

private void button2_Click(object sender, EventArgs e)

{

PhysicParser textGetter;

db.FormatTexts.RemoveRange(db.FormatTexts);

db.SaveChanges();

textBox1.Clear();

progressBar1.Value = 0;

if (checkBox1.Checked)

{

WorkingProgrammsFile file = new WorkingProgrammsFile();

file.Stream = File.ReadAllBytes(fileName);

file.FileName = "asdf";

file.SubjectID = subjectID;

db.WorkingProgrammsFiles.Add(file);

db.SaveChanges();

textGetter = new PhysicParser(DocX.Load(fileName));

}

else

{

WorkingProgrammsFile file = db.WorkingProgrammsFiles.FirstOrDefault(f => f.WorkingProgramFileID == ((WorkingProgrammsFile)comboBox2.SelectedItem).WorkingProgramFileID);

Stream stream = new MemoryStream(file.Stream);

textGetter = new PhysicParser(DocX.Load(stream));

}

string subjectName = textGetter.GetSubjectName();

FormatText formatText = new FormatText

{

SubjectID = subjectID,

Name = "SubjectName",

Value = subjectName

};

db.FormatTexts.Add(formatText);

textBox1.Text += string.Format("SubjectName = {0}{1}", subjectName, Environment.NewLine);

progressBar1.Value++;

string subjectNameCipher = textGetter.GetSubjectNameCipher();

formatText = new FormatText

{

SubjectID = subjectID,

Name = "SubjectNameCipher",

Value = subjectNameCipher

};

db.FormatTexts.Add(formatText);

textBox1.Text += string.Format("SubjectNameCipher = {0}{1}", subjectNameCipher, Environment.NewLine);

progressBar1.Value++;

string degree = textGetter.GetDegree();

formatText = new FormatText { SubjectID = subjectID, Name = "Degree", Value = degree };

db.FormatTexts.Add(formatText);

textBox1.Text += string.Format("Degree = {0}{1}", degree, Environment.NewLine);

progressBar1.Value++;

string specialtyCipher = textGetter.GetSpecialtyCipher();

formatText = new FormatText { SubjectID = subjectID, Name = "SpecialtyCipher", Value = specialtyCipher };

db.FormatTexts.Add(formatText);

textBox1.Text += string.Format("SpecialtyCipher = {0}{1}", specialtyCipher, Environment.NewLine);

progressBar1.Value++;

string specialtyName = textGetter.GetSpecialityName();

formatText = new FormatText { SubjectID = subjectID, Name = "SpecialtyName", Value = specialtyName };

db.FormatTexts.Add(formatText);

textBox1.Text += string.Format("SpecialtyName = {0}{1}", specialtyName, Environment.NewLine);

progressBar1.Value++;

string trainingProfile = textGetter.GetTrainingProfile();

formatText = new FormatText { SubjectID = subjectID, Name = "TrainingProfile", Value = trainingProfile };

db.FormatTexts.Add(formatText);

textBox1.Text += string.Format("TrainingProfile = {0}{1}", trainingProfile, Environment.NewLine);

progressBar1.Value++;

string degree2 = textGetter.GetDegree2(specialtyCipher);

formatText = new FormatText { SubjectID = subjectID, Name = "Degree2", Value = degree2 };

db.FormatTexts.Add(formatText);

textBox1.Text += string.Format("Degree2 = {0}{1}", degree2, Environment.NewLine);

progressBar1.Value++;

db.SaveChanges();

}

private void checkBox1_CheckedChanged(object sender, EventArgs e)

{

button1.Visible = checkBox1.Checked;

comboBox2.Visible = !checkBox1.Checked;

}

private void generateButton_Click(object sender, EventArgs e)

{

Subject selectedSubject = ((Subject)subjectsComboBox.SelectedItem);

TemplateFile templateFile = db.TemplateFiles.FirstOrDefault(tf => tf.SubjectID == selectedSubject.SubjectID);

if (templateFile == null)

{

MessageBox.Show("Для данного предмета отсутствует шаблон!");

return;

}

saveFileDialog1.ShowDialog();

if (!string.IsNullOrEmpty(saveFileDialog1.FileName))

{

Stream stream = new MemoryStream(templateFile.Stream);

DocX fileToSave = DocX.Load(stream);

List<FormatText> formatTexts = db.FormatTexts.Where(ft => ft.SubjectID == selectedSubject.SubjectID).ToList();

fileToSave.ReplaceText("SubjectNameCipher", formatTexts.FirstOrDefault(ft => ft.Name == "SubjectNameCipher").Value);

fileToSave.ReplaceText("SubjectName", formatTexts.FirstOrDefault(ft => ft.Name == "SubjectName").Value);

fileToSave.ReplaceText("Degree2", formatTexts.FirstOrDefault(ft => ft.Name == "Degree2").Value);

fileToSave.ReplaceText("Degree", formatTexts.FirstOrDefault(ft => ft.Name == "Degree").Value);

fileToSave.ReplaceText("SpecialtyCipher", formatTexts.FirstOrDefault(ft => ft.Name == "SpecialtyCipher").Value);

fileToSave.ReplaceText("SpecialtyName", formatTexts.FirstOrDefault(ft => ft.Name == "SpecialtyName").Value);

fileToSave.ReplaceText("TrainingProfile", formatTexts.FirstOrDefault(ft => ft.Name == "TrainingProfile").Value);

fileToSave.SaveAs(saveFileDialog1.FileName);

//File.WriteAllBytes(saveFileDialog1.FileName, templateFile.Stream);

MessageBox.Show("Программа успешно сохранена!");

}

private void uploadTemplateButton_Click(object sender, EventArgs e)

{

int subjectID = ((Subject)subjectsForAdminComboBox.SelectedItem).SubjectID;

TemplateFile templateFile = db.TemplateFiles.FirstOrDefault(tf => tf.SubjectID == subjectID);

if (templateFile == null)

{

if (openFileDialog2.ShowDialog() == DialogResult.OK)

{

byte[] fileBytes = File.ReadAllBytes(openFileDialog2.FileName);

TemplateFile newTemplateFile = new TemplateFile();

newTemplateFile.Stream = fileBytes;

newTemplateFile.TemplateFileName = openFileDialog2.SafeFileName;

newTemplateFile.SubjectID = subjectID;

db.TemplateFiles.Add(newTemplateFile);

db.SaveChanges();

MessageBox.Show("Шаблон загружен!");

}

else

{

MessageBox.Show("Для данного предмета уже имеется шаблон!");

}

private void deleteTemplateButton_Click(object sender, EventArgs e)

{

int subjectID = ((Subject)subjectsForAdminComboBox.SelectedItem).SubjectID;

TemplateFile templateFile = db.TemplateFiles.FirstOrDefault(tf => tf.SubjectID == subjectID);

if (templateFile != null)

{

db.TemplateFiles.Remove(templateFile);

db.SaveChanges();

MessageBox.Show("Шаблон удалён!");

}

else

{

MessageBox.Show("Для данного предмета отсутствует шаблон!");

}

private void getTemplateButton_Click(object sender, EventArgs e)

{

int subjectID = ((Subject)subjectsForAdminComboBox.SelectedItem).SubjectID;

TemplateFile templateFile = db.TemplateFiles.FirstOrDefault(tf => tf.SubjectID == subjectID);

if (templateFile != null)

{

if (saveFileDialog1.ShowDialog() == DialogResult.OK)

{

File.WriteAllBytes(saveFileDialog1.FileName, templateFile.Stream);

MessageBox.Show("Шаблон сохранён!");

}

else

{

MessageBox.Show("Для данного предмета отсутствует шаблон!");

}

Приложение В

Листинг классов, являющихся реализацией соответствующих таблиц из БД

FomatText.cs

namespace WorkingPrograms.Model

{

using System;

using System.Collections.Generic;

public partial class FormatText

{

public int FormatTextID { get; set; }

public int SubjectID { get; set; }

public string Name { get; set; }

public string Value { get; set; }

public virtual Subject Subject { get; set; }

}

}

Subject.cs

namespace WorkingPrograms.Model

{

using System;

using System.Collections.Generic;

public partial class Subject

{

public Subject()

{

this.FormatTexts = new HashSet<FormatText>();

this.TemplateFiles = new HashSet<TemplateFile>();

this.WorkingProgrammsFiles = new HashSet<WorkingProgrammsFile>();

}

public int SubjectID { get; set; }

public string Name { get; set; }

public virtual ICollection<FormatText> FormatTexts { get; set; }

public virtual ICollection<TemplateFile> TemplateFiles { get; set; }

public virtual ICollection<WorkingProgrammsFile> WorkingProgrammsFiles { get; set; }

}

TemplateFile.cs

namespace WorkingPrograms.Model

{

using System;

using System.Collections.Generic;

public partial class TemplateFile

{

public int TemplateFileID { get; set; }

public string TemplateFileName { get; set; }

public byte[] Stream { get; set; }

public int SubjectID { get; set; }

public virtual Subject Subject { get; set; }

}

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


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

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