Разработка информационно-справочной системы "Характеристика предприятия" Prolog
CODE=12050
/* **************************
* КУРСОВАЯ РАБОТА *
* *
* Косарева Вячеслава *
* *
**************************
*/
domains
z,i,n,n1,ko,ob,pl=integer
na,j=symbol
database -svod1
svod1(n,j,ko,ob,pl)
database -lolo
lolo(n,na,i,ob,pl)
database -kuku
kuku(n,na,ko,i,pl)
database
svod(n,na,ko,ob,pl)
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("slava.dat"),
consult("slava.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("Введите занимаемую площадь :"),readint(T),nl,
N1=K,NA1=O,KO1=I,OB1=Y,PL1=T,
assertz(svod(N1,NA1,KO1,OB1,PL1)),
removewindow,
fail.
/*Процедура просмотра-добавления*/
process(8):-
makewindow(1,2,7,"Просмотр-добавление",0,0,25,80),
nl,
write("Введите номер записи:"),readint(A),nl,nl,
svod(N,NA,KO,OB,PL),
A=N,
write("Номер записи :"),write(A),nl,
write("Название предприятия:"),write(NA),nl,
write("Количество рабочих :"),write(KO),nl,
write("Объем продукции :"),write(OB),nl,
write("Занимаемая площадь :"),write(PL),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("Введите занимаемую площадь :"),readint(G),nl,
NA1=F,KO1=Y,OB1=J,PL1=G,
assertz(svod(N1,NA1,KO1,OB1,PL1)),
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,NA,KO,OB,PL),
write("Номер записи :"),write(N),nl,
write("Название предприятия:"),write(NA),nl,
write("Количество рабочих :"),write(KO),nl,
write("Объем продукции :"),write(OB),nl,
write("Занимаемая площадь :"),write(PL),nl,
nl,
write("Введите название предприятия:"),readln(NA1),nl,
write("Введите количество рабочих :"),readint(KO1),nl,
write("Введите объем продукции :"),readint(OB1),nl,
write("Введите занимаемую площадь :"),readint(PL1),nl,
X1=X,
retract(svod(X,NA,KO,OB,PL)),
assert(svod(X1,NA1,KO1,OB1,PL1)),
!,
removewindow.
/*Процедура удаления записей из базы данных*/
process(2):-
makewindow(1,2,7,"Удаление записей",0,0,25,80),
nl,
select(N),
X=N,
svod(X,NA,KO,OB,PL),
retract(svod(X,NA,KO,OB,PL)),!,
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,NA,KO,OB,PL),
cursor(Z,_),
cursor(Z,0),write(N),
cursor(Z,8),write(NA),
cursor(Z,27),write(KO),
cursor(Z,42),write(OB),
cursor(Z,54),write(PL),
cursor(Z,66),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 - База будет загружена из файла slava.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 - База будет записана в файл slava.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,NA,KO,OB,PL),
S=NA,
S=X,
N1=N,KO1=KO,OB1=OB,PL1=PL,
assert(svod1(N1,S,KO1,OB1,PL1)),
fail.
procedure(1):-
write("База создана"),nl,
write("__________________________________________________________________!"),
write(" ХАРАКТЕРИСТИКА ПРЕДПРИЯТИЯ "),
nl,
write("------------------------------------------------------------------!"),
nl,
write("!номер! наименование ! количество ! объем ! занимаемая !"),
nl,
write("! ! предприятия ! рабочих ! продукции ! площадь "),
nl,
write("-------------------------------------------------------------------"),
nl,
svod1(N,S,KO,OB,PL),
cursor(Z,_),
cursor(Z,0),write(N),
cursor(Z,8),write(S),
cursor(Z,27),write(KO),
cursor(Z,42),write(OB),
cursor(Z,54),write(PL),
cursor(Z,66),write("!"),
nl,
fail.
procedure(1):-
write("-------------------------------------------------------------------"),
save("not.dat",svod1),
nl,
write("База сохранена в файле not.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,NA,KO,OB,PL),
S=KO,
S>=X,
N1=N,NA1=NA,OB1=OB,PL1=PL,
assert(lolo(N1,NA1,S,OB1,PL1)),
fail.
procedure(2):-
write("База создана"),nl,
write("__________________________________________________________________!"),
write(" ХАРАКТЕРИСТИКА ПРЕДПРИЯТИЯ "),
nl,
write("------------------------------------------------------------------!"),
nl,
write("!номер! наименование ! количество ! объем ! занимаемая !"),
nl,
write("! ! предприятия ! рабочих ! продукции ! площадь "),
nl,
write("-------------------------------------------------------------------"),
nl,
lolo(N,NA,S,OB,PL),
cursor(Z,_),
cursor(Z,0),write(N),
cursor(Z,8),write(NA),
cursor(Z,27),write(S),
cursor(Z,42),write(OB),
cursor(Z,54),write(PL),
cursor(Z,66),write("!"),
nl,
fail.
procedure(2):-
write("-----------------------------------------------------------------------------"),
save("not1.dat",lolo),
nl,
write("База сохранена в файле not1.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,NA,KO,OB,PL),
S=OB,
S>=X,
N1=N,NA1=NA,KO1=KO,PL1=PL,
assert(kuku(N1,NA1,KO1,S,PL1)),
fail.
procedure(3):-
write("База создана"),nl,
write("__________________________________________________________________!"),
write(" ХАРАКТЕРИСТИКА ПРЕДПРИЯТИЯ "),
nl,
write("------------------------------------------------------------------!"),
nl,
write("!номер! наименование ! количество ! объем ! занимаемая !"),
nl,
write("! ! предприятия ! рабочих ! продукции ! площадь "),
nl,
write("-------------------------------------------------------------------"),
nl,
kuku(N,NA,KO,S,PL),
cursor(Z,_),
cursor(Z,0),write(N),
cursor(Z,8),write(NA),
cursor(Z,27),write(KO),
cursor(Z,42),write(S),
cursor(Z,54),write(PL),
cursor(Z,66),write("!"),
nl,
fail.
procedure(3):-
write("-------------------------------------------------------------------"),
save("not2.dat",kuku),
nl,
write("База сохранена в файле not.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("slava.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("slava.dat"),
consult("slava.dat"),
write("Все в порядке"),
beep,
!.
lod(2):-
write("Файла slava.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("==>"),
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("Введите занимаемую площадь:"),
readint(W),
svod(Z,_,_,_,W),
N=Z.