Разработка информационно справочной системы Водительское удостоверение
CODE=12050
/* **************************
* КУРСОВАЯ РАБОТА *
* *
* Федорова Вадима *
* *
**************************
*/
domains
z,i,n,n1,n,no,dat,datv=integer
gor,fio,se,j=symbol
database
-svod1
svod1(n,j,dat,gor,se,no,datv)
database
-lolo
lolo(n,fio,dat,gor,j,no,datv)
database
-kuku
kuku(n,fio,dat,gor,se,i,datv)
database-svod
svod(n,fio,dat,gor,se,no,datv)
predicates
start
patch
load
select(i)
sel(i,i)
process(i)
procedure(i)
sve(i)
lod(i)
repeat
goal
start.
clauses
/*Процедура
создания основного меню и загрузки базы данных*/
start:-
makewindow(1,2,7,"ВОДИТЕЛЬСКОЕ УДОСТОВЕРЕНИЕ",0,0,25,80),
clearwindow,
load,
patch.
/*Процедура
управления основным меню*/
patch:-
repeat,
cursor(7,0),
write(" 0 - О пpогpамме... "),nl,
write(" 1 - коррекция
данных"),nl,
write(" 2 - удаление данных"),nl,
write(" 3 - просмотр
базы"),nl,
write(" 4 - загрузка
базы"),nl,
write(" 5 - сохранение
базы"),nl,
write(" 6 - создание новой
базы"),nl,
write(" 7 - ввод новых
данных"),nl,
write(" 8 -
просмотр-добавление"),nl,
write(" 9 - выход из программы"),nl,
write(" =>"),
readint(Choice),
Choice >= 0,
Choice < 10,
clearwindow,
process(Choice),
clearwindow,
Choice = 9,
retractall(_),
removewindow.
/*Процедура
поиска и загрузки файла содержащего базу данных*/
load:-
existfile("mak.dat"),
consult("mak.dat"),
cursor(1,2),
write("База загружена").
load:-
cursor(1,2),
write("Нет базы на
диске").
/*Пpоцедуpа
ввода новых данных*/
process(7):-
makewindow(1,2,7,"Ввод новых
данных",0,0,25,80),
nl,
write("Введите порядковый номер :"),readint(K),nl,
write("Введите фамилию,имя и
отчество владельца :"),readln(O),nl,
write("Введите число,месяц и
год рождения:"),readint(I),nl,
write("Введите город
рождения:"),readln(Y),nl,
write("Введите серию
удостоверения:"),readln(T),nl,
write("Введите номер
удостоверения:"),readint(V),nl,
write("Введите дату
выдачи(число,месяц,год):"),readint(A),nl,
N1=K,FIO1=O,DAT1=I,GOR1=Y,SE1=T,NO1=V,DATV1=A,
assertz(svod(N1,FIO1,DAT1,GOR1,SE1,NO1,DATV1)),
removewindow,
fail.
/*Процедура
просмотра-добавления*/
process(8):-
makewindow(1,2,7,"Просмотр-добавление",0,0,25,80),
nl,
write("Введите номер
записи:"),readint(A),nl,nl,
svod(N,FIO,DAT,GOR,SE,NO,DATV),
A=N,
write("Номер записи :"),write(A),nl,
write("Фамилия,имя,отчество
владельца:"),write(FIO),nl,
write("Число,месяц,год рождения:"),write(DAT),nl,
write("Город
рождения:"),write(GOR),nl,
write("Серию
удостоверения:"),write(SE),nl,
write("Номер
удостоверения:"),write(NO),nl,
write("Дату
выдачи(число,месяц,год):"),write(DATV),nl,nl,nl,nl,nl,
write("Нажмите на любую клавишу"),
readchar(_),
removewindow,
!.
process(8):-
write("Повторите введенный номер
записи и продолжайте ввод данных"),nl,nl,nl,
write("Этого номера записи нет в
базе."),
write("Введите номер:"),
readint(A),nl,
A=N1,
write("Введите фамилию,имя и
отчество владельца :"),readln(F),nl,
write("Введите число,месяц и
год рождения:"),readint(Y),nl,
write("Введите город
рождения:"),readln(J),nl,
write("Введите серию
удостоверения:"),readln(G),nl,
write("Введите номер
удостоверения:"),readint(E),nl,
write("Введите дату
выдачи(число,месяц,год):"),readint(Z),nl,
FIO1=F,DAT1=Y,GOR1=J,SE1=G,NO1=E,DATV1=Z,
assertz(svod(N1,FIO1,DAT1,GOR1,SE1,NO1,DATV1)),
removewindow,
fail.
/*Пpоцедуpа
вывода данных о пpогpамме*/
process(0):-
makewindow(1,2,7,"О
пpогpамме...",0,0,25,80),
write(" Инфоpмационно-спpавочная
система"),nl,nl,
write(" о водительском
удостовеении "),nl,nl,
write(" Язык-TURBO-PROLOG
v.2.0. "),nl,nl,
write(" автоp:Федoров В. "),nl,nl,
write(" МИРЭА, гp.ИТ-1-94 (с) 1995 г. "),nl,nl,nl,nl,
write("Нажмите на любую
клавишу"),
readchar(_),
removewindow.
/*Процедура
изменения содержимого записей базы данных*/
process(1):-
makewindow(1,2,7,"Коppекция
данных",0,0,25,80),
nl,
select(N),
X=N,
svod(X,FIO,DAT,GOR,SE,NO,DATV),
write("Номер записи :"),write(N),nl,
write("Фамилия,имя,отчество
владельца:"),write(FIO),nl,
write("Число,месяц,год
рождения:"),write(DAT),nl,
write("Город
рождения:"),write(GOR),nl,
write("Серию удостоверения:"),write(SE),nl,
write("Номер
удостоверения:"),write(NO),nl,
write("Дату
выдачи(число,месяц,год):"),write(DATV),nl,nl,nl,nl,nl,
nl,
write("Введите фамилию,имя и
отчество владельца :"),readln(FIO1),nl,
write("Введите число,месяц и
год рождения:"),readint(DAT1),nl,
write("Введите город
рождения:"),readln(GOR1),nl,
write("Введите серию
удостоверения:"),readln(SE1),nl,
write("Введите номер удостоверения:"),readint(NO1),nl,
write("Введите дату
выдачи(число,месяц,год):"),readint(DATV1),nl,
X1=X,
retract(svod(X,FIO,DAT,GOR,SE,NO,DATV)),
assert(svod(X1,FIO1,DAT1,GOR1,SE1,NO1,DATV1)),
!,
removewindow.
/*Процедура
удаления записей из базы данных*/
process(2):-
makewindow(1,2,7,"Удаление
записей",0,0,25,80),
nl,
select(N),
X=N,
svod(X,FIO,DAT,GOR,SE,NO,DATV),
retract(svod(X,FIO,DAT,GOR,SE,NO,DATV)),!,
removewindow.
/*Процедура
просмотра содержимого базы данных*/
process(3):-
makewindow(1,2,7,"Просмотp
базы",0,0,25,80),
nl,
write("____________________________________________________________________________!"),
write(" ВОДИТЕЛЬСКОЕ УДОСТОВЕРЕНИЕ "),
nl,
write("----------------------------------------------------------------------------!"),
nl,
write("!номер! Фамилия И.О. ! Дата,место рождения ! !
! Дата выдачи !"),
nl,
write("! ! !число,месяц,год! город !серия!номер!число,месяц,год!"),
nl,
write("-----------------------------------------------------------------------------"),
nl,
svod(N,FIO,DAT,GOR,SE,NO,DATV),
cursor(Z,_),
cursor(Z,0),write(N),
cursor(Z,7),write(FIO),
cursor(Z,25),write(DAT),
cursor(Z,41),write(GOR),
cursor(Z,49),write(SE),
cursor(Z,55),write(NO),
cursor(Z,61),write(DATV),
cursor(Z,76),write("!"),
nl,
fail.
process(3):-
write("-----------------------------------------------------------------------------"),
nl,
write("Нажмите на любую
клавишу"),
readchar(_),
removewindow.
/*Процедура
загрузки в память базы данных*/
process(4):-
nl,
makewindow(2,15,4,"Загрузка",5,5,20,70),
write("1 - База будет
загружена из указанного файла"),nl,
write("2 - База будет загружена из файла mak.dat"),nl,
write("3 - Выход в основное
меню"),nl,
write("==>"),
readint(C),
C>0,C<4,
lod(C),
!,
removewindow.
/*Процедура
сохранения базы данных*/
process(5):-
nl,
makewindow(2,15,4,"Запись",5,5,20,70),
write("1 - База будет
записана в указанный файл"),nl,
write("2 - База будет
записана в файл mak.dat"),nl,
write("3 - Выход в основное меню"),nl,
write("==>"),
readint(I),
I>0,I<4,
sve(I),!,
removewindow.
/*Процедура выбора создания новой базы*/
process(6):-
nl,
makewindow(3,2,7,"Создание новой базы",0,0,25,80),
write("1 - База будет создана
по фамилии,имени и отчеству владельца"),nl,
write("2 - База будет создана
по серии удостоверения"),nl,
write("3 - База будет создана
по номеру удостоверения"),nl,
write("4 - Выход в основное
меню"),nl,
write("==>"),
readint(O),
O>0,O<5,
procedure(O),
removewindow.
process(_).
/*Процедура
создания новой базы данных и ее сохранения*/
procedure(1):-
makewindow(1,2,7,"Создание
новой базы по фамилии,имени и отчеству владельца",0,0,25,80),
nl,
cursor(7,10),
retractall(_,svod1),
nl,
write("Если вы хотите узнать
данные о владельце удостоверения, то"),
nl,
write("Введите фамилию,имя и
отчество владельца:"),
readln(X),
svod(N,FIO,DAT,GOR,SE,NO,DATV),
S=FIO,
S=X,
N1=N,DAT1=DAT,GOR1=GOR,SE1=SE,NO1=NO,DATV1=DATV,
assert(svod1(N1,S,DAT1,GOR1,SE1,NO1,DATV1)),
fail.
procedure(1):-
write("База
создана"),nl,
write("____________________________________________________________________________!"),
write(" ВОДИТЕЛЬСКОЕ УДОСТОВЕРЕНИЕ "),
nl,
write("----------------------------------------------------------------------------!"),
nl,
write("!номер! Фамилия И.О. ! Дата,место рождения ! !
! Дата выдачи !"),
nl,
write("! ! !число,месяц,год! город !серия!номер!число,месяц,год!"),
nl,
write("-----------------------------------------------------------------------------"),
nl,
svod(N,S,DAT,GOR,SE,NO,DATV),
cursor(Z,_),
cursor(Z,0),write(N),
cursor(Z,7),write(S),
cursor(Z,25),write(DAT),
cursor(Z,41),write(GOR),
cursor(Z,49),write(SE),
cursor(Z,55),write(NO),
cursor(Z,61),write(DATV),
cursor(Z,76),write("!"),
nl,
fail.
procedure(1):-
write("-----------------------------------------------------------------------------"),
save("nov.dat",svod1),
nl,
write("База сохранена в файле
nov.dat"),
nl,
write("Нажмите любую
клавишу"),
readchar(_),
removewindow,
!.
procedure(1):-
write("-----------------------------------------------------------------------------"),
nl,
write("Невозможно сохранить
созданную базу"),
nl,
write("Нажмите любую
клавишу"),
readchar(_),
makewindow(1,2,7,"ВОДИТЕЛЬСКОЕ УДОСТОВЕРЕНИЕ",0,0,25,80).
procedure(2):-
makewindow(1,2,7,"Создание
новой базы по серии удостоверения",0,0,25,80),
nl,
cursor(7,10),
retractall(_,lolo),
nl,
write("Если вы хотите узнать данные
о водительском удостоверении, то"),nl,
write("Введите серию
удостоверения:"),
readln(X),
svod(N,FIO,DAT,GOR,SE,NO,DATV),
S=SE,
S=X,
N1=N,FIO1=FIO,DAT1=DAT,GOR1=GOR,NO1=NO,DATV1=DATV,
assert(lolo(N1,FIO1,DAT1,GOR1,S,NO1,DATV1)),
fail.
procedure(2):-
write("База
создана"),nl,
write("____________________________________________________________________________!"),
write(" ВОДИТЕЛЬСКОЕ УДОСТОВЕРЕНИЕ "),
nl,
write("----------------------------------------------------------------------------!"),
nl,
write("!номер! Фамилия И.О. ! Дата,место рождения
! ! ! Дата выдачи
!"),
nl,
write("! ! !число,месяц,год! город
!серия!номер!число,месяц,год!"),
nl,
write("-----------------------------------------------------------------------------"),
nl,
svod(N,FIO,DAT,GOR,S,NO,DATV),
cursor(Z,_),
cursor(Z,0),write(N),
cursor(Z,7),write(FIO),
cursor(Z,25),write(DAT),
cursor(Z,41),write(GOR),
cursor(Z,49),write(S),
cursor(Z,55),write(NO),
cursor(Z,61),write(DATV),
cursor(Z,76),write("!"),
nl,
fail.
procedure(2):-
write("-----------------------------------------------------------------------------"),
save("nov1.dat",lolo),
nl,
write("База сохранена в файле
nov1.dat"),
nl,
write("Нажмите любую клавишу"),
readchar(_),
removewindow,
!.
procedure(2):-
write("-----------------------------------------------------------------------------"),
nl,
write("Невозможно сохранить
созданную базу"),
nl,
write("Нажмите любую
клавишу"),
readchar(_),
makewindow(1,2,7,"ВОДИТЕЛЬСКОЕ УДОСТОВЕРЕНИЕ",0,0,25,80).
procedure(3):-
makewindow(1,2,7,"Создание
базы данных по номеру удостоверения",0,0,25,80),
nl,
cursor(7,10),
retractall(_,kuku),
nl,
write("Если вы хотите узнать
данные о водительском удостоверении , то"),
nl,
write("Введите номер
удостоверения:"),
readint(X),
svod(N,FIO,DAT,GOR,SE,NO,DATV),
S=NO,
S=X,
N1=N,FIO1=FIO,DAT1=DAT,GOR1=GOR,SE1=SE,DATV1=DATV,
assert(kuku(N1,FIO1,DAT1,GOR1,SE1,S,DATV1)),
fail.
procedure(3):-
write("База
создана"),nl,
write("____________________________________________________________________________!"),
write(" ВОДИТЕЛЬСКОЕ УДОСТОВЕРЕНИЕ "),
nl,
write("----------------------------------------------------------------------------!"),
nl,
write("!номер! Фамилия И.О. ! Дата,место рождения ! !
! Дата выдачи !"),
nl,
write("! ! !число,месяц,год! город
!серия!номер!число,месяц,год!"),
nl,
write("-----------------------------------------------------------------------------"),
nl,
svod(N,FIO,DAT,GOR,SE,S,DATV),
cursor(Z,_),
cursor(Z,0),write(N),
cursor(Z,7),write(FIO),
cursor(Z,25),write(DAT),
cursor(Z,41),write(GOR),
cursor(Z,49),write(SE),
cursor(Z,55),write(S),
cursor(Z,61),write(DATV),
cursor(Z,76),write("!"),
nl,
fail.
procedure(3):-
write("-----------------------------------------------------------------------------"),
save("nov2.dat",kuku),
nl,
write("База сохранена в файле
nov2.dat"),
nl,
write("Нажмите любую
клавишу"),
readchar(_),
removewindow,
!.
procedure(3):-
write("-----------------------------------------------------------------------------"),
nl,
write("Невозможно сохранить
созданную базу"),
nl,
write("Нажмите любую
клавишу"),
readchar(_),
makewindow(1,2,7,"ВОДИТЕЛЬСКОЕ УДОСТОВЕРЕНИЕ",0,0,25,80).
/*Процедура
записи на диск*/
sve(1):-
write("Введите имя файла
:"),
readln(N),
save(N),
write("Все в порядке"),
beep,
!.
sve(1):-
write("Ошибка обмена, нажмите
любую клавишу"),
readchar(_).
sve(2):-
save("mak.dat").
sve(3).
/*Процедура
чтения с диска*/
lod(1):-
retractall(_),
write("Введите имя файла
:"),
readln(N),
existfile(N),
consult(N),
write("Все в порядке"),
beep,
!.
lod(1):-
nl,
write("Данного файла нет на
диске"),nl,
write("Нажмите любую
клавишу"),
readchar(_).
lod(2):-
retractall(_),
existfile("mak.dat"),
consult("mak.dat"),
write("Все в порядке"),
beep,
!.
lod(2):-
write("Файла mak.dat нет на
диске"),nl,
write("нажмите любую
клавишу"),
readchar(_).
lod(3).
repeat.
repeat:- repeat.
/*Выбор
записи*/
select(N):-
nl,
write("1 - известен номер
записи"),nl,
write("2 - известна
фамилия,има,отчество владельца"),nl,
write("3 - известно число,месяц,год
рождения"),nl,
write("4 - известен город
рождения"),nl,
write("5 - известна серия
удостоверения"),nl,
write("6 - известен номер
удостоверения"),nl,
write("7 - известна дата
выдачи(число,месяц,год)"),nl,
write("==>"),
readint(X),
sel(X,N).
sel(1,N):-
nl,
write("Введите номер записи :"),
readint(N),
svod(M,_,_,_,_,_,_),
M=N.
sel(1,N):-
N=0.
sel(2,N):-
nl,
write("Введите
фамилию,имя,отчество владельца:"),
readln(L),
svod(Z,L,_,_,_,_,_),
N=Z.
sel(2,N):-
N=0.
sel(3,N):-
nl,
write("Введите число,месяц,год
рождения: "),
readint(F),
svod(Z,_,F,_,_,_,_),
N=Z.
sel(3,N):-
N=0.
sel(4,N):-
nl,
write("Введите город
рождения:"),
readln(Q),
svod(Z,_,_,Q,_,_,_),
N=Z.
sel(4,N):-
N=0.
sel(5,N):-
nl,
write("Введите серию
удостоверения:"),
readln(W),
svod(Z,_,_,_,W,_,_),
N=Z.
sel(5,N):-
N=0.
sel(6,N):-
nl,
write("Введите номер
удостоверения:"),
readint(E),
svod(Z,_,_,_,_,E,_),
N=Z.
sel(6,N):-
N=0.
sel(7,N):-
nl,
write("Введите дату
выдачи(число,месяц,год):"),
readint(A),
svod(Z,_,_,_,_,_,A),
N=Z.
sel(7,N):-
N=0.
|