База данных со сведениями о пациентах и медицинских услугах в стационаре
Введение
На сегодняшний день деятельность большинства предприятий основана на использовании современных средств автоматизации, так как для приема, хранения, передачи информации на бумажных носителях требуются высокие затраты времени и труда специалистов. Информация, хранимая на бумажных носителях, может испортиться с течением времени, под воздействием внешних факторов. Такая информация часто не может быть восстановлена в соответствии с первоначальными документами. В современных условиях выполняется переход к автоматизированной обработке экономической информации и предпосылками для перехода к автоматизированной обработке являются:
- увеличение номенклатуры
- необходимость снижения затрат (времени, финансов и др. ресурсов) на производственную деятельность.
Следствием являются:
- увеличение объема
- увеличение производительности труда при обработке данных;
- необходимость сокращения
Средства автоматизации для решения экономических задач и соответствующие автоматизированные системы должны создаваться на предприятии для достижения поставленных целей.
В рамках данной предметной области необходимо разработать программу, позволяющую сопровождать базу данных со сведениями о пациентах и медицинских услугах в стационаре.
1. Постановка задачи и исходные данные.
Целью курсового проектирования является закрепление навыков по разработке программ в системе визуального программирования Delphi с использованием языка Object Pascal и проработка комплекса вопросов, решаемых в технологической цепочке создания прикладного программного обеспечения.
Общее задание на курсовое проектирование состоит в том, чтобы выполнить работы по созданию диалоговой прикладной программы в системе визуального программирования Delphi, текстовой и графической программной документации (схемы программ и данных).
Программа должна выполнять следующие функции:
- Вывод меню функций, выполняемых программой;
- Ввод, просмотр, редактирование данных о пациентах (таблица «Пациент» с полями «№ полиса», «Фамилия», «Имя», «Отчество», «Адрес», «Место работы») и о медицинских услугах в стационаре (таблица «Медицинские услуги для пациентов в стационаре» с полями «Порядковый номер», «№ полиса», «Дата поступления», «Дата выписки», «Оплата за 1 день») в базе данных (БД), содержащей 2 взаимосвязанные таблицы: «Пациент» и «Медицинские услуги для пациентов в стационаре»;
- Вычисление значения поля «Сумма»;
- Дополнение БД, удаление данных БД о пациентах и медицинских услугах в стационаре;
- Отбор (фильтрация) данных по дате поступления и дате выписки пациентов, задаваемыми пользователем;
- Сортировка данных о пациентах по месту работы и ФИО и о медицинских услугах по дате поступления и дате выписки пациентов;
- Контроль вводимых данных с выводом сообщений об ошибках: поля всех таблиц являются обязательными;
- Обработка трех исключительных ситуаций: ошибки преобразования типов данных, наличие данных, возможность выполнения вычислений;
- Сформировать отчет за месяц, сгруппированный по предприятиям, пациентам, с вычислением итоговых сумм и, отчет за месяц, вычисляющий количество поступивших пациентов по датам, которые могут быть выведены на принтер;
- Построить график, отображающий количество пациентов, поступавших в стационар в течение года и, график, отображающий суммарные затраты предприятий вылеченных пациентов в стационаре по итогам месяца;
- Вывод справочных данных;
- Вывод формы со сведениями о программе.
Состав и структура исходных данных представлены в таб. 1.1-1.2:
Таблица 1.1 - «Пациент»
Пациент | |||
№ полиса |
ФИО |
Адрес |
Место работы |
Таблица 1.2 - «Медицинские услуги для пациентов в стационаре»
Медицинские услуги для пациентов в стационаре | |||
Дата поступления |
Дата выписки |
Оплата за 1 день |
Сумма |
Прочие условия к разрабатываемой программе представлены в таб. 1.3:
Таблица 1.3 «Прочие условия»
Выбор пользовательских функций |
Переключатели |
Вид графика |
Столбиковый |
Определение места каталога с файлами БД |
Определяется в программе |
Формирование текста запроса |
Формируется в программе |
Дополнительно |
Использовать специальные компоненты для ввода дат |
2. Состав и структура данных.
Перед разработкой прикладной программы следует разработать структуру БД ( определить таблицы, их имена, имена и типы полей, назначить ключевые поля, определить отношения 1: N).
БД учёта пациентов и медицинских услуг в стационаре с помощью таблиц «Pacient.db», «Med. uslugi.db», которые создаются при помощи утилиты DataBase Desktop (DBD), входящей в комплект поставки Delphi.
Структура БД представлена на рисунке 2.1.
Pacient.db
Nfamily NName Npatromyc NPlace NJob |
NSpisok NPolis |
NData_postuplenie NData_vipiski NOplata_za_1_day |
Рис.2.1 – Структура БД
Система Delphi позволяет установить между таблицами, находящимися в отношении 1 : N, ссылочную целостность, с помощью утилиты DataBase Desktop (DBD). Связь таблиц осуществляется по полю «NPolis». Имя установленного отношения – npol_ref_int. Благодаря этой связи, перемещение указателя в главной таблице будет приводить к автоматической смене данных, отображаемых в подчинённой таблице.
Описание таблиц представлено в таблицах 2.1 и 2.2.
Таблица 2.1 «Структура записей таблицы »
Pacient.db | |||||||||
Имя поля |
Назначение поля |
Тип |
Длина (байт) |
Свойства поля | |||||
Ключ |
Обяза тельное |
Ограничения значений | |||||||
Мини мальное |
Макси мальное |
По умолчанию |
Примечания | ||||||
NPolis |
Номер полиса |
Alpha |
8 |
* |
+ |
- |
- |
- |
- |
NFamaly |
Фамилия |
Alpha |
25 |
+ |
- |
- |
- |
- | |
NName |
Имя |
Alpha |
15 |
+ |
- |
- |
- |
- | |
NPatromyc |
Отчество |
Alpha |
20 |
+ |
- |
- |
- |
- | |
NPlace |
Адрес |
Alpha |
255 |
+ |
- |
- |
- |
- | |
NJob |
Место работы |
Alpha |
255 |
+ |
- |
- |
- |
- | |
Таблица 2.2 «Структура записей таблицы »
Med. uslugi.db | |||||||||
Имя поля |
Назначение поля |
Тип |
Длина (байт) |
Свойства поля | |||||
Ключ |
Обязательное |
Ограничения значений | |||||||
Минимальное |
Максимальное |
По умолчанию |
Примечания | ||||||
NSpisok |
Порядковый номер |
Autoincrement |
* |
- |
- |
- |
- | ||
NPolis |
№ полиса |
Alpha |
8 |
+ |
- |
- |
- |
- | |
NData_Postuplenie |
Дата поступления |
Date |
+ |
- |
- |
- |
- | ||
NData_Vipiski |
Дата выписки |
Date |
- |
- |
- |
- |
- | ||
Noplata_za_1_day |
Оплата за 1 день |
$ |
+ |
- |
- |
- |
- | ||
Для выполнения в программе сортировок данных были определены вторичные ключи, имена и состав которых представлен в таблице 2.3.
Таблица 2.3 «Структура записей таблицы »
Имя таблицы |
Имя вторичного ключа |
Состав (имена столбцов) |
Pacient |
family |
NFamaly |
job |
NJob | |
Med. uslugi |
post |
NData_Postuplenie |
vypis |
NData_Vipiska |
3. Методы и алгоритмы решения задач.
Для расчёта суммарной стоимости лечения пациентов в стационаре в ПП используется разность полей с датами и, значение умножается на стоимость лечения за 1 день, связанные с полями таблиц БД. Вычисления производятся в диаграммах и отчетах.
Для вычисления используется SQL-запрос и связь с БД и визуальными компонентами для отображения результатов выполнения запроса. Ввод текста запроса осуществлён с помощью свойства SQL.
SELECT Uslugi.NSpisok, Pacient.NJob,
sum((NData_Vipiska - NData_Postuplenie) * Uslugi.NOplata_za_1_day)
FROM "C:\BD\Pacient.db" Pacient
INNER JOIN "C:\BD\Med. uslugi.db" Uslugi
ON (Pacient.NPolis = Uslugi.NPolis)
WHERE NData_Vipiska is not NULL
Group By Uslugi.NSpisok, Pacient.NJob
Order By Pacient.NJob
Для реализации некоторых возможностей в ПП используется компонент TQuery, который обеспечивает хранение текста SQL-запроса и связь с БД и визуальными компонентами для отображения результатов выполнения запроса. Ввод текста запроса осуществлён с помощью свойства SQL, параметры запроса определены с помощью свойства Params в коде программы.
Для выполнения фильтрации данных по дате поступления в таблице "Med. uslugi" используется следующая процедура:
procedure TBD.Button2Click(Sender: TObject);
begin
if Button2.Caption='Фильтр по поступлению' then
begin
Button1.Caption:='Фильтр по выписке';
Table2.Filter:= 'NData_Postuplenie
= ' + QuotedStr(DateToStr(
Table2.Filtered:=true;
Button2.Caption:='Отменить фильтр по поступлению'
end
else
begin
Button2.Caption:='Фильтр по поступлению';
Table2.Filtered:=false;
end;
end;
Для выполнения фильтрации данных по дате выписки в таблице "Med. uslugi" используется следующая процедура:
procedure TBD.Button1Click(Sender: TObject);
begin
if Button1.Caption='Фильтр по выписке' then
begin
Button2.Caption:='Фильтр по поступлению';
Table2.Filter:= 'NData_Vipiska
= ' + QuotedStr(DateToStr(
Table2.Filtered:=true;
Button1.Caption:='Отменить фильтр по выписке'
end
else
begin
Button1.Caption:='Фильтр по выписке';
Table2.Filtered:=false;
end;
end;
Сортировка данных о пациентах по месту работы и ФИО производится при помощи процедур:
procedure TBD.PacientSort(Sender: TObject);
begin
if RadioButton1.Checked then
begin
Table1.Active := False;
Table1.Exclusive := True;
Table1.IndexName := 'job';
Table1.Exclusive := False;
Table1.Active := True;
end
else
if RadioButton2.Checked then
begin
Table1.Active := False;
Table1.Exclusive := True;
Table1.IndexName:= 'family';
Table1.Exclusive := False;
Table1.Active := True;
end
end;
Сортировка данных о медицинских услугах по дате поступления и дате выписки пациентов производится при помощи процедур:
procedure TBD.PostuplenieSort(Sender: TObject);
begin
if RadioButton3.Checked then
begin
Table2.Active:= False;
Table2.Exclusive:= True;
Table2.IndexName:= 'post';
Table2.Exclusive:= False;
Table2.Active:= True;
end
else
if RadioButton4.Checked then
begin
Table2.Active:= False;
Table2.Exclusive:= True;
Table2.IndexName:= 'vypis';
Table2.Exclusive:= False;
Table2.Active:= True;
end
end;
Для формирования отчетов созданы запросы:
SELECT Pacient.NJob, Pacient.NFamily, Pacient.NName,
Pacient.NPatromyc,sum((NData_
FROM "C:\BD\Pacient.db" Pacient
INNER JOIN " C:\BD\Med. uslugi.DB" Uslugi
ON (Pacient.NPolis = Uslugi.NPolis)
WHERE NData_Vipiska is not NULL
Group By Pacient.NJob, Pacient.NFamily, Pacient.NName, Pacient.NPatromyc
Order By Pacient.Njob
SELECT NData_Postuplenie, count(*)
FROM "C:\BD\Med. uslugi.DB" Uslugi
Group By NData_Postuplenie
Order By NData_Postuplenie
Для формирования графиков созданы запросы:
SELECT Uslugi.NData_Postuplenie, count(Uslugi.NPolis)
FROM " C:\BD\Med. uslugi.DB" Uslugi
GROUP BY Uslugi.NData_Postuplenie
SELECT Uslugi.NSpisok, Pacient.NJob, sum((NData_Vipiska - NData_Postuplenie) * Uslugi.NOplata_za_1_day)
FROM "C:\BD\Pacient.db" Pacient
INNER JOIN "C:\BD\Med. uslugi.DB" Uslugi
ON (Pacient.NPolis = Uslugi.NPolis)
WHERE NData_Vipiska is not NULL
Group By Uslugi.NSpisok, Pacient.NJob
Order By Pacient.NJob
4. Структура пользовательского интерфейса.
Пользовательский
интерфейс диалоговой
Рисунок 4.1 - Структура записей таблицы
Для реализации работы с файлами БД используются компоненты TTable (обеспечение доступа к базе данных), TDataSource (осуществляет связь компонентов с компонентами визуализации и управления данными). Для обеспечения связи этих компонентов с файлами БД и между собой необходимо выполнить следующие действия:
- в свойстве Database Name компонента TTable задать полное имя каталога, где находится файл БД, в свойстве TableName установить имя нужного файла БД,
- установить связь компонента DataSource с компонентом TTable с помощью свойства DataSet(выбрать из списка имя нужного компонента).
Для визуализации данных используется компонент TDBGrid. При этом в свойстве компонента DataSource следует указать имя источника данных т.е. установить связь TDBGrid с DataSource. Следует изменить устанавливаемые по умолчанию надписи колонок DBGrid с помощью свойства Display Label поля компонента Table или с помощью составного (вложенного) свойства Title.Caption колонки компонента DBGrid.
Для перехода, корректировки, добавления, удаления записей используется компонент TDBNavigator. В свойстве DataSource следует указать имя источника данных.
Назначение элементов управления каждой из форм представлено в таблицах 4.1, 4.2, 4.3.
Таблица 4.1- Назначение элементов управления главной формы (Menu)
Элемент управления |
Имя (идентификатор) |
Надпись |
Назначение, имя процедуры |
Кнопка |
Button7 |
О программе |
Открытие формы AboutBox для просмотра сведений о программе; TMenu.Button7Click |
Кнопка |
Button8 |
Exit |
Завершение работы программы; TMenu.Button8Click |
Кнопка |
Button1 |
Ok |
Открытие одной из форм выбранных переключателем для работы с БД; TMenu.Button1Click |
Кнопка |
Button5 |
Ok |
Открытие одной из форм выбранных переключателем для просмотра отчёта; TMenu.Button5Click |
Кнопка |
Button6 |
Ok |
Открытие одной из форм выбранных переключателем для просмотра диаграмм; TMenu.Button6Click |
Переключатель |
RadioButton1 |
Отчет по предприятиям |
Выбор отчёта «Отчет по предприятиям»; TMenu.RadioButton1Click |
Переключатель |
RadioButton2 |
Поступившие пациенты |
Выбор отчета «Поступившие пациенты» ; TMenu.RadioButton2Click |
Переключатель |
RadioButton3 |
Поступившие пациенты |
Выбор диаграммы «Поступившие пациенты» ; TMenu.RadioButton3Click |
Продолжение таблицы 4.1
Элемент управления |
Имя (идентификатор) |
Надпись |
Назначение, имя процедуры |
Переключатель |
RadioButton4 |
Затраты предприятий |
Выбор диаграммы «Затраты предприятий» ; TMenu.RadioButton4Click |
Переключатель |
RadioButton5 |
Справочник «Пациенты» |
Выбор формы Pacient; TMenu.RadioButton5Click |
Переключатель |
RadioButton6 |
Справочник «Поступления» |
Выбор формы Postupleniya; TMenu.RadioButton6Click |
Переключатель |
RadioButton8 |
Просмотр БД |
Выбор формы BD; TMenu.RadioButton8Click |
Таблица 4.2- Назначение элемента управления формы «О программе»
Элемент управления |
Имя (идентификатор) |
Надпись |
Назначение, имя процедуры |
Кнопка |
OkButton |
Ok |
Закрытие формы AboutBox , Открытие формы Menu (Выход в главное меню) |
Таблица 4.3- Назначение элементов управления формы «Просмотр БД»
Элемент управления |
Имя (идентификатор) |
Надпись |
Назначение, имя процедуры |
Кнопка |
Button1 |
Фильтр/ Отменить фильтр |
Выполнить/Отменить фильтрацию данных в таблице "Med. uslugi"; TButton1Click |
Кнопка |
Button2 |
Фильтр/ Отменить фильтр |
Выполнить/Отменить фильтрацию данных в таблице "Med. uslugi"; TButton2Click |
Переключатель |
RadioButton1 |
По месту работы |
Выполнение сортировки данных по пациентам по месту работы; TRadioButton1Click |
Переключатель |
RadioButton2 |
По ФИО |
Выполнение сортировки данных по пациентам по ФИО; TRadioButton2Click |
Переключатель |
RadioButton3 |
По дате поступления |
Выполнение сортировки данных по поступлениям по дате поступления; TRadioButton3Click |
Переключатель |
RadioButton4 |
По дате выписки |
Выполнение сортировки данных по поступлениям по дате выписки; TRadioButton4Click |
5. Структура программы.
Иерархическая модель программы представлена на рисунке 5.1.
Сведения о функциях, выполняемых процедурами сведены в таблицу 5.1
Таблица 5.1 - Сведения о функциях, выполняемых процедурами
Имя программного модуля, процедуры |
Назначение, выполняемые функции |
Входные параметры |
Выходные параметры |
Вызываемые модули |
Unit1 |
procedure Button1Click |
Sender: TObject |
- |
- |
procedure Button2Click |
Sender: TObject |
- |
- | |
procedure PacientSort |
Sender: TObject |
- |
- | |
procedure PostuplenieSort |
Sender: TObject |
- |
- | |
Unit9 |
procedure Tmenu.Button7Click |
Sender: TObject |
- |
- |
procedure Tmenu.Button8Click |
Sender: TObject |
- |
- | |
procedure Tmenu.BitBtn1Click |
Sender: TObject |
- |
- |
На схеме главной программы отображен алгоритм, показывающий возможности выбора пользовательских функций (Приложение Б).
Алгоритм состоит из одного цикла, который начинается с вывода меню пользовательских функций. При совершении события (выборе функции) происходит анализ кода события и выполнение соответствующей процедуры. Цикл выполняется, пока не будет выбрана процедура «Button8Click» – выход.
На схеме процедуры (Приложение Б) представлен алгоритм, предназначенный для выполнения фильтрации данных в таблице med. uslugi.db. По схеме видно, что алгоритм начинается с проверки условия. Если на кнопке Button1 (Button2), имеется надпись «Фильтр», то надо ввести условие отбора данных в поле DateTimePicker1 (DateTimePicker2) и, нажать данную кнопку. Затем происходит передача условия отбора данных из окна компонента DateTimePicker1 (DateTimePicker2) в свойство компонента DBGrid2 и изменяется значение свойства для выполнения отбора данных. Кнопке Button1 (Button2) присваивается значение «Отменить фильтр». Если же на кнопке Button1 (Button2) другая надпись («Отменить фильтр»), то происходит отмена фильтрации и окно компонента DateTimePicker1 (DateTimePicker2) становится свободным для введения условия.
На схеме данных (Приложение А) пред Tmenu.Button7Click ставлен технологический процесс обработки данных. Исходные данные поступают в таблицы Pacient.db и Med. uslugi.db расположенных на форме BD, , для их последующего ввода и редактирования из соответствующих документов. На основе этих данных формируются отчеты и графики, отчеты можно выводить на бумажный носитель.
6. Описание программы.
Текст программы представлен в приложении В.
Проект состоит из следующих файлов:
- Project1.dpr {файл проекта};
- Unit1.pas, содержит описание формы, предназначенной для работы с БД;
- Unit2.pas, содержит описание формы предназначенной для обеспечения возможности просмотра отчета;
- Unit3.pas, содержит описание формы предназначенной для отображения диаграммы;
- Unit4.pas,содержит описание формы справочника «Поступления»;
- Unit5.pas, содержит описание формы «О программе»;
-Unit7.pas, содержит описание формы предназначенной для обеспечения возможности просмотра отчета;
-Unit8.pas, содержит описание формы предназначенной для отображения диаграммы;
-Unit9.pas, содержит процедуры-обработки выбора пунктов меню для обеспечения возможности выбора пользовательских функций;
-Unit10.pas, содержит описание формы справочника «Пациенты»;
-Help.pas, вызов справочных данных.
Сведения об использованных компонентах и значениях их свойств, которые потребовались при создании программы, сведены в таблицы 6.1 – 6.9.
Таблица 6.1- Свойства компонентов формы Menu
Элемент управления |
Надпись |
Свойство |
Значение |
1 |
2 |
3 |
4 |
Кнопка, Button7 |
О программе |
Caption |
Открытие формы AboutBox |
Кнопка, Button8 |
Exit |
Caption |
Завершение работы программы |
Кнопка, Button1 |
Ok |
Caption |
Открытие одной из форм выбранных переключателем для работы с БД |
Продолжение таблицы 6.1
1 |
2 |
3 |
4 |
Кнопка, Button5 |
Ok |
Caption |
Открытие одной из форм выбранных переключателем для просмотра отчёта |
Кнопка, Button6 |
Ok |
Caption |
Открытие одной из форм выбранных переключателем для просмотра диаграмм |
Переключатель, RadioButton1 |
Отчет по предприятиям |
OnClick |
Выбор отчёта «Отчет по предприятиям» |
Переключатель, RadioButton2 |
Поступившие пациенты |
OnClick |
Выбор отчета «Поступившие пациенты» |
Переключатель, RadioButton3 |
Поступившие пациенты |
OnClick |
Выбор диаграммы «Поступившие пациенты» |
Переключатель, RadioButton4 |
Затраты предприятий |
OnClick |
Выбор диаграммы «Затраты предприятий» |
Переключатель, RadioButton5 |
Справочник «Пациенты» |
OnClick |
Выбор формы Pacient |
Переключатель, RadioButton6 |
Справочник «Поступления» |
OnClick |
Выбор формы Postupleniya |
Переключатель, RadioButton8 |
Просмотр БД |
OnClick |
Выбор формы BD |

- База данных сотрудника банка по заработной плате
- База данных социального центра
- База данных спортивных сооружений города
- База данных спорткомплекса
- База данных справочной системы аэропорта
- База данных "Страна"
- База данных страховая компания
- База данных «Ремонт компьютеров»
- База данных «Салон красоты»
- База данных склад
- База данных склада супермаркета
- База данных "Склад промышленных товаров"
- База данных «Склад промышленных товаров»
- База данных склад сотовых телефонов