Скачайте в формате документа WORD

Разработка информационно-справочной системы "Овощная база" Prolog

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 < 10,

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<4,

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<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,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.