p align="left">Таблица 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. А. Микляев «Учебник пользователя 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;
Страницы: 1, 2, 3
|