CODE=12050
/* **************************
* КУРСОВАЯ РАБОТА *
* *
* Котова Владимира *
* *
**************************
*/
domains
z,i,n,n1,kol,tkol,tel,faks=integer
prod,adr,j=symbol
database-svod1
svod1(n,j,kol,tkol,adr,tel,faks)
database-lolo
lolo(n,prod,kol,i,adr,tel,faks)
database-kuku
kuku(n,prod,kol,tkol,j,i,i)
database-svod
svod(n,prod,kol,tkol,adr,tel,faks)
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
clearwindow,
process(Choice),
clearwindow,
Choice = 9,
retractall(_),
removewindow.
/*Процедура поиска и загрузки файла содержащего базуданных*/
load:-
existfile(«kot.dat»),
consult(«kot.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(«Введите требуемое количество:»),readint(Y),nl,
write(«Введите адрес получателя :»),readln(T),nl,
write(«Введите телефон получателя :»),readint(V),nl,
write(«Введите факс получателя :»),readint(A),nl,
N1=K,PROD1=O,KOL1=I,TKOL1=Y,ADR1=T,TEL1=V,FAKS1=A,
assertz(svod(N1,PROD1,KOL1,TKOL1,ADR1,TEL1,FAKS1)),
removewindow,
fail.
/*Процедура просмотра-добавления*/
process(8):-
makewindow(1,2,7,«Просмотр-добавление»,0,0,25,80),
nl,
write(«Введите номер записи:»),readint(A),nl,nl,
svod(N,PROD,KOL,TKOL,ADR,TEL,FAKS),
A=N,
write("Номерзаписи :"),write(A),nl,
write(«Наименованиетовара :»),write(PROD),nl,
write(«Количество на складе :»),write(KOL),nl,
write(«Требуемое количество :»),write(TKOL),nl,
write(«Адрес получателя :»),write(ADR),nl,
write(«Телефон получателя :»),write(TEL),nl,
write(«Факс получателя :»),nl,nl,nl,nl,nl,
write(«Нажмите на любую клавишу»),
readchar(_),
removewindow,
!.
process(8):-
write(«Этого номера записи нет в базе.»),
write(«Повторите введенный номер записи и продолжайте вводданных»),nl,nl,nl,
write("Введитеномер:"),
readint(A),nl,
A=N1,
write(«Введите наименование товара :»),readln(F),nl,
write(«Введите количество на складе :»),readint(Y),nl,
write(«Введите требуемое количество :»),readint(J),nl,
write(«Введите адрес получателя :»),readln(G),nl,
write(«Введите телефон получателя :»),readint(E),nl,
write(«Введите факс получателя :»),readint(Z),nl,
PROD1=F,KOL1=Y,TKOL1=J,ADR1=G,TEL1=E,FAKS1=Z,
assertz(svod(N1,PROD1,KOL1,TKOL1,ADR1,TEL1,FAKS1)),
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:КотовВ.В. "),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,PROD,KOL,TKOL,ADR,TEL,FAKS),
write("Номерзаписи :"),write(N),nl,
write(«Наименованиетовара :»),write(PROD),nl,
write(«Количество товара наскладе:»),write(KOL),nl,
write(«Требуемое количество :»),write(TKOL),nl,
write(«Адрес получателя :»),write(ADR),nl,
write(«Телефон получателя :»),write(TEL),nl,
write(«Факс получателя :»),write(FAKS),nl,
nl,
write(«Введите наименованиетовара :»),readln(PROD1),
write(«Введите количество на складе:»),readint(KOL1),
write(«Введите требуемое количество:»),readint(TKOL1),
write(«Введите адрес получателя :»),readln(ADR1),
write(«Введите телефон получателя :»),readint(TEL1),
write(«Введите факс получателя :»),readint(FAKS1),
X1=X,
retract(svod(X,PROD,KOL,TKOL,ADR,TEL,FAKS)),
assert(svod(X1,PROD1,KOL1,TKOL1,ADR1,TEL1,FAKS1)),
!,
removewindow.
/*Процедура удаления записей из базы данных*/
process(2):-
makewindow(1,2,7,"Удалениезаписей",0,0,25,80),
nl,
select(N),
X=N,
svod(X,PROD,KOL,TKOL,ADR,TEL,FAKS),
retract(svod(X,PROD,KOL,TKOL,ADR,TEL,FAKS)),!,
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,PROD,KOL,TKOL,ADR,TEL,FAKS),
cursor(Z,_),
cursor(Z,0),write(N),
cursor(Z,7),write(PROD),
cursor(Z,18),write(KOL),
cursor(Z,23),write(TKOL),
cursor(Z,33),write(ADR),
cursor(Z,55),write(TEL),
cursor(Z,67),write(FAKS),
cursor(Z,77),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 — База будет загружена из файла kot.dat»),nl,
write(«3 — Выход в основное меню»),nl,
write("==>"),
readint(C),
C>0,C
lod(C),
!,
removewindow.
/*Процедура сохранения базы данных*/
process(5):-
nl,
makewindow(2,15,4,«Запись»,5,5,20,70),
write(«1 — База будет записана в указанный файл»),nl,
write(«2 — База будет записана в файл kot.dat»),nl,
write(«3 — Выход в основное меню»),nl,
write("==>"),
readint(I),
I>0,I
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
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,PROD,KOL,TKOL,ADR,TEL,FAKS),
S=PROD,
S=X,
N1=N,KOL1=KOL,TKOL1=TKOL,ADR1=ADR,TEL1=TEL,FAKS1=FAKS,
assert(svod1(N1,S,KOL1,TKOL1,ADR,TEL,FAKS)),
fail.
procedure(1):-
write("Базасоздана"),nl,
write("----------------------------------------------------------------------------!"),
nl,
write("! номер! название! колна! треб ! получатель !"),
nl,
write("! ! тавара! складе! кол-во! адрес ! телефон ! факс !"),
nl,
write("-----------------------------------------------------------------------------"),
nl,
svod(N,S,KOL,TKOL,ADR,TEL,FAKS),
N1=N,
cursor(Z,_),
cursor(Z,0),write(N1),
cursor(Z,7),write(S),
cursor(Z,18),write(KOL),
cursor(Z,23),write(TKOL),
cursor(Z,33),write(ADR),
cursor(Z,55),write(TEL),
cursor(Z,67),write(FAKS),
cursor(Z,77),write("!"),
nl,
fail.
procedure(1):-
write("-----------------------------------------------------------------------------"),
save(«now.dat»,svod1),
nl,
write(«База сохранена в файлеnow.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(«Введите начальное значение требуемого количества:»),
readint(X),
svod(N,PROD,KOL,TKOL,ADR,TEL,FAKS),
S=TKOL,
S>=X,
N1=N,PROD1=PROD,KOL1=KOL,ADR1=ADR,TEL1=TEL,FAKS1=FAKS,
assert(lolo(N1,PROD1,KOL1,S,ADR1,TEL1,FAKS1)),
fail.
procedure(2):-
write("Базасоздана"),nl,
write("-----------------------------------------------------------------------------"),
nl,
write("! номер! название! колна! треб ! получатель !"),
nl,
write("! ! тавара! складе! кол-во! адрес ! телефон ! факс !"),
nl,
write("-----------------------------------------------------------------------------"),
nl,
lolo(N,PROD,KOL,S,ADR,TEL,FAKS),
N1=N,
cursor(Z,_),
cursor(Z,0),write(N1),
cursor(Z,7),write(PROD),
cursor(Z,18),write(KOL),
cursor(Z,23),write(S),
cursor(Z,33),write(ADR),
cursor(Z,55),write(TEL),
cursor(Z,67),write(FAKS),
cursor(Z,77),write("!"),
nl,
fail.
procedure(2):-
write("-----------------------------------------------------------------------------"),
save(«now1.dat»,lolo),
nl,
write(«База сохранена в файлеnow1.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(«Введите данные получателя:»),
readln(X),
readint(Y),
readint(Z),
svod(N,PROD,KOL,TKOL,ADR,TEL,FAKS),
S=ADR,
D=TEL,
C=FAKS,
S=X,
D=Y,
C=Z,
N1=N,PROD1=PROD,KOL1=KOL,TKOL1=TKOL,
assert(kuku(N1,PROD1,KOL1,TKOL1,S,D,C)),
fail.
procedure(3):-
write(«База создана»),nl,
write("----------------------------------------------------------------------------!"),
nl,
write("! номер! название! колна! треб ! получатель !"),
nl,
write("! ! тавара! складе! кол-во! адрес ! телефон ! факс !"),
nl,
write("-----------------------------------------------------------------------------"),
nl,
kuku(N,PROD,KOL,TKOL,S,D,C),
N1=N,
cursor(Z,_),
cursor(Z,0),write(N1),
cursor(Z,7),write(PROD),
cursor(Z,18),write(KOL),
cursor(Z,23),write(TKOL),
cursor(Z,33),write(S),
cursor(Z,55),write(D),
cursor(Z,67),write(C),
cursor(Z,77),write("!"),
nl,
fail.
procedure(3):-
write("-----------------------------------------------------------------------------"),
save(«now2.dat»,svod1),
nl,
write(«База сохранена в файлеnow2.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(«kot.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(«kot.dat»),
consult(«kot.dat»),
write(«Все в порядке»),
beep,
!.
lod(2):-
write(«Файла kot.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(“Введите год выпуска:»),
readint(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.