Проблемная
ситуация
|
Способы
разрешения проблемной ситуации
|
Заполнение медицинской
карты вручную
|
Внедрение и использование
информационной системы, позволяющей выполнять проверку вводимых данных и
автоматизацию работы с медицинской картой
|
Проверка и составление
списков прошедших флюорографию вручную
|
Внедрение и использование
информационной системы, позволяющей выполнить замену ручной работы на
автоматизированную
|
Ручная обработка и
составление отчетности врачами
|
|
Как видно из таблицы 1.8 для решения данных проблем необходимо создать
новую систему управления данными, которая позволила бы выполнять проверку
данных автоматически, и как следствие сократить время на составление
отчетности. Отсюда вытекает то, что система должна иметь аналог медицинской
карты в электронном виде. Таким образом, система должна предоставлять работу с
аналогом карты так же как это делалось в бумажном виде.
1.2 Формулировка задач проектирования
1.2.1 Общие сведения
Полное наименование проекта - «Система управления данными медицинского
центра».
Код системы - «Medic».
Наименование организации-разработчика - Северо-Кавказский государственный
технический университет, факультет ИТТ, кафедра прикладной информатики, студент
группы ПИ-061 Прохоров Константин Дмитриевич
Наименование организации-заказчика - медицинский центр Северо-Кавказского
государственного технического университета.
Проведение данного вида работ осуществляется на основании служебной
записки о необходимости автоматизации рабочих мест сотрудников и служебной
записки о направлении на выполнение дипломной работы. Согласно данным
документам медицинский центр поручает студенту группы ПИ-061 и сотруднику
образовательно-информационного центра, отдела по эксплуатации и обслуживанию
компьютерных классов создание программно-технического комплекса.
Источники финансирования - работы проводятся без оплаты.
1.2.2 Назначение и цели создания информационной системы
Основное назначение создаваемой информационной системы - автоматизация
работы врача с пациентами и создание разного рода отчетов. Вводимые данные
проверяются согласно методикам, установленными соответствующими документами.
Таким образом, в результате внедрения разработанной информационной
системы предполагается достичь следующих показателей объекта автоматизации:
- время на доступ к требуемой информации уменьшается до минимума;
- снижается вероятность ошибки при вводе информации и
формировании отчетности;
- вводимая информация проверяется на уникальность.
1.2.3 Характеристика объекта автоматизации
Объектом автоматизации является каждое рабочее место врачей в
подразделении, на котором осуществляется одна или несколько следующих задач:
- прием студентов или сотрудников;
- уточнение данных медицинских карт;
- прием справок о прохождении флюорографии;
- составление отчетности.
1.2.4 Требования к системе
Разрабатываемая информационная система должна удовлетворять требованиям
надежности и целостности данных, то есть должна контролироваться правильность и
непротиворечивость данных, вводимых пользователем.
Информационная система должна не только обеспечивать эффективное решение
планируемых задач, но и быть удобна пользователю с точки зрения проектирования
пользовательского интерфейса.
Кроме требований к системе в целом, выделяются также требования к
задачам, выполняемым системой. Основной задачей является максимальное ускорение
доступа к информации. Для эффективного функционирования системы данная задача
должна решаться в сжатые сроки, то есть алгоритм ее решения должен быть
организован таким образом, чтобы обеспечить минимальное время выполнения.
1.2.5 Состав и содержание работ по созданию системы
Предусмотрен следующий состав и содержание работ по созданию
информационной системы:
– изучение предметной области и составление технического задания с 10
января по 8 февраля 2011 г.;
– кодирование с 8 по 20 февраля 2011 г.;
– отладка и тестирование с 20 по 28 февраля 2011 г.;
– подготовка технической документации с 28 февраля по 4 марта 2011
г.;
– сдача проекта заказчику с 4 по 6 марта 2011 г.
1.2.6 Порядок контроля приемки системы
Контроль приемки системы осуществляет комиссия, назначаемая главным
врачом медицинского центра СевКавГТУ. В ходе приемки проверяются
работоспособность форм и правильность выполняемых расчетов. По результатам
приемки работы оформляется акт внедрения результатов дипломного проекта.
1.2.7 Требования к составу и содержанию работ по подготовке
объекта автоматизации к вводу системы в действие
Для ввода системы в действие следует произвести следующие работы:
1. Установить следующее программное обеспечение на сервер:
- PostgreSQL версии 8.4.2 или выше;
- Apache не ниже 2.0;
- Perl версии 5.8.9 и модули Template, CGI, DBI, Spreadsheet::WriteExcel, utf8, Encode,
POSIX, CGI::Session, DBI::PgPP.
2. Произвести обучение системного администратора.
3. Произвести обучение пользователей работе с разработанной
системой.
1.2.8 Требование к документированию
Разработчик предоставляет файлы информационной системы «Medic» в электронном формате на CD-ROM вместе с результатами тестирования и краткими
инструкциями для администратора и врачей.
.2.9 Источники разработки
Источниками разработки являются:
·
заказ на
разработку информационной системы;
·
материалы и
отчеты по преддипломной практике;
·
отчеты по
флюорографии студентов;
·
прививочные
журналы.
Выводы
1. Медицинский центр СевКавГТУ является подразделением Северо-Кавказского
государственного технического университета и его основная задача оказание
необходимой медицинской помощи студентам и сотрудникам университета.
2. Анализ проблемных ситуаций выявил, отсутствие автоматизированных
процессов в работе сотрудников при составлении списков флюорографии и различных
отчетов, заполнении медицинской карты.
3. Для устранения проблемной ситуации необходимо разработать
информационную систему, включающую в себя базу данных, пользовательский
интерфейс, программу управления базой данных и выявить экономическую
целесообразность проекта.
2. РЕАЛИЗАЦИЯ ИНФОРМАЦИОННОЙ СИСТЕМЫ «MEDIC»
2.1 Обоснование выбора среды разработки
Основными требования к разрабатываемой информационной системе, являются
стабильность, масштабируемость, поддержка работы нескольких пользователей,
совместимость, полнота.
Выбор среды разработки информационной системы заключается в определении
требований к программному продукту и выбора наиболее подходящих технологий для
их решения. Таким образом, с учетом фактора оснащенности подразделения
вычислительной техникой, было принято решение:
1. О разработке базы данных на основе PostgreSQL, что обусловлено ее
современностью, бесплатностью и конкурентоспобностью, в сравнении с
аналогичными продуктами. В PostgreSQL реализованы многие возможности, обычно
присутствующие только в коммерческих СУБД, таких как DB2 и Oracle. Простота
расширения - в PostgreSQL поддерживаются пользовательские операторы, функции,
методы доступа и типы данных. Процедурные языки - предусмотрена поддержка
внутренних процедурных языков, в том числе специализированного языка PL/pgSQL,
являющегося аналогом PL/SQL, процедурного языка Oracle. Одним из преимуществ
PostgreSQL является возможность использования Perl, Python и TCL в качестве
внутренних процедурных языков.
2. О разработке клиентской части основанной на технологии html, что
обусловлено возможностью организации кроссплатформенности как браузеров, так и
операционных систем.
. О разработке серверной части программного продукта на языке
Perl, что обусловлено легкостью, быстротой и понятностью, которую вложили разработчики
в этот язык программирования и возможностью простой работы с html-шаблонами,
которые позволяют генерировать динамические страницы.
2.2 Реализация информационной системы «Medic»
2.2.1 Концептуальное проектирование системы «Medic»
Концептуальное проектирование технических систем - начальная стадия
проектирования, на которой принимаются определяющие последующий облик решения,
и проводится исследование и согласование параметров созданных технических
решений с возможной их организацией.
В ходе концептуального проектирования было решено создать 29 страниц,
описанных в таблице 2.1.
Таблица 2.1 - Страницы и их описание
Страница
|
Назначение
|
1
|
2
|
Start page
|
Страница
приветствия, которая появляется при самом первом входе пользователя в
систему, дальше он ее не видит, так как после выхода пользователя,
запоминается последняя посещенная страница, с которой он и начинает
|
Права
пользователей
|
Является страницей-подменю,
где пользователь может выбрать, с чем ему работать: группа, принадлежность пользователей и пользователи
|
Группы
|
На этой
странице предлагается работа с группами: создание, удаление и редактирование
группы
|
Принадлежность
пользователей
|
На этой
странице предлагается работа с группами прав пользователей, что значительно
ускоряет процесс назначения прав, так как достаточно выбрать пользователя и
отметить группы к которым он должен относиться, после чего система
автоматически даст необходимые права, которые соответствуют этой группе, при
этом пользователь может относиться к нескольким группам
|
1
|
2
|
Пользователи
|
Предлагается
работать именно с пользователем: создание нового пользователя, редактирование
личных данных или редактирование прав заданного пользователя
|
Окна и функции
|
Является страницей-подменю,
где пользователь может выбрать с чем ему работать: окна или функции
|
Окна
|
Предлагает
работать с окнами: создать новое окно (страницу), отредактировать название
или имя файла уже существующей страницы и удалить не нужную страницы
|
Функции
|
Предлагается
работать с функциями, о которых уже было сказано выше, пользователь может
создать новые функции если это требуется (например дальнейшая разработка
системы), редактирование названия функции и удаление ее, в случае если она
потеряет актуальность
|
Редактор
населенных пунктов
|
Является страницей-подменю,
где пользователь может выбрать, с чем ему работать: регион, район и город
|
Регион
|
Позволяет
работать со списком регионов: создание, редактирование и удаление
|
Район
|
Позволяет
работать со списком районов: создание, редактирование и удаление
|
Город
|
Позволяет
работать со списком городов: создание, редактирование и удаление
|
Должности
сотрудников
|
Позволяет
работать со списком должностей сотрудников: создание, редактирование и
удаление
|
Журнал прививок
|
Позволяет
работать со списком прививок. Создание, редактирование и удаление
|
Тип диагноза
|
Позволяет
работать со списком диагнозов: создание, редактирование и удаление
|
Журнал диагнозов
|
Позволяет
работать со списком диагнозов: создание, редактирование и удаление
|
Контингент
|
Является страницей-подменю,
где пользователь может выбрать, с чем ему работать: факультеты, группы или
студенты
|
Факультеты
|
Позволяет
работать со списком факультетов: создание, редактирование и удаление
|
Группы
|
Позволяет
работать со списком групп: создание, редактирование и удаление
|
1
|
2
|
Студенты
|
Позволяет
работать со списком студентов: создание, редактирование и удаление
|
Карты
|
Является страницей-подменю,
где пользователь может выбрать, с чем ему работать: добавление карты и
редактирование карты
|
Добавление карты
|
Позволяет
создать карту для студента, процесс аналогичный заведению новой карты в
бумажной форме
|
Редактирование
карты
|
Позволяет
видеть общую информацию о медицинской карте и редактировать ее в случае
необходимости
|
Диагнозы
|
Является страницей-подменю,
где пользователь может выбрать, с чем ему работать: история болезней и прием
больного
|
История болезней
|
Отображает
общую информацию о всех посещениях и в случае необходимости просмотр
подробностей
|
Прием больного
|
Служит для
внесения информации о посещении студентом врача
|
Флюорография
|
Отображает списки
флюорографии, в которых указывается статус прохождения (пройдена или не
пройдена), а так вносить дату последнего прохождения. Так же формирует отчеты
по группе и факультету
|
Прививки
|
Отображает
список сделанных прививок с полной информацией, а так же позволяет вносить
запись о новой прививке
|
Справка
|
Отображает
справку по системе, при нажатии на кнопку справки, отображается справка по
окну из которого она была вызвана, но так же пользователь может перейти в
содержание справки, где будет список всех доступных ему окон
|
Схема расположения станиц представлена на рисунке 2.1.
Рисунок 2.1 - Концептуальная схема расположения страниц системы «Medic»
Концептуальная схема позволяет наглядно показать расположение всех
страниц системы «Medic».
2.2.2 Создание логической модели базы данных информационной
системы
Определение сущностей модели. В процессе проектирования базы данных вся
требуемая информация была разделена на 28 сущностей (таблиц):
- area (далее как район) - содержит в себе список район, из которых прибыли
студенты на обучение в университете;
- card (далее как карта) - содержит в себе информацию о
медицинской карте;
- comments (далее как комментарии) -
комментарии к диагнозу;
- diagnosis (далее как диагнозы) - история
диагнозов студента ;
- employees (далее как информация_сотруднике) -
информация о сотрудниках;
- faculty (далее как факультет) - список факультетов;
- fluorography (далее как флюорография) - история
прохождения флюорографии студентом ;
- func (далее как функции) - список функций работы с
системой;
- group_fac
(далее как группа_факультета) - список групп в факультете;
- grp (далее как группа) - список групп для работы с
правами доступа к системе;
- grp_func
(далее как группа_функция) - служит для реализации связи М:М между таблицами
группа и функция;
- history_connections (далее как история_соединений) - история всех соединений к базе данных,
служит для мониторинга;
- history_session
(далее как история_сессий) - история всех сессий, служит для мониторинга всех
посещений сотрудника;
- jornal_diagnosis (далее как журнал_диагнозов) - журнал диагнозов;
- jornal_vaccin
(далее как журнал_прививок) - журнал прививок;
- post (далее как должность) - должность сотрудников;
- region (далее как регион) - список регионов;
- sesion (далее как сессия) - список последних сессий
сотрудников;
- sot (далее как сотрудник) - список сотрудников;
- sot_func
(далее как сотрудник_функции) - служит для реализации связи М:М между таблицами
сотрудник и функции;
- sot_grp
(далее как сотрудник_группа) - служит для реализации связи М:М между таблицами
сотрудник и группа;
- students (далее как студенты) - список
студентов;
- town (далее как город) - список городов;
- transaction_history (далее как история_транзакций) - история транзакций,
служит для мониторинга действий пользователя по вносимым изменениям;
- treatment (далее как лечение) - назначенное
лечение к диагнозу;
- type_diagnosis (далее как тип_диагноза) - список диагнозов;
- vaccine (далее как прививки) - история всех прививок
студента;
- wnd (далее как окна) - список окон приложения для
управления;
Инфологическое проектирование. Цель инфологического моделирования -
обеспечение наиболее естественных для человека способов сбора и представления
той информации, которую предполагается хранить в созданной БД. Поэтому
инфологическую модель пытаются строить по аналогии с естественным языком.
Основными конструктивными элементами инфологических моделей являются сущности,
связи между ними и их свойства [14]. Модель «сущность - связь» спроектированной
базы данных приведена на рисунке 2.2.
Результатом инфологического проектирования является концептуальная
модель, которая представляет структуру данных не зависимую от любой физической
реализации. Отношения между сущностями приведены в таблице 2.2
Таблица 2.2 - Отношения между сущностями
Номер связи
|
Родительская
сущность
|
Дочерняя
сущность
|
Тип связи
|
1
|
2
|
3
|
4
|
1
|
Сотрудник
|
Функции
|
М:М
|
2
|
Группа
|
Функции
|
М:М
|
3
|
Окна
|
Функции
|
М:М
|
4
|
Окна
|
группа
|
М:М
|
5
|
Сотрудник
|
Группа
|
М:М
|
6
|
Сотрудник
|
Информация_сотруднике
|
1:М
|
7
|
Сотрудник
|
Должность
|
1:М
|
8
|
Сотрудник
|
Диагнозы
|
1:М
|
9
|
Сотрудник
|
Прививки
|
1:М
|
10
|
Сотрудник
|
Сессия
|
1:М
|
11
|
Факультет
|
Группа
|
1:М
|
12
|
Группа
|
Студент
|
1:М
|
13
|
Студент
|
Карта
|
1:М
|
14
|
Карта
|
Регион
|
1:М
|
15
|
Карта
|
Район
|
1:М
|
16
|
Карта
|
Город
|
1:М
|
17
|
Регион
|
Район
|
1:М
|
18
|
Район
|
Город
|
1:М
|
19
|
Карта
|
Флюорография
|
1:М
|
20
|
Карта
|
Диагнозы
|
1:М
|
21
|
Карта
|
Прививки
|
1:М
|
22
|
Диагнозы
|
Комментарий
|
1:М
|
23
|
диагнозы
|
лечение
|
1:М
|
24
|
диагнозы
|
журнал_диагнозов
|
1:М
|
25
|
диагнозы
|
тип_диагноза
|
1:М
|
26
|
прививки
|
журнал_прививок
|
1:М
|
Инфологическая модель представлена на рисунке 2.2
Рисунок 2.2 - Инфологическая модель БД
Как видно из рисунка 2.2 и таблицы 2.2 между таблицами связи 1, 2, 3, 4,
5 являются связями «многие ко многим», а все остальные «один ко многим».
Задание первичных ключей сущностей. Ключ - это минимальный набор
атрибутов, по значениям которых можно однозначно найти требуемый экземпляр
сущности. Это одно из основных понятий баз данных, используемых при контроле
целостности информации. Разделяют первичные и внешние ключи. Первичный ключ
- это уникальное поле (или несколько полей), однозначно определяющее записи
таблицы базы данных. Внешние ключи - это поля таблицы, которые, как
правило, соответствуют первичным ключам из других таблиц. Первичный ключ не
может принимать неопределённые значения [17].
Ниже, в таблице 2.3, приведены ключи для каждой сущности.
Таблица 2.3 - Ключи
Таблица
|
Ключ
|
Тип ключа
|
1
|
2
|
3
|
район
|
id_area
|
primary
|
|
id_region
|
regular
|
карта
|
id_card
|
primary
|
|
id_stud
|
regular
|
|
id_region
|
regular
|
|
id_area
|
regular
|
|
id_town
|
regular
|
комментарии
|
id_comments
|
primary
|
|
id_comments
|
regular
|
диагнозы
|
id_diag
|
primary
|
|
id_card
|
regular
|
|
id_sot
|
regular
|
|
id_type_diag
|
regular
|
|
id_comments
|
regular
|
диагнозы
|
id_treatment
|
regular
|
|
id_jornal_diag
|
regular
|
информация_сотруднике
|
id_empl
|
primary
|
|
id_sot
|
regular
|
факультет
|
id_fac
|
primary
|
флюорография
|
id_fluor
|
primary
|
|
id_card
|
regular
|
функции
|
func_id
|
primary
|
группа_факультета
|
id_gr
|
primary
|
|
id_fac
|
regular
|
группа
|
id
|
primary
|
группа_функция
|
id
|
primary
|
|
func_id
|
regular
|
|
wnd_id
|
regular
|
|
grp_id
|
regular
|
история_соединений
|
id_connect
|
primary
|
история_сессий
|
id_ses
|
primary
|
журнал_диагнозов
|
id_jornal_diag
|
primary
|
журнал_прививок
|
id_jornal_vaccin
|
primary
|
должность
|
id_post
|
primary
|
|
id_sot
|
regular
|
регион
|
id_region
|
primary
|
сессия
|
sesion
|
primary
|
|
id_sot
|
regular
|
сотрудник
|
id_sot
|
primary
|
сотрудник_функции
|
id
|
primary
|
|
sot_id
|
regular
|
|
func_id
|
regular
|
|
wnd_id
|
regular
|
id_sg
|
primary
|
|
grp_id
|
regular
|
|
sot_id
|
regular
|
студенты
|
id_stud
|
primary
|
|
id_gr
|
regular
|
город
|
id_town
|
primary
|
|
id_area
|
regular
|
история_транзакций
|
id_tran
|
primary
|
лечение
|
id_treatment
|
primary
|
тип_диагноза
|
id_type_diag
|
primary
|
прививки
|
id_vaccin
|
primary
|
прививки
|
id_card
|
regular
|
|
id_sot
|
regular
|
|
id_jornal_vaccin
|
regular
|
окна
|
id_wnd
|
primary
|
Теперь можно приступить к более тщательному анализу данных и объединению
отдельных элементов данных в объекты. Эти объекты станут впоследствии основой
для создания таблиц в проектируемой базе данных.
Даталогическая модель. Даталогическое проектирование - создание схемы базы данных на
основе конкретной модели данных, например, реляционной
модели данных. Для реляционной модели данных даталогическая модель - набор схем отношений,
обычно с указанием первичных ключей, а также «связей» между
отношениями, представляющих собой внешние ключи[18].
Для даталогических моделей определена методология построения
диаграмм, IDEF.-
методологии семейства ICAM (Integrated Computer-Aided Manufacturing) для
решения задач моделирования сложных систем, позволяет отображать и
анализировать модели деятельности широкого спектра сложных систем в различных
разрезах. При этом широта и глубина обследования процессов в системе
определяется самим разработчиком, что позволяет не перегружать создаваемую
модель излишними данными[19].
На рисунке 2.3 показана даталогическая модель базы данных с
использование методологии IDEF1X.
IDEF1X (IDEF1 Extended) - методология построения реляционных структур
(баз данных), относится к типу методологий «Сущность-взаимосвязь» и, как
правило, используется для моделирования реляционных баз данных, имеющих
отношение к рассматриваемой системе[19].
Рисунок 2.3 - Даталогическая модель БД
Из рисунка 2.2 видны все реализованные сущности в таблицы и атрибуты
сущностей в поля таблицы с заданными типами данных.
2.2.3 Реализация серверной части приложения
При проектировании серверной части было принято использовать методы
модульного программирования.
Модульное программирование - метод разработки программ,
предполагающий разбиение программы на независимые модули.
Эта концепция дает возможность легко составлять и отлаживать программы,
функциональные компоненты такой программы могут быть написаны и отлажены
порознь. Модульную программу легче сопровождать и модифицировать.
Функциональные компоненты могут быть изменены, переписаны или заменены без
изменений в остальных частях.
Разработанная система содержит в себе модули:
- index.cgi - выполняет все проверки и подключает необходимый модуль окна и
шаблон этого окна;
- Templete.pm - отвечает за генерацию меню;
- ConnectDB.pm - отвечает за соединение с базой данных;
- exel.pm - модуль генерации отчетов по флюорографии и
привочному журналу;
- exel_card.pm - модуль генерации титульного листа медицинской
карты;
- kernel.pm - отвечает за проверку логина и пароля, получения
сессии, получения номера последнего окна;
- ses.pm - отвечает за проверку номера сессии;
- и модули окон с шаблонами, отвечающие за поведение окон
клиентской части описанных в таблице 2.4.
Таблица 2.4 - Файлы модулей и шаблоны окон
Страница
|
Файл шаблона
|
Файл модуля
|
1
|
2
|
|
Start page
|
page_0.tt
|
page_0.pm
|
Права
пользователей
|
page_1.tt
|
page_1.pm
|
Группы
|
page_2.tt
|
page_2.pm
|
Принадлежность
пользователей
|
page_3.tt
|
page_3.pm
|
Пользователи
|
page_3.tt
|
page_3.pm
|
Окна и функции
|
WndAndFunc.tt
|
WndAndFunc.pm
|
Окна
|
Wnds.tt
|
Wnds.pm
|
Функции
|
Func.tt
|
Func.pm
|
Редактор
населенных пунктов
|
EditorATR.tt
|
EditorATR.pm
|
Регион
|
EditRegion.tt
|
EditRegion.pm
|
Район
|
EditArea.tt
|
EditArea.pm
|
Город
|
EditTown.tt
|
EditTown.pm
|
Должности
сотрудников
|
Post_sot.tt
|
Post_sot.pm
|
Журнал прививок
|
Jornal_vaccin.tt
|
Jornal_vacc.pm
in
|
Тип диагноза
|
Type_diag.tt
|
Type_diag.pm
|
Журнал диагнозов
|
Jornal_diag.tt
|
Jornal_diag.pm
|
Контингент
|
Contingent.tt
|
Contingent.pm
|
Факультеты
|
Faculty.tt
|
Faculty.pm
|
Группы
|
Groups.tt
|
Groups.pm
|
Студенты
|
Students.tt
|
Students.pm
|
Карты
|
Kard.tt
|
Kard.pm
|
Добавление карты
|
AddCard.tt
|
AddCard.pm
|
Редактирование
карты
|
EditCard.tt
|
EditCard.pm
|
Диагнозы
|
Diagnosis.tt
|
Diagnosis.pm
|
История болезней
|
History_diagnosis.tt
|
History_diagnosis.pm
|
Прием больного
|
Add_diagnosis.tt
|
Add_diagnosis.pm
|
Флюорография
|
Fluoragraphy.tt
|
Fluoragraphy.pm
|
Прививки
|
Vaccin.tt
|
Vaccin.pm
|
Справка
|
Helper.tt
|
Helper.pm
|
В корне директории cgi-bin располагаются файлы index.cgi и Templete.pm и директория modules, в которой
хранятся модули ConnectDB.pm, exel.pm, exel_card.pm, kernel.pm и ses.pm. Модули
окон хранятся в директории wnd, а
шаблоны в директории tt, которые расположены в корне директории cgi-bin. Листинг модулей приведен в приложении Б.
Подключение серверной части к базе данных осуществляет при помощи модуля,
взятого из хранилища модулей CPAN, расположенного в интернете.
2.4 Реализация клиентской части приложения
Клиентские страницы генерируются динамически с помощью шаблонов template
toolkit.
Template toolkit (TT) - это мощная система обработки шаблонов, написана
на perl. Использование шаблонов для генерации web-страниц позволяет убрать из cgi-скрипта весь html код
в отдельный файл (шаблон), где его сможет редактировать дизайнер. Скрипт при
этом становится более читабельным [17].
Код такого шаблона имеет вид html кода со вставками perl функций и переменных, получаемых из
скрипта. Поэтому весь процесс разработки сводится к написанию html-страницы с нужным видом и вставки
специального кода шаблонизатора в динамические объекты html. Пример кода
шаблона находится в приложении А, а пример html-страницы представлен на рисунке 2.3.
Для создания шаблона требуется создать файл cgi-скрипта, расположенного в
директории wnd и файл шаблона, расположенного в директории tt. После чего
необходимо реализовать необходимое поведение в коде скрипта шаблона.
Код cgi-скрипта index.cgi, который занимается определением какой модуль
системы необходимо подключить и какие данные передать ему:
#!C:\www\Perl5.8.9\bin\perl"Content-Type: Text/HTML;
charset=UTF-8\n\n";strict;warnings;CGI;TemplateTemplete;modules::kernel;$co
= CGI->new();$login = $co->param('login') || '';$pass =
$co->param('pass') || '0';$wnd = $co->param('wnd') ||
modules::kernel->read_last_page($login, $pass);$ses = $co->param('ses')
|| '0';$id_s = modules::kernel->user_id($login, $pass, $ses);$CGISESSID =
$ses || '0';$title ='Добро пожаловать!';($CGISESSID eq "Error" or $id_s eq
"0"){
# вывод шаблона index #
$title = 'Не правильно введено имя или пароль!';
my $parser = Template->new (INCLUDE_PATH => './tt');
$parser->process('index.tt', {'title' => $title,
'login' => $login});
}{(!$ses){
($CGISESSID, $title, $id_s) =
modules::kernel->check_login($login, $pass, $wnd);
}{
$CGISESSID = modules::kernel->get_session($wnd, $id_s);
}
$ses = $CGISESSID;($CGISESSID eq "Error" or $id_s
eq "0"){
# вывод шаблона index #$parser = Template->new (INCLUDE_PATH =>
'./tt');
$parser->process('index.tt', {'title' => $title,
'login' => $login});
}{$r_ses = modules::ses->check_ses($CGISESSID,
$id_s);($r_ses == 1){$helper = $co->param('hlp') || '-1';$hlp_lst;($helper
ne '-1'){$query = qq"SELECT helper FROM wnd WHERE id_button =
'$wnd'";
$hlp_lst = modules::ConnectDB->SelectFromDB($query);
}$menu = Templete->gen_menu($id_s);$name_wnd =
Templete->name_wnd($wnd);$file = modules::kernel->query_file($wnd);
$ENV{'ses'} =
$ses;"wnds/".$file.".pm";@page;
@page= $file->print_page($CGISESSID);$query =
qq"SELECT * FROM sot_func a a.sot_id = (SELECT id_sot FROM sesion WHERE
sesion = '$ses') AND a.wnd_id = '$wnd'";$rules =
modules::ConnectDB->SelectFromDB($query);$parser = Template->new
(INCLUDE_PATH => './tt');
$parser->process('start_page.tt', {'CGISESSID' =>
$CGISESSID,
'wnd' => $wnd,
'menu' => $menu,
'rules' => $rules,
'namewnd' => $name_wnd,
'ses' => $ses,
'id' => $id_s,
'helper' => $helper,
'hlp_lst' => $hlp_lst,
'file' => $file.'.tt',
'page' => @page});
}($r_ses == 0) {
$title = "У вас закончилась сессия.<br>Авторизуйтесь еще
раз.";
my $parser = Template->new (INCLUDE_PATH => './tt');
$parser->process('index.tt', {'title' => $title,
'login' => $login});
}($r_ses == -1) {
print "По не понятным причинам произошел сбой. Сообщите об этом
системному администратору.";
}
}
}
Код шаблона index.tt, который предоставляет форму для ввода пароля:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//RU"
"#"523233.files/image006.jpg">
Рисунок 2.4 - Отображение шаблона index.tt
Это все работает следующим образом, пользователь нажимает необходимую ему
кнопку или пункт меню, после чего браузер отправляет все необходимые данные в
скрытых полях (метод POST), далее сервер получает данные, обрабатывает и делает
вывод о том, что хочет пользователь и какую страницу ему необходимо загрузить.
Затем сервер обрабатывает нужные файлы скрипта и шаблона и отправляет их
пользователю.
На рисунке 2.5 показано меню разных пользователей системы, как видно оно
заметно отличается содержанием. Список меню зависит от данных администратором
разрешений пользователю, а администратор принимает решение о даче прав на
какое-либо действие пользователю на основании выполняемых обязанностей этим
сотрудником. Это касается не только меню, а всех страниц в системе.
Рисунок 2.5 - Динамическое меню системы
На данный момент в системе определено четыре правила: открытие,
редактирование, пункт меню и редактирование справки. В соответствии с
названиями они дают разрешение на открытие, редактирование страницы, добавление
ее в пункт меню и редактирование справки на этой странице.
Для создания меню использовались стили CSS, подключаемые в шаблоне.
CSS (каскадные таблицы стилей) - формальный
язык описания
внешнего вида документа, написанного с использованием языка
разметки.
Код стиля для меню:{margin:25px;
font:11px Verdana,Arial; background:#eee}.menu {list-style:none; margin:0;
padding:0}.menu * {margin:0; padding:0}.menu a {display:block; color:#000;
text-decoration:none}.menu li {position:relative; float:left;
margin-right:2px}.menu ul {position:absolute; top:26px; left:0;
background:#d1d1d1; display:none; opacity:0; list-style:none}.menu ul li
{position:relative; border:1px solid #aaa; border-top:none; width:148px;
margin:0}.menu ul li a {display:block; padding:3px 7px 5px;
background-color:#d1d1d1}.menu ul li a:hover {background-color:#c5c5c5}.menu ul
ul {left:148px; top:-1px}.menu .menulink {border:1px solid #aaa; padding:5px
7px 7px; font-weight:bold; background:url(images/header.gif); width:134px}.menu
.menulink:hover, ul.menu .menuhover
{background:url(images/header_over.gif)}.menu .sub {background:#d1d1d1
url(images/arrow.gif) 136px 8px no-repeat}.menu .topline {border-top:1px solid
#aaa}
Между тегами <head> и </head> вставляем строчку
вида <link rel='stylesheet' type='text/css' href='../style/menu.css'>, которая говорит о том, что мы собираемся использовать стили
и какой файл необходимо подключить.
После чего мы вставляем нижеуказанные строчки кода:
<ul>
<li><a>Меню</a>
<ul>
[% FOREACH key IN menu %]
[%IF key.t_f == 1%]<li><a
href='javascript:load([%key.wnd_id%])'>[%key.name_wnd%]</a></li>[%END%]
[% END %]
</ul>
</li>
<li><a href='#"523233.files/image008.jpg">
Рисунок 3.1 - Логическая структура программы
Через браузер открываются страница index.html,
которая перенаправляется на index.cgi. Через эту страницу пользователь
получает всю информацию и имеет доступ к меню. Обращение к базе данных и
получение от нее результатов осуществляется через модуль ConnectDB.pm, который в свою очередь возвращает затребованные данные в то
место, откуда они были затребованы.
3.4 Требования к техническому обеспечению
Определение характеристик вычислительной техники является неотъемлемой
частью процесса разработки программного продукта. Ключевыми критериями
являются: частота процессора, объемы оперативной памяти и жесткого диска,
дополнительное специализированное оборудование. Для разработанного программного
продукта эти характеристики приведены ниже. Так как программе требуется сервер
и клиент, параметры различаются для них.
На клиентских компьютерах не требуется установки каких-то специальных
программ и компонентов, достаточно стандартного браузера. Так как на
большинстве машин подразделения установлена Windows и в качестве браузера используется стандартный Internet Explorer, то параметры, приведенные ниже для
клиентских ПК, соответствуют параметрам IE 8, рекомендованные компанией Microsoft.
Серверная часть требует индивидуального подхода в плане подбора
аппаратных частей компьютера и зависит от числа подключаемых клиентов с учетом
запаса производительной мощности для возможности подключения новых
пользователей. Вся производительная мощность серверной части складывается из
системных требований операционной системы, PostgreSQL, HTTP-сервера и Perl.
Разработанная система не привязана к конкретной ОС, и поэтому может быть
установлена на любую, но рекомендуется использовать сетевые решения
операционных систем так, как они разрабатываются специально для работы в сети.
Ниже будут указаны параметры, для сервера с операционной системой Fedora 13, с минимальным набором
программного обеспечения, обеспечивающего работу пяти клиентских ПК.
3.4.1 Требования к центральному процессору клиента
Минимальная тактовая частота процессора, для клиентской ПК, должна
составлять 233 мегагерца (МГц) или выше.
Данная цифра учитывает как затраты процессора на работу самого приложения
так и затраты связанные с работой операционной системы.
3.4.2 Требования к центральному процессору сервера
На основании проведенных контрольных прогонов было установлено, что
необходимо использование процессор с минимальной тактовой частотой не менее 333 МГц. Это число
учитывает как затраты процессора на работу самого приложения так и затраты
связанные с работой операционной системы.
3.4.3 Требования к оперативному запоминающему устройству
клиента
Минимальный объем оперативного запоминающего устройства (ОЗУ) необходимый
для работы приложения на стороне клиента, Vкл., Мбайт,
определяется по формуле:
гдеV1 - минимальный объем ОЗУ, требуемый для работы
операционной системы, Мбайт;2 - минимальный объем ОЗУ, требуемый для
работы браузера, Мбайт;
Так как на всех ПК подразделения установлена Windows XP со стандартным браузером IE, обновленным до версии 8, то параметры V1=128
Мбайт и V2= 64 Мбайт.
Таким образом, подставим в формулу (3.1) получим, что минимальный объем
ОЗУ, требуемый для работы информационной системы на клиентском ПК, составляет:
Vкл. =V1 +V2 = 128 + 64 = 192 Мбайт.
3.4.4 Требования к оперативному запоминающему устройству
сервера
Для сервера, Vсерв, Мбайт, минимальный объем
оперативного запоминающего устройства, определяется по формуле:
гдеV1 - минимальный объем ОЗУ, требуемый для работы
операционной системы, Мбайт;2 - минимальный объем ОЗУ, требуемый для
базы данных;3 - минимальный объем ОЗУ, требуемый для HTTP-сервера;2 - минимальный
объем ОЗУ, требуемый для работы командного интерпретатора Perl;
Так как на сервере стоит операционная система Fedora 13 в минимальной комплектации, то параметр V1 =10
Мб. Для баз данных параметр V2 =128 Мб. Для HTTP-сервера V3 =16 Мб. И для командного
интерпретатора V4 =5 Мб.
Таким образом, подставим в формулу (3.2) получим, что минимальный объем
ОЗУ, требуемый для работы информационной системы на сервере, составляет:
Vсерв. = V1 + V2 + V3 + V4
= 10 + 128 + 16 + 5 = 159 Мбайт.
Для комфортной работы рекомендуется использовать ОЗУ размером 256 Мбайт и
более.
3.4.5 Требования к наличию свободного места на жестком диске
клиента
Свободное пространство на жестком диске для клиентского ПК должно хватать
на установку браузера. Так, например, компания Microsoft, для браузера IE 8, рекомендует не менее 150 Мбайт
свободного места на жестком диске компьютера пользователя.
3.4.6 Требования к наличию свободного места на жестком диске
сервера
Для сервера объем свободного места должен быть не менее 347 Мбайт на
приложения (PostgreSQL требует 211 Мбайт без базы данных, HTTP-сервер требует 35 Мбайт и Perl, 101 Мбайт), плюс предполагаемый
объем данных в базе (с учетом возможности добавления новых данных примерно
составляет от 50 Мбайт) и объем для дампа базы данных от 50 Мбайт. Таким
образом, учитывая все параметры, получается минимального пространства должно
быть не менее 447 Мбайт.
3.4.7 Требования к монитору и видеоадаптеру клиента
Клиентская часть не предъявляет каких-то специфичных требований,
достаточно любого современного жидкокристаллического монитора со стандартным
разрешением 1024×768.
3.4.8 Требования к принтеру
Для вывода на печать отчетов и медицинских карт необходим любой принтер с
разрешением печати не менее 300 точек/дюйм. Так как если разрешение печати
принтера будет менее 300 точек/дюйм документы, предусмотренные к выводу на
принтер, не будут качественно пропечатываться, они разрабатывались для вывода
на печать принтером с минимальным разрешением 300 точек/дюйм.
3.5 Установка информационной системы
Установка системы должна проводиться специалистом, обладающим знаниями по
установки: PostgreSQL и резервных копий баз данных (SQL-дамп),
языка Perl и сервера HTTP. Так же необходимы умения по настройке системы для
резервного копирования базы данных.
SQL-дамп
- метод, заключающийся в создании текстового файла с командами SQL, с помощью
которых на сервере можно воссоздать базу данных в том состоянии, в котором она
находилась перед дампом [14].
Весь процесс установки сводится к установке вышеперечисленных компонентов
и их настройке. Настройка PostgreSQL заключается в развертывании дампа базы из
файла.
Настройка HTTP сервера сводится к копированию в директорию файлов с кодом
системы и настройке хоста, в которой необходимо указать разрешения на
выполнение cgi-скриптов и указать директорию со скриптами (cgi-bin), если оно запрещена по умолчанию или отсутствует.
После установки Perl требуется установить ряд модулей необходимых для
работы. Их можно установить с помощью репозитория CPAN, для этого требуется
соединение с интернетом, но в случае если доступа в сеть интернета нет, то их
можно установить и локально.
3.6 Входные данные программы
Входными данными для спроектированной базы данных являются выделенные из
сущностей предметной области атрибуты. Они вводятся непосредственно
пользователем с клавиатуры посредством разработанного пользовательского
интерфейса. На основе анализа, проведенного во 2 разделе были, выделены
следующие данные. Для разработчиков: название окон и функций. Для сотрудников:
о сотрудниках, факультетах и группах, о студентах, информация медицинских карт,
данные о приеме врачом, о диагнозах и прививках, типов диагнозов, информация о
населенных пунктах, из которых прибыли студенты, информация о прохождении
флюорографии.
3.7 Выходные данные программы
Выходные данные программы представлены отчетами с указанием дат
формирования отчета, а так же медицинскими картами и в виде экранных форм, в
которых отображены записи БД.
3.8 Результаты тестирования программы
В ходе тестирования проверялось корректность переходов по ссылкам,
правильность вычисления дат флюорографии и корректность отображения страниц в
различных браузерах (рисунки 3.2, 3.3, 3.4)
Рисунок 3.2 - Корректность отображения страницы в FireFox 4
Рисунок 3.3 - Корректность отображения страницы в Chrome 11
Рисунок 3.4 - Корректность отображения страницы в Internet Explorer 8
По завершению написания каждого модуля программы, его тестирование
проводилось с помощью тестовых прогонов. При выявлении ошибок, выполнялись
работы по их устранению, и затем следовала повторная проверка модуля. Так как
модули имеют относительно малый размер, такой метод тестирования способствовал
быстрому нахождению и устранению ошибок. Для сокращения времени на тестирование
составлялись небольшие тесты, при условии что модуль достаточно мал. Весь
процесс тестирование и составление тестов проходил при консультациях с
сотрудниками медицинского центра СевКавГТУ.
3.9 Вызов программы
Информационная система для медицинского центра, запускается путем ввода в
адресную строку браузера ip-адреса сервера или имени сервера (рисунок 3.5),
либо ярлыком на рабочем столе, который является ссылкой на адрес сервера и
предназначен для сотрудников.
Рисунок 3.5 - Ввод имени сервера
Из рисунка видно, что сервер имеет имя «medic».
3.10 Краткая инструкция по работе с программой
В начале работы программы, пользователь проходит процесс аутентификации
(ввод логина и пароля) и при всех действиях пользователя протекает процесс
авторизации (рисунок 3.6).
Аутентификация - проверка принадлежности пользователю (субъекту доступа)
предъявленного им идентификатора и подтверждение его подлинности.
Авторизация - проверка прав доступа пользователя и получение им доступа к
ресурсам в соответствии с данными ему правами.
Рисунок 3.6 - Окно аутентификации
Так как программа имеет возможность разграничение прав пользователь, то
возникают роли пользователей. Поэтому далее будет описана основная часть работы
с программой, с разбиением на роли. Работа с другими частями схожа.
Краткая инструкция по работе для администратора
Главная задача администратора - это работа с сотрудниками в системе. Для
добавление нового сотрудника необходимо в меню выбрать пункт «Права
пользователей», после чего откроется окно с выбором дальнейших действий
(рисунок 3.7).
Рисунок 3.7 - Окно с выбором дальнейших действий
Далее необходимо выбрать «Пользователи» и в открывшемся окне надо нажать
кнопку «Редактировать пользователя» (рисунок 3.8).
Рисунок 3.8 - Окно с выбором дальнейших действий
После нажатия кнопки, справа появится выделенная область с предложением
создать нового пользователя, отредактировать текущего и отменой действия
(рисунок 3.9).
Рисунок 3.9 - Редактирование пользователя
Необходимо выбрать «Новый пользователь». Появятся поля для заполнения,
показанные на рисунке 3.10.
Рисунок 3.10 - Добавление нового пользователя
После заполнения всех полей, нажать кнопку «Добавить», после чего новый
пользователь будет добавлен и его можно будет найти в списке с пользователями.
Редактирование пользователей протекает аналогично, для этого необходимо вместо
«Новый пользователь» выбрать «Редактировать пользователя». Откроются те же
саамы-е поля, но уже заполненные, в них надо внести соответствующие изменения и
нажать на кнопку «Изменить»
По умолчанию новый пользователь создается без прав и для того чтобы он
смог работать с системой ему необходимо назначить права. Для этого необходимо
выбрать его в списке «Пользователи» и в списке «Окна» выбрать необходимое окно.
Появятся таблица с функциями (рисунок 3.11).
Рисунок 3.11 - Функции
В таблице необходимо расставить галочки напротив тех функций, которые
необходимы данному пользователю и нажать на кнопку «Добавить пункт».
Краткая инструкция по работе для сотрудников
Так как окон для сотрудников много и работа с ними практически схожа, то
ниже будет описана работа с редактором медицинских карт.
Медицинская карта является основополагающим элементом. Как и в жизни,
врачи не могут вести прием пациента без карты, так и система построена на этом
принципе.
Для того чтобы добавить медицинскую карту необходимо выбрать в меню пункт
«Карты» и нажать ссылку «Добавление карты» (рисунок 3.12). Откроется окно с
полями для заполнения (рисунок А.1).
Рисунок 3.12 - Окно «Карты»
Для добавления карты, необходимо заполнить ключевые поля и нажать кнопку
«Добавить карту». После чего добавиться новая медицинская карта, а все поля для
заполнения очистятся. Если какое-то из ключевых полей не заполнено, то система
выдаст соответствующее предупреждение с указаниями. На рисунке А.2 ни одно из
ключевых полей не заполнено.
Рядом с кнопкой «Добавить карту» расположена кнопка «Распечатать карту»,
которая производит процесс сохранения медицинской карты и формирует документ
для табличного процессора (рисунок 3.13).
Рисунок 3.13 - Медицинская карта для печати
Для того чтобы увидеть вновь добавленную карту необходимо перейти по
ссылке «Редактирование карты», для этого можно воспользоваться ссылками для
быстрого перехода, которые расположены вверху, под основным меню (рисунок 3.14).
Рисунок 3.14 - Ссылки для быстрого перехода
В открывшемся окне, необходимо выбрать нужный факультет и группу. После
чего появиться таблица с кратким описанием медицинских карт (рисунок А.3).
Для того, чтобы отредактировать необходимую медицинскую карту необходимо
навести курсор на нужную запись в таблице и совершить двойной клик. Откроется
такое же окно, как и в случае с добавлением карты, но поля уже будут заполнены
(рисунок А.4).
После исправление необходимых данных, необходимо нажать кнопку «Изменить».
Кнопка «Печать» осуществляет сохранение изменений и формирует документ для
печати, как и в случае с добавлением карты. Кнопка «Удалить» осуществляет
процесс удаление данной карты, этот процесс не возможен в случае если в карте
есть какие-нибудь записи о приеме, прививках или флюорографии. Кнопка «Назад»
осуществляет возврат на предыдущую страницу.
Выводы
1. В данном разделе было рассмотрено информационное, программное и
техническое обеспечение необходимое для работы разработанного программного
продукта. Установлено, что минимальные требования к аппаратуре для клиентской
части следующие:
- процессор с тактовой частотой 233 MГц;
- 128 Мбайт ОЗУ;
- видеоадаптер поддерживающий
разрешение 800×600;
- 150 Mбайт
свободного места на диске;
- принтер с разрешением печати не менее 300 точек/дюйм.
А для серверной части следующие:
- процессор с тактовой частотой 333 MГц;
- 192 Мбайт ОЗУ;
- 447 Mбайт
свободного места на диске.
2. Помимо требований к аппаратуре для работы программы необходимо
установить PostgreSQL, HTTP-сервер и Perl с библиотеками Template, CGI, DBI, Spreadsheet::WriteExcel, utf8, Encode,
POSIX, CGI::Session,
DBI::PgPP.
3. Также в данной главе приведена краткая инструкция для различных
ролей пользователей в программном продукте.
. Результаты тестирования показали, что программа правильно
обрабатывает вводимые данные и выдает ожидаемые выходные данные.
4. технико-ЭКОНОМИЧЕСКОЕ
ОБОСНОВАНИЕ ПРОЕКТА
4.1 Краткая характеристика проекта
В дипломном проекте разработан программный продукт для
медицинского центра СевКавГТУ.
Назначение разработанного программного продукта -
автоматизация работы подразделения медицинского центра СевКавГТУ.
Цель создания информационной системы - сокращение
временных затрат сотрудников медицинского центра на оформление и составление
отчетности.
Основными функциями данной информационной системы
являются: ведение медицинской карты студента с учетом всех посещений, ведение
прививочного листа студента, отслеживание прохождения флюорографии студентами,
формирование отчетов по сделанным прививкам и пройденных студентами
флюорографиях, как по группе, так и по факультету. Так же в системе
предусмотрены возможности для администратора и разработчика, которые позволяют
отслеживать действия пользователей, следить за несанкционированным доступом (позволяет
узнать под каким именем был доступ к системе и с каким адресом) и вести
разработку системы (без остановки сервиса целиком).
Информационная система написана с использованием
технологии «клиент-сервер». В ней имеется база данных, спроектированная на
PostgreSQL, которая является бесплатной, серверная часть написана на Perl и
требует HTTP-сервера, а для клиентской части ничего не требуется кроме как
браузер. Общее количество строчек кода равно 1000 единиц.
В результате предпроектного обследования было
установлено, что вся отчетность набирается сотрудниками медицинского центра на
компьютерах вручную, проверка флюорографий происходит во время подготовки
отчета и занимает значительное время, так же врачами проверяются все данные,
для составления отчета, вручную.
В качестве расчетного периода возьмем пять лет, так
как этот период является ориентировочным сроком службы программы до ее
морального устаревания.
4.2 Трудоемкость выполняемых работ
При расчете трудоемкости работ по созданию программного продукта,
используется расчет себестоимости автоматизированной информационной системы и
оценки экономической эффективности внедрения программного продукта.
В ходе разработки программного обеспечения основные затраты Тпо,,
чел.-ч., они определяются по формуле:
Тпо = То + Та + Тп + Тотл
+ Тд, (4.1)
гдеТо - затраты труда на описание задачи, чел.-ч.;
Та - затраты на разработку блок
схемы, чел.-ч.;
Тп - затраты на
программирование, чел.-ч.;
Тотл - затраты на отладку
программы, чел.-ч.;
Тд - затраты на подготовку документации,
чел.-ч.
Все составляющие в правой части формулы (4.1) определим через общее число
операторов D, ед.:
D = α∙c (1 + p), (4.2)
гдеα - исходное число строчек кода в тексте программы, (α
= 1000 ед.);
с − коэффициент сложности задачи(с = 1.05 ... 2);
р - коэффициент коррекции программы, учитывающий новизну проекта.
Таким образом, подставив α = 1000 ед., с = 1,2, p = 0,1 получим:= 1000∙1,2 ∙
(1 + 0,1)=1320 ед.
Затраты труда на описание задачи принимаем: ТО = 13 чел.-ч.
Работу по описанию задачи и все другие работы по созданию программного продукта
выполняет инженер-программист с окладом 6000 руб. в месяц и коэффициентом
квалификации kК = 1.
Затраты труда на изучение задачи ТИ, чел.-ч., с учетом
уточнения описания и квалификации программиста могут быть определены по
формуле:
ТИ = Db /( su kK ), (4.3)
гдеD - общее число строчек кода в тексте программы, ед.;- коэффициент
увеличения затрат труда, вследствие недостаточного
описания задачи;u - количество строчек кода в тексте
программы, приходящееся на
один чел.-ч., (ед./ чел.-ч.);K - коэффициент квалификации
работника.
В связи с тем, что решение рассматриваемой задачи потребовало уточнения и
доработок, примем коэффициент b = 1.
Количество строчек кода в тексте программы, приходящееся на один чел.-ч.,
примем равным su = 75 ед./ чел.-ч.
Таким образом, на основании формулы (4.3) получим
Затраты труда на разработку алгоритма решения задачи ТА,
чел.-ч., рассчитываются по формуле:
ТА = D / (sa kK), (4.4)
где D - общее число строчек кода в тексте программы, ед.;a -
количество строчек кода в тексте программы, приходящееся на один чел.-ч., (ед./
чел.-ч.);K - коэффициент квалификации работника.
Для расчета по формуле (4.4) примем sa = 20 ед./ чел.-ч.
Подставив численные значения параметров и коэффициентов в формулу (4.4),
получим
ТА = 1320 / (20 × 1) = 66 чел.-ч.
Затраты труда на составление программы по готовой блок-схеме ТП, чел.-ч.,
определяется по формуле:
ТП = D / (sa kK), (4.5)
Где D - общее число строчек кода в тексте программы, ед.;a -
количество строчек кода в тексте программы, приходящееся на
один чел.-ч., (ед./ чел.-ч.);K - коэффициент квалификации
работника.
Для расчетов по формуле (4.5) примем sa = 30 ед./ чел.-ч.
Подставив численные значения параметров и коэффициентов в формулу (4.5),
получим:
ТП = 1320 / (30 × 1) = 44 чел.-ч.
Затраты труда на отладку программы на персональном компьютере ТОТЛ,
чел.-ч., рассчитывается по формуле
ТОТЛ = D / (sотл kK), (4.6)
где D - общее число строчек кода в тексте программы, ед.;отл -
количество отлаживаемых операторов программы, приходящееся на один чел.-ч.,
(ед./ чел.-ч.);K - коэффициент квалификации работника.
Для расчетов по формуле (4.6) примем sотл = 4 ед./ чел.-ч.
Подставив численные значения параметров и коэффициентов в формулу (4.6),
получим
ТОТЛ = 1320 / (4 × 1) = 330 чел.-ч.
Затраты труда на подготовку документации по задаче ТД, чел.-ч.,
определяются по формуле:
ТД = ТДР + ТДО, (4.7)
Где ТДР - затраты труда на подготовку материалов в рукописи,
чел.-ч.;
ТДО - затраты труда на редактирование, печать и оформление
документации, чел.-ч.
Затраты труда на подготовку материалов в рукописи ТДР, чел.-ч., вычислим
по формуле
ТДР = D / (sдр kK), (4.8)
где D - общее число строчек кода в тексте программы, ед.;др -
количество операторов программы в рукописи, приходящееся на
один чел.-ч., (ед./ чел.-ч.);K - коэффициент квалификации
работника.
Для расчетов по формуле (4.8) примем sдр = 15 ед./ чел.-ч.
Подставив численные значения параметров и коэффициентов в формулу (4.8),
получим
ТДР = 1320 / (15 × 1) = 88 чел.-ч.
Затраты труда на редактирование, печать и оформление документации ТДО,
чел.-ч., вычислим по формуле
ТДО = 0,75 × ТДР. (4.9)
Подставив численное значение затраты труда на подготовку материалов в
рукописи ТДР, чел.-ч., в формулу (4.9), получим
ТДО = 0,75 × 88 = 66 чел.-ч.
Таким образом, подставив численные значение затраты труда на подготовку
материалов в рукописи ТДР, чел.-ч., и затраты труда на
редактирование, печать и оформление документации ТДО, чел.-ч., в
формулу (4.7) получим:
ТД = 88 + 66= 154 чел.-ч.
Подставив все полученные данные, составляющие трудоемкость разработки
программного обеспечения в формулу (4.1), получим
ТПО =13 + 66 + 44 + 330 + 154 = 607 чел.-ч.
С учетом уровня языка программирования трудоемкость разработки программы
может быть скорректирована следующим образом:
ТКОР = ТПО kКОР, (4.10)
где kКОР - коэффициент коррекции, учитывающий изменения
трудоемкости разработки программного обеспечения в зависимости уровня языка
программирования (таблица 4.1);
ТКОР - откорректированная трудоемкость разработки программного
обеспечения, чел.-ч.
Использованный для разработки программного обеспечения язык
программирования Perl относится к
алгоритмическим языкам высокого уровня, с учетом этого примем kКОР =
0,8.
Таким образом, получим по формуле (4.10) итоговую откорректированную
трудоемкость разработки программы
ТКОР = 607 × 0,8 = 674,4 чел.-ч.
4.3 Расчет себестоимости информационной системы
Себестоимость создания автоматизированной информационной системы З, руб.,
определяется по следующей формуле
З = ЗО + ЗД + ЗС + ЗЭ + ЗМ
+ ЗП + ЗАО, (4.11)
где ЗО - основная заработная плата производственного
персонала, руб.;
ЗД - дополнительная заработная плата производственного
персонала, руб.;
ЗС - отчисления на страховые взносы, руб.;
ЗЭ - затраты на потребляемую электроэнергию, руб.;
ЗМ - расходы на материалы и запасные части, руб.;
ЗП - затраты на техническое обслуживание и текущий ремонт
вычислительной техники, руб.;
ЗАО - затраты на амортизацию вычислительной техники, руб.
Плановый фонд рабочего времени одного специалиста производственного
персонала в месяц tпф, ч, вычислим по формуле
пф = Nрд Δtрд, (4.12)
где Nрд - количество рабочих дней специалиста
производственного персонала за месяц;
Δtрд - продолжительность рабочего дня специалиста
производственного персонала, ч.
Для расчетов по формуле (4.12) примем Nрд = 22 дня, Δtрд = 8 ч. Подставив указанные численные
значения параметров Nрд и Δtрд в формулу (4.12) получим, что
плановый фонд рабочего времени одного специалиста производственного персонала в
месяц составляетпф = 22 × 8 = 176 ч.
Таким образом, часовая тарифная ставка sч, руб./ч,
инженера-программиста первой категории составляет ч = 6000 / 176 =
37,5 руб./ч
Основная заработная плата ЗО, руб., производственного
персонала определяется по формуле
ЗО = sч × ТКОР. (4.13)
Подставив все численные значения параметров в формулу (4.13) получим, что
основная заработная плата инженера-программиста первой категории составит
ЗО = 37,5 × 674,4 = 25290 руб.
Дополнительная заработная плата ЗД, руб. не начисляется.
Отчисления в Пенсионный фонд Российской Федерации, Фонд социального
страхования Российской Федерации и фонды обязательного медицинского страхования
Российской Федерации ЗС, руб., вычислим по формуле
ЗС = ((ЗО + ЗД) / 100) × hС,
(4.14)
где ηС
− норматив страховых взносов, %.
Норматив страховых взносов составляет 34 %.
Подставив все численные значения в формулу (4.14) получим, что отчисления
на страховые взносы равны
ЗС =(25290 / 100) × 34% = 8598,6 руб.
Затраты на потребляемую электроэнергию ЗЭ, руб.:
ЗЭ = PВ tВ цЭ, (4.16)
гдеPВ - мощность ЭВМ, кВт;В - время работы
вычислительного комплекса, ч;
цЭ - стоимость 1 кВтч электроэнергии, руб./ кВтч.
Мощность ЭВМ равна 0,3 кВт.
Время работы вычислительного комплекса tв, ч, при создании программного
продукта вычислим по формуле
в = αп∙(ТП
+ ТД + ТОТЛ)∙ kКОР, (4.17)
где αп
- коэффициент, учитывающий затраты времени на профилактические работы на ЭВМ.
Для расчетов по формуле (4.17) примем αп = 1,15 и kКОР = 0,8. Подставив все
численные значения параметров в формулу (4.17) получим:В = 1,15 × (44 + 154 + 330) × 0,8 = 485,76 ч.
Стоимость 1 кВтч электроэнергии составляет цЭ = 3,60 руб./ кВтч.
Подставив все численные значения параметров в формулу (4.16) получим, что
затраты на потребляемую электроэнергию составят
ЗЭ = 0,3 × 485,76 × 3,60
= 410,95 руб.
Данные для расчета затрат на материалы и запасные части занесем в таблицу
4.2.
Таблица 4.2 - Данные для расчета затрат на материалы и запасные
Наименование
|
Единица
измерения
|
Коли-чество
|
Цена за единицу,
руб.
|
Сумма, руб.
|
CD-RW - диск
|
Штук
|
1
|
25,00
|
25,00
|
Бумага
|
Пачка
|
1
|
150,00
|
150,00
|
Заправка картриджа принтера
Samsung ML-1615
|
Шт.
|
1
|
120,00
|
120,00
|
Итого
|
295,00
|
Следовательно, затраты на материалы и запасные части ЗМ составят
ЗМ = 25,00 + 150,00 + 120,00 = 295,00 руб.
Затраты на техническое обслуживание и текущий ремонт вычислительной
техники ЗП, руб.:
ЗП = КВ × (α / 100) × ( tВ / tВ.Г)(4.18)
где КВ − балансовая стоимость вычислительной техники,
руб.
α - норма отчислений на ремонт, %;В.Г
- годовой фонд времени работы вычислительной техники, ч.
Для расчетов по формуле (4.18) примем:
- балансовая стоимость вычислительной техники KB = 21658,00
руб.;
- норма отчислений на ремонт α = 4%;
- годовой фонд времени работы вычислительной техники при
48-часовой рабочей неделе в текущем году tВ.Г = 1986 ч.
Подставив все численные значения параметров в формулу (4.18) получим, что
затраты на техническое обслуживание и текущий ремонт вычислительной техники
составят:
ЗП = 21658 × (4 / 100) × (485,76 / 1986) = 199,25 руб.
Затраты на амортизацию вычислительной техники АОЗ , руб.:
ЗАО = КВ × (β / 100) × ( tВ / tВ.Г)
(4.19)
где β - норма отчислений на амортизацию вычислительной техники, %,
которая составляет 20%.
ЗАО = 21658 × (20 / 100) × (485,76 / 1986) = 996,27 руб.
Все расчеты по статьям калькуляции затрат, составляющих себестоимость
автоматизированной информационной подсистемы сведены в таблицу 4.3.
Таблица 4.3 - Величины затраты, составляющих себестоимость
автоматизированной информационной системы
Статья расхода
|
Сумма, руб.
|
1
|
2
|
Основная заработная плата
производственного персонала
|
25290,00
|
Отчисления на
страховые взносы
|
8598,60
|
Затраты на
потребляемую электроэнергию
|
410,95
|
Расходы на материалы и
запасные части
|
295,00
|
Затраты на техническое
обслуживание и ремонт вычислительной техники
|
199,25
|
Затраты на амортизацию
вычислительной техники
|
996,27
|
Итого
|
35790,07
|
Таким образом, полные затраты на создание программного продукта З
составляют
З = 25290 + 8598,6 + 410,95 + 295 + 199,25 + 996,27 = 35790,07 руб.
4.4 Оценка экономической эффективности внедрения программного
продукта
Показатель эффекта определяет все позитивные результаты, достигаемые при
использовании программного продукта. Прибыль от использования программного
продукта за год эксплуатации П, руб., определяется по формуле
П = Э - ЗИСП.,(4.21)
где Э - стоимостная оценка результатов применения программного продукта в
течение года, руб.;
ЗИСП. - стоимостная оценка затрат при использовании
программного продукта в течение года, руб.
Приток денежных средств из-за использования программного продукта Э,
руб., в течение года может составить:
Э = (ЗРУЧ - ЗАВТ) + ЭДОП, (4.22)
где ЗРУЧ - затраты на ручную обработку информации, руб.;
ЗАВТ - затраты на автоматизированную обработку информации,
руб.;
ЭДОП - дополнительный экономический эффект, связанный с
уменьшением числа используемых бланков, высвобождением рабочего времени и т.д.,
руб.
Данный продукт используется двумя сотрудниками медицинского центра
СевКавГТУ. Заработная плата сотрудника - 8000 руб., Nрд = 22 дней, Δtрд = 8 ч. Тогда, цена одного часа
работы цЧ, руб./ч, составит
цЧ = 8000 / 160 = 50 руб./ч.
В таблице 4.4 приведены данные, полученные в ходе тестирования программы,
о времени, затрачиваемом на обработку информации вручную и при использовании
программного продукта за один месяц.
Таблица 4.4 − Данные о времени, затрачиваемом на обработку
информации вручную и при использовании программного продукта за один месяц
одним врачом
Наименование
работы
|
tР,
ч.
|
tА,
ч.
|
Обработка
информации
|
70
|
20
|
Составление, оформление и
анализ отчетов
|
40
|
0,5
|
Итого
|
110
|
20,5
|
- tР - затраты на ручную обработку информации в месяц, ч.;
tА - затраты на автоматизированную обработку информации в
месяц, ч.
Из данных таблицы 4.4 следует, что общие затраты времени на ручную
обработку информации в месяц tОБЩ. Р, ч, одним сотрудником,
составляют 110 ч, а общие затраты на автоматизированную обработку информации -
tОБЩ. А = 20,5 ч.
Годовые затраты (затраты за 12 месяцев) двух сотрудников медицинского
центра, при ручной обработке информации вычислим по формуле:
ЗРУЧН = tОБЩ. Р × 12 × цЧ. × 2(4.23)
Годовые затраты (затраты за 12 месяцев) офис-менеджера при
автоматизированной обработке информации вычислим по формуле
ЗАВТ = tОБЩ. А × 12 × цЧ. × 2(4.24)
Получим:
ЗРУЧН = 110 × 12 × 50 × 2 = 66000 руб.
ЗАВТ = 20,5 × 12 × 50 × 2 = 12300 руб.
Следовательно, годовой эффект от внедрения программного продукта, даже
без учета дополнительный экономический эффекта (ЭДОП = 0), на основании
формулы (4.22), получится равным:
Э = 66000 - 12300 = 53700 руб.
Эксплуатационные затраты при использовании программного продукта состоят
из затрат на электроэнергию, техническое обслуживание, текущий ремонт
вычислительно техники и затрат на амортизацию вычислительной техники.
На основании формулы (4.16), для персонального компьютера сотрудника за
12 месяцев затраты на электроэнергию при потребляемой мощности компьютера PВ
=0,3 кВт составят (стоимость электроэнергии цЭ = 3,60 руб./кВт-ч.)
ЗЭ = 0,3 × 20,5 × 12 × 2,82 × 2 = 208,12 руб.
Балансовая стоимость вычислительной техники KB = 21658,00 руб.
Тогда, на основании формулы (4.18), для персонального компьютера офис-менеджера
за 12 месяцев затраты на техническое обслуживание и текущий ремонт составят:
ЗП = 21658 × 0,04 × (12 × 20,5 / 2112) × 2 = 100,91 руб.
Затраты на амортизацию вычислительной техники по формуле (4.19) составят
ЗАО = 21658 × 0,2 × (12 × 20,5 / 2112) × 2= 504,53 руб.
Тогда, эксплуатационные затраты при использовании программного продукта
составят:
ЗИСП = 208,12 + 100,91 + 504,53 = 813,56 руб.
Прибыль от использования программного продукта за год рассчитаем по
формуле (4.21):
П = 53700 - 813,56 = 52886,44 руб.
Таким образом, имеем следующий денежный поток:
0 шаг (капиталовложения) - 35790,07 руб.;
1 шаг - 52886,44 руб.;
шаг - 52886,44 руб.;
шаг - 52886,44 руб.;
шаг - 52886,44 руб.
Чистый дисконтированный доход ЧДД, руб., от использования программного
продукта определим по формуле:
(4.25)
где N - расчетный период, год;
ПK - прибыль от использования программного продукта за k-й год
его эксплуатации, руб.;
Е - норма дисконта, %;- капиталовложения при внедрении программного
продукта, руб.
Следовательно, ЧДД, руб., при N = 5, т. е. за пять лет использования
программного продукта (срок до морального старения данного программного
продукта) при норме дисконта E = 20% в соответствии с формулой (4.25) составит:
Приходим к выводу, что ЧДД − положителен, т. е. проект эффективен.
Внутреннюю норму доходности проекта Eвн, %, определим по
формуле
,
|
(4.26)
|
информационный система medic программа
где Евн. MAX + - максимальное значение внутренней
нормы дисконта, %, при которой ЧДД является положительной величиной (ЧДД >
0);
Евн. MIN - - минимальное значение внутренней нормы дисконта,
%, при
которой ЧДД является отрицательной величиной (ЧДД < 0);
- ЧДД, руб., вычисленный по формуле (4.25) при подстановке
нормы дисконта Е=;
-ЧДД, руб., вычисленный по формуле (4.25) при подстановке
нормы дисконта Е=.
Предполагаем, что EВН лежит в диапазоне 144 ... 149%. При
норме дисконта EВН = 144% получаем ЧДД =511,96 руб. Таким образом,
при норме дисконта EВН = 144% ЧДД - положителен.
При норме дисконта EВН = 149% получаем ЧДД = -666,64 руб.
Таким образом, при норме дисконта EВН = 149% ЧДД - отрицателен.
Следовательно, по формуле (4.26) имеем:
%
Рассчитаем срок окупаемости проекта. Срок окупаемости проекта Tок,
год, найдем по формуле
(4.27)
где N - максимальное количество лет, прошедших с начала эксплуатации
программного продукта, в течение которых величина дохода от его использования
не превысила величины капиталовложения при внедрении программного продукта;
Эj- величины приведенных (дисконтированных) годовых эффектов
за j-й год, руб., прошедший с начала эксплуатации программного продукта,
вычисленные по формуле (4.25) при подстановке нормы дисконта E = 20%.
Величина приведенного (дисконтированного) годового эффекта за первый год
расчетного периода по формуле (4.25) равна:
Э1 = = 44072,03 руб.
что больше величины капиталовложений (K = 35790,07 руб.).
Тогда, в формуле (4.27) имеем N = 0 и срок окупаемости составит
года,
4.5 Основные технико-экономические показатели проекта
Для удобства анализа, все основные технико-экономические показатели
проекта сведены в таблицу 4.5.
Таблица 4.5 − Основные технико-экономические показатели проекта
Основные
характеристики
|
Единицы
измерения
|
Проект
|
Итоговая
трудоемкость разработки
|
чел.-ч.
|
674,4
|
Полные
затраты на создание программного продукта
|
руб.
|
35790,07
|
Годовой
экономический эффект от внедрения программного продукта
|
руб.
|
44072,03
|
Прибыль от
внедрения и использования программного продукта
|
руб.
|
52886,44
|
Срок
окупаемости проекта
|
год
|
0,67
|
Выводы
1. В процессе анализа технико-экономического обоснования разработки
информационной системы для медицинского центра СевКавГТУ, было экономически
обоснована рентабельность разработки.
2. Затраты на разработку информационной системы составили 35790,07
руб.
. Трудоемкость разработки проекта составила 674,4 чел-ч.
4. Годовой экономический эффект от внедрения
программного продукта составляет 53700 руб.
. Внутренняя норма доходности - 146,15%
6. После внедрения программного продукта ежемесячные
затраты времени сотрудника медицинского центра сократится со 110 до 20,5 часов,
то есть в более чем пять раз.
. Срок окупаемости информационной подсистемы составляет 0,67 года.
8. Разработка информационной системы для медицинского центра СевКавГТУ является экономически обоснованной и эффективной.
ЗАКЛЮЧЕНИЕ
Основным результатом дипломного проектирования является разработка
информационной системы «Medic».
В результате дипломного проектирования было показано, что:
- итоговая трудоемкость разработки программного продукта составляет 674,4
чел.-ч.;
- полные затраты на создание программного продукта -35790,07 руб.;
- годовой эффект от внедрения программного продукта - 53700
руб.;
- годовая прибыль от внедрения и использования программного
продукта - 52886,44;
- срок окупаемости проекта 0,67 года.
После внедрения программного продукта ежемесячные затраты времени
сотрудника медицинского центра сократится со 110 до 20,5 часов, то есть в более
чем пять раз.
Таким образом, приходим к заключительному выводу о том, что разработка
информационной системы «Medic»
является экономически обоснованной и эффективной.
К перспективным направлениям развития темы дипломного проекта можно
отнести расширение функциональных возможностей разработанной информационной
системы: страницы для составления и отображения расписания врачей, страницы,
при помощи которых врач будет сам создавать новые отчеты и предавать им
требуемые формы и как следствие из этого, использование HTML5.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Аппак
М.А. Автоматизированные рабочие места на основе персональных ЭВМ [Текст] / М.А.
Аппак - М.:Радио и связь, 1989. - 400 с.
2. Буч
Г. Язык UML для пользователя: Пер. с англ. [Текст]/ Г. Буч, Д. Рамбо, А.
Джекобсон. - М.: ДМК, 2000. − 432 с.
. Голицына
О.Л. Основы алгоритмизации и программирования (2-е издание) И.И. Попов, О.Л.
Голицына. - М.: Инфа-М, 2006. - 432 с.
. Дейтел
Х.М. Как программировать на Perl [Текст]/ Х.М. Дейтел, П.Дж. Дейтел, Т.Р.
Нието, Д.К. МакФай. - М: Бином, 2002. - 547 с.
. Декарт
А. Программирование на Perl DBI [Текст]/ А. Декарт, Т. Банс. - Спб.:
Символ-Плюс, 2000. - 700 с.
. Диго
С.М. Проектирование и использования баз данных [Текст]/ С.М. Диго. - М.:
Финансы и статистика, 1995. - 200 с.
. Карпова
Т. Базы данных. Модели, разработка, реализация [Текст]/ Т. Карпова. - Спб.:
Питер, 2001. - 304 с.
. Киммел,
П. UML. Основы визуального анализа и проектирования [текст]/ П. Киммел. - М.:
НТ Пресс, 2008. - 272 с.
. Киммел
П. UML. Универсальный язык программирования [текст]/ П. Киммел. - СПб.: НТ
Пресс, 2008. - 272 с.
. Когаловский
М.Р. Технология баз данных на персональных ЭВМ [Текст]/ М.Р. Когаловский. -
Киев: Радиоэлектроника, 2004. - 270 с.
. Колесов
Ю.Б. Моделирование систем. Объектно-ориентированный подход [текст]/ Ю.Б.
Колесов, Ю.Б. Сениченков. - СПб.: БХВ-Петербург, 2006. - 192 с.
12. Конноли
Т. Базы данных. Проектирование, реализация и сопровождение. Теория и практика.
[Текст]/ Т. Конноли, К. Бегг - СПб.; М.: Киев: изд. дом Вильяме, 2001. - 1120
с.
. Крёнке
Д. Теория и практика построения баз данных [Текст]/ Д. Крёнке - СПб.: Питер,
2003. - 800 с.
. Левитин
А.В. Алгоритмы. Введение в разработку и анализ [Текст]/ А.В. Левитин. - М.:
Вильямс, 2006 - 576 с.
. Маклнтош
Дж. Perl & XML библиотека программиста [Текст]/ Дж. Маклнтош, Эрик Т. Рэй.
- СПб.: Питер, 2003. - 207 с.
. Мартин
Дж. Организация баз данных в вычислительных системах [Текст]/ Дж. Мартин. - М.:
Мир, 1978. - 700 с.
. Мельтцер
К. Разработка CGI-приложений на Perl [Текст]/ К. Мельтцер, Б. Михальски. -
М.: Вильямс, 2001. - 574 с.
. Петров
А.И. Информационные системы [Текст]/ А. И. Петров. - М.: Горячая линия-Телеком,
2000. - 300 с.
. Стаблибайн
Т. Регулярные выражения. Карманный справочник [Текст]/ Т. Стаблибайн. - СПб.:
Питер, 2004. - 160 с.
. Уолл
Л. Программирование на Perl [Текст]/ Л. Уолл, Т. Кристиансен, Дж. Орвант. -
СПб.: Символ, 2005. - 1150 с.
. Уорсли
Дж. PodtgreSQL для профессионалов [Текст]/ Дж. Уорсли, Дж. Дрейк. - СПб.:
Питер, 2003. - 496 с.
. Фридл
Дж. Регулярные выражения [Текст]/ Дж. Фридл. - СПб.: Питер, 2003. - 723
с.
Приложение А
Окна редактора медицинских карт
Рисунок А.1 - Добавление карты
Рисунок А.2 - Не заполненные поля карты
Рисунок А.3 - Выбор медицинской карты для редактирования
Рисунок А.4 - Редактирование медицинской карты
Приложение Б
Листинг модулей информационной системы «Medic»
Б.1 Код модуля
«ConnectDB.pm»
#!C:\www\Perl5.8.9\bin\perlmodules::ConnectDB;strict;warnings;modules::dbase;SelectFromDB{$h
= $_[2] || '0';$dbMedic = modules::dbase->new();
$dbMedic->dbConnect();
#my $query = qq"SET client_encoding TO 'UTF8'";
#my $result = $dbMedic->execSelect(\$query);$query =
qq"SET DATESTYLE TO 'GERMAN, DMY'";$result =
$dbMedic->execSelect(\$query);
$query = qq"$_[1]";
$result = $dbMedic->execSelect(\$query);
#print qq"<br />Erorr: ----->
$result";($result eq 1){qq"<span>Операция не может выполнена. Обратитесь к админестратору.</span>";
}
{if($h ne 0){$co = CGI->new();@qq = $co->Vars;$ses =
$co->param('ses');$now = localtime time;
$query =~ s/\'/\\\'/g;($h eq 1){
#print
"<br><br>--->$ENV{'REMOTE_ADDR'}";
$dbMedic->execSelect(\qq[insert into
transaction_history(request_date, query_data, data_param, sot_id) values('$now',
E'$query', '@qq', (SELECT id_sot FROM sesion WHERE sesion = '$ENV{'ses'}'))]);
}($h eq 2){
#print
"<br><br>--->$ENV{'REMOTE_ADDR'}";
$dbMedic->execSelect(\qq[insert into
history_connections(request_date, query_data, data_param, ip_adress) values('$now',
E'$query', '@qq', '$ENV{REMOTE_ADDR}')]);
}($h eq 3){
#print
"<br><br>--->$ENV{'REMOTE_ADDR'}";
$dbMedic->execSelect(\qq[insert into
history_session(request_date, query_data, data_param, ip_adress) values('$now',
E'$query', '@qq', '$ENV{REMOTE_ADDR}')]);
}
}
}
$dbMedic->dbDisconnect();$result;
}
;
Б.2 Код модуля
«exel_card.pm»
#!C:\www\Perl5.8.9\bin\perlmodules::exel_card;strict;warnings;Spreadsheet::WriteExcel;utf8;Encode;POSIX
qw(strftime);modules::ConnectDB;NewExel{
###################################Получение данных из
базы####################################$query = qq"SELECT a.id_card AS
id_card,.surname_stud AS surname_stud,.name_stud AS name_stud,.middlename_stud
AS middlename_stud,
(SELECT name_gr FROM group_fac WHERE id_gr = b.id_gr) AS
name_grp,
(SELECT name_fac FROM faculty WHERE id_fac = (SELECT id_fac
FROM group_fac WHERE id_gr = b.id_gr)) AS name_fac,.policy AS
policy,.number_passport AS number_passport,.sex AS sex,.birthday AS
birthday,.home_fone AS home_fone,.mob_fone AS mob_fone,
(SELECT region FROM region WHERE id_region = a.id_region) AS
region,
(SELECT town FROM town WHERE id_town = a.id_town) AS town,
(SELECT area FROM area WHERE id_area = a.id_area) AS
area,.streat AS streat,.house AS house,.case_ AS case_,.kv_num AS kv_num,.stav_streat
AS stav_streat,.stav_house AS stav_house,.stav_case AS stav_case,.stav_kv_num
AS stav_kv_numcard aJOIN students b ON a.id_stud = b.id_studa.id_card =
'$_[1]'";$result = modules::ConnectDB->SelectFromDB($query);
###############################################################################################$file
= "card_".time.".xls";$workbook =
Spreadsheet::WriteExcel->new("../htdocs/Excel/$file");$worksheet =
$workbook->add_worksheet("Лист 1");
$worksheet->hide_gridlines();
##########################################Форматы
ячеек########################################$format =
$workbook->add_format(font => 'Times New Roman',=> 10,=>
'center');$format1 = $workbook->add_format(font => 'Times New
Roman',=> 10,=> 'center');
$format1->set_underline(1);$format2 =
$workbook->add_format(font => 'Times New Roman',=> 10,=> 'center');
$format2->set_font_script(1);$format_head =
$workbook->add_format(font => 'Times New Roman',=> 12,=> 'center');
#$format_head->merge_range('A1:D1', 'Vertical and horizontal',
$format_head);$format_cell = $workbook->add_format(font => 'Times New
Roman',=> 12);
#$format_cell->set_size(30);
#$format_cell->set_shrink(1);
#$format_cell->set_align('fill');
#$format_cell->set_center_across(1);
#$format_cell->set_text_wrap();
$worksheet->set_column(0, 0, 29.43, $format_cell);
$worksheet->set_column(1, 0, 32.71, $format_cell);
$worksheet->set_column(2, 0, 23.29, $format_cell);
##########################################Вставка данных в
ячейки##############################
my $i;
#$worksheet->merge_range('A1:D1',
decode('utf-8',"$_[4]"), $format_head);
#########################################################################
$worksheet->write('A2', ' СевКавГТУ ',$format1);
$worksheet->write('A3', 'наименование
учереждения',$format2);
#########################################################################
$worksheet->write('C1', 'Код формы по ОКУД:',$format);
$worksheet->write('C2',
'Код учереждения по ОКПО:',$format);
$worksheet->write('C3',
'Медицинская документация',$format);
$worksheet->write('C4', 'Форма № 025/у',$format);
#########################################################################my
$key (@$result) {
#$key->{'id_gr'}
$worksheet->merge_range('A7:C7', qq"МЕДИЦИНСКАЯ КАРТА
АМБУЛАТОРНОГО БОЛЬНОГО
№".decode('utf-8',"$key->{'id_card'}"), $format_head);
$worksheet->merge_range('A9:C9', qq"ФИО студента:
".decode('utf-8',"$key->{'surname_stud'}").'
'.decode('utf-8',"$key->{'name_stud'}").' '.decode('utf-8',"$key->{'middlename_stud'}"),
$format_head);
$worksheet->write('A11', 'Факультет:
'.decode('utf-8',"$key->{'name_fac'}"),"font => 'Times New
Roman', size => 12");
$worksheet->write('B11', 'Группа:
'.decode('utf-8',"$key->{'name_grp'}"),"font => 'Times New
Roman', size => 12");
$worksheet->write('A12', '№ полиса:
'.decode('utf-8',"$key->{'policy'}"),"font => 'Times New
Roman', size => 12");
$worksheet->write('B12', '№ паспорта:
'.decode('utf-8',"$key->{'number_passport'}"),"font =>
'Times New Roman', size => 12");$sex;($key->{'sex'} eq 1) {$sex =
'Мужской';}($key->{'sex'} eq 2) {$sex = 'Женский';}{$sex = '-';}
$worksheet->write('A14', 'Пол: '.$sex,"font =>
'Times New Roman', size => 12");
$worksheet->write('B14', 'Телефон домашний:
'.decode('utf-8',"$key->{'home_fone'}"),"font => 'Times
New Roman', size => 12");
$worksheet->write('A15', 'Дата рождения:
'.decode('utf-8',"$key->{'birthday'}"),"font => 'Times New
Roman', size => 12");
$worksheet->write('B15', 'Телефон сотовый:
'.decode('utf-8',"$key->{'mob_fone'}"),"font => 'Times New
Roman', size => 12");
$worksheet->write('A17', 'Адрес больного:',"font
=> 'Times New Roman', size => 12");
$worksheet->write('B17', 'регион:
'.decode('utf-8',"$key->{'region'}"),"font => 'Times New
Roman', size => 12");
$worksheet->write('C17', 'район:
'.decode('utf-8',"$key->{'area'}"),"font => 'Times New
Roman', size => 12");
$worksheet->write('B18', 'город:
'.decode('utf-8',"$key->{'town'}"),"font => 'Times New
Roman', size => 12");
$worksheet->write('C18', 'улица: '.decode('utf-8',"$key->{'streat'}"),"font
=> 'Times New Roman', size => 12");
$worksheet->write('B19', 'дом №:
'.decode('utf-8',"$key->{'house'}"),"font => 'Times New
Roman', size => 12");$case_ = $key->{'case_'} || '-';
$worksheet->write('C19', 'корпус: '.$case_,"font
=> 'Times New Roman', size => 12");$kv_num = $key->{'kv_num'} ||
'-';
$worksheet->write('B20', 'квартира №: '.$kv_num,"font
=> 'Times New Roman', size => 12");
$worksheet->write('A22', 'Адрес в Ставрополе:',"font
=> 'Times New Roman', size => 12");$stav_streat =
$key->{'stav_streat'} || '-';
$worksheet->write('B22', 'улица:
'.decode('utf-8',$stav_streat),"font => 'Times New Roman', size =>
12");$stav_house = $key->{'stav_house'} || '-';
$worksheet->write('C22', 'дом №:
'.decode('utf-8',$stav_house),"font => 'Times New Roman', size =>
12");$stav_case = $key->{'stav_case'} || '-';
$worksheet->write('B23', 'корпус:
'.decode('utf-8',$stav_case),"font => 'Times New Roman', size =>
12");$stav_kv_num = $key->{'stav_kv_num'} || '-';
$worksheet->write('C23', 'квартира №:
'.decode('utf-8',$stav_kv_num),"font => 'Times New Roman', size =>
12");
}$file;
}
;
Б.3 Код модуля
«kernel.pm»
#!C:\www\Perl5.8.9\bin\perlmodules::kernel;strict;warnings;modules::ConnectDB;modules::ses;Templete;check_login
{( $login, $pass, $wnd ) = ( $_[1], $_[2], $_[3]
);$q;$id_s;$title;$CGISESSID;$query = qq"SELECTWHEN name = '$login' and
pass = md5('$pass') THEN 1 ELSE 0 END AS result,_sotsot";$result =
modules::ConnectDB->SelectFromDB($query);my $key (@$result) {( $key->{'result'}
) { $q = 1; $id_s = $key->{'id_sot'}; last; }{ $q = 0; }
}( $q == 1 ) { $CGISESSID = get_session('modules::kernel',
$wnd, $id_s); }{ $CGISESSID = "Error"; $title = 'Не верно ввели имя
или пароль'; }$CGISESSID, $title, $id_s;
}get_session {( $CGISESSID, $u_ip ) =
modules::ses->new_ses();($wnd, $id_s) = ($_[1], $_[2]);$now = localtime
time;$query ="select * from ses(\'$id_s\', \'$CGISESSID\', \'$now\',
\'$u_ip\', \'$wnd\' )";$result =
modules::ConnectDB->SelectFromDB($query, 3);$CGISESSID;
}read_last_page {$query = qq"SELECT last_wnd FROM sesion
where id_sot = (select id_sot from sot where name ='$_[1]' and pass =
md5('$_[2]'))";$result = modules::ConnectDB->SelectFromDB($query);$q =
0;my $key (@$result) {
$q = $key->{'last_wnd'};
}$q;
}query_file {$query = qq(SELECT file_ FROM wnd where
id_button = '$_[1]');$result = modules::ConnectDB->SelectFromDB($query);$q
=0;my $key (@$result) {
$q = $key->{'file_'};
}$q;
}user_id {($login, $pass, $ses) = ($_[1], $_[2],
$_[3]);$query;($login eq '' or $pass eq '0' and $ses ne '0') {
$query = qq"SELECT id_sot FROM sesion WHERE sesion =
'$ses'";
}($login ne '' and $pass ne '0') {
$query = qq"SELECT id_sot FROM sot WHERE name = '$login'
AND pass = md5('$pass')";
}{ return 0;}$result =
modules::ConnectDB->SelectFromDB($query, 2);$q =0;my $key (@$result) {
$q = $key->{'id_sot'};
}$q;
}
;
Б.4 Код модуля
«ses.pm»
#!C:\www\Perl5.8.9\bin\perlmodules::ses;strict;warnings;CGI::Session('-ip_match');modules::ConnectDB;new_ses
{#создание новой сессии
my $session = CGI::Session->new("driver:File",
undef, {Directory=>'/var/www/vhosts/medic/tmpsession'});$CGISESSID =
$session->id();
$session->flush();$u_ip =
$session->param('_SESSION_REMOTE_ADDR');
$session->delete();
$session->flush(); $CGISESSID, $u_ip;#возвращает
IP-пользователя и его ID-сессии
}
sub check_ses {#функция проверки сесси
my ($CGISESSID, $id) = ($_[1], $_[2]);$res = 0;$query =
"SELECT * FROM check_ses(\'$CGISESSID\',\'$id\')";#check_ses() смотри
в БД$result = modules::ConnectDB->SelectFromDB($query);my $key (@$result)
{($key->{'check_ses'} == 1) {1;
}($key->{'check_ses'} == 0){0;
}{-1;
}
}
}
;
Б.5 Код модуля
«Templete.pm»
#!C:\www\Perl5.8.9\bin\perlTemplete;strict;warnings;modules::ConnectDB;
#print "Content-type: text/html\n\n";
#<HTML>
sub gen_menu{#функция генерации меню для
пользователя
my $log_id = $_[1];$query = qq"SELECT a.sot_id AS
sot_id,
(SELECT q.name_func FROM func q WHERE a.func_id = q.func_id)
AS name_func,
(SELECT w.rus_name FROM func w WHERE a.func_id = w.func_id)
AS rus_name,
(SELECT e.name FROM wnd e WHERE a.wnd_id = e.id_button) AS
name_wnd,.wnd_id,
(SELECT r.file_ FROM wnd r WHERE a.wnd_id = r.id_button) AS
file_,.t_f AS t_fsot_func a a.t_f = 'true' AND a.func_id = '8' AND a.sot_id =
'$log_id'BY name_wnd";$result =
modules::ConnectDB->SelectFromDB($query);$result;
}name_wnd{$res;$query = qq"SELECT * FROM wnd WHERE
id_button = '$_[1]' ORDER BY name";$result =
modules::ConnectDB->SelectFromDB($query);my $key (@$result) {
$res = "($key->{'id_button'})
$key->{'name'}";
}$res;
}
;
Б.6 Код шаблона
«start_page.tt»
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"#"523233.files/image035.jpg">
Слайд 1 - Тема дипломного проекта, ФИО дипломника, ученая степень, ученое
звание и ФИО руководителя
Слайд 2 - Актуальность и цель дипломного проекта
Слайд 3 - Даталогическая модель базы
данных
Слайды 4 - Интерфейс информационной системы
Слайды 5 - Интерфейс информационной системы
Слайды 6 - Права и группы пользователей
Слайды 7 - Права и группы пользователей
Слайды 8 - Пример медицинской карты, формируемый информационной системой
Слайды 9 - Примеры списков флюорографии, формируемый информационной
системой
Слайд 10 - Показатели технико-экономической эффективности проекта
Слайд 11
- Итоги дипломного
проектирования