Инженерия знаний. Создание системы "Посредник", заключающей договоры на поставку стройматериалов
Реферат - Компьютеры, программирование
Другие рефераты по предмету Компьютеры, программирование
контрактов */
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(" Введи