Таблица 3. Основные файлы программы
Файлы | Назначение |
Unit2.pas | исходный файл с модулем для формы «Unit2» |
UnitFilter.pas | исходный файл с модулем для формы «UnitFilter» |
UnitGlavVrach.pas | исходный файл с модулем для формы «UnitGlavVrach» |
UnitMedSestra.pas | исходный файл с модулем для формы «UnitMedSestra» |
UnitPassword.pas | исходный файл с модулем для формы «UnitPassword» |
ProjectHospital.dpr | исходный файл проекта |
ProjectHospital.exe | автономный исполнимый файл, запускающий приложение |
Модуль «Unit2» проекта «Больница» служит приветствием проекта. Модуль «UnitMedSestra» обеспечивает основную работу программы, «UnitFiter» обеспечивает поиск информации, «UnitGlavVrach» обеспечивает работу программы для врача и «UnitPassword» обеспечивает защиту информации.
Наименование процедуры (функции) | Краткое описание |
Модуль «Unit2» | |
procedure TForm2.FormPaint | Закрашивание формы при запуске программы |
Модуль «UnitMedSestra» | |
Procedure N1Click | Вызов формы с паролем |
procedure mnFindClick | Вызов формы для поиска пациента |
procedure tbPalataBeforeDelete | Каскадное удаление палаты при отсутствие в ней пациентов |
procedure tbOtdelBeforeDelete | Каскадное удаление отделения, если все палаты пустые |
procedure tbPalataAfterPost | После создания палаты создаем список пациентов в ней путем копирования из списка отделения |
procedure tbPacientAfterPost | После добавления пациента в палату она на одного занимается |
procedure tbOtdelAfterScroll | После выбора отделения обновляется поле списка для выбора палаты |
procedure tbPalataBeforeDelete | Невозможно удалить палату при наличие в ней пациентов |
procedure tbOtdelBeforeDelete | Невозможно удалить отделение пока все палаты не пустые |
procedure tbPacientBeforeInsert | Блокируется добавление записи при вызове из сетки |
procedure FormCanResize | |
procedure FormClose | |
procedure FormShow | |
Модуль «UnitFilter» | |
procedure btnFilterClick | Поиск пациента по дате |
procedure btnFamilClick | Поиск пациента по фамилии |
procedure FormShow | |
procedure FormCanResize | |
Модуль «UnitPassword» | |
procedure FormShow | |
procedure Timer1Timer | Появление формы с паролем |
Таблица 1. Основные процедуры и функции
5. Методическое обеспечение
5.1 Руководство пользователю
После запуска приложения на экране появляется заставка программы (см. Рисунок 2).
Рисунок 2. Заставка приложения
После заставки появляется главная форма (см. Рисунок 4). На ней можно просмотреть всю необходимую информацию, имеющуюся в текущий момент об отделение, палате и пациентах, лечащихся в данной больнице. Для этого необходимо выбрать интересующее вас отделение, палату пациента. После выбора интересующего отделения и палаты в правой части будут отображаться сведения о пациентах, лежащих там. Пациентов можно редактировать (выписка, поступление). При удалении пациентов из палаты они будут удалены из базы данных. Закрыть или свернуть главную форму можно при помощи кнопок, размещенных в правом верхнем углу формы или сочетанием клавиш Alt+F4.
Рисунок 4. Главное окно программы
Для того, чтобы найти необходимого пациента можно воспользоваться поиском. Поиск осуществляется по фамилии пациента или по сроку его пребывания в больнице. Для этого необходимо выбрать в главном меню «Поиск пациента» на главной форме. После этого появится форма поиска (см. Рисунок 5).
Рисунок 5. Поиск студента
В этой форме необходимо нажать кнопку «фамилия», если поиск производится по фамилии, затем задать фамилию пациента и нажать ОК, или если поиск производится по дате, нажать «дата» и ввести количество дней. Пример поиска показан на Рисунке 6 (а) и (б).
Рисунок 6(а) Поиск по фамилии
Рисунок 6 (б). Поиск по дате
После осуществления поиска при щелчке по одному из найденных пациентов, в главной форме произойдет локализация на данном пациенте (см. Рисунок 7).
Рисунок 7. Пример поиска
Для того что бы перейти к форме для главврача необходимо в главном меню, на форме для медсестры, выбрать «форма для главврача». Но после этого, для безопасности, появиться форма с паролем (см. Рисунок 8)
Рисунок 8. Форма с паролем
После ввода верного пароля появится форма для главврача, в которой можно будет осуществить добавление в базу, или удаление из нее отделения или палаты изменять количество койкомест (см. Рисунок 9)
Рисунок 9. форма для главврача
Заключение
База данных «Больница», разработанная в ходе выполнения проекта, является актуальной на сегодняшний день, так как все больницы нуждаются в автоматизации управления. Нами были приобретены навыки программирования на языке Object Pascal в среде Delphi 7.0. Также мы научились разрабатывать собственные алгоритмы для решения поставленных задач, овладели методами и средствами отладки и тестирования программ.
Разработанная нами программа устойчиво выполняет все свои функции, но для использования ее в больницах, она требует некоторых доработок: программным путем обеспечить безопасность данных, расширить возможности поиска (поиск по двум и более полям), и т.д.
Список используемой литературы
1. А.Я. Архангельский Программирование в Delphi 7
2. А. Микляев «Учебник пользователя IBMPC», Москва – 2000
Приложение А
Листингмодуля «Unit2.pas»
procedure TForm2.FormPaint(Sender: TObject);
var y:integer; red:byte;
consttext='База данных больницы';
begin
with Canvas do
begin
for y := 0 to Form2.Height-1 do
begin
red:=round($FF*(Form2.Height-y)/Form2.Height);
pen.Color:=rgb(red,0,0);
moveTo(0,y);
LineTo(Form2.Width-1,y)
end; // for
Font.Size:=32;
Font.Style:=[fsBold,fsItalic,fsUnderLine];
Font.Name:='Times New Roman Cyr';
Brush.Style:=bsClear;
Font.Color:=clBlack;
TextOut(40,30,Text);
Font.Color:=clWhite;
TextOut(36,26,Text);
end;// with
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
close
end;
Приложение B
Листингмодуля «UnitMedSestra.pas»
procedure TFormMedSestra.N1Click(Sender: TObject);
begin
FormDeactivate(Self);
if (FormPassword.ShowModal=mrOk) and
(FormPassword.Edit1.Text='1') then
FormGlavVrach.Showmodal;
FormActivate(Self);
end;
procedure TFormMedSestra.FormShow(Sender: TObject);
begin
tbOtdel.Open;
tbPalata.Open;
tbPacient.Open;
form2.ShowModal;
DBLookupComboBox1.KeyValue:=tbOtdel.fieldByName('Notdel').AsInteger
end;
procedure TFormMedSestra.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
tbOtdel.Close;
tbPalata.Close;
tbPacient.Close;
end;
procedure TFormMedSestra.tbPacientAfterDelete(DataSet: TDataSet);
begin // после удаления пациента палата на одного освобождается
tbPalata.Edit;
tbPalata.FieldByName('Kol_pacient').AsInteger:=
tbPalata.FieldByName('Kol_pacient').AsInteger-1;
tbPalata.Post;
if FormFilter.Visible then // если поисковая форма видима - информация на ней должна быть актуальна
begin
FormFilter.tbPalata2.Refresh;
FormFilter.tbPacient2.Refresh;
end;
end;
procedure TFormMedSestra.tbPacientBeforePost(DataSet: TDataSet);
begin // невозможно сохранить запись с пустыми полями: "фамилия и диагноз"
PacSt:= tbPacient.State;
if tbPacient.FieldByName('Famil').AsString='' then
if tbPacient.FieldByName('Diagnoz').AsString='' then
begin
tbPacient.Cancel;
Abort
end
else
begin
ShowMessage('Введитефамилию');
Abort
end
end;
procedure TFormMedSestra.tbPacientAfterPost(DataSet: TDataSet);
begin // после добавления(но не после редактирования) пациента палата на одного занимается
if PacSt=dsInsert then begin
tbPalata.Edit;
tbPalata.FieldByName('Kol_pacient').AsInteger:=
tbPalata.FieldByName('Kol_pacient').AsInteger+1;
tbPalata.Post;
end;
if FormFilter.Visible then // если поисковая форма видима - информация на ней должна быть актуальна
begin
FormFilter.tbPalata2.Refresh;
FormFilter.tbPacient2.Refresh;
end;
end;
procedure TFormMedSestra.tbPacientBeforeInsert(DataSet: TDataSet);
begin // невозможно добавить пациента, если вся палата занята
if tbPalata.FieldByName('Kol_pacient').AsInteger=
tbPalata.FieldByName('Kol_mest').AsInteger then abort;
end;
procedure TFormMedSestra.tbPacientNewRecord(DataSet: TDataSet);
begin // маленький сервис с вставкой текущей даты при добавлении пациента(уменьшается вероятность ошибки при вводе даты)
tbPacient.FieldByName('DataPostup').AsDateTime:=now;
end;
procedure TFormMedSestra.mnFindClick(Sender: TObject);
begin
FormFilter.Show
end;
procedure TFormMedSestra.tbOtdelAfterScroll(DataSet: TDataSet);
begin
if tbOtdel.fieldByName('Notdel').AsInteger>0 then // безэтойпроверкидобавлениеотделения
// в DBGrid стрелкой вниз не выполняется
DBLookupComboBox1.KeyValue:=tbOtdel.fieldByName('Notdel').AsInteger;
StaticText1.Caption:=tbOtdel.fieldByName('Kol_palat').AsString;
end;
procedure TFormMedSestra.tbPalataAfterScroll(DataSet: TDataSet);
begin
if tbPalata.fieldByName('Npalat').AsInteger>0 then // безэтойпроверкидобавлениепалаты
// в DBGrid стрелкой вниз не выполняется
DBLookupListBox1.KeyValue:=tbPalata.fieldByName('Npalat').AsInteger
end;
procedure TFormMedSestra.tbPalataBeforeDelete(DataSet: TDataSet);
begin
if tbPalata.FieldByName('Kol_Pacient').AsInteger>0 then
begin
windows.beep(400,200);
windows.beep(200,200);
ShowMessage('удаление палаты не возможно при наличии в ней пациентов');
abort
end;
end;
procedure TFormMedSestra.tbPalataAfterDelete(DataSet: TDataSet);
begin
tbOtdel.Edit;
tbOtdel.FieldByName('Kol_palat').AsInteger:=
tbOtdel.FieldByName('Kol_palat').AsInteger-1;
tbOtdel.Post
end;
procedure TFormMedSestra.tbOtdelBeforeDelete(DataSet: TDataSet);
begin
tbPalata.First;
while not tbPalata.Eof do
begin
if tbPalata.FieldByName('Kol_Pacient').AsInteger >0 then
begin
windows.beep(400,200);
windows.beep(500,200);
windows.beep(600,200);
ShowMessage('невозможно удалить отделение, так как не все палаты пустые');
abort;
end;
tbPalata.Next
end; // палаты каскадно будут удаляться, если ни в одной из них не пациентов
while not tbPalata.Bof do tbPalata.Delete
end;
procedure TFormMedSestra.tbPalataBeforePost(DataSet: TDataSet);