Инженерия знаний. Создание системы "Посредник", заключающей договоры на поставку стройматериалов

Реферат - Компьютеры, программирование

Другие рефераты по предмету Компьютеры, программирование

контрактов */

 

print_contract:-

makewindow(16,31,26,"Все возможные контракты",0,0,25,80),

nl,nl,

 

покупатель(N,Firm,_,_,_,_,_),

checkcontr(N),

prn(N,Firm),

 

fail.

 

print_contract:-

retractall(_,contract),

removewindow.

 

prn(N,Firm):-

cursor(1,1),

 

write("Для фирмы: ",Firm),

nl,

write("|=================================================================|"),nl,

write("| | | | | Мин . | | | |"),nl,

write("|No| Фирма | Товар |Производитель| партия | Кол-во |Цена|Д|"),nl,

write("|=================================================================|"),nl,

contract(N,N1),

поставщик(N1,Firm1,Tov1,Proizv1,Min1,Kol1,Price1,Srok1),

cursor(Z,_),

cursor(Z,1),write(N1),

cursor(Z,3),write("",Firm1),

cursor(Z,16),write("",Tov1),

cursor(Z,36),write("",Proizv1),

cursor(Z,50),write("",Min1),

cursor(Z,59),write("",Kol1),

cursor(Z,68),write("",Price1),

cursor(Z,73),write("",Srok1),

cursor(Z,0),write(""),

cursor(Z,76),write(""),

nl,

покупатель(N,_,_,_,Part,_,_),

retract(contract(N,N1)),

Cs=Part*Price1,

form_best(N,N1,Cs,Srok1),

form_best2(N),

fail.

 

 

prn(N,_):-

write("|===================================================================|"),

nl,

best2(N,Np,_,_),

поставщик(Np,Firm,_,_,_,_,_,_),nl,

write("Наиболее предпочтительный"),nl,

write("контракт с фирмой: ",Firm),nl,

cursor(22,26),

write("Нажмите на любую клавишу"),

readchar(_),

clearwindow,!.

 

/* Проверяет, есть ли контракты */

 

checkcontr(N):-contract(N,_).

 

/* Процедура формирования наиболее предпочтительного контракта */

 

form_best(N,Np,S,Srok):- Na=N,

best(Na,Np1,S1,Srok1),S=S1,

assertz(best(Na,Np,S,Srok)),!.

 

 

form_best(N,Np,S,Srok):- Na=N,

best(Na,Np1,S1,Srok1),S>S1,fb1(Na,Np,S,Srok),

assertz(best(Na,Np,S,Srok)),!.

form_best(_,_,_,_).

 

fb1(N,_,_,_):-

retract(best(N,_,_,_)),fail.

fb1(_,_,_,_).

 

 

 

 

form_best2(N):-

best(N,Np,S,Srok),f_b2(N,Np,S,Srok),fail.

form_best2(_).

 

f_b2(N,Np,S,Srok):- Na=N,

best2(Na,Np1,_,Srok1),Srok1>Srok,

fb2(Na,Np,S,Srok),

assertz(best2(Na,Np,S,Srok)),!.

f_b2(_,_,_,_).

 

fb2(N,_,_,_):- retract(best2(N,_,_,_)),fail.

fb2(_,_,_,_).

 

 

 

/* Процедуры заключения договоров в интерактивном режиме */

 

interact(1):-

makewindow(9,26,48,"Поиск поставщика",0,0,25,80),

nl,

write(" Введите название фирмы : "),readln(F),

write(" Введите название товара : "),readln(T),

write(" Введите производителя : "),readln(P),

write(" Введите необходимую партию : "),readInt(M),

write(" Введите цену за единицу товара : "),readreal(Pr),

write(" Введите сроки поставки : "),readInt(S),nl,

N=0,

Firm=F,Tov=T,Proizv=P,

Part=M,

Price=Pr,Srok=S,

assertz(покупатель(N,Firm,Tov,Proizv,Part,Price,Srok)),

removewindow,

поставщик(N1,_,Tov,Proizv1,Min1,Kol1,Price1,Srok1),

cmp_name(Proizv,Proizv1),

Part>=Min1,Part=Srok1,

assert(flag(2)),

assertz(contract(N,N1)),

assert(best(N,0,0,0)),

fail.

 

 

interact(1):-flag(2),print_contract,

retract(покупатель(0,Firm,Tov,Proizv,Part,Price,Srok)),

retract(flag(2)),!.

 

interact(1):-

warning(N),

покупатель(0,Firm,Tov,Proizv,Part,Price,Srok),

assertz(покупатель(N,Firm,Tov,Proizv,Part,Price,Srok)),

ins_sup(Proizv),

retract(покупатель(0,Firm,Tov,Proizv,Part,Price,Srok)),

assert(flag(1)),

!.

interact(1):- retract(покупатель(0,Firm,Tov,Proizv,Part,Price,Srok)),!.

 

 

interact(2):-

makewindow(9,26,48,"Поиск покупателя",0,0,25,80),

nl,

write(" Введите название фирмы : "),readln(F),

write(" Введите название товара : "),readln(T),

write(" Введите производителя : "),readln(P),

write(" Введите минимальную партию : "),readInt(M),

write(" Введите имеющуюся партию : "),readInt(I),

write(" Введите цену за единицу товара : "),readreal(Pr),

write(" Введите сроки поставки : "),readInt(S),nl,

N=0,

Firm=F,Tov=T,Proizv=P,Min=M,

Kol=I,

Price=Pr,Srok=S,

assertz(поставщик(N,Firm,Tov,Proizv,Min,Kol,Price,Srok)),

removewindow,

покупатель(N1,_,Tov,Proizv1,Part1,Price1,Srok1),

cmp_name(Proizv1,Proizv),

Part1>=Min,Part1=Srok,

 

assert(flag(2)),

assertz(contract(N1,N)),

assert(best(N1,0,0,0)),

fail.

 

 

interact(2):-flag(2),print_contract,

retract(поставщик(0,Firm,Tov,Proizv,Min,Kol,Price,Srok)),

retract(flag(2)),!.

 

interact(2):-

warning(N),

поставщик(0,Firm,Tov,Proizv,Min,Kol,Price,Srok),

assertz(поставщик(N,Firm,Tov,Proizv,Min,Kol,Price,Srok)),

ins_sup(Proizv),

retract(поставщик(0,Firm,Tov,Proizv,Min,Kol,Price,Srok)),

assert(flag(1)),

!.

interact(2):- retract(поставщик(0,Firm,Tov,Proizv,Min,Kol,Price,Srok)),!.

 

interact(_).

 

/* Вывод предупреждения о невозможности заключения договора */

 

warning(N):-makewindow(7,49,113,"Предупреждение",5,10,12,60),

sound(5,220),nl,nl,

write(" На данный момент заключение контракта невозможно"),nl,

write(" Поместить данные в базу данных"),nl,

write(" для последующей обработки?"),nl,nl,

write(" [Д]а/[Н]ет"),nl,

readchar(Ch),

removewindow,

Ch='Д',

write(" Введи