Скачиваний:
9
Добавлен:
17.06.2023
Размер:
970.15 Кб
Скачать

11 Гусятников В. Н. Безруков А. И. Стандартизация и разработка программных систем. [Электронный ресурс]: Электрон. текстовые дан. СПб. : Лань, 2012. Режим доступа: URL http://e.lanbook.com/ books/element.php?pl1_id=5321

12Дарахвелидзе П. Г. Программирование в Delphi 7. Спб. : БХВ-Петербург, 2013. 784 с.

13Нечаев Д. Ю., Чекмарев Ю. В. Надежность информационных систем

[электронный ресурс]: учебное пособие. М. : Изд. «ДМК Пресс» 2012. 64 с. Режим

доступа: http://e.lanbook.com/books/element.php?pl1_id=3030

14Осипов Д.Л. Базы данных и Delphi. Спб. : БХВ-Петербург, 2011. 854 с.

15Нечаев Д. Ю., Чекмарев Ю. В. Надежность информационных систем

[электронный ресурс]: учебное пособие. М. : Изд. «ДМК Пресс» 2012. 64 с. Режим доступа: http://e.lanbook.com/books/element.php?pl1_id=3030

22

ПРИЛОЖЕНИЕ А

Модель бизнес-процессов предметной области по стандарту IDEF0

Рисунок А.1 – Верхний блок диаграммы бизнес-процессов IDEF0

Рисунок А.2 – Декомпозиция блока «Автоматизация учета сдачи экзаменов и выдачи водительских прав на вождение автотранспортных средств»

23

Рисунок А.3 – Декомпозиция блока «Ввод и редактирование данных»

Рисунок А.4 – Декомпозиция блока «Работа с сервисными функциями»

24

Рисунок А.5 – Декомпозиция блока «Аналитическая обработка данных»

25

ПРИЛОЖЕНИЕ Б

Описание таблиц базы данных

Таблица Б.1 – Описание свойств полей таблицы Pass

Имя поля

Тип данных

Размер

Обязательное

Индексированное

Комментарий

 

 

поля

поле

поле

 

us

Счетчик

Длинное

Да

Да (Совпадения

Ключевое поле

 

 

целое

 

не допускаются)

 

pass

Текстовый

50

Да

Нет

Имя

 

 

 

 

 

пользователя

prava

Текстовый

50

Да

Нет

Пароль

Таблица Б.2 – Описание свойств полей таблицы Klient

Имя поля

Тип данных

Размер

Обязательное

Индексированное

Комментарий

 

 

поля

поле

поле

 

id_kl

Счетчик

Длинное

Да

Да (Совпадения

Ключевое поле

 

 

целое

 

не допускаются)

 

fio_kl

Тектовый

50

Нет

Нет

ФИО

adr_kl

Тектовый

50

Нет

Нет

Адрес

sp_kl

Числовой

Длинное

Нет

Нет

Серия паспорта

 

 

целое

 

 

 

np_kl

Числовой

Длинное

Нет

Нет

Номер паспорта

 

 

целое

 

 

 

dataR_kl

Дата/время

-

Нет

Нет

Дата рождения

 

 

 

 

 

 

dataT_kl

Дата/время

-

Нет

Нет

Дата

 

 

 

 

 

тестирования

Test_kl

Логический

-

-

Нет

Метка

 

 

 

 

 

прохождения

log_kl

Логический

-

-

Нет

Метка занятости

Таблица Б.3 – Описание свойств полей таблицы Otvet

Имя поля

Тип данных

Размер

Обязательное

Индексированное

Комментарий

 

 

 

поля

поле

поле

 

 

id_o

Счетчик

Длинное

Да

Да (Совпадения

Ключевое поле

 

 

 

целое

 

не допускаются)

 

 

nazv_o

Текстовый

50

Нет

Нет

Текст ответа

 

 

 

 

 

 

 

 

id_vp_o

Числовой

Длинное

Нет

Нет

Вопрос,

к

 

 

целое

 

 

которому

 

 

 

 

 

 

относится ответ

 

26

Таблица Б.4 – Описание свойств полей таблицы Prava

Имя поля

Тип данных

Размер

Обязательное

Индексированное

Комментарий

 

 

поля

поле

поле

 

 

id_pr

Счетчик

Длинное

Да

Да (Совпадения

Ключевое поле

 

 

целое

 

не допускаются)

 

 

id_kl_pr

Текстовый

50

Нет

Нет

ФИО владельца

 

 

 

 

 

 

k_pr

Текстовый

50

Нет

Нет

Категория прав

 

 

 

 

 

 

 

dataV_pr

Дата и время

-

Нет

Нет

Дата

выдачи

 

 

 

 

 

прав

 

dataO_pr

Дата и время

-

Нет

Нет

Дата

обмена

 

 

 

 

 

прав

 

EDIT

Логический

-

-

Нет

Метка занятости

Таблица Б.5 – Описание свойств полей таблицы Vopr

Имя поля

Тип данных

Размер

Обязательное

Индексированное

Комментарий

 

 

поля

поле

поле

 

id_vp

Счетчик

Длинное

Да

Да (Совпадения

Ключевое поле

 

 

целое

 

не допускаются)

 

nazv_vp

Текстовый

50

Нет

Нет

Текст вопроса

 

 

 

 

 

 

po_vp

Числовой

Длинное

Нет

Нет

Номер

 

 

целое

 

 

правильного

 

 

 

 

 

ответа

EDIT

Логический

-

-

Нет

Метка занятости

27

ПРИЛОЖЕНИЕ В

Текст программы

end;

var

main: Tmain;

implementation uses datm;

{$R *.dfm}

procedure Tmain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin halt; end;

end.

unit fvopr;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls, Buttons, ToolWin;

type

Tvopr = class(TForm) m: TMemo;

Label1: TLabel; e1: TEdit;

e2: TEdit; e3: TEdit; e4: TEdit;

rb1: TRadioButton; rb2: TRadioButton; rb3: TRadioButton; rb4: TRadioButton; ToolBar1: TToolBar;

ToolButton14: TToolButton;

ToolButton8: TToolButton;

ToolButton9: TToolButton;

ToolButton10: TToolButton;

ToolButton12: TToolButton;

procedure ToolButton10Click(Sender: TObject); procedure ToolButton8Click(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose:

Boolean);

procedure FormShow(Sender: TObject); private

{Private declarations } public

{Public declarations } end;

var

vopr: Tvopr; klPo:integer; vsego:integer; implementation

uses datm, fklient; {$R *.dfm}

procedure Tvopr.ToolButton10Click(Sender: TObject); var b:boolean;

begin b:=false;

if id_kl<>'0' then begin

if (rb1.Checked=false) AND (rb2.Checked=false) AND (rb3.Checked=false) AND (rb4.Checked=false) then

begin

showmessage('Нужно выбрать 1 ответ'); exit;

end else

begin dm.temp.Active:=false;

dm.temp.CommandText:='SELECT * FROM otvet WHERE id_o = '+tmp+' ORDER BY id_o';

dm.temp.Active:=true;

tmp:=dm.temp.Fields[1].AsString; if rb1.Checked=true then

begin

if tmp=e1.Text then begin

b:=true;

end;

end;

if rb2.Checked=true then begin

if tmp=e2.Text then begin

b:=true;

end;

end;

if rb3.Checked=true then begin

if tmp=e3.Text then begin

b:=true;

end;

end;

if rb4.Checked=true then begin

if tmp=e4.Text then begin

b:=true;

end;

end;

//Правильный ли ответ if b=true then

begin klPo:=klPo+1; end;

end;

end;

if vsego=kolo then begin

if klpo>kolo then klpo:=kolo;

showmessage('Всего вопросов: '+inttostr(kolO)+'. Отвечено правильно: '+inttostr(klPo)+'');

if (kolO-klpo)>2 then begin

showmessage('Экзамен не сдан'); end

else begin

showmessage('Экзамен сдан'); dm.COM.CommandText:='Update klient SET test_k=TRUE

WHERE id_kl = '+id_kl+''; dm.COM.Execute; end;

application.MessageBox('При нажатии кнопки "OK" программа закроется','Выход',mb_ok+mb_iconasterisk);

closequery;

end;

dm.vop.Next;

vsego:=vsego+1;

28

if id_kl='0' then

tmp:=dm.vop.Fields[2].AsString;

begin

 

vopr.rb1.Checked:=false;

dm.temp.Active:=false;

vopr.rb2.Checked:=false;

dm.temp.CommandText:='SELECT * FROM otvet WHERE

vopr.rb3.Checked:=false;

id_vp_o = '+dm.vop.Fields[0].AsString+' ORDER BY id_o';

vopr.rb4.Checked:=false;

dm.temp.Active:=true;

m.Lines.Clear;

 

 

vopr.e1.text:=dm.temp.Fields[1].AsString;

vopr.m.Lines.Add(dm.vop.Fields[1].AsString);

if tmp=dm.temp.Fields[0].AsString then

tmp:=dm.vop.Fields[2].AsString;

begin

 

vopr.rb1.Checked:=true;

dm.temp.Active:=false;

end;

dm.temp.CommandText:='SELECT * FROM otvet WHERE

dm.temp.Next;

id_vp_o = '+dm.vop.Fields[0].AsString+' ORDER BY id_o';

vopr.e2.Text:=dm.temp.Fields[1].AsString;

dm.temp.Active:=true;

if tmp=dm.temp.Fields[0].AsString then

 

begin

vopr.e1.text:=dm.temp.Fields[1].AsString;

vopr.rb2.Checked:=true;

if tmp=dm.temp.Fields[0].AsString then

end;

begin

dm.temp.Next;

vopr.rb1.Checked:=true;

vopr.e3.Text:=dm.temp.Fields[1].AsString;

end;

if tmp=dm.temp.Fields[0].AsString then

dm.temp.Next;

begin

vopr.e2.Text:=dm.temp.Fields[1].AsString;

vopr.rb3.Checked:=true;

if tmp=dm.temp.Fields[0].AsString then

end;

begin

dm.temp.Next;

vopr.rb2.Checked:=true;

vopr.e4.Text:=dm.temp.Fields[1].AsString;

end;

if tmp=dm.temp.Fields[0].AsString then

dm.temp.Next;

begin

vopr.e3.Text:=dm.temp.Fields[1].AsString;

vopr.rb4.Checked:=true;

if tmp=dm.temp.Fields[0].AsString then

end;

begin

end

vopr.rb3.Checked:=true;

else

end;

begin

dm.temp.Next;

 

vopr.e4.Text:=dm.temp.Fields[1].AsString;

end;

if tmp=dm.temp.Fields[0].AsString then

end;

begin

 

vopr.rb4.Checked:=true;

procedure Tvopr.FormCloseQuery(Sender: TObject; var

end;

CanClose: Boolean);

end

begin

else

kolO:=0;

begin

if id_kl<>'0' then

vopr.rb1.Checked:=false;

begin

vopr.rb2.Checked:=false;

dm.COM.CommandText:='DELETE * FROM temp WHERE

vopr.rb3.Checked:=false;

kl='+id_kl+'';

vopr.rb4.Checked:=false;

dm.COM.Execute;

m.Lines.Clear;

halt;

 

end;

vopr.m.Lines.Add(dm.vop.Fields[1].AsString);

close;

tmp:=dm.vop.Fields[2].AsString;

end;

dm.temp.Active:=false;

procedure Tvopr.FormShow(Sender: TObject);

dm.temp.CommandText:='SELECT * FROM otvet WHERE

begin

id_vp_o = '+dm.vop.Fields[0].AsString+' ORDER BY id_o';

klPo:=0;

dm.temp.Active:=true;

vsego:=1;

 

end;

vopr.e1.text:=dm.temp.Fields[1].AsString;

 

dm.temp.Next;

end.

vopr.e2.Text:=dm.temp.Fields[1].AsString;

 

dm.temp.Next;

unit FvidP;

vopr.e3.Text:=dm.temp.Fields[1].AsString;

 

dm.temp.Next;

interface

vopr.e4.Text:=dm.temp.Fields[1].AsString;

 

end;

uses

end;

Windows, Messages, SysUtils, Variants, Classes, Graphics,

 

Controls, Forms,

procedure Tvopr.ToolButton8Click(Sender: TObject);

Dialogs, StdCtrls, Buttons, ComCtrls,dateutils;

begin

 

dm.vop.Prior;

type

if klient.Visible=false then

TVidP = class(TForm)

begin

cb: TComboBox;

vopr.rb1.Checked:=false;

Label1: TLabel;

vopr.rb2.Checked:=false;

dtp1: TDateTimePicker;

vopr.rb3.Checked:=false;

Label2: TLabel;

vopr.rb4.Checked:=false;

BitBtn1: TBitBtn;

m.Lines.Clear;

BitBtn2: TBitBtn;

 

procedure BitBtn1Click(Sender: TObject);

vopr.m.Lines.Add(dm.vop.Fields[1].AsString);

 

 

29

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

procedure BitBtn2Click(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose:

Boolean);

private

{Private declarations } public

{Public declarations } end;

var

VidP: TVidP;

implementation

uses datm;

{$R *.dfm}

procedure TVidP.BitBtn1Click(Sender: TObject); begin

if cb.Text='' then showmessage('Введена не вся информация') else

begin

dm.COM.CommandText:='Insert into prava (id_kl_pr,k_pr,dataV_pr,dataO_pr) values ('+dm.Kl.Fields[0].AsString+',"'+cb.Text+'","'+datetostr(dtp1.Date)+'","'+ datetostr(incyear(dtp1.Date,10))+'")';

dm.COM.Execute;

closequery;

end;

end;

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

begin close; end;

procedure TVidP.BitBtn2Click(Sender: TObject); begin

closequery;

end;

procedure TVidP.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin close; end;

end.

unit Fsprav;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, DBGrids;

type

TSprav = class(TForm) DBGrid1: TDBGrid;

private

{Private declarations } public

{Public declarations } end;

var

Sprav: TSprav;

implementation uses datm;

{$R *.dfm}

end.

unit fklient; interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, DBGrids, Menus, StdCtrls, ComCtrls,

ToolWin;

type

TKlient = class(TForm) DBGrid1: TDBGrid; PopupMenu1: TPopupMenu; N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem; ToolBar1: TToolBar; ToolButton1: TToolButton; e1: TEdit;

ToolButton2: TToolButton;

ToolButton3: TToolButton;

ToolButton4: TToolButton;

ToolButton5: TToolButton; N4: TMenuItem;

N7: TMenuItem;

procedure N1Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure e1Change(Sender: TObject); procedure ToolButton3Click(Sender: TObject); procedure ToolButton5Click(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose:

Boolean);

procedure N2Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure N7Click(Sender: TObject);

private

{Private declarations } public

{Public declarations } end;

var

Klient: TKlient;

implementation

uses datm,fedkl, fvopr, FvidP; {$R *.dfm}

procedure TKlient.N1Click(Sender: TObject); begin

ind:=0;

edkl.ShowModal;

end;

procedure TKlient.N3Click(Sender: TObject); begin

{---------!!!-----------} dm.temp.Active:=false;

dm.temp.CommandText:='SELECT * FROM klient WHERE (id_kl = '+dm.Kl.Fields[0].AsString+') AND (log_kl = TRUE)';

dm.temp.Active:=true;

if dm.temp.RecordCount>0 then begin

showmessage('Запись используется другим пользователем');

exit; end

else begin

dm.COM.CommandText:='UPDATE KLIENT SET log_kl =TRUE WHERE id_kl = '+dm.Kl.Fields[0].AsString+'';

{dm.COM.CommandText:='Insert into temp (kl) values ('+id_kl+')';}

dm.COM.Execute;

tmp:=dm.temp.Fields[0].AsString;

30

 

end;

 

{---------

!!!-----------

}

ind:=1;

edkl.e1.Text:=dm.Kl.Fields[1].AsString;

edkl.e2.Text:=dm.Kl.Fields[2].AsString;

edkl.e3.Text:=dm.Kl.Fields[3].AsString;

edkl.e4.Text:=dm.Kl.Fields[4].AsString;

edkl.dtp1.Date:=dm.Kl.Fields[5].AsDateTime;

edkl.dtp2.Date:=dm.Kl.Fields[6].AsDateTime;

edkl.ShowModal;

end;

procedure TKlient.e1Change(Sender: TObject); begin

dm.Kl.Active:=false;

dm.Kl.CommandText:='SELECT * FROM KLIENT WHERE fio_kl like "'+e1.Text+'%"';

dm.Kl.Active:=true;

end;

procedure TKlient.ToolButton3Click(Sender: TObject); begin

dm.Kl.Active:=false;

dm.Kl.CommandText:='SELECT * FROM KLIENT WHERE fio_kl like "'+e1.Text+'%" ORDER BY dataR_kl';

dm.Kl.Active:=true;

end;

procedure TKlient.ToolButton5Click(Sender: TObject); begin

dm.Kl.Active:=false;

dm.Kl.CommandText:='SELECT * FROM KLIENT WHERE fio_kl like "'+e1.Text+'%" ORDER BY dataR_kl DESC';

dm.Kl.Active:=true;

end;

procedure TKlient.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin dm.Kl.Active:=false; e1.Text:='';

close;

end;

procedure TKlient.N2Click(Sender: TObject); begin

{---------!!!-----------} dm.temp.Active:=false;

dm.temp.CommandText:='SELECT * FROM klient WHERE (id_kl = '+id_kl+') AND (log_kl = TRUE)';

dm.temp.Active:=true;

if dm.temp.RecordCount>0 then begin

showmessage('Информация о Вас в данный момент редактируется');

exit;

end; {---------!!!-----------}

if application.MessageBox('Вы хотите удалить запись?','Удаление', mb_yesno+mb_iconquestion)=idyes then

begin

dm.COM.CommandText:='DELETE * FROM klient WHERE id_kl = '+dm.Kl.Fields[0].AsString+'';

dm.COM.Execute;

dm.Kl.Requery(); end

end;

procedure TKlient.N5Click(Sender: TObject); begin

{---------!!!-----------} dm.temp.Active:=false;

dm.temp.CommandText:='SELECT * FROM temp WHERE (kl = '+dm.Kl.Fields[0].AsString+')';

dm.temp.Active:=true;

if dm.temp.RecordCount>0 then begin

showmessage('Запись занята другим пользователем'); exit;

end else

begin

dm.COM.CommandText:='Insert into temp (kl) values ('+dm.Kl.Fields[0].AsString+')';

dm.COM.Execute;

tmp:=dm.temp.Fields[0].AsString;

end; {---------!!!-----------}

vopr.ToolButton8.Visible:=false;

end;

procedure TKlient.N7Click(Sender: TObject); begin

if dm.Kl.Fields[7].AsBoolean=false then begin

showmessage('Теория не сдана'); exit;

end;

vidP.ShowModal;

end;

end.

unit fedkl;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ComCtrls;

type

Tedkl = class(TForm) GroupBox1: TGroupBox; e1: TEdit;

Label1: TLabel;

Label2: TLabel; e2: TEdit;

GroupBox2: TGroupBox; e3: TEdit;

e4: TEdit; Label3: TLabel; Label4: TLabel;

dtp1: TDateTimePicker; dtp2: TDateTimePicker; Label5: TLabel; Label6: TLabel; BitBtn1: TBitBtn; BitBtn2: TBitBtn;

procedure FormCloseQuery(Sender: TObject; var CanClose:

Boolean);

procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject);

private

{Private declarations } public

{Public declarations } end;

var

edkl: Tedkl;

implementation uses datm;

{$R *.dfm}

procedure Tedkl.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

dm.COM.CommandText:='UPDATE klient SET log_kl=FALSE WHERE id_kl='+dm.Kl.Fields[0].AsString+'';

dm.COM.Execute;

tmp:='0';

e1.Text:='';

31

Соседние файлы в папке Курсовые работы