Методическое обеспечение

 

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. А. Микляев «Учебник пользователя IBM PC», Москва – 2000



Приложение А

 

Листинг модуля «Unit2.pas»

 

procedure TForm2.FormPaint(Sender: TObject);

var y:integer; red:byte;

const text='База данных больницы';

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);

begin

if tbPalata.FieldByName('Kol_mest').AsInteger < tbPalata.FieldByName('Kol_pacient').AsInteger then

begin

 windows.beep(500,200);

 windows.beep(300,200);

 windows.beep(200,200);

 ShowMessage('количество койкомест нельзя делать меньше, чем количество пациентов');

 abort;

end;

PalSt:=tbPalata.State

end;

 

procedure TFormMedSestra.tbPalataAfterPost(DataSet: TDataSet);

begin

if PalSt=dsInsert then begin

tbOtdel.Edit;

tbOtdel.FieldByName('Kol_palat').AsInteger:=

tbOtdel.FieldByName('Kol_palat').AsInteger+1;

tbOtdel.Post;

end;

end;

 

procedure TFormMedSestra.DBLookupComboBox1DropDown(Sender: TObject);

begin // при выпадении списка, StaticText1 - черное на белом

StaticText1.Font.Color:=clBlack;

StaticText1.Color:=clWhite

end;

 

procedure TFormMedSestra.DBLookupComboBox1CloseUp(Sender: TObject);

begin // при захлопывании списка, StaticText1 - белое на синем

StaticText1.Font.Color:=clWhite;

StaticText1.Color:=clHighLight

end;

 

procedure TFormMedSestra.DBLookupComboBox1Exit(Sender: TObject);

begin // при потере фокуса, StaticText1 - черное на белом

StaticText1.Font.Color:=clBlack;

StaticText1.Color:=clWhite

end;

 

procedure TFormMedSestra.DBLookupComboBox1Enter(Sender: TObject);

begin // при получении фокуса, StaticText1 - белое на синем

StaticText1.Font.Color:=clWhite;

StaticText1.Color:=clHighLight

end;

 

procedure TFormMedSestra.FormDeactivate(Sender: TObject);

begin // при деактивации формы и если список в фокусе, StaticText1 - черное на белом

if FormMedSestra.ActiveControl= DBLookupComboBox1 then

begin

 StaticText1.Font.Color:=clBlack;

 StaticText1.Color:=clWhite

end;

end;

 

procedure TFormMedSestra.FormActivate(Sender: TObject);

begin // при активации формы и если список в фокусе, StaticText1 - белое на синем

if FormMedSestra.ActiveControl= DBLookupComboBox1 then

begin

 StaticText1.Font.Color:=clWhite;

 StaticText1.Color:=clHighLight

end;

end;

 

procedure TFormMedSestra.FormCanResize(Sender: TObject; var NewWidth,

 NewHeight: Integer; var Resize: Boolean);

begin

NewWidth:=width

end;

 



Приложение C

 

Листинг модуля «UnitPassword»

 

procedure TFormPassword.FormShow(Sender: TObject);

begin

AlphaBlendValue:=0;

Timer1.Enabled:=true;

edit1.SetFocus;

edit1.Clear

end;

 

procedure TFormPassword.Timer1Timer(Sender: TObject);

begin

if AlphaBlendValue<255 then

AlphaBlendValue:=AlphaBlendValue+15

else

Timer1.Enabled:=false

end;



Приложение D

 

Листинг модуля «UnitFilter»

 

procedure TFormFilter.EdFilterKeyPress(Sender: TObject; var Key: Char);

begin

if not (key in ['0'..'9',#8]) then key:=#0

end;

 

procedure TFormFilter.btnFilterClick(Sender: TObject);

var a:TDate;

begin

 try

a:=date-StrToInt(EdFilter.Text);

except

showMessage('укажите количество дней');

exit

end;

tbPacient2.Filter:= 'DataPostup<='+QuotedStr(DateToStr(a));

end;

 

procedure TFormFilter.FormShow(Sender: TObject);

begin

tbPacient2.Open;

tbPalata2.Open;

end;

 

procedure TFormFilter.FormClose(Sender: TObject; var Action: TCloseAction);

begin

tbPacient2.Close;

tbPalata2.Close;

end;

 

procedure TFormFilter.btnFamilClick(Sender: TObject);

begin

tbPacient2.Filter:='Famil='+QuotedStr(EdFamil.Text);

end;

 

procedure TFormFilter.tbPacient2AfterScroll(DataSet: TDataSet);

begin

FormMedSestra.tbOtdel.Locate('Notdel',tbPacient2.FieldByName('lkNotdel2').AsInteger,[]);

FormMedSestra.tbPalata.Locate('Npalat',tbPacient2.FieldByName('Npalat').AsInteger,[]);

FormMedSestra.tbPacient.Locate('Nfamil',tbPacient2.FieldByName('Nfamil').AsInteger,[]);

end;

 

procedure TFormFilter.SpeedButton1Click(Sender: TObject);

begin

EdFamil.Enabled:=true;

btnFamil.Enabled:=true;

EdFilter.Enabled:=false;

btnFilter.Enabled:=false

end;

 

procedure TFormFilter.SpeedButton2Click(Sender: TObject);

begin

EdFamil.Enabled:=false;

btnFamil.Enabled:=false;

EdFilter.Enabled:=true;

btnFilter.Enabled:=true

end;

 

procedure TFormFilter.FormCanResize(Sender: TObject; var NewWidth,

 NewHeight: Integer; var Resize: Boolean);

begin

NewWidth:=Width

end;

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: