Разработка информационной системы "Регистратура поликлиники" с использованием клиент–серверной технологии
Проектирование базы данных "Регистратура поликлиники": системный анализ, инфологическое моделирование, даталогическое проектирование. Разработка таблиц удаленной базы данных, бизнес-логики на стороне SQL-сервера. Программирование на стороне клиента.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 29.11.2011 |
Размер файла | 6,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Федеральное агентство по образованию
Белгородский государственный университет
Факультет компьютерных наук и телекоммуникаций
Кафедра математического и программного обеспечения
информационных систем
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
К КУРСОВОЙ РАБОТЕ
по дисциплине: «Теория баз данных»
на тему:
«Разработка информационной системы «Регистратура поликлиники» с использованием клиент - серверной технологии»
010300.1409228.140713.ПЗКР
Руководитель курсовой работы: доц. В.М. Михелев
Белгород 2010
Оглавление
- Введение
- Глава 1. Проектирование базы данных «Регистратура поликлиники»
- 1.1 Системный анализ
- 1.2 Инфологическое моделирование
- 1.3 Даталогическое проектирование
- Глава 2. Разработка программного средства
- 2.1 Программирование на стороне сервера
- 2.1.1 Разработка таблиц удаленной базы данных
- 2.1.1.1 Создание и регистрация базы данных
- 2.1.1.2 Создание доменов
- 2.1.1.3.Создание индексов
- 2.1.1.4 Создание генераторов
- 2.1.1.5 Создание триггеров
- 2.1.2 Разработка бизнес-логики на стороне SQL-сервера
- 2.1.2.1 Создание просмотров
- 2.1.2.2 Создание хранимых процедур
- 2.1.2.3 Создание исключений
- 2.2 Программирование на стороне клиента
- 2.2.1 Разработка Windows-приложения
- 2.2.2 Разработка Web-приложения
- Глава 3. Интерфейс пользователя
- 3.1 Интерфейс Windows-приложения
- 3.2 Интерфейс Web-приложения
- Заключение
- Список использованной литературы
- Введение
- Курсовая работа направлена на создание информационной системы «Регистратура поликлиники» с использованием клиент-серверной технологии. Эта информационная система содержит сведения об пациентах, врачах, обращениях пациентов, болезнях и отделениях поликлиники.
- Для разработки информационной системы используются СУБД Firebird и утилита IBExpert. С учетом поставленных условий для создания информационной системы необходимо выполнить следующие этапы работы. Во-первых, произвести проектирование базы данных, которое включает следующие этапы:
- 1) Системный анализ;
- 2) Инфологическое моделирование;
- 3) Даталогическое проектирование.
Затем необходимо разработать бизнес-логику на стороне сервера. Эта разработка состоит из следующих действий:
- 1) Разработка триггеров и генераторов;
- 2) Разработка представлений/просмотров;
- 3) Разработка хранимых процедур;
- 4) Разработка исключений.
- После этого на языке С++ надо разработать программное обеспечение клиента, с помощью которого он сможет просматривать информацию базы данных и добавлять в нее сведения.
- Затем также на языке С++ необходимо создать Web-интерфейс пользователя для удобства работы с информационной системой.
Создание курсовой работы поможет получить знания и умения в области современных технологий создания баз данных и систем управления данными с использованием клиент-серверной технологии.
- Пояснительная записка содержит 3 главы, 4 источника литературы. В тексте присутствует 41 рисунок, 2 таблицы.
- Глава 1. Проектирование базы данных «Регистратура поликлиники»
- 1.1 Системный анализ
- В базе данных «Регистратура поликлиники» было выбрано 5 сущностей:
- · «Пациенты» - содержат общую информацию клиенте;
- · «Врачи» - содержит сведения о врачах, работающих в данной поликлинике;
- · «Посещения» - включает в себя информацию о визитах пациентов в поликлинику;
- · «Отделения» - содержит общую информацию об отделениях поликлиники ;
- · «Болезни» - содержит сведения о болезнях и их описании.
Для данных сущностей выбраны следующие связи:
- · связь 1-ко-многим между сущностями Пациенты и Посещения;
- · связь 1-ко-многим между сущностями Врачи и Посещения;
- · связь 1-ко-многим между сущностями Болезни и Посещения;
- · связь 1-к-одному сущностями Отделения и Врачи.
- 1.2 Инфологическое моделирование
проектирование база данные программирование
- Стандартом при инфологическом моделировании БД, является модель «сущность - связь», ER- модель. Основой ER модели служат базовые понятия, соответствующие некоторому классу однотипных объектов. Сущность имеет уникальное имя в пределах моделированной системы, также в системе должны быть ключи. Объект, которому соответствует понятие, сущность имеет свой набор атрибутов - это характеристики определяющие свойства данной сущности.
- В результате системного анализа разработана инфологическая модель базы данных, отображённая на рис.1 и рис.2
Рисунок 1. Логическая модель базы данных
Рисунок 2. Физическая модель базы данных
1.3 Даталогическое проектирование
Даталогическое проектирование позволяет разработать схемы БД, которые адекватно моделируют предметные области объектов и отражают связи с ними.
Важной частью даталогического проектирования является нормализация - разделение групп элементов данных с целью установления основных отношений, уменьшения избыточности и объединения связанных элементов данных в структуры, которыми можно эффективно манипулировать. Использование ненормализованных БД может привести к нарушению целостность базы данных.
Теория нормализации основана на концепции нормальных форм, каждой нормальной форме соответствует определенный набор ограничений и, если эта таблица БД удовлетворяет этим ограничениям, то он находится в некоторой нормальной форме. Всего в теории реляционных БД выделяют 6 нормальных форм, однако в проектировании БД можно ограничиться тремя нормальными формами. Приведение таблиц БД к третьей нормальной форме позволяет решить четыре проблемы, обычно возникающие при использовании ненормализованных таблиц: проблема избыточности данных, проблема аномалии обновления, аномалии удаления и аномалии ввода.
Глава 2. Разработка программного средства
2.1 Программирование на стороне сервера
2.1.1 Разработка таблиц удаленной базы данных
2.1.1.1 Создание и регистрация базы данных
Создали базу данных в утилите IBExpert (Рис. 3).
Рисунок 3. Создание базы данных
Далее зарегистрировали свою базу данных (Рис. 4).
Рисунок 4. Регистрация базы данных
2.1.1.2 Создание доменов
Для полей таблиц нужны различные типы данных. Задаем их согласно предполагаемым записям (табл.1)
Таблица 1. Типы полей таблиц
Имя таблицы |
Имя поля |
Тип |
Длина |
Имя домена |
|
BOLESNI |
ID_BOLES |
INTEGER |
INT_D |
||
NAZVANIE |
VARCHAR |
150 |
TEXT_D |
||
OPISANIE |
VARCHAR |
150 |
TEXT_D |
||
KARTOCHKA_PATIENTA |
ID_PATIENT |
INTEGER |
INT_D |
||
FAM |
VARCHAR |
150 |
TEXT_D |
||
NAME |
VARCHAR |
150 |
TEXT_D |
||
OTCH |
VARCHAR |
150 |
TEXT_D |
||
DATA_ROG |
DATE |
DATE_D |
|||
ADRES |
VARCHAR |
150 |
TEXT_D |
||
NUM_STR_POLICE |
CHAR |
10 |
CHAR_D |
||
PASPORT |
CHAR |
10 |
CHAR_D |
||
KOL_POS |
INTEGER |
INT_D |
|||
OBRACHENIA |
ID_OBR |
INTEGER |
INT_D |
||
DATA_OBR |
DATA |
DATA_D |
|||
ID_PATIENT |
SMALLINT |
INT_D |
|||
PRICHINA |
VARCHAR |
150 |
TEXT_D |
||
ID_VR |
INTEGER |
INT_D |
|||
ID_BOLES |
INTEGER |
INT_D |
|||
OTDELENIA |
ID_OTD |
INTEGER |
INT_D |
||
NAZVANIE |
VARCHAR |
150 |
TEXT_D |
||
ETAG |
INTEGER |
INT_D |
|||
TELEFON |
CHAR |
10 |
CHAR_D |
||
VRACHI |
ID_VR |
INTEGER |
INT_D |
||
FIO |
VARCHAR |
150 |
TEXT_D |
||
DOLGNOST |
VARCHAR |
150 |
TEXT_D |
||
TELEFON |
CHAR |
10 |
CHAR_D |
||
KABINET |
INTEGER |
INT_D |
|||
ID_OTD |
INTEGER |
INT_D |
Согласно этим данным создаем домены (табл.2)
Таблица 2
Домены базы данных «Регистратура поликлиники»
Имя домена |
Тип |
Длинна |
Ограничения |
|
СHAR_D |
CHAR |
10 |
||
TEXT_D |
VARCHAR |
150 |
||
INT_D |
INTEGER |
|||
DATE_D |
DATE |
VALUE<='TODAY' |
Домены можно создать используя утилиту IBExpert (рис. 5).
Рисунок 5. Домены базы данных «Регистратура поликлиники»
2.1.1.3 Создание таблиц
После того как созданы домены можно приступать к созданию таблиц базы данных при помощи утилиты IBExpert, в которой задаются поля, первичные, вторичные ключи, автоинкрементные поля.
Создаем таблицу «Пациенты» (рис. 6).
Рисунок 6. Создание таблицы «Пациенты»
SQL-скрипт на создание таблицы имеет вид:
CREATE TABLE PATIENT (
ID_PAT INT_D /* INT_D = INTEGER NOT NULL */,
SURNAME TEXT_D NOT NULL /* TEXT_D = VARCHAR(150) */,
NAME TEXT_D NOT NULL /* TEXT_D = VARCHAR(150) */,
PATRONYMIC TEXT_D NOT NULL /* TEXT_D = VARCHAR(150) */,
DATE_OF_BIRTH DATE_D NOT NULL /* DATE_D = DATE CHECK (VALUE<='TODAY') */,
ADDRESS TEXT_D NOT NULL /* TEXT_D = VARCHAR(150) */,
PASSPORT CHAR_D /* CHAR_D = CHAR(10) */,
INSURANCE_POLICY CHAR_D NOT NULL /* CHAR_D = CHAR(10) */,
QUANTITY_VISIT INT_D /* INT_D = INTEGER NOT NULL */
);
/*********************************************************************/
/*** Primary Keys ***/
/*********************************************************************/
ALTER TABLE PATIENT ADD CONSTRAINT PK_PATIENT PRIMARY KEY (ID_PAT);
Аналогично создаются остальные таблицы базы данных.
2.1.1.3 Создание индексов
После того как созданы домены и таблицы, можно в БД определить индексы, система автоматически создает индексы по первичным и внешним ключам но можно добавить и свои по надобности как при помощи утилиты IBExpert. Индексы существенно ускоряют процесс поиска и упорядочивание записей таблицы.
Сервер Firebird автоматически создает уникальный индекс при создании ограничений PRIMARY KEY и UNIQUE для столбца или группы столбцов.
Ниже приведен пример индекса для таблицы «Пациенты» (рис.7)
Рисунок 7. Индекс для таблицы «Пациенты»
2.1.1.4 Создание генераторов
После того как созданы, домены, таблицы, индексы, можно приступить к созданию генераторов. Генератор - это специальный объект базы данных, который генерирует уникальные последовательные числа.
Генераторы созданы для автоматического заполнения полей, входящих в первичный ключ (рис.8)
Рисунок 8. Генераторы для базы данных
Стандартный код ля создания генератора выглядит следующим образом:
CREATE GENERATOR GEN_PATIENT_ID;
2.1.1.5 Создание триггеров
Триггеры, созданные в таблицах базы данных «Регистратура поликлиники», предназначены для реализации автоинкрементных полей и для подсчёта количества посещений пациентов. На рис.9 показан триггер для автоинкрементных полей таблицы «Пациенты».
Рисунок 9. Триггер для реализации атоикрементных полей таблицы «Пациенты»
Создаем триггер для таблицы «Посещения», который подсчитывает количество обращений пациента в таблице «Посещения» и записывает результирующую информацию в таблицу «Пациенты» (рис.10).
Код триггера представлен ниже.
CREATE OR ALTER TRIGGER KOL_VISIT FOR VISIT
ACTIVE AFTER INSERT POSITION 0
as
declare variable temp integer;
begin
select count(ID_PAT) from VISIT where ID_PAT=new.ID_PAT into :temp;
update PATIENT set QUANTITY_VISIT=:temp where ID_PAT=new.ID_PAT;
end
Рисунок 10. Триггер для таблицы «Посещения»
2.1.2 Разработка бизнес-логики на стороне SQL-сервера
2.1.2.1 Создание просмотров
Просмотры являются временными наборами данных, существующими только во время работы с ними. После создания просмотра с ним можно обращаться точно так же, как и с обычной таблицей. Просмотр может строиться на базе одной или нескольких таблиц или даже на основе других просмотров.
Создан просмотр, который позволяет просмотреть данные таблицы PATIENT (Пациенты) базы данных. Ниже, приведен SQL-скрипт просмотра PATIENT_V.
CREATE VIEW PATIENT_V(
ID_PATIENT,
FAM,
NAME,
OTCH,
DATA_ROG,
ADRES,
NUM_STR_POLICE,
PASPORT,
KOL_OBDRASH)
AS
select*from patient
;
Ниже показан результат данного просмотра (рис.11)
Рисунок 11. Результат просмотра PATIENT_V
Далее созданы просмотры в виде объединения данных двух таблиц DOCTOR_V и четырёх таблиц VISIT_V.
Ниже приведен SQL-скрипт просмотра VISIT_V.
CREATE VIEW VISIT_V(
ID,
FAM,
NAME,
OTCH,
DATA_OBR,
VRACH,
BOLESN,
PRICHINA)
AS
select visit.id_visit, patient.surname, PATIENT.name, PATIENT.patronymic, VISIT.data_visit,
doctor.fio, ILLNESS.name, VISIT.prichina
FROM visit, PATIENT, DOCTOR, illness
WHERE VISIT.id_pat=PATIENT.id_pat AND VISIT.id_d=DOCTOR.id_d AND VISIT.id_ill=ILLNESS.id_ill
;
;
На рис.12 показан результат данного просмотра.
Рисунок 12. Результат просмотра VISIT_V
2.1.2.2 Создание хранимых процедур
Хранимая процедура представляет собой программу, хранящуюся на сервере, как часть базы данных. Создав хранимую процедуру, ее можно вызвать в любое время из приложения. Хранимая процедура может принимать входные параметры и возвращать значения и наборы данных.
Создана хранимая процедура на добавление ADD_PATIENT, которая добавляет поля в таблицу «Пациенты».
Ниже приведён SQL-код данной хранимой процедуры
CREATE OR ALTER PROCEDURE ADD_PATIENT (
surname varchar(150),
name varchar(150),
patronymic varchar(150),
date_of_birth date,
address varchar(150),
passport char(10),
insurance_policy char(10))
as
begin
INSERT INTO patient(patient.surname, PATIENT.name, patient.patronymic, patient.date_of_birth,
patient.address, patient.passport, patient.insurance_policy, patient.quantity_visit)
VALUES (:surname, :name, :patronymic, :date_of_birth, :address, :passport, :insurance_policy,0);
suspend;
end^
На рис.13 показана форма для добавления записей.
Рисунок 13. Форма для добавления пациента
На рис.14 показан результат добавления.
Рисунок 14. Результат выполненимя хранимой процедуры на добавление ADD_PATIET
Аналогично разрабатываются хранимые процедуры на добавление для всех остальных таблиц.
Разработана хранимая процедура DEL_PATIENT, которая удаляет записи из таблицы «Пациенты».
Ниже приведён SQL-код данной хранимой процедуры
CREATE OR ALTER PROCEDURE DEL_PATIENT (
id_pat integer)
as
begin
DELETE FROM patient
WHERE (ID_PAT=:id_pat);
suspend;
end^
На рис. 15 показана форма для удаления записей.
Рисунок 15. Форма для удаления записей
Удалена запись из таблицы. На рис. 16 показан результат удаления записи.
Рисунок 16. Результат выполения хранимой процедуры на удаление DEL_PATIENT
Аналогично разрабатываются хранимые процедуры на удаление для всех оставшихся таблиц.
Разработана хранимая процедура UPP_PATIENT, которая позволяет изменять записи в таблице «Пациенты».
Ниже приведён SQL-код данной хранимой процедуры на редактирование данных пациента
CREATE OR ALTER PROCEDURE UPP_PATIENT (
id_pat integer,
surname varchar(150),
name varchar(150),
patronymic varchar(150),
date_of_birth date,
address varchar(150),
passport char(10),
insurance_policy char(10))
as
begin
UPDATE PATIENT
set
ID_PAT=:id_pat,
SURNAME=:surname,
NAME=:name,
PATRONYMIC=:patronymic,
DATE_OF_BIRTH=:date_of_birth,
ADDRESS=:address,
PASSPORT=:passport,
INSURANCE_POLICY=:insurance_policy
WHERE (ID_PAT=:id_pat);
suspend;
end^
На рис. 17 показана форма для изменения записей.
Рисунок 17. Форма для изменения записей
Изменилась седьмая запись в таблице. На рис. 18 показан результат изменения записи.
Рисунок 18. Результат выполения хранимой процедуры для редактирования данных UPP_PATIENT
Аналогично разрабатываются хранимые процедуры на изменение для всех оставшихся таблиц.
2.1.2.3 Создание исключений
Исключения представляют собой именованное сообщение об ошибке. В базе данных предусмотрено три исключительных ситуации, которые продемонстрированы в таблице на рис. 19.
Рисунок 19. Исключения БД
SQL-скрипт на создание исключений выглядит следующим образом
CREATE EXCEPTION DEL_EX 'Нельзя удалять данные';
Для двух других исключений SQL-код выглядит аналогично
2.2 Программирование на стороне клиента
2.2.1 Разработка Windows-приложения
При разработке Win 32 клиентского приложения использовалось инструментальное средство фирмы Borland Builder C++ 6.0.
Разработано клиентское приложение для выполнения просмотра, добавления, удаления, изменения и поиска записей всех таблиц базы данных «Регистратура поликлиники»:
1) «Пациенты»;
2) «Врачи»;
3) «Посещения»;
4) «Болезни»;
5) «Отделения».
Для решения поставленной задачи необходимо было выполнить следующее:
1. Начать новый Builder-проект. File/New/Application.
2. Поместить на форму Form1 компонент DBGrid из закладки Data Control.
3. Создать контейнер DataModule для размещения невизуальных компонентов. File/New/Data Module.
4. Поместить на DataModule компонент IBDatabase1 (закладка InterBase). Выполнить настройку компонента IBDatabase1 (рис. 20).
Рисунок 20. Окно настройки компонента IBDatabase
5. Поместить на DataModule компонент IBTransaction1 (закладка InterBase). Выбрать свойства DefaultTransaction для компонента IBDatabase1(рис.21).
Рисунок 21. Свойства компонента IBTransaction1
6. Поместить на DataModule компонент IBTable1 (закладка InterBase). Указать: в свойстве Database значение IBDatabase1; в свойстве TableTypes значение true; в свойстве TableName значение необходимой таблицы; в свойстве Active значение true:
7. Поместить на DataModule компонент DataSourse1 (закладка DataAccess). Указать: в свойстве Dataset значение IBTable1.
После этого можно осуществлять многофункциональную обработку данных по направлениям движения. По подобной схеме происходит настройка компонентов для представления всех данных.
Для добавления данных в таблицу «Врачи» необходимо выполнить шаги 1 - 5 из предыдущего алгоритма, затем:
1. Поместить на DataModule компонент IBQuery1 (закладка InterBase). Указать: в свойстве Database значение IBDatabase1; в свойстве SQL значение select * from DOCTOR order by ID; в свойстве Active значение true.
2. Поместить на DataModule2 компонент IBStoredProc1 (закладка InterBase). Указать: в свойстве Database значение IBDatabase1; в свойстве StoredProc значение ADD_DOCTOR.
3. Поместить на DataModule2 компонент DataSourse (закладка DataAccess). Указать: в свойстве Dataset значение IBQuery1.
4. Выбрать Unit2 в меню File/Include Unit.
5. Указать в свойстве DataSourse для компонента DBGrid1 значение DataModule2->DataSource1.
6. Написать следующий код обработки события OnClick кнопки «ВВОД»:
void __fastcall TForm_Add_Doc::Button2Click(TObject *Sender)
{
DM->IBSP_Add_Doc->ParamByName("FIO")->AsString=Edit1->Text;
DM->IBSP_Add_Doc->ParamByName("POSITION_D")->AsString=Edit2->Text;
DM->IBSP_Add_Doc->ParamByName("PHONE_NUMBER")->AsString=Edit3->Text;
DM->IBSP_Add_Doc->ParamByName("SYRGERY")->AsString=Edit4->Text;
DM->IBSP_Add_Doc->ParamByName("ID_SEPARATION")->AsString=Edit5->Text;
DM->IBSP_Add_Doc->Prepare();
DM->IBSP_Add_Doc->ExecProc();
DM->IBTransaction1->Commit();
DM->IBQuery_Doctor->Close();
DM->IBQuery_Doctor->Open();
}
Для удаления данных из таблицы «Врачи» выполняются аналогичные действия, что и на добавление, только разница состоит в том, что в свойстве StoredProc компонента IBStoredProc1 указывается хранимая процедура DEL_DOCTOR и пишется следующий код для обработки события OnClick кнопки Button1:
void __fastcall TForm_Doctor::Button1Click(TObject *Sender)
{
DM->IBSP_Del_Doc->ParamByName("ID_D")->Value=DM->IBQuery_Doctor->FieldByName("ID")->Value;
DM->IBSP_Del_Doc->Prepare();
DM->IBSP_Del_Doc->ExecProc();
DM->IBTransaction1->Commit();
DM->IBQuery_Doctor->Close();
DM->IBQuery_Doctor->Open();
}
Для редактирования данных таблицы «Врачи» выполняются аналогичные действия, что и на добавление и удаление, только различия состоят в том, что в свойстве StoredProc компонента IBStoredProc1 указывается хранимая процедура UPP_DOCTOR и пишется следующий код для обработки события OnClick кнопки Button1:
void __fastcall TForm_Upd_Doc::Button2Click(TObject *Sender)
{
DM->IBSP_Upd_Doc->ParamByName("ID_D")->AsString=Edit1->Text;
DM->IBSP_Upd_Doc->ParamByName("FIO")->AsString=Edit2->Text;
DM->IBSP_Upd_Doc->ParamByName("POSITION_D")->AsString=Edit3->Text;
DM->IBSP_Upd_Doc->ParamByName("PHONE_NUMBER")->AsString=Edit4->Text;
DM->IBSP_Upd_Doc->ParamByName("SURGERY")->AsString=Edit5->Text;
DM->IBSP_Upd_Doc->ParamByName("ID_SEP")->AsString=Edit6->Text;
DM->IBSP_Upd_Doc->Prepare();
DM->IBSP_Upd_Doc->ExecProc();
DM->IBTransaction1->Commit();
DM->IBQuery_Doctor->Close();
DM->IBQuery_Doctor->Open();
}
Режим поиска работает следующим образом: при вводе букв в компонент Edit1 последовательно (после ввода каждой буквы) производится поиск, и указатель перемещается на первую запись, со значением поля наиболее близкую к значению, введенному в компонент Edit1. Следует отметить, что метод Locate может осуществлять поиск в режиме как полного, так и частичного совпадения. Режим определяется третьим параметром, имеющим тип TLocateOptions. Данный тип представляет класс, для которого переопределен оператор «<<», который обычно используется для вывода данных на экран. Если в этот аргумент ввести значение loPartialKey, то поиск будет производиться по частичному совпадению.
Обработчик события OnChage компонента Edit1 имеет следующий вид:
void __fastcall TForm_Doctor::Edit1Change(TObject *Sender)
{
if (RadioButton1->Checked)
{
TLocateOptions LO;
DM->IBQuery_Doctor->Locate("FIO", Edit1->Text, LO<<loPartialKey<< loCaseInsensitive);
}
else if (RadioButton2->Checked)
{
TLocateOptions LO;
DM->IBQuery_Doctor->Locate("DOLGNOST", Edit1->Text, LO<<loPartialKey<< loCaseInsensitive);
}
else if (RadioButton3->Checked)
{
TLocateOptions LO;
DM->IBQuery_Doctor->Locate("TELEFON", Edit1->Text, LO<<loPartialKey<< loCaseInsensitive);
}
else if (RadioButton4->Checked)
{
TLocateOptions LO;
DM->IBQuery_Doctor->Locate("OTDELENIE", Edit1->Text, LO<<loPartialKey<< loCaseInsensitive);
}
}
Обработчик события onChange компонента Edit1 выполняется следующим образом:
1. В первой строке объявляется локальная переменная LO типа TLocateOptions, которая будет определять условия поиска (частичное совпадение и отсутствие чувствительности к регистру букв);
2. Во второй строке метод Locate компонента Query1 вызывается для поиска записи (первый аргумент задает поле, по которому осуществляется поиск; второй аргумент задает значение поиска; а в третьем определяются условия поиска).
Для остальных таблиц выполняются аналогичные действия на добавление, удаление, изменение и поиск данных.
На рис. 22 показано окно DataModule после настройки всех компонентов.
Рисунок 22. Окно DataModule
2.2.2 Разработка Web-приложения
Для информационной системы «Регистратура поликлиники» разрабатывается клиентское приложение с использованием РНР и СУБД Firebird.
Сначала необходимо разработать структуру программного средства и все страницы. В табл.3 приведены названия и описания всех файлов.
Таблица 3
Страницы web-приложения «Регистратура поликлиники»
Название страницы |
Описание |
|
config.php |
php-файл для подключения к базе данных |
|
Contakt.html |
html-страница для отображения контактной информации поликлиники |
|
Delete_Doctor.php |
php-файл для удаления данных из таблицы «Врачи» |
|
Delete_Illness.php |
php-файл для для удаления данных из таблицы «Болезни» |
|
Delete_Patient.php |
php-файл для удаления данных из таблицы «Пациенты» |
|
Delete_Separation.php |
php-файл для удаления данных из таблицы «Отделения» |
|
Delete_Visit.php |
php-файл для удаления данных из таблицы «Обращения» |
|
Doctor.php |
php-файл для просмотра информации таблицы «Врачи» |
|
Illness.php |
php-файл для просмотра информации таблицы «Болезни» |
|
Index.html |
html-страница, состоящая из трёх фреймов из которых формируется главная и остальные страницы приложения |
|
Inform.html |
html-страница, отображающая информацию главной при запуске приложения |
|
Insert_Doctor.php |
php-файл для добавления информации таблицы «Врачи» |
|
Insert_Illness.php |
php-файл для добавления информации таблицы «Болезни» |
|
Insert_Patient.php |
php-файл для добавления информации таблицы «Пациенты» |
|
Insert_Separation.php |
php-файл для добавления информации таблицы «Отделения» |
|
Insert_Visit.php |
php-файл для добавления информации таблицы «Посещения» |
|
Menu.html |
html-страница, отображающая меню приложения, т.е. ссылки на другие страницы |
|
MyScript.js |
Файл js, отображающий информацию о контактной информации |
|
News.html |
html-страница, содержащая новости поликлиники |
|
Patient.php |
php-файл для просмотра информации таблицы «Пациенты» |
|
Search_Doctor.html |
html-страница содержащая форму для поиска данных в таблице «Врачи» |
|
Search_Doctor.php |
php-страница для поиска данных в таблице «Врачи» |
|
Search_Illness.html |
html-страница содержащая форму для поиска данных в таблице «Болезни» |
|
Search_Illness.php |
php-страница для поиска данных в таблице «Болезни» |
|
Search_Patient.html |
html-страница содержащая форму для поиска данных в таблице «Пациенты» |
|
Search_Patient.php |
php-страница для поиска данных в таблице «Пациенты» |
|
Search_Separation.html |
html-страница содержащая форму для поиска данных в таблице «Отделения» |
|
Search_Separation.php |
php-страница для поиска данных в таблице «Отделения» |
|
Search_Visit.html |
html-страница содержащая форму для поиска данных в таблице «Посещения» |
|
Search_Visit.php |
php-страница для поиска данных в таблице «Посещения» |
|
Separation.php |
php-файл для просмотра информации таблицы «Отделения» |
|
Style.css |
css-файл, содержащий таблицы стилей |
|
Update_Doctor.php |
php-файл для редактирования информации таблицы «Врачи» |
|
Update_Illness.php |
php-файл для редактирования информации таблицы «Болезни» |
|
Update_Patient.php |
php-файл для редактирования информации таблицы «Пациенты» |
|
Update_Separation.php |
php-файл для редактирования информации таблицы «Отделения» |
|
Update_Visit.php |
php-файл для редактирования информации таблицы «Посещения» |
|
Visit.php |
php-файл для просмотра информации таблицы «Посещения» |
|
zag1.html |
html-файл, содержащий шапку сайта с ссылками на некоторые страницы |
Для подключения к базе данных G_140713_KRIVOSHEEVA.FDB был создан php-файл config.php
<?php
$host='inf612c00:D:\DB\G_140713_KRIVOSHEEVA.FDB';
$usname = 'sysdba';
$pswrd = 'masterkey';
$charset = "win1251";
$db =ibase_pconnect($host, $usname, $pswrd, $charset);
?>
Создаются php-страницы для просмотров информации из таблиц. Приведен код программы Doctor.php для выполнения просмотра DOCTOR_V.
<html>
<head>
<title>Врачи</title>
<link rel="stylesheet" href="Style.css" type="text/css">
</head>
<body>
<h1>Информация о врачах</h1>
<?php
include "config.php";
if (!$db)
{
echo 'Ошибка соединения с базой данных';
exit;
}
$query = "select * from DOCTOR_V order by ID";
$result = ibase_query($query);
echo '<table align=center >
<tr bgcolor=c3c6c7 ><th>ID</th>
<th>ФИО</th>
<th>Должность</th>
<th>Номер телефона</th>
<th>Кабинет</th>
<th>Отделение</th>
<th>Этаж</th>
<th>Номер телефона<br>отделения</th>
<tr>';
while ($row = ibase_fetch_row($result))
{
echo ("<tr><td><center>$row[0]</center></td>
<td>$row[1]</td>
<td>$row[2]</td>
<td><center>$row[3]</center></td>
<td><center>$row[4]</center></td>
<td>$row[5]</td>
<td><center>$row[6]</center></td>
<td><center>$row[7]</center></td>
</tr>");
}
echo("<tr><td colspan=9 align=center bgcolor=c3c6c7><br>
<a href='Insert_Doctor.php' target='inform'>
Добавить данные
</a>
|
<a href='Delete_Doctor.php' target='inform'>
Удалить данные
</a>
|
<a href='Update_Doctor.php' target='inform'>
Редактировать данные
</a>
|
<a href='Search_Doctor.html' target='inform'>
Поиск данных
</a>
<br><br></tr>");
echo ("<tr><td colspan=9 align=center bgcolor=c3c6c7>
<INPUT TYPE=button VALUE=Назад onClick='history.go(-1)'>
<INPUT TYPE=button VALUE=Обновить onClick='window.location.reload()'>
</td>
</tr>");
echo("</table>");
ibase_free_result($result);
?>
</body>
</html>
Созданы php страницы для добавления данных в таблицы. Ниже приведен код страницы Insert_Doctor.php для добавления данных в таблицу «Врачи»
<html>
<head>
<title>Добавление информации о враче </title>
<meta http-equiv="Content-Type" content="text/html; charset=win-1251"/>
<link rel="stylesheet" href="Style.css" type="text/css">
</head>
<body background="Img/fon.jpg" bgproperties=fixed>
<h3>Добавление информации о враче</h3>
<form name="form1" method="POST" action="<?php $_SERVER['PHP_SELF'];?>">
<table align=center>
<tr>
<td>ФИО</td>
<td><input type=text name="FIO" size=40></td>
</tr>
<td>Должность</td>
<td><input type=text name="Dolg" size=40 maxlength=></td>
</tr>
</tr>
<td>Номер телефона</td>
<td><input type=text name="number" size=40 maxlength=9></td>
</tr>
</tr>
<td>Кабинет</td>
<td><input type=text name="Kab" size=40 maxlength=></td>
</tr>
</tr>
<td>Отделение</td>
<td><input type=text name="Otd" size=40 maxlength=></td>
</tr>
<tr>
<td colspan=2 align=center><input type=submit value="Зарегестировать"> <input type=reset value=Очистить> <input type=button value=Назад onClick='history.go(-1)'></td>
</tr>
</table>
</form>
<?php
if (isset($_POST['FIO'])){
$FIO=$_POST['FIO'];
$Dolg=$_POST['Dolg'];
$Number=$_POST['number'];
$Kab=$_POST['Kab'];
$Otd=$_POST['Otd'];
if (!$FIO || !$Dolg ||!$Number ||!$Kab ||!$Otd)
{echo '<h1>Вы ввели не все данные</h1>';
exit;}
include ("config.php");
if(!$db)
{
echo'<h1>Ошибка соединения с базой данных </h1>';
exit;
}
$query="EXECUTE PROCEDURE ADD_DOCTOR('".$FIO."','".$Dolg."','".$Number."','".$Kab."','".$Otd."')";
$it=ibase_trans();
$result=ibase_query($query);
if($result){
echo'<h1>'.$FIO.' добавлен в базу данных</h1>';}
}
?>
</body>
</html>
Созданы php страницы для удаления данных из таблиц. Ниже приведен код страницы Delete_Doctor.php для удаления данных из таблицы «Врачи».
<html>
<head>
<title>Удаление врача из БД</title>
<meta http-equiv="Content-Type" content="text/html; charset=win-1251" />
<link rel="stylesheet" href="Style.css" type="text/css">
</head>
<body background="Img/fon.jpg" bgproperties=fixed>
<h3>Удаление врача из БД</h3>
<form name="form1" method="POST" action="<?php $_SERVER['PHP_SELF'];?>">
<table align=center>
<tr>
<td>Введите ID врача</td>
<td><input type=text name="ID" size=20></td>
</tr>
<tr>
<td>Введите ФИО врача</td>
<td><input type=text name="FIO" size=20></td>
</tr>
<tr>
<td colspan=2 align=center><input type=submit value="Удалить"> <input type=reset value=Очистить> <input type=button value=Назад onClick='history.go(-1)'></td>
</tr>
</table>
</form>
<?php
if (isset($_POST['ID'])){
$ID=$_POST['ID'];
$FIO=$_POST['FIO'];
if (!$ID)
{echo '<h1>Введите ID отделения</h1>';
exit;}
include ("config.php");
if(!$db)
{
echo'<h1>Ошибка соединения с базой данных </h1>';
exit;
}
$query="EXECUTE PROCEDURE DEL_DOCTOR('".$ID."')";
$it=ibase_trans();
$result=ibase_query($query);
if($result){
echo'<h1>Информация о '.$FIO.' удалена </h1>';}
}
?>
</body>
</html>
Создаются php-страницы для редактирования записей из таблиц. Ниже приведен листинг файла Update_Doctor.php.
<html>
<head>
<title>Редактирование данных о враче</title>
<meta http-equiv="Content-Type" content="text/html; charset=win-1251" />
<link rel="stylesheet" href="Style.css" type="text/css">
</head>
<body background="Img/fon.jpg" bgproperties=fixed>
<h3>Редактирование информации о враче</h3>
<form name="form1" method="POST" action="<?php $_SERVER['PHP_SELF'];?>">
<table align=center>
<tr>
<td>ID</td>
<td><input type=text name="ID" size=40></td>
</tr>
<tr>
<td>ФИО</td>
<td><input type=text name="FIO" size=40></td>
</tr>
<td>Должность</td>
<td><input type=text name="Dolg" size=40 maxlength=></td>
</tr>
</tr>
<td>Номер телефона</td>
<td><input type=text name="number" size=40 maxlength=9></td>
</tr>
</tr>
<td>Кабинет</td>
<td><input type=text name="Kab" size=40 maxlength=></td>
</tr>
</tr>
<td>Отделение</td>
<td><input type=text name="Otd" size=40 maxlength=></td>
</tr>
<td colspan=2 align=center><input type=submit value="Выполнить"> <input type=reset value=Очистить> <input type=button value=Назад onClick='history.go(-1)'></td>
</tr>
</table>
</form>
<?php
if (isset($_POST['ID'])){
$ID=$_POST['ID'];
$FIO=$_POST['FIO'];
$Dolg=$_POST['Dolg'];
$Number=$_POST['number'];
$Kab=$_POST['Kab'];
$Otd=$_POST['Otd'];
if (!$ID || !$FIO || !$Dolg ||!$Number ||!$Kab ||!$Otd)
{echo '<h1>Вы ввели не все данные</h1>';
exit;}
include ("config.php");
if(!$db)
{
echo'<h1>Ошибка соединения с базой данных </h1>';
exit;
}
$query="EXECUTE PROCEDURE UPP_DOCTOR('".$ID."','".$FIO."','".$Dolg."','".$Number."','".$Kab."','".$Otd."')";
$it=ibase_trans();
$result=ibase_query($query);
if($result){
echo'<h1>Данные о '.$FIO.' обновлены</h1>';}
}
?>
</body>
</html>
Кроме того реализуем функции поиска по таблицам. Для поиска по таблице «Врачи» создаются два файла: Search_Doctor.html и Search_Doctor.php
Search_Doctor.html:
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=win1251">
<title>Поиск врачей</title>
<link rel="stylesheet" href="Style.css" type="text/css">
<body background="Img/fon.jpg" bgproperties=fixed>
</head>
<h3>Введите информацию для поиска врача</h3>
<form method="POST" action="Search_Doctor.php">
<table align=center>
<tr>
<td>Выберите тип поиска:</td>
<td><select name="search_type">
<option value="ID_D">По ID</option>
<option value="FIO">По ФИО</option>
<option value="POSITION_D">По должности</option>
<option value="PHONE_NUMBER">По номеру телефона</option>
<option value="SURGERY">По кабинету</option>
<option value="ID_SEP">По номер отделения</option>
</select></td>
<tr>
<td>Введите информацию для поиска:</td>
<td><input name="search_term" type="text" size="40"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Найти"> <input type="reset" value="Очистить"> <INPUT TYPE=button VALUE=Назад onClick='history.go(-1)'> </td></tr>
</table>
</form>
</body>
</html>
Search_Doctor.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=win1251" />
<title>Поиск в регистратуре</title>
<link rel="stylesheet" href="Style.css" type="text/css">
<body background="Img/fon.jpg" bgproperties=fixed>
</head>
<h3>Результаты поиска врачей</h3>
<?php
if (isset($_POST['search_type'])){
// создание коротких имен переменных
$searchtype=$_POST['search_type'];
$searchterm=$_POST['search_term'];
$searchterm= trim($searchterm);//удаляем лишние пробелы
if (!$searchtype || !$searchterm)
{
echo "<h1>Вы не ввели параметры поиска</h1><br><br>";
echo ("<a href='Search_Illness.html' target='inform'>Нажмите ЗДЕСЬ, чтобы вернуться к поиску</a>");
exit;
}
$searchterm = addslashes($searchterm);//фильтруем вводимую информацию
$searchtype = addslashes($searchtype);
include ("config.php");
if (!$db)
{
echo 'Ошибка соединения с базой данных';
exit;
}
$query="SELECT*FROM DOCTOR WHERE ".$searchtype." like '%".$searchterm."%'";
$result=ibase_query($query);
$num_result=ibase_num_fields($result);
if ($num_result){
if ($num_result!==0){
echo '<table border=2 wigth=100% align=center>
<tr bgcolor=c3c6c7 ><td>ID</td>
<td>ФИО</td>
<td>Должность</td>
<td>Номер телефона</td>
<td>Кабинет</td>
<td>Номер отделения</td></tr>';
$i=0;
while ($row = ibase_fetch_row($result)){
$i++;
echo "<tr><td>$row[0]</td>";
echo "<td>$row[1]</td>";
echo "<td>$row[2]</td>";
echo "<td>$row[3]</td>";
echo "<td>$row[4]</td>";
echo "<td>$row[5]</td></tr>";
}
echo('</table>');}}
else {echo("<h1>Поиск не дал результатов</h1>");}
echo ("<br><a href='Search_Illness.html' target='inform'>Нажмите ЗДЕСЬ, чтобы вернуться к поиску</a>");
$fr=ibase_free_result($result);}
?>
</body>
</html>
Глава 3. Интерфейс пользователя
3.1 Интерфейс Windows-приложения
После выполнения всех операций, описанных в пункте 2.2.1, разработали Windows-приложение, отвечающее всем предполагаемым требованиям.
Рисунок 23. Главное меню приложения
В данном приложении осуществляются возможности добавления, удаления, изменения и поиска данных. Ниже приведены копи работы функции поиска данных (рис. 24).
Рисунок 24. Пример поиска данных по таблице «Врачи»
Ниже приведены копии экранов работы хранимой процедуры на добавление ADD_DOCTOR (рис. 25) и (рис.26)
Рисунок 25. Добавление данных в таблицу «Врачи»
Рисунок 26. Результат добавления
Ниже приведены копия экрана работы хранимой процедуры на удаление DEL_DOCTOR (рис.27).
Рисунок 27. Запись под номер 9 была удалена
Ниже приведены копии экранов работы хранимой процедуры на редактирование данных UPP_DOCTOR (рис.28) и (рис.29)
Рисунок 28. Изменение записи
Рисунок 29. Результат изменения
3.2 Интерфейс Web-приложения
Web-приложение создано с использованием РНР и СУБД Firebird. Его общий вид представлен на рис. 30.
Рисунок 30. Главная страница приложения
В приложении реализована работа хранимых процедур на добавление. Пример работы храномой процедуры ADD_ILLNESS представлен на (рис. 31), (рис.32), (рис.33).
Рисунок 31. Выполнение хранимой процедуры на добавлениt Add_Illness
Рисунок 32. Результат выполнения хранимой процедуры на добавление Add_Illness
Рисунок 33. Добавленные данные в результате выполнения хранимой процедуры Add_Illness
Кроме того, в приложении разработана возможность выполнения хранимых процедур на изменение данных. Пример работы хранимой процедуры на изменение данных UPP_ILLNESS предоставлен на рис.34, рис.35 и рис.36
Рисунок 34. Редактирование данных. Выполнение хранимой процедуры Upp_Illness
Рисунок 35. Результат выполнения хранимой процедур Upp_Illness
Рисунок 36. Данные болезни под номером 16 были обновлены в результаты успешного выполнения хранимой процедуры Upp_Illness.
Так же в приложении реализованы хранимые процедуры на удаление данных. Пример выполнения хранимой процедуры на удаление DEL_ILLNESS показан на рис.37, рис.38 и рис.39
Рисунок 37. Выполнение хранимой процедуры на удаление Del_Illness
Рисунок 38. Результат выполнения хранимой процедуры Del_Illness
Рисунок 39. Результат выполнения хранимой процедуры Del_Illness на удаление, как видно, болезнь под номером 19 была удалена
В работе была реализована возможность поиска данных. Пример поиска данных в таблице «Болезни» показан на рис.40 и рис.41
Рисунок 40. Поиск данных в таблице «Болезни»
Рисунок 41. Результат поиска
Заключение
В ходе выполнения данного курсового проекта были достигнуты все поставленные цели и задачи:
· Углублены теоретические и практические знания в области баз данных и систем управления базами данных.
· Разработана информационная система «Регистратура поликлиники», основанная на клиент - серверной технологии.
Работа над курсовым проектом позволила приобрести навыки создания информационных систем, основанных на клиент - серверной технологии с использованием РСУБД Firebird.
Разработанная информационная система обладает всей необходимой для работы функциональностью и вполне может стать основой в деятельности здравоохранительных заведений по работе, т.к. web интерфейс является очень удобным приложением для работы с БД.
Список использованной литературы
1. Базы данных: модели, разработка, реализация / Т.С. Карпова. - СПб.: Питер. 2001. - 304 с.
2. Энциклопедия SQL. 3-е изд. / Дж. Грофф. П. Вайнберг. - СПб.: Питер. 2004. - 896 с.
3. Гарсиа-Молина, Гектор, Ульман, Джеффри, Д., Дженнифер Системы баз данных. Полный курс.: Пер. с англ.- М.: Издательский дом «Вильямс», 2003. - 1088 с.
4. Борри Х. Firebird: руководство разработчика баз данных: Пер. с англ. - СПб.: БХВ-Петербург, 2006. - 1104 с.
Размещено на Allbest.ru
Подобные документы
Проектирование информационной системы "телефонный справочник поликлиники". Программирование на стороне сервера SQL. Типы данных полей таблиц. Создание домена в интернет с использованием утилиты IBExpert. Разработка бизнес-логики на стороне SQL-сервера.
курсовая работа [2,7 M], добавлен 02.05.2014Архитектура "клиент-сервер". Системный анализ базы данных "Газета объявлений", ее инфологическое и физическое проектирование. Программирование на стороне SQL-сервера. Разработка клиентской части в Borland C++ Builder 6.0 и с помощью Web-технологий.
курсовая работа [1,3 M], добавлен 07.07.2013Разработка базы данных для информационной системы "Библиотека". Системный анализ, инфологическое, даталогическое и физическое проектирование. Программирование бизнес-логики, разработка клиентского приложения. Создание web-приложения, web-доступ.
курсовая работа [3,3 M], добавлен 15.09.2014Системный анализ предметной области. Выбор инструментальных средств для создания программного обеспечения. Программирование на стороне SQL-сервера. Создание клиентского Win-приложения, пользовательский интерфейс. Физическое проектирование базы данных.
курсовая работа [3,7 M], добавлен 20.11.2013Проектирование физической и логической моделей удаленной базы данных для АЗС. Разработка базы данных в СУБД Firebird с помощью утилиты IBExpert. Создание клиентского приложения для Windows с использованием клиент-серверной технологии в среде C++ Builder.
курсовая работа [3,9 M], добавлен 18.01.2017Разработка программной системы для регистратуры поликлиники; создание базы данных. Описание предметной области: сведения о врачах, пациентах, учет обращений, регистрация обследований и назначенных препаратов. Содержимое таблиц, пользовательский интерфейс.
курсовая работа [6,2 M], добавлен 30.07.2012Проектирование базы данных для работников регистратуры поликлиники. В БД должны храниться сведения о больных: ФИО, адрес, диагноз, дата заболевания; сведения о врачах: кабинет, участок, время приема; описание болезней: диагноз, симптомы, лекарство.
курсовая работа [1,0 M], добавлен 23.04.2011Реляционные базы данных как часть корпоративных информационных систем, их построение по принципам клиент-серверной технологии. Основные характеристики СУБД Firebird. Проектирование базы данных для информационной системы "Компьютерные комплектующие".
курсовая работа [1,9 M], добавлен 28.07.2013Проектирование структуры базы данных, предназначенной для функционирования автоматизированной информационной системы. Значение и информационное наполнение базы данных. Инфологическое, даталогическое и физическое проектирование. Инструкция по эксплуатации.
курсовая работа [4,2 M], добавлен 17.12.2011Запрос - один из объектов информационной системы. Область данных - часть формы, в которую добавляются элементы управления, связанные с полями базовых таблиц. Счетчик – автоматическая вставка последовательных или случайных чисел при добавлении записи.
курсовая работа [2,2 M], добавлен 18.05.2017