![]() |
|
|
Реферат: Система "Посредник"Схема организации диалога представлена на рис.6. заключение При написании курсового проекта были использованы разнообразные модели представления знаний, изучаемые инженерией знаний. Система “Посредник” программно реализована на языке Пролог в среде Turbo Prolog 2.0. Приложение Текст программы “посредник” /*==========================================================*/ /* Курсовой проект по дисциплине "Инженерия знаний" */ /* Система "Посредник" */ /* Автор: Данченков А.В., гр. ИИ-1-95 */ /*==========================================================*/ code=8850 domains Фирма,Товар,Произв,Str=string Int,N,Парт,Кол_во,Сроки=integer Цена=real /* Основные и служебные базы данных */ database - поставщик поставщик(integer,Фирма,Товар,Произв,Парт,Кол_во,Цена,Сроки) database - покупатель покупатель(N,Фирма,Товар,Произв,Парт,Цена,Сроки) database - sup sup(Str,Str) database - contract contract(integer,integer) database - best best(integer,integer,integer,integer) database - best2 best2(integer,integer,integer,integer) database - flag flag(Int) predicates start view(Int) autoload working(Int) main_menu correct(Int) interact(integer) warning(integer) form_best(integer,integer,integer,integer) form_best2(integer) f_b2(integer,integer,integer,integer) fb1(integer,integer,integer,integer) fb2(integer,integer,integer,integer) del(Int) del_sup(string) ins_sup(string) view_sup(string) sve save_bd ask error io_error ok repeat checkcontr(integer) all_contract print_contract cmp_name(string,string) find_web(Str,Str) prn(integer,string) goal start. clauses /* Основная процедура */ start:- makewindow(1,26,94,"СИСТЕМА ПОСРЕДНИК",0,0,25,80), clearwindow, autoload, main_menu. /* Процедура автоматической загрузки баз данных */ autoload:- retractall(_,поставщик), existfile("kurs1.dat"), consult("kurs1.dat",поставщик), retractall(_,покупатель), existfile("kurs2.dat"), consult("kurs2.dat",покупатель), retractall(_,sup), existfile("web.dat"), consult("web.dat",sup), cursor(21,30), write("*Базы загружены*"). autoload:- makewindow(2,74,79,"ОШИБКА",6,18,8,40), cursor(2,10), write("Нет базы на диске"), sound(70,294), removewindow, !. /* Главное меню */ main_menu:- repeat, cursor(7,0), write(" 0 - О системе... "),nl, write(" 1 - Корректировка данных"),nl, write(" 2 - Уничтожение записей"),nl, write(" 3 - Просмотр баз данных"),nl, write(" 4 - Заключение договоров"),nl, write(" 5 - Интерактивный режим"),nl, write(" 6 - Выход из программы"),nl, write(" =>"), readint(C), clearwindow, working(C), clearwindow, C = 6, retractall(_), removewindow. /* Вывод данных о создателе программы */ working(0):- makewindow(3,27,30,"О системе...",0,0,25,80), nl,nl, write(" Инфоpмационно-спpавочная система"), nl,nl, write(" Посредник "), nl,nl,nl,nl, write(" Программа составлена в среде "), nl, write(" TURBO-PROLOG v.2.0."), nl,nl,nl, write(" автоp: Данченков А.В."), nl,nl, write(" МИРЭА, гp.ИИ-1-95 (С) 1997 г. "), nl, sound(5,220), cursor(22,26), write("Нажмите на любую клавишу"), readchar(_), removewindow,!. /*Процедура вывода меню корректировки данных*/ working(1):- makewindow(4,26,48,"Коppектировка данных",0,0,25,80), sound(5,220), repeat, nl, nl, cursor(9,0), write(" 1 - Изменение данных по поставщикам"),nl, write(" 2 - Изменение данных по покупателям"),nl, write(" 3 - Добавление данных по поставщикам"),nl, write(" 4 - Добавление данных по покупателям"),nl, write(" 5 - Выход в главное меню" ),nl, write(" =>"), readint(X), clearwindow, X>0,X<=5, correct(X), clearwindow, X=5,!, removewindow. /* Процедура вывода меню уничтожения данных*/ working(2):- makewindow(5,48,107,"Уничтожение записей",0,0,25,80), sound(5,220), repeat, cursor(7,0), write(" 1 - Удаление из базы данных поставщиков"),nl, write(" 2 - Удаление из базы данных покупателей"),nl, write(" 3 - Удаление из классифицирующей сети"),nl, write(" 4 - Выход"),nl, write(" => "), readint(I), clearwindow, I>0,I<=4, del(I), clearwindow, I=4,!, removewindow. /* Процедура вывода меню просмотра базы данных */ working(3):- makewindow(6,30,26,"Просмотp баз данных",0,0,25,80), sound(5,220), repeat, nl, nl, cursor(7,0), write(" 1 - Просмотр базы данных по поставщикам"),nl, write(" 2 - Просмотр базы данных по покупателям"),nl, write(" 3 - Просмотр связей в классифицирующей сети"),nl, write(" 4 - Выход в главное меню" ),nl, write(" =>"), readint(X), clearwindow, X>0,X<=4, view(X), clearwindow, X=4,!, removewindow. /* Вызов процедуры, выводящей контракты */ working(4):- retractall(_,best), retractall(_,best2), all_contract,!. /* Процедура вывода меню интерактивного режима */ working(5):- makewindow(4,26,48,"Заключение договоров в интерактивном режиме",0,0,25,80), sound(5,220), repeat, nl, nl, cursor(9,0), write(" 1 - Поиск поставщика"),nl, write(" 2 - Поиск покупателя"),nl, write(" 3 - Выход"),nl, write(" =>"), readint(X), clearwindow, X>0,X<=3, interact(X), clearwindow, X=3,!, removewindow. /* Процедура выхода из программы */ working(6):-flag(1),retract(flag(1)),save_bd,!. working(6). working(_):- makewindow(16,74,79,"ОШИБКА ВВОДА",6,18,8,40), nl, write(" Введите число от 0 до 6,"),nl, write(" соответствующее выбранному пункту"),nl,nl,nl, write(" Нажмите на любую клавишу"), sound(20,494), sound(30,392), readchar(_), removewindow. /* Процедуры просмотра баз данных */ view(1):- makewindow(16,31,26,"Просмотp базы данных по поставщикам",0,0,25,80), write("|=================================================================|"),nl, write("| ПОСТАВЩИКИ |"),nl, write("|=================================================================|"),nl, write("| | | | | Мин . | | | |"),nl, write("|No| Фирма | Товар |Производитель| партия | Кол-во |Цена|Д|"),nl, write("|=================================================================|"),nl, поставщик(N,Firm,Tov,Proizv,Min,Kol,Price,Srok), cursor(Z,_), cursor(Z,1),write(N), cursor(Z,3),write("¦",Firm), cursor(Z,16),write("¦",Tov), cursor(Z,36),write("¦",Proizv), cursor(Z,50),write("¦",Min), cursor(Z,59),write("¦",Kol), cursor(Z,68),write("¦",Price), cursor(Z,73),write("¦",Srok), cursor(Z,0),write("¦"), cursor(Z,76),write("¦"), nl, fail. view(1):- write("|==================================================================|"), nl, cursor(22,26), write("Нажмите на любую клавишу"), readchar(_), removewindow. view(2):- makewindow(16,31,26,"Просмотp базы данных по покупателям",0,0,25,80), write("|=================================================================|"),nl, write("| ПОКУПАТЕЛИ |"),nl, write("|=================================================================|"),nl, write("| | | | | Требуемая | | |"),nl, write("|No| Фирма | Товар |Производитель| партия |Цена |Д|"),nl, write("|=================================================================|"),nl, покупатель(N,Firm,Tov,Proizv,Part,Price,Srok), cursor(Z,_), cursor(Z,1),write(N), cursor(Z,4),write("¦",Firm), cursor(Z,20),write("¦",Tov), cursor(Z,42),write("¦",Proizv), cursor(Z,57),write("¦",Part), cursor(Z,67),write("¦",Price), cursor(Z,72),write("¦",Srok), cursor(Z,0),write("¦"), cursor(Z,76),write("¦"), nl, fail. view(2):- write("|==================================================================|"), nl, cursor(22,26), write("Нажмите на любую клавишу"), readchar(_), removewindow. view(3):- makewindow(16,31,26,"Просмотp связей в классифицирующей сети",0,0,25,80), nl,nl, view_sup("производитель"), cursor(21,26), write(" Просмотр закончен "),nl, cursor(22,26), write("Нажмите на любую клавишу"), readchar(_), removewindow,!. view(_). /* Процедуры коррекции данных в базах данных */ correct(1):- makewindow(4,26,48,"Изменение данных о поставщках",0,0,25,80), nl, write(" Введите порядковый номер поставщика : "),readint(X),nl, поставщик(X,Firm,Tov,Proizv,Min,Kol,Price,Srok), clearwindow,nl, write(" Порядковый номер поставщика : "),write(X),nl, write(" Фирма : "),write(Firm),nl, write(" Товар : "),write(Tov),nl, write(" Производитель : "),write(Proizv),nl, write(" Минимальная партия : "),write(Min),nl, write(" Колличество на складе : "),write(Kol),nl, write(" Цена за единицу товара : "),write(Price),nl, write(" Сроки поставки : "),write(Srok),nl, nl,nl,nl, write(" Введите название фирмы : "),readln(Firm1), write(" Введите название товара : "),readln(Tov1), write(" Введите производителя : "),readln(Proizv1), write(" Введите минимальную партию : "),readInt(Min1), write(" Введите колличество на складе : "),readInt(Kol1), write(" Введите цену за единицу товара : "),readreal(Price1), write(" Введите сроки поставки : "),readInt(Srok1),nl, X1=X, retract(поставщик(X,Firm,Tov,Proizv,Min,Kol,Price,Srok)), assertz(поставщик(X1,Firm1,Tov1,Proizv1,Min1,Kol1,Price1,Srok1)), !, ins_sup(Proizv1), assert(flag(1)), removewindow. correct(2):- makewindow(4,26,48,"Изменение данных о покупателях",0,0,25,80), nl, write(" Введите порядковый номер покупателя : "),readint(X),nl, покупатель(X,Firm,Tov,Proizv,Part,Price,Srok), clearwindow,nl, write(" Порядковый номер покупателя : "),write(X),nl, write(" Фирма : "),write(Firm),nl, write(" Товар : "),write(Tov),nl, write(" Производитель : "),write(Proizv),nl, write(" Необходимая партия : "),write(Part),nl, write(" Цена за единицу товара : "),write(Price),nl, write(" Сроки поставки : "),write(Srok),nl, nl,nl,nl, write(" Введите название фирмы : "),readln(Firm1), write(" Введите название товара : "),readln(Tov1), write(" Введите производителя : "),readln(Proizv1), write(" Введите необходимую партию : "),readInt(Part1), write(" Введите цену за единицу товара : "),readreal(Price1), write(" Введите сроки поставки : "),readInt(Srok1),nl, X1=X, retract(покупатель(X,Firm,Tov,Proizv,Part,Price,Srok)), assertz(покупатель(X1,Firm1,Tov1,Proizv1,Part1,Price1,Srok1)), ins_sup(Proizv1), !, assert(flag(1)), removewindow. correct(3):- makewindow(9,26,48,"Добавление данных о поставщиках",0,0,25,80), repeat, nl, write(" Введите порядковый номер поставщика : "),readint(K),nl, write(" Введите название фирмы : "),readln(F), write(" Введите название товара : "),readln(T), write(" Введите производителя : "),readln(P), write(" Введите минимальную партию : "),readInt(M), write(" Введите колличество на складе : "),readInt(Kl), write(" Введите цену за единицу товара : "),readreal(Pr), write(" Введите сроки поставки : "),readInt(S),nl, N1=K, Firm=F,Tov=T,Proizv=P, Min=M,Kol=Kl, Price=Pr,Srok=S, assertz(поставщик(N1,Firm,Tov,Proizv,Min,Kol,Price,Srok)), ins_sup(Proizv), ask,!, assert(flag(1)), removewindow. correct(4):- makewindow(9,26,48,"Добавление данных о покупателях",0,0,25,80), repeat, nl, write(" Введите порядковый номер покупателя : "),readint(K),nl, write(" Введите название фирмы : "),readln(F), write(" Введите название товара : "),readln(T), write(" Введите производителя : "),readln(P), write(" Введите необходимую партию : "),readInt(M), write(" Введите цену за единицу товара : "),readreal(Pr), write(" Введите сроки поставки : "),readInt(S),nl, N1=K, Firm=F,Tov=T,Proizv=P, Part=M, Price=Pr,Srok=S, assertz(покупатель(N1,Firm,Tov,Proizv,Part,Price,Srok)), ins_sup(Proizv), ask,!, assert(flag(1)), removewindow. correct(_). /* Вспомагательные процедуры удаления данных */ del(1):- makewindow(5,48,107,"Удаление данных о поставщках",0,0,25,80), nl, write(" Введите порядковый номер поставщика : "),readint(X),nl, поставщик(X,Firm,Tov,Proizv,Min,Kol,Price,Srok), retract(поставщик(X,Firm,Tov,Proizv,Min,Kol,Price,Srok)), assert(flag(1)), ok, !, removewindow. del(1):- error, removewindow,!. del(2):- makewindow(5,48,107,"Удаление данных о покупателях",0,0,25,80), nl, write(" Введите порядковый номер покупателя : "),readint(X),nl, покупатель(X,Firm,Tov,Proizv,Part,Price,Srok), retract(покупатель(X,Firm,Tov,Proizv,Part,Price,Srok)), assert(flag(1)), ok, !, removewindow. del(2):- error, removewindow,!. del(3):- makewindow(5,48,107,"Удаление из классифицирующей сети",0,0,25,80), nl, write(" Введите удаляемого производителя/регеон : "),readln(S),nl, del_sup(S), assert(flag(1)), ok, !, removewindow. del(3):- error, removewindow,!. del(_). /* Процедура запроса на окончание ввода в correct(3) и correct(3) */ ask:- makewindow(10,43,120,"Вопрос",6,18,8,40),nl,nl, write(" Продолжить процесс ввода данных? "),nl,nl, write(" [Д]а/[Н]ет"), readchar(Ch), removewindow, clearwindow, Ch='Н',!. /* Вывод запроса о сохранении изменённых баз данных */ save_bd:- makewindow(17,74,79,"Сохранение изменений",6,18,8,40),nl, write(" Сохранить произведённые "),nl, write(" изменения на диске?"),nl,nl, write(" [Д]а/[Н]ет"), sound(20,494), sound(30,392), readchar(Ch), removewindow, clearwindow, Ch='Д',!,sve. save_bd. /* Сохранение данных на диске */ sve:-save("kurs1.dat",поставщик), save("kurs2.dat",покупатель), save("web.dat",sup),!. sve:-io_error,removewindow. /* Процедуры вывода сообщений об ошибках */ error:- makewindow(15,74,79,"ОШИБКА",6,18,8,40), cursor(2,16), write("ОШИБКА"),nl,nl, write(" Нажмите на любую клавишу"), sound(70,294), readchar(_), removewindow, !. io_error:- makewindow(16,74,79,"ОШИБКА",6,18,8,40), cursor(2,7), write("Ошибка ввода/вывода"),nl,nl, write(" Нажмите на любую клавишу"), sound(70,294), readchar(_), removewindow. /* Процедура вывода сообщения об успешном завершении данной операции */ ok:- makewindow(17,27,90,"ОК",6,18,8,40), cursor(2,7), write(" ОПЕРАЦИЯ ВЫПОЛНЕНА"),nl,nl, write(" Нажмите на любую клавишу"), readchar(_), removewindow. /* Процедура repeat */ repeat. repeat:- repeat. /* Процедура обнаружения связей по классифицирующей сети */ cmp_name(Proizv,Proizv). cmp_name(Proizv,Proizv1):- find_web(Proizv,Proizv1). find_web(X,Y):-sup(X,Y). find_web(X,Y):-sup(X,Z),find_web(Z,Y). /* Процедура обнаружения всех возможных контрактов */ all_contract:- покупатель(N,_,Tov,Proizv,Part,Price,Srok), поставщик(N1,_,Tov,Proizv1,Min1,Kol1,Price1,Srok1), cmp_name(Proizv,Proizv1), Part>=Min1,Part<=Kol1,Price>=Price1,Srok>=Srok1, assertz(contract(N,N1)), assert(best(N,0,0,0)), assert(best2(N,0,0,1000)), fail. all_contract:-print_contract. /* Процедуры вывода на экран всех возможных контрактов */ 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<=Kol1,Price>=Price1,Srok>=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<=Kol,Price1>=Price,Srok1>=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(" Введите порядковый номер фирмы : "),readInt(N),nl, !. /* Удаление элемента из классифицирующей сети */ % В середине цепочки del_sup(S):- sup(S,X), del_sup(X),fail. % В конце цепочки del_sup(S):- sup(_,S), retract(sup(_,S)),fail. del_sup(_). /* Определение необходимости добавления и добавление */ /* элемента в классифицирующую сеть */ ins_sup(S):-sup(_,S),!. ins_sup(S):-sup("производитель",S),!. ins_sup(S):- write("Введите региональную принадлежность объекта _ ",S,"_ :"), readln(M),nl, assertz(sup(M,S)),assert(flag(1)),ins_sup(M),!. /* Вывод на печать связей в классифицирующей сети */ view_sup(S):- sup(S,M),write(S," -> ",M),write("; "), view_sup(M),nl,fail. view_sup(_):- readchar(_). |
Страницы: 1, 2
![]() |
||
НОВОСТИ | ![]() |
![]() |
||
ВХОД | ![]() |
|
Рефераты бесплатно, реферат бесплатно, рефераты на тему, сочинения, курсовые работы, реферат, доклады, рефераты, рефераты скачать, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |