close

Вход

Забыли?

вход по аккаунту

?

ОТЧЕТ КУРСАЧ БД

код для вставкиСкачать
ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ
Курсовая работа
по дисциплине
"Базы данных"
"Разработка информационной системы на платформе Oracle"
СтудентКузнецов А.А.подпись, дата фамилия, инициалыГруппаПИ-11РуководительАлексеев В.А.ученая степень, званиеподпись, датафамилия, инициалы
Липецк 2013
Задание кафедры Разработать информационную систему на платформе Oracle в соответствии составленным техническим заданием для предметной области "Поликлиника".
Аннотация С. 58. Ил. 35. Табл. 11. Литература 3 назв. Прил. 4 В работе рассматривается разработка информационной системы на платформе Oracle для предметной области "Поликлиника". Приведены анализ предметной области, результаты разработки технического задания, необходимые SQL-запросы и PL\SQL-скрипты, руководство пользователя.
Содержание
Введение ................................................................................................................. 6
1 Техническое задание .......................................................................................... 7
1.1 Описание предметной области .......................................................................7
1.2. Модель вариантов использования .................................................................7
1.2.1 Пациент.......................................................................................................... 7
1.2.2 Работник регистратуры ............................................................................... 8
1.2.3 Врач ............................................................................................................... 8
1.2.4 Главный врач ................................................................................................ 8 1.3 Требования к информационному и программному обеспечению ............. 9
2 Технический проект ......................................................................................... 10
2.1 Модели локальных представлений .............................................................. 10
2.1.1 Локальные ER-диаграммы ......................................................................... 10
2.1.2 Основные запросы (на естественном языке)............................................ 11
2.2 Инфологическая модель предметной области ........................................... 12
2.2.1 ER-диаграмма ............................................................................................. 12
2.2.2 Спецификация сущностей ......................................................................... 13
2.2.3 Спецификация связей ................................................................................. 15
2.3 Физическая модель базы данных ..................................................................16
2.3.1 Диаграмма физической модели.................................................................. 16
2.3.2 Спецификация таблиц ................................................................................ 16
2.4 Основные запросы к базе данных ................................................................ 18
2.4.1 Формулировка на естественном языке ..................................................... 18
2.4.2 Формулировка в виде выражения реляционной алгебры ....................... 21
2.4.3 Формулировка в виде реляционного исчисления с переменными кортежами ............................................................................................................ 23
2.4.4 Формулировка на языке SQL .................................................................... 23 2.5 Хранимые процедуры ................................................................................... 26
2.5.1 Блок-схема алгоритма ................................................................................ 26
2.5.2 Код на языке PL/SQL ................................................................................. 27
2.6 Архитектура информационной системы .................................................... 29
3 Рабочий проект ................................................................................................ 29
3.1 SQL-скрипт создания базы данных ............................................................ 29
3.2 SQL-скрипт хранимых процедур ................................................................ 30
3.3 Тексты основных модулей программы ...................................................... 30
3.4 Руководство пользователя ........................................................................... 30
3.4.1 Введение ..................................................................................................... 30
3.4.2 Назначение и условия применения .......................................................... 30
3.4.3 Подготовка к работе .................................................................................. 31
3.4.4 Описание операций ................................................................................... 32
3.4.5 Аварийные ситуации ................................................................................. 37
3.4.6 Рекомендации по освоению ...................................................................... 38
Заключение .......................................................................................................... 39
Список источников ............................................................................................. 39
Приложение 1 SQL-скрипт создания базы данных ......................................... 40
Приложение 2 SQL-скрипт хранимых процедур ............................................. 43
Приложение 3 Тексты основных модулей программы ................................... 46
Приложение 4 Графическая часть ..................................................................... 52
Введение
Цель курсовой работы - углубленное усвоение теоретического материала курса "Базы данных", приобретение практических навыков разработки и документирования информационных систем на базе СУБД Oracle.
Необходимо разработать информационную систему на платформе Oracle. Информационная система предназначена для автоматизации ведения базы данных поликлиники. Актуальность работы объясняется ростом числа пациентов, что приводит к увеличению очередей. Наличие базы данных поликлиники во многом упрощает работу врачей и повышает ее эффективность. Доступ пациентов к базе данных предоставляет возможность для самостоятельной записи на прием, что позволяет уменьшить очереди. В связи с этим возникает необходимость автоматизации ведения базы поликлиники.
1 Техническое задание 1.1 Описание предметной области
Поликлиника занимается обслуживанием пациентов.
Пациент может быть записан на прием к нескольким врачам. Время посещения пациентом одного врача не должно пересекаться со временем посещения другого. При записи на прием следует учитывать график работы врача. Потенциальными пользователями системы являются пациенты, врачи и работники регистратуры. 1.2 Модель вариантов использования
Ниже представлено описание вариантов использования информационной системы. Диаграммы (Use-case) для каждого пользователя представлены в графической части.
1.2.1 Пациент
Одним из возможных пользователей данной системы является пациент. Каждый пациент должен:
* иметь возможность получать информацию о врачах и графике их работы;
* иметь возможность записаться на прием к врачу;
* иметь возможность получить информацию о предыдущих посещениях и текущих записях на прием;
* получать информацию об истории болезни;
1.2.2 Работник регистратуры
Работник регистратуры занимается обслуживанием пациентов. Работник регистратуры должен:
* заносить информацию о пациенте в базу данных, если его еще там нет;
* иметь доступ к информации о графике работы врачей и записях на прием к ним пациентов;
* иметь доступ к информации о пациенте и его записях на прием к врачам;
* записывать пациентов на прием к врачу;
1.2.3 Врач
Врач занимается приемом пациентов. Врач должен:
* иметь возможность получать информацию о пациенте;
* получать информацию о заболеваниях пациента;
* вносить сведения о посещениях и болезнях в медицинскую карту;
* записывать пациентов на повторный прием;
1.2.4 Главный врач
Главный врач формирует график работы всех врачей. Также он имеет возможность получать некоторые статистические данные для анализа. Главный врач должен:
* формировать график работы врачей;
* анализировать загруженность врачей;
* анализировать частоту заболеваемости по возрастам;
* проводить анализ очереди на прием по врачам (количество дней от записи до приема);
1.3 Требования к информационному и программному обеспечению
Oracle 11g Express Edition - объектно-реляционная система управления базами данных компании Oracle. Oracle Database 11g является первой в отрасли открытой легко масштабируемой, безопасной и надежной СУБД с поддержкой стандартов Resource Description Framework (RDF) и Web Ontology Language (OWL).
.NET Framework - программная платформа, выпущенная компанией Microsoft. Основой платформы является исполняющая среда Common Language Runtime (CLR), способная выполнять как обычные программы, так и серверные веб-приложения. .NET Framework поддерживает создание программ, написанных на разных языках программирования.
2 Технический (эскизный) проект 2.1 Модели локальных представлений
2.1.1 Локальные ER-диаграммы
Рис. 1. ER-диаграмма для работника регистратуры.
Рис. 2. ER-диаграмма для пациента, врача и главного врача.
2.1.2 Основные запросы (на естественном языке)
1) Добавить рабочий день для врача.
2) Выбрать график работы врача.
3) Выбрать список пациентов, записанных на прием к данному врачу.
4) Выбрать список пациентов, посещавших ранее данного врача.
5) Выбрать список заболеваний пациента, которые выявил данный врач.
6) Выбрать список посещений данным пациентом врача.
7) Выбрать список заболеваний, выявленных на данном посещении.
8) Выбрать информацию о частоте заболеваемости по возрастам.
9) Выбрать информацию об очереди на прием по врачам.
10) Выбрать информацию о загруженности врачей.
2.2 Инфологическая модель предметной области
2.2.1 ER-диаграмма
Рис. 3. ER-диаграмма предметной области.
Рис. 4. Диаграмма концептуальной модели.
2.2.2 Спецификация сущностей
База данных включает в себя следующие сущности: "Рабочий день",
"Врач", "Заболевание", "Запись на прием", "Посещение", "Пациент". Спецификации сущностей представлены ниже.
Таблица 1. Сущность "Рабочий день".
NameCodeData TypeLengthMandatoryPrimary IdentifierДень неделиWeekdayVariable characters (20)20TRUEFALSEВремя начала работыstart_timeTimeTRUEFALSEВремя окончания работыend_timeTimeTRUEFALSEID рабочего дняID_workdayIntegerTRUETRUE
Таблица 2. Сущность "Врач".
NameCodeData TypeLengthMandatoryPrimary IdentifierФИО врачаDoctor_nameVariable characters (200)200TRUEFALSEСпециализацияspecializationVariable characters (200)200TRUEFALSEДлительность посещенияDurationTimeTRUEFALSEID врачаID_doctorIntegerTRUETRUE
Таблица 3. Сущность "Заболевание".
NameCodeData TypeLengthMandatoryPrimary IdentifierДиагнозDiagnosisVariable characters (200)200TRUEFALSEДата заболеванияdate_of_diseaseDateTRUEFALSEДата выздоровленияdate_of_recoveryDateFALSEFALSEТекущее состояниеCurrent_stateText200TRUEFALSEID заболеванияID_deseaseIntegerTRUETRUE
Таблица 4. Сущность "Запись на прием".
NameCodeData TypeLengthMandatoryPrimary IdentifierДата и время записиrecording_timeDate & TimeTRUEFALSEДата и время планируемого посещенияPlanning_timeDate & TimeTRUEFALSEID записиID_registrationIntegerTRUETRUE
Таблица 5. Сущность "Посещение".
NameCodeData TypeLengthMandatoryPrimary IdentifierДата и времяdate_timeDate & TimeTRUEFALSEЦель посещенияPurposeVariable characters (200)200TRUEFALSEРекомендации врачаAdviceVariable characters (200)200FALSEFALSEID посещенияID_visitIntegerTRUETRUE
Таблица 6. Сущность "Пациент".
NameCodeData TypeLengthMandatoryPrimary IdentifierФИО пациентаpatient_nameVariable characters (200)200TRUEFALSEНомер страхового полисаpolicy_numberCharacters (16)16TRUETRUEМесто работыJobVariable characters (200)200FALSEFALSEАдресAddressVariable characters (200)200TRUEFALSEТелефонPhoneVariable characters (20)20FALSEFALSEДата рожденияBirthdayDateTRUEFALSE
2.2.3 Спецификация связей
Спецификация связей представлена в таблице 7. Таблица 7. Спецификация связей.
NameCodeEntity 2Entity 1ВыявленоdetectedЗаболеваниеПосещениеЗаписываетсяregisterЗапись на приемВрачОсуществляетimplementПациентПосещениеПосещаетсяvisitedПосещениеВрачРаботаетworksРабочий деньВрачСовершаетcommitПациентЗапись на прием 2.3 Физическая модель базы данных
2.3.1 Диаграмма физической модели
Рис. 5. Диаграмма физической модели.
2.3.2 Спецификация таблиц
Таблица 8. List of table keys
NameCodeTableID врачаID_doctorВрачID рабочего дняID_workdayРабочий деньID посещенияID_visitПосещениеID записиID_registrationЗапись на приемНомер страхового полисаpolicy_numberПациентID заболеванияID_deseaseЗаболеваниеID рабочего дняID_workdayРаботаетID заболеванияID_deseaseВыявлено
Таблица 9. List of references
NameCodeParent TableChild TableВыявленоdetectedПосещениеВыявленоВыявленоdetected2ЗаболеваниеВыявленоЗаписываетсяregisterВрачЗапись на приемОсуществляетimplementПациентПосещениеПосещаетсяvisitedВрачПосещениеРаботаетworksВрачРаботаетРаботаетworks2Рабочий деньРаботаетСовершаетcommitПациентЗапись на прием
Таблица 10. List of tables
NameCodeВрачdoctorВыявленоdetectedЗаболеваниеdiseaseЗапись на приемregistrationПациентpatientПосещениеvisitРаботаетworksРабочий деньworkday
Таблица 11. List of table columns
NameCodeTableФИО врачаdoctor_nameВрачСпециализацияspecializationВрачДлительность посещенияdurationВрачID врачаID_doctorВрачДень неделиweekdayРабочий деньВремя начала работыstart_timeРабочий деньВремя окончания работыend_timeРабочий деньID рабочего дняID_workdayРабочий деньДата и времяdate_timeПосещениеЦель посещенияpurposeПосещениеРекомендации врачаadviceПосещениеID посещенияID_visitПосещениеНомер страхового полисаpolicy_numberПосещениеID врачаID_doctorПосещениеДата и время записиrecording_timeЗапись на приемДата и время планируемого посещенияplanning_timeЗапись на приемID записиID_registrationЗапись на приемНомер страхового полисаpolicy_numberЗапись на приемID врачаID_doctorЗапись на приемФИО пациентаpatient_nameПациентНомер страхового полисаpolicy_numberПациентМесто работыjobПациентАдресaddressПациентТелефонphoneПациентДата рожденияbirthdayПациентДиагнозdiagnosisЗаболеваниеДата заболеванияdate_of_diseaseЗаболеваниеДата выздоровленияdate_of_recoveryЗаболеваниеТекущее состояниеcurrent_stateЗаболеваниеID заболеванияID_deseaseЗаболеваниеID врачаID_doctorРаботаетID рабочего дняID_workdayРаботаетID посещенияID_visitВыявленоID заболеванияID_deseaseВыявлено
2.4 Основные запросы к базе данных
2.4.1 Формулировка на естественном языке
2.4.1.1 Запрос на добавление рабочего дня для врача.
Добавить в таблицу "Работает" запись, в которой значение поля "ID_doctor" задать равным значению переменной id_doct, значение поля "ID_workday" задать равным значению переменной w_id.
2.4.1.2 Запрос на выборку информации о графике работы врача.
Выбрать из декартова произведения таблиц "Рабочий день", "Работает" и "Врач" записи, в которых равны значения полей "ID_doctor" таблиц "Врач" и "Работает", равны значения полей "ID_workday" таблиц "Работает" и "Рабочий день" и значение поля "ID_doctor" таблицы "Врач" равно значению переменной id_doct. Вернуть поля "weekday", "start_time", "end_time", "ID_doctor" и "ID_workday".
2.4.1.3 Запрос на выборку списка пациентов, записанных на прием к данному врачу.
Выбрать из декартова произведения таблиц "Пациент" и "Запись на прием" записи, в которых равны значения полей "policy_number" этих таблиц и значение поля "ID_doctor" таблицы "Запись на прием" равно значению переменной id_doct. Вернуть поля "patient_name", "policy_number", "planning_time" и "ID_registration".
2.4.1.4 Запрос на выборку списка пациентов, посещавших ранее данного врача.
Выбрать из декартова произведения таблиц "Пациент" и "Посещение" записи, в которых равны значения полей "policy_number" этих таблиц и значение поля "ID_doctor" таблицы "Посещение" равно значению переменной id_doct. Вернуть поля "patient_name" и "policy_number". Сгруппировать записи по полям "patient_name" и "policy_number".
2.4.1.5 Запрос на выборку списка заболеваний пациента, которых выявил данный врач.
Выбрать из декартова произведения таблиц "Заболевание", "Выявлено" и "Посещение" записи, в которых равны значения полей "ID_desease" таблиц "Заболевание" и "Выявлено", равны значения полей "ID_visit" таблиц "Выявлено" и "Посещение", а также значение поля "policy_number" равно значению переменной num_policy и значение поля "ID_doctor" равно значению переменной id_doct. Вернуть все поля.
2.4.1.6 Запрос на выборку списка посещений данного пациента врачей.
Выбрать записи из таблицы "Посещение", в которых значение поля "policy_number" равно значению переменной num_policy и значение поля "ID_doctor" равно значению переменной id_doct. Вернуть все поля.
2.4.1.7 Запрос на выборку заболеваний, выявленных на данном посещении.
Выбрать записи из декартова произведения таблиц "Заболевание" и "Выявлено", в которых равны значения полей "ID_desease" и значение поля "ID_visit" таблицы "Выявлено" равно значению переменной vis_id. Вернуть поля "diagnosis", "date_of_disease", "date_of_recovery", "current_state" и "ID_desease".
2.4.1.8 Запрос на выборку информации о частоте заболеваемости по возрастам.
Выбрать записи из декартова произведения таблиц "Пациент", "Заболевание", "Посещение" и "Выявлено", в которых равны значения полей "policy_number" таблиц "Пациент" и "Посещение", равны значения полей "ID_visit" таблиц "Посещение" и "Выявлено", также равны значения полей "ID_desease" таблиц "Заболевание" и "Выявлено". Вернуть поля "diagnosis", количество "policy_number" и среднее значение разности текущей даты и "birthday". Записи сгруппировать по полю "diagnosis".
2.4.1.9 Запрос на выборку информации об очереди на прием по врачам.
Выбрать записи из декартова произведения таблиц "Врач" и "Запись на прием", в которых равны значения полей "ID_doctor". Вернуть поля "doctor_name", "specialization", максимальное значение "recording_time", максимальное значение "plannig_time" и разность маежу максимальными значениями "planning_time" и "recording_time". Записи сгруппировать по полям "doctor_name" и "specialization".
2.4.1.10 Запрос на выборку информации о загруженности врачей.
Выбрать записи из декартова произведения таблиц "Врач" и "Запись на прием", в которых равны значения полей "ID_doctor" и значение поля "planning_time" превышает значение текущей даты. Вернуть поля "doctor_name", "specialization" и количество "ID_registration". Записи сгруппировать по полям "ID_doctor", "doctor_name" и "specialization".
2.4.2 Формулировка в виде выражения реляционной алгебры
2.4.2.1 Запрос на выборку информации о графике работы врача.
∏(WD."day",WD."start",WD."end",D."ID",WD."ID")[σ(D."ID_doct"=W."ID_doct" ^ W."ID_day"=WD."ID_day" ^ D."ID"=id_doct)(WD×W×D)]
где WD - отношение "Рабочий день", W - отношение "Работает", D - отношение "Врач".
2.4.2.2 Запрос на выборку списка пациентов, записанных на прием к данному врачу.
∏(P"name",P."num",R."plan_time",R."ID")[σ(R."num"=P."num" ^ R."ID_doct"=id_doct)(P×R)]
где P - отношение "Пациент", R - отношение "Запись на прием"
2.4.2.3 Запрос на выборку списка пациентов, посещавших ранее данного врача.
γ(P."name", P."num")(∏(P"name",P."num")[σ(V."num"=P."num" ^ V."ID_doct"=id_doct)(P×V)])
где P - отношение "Пациент", V - отношение "Посещение"
2.4.2.4 Запрос на выборку списка заболеваний пациента, которых выявил данный врач.
σ(D."ID_dis"=DT."ID_dis" ^ DT."ID_vid"=V."ID_vis" ^ V."num"=num ^ V."ID_doct"=ID_doct)(D×DT×V)
где D - отношение "Заболевание", DT - отношение "Выявлено",
V - в отношение "Посещение".
2.4.2.5 Запрос на выборку списка посещений данным пациентом врача.
σ(V."num"=num ^ V."ID_doct"=ID_doct)(V)
где V - отношение "Посещение".
2.4.2.6 Запрос на выборку заболеваний, выявленных на данном посещении.
∏(D"diagn",D."dis",D."rec",D."stat",D."ID")[σ(D."ID_dis"=DT."ID_dis" ^ DT."ID_vis"=vis_id)(D×DT)]
где D - отношение "Заболевание", DT - отношение "Выявлено".
2.4.2.7 Запрос на выборку информации о частоте заболеваемости по возрастам.
γ("diagn")(∏("diagn" | COUNT(P."num"), AVG(sysdate-"birth"))[σ(P."num"=V."num" ^ V."ID_vis"=DT."id_vis" ^ D."ID_dis"=DT."ID_dis")(P×D×V×DT)])
где P - отношение "Пациент", D - отношение "Заболевание", V - отношение "Посещение", DT - отношение "Выявлено".
2.4.2.8 Запрос на выборку информации об очереди на прием по врачам.
γ(D."name",D."spec")(∏(D."name",D."spec" | MAX("rec"),MAX("plan"), MAX("plan")-MAX("rec"))[σ(D."ID_doct"=R."ID_doct")(D×R)])
где D - отношение "Врач", R - отношение "Запись на прием".
2.4.2.9 Запрос на выборку информации о загруженности врачей.
γ( D."ID_doct",D."name",D."spec")(∏(D."name",D."spec" | COUNT("ID_reg"))[σ(D."ID_doct"=R."ID_doct" ^ "plan_time">sysrate)(D×R)])
где D - отношение "Врач", R - отношение "Запись на прием"
2.4.3 Формулировка в виде выражения реляционного исчисления с переменными-кортежами
2.4.3.1 Запрос на выборку информации о графике работы врача.
Результатом запроса на выборку информации о графике работы врача является отношение S:
где WD - отношение "Рабочий день", W - отношение "Работает", D - отношение "Врач".
2.4.3.2 Запрос на выборку списка пациентов, записанных на прием к данному врачу. Результатом запроса на выборку списка пациентов, записанных на прием к данному врачу является отношение S:
где P - отношение "Пациент", R - отношение "Запись на прием"
2.4.4 Формулировка на языке SQL
2.4.4.1 Запрос на добавление рабочего дня для врача.
insert into "works ("ID_doctor","ID_workday") values([id_doct],[w_id])
2.4.4.2 Запрос на выборку информации о графике работы врача.
select WD."weekday",WD."start_time",WD."end_time", D."ID_doctor", WD."ID_workday" from "workday" WD,"works" W,"doctor" D
where D."ID_doctor"=W."ID_doctor" and W."ID_workday"=WD."ID_workday"
and D."ID_doctor" = [id_doct]
2.4.4.3 Запрос на выборку списка пациентов, записанных на прием к данному врачу.
select P."patient_name",P."policy_number",R."planning_time",R."ID_registration"
from "patient" P,"registration" R
where R."policy_number" = P."policy_number" and R."ID_doctor"= [id_doct]
2.4.4.4 Запрос на выборку списка пациентов, посещавших ранее данного врача.
select P."patient_name",P."policy_number" from "patient\" P,"visit" V
where V."policy_number" = P."policy_number" and V."ID_doctor"= [id_doct]
group by P."patient_name",P."policy_number"
2.4.4.5 Запрос на выборку списка заболеваний пациента, которых выявил данный врач.
select * from "disease" D,"detected" DT, "visit" V
where D."ID_desease"=DT."ID_desease" and DT."ID_visit"=V."ID_visit"
and V."policy_number"='[num_policy]' and V."ID_doctor"=[id_doct]
2.4.4.6 Запрос на выборку списка посещений данным пациентом врача.
select * from "visit" V where V."policy_number"='[num_policy]' and V."ID_doctor"=[id_doct]
2.4.4.7 Запрос на выборку заболеваний, выявленных на данном посещении.
select D."diagnosis",D."date_of_disease",D."date_of_recovery", D."current_state",D."ID_desease"
from "disease" D,"detected" DT where D."ID_desease"=DT."ID_desease" and DT."ID_visit"=[vis_id]
2.4.4.8 Запрос на выборку информации о частоте заболеваемости по возрастам.
select "diagnosis", COUNT(P."policy_number"),
trunc(avg( sysdate-"birthday")/365)
from "patient" P, "disease" D, "visit" V,"detected" DT
where P."policy_number"=V."policy_number" and V."ID_visit"=DT."ID_visit"
and D."ID_desease"=DT."ID_desease" group by "diagnosis"
2.4.4.9 Запрос на выборку информации об очереди на прием по врачам.
select D."doctor_name", D."specialization", max("recording_time"), max("planning_time"),
(extract(day from max("planning_time"))-extract(day from max("recording_time")))
from "doctor" D, "registration" R where D."ID_doctor"=R."ID_doctor" group by D."doctor_name", D."specialization"
2.4.4.10 Запрос на выборку информации о загруженности врачей.
select "doctor_name","specialization",count("ID_registration")
from "doctor" D, "registration" R
where R."ID_doctor"=D."ID_doctor" and "planning_time">sysdate
group by D."ID_doctor","doctor_name" ,"specialization"
2.5 Хранимые процедуры
2.5.1 Блок-схема алгоритма
2.5.1.1 Хранимая процедура добавления записи о заболевании, выявленном на данном посещении.
Рис. 6. Блок-схема хранимой процедуры добавления записи о заболевании, выявленном на данном посещении.
2.5.1.2 Хранимая процедура добавления врача.
Рис. 7. Блок-схема хранимой процедуры добавления врача.
2.5.1.3 Хранимая процедура добавления пациента.
Рис. 8. Блок-схема хранимой процедуры добавления пациента.
2.5.1.4 Хранимая процедура добавления рабочего дня.
Рис. 9. Блок-схема хранимой процедуры добавления рабочего дня.
2.5.1.5 Хранимая процедура добавления записи на прием.
Рис. 10. Блок-схема хранимой процедуры добавления записи на прием.
2.5.1.6 Хранимая процедура создания записи о посещении.
Рис. 11. Блок-схема хранимой процедуры создания записи о посещении.
2.5.1.7 Хранимая процедура удаления рабочего дня
Рис. 12. Блок-схема хранимой процедуры удаления рабочего дня.
2.5.2 Код на языке PL/SQL
2.5.2.1 Хранимая процедура добавления записи о заболевании, выявленном на данном посещении.
create or replace PROCEDURE ADD_DISEASE insert into "disease" ("diagnosis","date_of_disease","date_of_recovery","current_state")
VALUES (DIS,DAT,NULL,STAT);
insert into "detected" ("ID_visit","ID_desease")
values (ID_VIS,(select max("ID_desease") from "disease"));
2.5.2.2 Хранимая процедура добавления врача.
insert into "doctor" ("doctor_name","specialization","duration")
VALUES (N,S,D);
2.5.2.3 Хранимая процедура добавления пациента.
insert into "patient"
("patient_name","policy_number","job","address","phone","birthday")
values(NAM,POLIC,JB,ADDR,PHON,BIRTH);
2.5.2.4 Хранимая процедура добавления рабочего дня.
INSERT into "workday" ("weekday", "start_time", "end_time") VALUES (D, F, T); 2.5.2.5 Хранимая процедура добавления записи на прием.
insert into "registration"
("recording_time", "planning_time", "policy_number", "ID_doctor")
VALUES(sysdate,DT,POLIC,ID_DOCT);
2.5.2.6 Хранимая процедура создания записи о посещении.
insert into "visit" ("date_time","purpose","advice","policy_number","ID_doctor")
VALUES (sysdate,'посещение',NULL,
(select R."policy_number" from "registration" R where R."ID_registration"=ID_REG),
(select R."ID_doctor" from "registration" R where R."ID_registration"=ID_REG));
delete from "registration" R
where R."ID_registration"=ID_REG;
2.5.2.7 Хранимая процедура удаления рабочего дня
delete from "works" where "ID_workday"=ID_DAY;
delete from "workday" where "ID_workday"=ID_DAY;
2.6 Архитектура информационной системы
В данной информационной системе основное приложение для поликлиники написано с использованием платформы .NET Framework.
Приложение оперирует с базой данных посредством объектно-реляционной системы управления базами данных Oracle 11g Express Edition. Рис. 13. Архитектура информационной системы
3 Рабочий проект 3.1 SQL-скрипт создания БД
Концептуальная и физическая модели базы данных поликлиники были созданы в среде PowerDesigner. SQL-скрипт создания БД был сгенерирован средствами среды PowerDesigner (см. приложение 1).
3.2 SQL-скрипт хранимых процедур SQL-скрипты хранимых процедур приведены в приложении 2.
3.3 Текст программы
Основные модули и текст программы см. в приложении 3.
3.4 Руководство пользователя
3.4.1 Введение
В данном руководстве описывается приложение POLY.exe. Приложение реализует возможности, требуемые пользователями групп "Пациент", "Работник регистратуры", "Врач" и "Главный врач". Пользователи системы должны иметь опыт работы с персональным компьютером на базе операционных систем Microsoft Windows на уровне квалифицированного пользователя и свободно осуществлять базовые операции.
Перед началом работы с приложением необходимо ознакомиться с Руководством пользователя.
3.4.2 Назначение и условие применения
Приложение POLY.exe предназначено для автоматизации перечисленных ниже функций пользователей.
Функции пользователей группы "Пациент":
* получение информации о врачах и графике их работы;
* запись на прием к врачу;
* получение информацию о предыдущих посещениях и текущих записях на прием;
* получение информации об истории болезни;
Функции пользователей группы "Работник регистратуры":
* занесение информации о пациенте в базу данных, если его еще там нет;
* получение доступа к информации о графике работы врачей и записях на прием к ним пациентов;
* получение доступа к информации о пациенте и его записях на прием к врачам;
* запись пациентов на прием к врачу;
Функции пользователей группы "Врач":
* получение информации о пациенте;
* получение информации о заболеваниях пациента;
* добавление сведений о посещениях и болезнях в медицинскую карту;
* запись пациентов на повторный прием;
Функции пользователей группы "Главный врач":
* формирование графика работы врачей;
* проведение анализа загруженности врачей;
* проведение анализа частоты заболеваемости по возрастам;
* проведение анализа очереди на прием по врачам; Необходимыми условиями обеспечения применения приложения DB_CW.exe является наличие ПК с установленными ОС Windows 7/8, .Net Framework 3.5, СУБД Oracle Database 11g Express Edition. Рекомендуемые требования к аппаратной конфигурации ПК: процессор AMD Turion(tm) II P540 Dual-Core Processor 2.40 GHz, 3 ГБ RAM, монитор с разрешением не ниже 1366*768, клавиатура, мышь.
3.4.3 Подготовка к работе Для начала работы необходимо запустить исполняемый файл POLY.exe, предварительно скопировав его и файлы отчетов с дистрибутивного носителя на жёсткий диск ПК. Приложение следует считать работоспособным в случае его успешного запуска.
3.4.4 Описание операций Первой операцией, которую необходимо выполнить после запуска приложения, является выбор группы пользователя в главном окне программы.
Рис. 14. Главное окно программы.
Дальнейшие действия зависят от группы пользователя.
При выборе группы "Пациент" отроется рабочее окно пациента. Предварительно необходимо указать номер страхового полиса пациента.
Рис. 15. Рабочее окно пациента.
Для осуществления необходимых действий нужно осуществлять выбор соответствующих пунктов из контекстного меню элементов отображения информации. Для просмотра рабочего дня врачей следует выделить нужного врача в списке врачей. Для записи на прием следует выделить нужного врача в списке и выбрать пункт контекстного меню "Записаться на прием". Для просмотра записей на прием нужно перейти на вкладку "Записи на прием". Для удаления записи на прием следует выделить нужную запись и выбрать пункт контекстного меню "Не пойду". Для просмотра информации о предыдущих посещениях и истории болезни следует перейти на соответствующие вкладки. При выборе группы "Работник регистратуры" отроется рабочее окно работника регистратуры.
Рис. 16. Рабочее окно работника регистратуры.
Для осуществления необходимых действий нужно осуществлять выбор соответствующих пунктов из контекстного меню элементов отображения информации. Для записи пациента следует выделить нужного врача в списке и выбрать пункт контекстного меню "Записать пациента на прием". Для просмотра списка записанных пациентов следует выделить нужного врача в списке и выбрать пункт контекстного меню "Список записанных пациентов".
Для просмотра записей пациента следует выделить в списке нужного пациента и выбрать пункт контекстного меню "Записи на прием". Для добавления нового пациента следует выбрать из контекстного меню списка пациентов пункт "Добавить пациента".
При выборе группы "Врач" отроется рабочее окно врача.
Предварительно необходимо выбрать нужного врача.
Для создания записи о посещении следует выделить нужного пациента из списка записанных пациентов и выбрать пункт контекстного меню "Создать запись о посещении". Для записи пациента на прием следует выделить нужного пациента в списке пациентов и выбрать пункт контекстного меню "Записать на прием". Для просмотра информации о пациенте следует выделить в списке нужного пациента и выбрать пункт контекстного меню "Информация". При этом откроется окно информации о пациенте. Для просмотра информации о посещениях пациента следует выделить нужного пациента в списке и выбрать пункт контекстного меню "Посещения". Для изменения записей о заболеваниях пациента нужно выделить нужную запись в списке заболеваний в окне "Информация о пациенте" или в окне "Посещения пациента" и выбрать пункт контекстного меню "Изменить". Добавление записей о заболевании производится в окне "Посещения пациента". Для добавления записи о заболевании следует выделить нужное посещение и выбрать пункт контекстного меню "Добавить запись о заболевании".
Рис. 17. Окно просмотра информации о пациенте
Рис. 18. Окно просмотра посещений пациента.
При выборе группы "Главный врач" отроется рабочее окно главного врача.
Рис. 19. Рабочее окно главного врача.
Для добавления врача следует выбрать пункт контекстного меню списка врачей "Добавить врача". Для добавления рабочего для врача следует выделить нужного врача в списке врачей и выбрать пункт контекстного меню "Добавить рабочий день". Затем следует отметить требуемые рабочие дни. Добавление и удаление рабочих дней производится на вкладке "Рабочие дни". Для удаления рабочего дня следует выделить нужный рабочий день в списке рабочих дней и выбрать пункт контекстного меню "Удалить". Для получения статистической информации о загруженности врачей, заболеваемости или очереди пациентов следует открыть соответствующие вкладки. Для обновления информации необходимо выбрать пункт контекстного меню "Обновить данные". Для получения отчета необходимо выбрать пункт контекстного меню "Отчет".
Рис. 20. Отчет.
3.4.5 Аварийные ситуации В случае обнаружения ошибок в данных или несанкционированного вмешательства необходимо обратиться к администратору информационной системы.
3.4.6 Рекомендации по освоению Для освоения предложенной программы рекомендуется ознакомиться с данным руководством пользователя и ознакомиться с контрольным примером приведённым ниже.
В контрольном примере рассматривается вход пациента в систему и запись на прием к врачу.
Шаг 1. Вход в систему. Сначала следует выбрать пользователя "Пациент" в главном окне приложения. Затем необходимо ввести номер полиса и нажать кнопку "Войти".
Шаг 2. В появившемся окне перейти во вкладку "Врачи". Тут же можно ознакомиться с графиком работы врачей.
Шаг 3. Выделить нужного врача и выбрать пункт контекстного меню "Записаться на прием".
Шаг 4. В появившемся окне нажать кнопку "Запись".
Рис. 21. Вход пациента.
Рис. 22. Запись на прием.
Заключение В ходе выполнения курсовой работы была создана модель базы данных поликлиники. Разработка модели базы данных велась последовательно от модели локальных представлений, ER-диаграммы до физической модели. Полученная модель базы данных была реализована в объектно-реляционной системе управления базами данных Oracle 11g Express Edition.
Была разработана информационная система, включающая в себя программу для работы с базой данных. Данная программа позволяет автоматизировать и значительно ускорить ведение базы данных поликлиники. Таким образом, в ходе выполнения курсовой работы были приобретены практические навыки разработки и документирования информационных систем на базе СУБД Oracle.
Список источников
1. Дейт К. Введение в системы баз данных //6-издание. - Киев: Диалектика, 1998. - 784 с.
2. Гарсиа-Молина Г., Ульман Дж., Уидом Дж. Системы баз данных. Полный курс. - М.: "Вильямс", 2003. - 1088 с.
3. Дж. Прайс, Oracle Database 11g: SQL. Операторы SQL и программы PL/SQL. - M.: "Лори", 2012. - 659 с.
Приложение 1
SQL-скрипт создания базы данных
alter table "detected"
drop constraint FK_DETECTED_DETECTED_VISIT;
alter table "detected"
drop constraint FK_DETECTED_DETECTED2_DISEASE;
alter table "registration"
drop constraint FK_REGISTRA_COMMIT_PATIENT;
alter table "registration"
drop constraint FK_REGISTRA_REGISTER_DOCTOR;
alter table "visit"
drop constraint FK_VISIT_IMPLEMENT_PATIENT;
alter table "visit"
drop constraint FK_VISIT_VISITED_DOCTOR;
alter table "works"
drop constraint FK_WORKS_WORKS_DOCTOR;
alter table "works"
drop constraint FK_WORKS_WORKS2_WORKDAY;
drop index "detected2_FK";
drop index "detected_FK";
drop table "detected" cascade constraints;
drop table "disease" cascade constraints;
drop table "doctor" cascade constraints;
drop table "patient" cascade constraints;
drop index "commit_FK";
drop index "register_FK";
drop table "registration" cascade constraints;
drop index "implement_FK";
drop index "visited_FK";
drop table "visit" cascade constraints;
drop table "workday" cascade constraints;
drop index "works2_FK";
drop index "works_FK";
drop table "works" cascade constraints;
create table "detected" (
"ID_visit" INTEGER not null,
"ID_desease" INTEGER not null,
constraint PK_DETECTED primary key ("ID_visit", "ID_desease")
);
create index "detected_FK" on "detected" (
"ID_visit" ASC
);
create index "detected2_FK" on "detected" (
"ID_desease" ASC
);
create table "disease" (
"diagnosis" VARCHAR2(200) not null,
"date_of_disease" DATE not null,
"date_of_recovery" DATE,
"current_state" CLOB not null,
"ID_desease" INTEGER not null,
constraint PK_DISEASE primary key ("ID_desease")
);
create table "doctor" (
"doctor_name" VARCHAR2(200) not null,
"specialization" VARCHAR2(200) not null,
"duration" DATE not null,
"ID_doctor" INTEGER not null,
constraint PK_DOCTOR primary key ("ID_doctor")
);
create table "patient" (
"patient_name" VARCHAR2(200) not null,
"policy_number" CHAR(16) not null,
"job" VARCHAR2(200),
"address" VARCHAR2(200) not null,
"phone" VARCHAR2(20),
"birthday" DATE not null,
constraint PK_PATIENT primary key ("policy_number")
);
create table "registration" (
"recording_time" DATE not null,
"planning_time" DATE not null,
"ID_registration" INTEGER not null,
"policy_number" CHAR(16) not null,
"ID_doctor" INTEGER not null,
constraint PK_REGISTRATION primary key ("ID_registration")
);
create index "register_FK" on "registration" (
"ID_doctor" ASC
);
create index "commit_FK" on "registration" (
"policy_number" ASC
);
create table "visit" (
"date_time" DATE not null,
"purpose" VARCHAR2(200) not null,
"advice" VARCHAR2(200),
"ID_visit" INTEGER not null,
"policy_number" CHAR(16) not null,
"ID_doctor" INTEGER not null,
constraint PK_VISIT primary key ("ID_visit")
);
create index "visited_FK" on "visit" (
"ID_doctor" ASC
);
create index "implement_FK" on "visit" (
"policy_number" ASC
);
create table "workday" (
"weekday" VARCHAR2(20) not null,
"start_time" DATE not null,
"end_time" DATE not null,
"ID_workday" INTEGER not null,
constraint PK_WORKDAY primary key ("ID_workday")
);
create table "works" (
"ID_doctor" INTEGER not null,
"ID_workday" INTEGER not null,
constraint PK_WORKS primary key ("ID_doctor", "ID_workday")
);
create index "works_FK" on "works" (
"ID_doctor" ASC
);
create index "works2_FK" on "works" (
"ID_workday" ASC
);
alter table "detected"
add constraint FK_DETECTED_DETECTED_VISIT foreign key ("ID_visit")
references "visit" ("ID_visit");
alter table "detected"
add constraint FK_DETECTED_DETECTED2_DISEASE foreign key ("ID_desease")
references "disease" ("ID_desease");
alter table "registration"
add constraint FK_REGISTRA_COMMIT_PATIENT foreign key ("policy_number")
references "patient" ("policy_number");
alter table "registration"
add constraint FK_REGISTRA_REGISTER_DOCTOR foreign key ("ID_doctor")
references "doctor" ("ID_doctor");
alter table "visit"
add constraint FK_VISIT_IMPLEMENT_PATIENT foreign key ("policy_number")
references "patient" ("policy_number");
alter table "visit"
add constraint FK_VISIT_VISITED_DOCTOR foreign key ("ID_doctor")
references "doctor" ("ID_doctor");
alter table "works"
add constraint FK_WORKS_WORKS_DOCTOR foreign key ("ID_doctor")
references "doctor" ("ID_doctor");
alter table "works"
add constraint FK_WORKS_WORKS2_WORKDAY foreign key ("ID_workday")
references "workday" ("ID_workday");
Приложение 2
SQL-скрипт хранимых процедур
create or replace PROCEDURE ADD_DISEASE (
DIS IN VARCHAR2 , STAT IN VARCHAR2 , DAT IN DATE , ID_VIS IN NUMBER ) AS BEGIN
insert into "disease" ("diagnosis","date_of_disease","date_of_recovery","current_state")
VALUES (DIS,DAT,NULL,STAT);
insert into "detected" ("ID_visit","ID_desease")
values (ID_VIS,(select max("ID_desease") from "disease"));
END ADD_DISEASE;
create or replace PROCEDURE ADD_DOCTOR (
N IN VARCHAR2 , S IN VARCHAR2 , D IN DATE ) AS BEGIN
insert into "doctor" ("doctor_name","specialization","duration")
VALUES (N,S,D);
END ADD_DOCTOR;
create or replace PROCEDURE ADD_PATIENT (
NAM IN VARCHAR2 , POLIC IN VARCHAR2 , JB IN VARCHAR2 , ADDR IN VARCHAR2 , PHON IN VARCHAR2 , BIRTH IN DATE ) AS BEGIN
insert into "patient"
("patient_name","policy_number","job","address","phone","birthday")
values(NAM,POLIC,JB,ADDR,PHON,BIRTH);
END ADD_PATIENT;
create or replace PROCEDURE ADD_WORKDAY (
D IN VARCHAR2 , F IN DATE , T IN DATE ) AS BEGIN
INSERT into "workday" ("weekday", "start_time", "end_time") VALUES (D, F, T); END ADD_WORKDAY;
create or replace PROCEDURE CREATE_REGISTRATION (
ID_DOCT IN NUMBER , POLIC IN VARCHAR2 , DT IN DATE ) AS BEGIN
insert into "registration"
("recording_time", "planning_time", "policy_number", "ID_doctor")
VALUES(sysdate,DT,POLIC,ID_DOCT);
END CREATE_REGISTRATION;
create or replace PROCEDURE CREATE_VISIT (
ID_REG IN NUMBER ) AS BEGIN
insert into "visit" ("date_time","purpose","advice","policy_number","ID_doctor")
VALUES (sysdate,'посещение',NULL,
(select R."policy_number" from "registration" R where R."ID_registration"=ID_REG),
(select R."ID_doctor" from "registration" R where R."ID_registration"=ID_REG));
delete from "registration" R
where R."ID_registration"=ID_REG;
END CREATE_VISIT;
create or replace PROCEDURE DEL_WORKDAY (
ID_DAY IN NUMBER ) AS BEGIN
delete from "works" where "ID_workday"=ID_DAY;
delete from "workday" where "ID_workday"=ID_DAY;
END DEL_WORKDAY;
Приложение 3
Текст основных модулей программы
Класс Report:
public class Report
{
private string doctor_name;
private string specialization;
private int reg_count;
private string disease;
private int dis_count;
private int avg_age;
private DateTime last_reg;
private DateTime last_vis;
private int days;
public string DoctorName { get { return doctor_name; } }
public string Specialization { get { return specialization; } }
public int PatientCount { get { return reg_count; } }
public string Disease { get { return disease; } }
public int DisCount { get { return dis_count; } }
public int AvgAge { get { return avg_age; } }
public DateTime LastReg { get { return last_reg; } }
public DateTime LastVis { get { return last_vis; } }
public int Days { get { return days; } }
public void SetDoctorName(string doctor_name) { this.doctor_name = doctor_name; }
public void SetSpecialization(string specialization) { this.specialization = specialization; }
public void SetRegCount(int reg_count) { this.reg_count = reg_count; }
public void SetDisease(string disease) { this.disease = disease; }
public void SetDisCount(int dis_count) { this.dis_count = dis_count; }
public void SetAvgAge(int avg_age) { this.avg_age = avg_age; }
public void SetLastReg(DateTime last_reg) { this.last_reg = last_reg; }
public void SetLastVis(DateTime last_vis) { this.last_vis = last_vis; }
public void SetDays(int days) { this.days = days; }
}
Класс MainForm:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
PatientLoginForm plf = new PatientLoginForm();
plf.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void button3_Click(object sender, EventArgs e)
{
RegistratorForm regf = new RegistratorForm();
regf.ShowDialog();
}
private void button4_Click(object sender, EventArgs e)
{
HeadDoctorForm hdf = new HeadDoctorForm();
hdf.ShowDialog();
}
private void button5_Click(object sender, EventArgs e)
{
DoctorLoginForm dlf = new DoctorLoginForm();
dlf.ShowDialog();
}
}
Метод PatientFrom_Load класса PatientForm:
private void PatientForm_Load(object sender, EventArgs e)
{
this.listView1.Columns.Add("Специальность", 200);
this.listView1.Columns.Add("ФИО",200);
this.listView2.Columns.Add("День недели", 100);
this.listView2.Columns.Add("Начало", 100);
this.listView2.Columns.Add("Окончание", 100);
this.listView3.Columns.Add("Запланированное время", 200);
this.listView3.Columns.Add("Врач", 100);
this.listView3.Columns.Add("ФИО", 150);
this.listView4.Columns.Add("Время посещения", 120);
this.listView4.Columns.Add("Цель", 100);
this.listView4.Columns.Add("Врач", 100);
this.listView4.Columns.Add("ФИО", 150);
this.listView5.Columns.Add("Диагноз", 100);
this.listView5.Columns.Add("Дата заболевания", 120);
this.listView5.Columns.Add("Дата выздровления", 120);
this.listView5.Columns.Add("Текущее состояние", 120);
Patient patient = new Patient();
Connection.ConnectionString = "Data source=APTEM_PC; User id=poly; Password=123";
Connection.Open();
OracleCommand Command1 = Connection.CreateCommand();
Command1.CommandText = "select * from \"doctor\"";
doctors = new DataTable();
doctors.Load(Command1.ExecuteReader());
patient.refr_doctors(this.listView1,doctors);
this.regs=patient.refr_registrations(this.listView3,this.Connection,this.policy_number);
OracleCommand Command2 = Connection.CreateCommand();
Command2.CommandText = "select V.\"date_time\",V.\"purpose\" ,D.\"specialization\", D.\"doctor_name\",V.\"advice\" from \"visit\" V,\"doctor\" D" +
" where V.\"ID_doctor\"=D.\"ID_doctor\" and V.\"policy_number\"=\'"+this.policy_number+"\'";
visits = new DataTable();
visits.Load(Command2.ExecuteReader());
patient.refr_visits(this.listView4,visits);
OracleCommand Command3 = Connection.CreateCommand();
Command3.CommandText = "select D.\"diagnosis\",D.\"date_of_disease\",D.\"date_of_recovery\",D.\"current_state\" ,"+
" DC.\"doctor_name\", DC.\"specialization\", V.\"advice\""+
" from \"disease\" D,\"detected\" DT,\"visit\" V, \"doctor\" DC"+
" where D.\"ID_desease\"=DT.\"ID_desease\" and DT.\"ID_visit\"=V.\"ID_visit\""+
" and DC.\"ID_doctor\"=V.\"ID_doctor\" and V.\"policy_number\"=\'"+this.policy_number+"\'";
dis_hist = new DataTable();
dis_hist.Load(Command3.ExecuteReader());
patient.refr_disease_history(this.listView5,dis_hist);
}
Метод RegistratorFrom_Load класса RegistratorForm:
private void RegistratorForm_Load(object sender, EventArgs e)
{
Connection.ConnectionString = "Data source=APTEM_PC; User id=poly; Password=123";
Connection.Open();
this.listView1.Columns.Add("ФИО", 150);
this.listView1.Columns.Add("№ полиса", 100);
this.listView1.Columns.Add("Работа", 80);
this.listView1.Columns.Add("Адрес", 150);
this.listView1.Columns.Add("Телефон", 70);
this.listView1.Columns.Add("Дата рождения", 120);
this.listView2.Columns.Add("Специальность", 300);
this.listView2.Columns.Add("ФИО", 300);
this.listView3.Columns.Add("День недели", 200);
this.listView3.Columns.Add("Начало", 200);
this.listView3.Columns.Add("Окончание", 200);
Registrator registrator=new Registrator();
OracleCommand Command1 = Connection.CreateCommand();
Command1.CommandText = "select * from \"patient\"";
this.patients = new DataTable();
this.patients.Load(Command1.ExecuteReader());
registrator.refr_patients(this.listView1,this.patients);
Patient patient = new Patient();
OracleCommand Command2 = Connection.CreateCommand();
Command2.CommandText = "select * from \"doctor\"";
doctors = new DataTable();
doctors.Load(Command2.ExecuteReader());
patient.refr_doctors(this.listView2, doctors);
}
Метод DoctorFrom_Load класса DoctorForm:
private void DoctorForm_Load(object sender, EventArgs e)
{
this.Text = this.name_doct+", "+this.spec_doct;
Connection.ConnectionString = "Data source=APTEM_PC; User id=poly; Password=123";
Connection.Open();
this.listView1.Columns.Add("ФИО", 150);
this.listView1.Columns.Add("№ полиса", 150);
this.listView1.Columns.Add("Планируемое время", 150);
this.listView2.Columns.Add("ФИО", 200);
this.listView2.Columns.Add("№ полиса", 200);
OracleCommand Command1 = Connection.CreateCommand();
Doctor doct = new Doctor();
Command1.CommandText = "select P.\"patient_name\",P.\"policy_number\",R.\"planning_time\",R.\"ID_registration\" from \"patient\" P,\"registration\" R" +
" where R.\"policy_number\" = P.\"policy_number\" and R.\"ID_doctor\"="+this.id_doct;
this.patients = new DataTable();
this.patients.Load(Command1.ExecuteReader());
doct.refr_rec_pat(this.listView1, this.patients);
OracleCommand Command2 = Connection.CreateCommand();
Command2.CommandText = "select P.\"patient_name\",P.\"policy_number\" from \"patient\" P,\"visit\" V"+
" where V.\"policy_number\" = P.\"policy_number\" and V.\"ID_doctor\"="+this.id_doct+
" group by P.\"patient_name\",P.\"policy_number\"";
this.all_patients = new DataTable();
this.all_patients.Load(Command2.ExecuteReader());
doct.refr_all_pat(this.listView2, this.all_patients);
}
Метод HeadDoctorFrom_Load класса HeadDoctorForm:
private void HeadDoctorForm_Load(object sender, EventArgs e)
{
this.comboBox1.SelectedItem = this.comboBox1.Items[0];
Connection.ConnectionString = "Data source=APTEM_PC; User id=poly; Password=123";
Connection.Open();
this.listView1.Columns.Add("Специальность", 200);
this.listView1.Columns.Add("ФИО", 200);
this.listView2.Columns.Add("День недели", 150);
this.listView2.Columns.Add("Начало", 150);
this.listView2.Columns.Add("Окончание",150);
this.listView3.Columns.Add("День недели", 150);
this.listView3.Columns.Add("Начало", 150);
this.listView3.Columns.Add("Окончание", 150);
this.listView4.Columns.Add("ФИО", 150);
this.listView4.Columns.Add("Специализация", 150);
this.listView4.Columns.Add("Количество записей", 150);
this.listView5.Columns.Add("Заболевание", 150);
this.listView5.Columns.Add("Число случаев", 150);
this.listView5.Columns.Add("Средний возраст", 150);
this.listView6.Columns.Add("ФИО врача", 130);
this.listView6.Columns.Add("Специализация", 80);
this.listView6.Columns.Add("Последнее время записи", 120);
this.listView6.Columns.Add("Последнее посещение", 120);
this.listView6.Columns.Add("Разница в днях",100);
Patient patient = new Patient();
OracleCommand Command2 = Connection.CreateCommand();
Command2.CommandText = "select * from \"doctor\"";
doctors = new DataTable();
doctors.Load(Command2.ExecuteReader());
patient.refr_doctors(this.listView1, doctors);
OracleCommand Command3 = Connection.CreateCommand();
Command3.CommandText = "SELECT * from \"workday\"";
DataTable tab2 = new DataTable();
tab2.Load(Command3.ExecuteReader());
patient.refr_workday(this.listView3, tab2);
this.workdays = tab2;
this.renew_workload_state();
this.renew_diseases_state();
this.renew_queue_state();
}
Класс ReportForm:
public partial class ReportForm : Form
{
public DataTable Table;
public int index;
public ReportForm(DataTable tbl,int index)
{
InitializeComponent();
this.Table = tbl;
this.index = index;
}
public List<Report> GetList()
{
List<Report> lst = new List<Report>();
for (int i = 0; i < this.Table.Rows.Count; i++)
{
if (this.index == 1)
{
Report rprt = new Report();
rprt.SetDoctorName(this.Table.Rows[i].ItemArray.ElementAt(0).ToString());
rprt.SetSpecialization(this.Table.Rows[i].ItemArray.ElementAt(1).ToString());
rprt.SetRegCount(Convert.ToInt32(this.Table.Rows[i].ItemArray.ElementAt(2)));
lst.Add(rprt);
}
if (this.index == 2)
{
Report rprt = new Report();
rprt.SetDisease(this.Table.Rows[i].ItemArray.ElementAt(0).ToString());
rprt.SetDisCount(Convert.ToInt32(this.Table.Rows[i].ItemArray.ElementAt(1)));
rprt.SetAvgAge(Convert.ToInt32(this.Table.Rows[i].ItemArray.ElementAt(2)));
lst.Add(rprt);
}
if (this.index == 3)
{
Report rprt = new Report();
rprt.SetDoctorName(this.Table.Rows[i].ItemArray.ElementAt(0).ToString());
rprt.SetSpecialization(this.Table.Rows[i].ItemArray.ElementAt(1).ToString());
rprt.SetLastReg(Convert.ToDateTime(this.Table.Rows[i].ItemArray.ElementAt(2)));
rprt.SetLastVis(Convert.ToDateTime(this.Table.Rows[i].ItemArray.ElementAt(3)));
rprt.SetDays(Convert.ToInt32(this.Table.Rows[i].ItemArray.ElementAt(4)));
lst.Add(rprt);
}
}
return lst;
}
private void ReportForm_Load(object sender, EventArgs e)
{
this.ReportBindingSource.DataSource = this.GetList();
if (this.index == 1)
{
this.reportViewer1.LocalReport.ReportPath = "Report1.rdlc";
}
if (this.index == 2)
{
this.reportViewer1.LocalReport.ReportPath = "Report2.rdlc";
}
if (this.index == 3)
{
reportViewer1.LocalReport.ReportPath = "Report3.rdlc";
}
this.reportViewer1.RefreshReport();
}
}
Приложение 4. Графическая часть
Диаграммы вариантов использования (Use-case)
Рис. 23. Использование базы пациентами.
Рис. 24. Использование базы работниками регистратуры.
Рис. 25. Использование базы врачами.
Рис. 26. Использование базы главным врачом.
ЕR-диаграмма инфологической модели предметной области
Рис. 27. ER-диаграмма инфологической модели предметной области.
Диаграмма физической модели предметной области
Рис. 28. Диаграмма физической модели предметной области.
Блок-схемы алгоритмов хранимых процедур
Рис. 29. Блок-схема хранимой процедуры добавления записи о заболевании, выявленном на данном посещении.
Рис. 30. Блок-схема хранимой процедуры добавления врача.
Рис. 31. Блок-схема хранимой процедуры добавления пациента.
Рис. 32. Блок-схема хранимой процедуры добавления рабочего дня.
Рис. 33. Блок-схема хранимой процедуры добавления записи на прием.
Рис. 34. Блок-схема хранимой процедуры создания записи о посещении.
Рис. 35. Блок-схема хранимой процедуры удаления рабочего дня.
1
Документ
Категория
Рефераты
Просмотров
136
Размер файла
1 056 Кб
Теги
отчет, курсач
1/--страниц
Пожаловаться на содержимое документа