Рефераты - Афоризмы - Словари
Русские, белорусские и английские сочинения
Русские и белорусские изложения

Автоматизация учебного процесса с помощью программных средств

Работа из раздела: «Программирование, компьютеры и кибернетика»

/

РЕФЕРАТ

Количество иллюстраций: 48

Количество приложений: 4

Количество страниц: 82

Количество таблиц: 41

Количество использованных источников: 35

Ключевые слова: САЙТ, EJB, JSF, БАЗА ДАННЫХ, УРОВЕНЬ.

В качестве объекта исследования был выбран сайт учебного процесса. Цель работы - автоматизация взаимодействия преподавателя и студента через сайт, ведение централизованного процесса обработки данных. В результате написания работы методами исследования были перечень технологий, таких как EJB3.0, JMS, JPA, HSQL/SQL, JSF(WebUI), Glassfishv2, NetBeans6.0, Reflection, Subversion SVN, JAAS. В результате исследования обнаружилось, что для работы на бизнес уровне работа с EJB3.0 эффективная и быстрая в разработке, поддерживается как сервером приложений Glassfishv2 так и многими другими J2EE серверами. Взаимодействие между бизнес уровнем и уровнем контроллера и представления, написанного на JSF - не имеет проблем. В то время как взаимодействие двух модулей JSF и GWT имеют проблемы. Возможное использование этих двух технологий возможно при их функциональной независимости друг от друга.

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

Применять этот сайт необходимо в высших учебных заведениях.

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

Сайт является значимым в работе высших учебных заведений, как их сотрудникам, так и их студентам.

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

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

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

ГЛОССАРИЙ

1) Open source software - открытые программные средства, т.е. такие лицензионные программы, которые вместе с их исходными текстами, не связанны ограничениями на дальнейшую модификацию и распространение с сохранением информации о первичном авторстве и внесённых изменениях.

2) Application Framework - каркас приложения (открытая инфраструктура приложения). Это software framework, который используется, чтобы обеспечивать выполнение стандартной структуры приложения для определенной операционной системы.

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

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

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

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

7) Представление - отвечает за отображение информации.

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

9) Контейнер - это структура, позволяющая инкапсулировать в себя объекты разных типов, в основном они построены на основе шаблонов.

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

11) Сущность - тип EJB, компонент J2EE серверной части, который представляет сохраняемые данные, управляемые в базе данных.

12) Локальные бины - объекты, не меняющие своего состояния в процессе исполнения, которые имеют область видимости внутри контейнера

13) Удалённые бины - объекты, не меняющие своего состояния в процессе исполнения, которые имеют область видимости внутри и вне контейнера.

14) Java Message Service (JMS) -- стандарт промежуточного ПО для рассылки сообщений, позволяющий приложениям, выполненным на платформе J2EE, создавать, посылать, получать и читать сообщения. Коммуникация между компонентами, использующими JMS, асинхронна (процедура не дожидается ответа на своё сообщение) и независима от исполнения компонентов.

1. ПОСТАНОВКА ЗАДАЧИ

Данная система необходима для автоматизации учебного процесса. А именно, для:

· создания единой базы работников высшего учебного заведения (преподаватели, лекторы, деканы) и студентов;

· добавления, редактирования, удаления пользователей;

· ведения информации о факультетах, кафедрах, специальностей;

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

· установления времени начала и окончания пары, перемены между ними;

· общение между преподавателем и студентом в электронной форме;

· ведение успеваемости и посещаемости студентов;

· получение свежих новостей и событий в университете;

· просмотр преподавательского состава, и дополнительной информации о них;

· возможность просмотра расписания на текущий семестр, внесения изменений и добавление нового, посредством excel-документа;

· составление преподавателями и их ассистентами тестов для студентов;

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

Для реализации вышеперечисленных идей, необходимо проект разбить на логические модули. Это необходимо для того, чтобы избавиться от лишних зависимостей в системе. В данном проекте необходимо выбрать архитектуру на основе MVC [6], так как она решает поставленные задачи и широко применяется в WEB-программировании. Таким образом, мы разбивает проект на три логических модуля. Рассмотрим уровень представления. Эта система должна быть доступна как пользователям, так и администратору. Поэтому есть смысл разбить уровень представления на 2 независимые составляющие. Способ автоматического открытия пользователю системы в административной консоли или пользовательского сайта должен определяться на уровне авторизации. Так как для каждой страницы должен быть свой модуль, а уровень представления у нас состоит из двух независимых модулей, то уровень контроллеров у нас тоже разделён на две части. Уровень данных у проекта один, так как контроллеры используют для своей работы одинаковые данные. Но в свою очередь есть смысл разбить уровень данных на два уровня. Первый из них будет работать непосредственно с базой данных, в нём будут находиться только запросы в базу данных. Второй будет их обрабатывать, производить какие-то вычисления, конвертировать в более подходящие структуры данных для удобства использования на уровне представления.


Рисунок 1.1 - Концепции архитектуры приложения

Нашу архитектуру отражает Рисунок 1.1. Давайте теперь рассмотрим отдельные вещи более подробно:

Общие детали проекта:

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

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

3. Роль пользователя должна выставляться администратором, при его добавлении и/или редактировании.

4. Сокрытие информации присущей конкретной роли должна производиться на уровне презентации.

5. Информация о роли пользователя должна быть присуща в сессии.

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

Административная консоль:

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

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

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

4. Реализовать процесс конвертирования данных из excel документа в запросы базы данных.

Пользовательский сайт

1. Реализовать авторизацию, аутентификацию пользователей.

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

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

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

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

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

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

8. Страница литературы должна быть идентична по структуре странице тестов.

2. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ

Данный проект мог быть реализован с помощью других технологий. Проведём аналогию. Данный проект может быть написан, используя другие альтернативные технологии, рассмотрим их преимущества и недостатки. В качестве альтернативы EJB можно было бы выбрать Spring, если бы наша задача стояла в том, чтобы это приложение могло работать только на одном сервере. Преимущества заключались бы в том, что мы получили бы большую производительность из-за упрощенной архитектуры Spring по отношению к EJB. В данном случае был выбран EJB, чтобы в дальнейшем можно было расширить приложение до кластерного уровня. В качестве альтернативы, использованию JSF, можно было бы выбрать такие технологии как Struts, GW, JSP/Servlets. Struts по сравнению с JSF, имеет преимущества в более удобной настройке компонентов, так как работа верстальщика не пересекается с работой разработчика, чего нет в JSF. GWT имеет встроенные возможности Ajax'a и предоставляет собой такую же архитектуру кодирования как и Swing. JSP/Servlet являются наиболее быстрым в скорости работы и являются базовым функционалом для вышеперечисленных фреймвёрков. В качестве базы данных можно было выбрать PostgreSQL, его возможности являются наряду с Oracle и в то же время является бесплатным для использования. Сайт на данный момент имеет административную консоль. На данном этапе разработки на ней (консоли) можно выполнять работу с данными над пользователями, преподаваемыми предметами, факультетами, кафедрами, специализациями студентов. В дальнейшем необходимо добавить возможность работы с корпусами университета, аудиториями, временем проведения пар, возможность создания расписания. Для данных страниц должен быть использован тот же подход создания, как и для предыдущих. Так как страницы будут предоставлять однотипный интерфейс для конечного пользователя.

Рисунок 2.1 - Интерфейс однотипных страниц в административной консоли

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

На данном этапе разработки есть компонент на странице добавления/редактирования студента, позволяющий загружать файлы. Выполняют задачу загрузки фотографий пользователей. На данный момент реализация не была осуществлена. Но для неё уже есть базовый функционал в приложении. Разработаны две сущности FileDescriptor и FileData. В сущность UserEntity добавлено поле, которое является в отношении один-ко-одному с сущностью FileDescriptor. Для дальнейшей разработки, необходимо имплементировать сервисы загрузки и редактирования фотографий (как это можно сделать, можно прочесть в [17]), установить фильтры на добавление файлов с расширением JPG, JPEG, GIF, PNG, JPE, JFIF, BMP, DIB, TIF, TIFF, так как они предоставляют собой форматы графических файлов. На загрузку остальных форматов установить запрет с выводом сообщения пользователю. Так же ограничить максимальный объём фотографии до 2Мб. Фотография при отображении на экране должна автоматически принимать одинаково установленные размеры. Например, 150 на 200 пикселей.

Данная реализация JSF - WebUI[12] не имеет возможности работать асинхронно. Переход на другую имплементацию невозможен, из-за специфической организации и различия архитектуры с альтернативными продуктами. Поэтому возможно переопределение имеющихся компонентов на уровне исходного кода WebUI-компонентов. Нужно добавить в необходимые компоненты дополнительный атрибут partialSubmit, который будет сигнализировать компоненту о том, что при изменении данных, на уровне контроллера, автоматически реагировать, не ожидая перезагрузки страницы. Сама реализация Ajax'a должна быть осуществлена через объект XMLHttpRequest[13]. Для реализации потребуется в дескрипторе развёртки объявить ещё один сервлет, который будет обрабатывать данные запросы.

В существующей реализации проекта предусмотрен в дескрипторе развёртки фильтр, в котором можно задать правила, по которым будет осуществляться навигация по сайту. При авторизации каждый из пользователей обладает своей ролью. Их всего может быть четыре: Guest, Administrator, Student, Lector. При дальнейшей разработке необходимо в методе doFilter класса имплементирующего интерфейс javax.servlet.Filter[14], в нашем случае это SecurityFilter, имплементировать логику доступа к каждой из страницы сайта. При захождении по прямому URL-адресу[15], SecurityFilter должен пропускать только тех пользователей, которые имеют на это право, остальных автоматически отправлять на страницу с 403 ошибкой [16]. На все страницы административной консоли может попадать только администратор. Гость может видеть только информацию об университете, и не имеет своих личных страниц на сайте. У студентов и преподавателей есть свои страницы, на которые могут попасть только они. Причём, студент не должен обладать правом просмотра данных другого студента, также как и преподаватель не может посмотреть успеваемость студентов не по его предметам или студентов, у которых он не читает лекций (либо ведёт практику). В дальнейшем предусматривается возможность введения новой роли, с помощью которой можно будет просматривать успеваемость и посещение занятий всех студентов. Эта возможность должна быть предоставлена кураторам, сотрудникам деканата.

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

Для обмена сообщениями на тестовом примере был выбран сервер mail.ru, для использования сайта необходимо использовать собственный почтовый сервер. Способ создания ящиков для пользователей сайта должен заключаться в том, что ящик выдаётся каждому пользователю на выделенном почтовом сервере, с названием имя_фамилия_id@домен. Причём уникальный идентификатор инициализируется единицей и впоследствии инкрементируется при совпадении уже имеющихся людей с такими же именами и фамилиями. Сайт предоставляет возможность на одной из страниц отправлять письма преподавателям и читать от них ответы. Дальнейшей доработкой должна служить очистка ненужных сообщений, либо неактуальных с течением времени.

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

На сайте должна быть предоставлена возможность студенту выбирать возможность, на какие типы SMS-рассылок он может подписаться. Это может быть: изменение в расписании, уведомление за определённое время до контрольной работы, и другие виды сообщений.

Главная страница сайта должна предоставлять возможность CMS[18]. Для этого также должна быть добавлена для этого соответствующая роль, позволяющая это делать. Что можно будет редактировать. Должна быть возможность изменения рисунка, фона страницы, содержимого страницы. Если текст пишется в стиле URL-адреса, чтобы предоставлялась возможность захода на этот сайт посредством единого нажатия левой клавиши мыши на нём.

Очень актуальными сейчас являются WEB сервисы[19]. В данном приложении их можно было бы использовать с целью проверки наличия студента в университете. Либо узнавать количество студентов, окончивших с красным дипломом. Некоторые модули, которые могут быть написаны на других технологиях, можно было бы состыковать посредством именно WEB сервисов. Также они могут быть полезны при возможности интерактивного обмена между двумя и более подобными сайтами, установленными в разных высших учебных заведениях. Например, при переходе студента из одного университета в другой с передачей всех его личных данных.

Разработанный в данном приложении Фреймворк, базируется на использовании рефлексии. Данный подход позволяет нам более гибко обращаться с приложением, но при этом теряется некоторая производительность в работе. Серверы приложений и их контейнеры также используют рефлексию в своей работе. Рефлексия позволяет нам динамически управлять кодом, что бывает очень полезно. В данном случае это позволяет нам в разработанном Фреймворке абстрагироваться от типов передаваемых сущностей, в необходимости написания на каждую страницу обработки однотипных бинов, с разными названиями и типами полей. Единственное что нужно, указать с какой сущностью мы работаем, идентификационный номер используемых компонентов и типы принимаемых значений. Остальную логику берёт на себя каркас.

3. ПРОЕКТИРОВАНИЕ

Вследствие отсутствия финансирования проекта, при выборе инструментальных средств, предпочтение отдавалось условно бесплатным проектам. Лидирующее место на рынке таких продуктов в настоящее время занимает компания Sun Microsystems и для разработки все её продукты являются бесплатными. Основным языком программирования WEB-приложений является Java. Система была реализована по архитектуре 'модель-контроллер-представление'.

Рисунок 3.1 - Система по архитектуре 'модель-контроллер-представление'

Данная архитектура полезна в приложениях, где необходимо разделить логику на 3 отдельных независимых модуля. Широко применяется в WEB-приложениях. Как известно, в MVC-приложениях используются модели двух типов: активные и пассивные. Первые сами являются инициаторами обновления отображаемых данных, а, следовательно, связаны с представлением. Зато последние не предпринимают самостоятельных действий, а лишь ожидают изменений от контроллера.

На основании изложенных фактов, мною были выбраны:

· средой разработки - NetBeans 6.0, так как имеет способность работы с новыми технологиями, предоставление возможности автоматической генерации кода, автоматическое дополнение необходимых библиотек для выбранной технологии. При сравнении с аналогичными бесплатными для разработки средами разработки, такими как Eclipse, JDeveloper имеет преимущества. Eclipse трудоёмкий в настройках, JDeveloper имеет хорошие показатели при работе с продуктами компании Oracle, в других ситуациях неудобен в использовании.

· в качестве WEB-сервера - Glassfish v2, так как имеет возможность работы с EJB, сервер является кластеризуемым, надёжным. Предоставляет удобную графическую административную консоль. Для использования в данном сайте не требует дополнительных настроек. При возникновении ошибок детально описывает проблему в логах. По сравнению с такими WEB-серверами как BEAWebLogic, IBM WebSphere работает значительно быстрее, не упоминая о том, что они являются не просто платными, а очень дорогими. Альтернативой использования может быть JBoss или Sun Application Server 9.

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

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

· в качестве имплементации JSF - WebUI, так как в среде разработки NetBeans предоставляется удобная палитра для разработки jsp-страниц с автоматической генерацией кода.

· в качестве используемой СУБД - MySQL 5.0, так как является продуктом OpenSource. Имеет удобный графический интерфейс при работе с базой данных.

4. РАЗРАБОТКА

4.1 Разработка архитектуры системы

Данное приложение является клиент-серверным, с тонким клиентом и имеет 'многозвенная клиент-серверная' архитектура.

Рисунок 4.1 - Архитектура приложения

Состоит из 2-х модулей, имеет 4 логических уровня: DAO уровень, уровень сервисов, уровень контроллеров, уровень представления. DAO уровень работает непосредственно с базой данных с помощью EJB QL запросов, и являются локальными бинами в EJB-контейнере. Уровень сервисов вызывает методы из DAO уровня, выполняя соответствующие преобразования, если необходимо. Уровень сервисов является открытым для других модулей программы. Контроллеры взаимодействуют именно с этим уровнем. В контроллерах обрабатывается информация, пришедшая из уровня представления, а также предоставляется необходимая информация для неё из EJB-модуля. Уровень представления только отображает информацию, без её модификации.

4.2 Определение функций, выполняемых программой (Use Case Diagram)

автоматизация сайт интерфейс программный

Рисунок 4.2 - Функции студента

Рисунок 4.3 - Функции администратора системы

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

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

4.3 Разработка диаграмм последовательности (Sequence Diagrams)

Рисунок 4.4 - Диаграмма последовательности авторизации

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

Рисунок 4.5 - Диаграмма последовательности добавления/редактирования студентов

На данной диаграмме рассмотрен процесс работы добавления и редактирования студента. После успешной аутентификации администратором, сайт открывает страницу Admin.jsp на которой можно выбрать нужного для редактирования пользователя, либо добавить нового. При выборе той или иной функции сайт открывает страницу AddEditUser.jsp. При входе на данную страницу администратору предоставляются поля ввода данных пользователя. После нажатия на кнопку Cancel - произойдёт переход обратно на главную страницу административной консоли, при нажатии Save/Edit(значение кнопки изменяется в зависимости от способа захода на страницу) выполняется проверка на корректность введённых данных. В случае корректного заполнения необходимых полей, вносятся изменённые данные в базу данных, и происходит переход на главную страницу консоли. При потере авторизации сайт возвращается на страницу авторизации.

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

Рисунок 4.6 - Диаграмма последовательности главной страницы административной консоли

4.4 Разработка графического интерфейса программы

Рисунок 4.7 - Страница авторизации пользователей

Таким образом, выглядит страница авторизации. Имеется 2 поле ввода, для имени авторизации и пароля, кнопки авторизации и кнопки, позволяющей войти на сайт, как гостю.

Рисунок 4.8 - Главная страница административной консоли

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

Рисунок 4.9 - Страница редактирования/добавления пользователей

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

Рисунок 4.10 - Интерфейс однотипных страниц в административной консоли

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

Рисунок 4.11 - Страница для редактирования корпусов ВУЗа и установление времени для каждой пары

Рисунок 4.12 - Редактирование предметов и выделение преподавателю прав на их проведение

Рисунок 4.13 - Страница, позволяющая импортировать данные о расписании из Excel файла, и предоставляющая возможность привязки преподавателям к предметам

Рисунок 4.14 - Страница для задания специфических значений каждому из корпусов университета

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

Рисунок 4.15 - Страница, которая показывается пользователю в случае нехватки прав доступа к ресурсу

Рисунок 4.16 - Страница для изменения паролей

Данная страница предоставляет возможность изменения текущего пароля. Содержит для этого поля для ввода старого, нового и подтверждения нового пароля. При вводе всех данных, и нажатии кнопки 'Змінити' - при корректном вводе данных пароль изменяется и возвращает пользователя на главную страницу консоли, в противном случае выводится соответствующие сообщение об ошибке. Кнопка 'Відмінити' возвращает пользователя на главную страницу консоли.

Рисунок 4.17 - Главная страница портала

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

Рисунок 4.18 - Страница расписания занятий текущего семестра

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

Рисунок 4.19 - Страница пришедших напоминаний

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

Рисунок 4.20 - Страница успеваемости и посещаемости студента

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

Рисунок 4.21 - Страница отправки писем

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

Рисунок 4.22 - Страница пришедших писем

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

Рисунок 4.23 - Страница оценивания и отмечания успевания студентов

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

Рисунок 4.24 - Страница всех преподавателей университета

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

Рисунок 4.25 - Литература для просмотра и скачивания пользователям портала

Рисунок 4.26 - Страница позволяющая добавлять и редактировать существующие тесты

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

4.5 Разработка диаграммы классов(Class Diagram)

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

Рисунок 4.27 - Диаграмма классов, реализующих функциональность сущности, пользователя и его наследников

На диаграмме 4.28 представлено взаимосвязь сущностей, которые отвечают за проведение занятия (Lesson). Занятие может быть либо лекцией (Lection), практикой (Seminar) либо экзаменом (Examination). Сущность 'Занятие' наследует все свойства, которые находятся в сущности Schedule, которая в свою очередь содержит информацию о том: в какой аудитории какого корпуса будет проведено занятие; время и день проведения; группа, которая будет на этом занятии; преподаватель, который будет проводить это занятие; семестр проведения этого занятия.

Рисунок 4.28 - Диаграмма классов, реализующих функциональность сущности, урока и его зависимостей

Рисунок 4.29 - Диаграмма зависимости класса, реализующего функциональность сущности, описания файла, и класса данных файла

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

Рисунок 4.30 - Диаграмма зависимости классов, реализующих функциональность сущности, факультета с сущностью кафедра

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

Рисунок 4.31 - Диаграмма зависимости классов, реализующих функциональность сущности, группы студентов с сущностью читаемый предмет

Данная диаграмма представляет собой отношение проводимых предметов определённой группе студентов.

Рисунок 4.32 - Диаграмма классов, реализующих функциональность сущности, пользователя с зависимостями

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

Рисунок 4.33 - Диаграмма класса, реализующего функциональность сущности, теста и его зависимости

Сущность тест ('TestEntity') устроен таким образом, что содержит связи, на совокупности тестов ('Quiz'). Это говорит о том, что один и тот же вопрос может конфигурировать больше, чем в одном тесте. Также тест, содержит в себе сущности вопросов ('QuiestionEntity') и ответов ('AnswerEntity'). Связи сущностей вопросов и ответов между собой никак не связаны, а поэтому при составлении теста, вопросы, которых может быть несколько должны иметь одинаковые варианты ответов и тот же самый правильный ответ. Это необходимо для того, чтобы была возможность формулировки одинакового вопроса несколькими способами.

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

4.6 Разработка алгоритмов выполнения методов класса (Activity Diagram)

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

Рисунок 4.34 - Диаграмма отображения страницы

Рисунок 4.35 - Диаграмма обработки действий пользователя

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

Рисунок 4.36 - Диаграмма обработки нажатия кнопки 'Добавити'

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

Рисунок 4.37 - Диаграмма отображения и заполнения дополнительной формы

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

Рисунок 4.38 - Диаграмма логики работы удаления записи из таблицы

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

Рисунок 4.39 - Диаграмма классов логики работы нажатия кнопки 'Сохранить/Редактировать'

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

4.7 Разработка диаграммы развертывания (Deployment Diagram)

Рисунок 4.40 - Диаграмма развертывания системы

На данной диаграмме можно увидеть, что приложение состоит из трёх узлов. Клиент, обращаясь через WEB-браузер, взаимодействует с GlassFish сервером, который в себе разворачивает EJB контейнер, и взаимодействует с сервером базой данных MySQL для выборки данных.

4.8 Разработка базы данных

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

1) информацию о пользователях (тип пользователя, имя, день рождения, адрес, номер телефона, логин/пароль в систему, электронный адрес, описание, и если это студент - группу);

2) информацию о кафедрах, специальностях, факультетах;

3) книги, фотографии, другие файлы;

4) тесты (вопросы, ответы, вопросники);

5) информацию о расписании (даты сессии для каждой кафедры, время, место проведения пар и кем они должны быть проведены);

6) информацию о предметах (кто их имеет право преподавать), информацию об университете (о корпусах, сколько в них этажей, какие есть аудитории, сколько их, какой они каждая вместительности).

Нормализация базы данных

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

Первая нормальная форма:

· запрещает повторяющиеся столбцы (содержащие одинаковую по смыслу информацию);

· запрещает множественные столбцы (содержащие значения типа списка и т.п.);

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

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

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

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

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

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

4.8.1 Разработка физической модели базы данных

Рисунок 4.41 - Физическая структура реализации модели Расписание и его связи

Рисунок 4.42 - Физическая структура реализации модели Тест

Рисунок 4.43 - Физическая структура реализации модели Пользователь и его связи

4.8.2 Разработка бизнес правил базы данных

1) Все таблицы имеют первичный ключ BIGINT(20) с автоматическим инкрементированием при добавлении новой записи в таблицу.

2) Таблица UserEntity является общей таблицей для записей 4 типов объектов: студента, администратора, преподавателя и гостя. Различие между разными типами сущностей происходит по дополнительному столбцу discriminator.

3) Таблица Lesson подобна по реализации таблице UserEntity, совмещает в себе 2 сущности: лекционное занятие и практическое.

4) Таблицы BirthDate, Address, UserEmail, Credential, TelephoneNumber связаны только с сущностью UserEntity, и поэтому при удалении сущности пользователя автоматически удаляются записи в вышеперечисленных таблицах, для предотвращения 'висящих' данных.

4.8.3 Описание таблиц БД

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

4.9 Кодирование и отладка

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

5. ТЕСТИРОВАНИЕ

Виды тестирования:

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

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

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

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

Таблица 5.1 Test-case функционального тестирования консоли.

Страница

Действие

Событие

Приоритет

Выполнение

Login page

По ссылке http://localhost:8081/UniversityPortal-war/

Открытие страницы

Высокий

Да

Авторизация пользователя, как Teacher

Переход на главную страницу сайта

Высокий

Да

Авторизация пользователя, как Student

Переход на главную страницу сайта

Высокий

Да

Авторизация пользователя, как Administrator

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

Высокий

Да

Вход под гостем

Переход на главную страницу сайта

Высокий

Да

Залогинивание без ввода пароля

Сообщение об ошибке имеющегося пустого поля

Средний

Да

Залогинивание без ввода логина

Сообщение об ошибке имеющегося пустого поля

Средний

Да

Administrator Main Page

Нажатие на ссылку Admin faculties

Переход на страницу Admin faculties

Высокий

Да

Нажатие на ссылку Admin departments

Переход на страницу Admin departments

Высокий

Да

Нажатие на ссылку Admin Subjects

Переход на страницу Admin Subjects

Высокий

Да

Нажатие на ссылку Add User

Переход на страницу Add/Edit User

Высокий

Да

Нажатие на ссылку Edit User, при невыбранной записи в таблице

Сообщение об ошибке невыбранной записи

Средний

Да

Нажатие на ссылку Edit User, при выбранной записи в таблице

Переход на страницу Add/Edit User

Высокий

Да

Нажатие на ссылку Remove User, при невыбранной записи в таблице

Сообщение об ошибке невыбранной записи

Средний

Да

Нажатие на ссылку Remove User, при выбранной записи в таблице

Удаление записи с таблицы

Высокий

Да

Нажатие на ссылку Change Password

Переход на страницу Change Password

Высокий

Да

Нажатие на кнопку 'Logout'

Разлогинивание

Высокий

Да

Фильтрация с вводом существующей фамилии

Вывод данных с выбранной фамилией

Средний

Да

Фильтрация с вводом несуществующей фамилии

Пустая таблица

Средний

Да

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

Вывод данных только одного типа пользователей

Средний

Да

Admin User/Edit Page

Нажать на 'Add/Edit' кнопку, оставив пустые обязательные поля

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

Маленький

Да

Нажать на 'Add/Edit' кнопку, заполнив корректно все поля ввода

Корректное добавление в базу данных и переход на главную страницу конслои

Высокий

Да

Выбор тип пользователя 'Student'

Появление дополнительных полей, свойственных студенту

Высокий

Да

Нажать на кнопку 'Cancel'

Переход на главную страницу консоли

Высокий

Да

Admin Department Page

Нажать на ссылку 'Add Speciality'

Открытие дополнительной формы

Высокий

Да

Нажать на ссылку 'Edit Speciality', с выбранной записью таблицы

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

Высокий

Да

Нажать на ссылку 'Edit Speciality', с невыбранной записью таблицы

Сообщение об ошибке невыбранной записи

Высокий

Да

Нажать на ссылку 'Remove Speciality', с выбранной записью таблицы

Удаление записи с таблицы

Высокий

Да

Нажать на ссылку 'Remove Speciality', с невыбранной записью таблицы

Сообщение об ошибке невыбранной записи

Высокий

Да

Нажать на 'Add/Edit Speciality' с пустыми полями

Сообщение об ошибке пустых полей

Средний

Да

Нажать на 'Add/Edit Speciality' с корректными данными

Сохранение новой или отредактированной записи в базу данных

Высокий

Да

Нажать на 'Add/Edit Speciality' с попыткой добавления записи с нарушением уникальности поля

Должно быть отклонение сохранения в базу

Высокий

Да

Переключение между кафедрами и специальностями

Переключение работы с разными сущностями

Высокий

Да

Нажатие на кнопку 'Back'

Переход на главную страницу консоли

Высокий

Да

Admin Faculty Page

Нажать на ссылку 'Add Faculty'

Открытие дополнительной формы

Высокий

Да

Нажать на ссылку 'Edit Faculty', с выбранной записью таблицы

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

Высокий

Да

Нажать на ссылку 'Edit Faculty', с невыбранной записью таблицы

Сообщение об ошибке невыбранной записи

Высокий

Да

Нажать на ссылку 'Remove Faculty', с выбранной записью таблицы

Удаление записи с таблицы

Высокий

Да

Нажать на ссылку 'Remove Faculty', с невыбранной записью таблицы

Сообщение об ошибке невыбранной записи

Высокий

Да

Нажать на 'Add/Edit Faculty' с пустыми полями

Сообщение об ошибке пустых полей

Средний

Да

Нажать на 'Add/Edit Faculty' с корректными данными

Сохранение новой или отредактированной записи в базу данных

Высокий

Да

Нажать на 'Add/Edit Faculty' с попыткой добавления записи с нарушением уникальности поля

Должно быть отклонение сохранения в базу

Высокий

Да

Нажатие на кнопку 'Back'

Переход на главную страницу консоли

Высокий

Да

Admin Subject Page

Нажать на ссылку 'Add Subject'

Открытие дополнительной формы

Высокий

Да

Нажать на ссылку 'Edit Subject', с выбранной записью таблицы

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

Высокий

Да

Нажать на ссылку 'Edit Subject', с невыбранной записью таблицы

Сообщение об ошибке невыбранной записи

Высокий

Да

Нажать на ссылку 'Remove Subject', с выбранной записью таблицы

Удаление записи с таблицы

Высокий

Да

Нажать на ссылку 'Remove Subject', с невыбранной записью таблицы

Сообщение об ошибке невыбранной записи

Высокий

Да

Нажать на 'Add/Edit Subject' с пустыми полями

Сообщение об ошибке пустых полей

Средний

Да

Нажать на 'Add/Edit Subject' с корректными данными

Сохранение новой или отредактированной записи в базу данных

Высокий

Да

Нажать на 'Add/Edit Subject' с попыткой добавления записи с нарушением уникальности поля

Должно быть отклонение сохранения в базу

Высокий

Да

Нажатие на кнопку 'Back'

Переход на главную страницу консоли

Высокий

Да

6. ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ РАЗРАБОТКИ ПРОГРАМННОГО ПРОДУКТА

6.1 Теоретическое обоснование экономической выгоды от внедрения программного продукта в высших учебных заведениях

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

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

6.2 Расчет себестоимости и цены программного продукта

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

Спрогр. прод. = Ззп.зп.рас.эвм

(6.1)

Цена разработки рассчитывается как сумма себестоимости и прибыли:

Цраз. изд. = Спрогр. прод.+Прибыльплановая

(6.2)

При разработке программного продукта понесены следующие расходы:

1) расходы на эксплуатацию ЭВМ (Рэвм);

2) расходы на заработную плату (Ззп.);

3) отчисления в фонд заработной платы (Нзп.);

4) накладные расходы (Нрас.);

Расчет расходов на эксплуатацию ЭВМ.

Разработка велась ежедневно (кроме воскресенья) в течение пяти месяцев (130 рабочих дней) - затраты времени для одного разработчика. Продолжительность рабочего дня - 8 часов. Стоимость одного машинного часа - 1,15 грн. Отсюда расходы на эксплуатацию ЭВМ:

Рэвм=1.15*110*8=1012 (грн.)

Расчет расходов на заработную плату.

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

Ззп.ср_дн * Т/n

(6.3)

Где:

Зср_дн - среднедневная заработная плата разработчика;

T - трудоемкость разработки;

n - число разработчиков (n=1).

Среднедневная заработная плата разработчика при средней месячной зарплате в 4000 грн. и 22 рабочих днях составляет:

Зср_дн = 4000/22 = 181.82 (грн.)

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

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

Т=Тофаспод

(6.4)

Где:

Тоф - трудозатраты на изучение описания задачи и формулировку ТЗ;

Та - трудозатраты на разработку алгоритмов;

Тс - трудозатраты на составление схем алгоритмов;

Тп - трудозатраты на разработку программного продукта;

То - трудозатраты на отладку и тестирование;

Тд - трудозатраты на оформление документации.

Трудозатраты всех видов определяются через условное количество операторов программного продукта:

n

Q=q*k*(1+УPi)

i=1

(6.5)

Где:

q - предполагаемое количество команд программного продукта;

k - коэффициент сложности программного продукта (k=1,9);

Pi - коэффициент коррекции программного продукта;

n - количество коррекций в программном продукте.

В программном продукте было произведено 6 коррекций: 2 с коэффициентом 0,06; 2 с коэффициентов 0,07; 1 с коэффициентом 0,4.

Получаю условное количество операторов:

Q = 7000*1,4*(1+(2*0,06+2*0,07+1*0,4)) = 16268 операторов

Трудозатраты на все виды работ определяю по формуле:

Т=Q/(8*Vi*Kкв)

(6.6)

Где:

i - вид работы;

V - производительность исполнителя;

Ккв - коэффициент квалификации исполнителя.

Коэффициент квалификации исполнителя зависит от стажа его работы.

Таблица 6.1 - Зависимость коэффициента квалификации исполнителя от его стажа работы.

Стаж работы, лет

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

менее 2

0,8

2 - 3

1

3 - 5

1,2

5 - 7

1,4

более 7

1,6

Таблица 6.2 - Данные о производительности исполнителя.

Вид работы

Производительность, команд/час

Изучение описания задачи

50

Разработка алгоритмов

25

Составление схем алгоритмов

35

Разработка программного продукта

40

Отладка программного продукта

35

Оформление документации

40

Рассчитываю трудоемкость, с учетом того, что коэффициент квалификации исполнителя 1,2. Результаты расчетов помещаю в таблицу 6.3.

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

Вид работ

Трудоемкость, человек/дней

Изучение описания задачи и формулировка ТЗ

21

Разработка алгоритмов

42

Составление схем алгоритмов

30

Разработка программного продукта

26,25

Отладка программного продукта

30

Оформление документации

26,25

Рассчитываю трудоемкость разработки:

Т=21+42+30+26,25+30+26,25=175,5 человек/дней

Вычисляю заработную плату разработчика:

Ззп.=181,81*175,5=31907,66 грн.

Расчет отчислений в фонд заработной платы.

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

1) пенсионный фонд - 32% от общего фонда заработной платы;

2) фонд социального страхования - 4%;

3) фонд страхования на случай безработицы - 1,5%.

Таким образом, отчисления в фонд заработной платы составят 37,5% от фонда заработной платы:

Нзп.= 31907,66*0,375 = 11965,37 грн.

Расчет накладных расходов.

Накладные расходы составляют 50% от заработной платы:

Нрас.= 31907,66*0,5 = 15953,83 грн.

Расчет себестоимости программного продукта.

Себестоимость программного продукта составит:

Спрогр. прод. = 31907,66+ 11965,37+15953,83+1012=60838,86грн.

Расчет цены разработки программного продукта.

Для определения цены разработки программного продукта необходимо подсчитать плановую прибыль, при коэффициенте рентабельности 30%:

Прибыльплановая = 60838,86*0,3 = 18251,66грн.

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

Цраз. изд. = 60838,86+18251,66=79090,52 грн.

Налог на добавленную стоимость составляет 20% от цены разработки. Окончательная цена разработки программного продукта с учетом НДС:

Ц = 79090,52*1,2 = 94908,62 грн.

Таблица 6.4 - Сметная калькуляция на разработку программного продукта.

№ п/п

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

Сумма расходов, грн.

1

Расходы на эксплуатацию ЭВМ

1012

2

Заработная плата разработчика

31907,66

3

Отчисления в фонд заработной платы

11965,37

4

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

15953,83

5

Себестоимость программного продукта

60838,86

6

Плановая прибыль (30%)

18251,66

7

Цена разработки программного продукта

79090,52

8

НДС (20%)

15818,10

9

Цена разработки программного продукта с НДС

94908,62

6.5 Стратегия маркетинга

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

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

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

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

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

Необходимо организовать качественное сопровождение продукта:

1) пользователь должен иметь возможность без труда сообщать разработчику о найденных неточностях или ошибках;

2) разработчик обязательно должен поблагодарить пользователя за оказанную помощь;

3) продукт должен постоянно совершенствоваться;

4) установка обновлений должна производиться без приостановки работы системы;

5) пользователь должен получать уведомления о выходе новых обновлений и иметь возможность загружать их бесплатно.

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

7. ОРГАНИЗАЦИЯ УСЛОВИЙ ПО ОХРАНЕ ТРУДА

7.1 Организация рабочего места администратора проекта

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

оптимальное размещение оборудования, входящего в состав рабочего места;

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

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

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

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

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

Рисунок 7.1. Зоны досягаемости рук в горизонтальной плоскости

а - зона максимальной досягаемости;

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

в - зона легкой досягаемости ладони;

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

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

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

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

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

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

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

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

ширина не менее 700 мм;

глубина не менее 400 мм;

высота рабочей поверхности стола над полом 700-750 мм.

Оптимальными размерами стола являются:

высота 710 мм;

длина стола 1300 мм;

ширина стола 650 мм.

Поверхность для письма должна иметь не менее 40 мм в глубину и не менее 600 мм в ширину. Под рабочей поверхностью должно быть предусмотрено пространство для ног:

высота не менее 600 мм;

ширина не менее 500 мм;

глубина не менее 400 мм.

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

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

допускать регулирование высоты в зависимости от роста работающего человека ( в пределах от 400 до 550 мм );

иметь слегка вогнутую поверхность,

иметь небольшой наклон назад.

Исходя из вышесказанного, приведем параметры стола администратора:

высота стола 710 мм;

длина стола 1300 мм;

ширина стола 650 мм;

глубина стола 400 мм.

Поверхность для письма:

в глубину 40 мм;

в ширину 600 мм.

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

7.2 Анализ вредных производственных факторов в серверной комнате

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

1) высокое напряжение сети переменного тока;

2) ионизирующее и электромагнитное излучения;

3) повышенный уровень шума и вибрации;

4) вероятность возникновения пожара;

5) микроклиматические условия;

6) недостаточная освещенность помещения.

7.3 Характеристика помещения серверной комнаты

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

1) размеры 6х6х3 м (высота потолка не менее 3-х метров по СНиП 11-4-05);

2) помещение расположено на втором этаже пятиэтажного здания;

3) в комнате расположены рабочие места для двух человек, норма на одного человека по СНиП 2.9-04-87: объем - 19,5 м3, площадь - 6 м2;

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

5) в помещении находится одно окно площадью 7,2 м2;

6) по степени опасности поражения электрическим током комната относится к помещениям без повышенной опасности;

7) полы съемные, состоят из несгораемых плит, сверху покрыты линолеумом;

8) кабели и специализированная проводка для приборов и ЭВМ помещены в гибкие резиновые шланги и проложены под полом;

9) по доступности электрооборудования помещение относится к классу производственных помещений;

10) температура воздуха поддерживается в пределах 18-24 °C;

11) относительная влажность воздуха поддерживается в диапазоне 30-50% без конденсации влаги;

12) скорость изменения влажности воздуха не превышает 6% в час;

13) источники шумов: внутренняя вентиляция ЭВМ, причинно-вытяжная вентиляция, система кондиционирования воздуха;

14) наименьшая освещенность 540 лк на высоте 100 см;

15) загрязнение воздуха, тепловые и световые излучения отсутствуют;

16) эвакуационный выход один (СНиП 2.01.02-85).

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

7.4.1 Методы защиты от шума и вибрации

Строительно-акустические методы защиты от шума предусмотрены строительными нормами и правилами, это:

1. звукоизоляция ограждающих конструкции, уплотнение по периметру притворов окон и дверей;

2. звукопоглощающие конструкции и экраны;

3. глушители шума, звукопоглощающие облицовки.

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

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

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

Сервер являются источником шума с W 0 = 65 дБ, что не соответствует санитарным нормам. Следовательно, звукоизоляция необходима.

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

r пр. = W пр. / W 0 = 50/65 = 0,77

Звукоизолирующая способность ограждения:

R пр. = 10 lg(1/ r пр.) = 1,44

При весе 1 м2 до 200 кг (легкое ограждение) его требуемый удельный вес составляет:

R пр. = 13,5 lg Q пр. + 13

Q пр. = 10((R пр. - 13)/13,5) = 10-0,8 = 0,13 кг.

Выбираю в качестве материала ограждения фанеру. Его требуемая толщина составит:

n пр. ф. = Q пр. / с ф.= 0,13 / 570 = 2*10-4 м

Где:

с ф - плотность фанеры (кг/м2)

Выбираю толщину фанерного листа n ф. =10 мм > n пр. ф.

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

ДСТУ 112.1.003-83 устанавливает допустимые уровни звукового давления (в октавных полосах частот), уровни звука и эквивалентные уровни звука (в дБ) на рабочих местах (W пр. = 50 дБ).

В серверной комнате источниками шума являются:

1) внутренняя вентиляция ЭВМ;

2) вращающиеся части ЭВМ (НГМД, НЖМД и устройства чтения оптических дисков);

3) причинно-вытяжная вентиляция;

4) система кондиционирования воздуха.

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

Таблица 7.1. Звук и эквивалентные уровни звука на рабочих местах.

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

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

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

Серверная комната

40

45

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

1) повреждения различных органов и тканей;

2) влияние на центральную нервную систему;

3) влияние на органы слуха и зрения;

4) повышение утомляемости.

Наиболее вредной является вибрация, близкая к собственной частоте человеческого тела (6-8 Гц) и рук (30-80 Гц).

7.4.2 Параметры микроклимата на рабочем месте

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

Основной принцип нормирования микроклимата - создание оптимальных условий для теплообмена тела человека с окружающей средой. Нормы устанавливаются в зависимости от времени года, характера трудового процесса и характера производственного помещения (значительные или незначительные тепловыделения). Для рабочих помещений с избыточным тепловыделением до 20 ккал/м3 допустимые и оптимальные значения параметров микроклимата приведены в таблице 7.2:

Таблица 7.2 Нормы микроклимата на рабочем месте

Время года

Зона

Температура воздуха, 0 C

Относительная

влажность, %

Скорость

движения

воздуха, м/с

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

Оптимальная

18 - 21

60 - 40

< 0.2

Переходный период

Допустимая

17 - 21

< 75

< 0.3

Теплый период года

(t > 100 C)

Оптимальная

20 - 25

60 - 40

< 0.3

Допустимая

< 28 в 13 часов самого жаркого м

< 75

< 0.5

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

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

Рассмотрим тепловыделение от некоторых источников:

Тепловыделение от источников искусственного освещения:

Q1 = 860* Nосв

(7.1)

Где:

Nосв. - суммарная мощность источников искусственного освещения, кВт.

Q1 = 860*0,6 = 516 ккал/ч

Тепловыделение от людей:

Q2 = Qл* nл

(7.2)

Где:

Q2 - тепловыделение от одного человека (55 ккал/ч);

nл - количество людей.

Q2 = 55*2 = 110 ккал/ч

Поступление тепла через световые проемы за счет солнечной радиации:

Q3 = F* q

(7.3)

Где:

F - площадь светового проема (7,2 м2);

q - количество тепла, вносимое солнечной радиацией через световые проемы (25 ккал/(ч*м2)).

Q3 = 7,2*25 = 180 ккал/ч

Потери тепла из-за строительных ограждений:

Qтп = k*F*(Тп + Тн)

(7.4)

Где:

F - поверхность ограждения, м2;

Тн - температура наружная, К;

Тп - температура в помещении, К.

Qтп = 1,09*7*14 = 126,14 ккал/ч

Подсчитаем избыточное количество тепла в помещении серверной комнаты:

Q = 516+110+180-126,14 = 679,86

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

L = Q / (C*y*(Тпн))

(7.5)

Где:

С - удельная теплоемкость воздуха (0,24 ккал/(кг * К));

y - объемный вес воздуха, поступающий в помещение (кг/м3).

L = 679,86 / (0,24*1,185*36) = 679,86/10,2384 = 66,4

Кратность обмена воздуха:

K = L/Vп

(7.6)

Где:

Vп - объем помещения (108 м3).

K = 66,4/108 = 0,61

Кратность обмена воздуха меньше 30, следовательно, вентиляция в помещении естественная и нет необходимости в вентиляторе.

7.4.3 Требования к освещенности помещения

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

Естественное освещение в помещениях нормируется коэффициентом естественной освещенности (КЕО), величина которого узаконена СНиП П.4-79 в зависимости от типа помещения, системы освещения и характера работ, выполняемых в помещении - КЕО = 1.5%

Согласно СНиП П.4-79, в качестве источников искусственного освещения применимы люминесцентные лампы освещения. Нормированная освещенность на рабочем месте оператора Е=0,75 лк.

7.4.4 Ионизирующее и электромагнитное излучения

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

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

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

Обеспечение безопасности работающих с радиоактивными веществами осуществляется путем установления предельно-допустимых доз облучения различными видами радиоактивных веществ, применения защиты временем или расстоянием, проведения общих мер защиты, использования средств индивидуальной защиты. Большое значение имеет применение приборов индивидуального и общего контроля для оценки интенсивности радиоактивных излучений. Администратор сервера во время работы находится на расстоянии от 0,5 до 2 метров от монитора (дисплея), являющегося источником в-частиц. При работе с источником бета-излучения нужно обеспечить защиту, как от прямого действия в-частиц, так и от тормозного излучения.

7.4.5 Требования к электробезопасности

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

1) сервер;

2) монитор;

3) периферийные устройства.

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

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

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

3) ремонтные и профилактические работы, установка и снятие корпуса допускается только при отключенном электропитании;

4) токоведущие части должны быть изолированы;

5) необходимо соблюдать инструкции по использованию электрических приборов.

7.5 Обеспечение техногенной безопасности

7.5.1 Анализ возможных чрезвычайных ситуаций

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

1) ЧС техногенного характера (транспортные аварии и катастрофы, пожары, непредвиденные взрывы, аварии с выбросом опасных химических, биологических и радиоактивных веществ, внезапное разрушение зданий и сооружений и т.д.);

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

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

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

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

7.5.2 Прогнозирование последствий ЧС техногенного характера, вызванных пожаром

Первичными поражающими факторами ЧС техногенного характера, вызванных пожарами, являются:

1) световое излучение;

2) задымление окружающей среды;

3) химическое загрязнение окружающей среды.

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

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

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

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

7.5.2.1 Основные мероприятия по локализации и устранению пожаров

1) Рабочее место администратора сервера должно постоянно содержаться в чистоте, систематически очищаться от посторонних предметов.

2) На территории категорически запрещается:

а. загромождать проезды и подъезды к зданию, пожарным водоисточникам;

б. загромождать доступы к пожарному инвентарю;

в. территория должна оборудоваться знаками безопасности, согласно ГОСТ 12.4.026-76 'Цвета сигнальные и знаки безопасности';

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

3) Помещение и оборудование нужно периодически очищать от пыли и других отходов.

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

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

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

7) Установленное в здании электрооборудование (выключатели, кабельные линии) должно быть защищено стационарными или передвижными установками пожаротушения в соответствии с требованиями 'Правил устройства электроустановок'.

8) Не загромождать доступ к пожарному оборудованию и инвентарю. Следить за комплектностью пожарного оборудования и инвентаря и исправностью средств автоматики и связи.

7.5.2.2 Вынужденная эвакуация людей из помещения серверной комнаты при пожаре

Создание укрупненных серверных, размещаемых в высотных зданиях, с большим штатом работающих придает особое значение вопросам вынужденной эвакуации из них людей при пожаре. Вынужденная эвакуация при пожаре протекает в условиях нарастающего действия опасных факторов пожара. Поэтому безопасность людей находится в прямой зависимости от времени пребывания их в здании при пожаре. Кратковременность процесса вынужденной эвакуации достигается устройством эвакуационных путей и выходов, число, размеры и конструктивно-планировочные решения которых регламентированы СНиП 2.01.02-85 'Противопожарные нормы'. По взрывопожарной и пожарной опасности помещения и здания подразделяют на категории А, Б, В, Г, Д. Здания и помещения серверных относятся к категории В.

7.5.2.3 Расчет размеров зоны возможных сплошных и отдельных пожаров

Для данного проекта возможным источником пожара может быть воспламенение ЭВМ.

Радиусы внешних границ зон сплошных и отдельных пожаров рассчитываю по формулам:

R спл. = v(0,5*К*(УSi* вi))/2рJспл.

(7.7)

R отд. = v(0,5*К*(УSi* вi)) 2рJотд.

(7.8)

Где:

К - удельная тепловая нагрузка (К=2,3*105 Вт/м2 );

Jспл. - плотность потока мощности светового излучения первичного пожара на внешней границе зоны возможных сплошных пожаров (Jспл.=3*104 Вт/м2);

Jотд. - плотность потока мощности светового излучения первичного пожара на внешней границе зоны возможных отдельных пожаров (Jотд.=104 Вт/м2);

Si - площадь i-го строительного элемента;

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

Площади соответствующих строительных элементов и принятые поправочные коэффициенты приведены в таблице 7.3.

Таблица 7.3 - Характеристики объектов возгорания.

№ п/п

Название строительного элемента

Площадь, м2

Поправочный коэффициент

1

Стены, оклеенные обоями

61,92

1

2

Окна, двери

10,08

0,5

3

Столы и стулья

7,04

1

4

Пол

36

0.15

Радиусы внешних границ зон сплошных и отдельных пожаров:

R спл. = 6,9 м

R отд. = 12 м

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

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

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

При разработке Закона Украины 'О Гражданской обороне Украины' и 'Положения о ГО Украины' акцентировалось внимание на достижения следующих направлений:

1) Закон и Положение должны учитывать мировой опыт осуществления мер по Гражданской обороне и в полной мере соответствовать Женевской (1949г.) Конвенции 'О защите жертв войны';

2) соответствие системы защиты населения от последствий чрезвычайных ситуаций условиям, потребностям и возможностям государства;

3) соответствие организационной структуры создаваемой системе;

4) обеспечение высокой реальной готовности органов управления, сил гражданской обороны.

Принятие Закона 'О Гражданской обороне Украины' является следствием работы специалистов штабов Гражданской обороны во главе со штабом ГО Украины и заинтересованных министерств и ведомств. После его издательства в периодических изданиях 6 марта 1993 года Закон вступил в силу.

ЗАКЛЮЧЕНИЕ

При разработке данного продукта были использованы:

· Сервер приложения Glassfish v2.0;

· Контейнер сервера приложения EJB 3.0;

· Каркас уровня представления WebUI JSF;

· Работа с excel документами JExcelAPI;

· Динамическая компиляция кода Reflection;

· Работа с очередями и рассылкой JMS;

· Сервер контроли версий OpenSVN;

· Сборка проекта Maven 2;

· База данных MySQL 5.0;

· Объектно-реляционная проекция Oracle TopLink;

· Клиент контроли версии TortoiseSVN 1.6

· Среда разработки NetBeans 6.0

Для достижения поставленной задачи мне помогли вышеперечисленные технологии и каркасы. Вначале проект был настроен на 3 основные технологии: EJB, TopLink, JSF WebUI, после чего можно было приступать к разработке. Все эти технологии хорошо поддерживаются сервером приложений GlassFish и без проблем в среде разработки NetBeans6.0 собираются при помощи Maven. В процессе наращивания логики, стало очевидно, что для оптимизации кода и ускорения разработки необходимо написать свой каркас для WebUI там, где страницы были однотипными. С этой задачей элегантно получилось справиться при помощи технологии Reflection. Когда дошло дело до коммуникации между преподавателями и студентами, в проект был интегрирован JMS. В качестве базы данных был выбран MySQL, но архитектура приложения позволяет без проблем перейти на другой сервер баз данных. В момент реализации импортирования расписания в портал, был выбран удобный для пользователя способ создания его на excel-документе. Для решения этой задачи послужил JExcelAPI. В конечном итоге, для того, чтобы можно было вести без проблем разработку с разных компьютеров, а также в дальнейшем разработку нескольким программистам этот проект был добавлен под контроль версии OpenSVN.

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

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Enterprise JavaBeans Technology // Sun Microsystems [Электронный ресурс] http://java.sun.com/products/ejb/

2. Sring Framework // Spring Source [Электронный ресурс] http://springframework.org/

3. Java Sercer Faces // Sun Microsystems [Электронный ресурс] http://java.sun.com/javaee/javaserverfaces/

4. Struts // Apache [Электронный ресурс] http://struts.apache.org/

5. Google Web Toolkit // Google [Электронный ресурс] http://code.google.com/webtoolkit/

6. Java Server Pages // Sun Microsystems [Электронный ресурс] http://java.sun.com/products/jsp/

7. Sevlet // Sun Microsystems [Электронный ресурс] http://java.sun.com/products/servlet/

8. [Электронный ресурс] http://ajaxpatterns.org/Java_Ajax_Frameworks

9. Swing // Sun Microsystems [Электронный ресурс] http://java.sun.com/docs/books/tutorial/uiswing/

10. PostgreSQL // PostgreSQL [Электронный ресурс] http://www.postgresql.org/

11. Oracle Database // Oracle [Электронный ресурс] http://www.oracle.com/database/index.html

12. WebUI Framework // NetBeans [Электронный ресурс] http://www.netbeans.org/kb/60/web/helloweb.html

13. XMLHttpRequest // W3C [Электронный ресурс] http://www.w3.org/TR/XMLHttpRequest/

14. javax.servlet.Filter // Sun Microsystems [Электронный ресурс] http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/Filter.html

15. URL // Wikipedia [Электронный ресурс]http://ru.wikipedia.org/wiki/URL

16. Ошибка 403 // Wikipedia [Электронный ресурс] http://ru.wikipedia.org/wiki/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_403

17. FileUpload component // NetBeans [Электронный ресурс] http://www.netbeans.org/kb/60/web/fileupload.html

18. Content Management System // Wikipedia [Электронный ресурс] http://en.wikipedia.org/wiki/Content_management_system

19. Web Service Definition Language // W3C [Электронный ресурс] http://www.w3.org/TR/wsdl

20. MySQL // Sun Microsystems [Электронный ресурс] http://www.mysql.com/

21. Netbeans IDE // Netbeans [Электронный ресурс] http://www.netbeans.org/

22. Glassfish Application Server // Sun Microsystems [Электронный ресурс] https://glassfish.dev.java.net/

23. Model-View-Controller // Wikipedia [Электронный ресурс] http://en.wikipedia.org/wiki/Model-view-controller

24. Java // Wikipedia [Электронный ресурс] http://ru.wikipedia.org/wiki/Java

25. Reflection // Sun Microsystems [Электронный ресурс] http://java.sun.com/developer/technicalArticles/ALT/Reflection/

26. Java Mail // Sun Microsystems [Электронный ресурс] http://java.sun.com/products/javamail/

27. Уилсон Р. Людина за комп'ютером. Світ ПК, № 1-1991.

28. Сибаров К.Г., Сколотнев Н.Н., Васин В.К., Начинаев В.Н. Охорона праці в обчислювальних центрах: навчальний посібник, М.: Машинобудування, 1985.

29. Санпин 2.2.2.542-96. Гігієнічні вимоги до відеодисплейних терміналів (ВДТ). персональним електронно-обчислювальним машинам (ПЭВМ) і організації роботи. М.: Інформаційно-видавничий центр Держкомепідемнадзора Росії, 1996.

30. ДСТ 12.1.030-81. ССБТ. Електробезпечність. Захисне заземлення, зануление.

31. ДСТ 12.1.003-83. ССБТ. Шум Загальні вимоги безпеки.

32. ДСТ 12.1.005-88. ССБТ. Повітря робочої зони. Загальні санітарно - гігієнічні вимоги. М.: Изд-во стандартів, 1990.

33. Бляхман Л.С., Галенко В.П., Минкин А.В. Введение в менеджмент.-Учебное пособие. - СПб.: СПбУЭФ, 1994г.

34. Учегаров Е.В. Научная организация труда // Экономика Украины, 1999 - №5. С. - 16-22.

35. Фамолинова Е.В. Физическое напряжение на работе. //Здоровье, 1995. - №12. С.-23-27.

36. Вендров А.М. Проектирование программного обеспечения экономических информационных систем: Учебник. - М.: Финансы и статистика, 2002

37. Фридман А.Л. Основы объектно-ориентированной разработки программных систем. - М.: Финансы и статистика, 2000.

38. Фатрелл, Р. Управление программными проектами: достижение оптимального качества при минимуме затрат / Р. Фатрелл, Д. Шафер, Л. Шафер. - М.: Вильямс, 2003.

ПРИЛОЖЕНИЕ А

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

1 Введение

1.1 Наименование программы

Наименование - 'Web-сайт учебного процесса' (далее по тексту - сайт)

1.2 Краткая характеристика области применения

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

2 Основание для разработки

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

Основания для разработки Программы - задание на бакалаврский проект кафедры 'Компьютерные системы и сети' Национального аэрокосмического университета им. Н.Е. Жуковского 'ХАИ'

2.2 Наименование и условное обозначение разработки

Наименование темы разработки - 'Разработка Web-сайта учебного процесса'

Условное обозначение темы разработки(шифр темы) - ' '.

3 Назначение разработки

3.1 Функциональное назначение разработки

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

3.2 Эксплуатационное назначение

Сервер

Сайт должен работать под управлением сервера Sun Application Server 9.0 или Glassfish v2, базы данных MySQL 5.0. Программа является кросс-платформенной, поэтому может функциональность от операционной системы не изменится, изменения в отображении будут видны только в графическом представлении. Данная версия апробирована только под Windows(XP/Vista).

Клиент

Для доступа к сайту достаточно иметь Интернет и браузер, например Internet Explorer (6/7), Firefox Mozilla.

4 Требования к программе или программному изделию

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

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

Сайт должен выполнять функции:

а) иметь возможность авторизации и аутентификации пользователей;

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

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

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

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

е) функция отправки и получения писем 'преподаватель-студент';

ж) возможность просмотра расписания занятий на текущий семестр;

з) ведение преподавателями успеваемости и посещаемости студентами занятий по собственным предметам, а также просмотр этих данных студентами.

4.1.2 Требования к организации выходных данных

Выходные данные должны быть представлены в HTML виде, так как должны быть способны отображаться в браузерах. Также возможно использование JavaScript кода и Flesh.

4.1.3 Требования к временным характеристикам

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

4.2 Требования к надёжности

Программа относится к классу WEB-программ. Программа запускается на стороне сервера и поэтому к её надёжности предъявляются специальные требования.

4.2.1 Требования к обеспечению надёжного(устойчивого) функционирования программы

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

а)организацией бесперебойного питания технических средств;

б)использованием лицензионного программного обеспечения;

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

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

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

д) предусмотреть меры по исключению утечек памяти;

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

4.2.2Отказы из-за некорректных действий оператора

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

4.2.3 Требования к обеспечению надёжного функционирования программы

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

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

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

Допускается требование перезагрузки ОС после отказа Программы.

4.2.4 Время восстановления после отказа

Если во время работы сайта произошел сбой по электропитанию, то для возобновления его работы необходим повторный запуск серверов.

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

4.3 Условия эксплуатации

4.3.1 Климатические условия эксплуатации

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

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

4.3.2Требования к видам обслуживания

После установки на сервер программа не требует обслуживания.

4.3.3Требования к численности и квалификации персонала

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

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

а)поддержание работоспособности технических средств;

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

в) настройка базы данных и сервера, их поддержка.

г) установка(инсталляция) необходимого программного обеспечения

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

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

4.4 Требования к составу и параметрам технических средств

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

Сервер

а) процессор с тактовой частотой, ГГц - 3, не менее;

б) материнскую плату с FSB, МГц - 330, не менее;

в) оперативную память объемом, Гб -1, не менее;

г) свободное дисковое пространство для хранения программы и установки необходимого программного обеспечения, Гб - 2, не менее;

д) отдельно дисковое пространство под базу данных, Гб - не менее 2 Гб.

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

ж) клавиатуру;

з) НЖМД;

и) сетевую плату;

к) выход в Интернет.

Клиент

а) процессор с тактовой частотой, MГц - 800, не менее;

б) материнскую плату с FSB, МГц - 330, не менее;

в) оперативную память объемом, Mб -64, не менее;

г) свободное дисковое пространство для хранения программы и установки необходимого программного обеспечения , Mб -50 , не менее;

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

е) клавиатуру;

ж) НЖМД;

з) сетевую плату;

и) выход в Интернет.

4.5 Требования к информационной и программной совместимости

4.5.1 Требования к информационным структурам и методам решения

Требования к информационным структурам на входе и выходе, а также к методам решения не предъявляются.

4.5.2 Требования к исходным кодам и языкам программирования

Для разработки серверной части сайта в качестве языка программирования нужно использовать язык Java поддерживающий спецификацию компании производителя Sun. Серверная часть программного обеспечения должна безошибочно компилироваться с помощью Ant'a или встроенными средствами среды разработки.

Проект необходимо держать под контролем версии SVN для возможности работы над проектом командой.

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

Дополнительные настройки компиляторов не требуются.

В качестве среды разработки необходимо использовать NetBeans 6.0.

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

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

- ОС Microsoft XP/Vista;

- программный сервер - Sun Application Server 9.0 или Glassfish v2.0 не ниже

- установлены библиотеки для работы с EJB3.0

- установлены библиотеки для работы с WebUI

- виртуальная машина jdk 1.5.0_13

- среда разработки NetBeans6.0

- сервер баз данных - MySQL 5.0

4.5.4 Требования к защите информации и программ

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

4.6 Специальные требования

Специальных требований к сайту не имеется.

5 Требования к программной документации

5.1 Предварительный состав программной документации

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

а) техническое задание;

б) схемы алгоритмов и данных;

в) тексты программ;

г) план тестирования и верификации;

д) пояснительная записка;

е) руководство оператора;

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

ПРИЛОЖЕНИЕ Б

РУКОВОДСТВО СИСТЕМНОГО АДМИНИСТРАТОРА.

Б.0 ВВЕДЕНИЕ

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

Б.1 ПРЕДВАРИТЕЛЬНЫЕ ТРЕБОВАНИЯ

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

1) MySQL 5.0.21

2) MySQL Administrator 1.1.9;

3) MySQL Query Browser 1.1.20;

4) JDK 1.5.0.13

5) JRE 1.5.0.13

6) Glassfishv2

7) NetBean6.0

8) Apache Ant 1.7.1

9) Настройка JMS соединения на web сервере.

10) Добавление jxl.jar, jstl.jar библиотек в Application модуль. Установка связей между ejb и web модулями.

Б.2 НАСТРОЙКА СУБД

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

1. Создание учётной записи в базе данных

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

Рисунок Б.2 Добавление нового хоста

Рисунок Б.1 Добавление нового пользователя

Рисунок Б.3Задание IP-адреса хоста

2. Задание пользователю имени авторизации и пароля

Рисунок Б.4 Создание имя авторизации и пароля пользователю

3. Создание схемы

Рисунок Б.5 Создание новой схемы

Рисунок Б.6 Именование схемы

4 Добавление привилегии таблицам

Рисунок Б.7 Присвоение прав пользователю на работы со схемами

Б.3 НАСТРОЙКА ВЕБ СЕРВЕРА

1. Создание WEB-сервера

Рисунок Б.8 Создание WEB-сервера

2. Создание домена WEB-сервера

Рисунок Б.9Выбор типа WEB-сервера

Рисунок Б.10 Создание имени авторизации и пароля для доступа к консоли WEB-сервера

Рисунок Б.11 Создание расположения домена WEB-сервера

6. Создание нового сервера баз данных:

Рисунок Б.12 Создание новой связи с базой данных

Рисунок Б.13 Выбор базы данных

Рисунок Б.14 Создание URL-адреса схемы базы данных

7 Запуск приложения на выполнение:

Рисунок Б.15 Запуск приложения на выполнение

На этом этапе создадутся таблицы в базе данных

Рисунок Б.16 Архитектура схемы university

8. Создание системных переменных

Необходимо указать рабочий каталог к Ant'у, как системную переменную. На значке 'Мой компьютер' щёлкнуть правой кнопкой мышки и выбрать свойства. В появившемся окошке выбрать вкладку 'Дополнительно'.

Рисунок Б.17 Свойства системы

Внутри этой странички нажать кнопку 'Переменные среды', после чего появится соответствующее окошко. В нём надо в панели системных переменных нажать на кнопку 'Создать'. После чего в окне 'Изменение системной переменной' внести необходимую информацию: в поля имени переменной указать ANT_HOME, а в значении - абсолютный путь. После этого изменить значение Path, добавивши в конец значения через точку с запятой ANT_HOMEbin.

Рисунок Б.18. Переменные среды

9. Создание JMS PTP соединения.

Заходим в левой части панели среды разработки на меню Services, в появившемся древовидном списке выбираем Servers->GlassFish V2.

Рисунок Б.19. Закладка Services в среде NetBeans 6.0

Нажимаем на нём правой кнопкой мыши и выбираем View Admin Console. После этого в браузере откроется консоль.

Рисунок Б.20. Консоль GlassFish WEB-сервера. Логин страница

Вводим те данные логин и пароль, которые мы указывали при установке GlassFish'a. После чего нам откроется страница со всеми возможностями управления сервером.

Рисунок Б.21. Консоль GlassFish WEB-сервера. Главная страница.

Во всём этом разнообразии нас интересуют ресурсы, а именно JMS ресурсы. В нём есть две папочки - Connection Factories и Destination Resources. При создании записи в Connection Factories, данные должны соответствовать рисунку Б.3.16, а Destination Resources рисунку Б.3.17.

Рисунок Б.22. JMS Connection Factory

Рисунок Б.23 JMS Destination Resources

10. Добавление библиотек в проект

Добавляем необходимые библиотеки для проекта. Для этого в закладке Projects правой кнопкой мыши щёлкаем на UniversityPortal и выбираем в консольном меню Properties.

Рисунок Б.24. Закладка Projects в среде разработки NetBeans 6.0

В новом окне выбираем Libraries категории при помощи кнопки 'Add Jar/Folder…' указываем пути к jxl.jar, mysql-connector-java-5.0.7-bin.jar библиотекам. Таким же способом, только для модуля UniversityPortal-war указываем путь к jstl.jar.

Рисунок Б.25. Свойства проекта.

Б.4 АВТОМАТИЧЕСКОЕ ЗАПОЛНЕНИЕ СУБД НАЧАЛЬНЫМИ ДАННЫМИ

Для того, чтобы их инициализировать начальными данными, необходимо зайти на страницу http://<host_ip>:3306/UniversityPortal-war/faces/init.jsp и нажать появившуюся кнопку 'init'.

Рисунок Б.26. Страница инициализации базы данных

ПРИЛОЖЕНИЕ В

РУКОВОДСТВО ОПЕРАТОРА

1. Авторизация в системе

Для того, чтобы авторизоваться на сайте, необходимо зайти на страницу авторизации http://host_ip:8081/UniversityPortal-war/, и ввести свои данные (Рисунок В.1), где host_ip - ip адрес сервера, на котором запущен данный сервер

Рисунок В.1. Страница авторизации пользователей

При успешной авторизации, в зависимости от роли пользователю откроются разные страницы:

- если администратор (рис В.2)

Рис В.2. Главная страница административной консоли приложения

- если студент, гость, преподаватель (рис 4.4.12):

Рисунок В.3. Главная страница портала.

2. Добавление пользователей

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

Рисунок В.4. Страница редактирования/добавления пользователей.

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

3. Редактирование пользователей

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

Рисунок В.5. Ошибка при попытке редактирования/удаления записи таблицы, не выбравши строку.

Такая же инструкция для удаления пользователя. Для смены пароля, необходимо его выбрать, нажать на ссылку 'Змінити пароль', после этого откроется соответствующая страница (Рисунок В.6).

Рисунок В.6. Страница изменения пароля пользователя

4. Фильтр отображаемых пользователей в таблице

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

Рисунок В.7. Указание расположения фильтра на административной консоли

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

5. Администрирование сущностей

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

Рисунок В.8. Интерфейс однотипных страниц в административной консоли

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

Рисунок В.9. Страница редактирование специальностей/кафедр.

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

6. Администрирование общих стандартов высшего учебного заведения

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

Рисунок В.10. Страница для редактирования корпусов ВУЗ'а и установление времени для каждой пары.

Внутри этой страницы (Рисунок В.10) есть две ссылки на две страницы.

Рисунок В.11 Страница для задания специфических значений каждому из корпусов университета.

При переходе через 'Адмініструвати кабінети' мы попадаем на страницу (Рисунок В.11), где можно редактировать количество этажей каждого корпуса, количество кабинетов на каждом этаже и вместимость каждого кабинета.

Рисунок В.12 Страница, позволяющая импортировать данные о расписании из excel файла, и предоставляющая возможность привязки преподавателей к предметам.

Используя ссылку 'Адмініструвати уроки' открывается страница (Рисунок В.12) позволяющая импортировать данные о расписании через *.xls документ. Перед этим, необходимо установить с какой верхней левой ячейки в этом файле находятся данные, также количество групп в этом документе и количество учебных дней в неделе. После этого необходимо составить excel файл в следующем формате:

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

Рисунок В.13 Пример оформления расписания в необходимом, для распознавания программы анализатора, портала формате.

После того импортирования данных можно из этой информации сгенерировать уроки, которые будут по ним приведены. Это возможно сделать при помощи клавиши 'Скласти уроки з розкладу'. После завершения этой операции заполнится ниспадающее меню 'Група', которое показывает все группы, которые были указаны в импортируемом файле. Выбравши в нём какую-либо группу, заполняется таблица 'Викладачи і дісциплини' значениями, которые также выбираются из импортированного файла. При помощи этой таблицы и трёх ссылок, которые есть над ней, мы можем установить, редактировать, удалить связи между предметом и преподавателем. Причем идёт отдельные связи на преподавателя читающего лекции и преподавателя ведущего практические занятия. Не исключается возможность того, что это будет один человек. При попытке создать или редактировать связь появляется дополнительная панель с выбором двух преподавателей и кнопкой сохранения. Список преподавателей в ниспадающем меню зависит от того, какие дисциплины имеет право вести преподаватель.

7 Установление прав преподавателям на чтение дисциплин

При заходе на страницу редактирования предметов, через ссылку 'Адміністрування дисциплін' (рис В.14) с главной страницы консоли, возможен также способ установления прав преподавателю на чтение дисциплин. Для этого выбираем интересующего нас преподавателя в списке ниспадающего меню 'Викладачі', после этого выбираем предметы, которые преподаватель может вести, и нажимаем кнопку 'Присвоїти'.

Рисунок В.14 Страница изменения информации о читаемых предметах в университете. А также делегирования прав преподавания преподавателями этих дисциплин.

8 Преподавательский состав высшего учебного заведения

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

Гость кроме этого может посмотреть преподавательский состав и новости. Для этого есть два соседних с выбранной по умолчанию закладкой (Об університеті) 'Викладачі унівеситету' и 'Новини' соответственно.

Рисунок В.15 Страница всех преподавателей университета

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

9. Новости

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

Рисунок В.16 Страница новостей портала

10. Об университете

Выбравши закладку 'Об университете' можно почитать об истории создания этого учебного заведения. Какой преподавательский состав был у истоков истории университета, какие первоочередные стояли планы.

Рисунок В.17. Главная страница портала, при авторизации ролью студента.

11. Своя страница

Если зайти на портал под студентом или преподавателем появляется дополнительная закладка ('Своя сторінка') и 3 кнопки навигации ('Estimations', 'Література' и 'Скласти тести'), из кнопок для студента видимой есть только 'Література' (Рисунок В.17).

Рисунок В.18. Представление внутренних вкладок вкладки 'Своя сторінка'

При заходе на вкладку 'Своя сторінка', появляется возможность выбрать одну из 5 появившихся вкладок ('Розклад', 'Важливі повідомлення', 'Успішність', 'Отримані повідомлення' и 'Відправити повідомлення'), как показано на рисунке В.18.

11.1 Страница расписания занятий

Рисунок В.19. Расписание занятий студента на текущий семестр

Первая закладка 'Розклад' (Рисунок В.19) показывает расписание на текущий семестр.

11.2 Страница уведомлений

Рисунок В.20. Страница важных сообщений

На второй закладке 'Важливі повідомлення' (Рисунок В.20) можно посмотреть важные сообщения, отправленные преподавателями.

11.3 Страница успеваемости студента в текущем семестре

Рисунок В.21. Успеваемость студента в текущем семестре

На закладке 'Успішність' (Рисунок В.21) студент может посмотреть свою текущую успеваемость и посещаемость.

11.4 Страница полученных сообщений

РисунокВ.22. Полученные сообщения

На закладке 'Отримані повідомлення' (Рисунок В.22) можно просмотреть пришедшие сообщения.

Рисунок В.23. Результат нажатия кнопки 'Показати'

Просмотреть его можно, нажав кнопку 'Показати', после чего, в правом текстовом поле покажется тело сообщения.

Рисунок В.24 Результат нажатия кнопки 'Зберегти'

Если сообщения является необходимым в будущем, его можно сохранить, нажав кнопку 'Зберегти'. После чего оно исчезнет из колонки 'Отримані повідомлення' и появится в колонке 'Збережені повідомлення' (Рисунок В.24). Если письмо оставить в 'Отримані повідомлення', то после 7 дней оно автоматически удалится.

11.5. Страница отправки сообщений

Рисунок В.25. Страница отправки сообщений

На закладке 'Відправити повідомлення' (Рисунок В.25) можно отправить письмо студенту/преподавателю, в зависимости от того, какой пользователь пишет письмо. Для этого в ниспадающем меню 'Отримувач' необходимо выбрать требуемого человека, написать тему письма в 'Тема листа' и само сообщение в 'Зміст листа'. Для того, чтобы сделать письмо важным для получателя, необходимо поставить галочку напротив 'Термінове'.

12. Страница оценивания студентов.

Используя кнопки 'Виставити відмітки', 'Література' и 'Скласти тести' можно проставить оценки студентам, посмотреть/редактировать/добавить литературу на портал и посмотреть/редактировать/добавить тесты. Из этих трёх кнопок, для студентов видна лишь одна - 'Література'.

Рисунок В.26. Выставление оценок студентам. Шаг 1

Рисунок В.27. Выставление оценок студентам. Шаг 2

Рисунок В.28. Выставление оценок студентам. Шаг 3

Рисунок В.29. Выставление оценок студентам. Шаг 4

Рисунок В.30. Выставление оценок студентам. Шаг 5

При переходе на страницу 'Виставити відмітки' (Рисунок В.26) для того, чтобы увидеть таблицу со студентами какой-то группы (рисю В.29), необходимо выбрать группу (Рисунок В.27), предмет и занятие (Рисунок В.28). После этого откроется таблица со всеми студентами в ней и оценками/посещаемостью данного урока (Рисунок В.29). После нажатия на кнопку 'Виставити відмітку', в левой части экрана появляется панель (Рисунок В.30) для оценивания/редактирования выставленной оценки студенту либо его посещаемости.

13. Страница добавления и редактирования теста

Рисунок В.31 Страница для добавления и/или редактирования теста

При переходе на страницу 'Добавити/редагувати тест' (Рисунок В.31) мы видим с правой стороны панель для добавления/редактирования теста, посередине сверху фильтр, и посредине таблицу с тестами. При создании теста, необходимо указать тип теста: 'З однією вірною відповідю' 'З кількома вірними відповідями', либо 'Заповнити вільні місця'. После чего данная панель приобретает соответствующие поля для ввода. Рассмотрим панель, которая выбрана по умолчанию - 'З однією вірною відповідю'. Следующая информация, которую нам необходимо заполнить - это создать для данного теста уникальное имя, по которому впоследствии будет быстро его найти. После этого заполнить сам вопрос и возможные варианты ответа на него. После этого выбрать напротив тот вариант, который является верным и сохранить его. Если данные были внесены верно, то после сохранения этот тест появится в таблице.

14. Страница литературы

Рисунок В.32 Литература

При переходе на страницу 'Література' (Рисунок В.32) мы видим схожий дизайн страницы с 'Добавити/редагувати тест'. Отличия лишь заключаются в названии полей.

15. Страница нехватки прав пользователя

Рисунок В.33 Страница, которая показывается пользователю в случае нехватки прав доступа к ресурсу.

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

ПРИЛОЖЕНИЕ Г

КОД ПРОГРАММЫ

Код реализации каркаса:

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package utils;

import com.sun.data.provider.RowKey;

import com.sun.rave.web.ui.appbase.FacesBean;

import com.sun.webui.jsf.component.Button;

import com.sun.webui.jsf.component.DropDown;

import com.sun.webui.jsf.component.Field;

import com.sun.webui.jsf.component.TableRowGroup;

import generic.StringVariables;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.util.ArrayList;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Collection;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.logging.Level;

import java.util.logging.Logger;

import services.EntityService;

import universityportalwar.SessionBean1;

/**

*

* @author Bogdan_Nechyporenko

*/

public class TableUtil {

private static final String methodNameChoosedItemId = 'getChoosedItemId';

private static final String methodNamePopulateFields = 'populateFields';

private static final String methodNameChangeWasError = 'changeWasError';

private static final String methodNameError = 'error';

private static final ObjectUtil objectUtil = new ObjectUtil();

public static boolean isAdd() {

boolean result = false;

String addAction = StringVariables.add;

String prevAction = SessionBean1.getPreviousAction();

try {

result = prevAction.startsWith(addAction);

} catch (NullPointerException ex) {

Logger.getLogger(TableUtil.class.getName()).

log(Level.SEVERE, null, ex);

}

return result;

}

public static boolean isEdit() {

boolean result = false;

String editAction = StringVariables.edit;

result = SessionBean1.getPreviousAction().startsWith(editAction);

return result;

}

public static boolean isOpenForAdd() {

return SessionBean1.getPreviousAction().startsWith(StringVariables.openFormForAdd);

}

public static boolean isOpenForEdit() {

return SessionBean1.getPreviousAction().startsWith(StringVariables.openFormForEdit);

}

public Long getChoosedIdOnSpecificJSFPage(TableRowGroup trg,

String classSimpleName) {

RowKey[] choosedUsers = trg.getSelectedRowKeys();

if (choosedUsers.length != 0) {

Long rowId =

Long.parseLong((choosedUsers[0]).getRowId());

if (rowId != null) {

try {

Object obj =

objectUtil.getObjectByIndex(classSimpleName,

rowId.intValue());

Method method = obj.getClass().getDeclaredMethod('getId',

new Class[]{});

return (Long) method.invoke(obj, new Object[]{});

} catch (Exception ex) {

Logger.getLogger(TableUtil.class.getName()).

log(Level.SEVERE, null, ex);

}

}

}

return null;

}

public static void setTextForAddEditButton(Button button, String addText,

String editText) {

if (isOpenForAdd()) {

button.setText(addText);

} else if (isOpenForEdit()) {

button.setText(editText);

} else {

button.setText(null);

}

}

public static boolean conditionForRetrieveAddEditAdditionalForm(boolean wasError) {

return ((isOpenForAdd() || isOpenForEdit()) &&

!wasError);

}

public static void prerenderTemplate(Object thisObject, Boolean wasError) {

try {

Class clazz = thisObject.getClass();

String methodNameForVisibility =

'setForSomeComponentsOnFormVisibility';

String methodNameForButton = 'setTextForAddEditButton';

Method methodForVisibility = clazz.getDeclaredMethod(methodNameForVisibility,

new Class[]{Boolean.TYPE});

Method methodForButton =

clazz.getDeclaredMethod(methodNameForButton, new Class[]{});

methodForVisibility.setAccessible(true);

methodForButton.setAccessible(true);

methodForVisibility.invoke(thisObject, false);

if (conditionForRetrieveAddEditAdditionalForm(wasError)) {

methodForVisibility.invoke(thisObject, true);

methodForButton.invoke(thisObject, new Object[]{});

}

} catch (Exception ex) {

Logger.getLogger(TableUtil.class.getName()).log(Level.SEVERE, null, ex);

}

}

public static String addEditFunctionality(Object thisObject,

Class entityClass, String previousActionName, String[] componentNamesArr, Class[] parameterTypesArr) {

SessionBean1.setPreviousAction(previousActionName);

Object entityObject = getEntityAndSetFieldsWithValues(thisObject,

entityClass, componentNamesArr, parameterTypesArr);

persistOrMergeEnity(entityObject);

return null;

}

public static void persistOrMergeEnity(Object entityObject) {

if (entityObject != null) {

if (TableUtil.isAdd()) {

(new EntityService()).persistEntity(entityObject);

} else if (TableUtil.isEdit()) {

(new EntityService()).mergeEntity(entityObject);

}

}

}

public static Object getEntityAndSetFieldsWithValues(Object thisObject,

Class entityClass, String[] componentNamesArr,

Class[] parameterTypesArr) {

try {

Collection<String> componentNames = Arrays.asList(componentNamesArr);

Map<String, Method> declaredMethods = getDeclaredMethods(thisObject); setAccessibilityForMethods(declaredMethods.values().toArray(new Method[]{}),true);

Object entityObject = getEntity(thisObject, entityClass); if (entityObject != null) {

Object[] inputFields = getValuesOfComponents(thisObject,

componentNames);

if (!conditionForNullOrEmptyOneOfElementInArray(inputFields)) {

Map<String, Map<Class, Object>> setterNamesAndValues = getSetterNamesAndValues(thisObject, componentNames, Arrays.asList(parameterTypesArr));

invokeEntitySetterMethods(entityObject,

setterNamesAndValues);

return entityObject;

} else {

ifWasntChooseIdAndPressEditOrRemove(thisObject);

}

}

} catch (Exception ex) { Logger.getLogger(TableUtil.class.getName()).log(Level.SEVERE, null,

ex);

}

return null;

}

public static Object getEntity(Object thisObject, Class entityClass)

throws Exception {

if (TableUtil.isAdd()) {

return ReflectionUtil.createEntity(entityClass);

} else if (TableUtil.isEdit()) {

return getEntityByChoosedTableRowId(thisObject, entityClass,

methodNameChoosedItemId);

}

return null;

}

private static Object getEntityByChoosedTableRowId(Object thisObject,

Class entityClass, String methodName) throws Exception {

Long itemId =

(Long) getDeclaredMethods(thisObject).get(methodName).

invoke(thisObject, new Object[]{});

if (itemId != null) {

return (new EntityService()).getEntityById(entityClass,

itemId);

}

return null;

}

private static Long getEntityIdOfChoosingTableRow(Object thisObject)

throws Exception {

return (Long) getDeclaredMethods(thisObject).get(methodNameChoosedItemId).

invoke(thisObject, new Object[]{});

}

public static String fillAdditionalEditForm(Object thisObject,

Class entityClass, String[] componentNames,

String previousActionName) {

SessionBean1.setPreviousAction(previousActionName);

try {

List<String> temp = new ArrayList<String>();

for (String compomentName : componentNames) {

temp.add('get' + makeFirstLetterInUpperCase(compomentName));

}

String[] getterNames = temp.toArray(new String[]{});

Map<String, Method> declaredMethods = getDeclaredMethods(thisObject);

Method[] methods =

(declaredMethods.values()).toArray(new Method[]{});

setAccessibilityForMethods(methods, true);

Long itemId = (Long) declaredMethods.get(methodNameChoosedItemId).invoke(thisObject,

new Object[]{});

if (itemId != null) {

Object entityObject = (new EntityService()).getEntityById(entityClass, itemId);

if (entityObject != null) {

Object[] functionParameters = {getValuesFromEntityGetterMethods(entityObject, getterNames) };

declaredMethods.get(methodNamePopulateFields).invoke(thisObject,

functionParameters);

}

} else {

ifWasntChooseIdAndPressEditOrRemove(thisObject);

return '';

}

return StringVariables.editSpeciality;

} catch (Exception ex) { Logger.getLogger(TableUtil.class.getName()).log(Level.SEVERE, null,

ex);

}

return null;

}

public static Map<String, Method> getDeclaredMethods(Object thisObject)

throws NoSuchMethodException {

Map<String, Method> methodsMap = new HashMap<String, Method>();

Class clazz = thisObject.getClass();

Method methodChoosedItemId =

clazz.getDeclaredMethod(TableUtil.methodNameChoosedItemId,

new Class[]{});

Method methodPopulateFields = clazz.getDeclaredMethod(TableUtil.methodNamePopulateFields,

String[].class);

Method methodChangeWasError =

clazz.getDeclaredMethod(TableUtil.methodNameChangeWasError,

new Class[]{Boolean.TYPE});

Method methodError =

FacesBean.class.getDeclaredMethod(TableUtil.methodNameError,

new Class[]{String.class});

methodsMap.put(methodNameChoosedItemId, methodChoosedItemId);

methodsMap.put(methodNamePopulateFields, methodPopulateFields);

methodsMap.put(methodNameChangeWasError, methodChangeWasError);

methodsMap.put(methodNameError, methodError);

return methodsMap;

}

public static Map<String, Map<Class, Object>> getSetterNamesAndValues(Object thisObject,

Collection<String> componentNames,

Collection<Class> typesOfInputValues) {

List<Object> resultObjectValueList = null;

try {

resultObjectValueList = Arrays.asList(getValuesOfComponents(thisObject, componentNames));

Map<String, Map<Class, Object>> resultMap =

new HashMap<String, Map<Class, Object>>();

Iterator componentNamesIterator = componentNames.iterator();

Iterator objectValuesOfComponentsIterator =

resultObjectValueList.iterator();

Iterator typesOfInputValuesIterator = typesOfInputValues.iterator();

while (componentNamesIterator.hasNext()) {

Map<Class, Object> composeMap = new HashMap<Class, Object>();

String componentName = componentNamesIterator.next().toString();

Object objectValueOfComponent =

objectValuesOfComponentsIterator.next();

Class typeClass = (Class) typesOfInputValuesIterator.next();

composeMap.put(typeClass, objectValueOfComponent);

resultMap.put('set' + makeFirstLetterInUpperCase(componentName),

composeMap);

}

return resultMap;

} catch (Exception ex) {

Logger.getLogger(TableUtil.class.getName()).

log(Level.SEVERE, null, ex);

}

return null;

}

public static Object[] getValuesOfComponents(Object thisObject,

Collection<String> componentNames) {

Object[] resultArray = null;

List<Object> componentValuesList = new ArrayList<Object>();

try {

for (String componentName : componentNames) {

Object componentObject =

getComponentObjectByHisName(thisObject, componentName);

Method getValueMethod = null;

if (componentObject instanceof Field) {

getValueMethod =

Field.class.getDeclaredMethod('getValue', new Class[]{});

} else if (componentObject instanceof DropDown) {

getValueMethod =

DropDown.class.getDeclaredMethod('getValue', new Class[]{});

}

if (getValueMethod != null) {

componentValuesList.add(getValueMethod.invoke(componentObject,

new Object[]{}));

}

}

} catch (Exception ex) {

Logger.getLogger(TableUtil.class.getName()).

log(Level.SEVERE, null, ex);

}

resultArray = componentValuesList.toArray();

return resultArray;

}

private static Object getComponentObjectByHisName(Object thisObject,

String componentName) throws Exception {

Method objectsGetter = thisObject.getClass().getDeclaredMethod('get' +

makeFirstLetterInUpperCase(componentName) + 'Field',

new Class[]{});

return objectsGetter.invoke(thisObject, new Object[]{});

}

private static String makeFirstLetterInUpperCase(String word) {

return (new StringBuilder(word)).replace(0, 1, word.substring(0, 1).

toUpperCase()).toString();

}

private static void invokeEntitySetterMethods(Object entity,

Map<String, Map<Class, Object>> setterNamesAndValues)

throws NoSuchMethodException, IllegalAccessException,

IllegalArgumentException, InvocationTargetException {

for (Map.Entry<String, Map<Class, Object>> entry : setterNamesAndValues.entrySet()) {

String methodName = entry.getKey();

for (Map.Entry<Class, Object> parameterAndValue : entry.getValue().entrySet()) {

Class classType = parameterAndValue.getKey();

Method tempMethod = entity.getClass().getDeclaredMethod(methodName,

new Class[]{classType});

tempMethod.setAccessible(true);

if (classType == Integer.class) {

tempMethod.invoke(entity, Integer.valueOf(parameterAndValue.getValue().toString()));

} else if (classType == String.class) {

tempMethod.invoke(entity, parameterAndValue.getValue().toString());

}

}

}

}

private static void setAccessibilityForMethods(Method[] methods,

boolean isAccessible) {

for (Method method : methods) {

method.setAccessible(isAccessible);

}

}

private static String[] getValuesFromEntityGetterMethods(Object entity, String[] getterNames)

throws NoSuchMethodException, IllegalAccessException,

IllegalArgumentException, InvocationTargetException {

Integer length = getterNames.length;

String[] result = new String[length];

for (int index = 0; index < length; index++) {

Method tempMethod = entity.getClass().getDeclaredMethod(getterNames[index],

new Class[]{});

tempMethod.setAccessible(true);

result[index] = tempMethod.invoke(entity, new Object[]{}).toString();

}

return result;

}

private static boolean conditionForNullOrEmptyOneOfElementInArray(Object... objects) {

for (Object obj : objects) {

if (obj == null || ''.equals(obj.toString())) {

return true;

}

}

return false;

}

public static String getNameOfPreviousActionWithinAddEdit() {

String previousAction = SessionBean1.getPreviousAction();

if (previousAction.startsWith(StringVariables.openFormForAdd)) {

return StringVariables.add;

} else if (previousAction.startsWith(StringVariables.openFormForEdit)) {

return StringVariables.edit;

}

return null;

}

public static boolean removeImplementation(Object thisObject,

Object entity) {

try {

Long entityId = getEntityIdOfChoosingTableRow(thisObject);

if (entityId != null) {

(new EntityService()).removeEntity(entity, entityId);

return true;

} else {

ifWasntChooseIdAndPressEditOrRemove(thisObject);

}

} catch (Exception ex) {

Logger.getLogger(TableUtil.class.getName()).log(Level.SEVERE, null,

ex);

}

return false;

}

public static void ifWasntChooseIdAndPressEditOrRemove(Object thisObject) {

try {

getDeclaredMethods(thisObject).get(methodNameError).

invoke(thisObject,

StringVariables.ifItemWasntChoosed);

getDeclaredMethods(thisObject).get(methodNameChangeWasError).

invoke(thisObject, true);

} catch (Exception ex) {

Logger.getLogger(TableUtil.class.getName()).log(Level.SEVERE, null,

ex);

}

}

}

ref.by 2006—2025
contextus@mail.ru