База данных со сведениями о пациентах и медицинских услугах в стационаре

Введение

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

- увеличение номенклатуры объема  продукции (работ, услуг и т.д.);

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

Следствием являются:

- увеличение объема обрабатываемых  данных;

- увеличение производительности  труда при обработке данных;

- необходимость сокращения затрат  времени на обработку данных.

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

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

 

 

 

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                             Med. Uslugi.db

 

NPolis

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(DateTimePicker2.date));

      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(DateTimePicker1.date));

      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_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  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. Структура пользовательского интерфейса.

 

        Пользовательский  интерфейс диалоговой программы  обеспечивает выбор функций и  работу с данными («О программе», «Help», «Работа с БД», «Отчеты», «Диаграммы»). Структура пользовательского интерфейса представлена графически на рис. 4.1.

Рисунок 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

Таблица 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

База данных со сведениями о пациентах и медицинских услугах в стационаре