Главная » Каталог    
рефераты Разделы рефераты
рефераты
рефератыГлавная

рефератыБиология

рефератыБухгалтерский учет и аудит

рефератыВоенная кафедра

рефератыГеография

рефератыГеология

рефератыГрафология

рефератыДеньги и кредит

рефератыЕстествознание

рефератыЗоология

рефератыИнвестиции

рефератыИностранные языки

рефератыИскусство

рефератыИстория

рефератыКартография

рефератыКомпьютерные сети

рефератыКомпьютеры ЭВМ

рефератыКосметология

рефератыКультурология

рефератыЛитература

рефератыМаркетинг

рефератыМатематика

рефератыМашиностроение

рефератыМедицина

рефератыМенеджмент

рефератыМузыка

рефератыНаука и техника

рефератыПедагогика

рефератыПраво

рефератыПромышленность производство

рефератыРадиоэлектроника

рефератыРеклама

рефератыРефераты по геологии

рефератыМедицинские наукам

рефератыУправление

рефератыФизика

рефератыФилософия

рефератыФинансы

рефератыФотография

рефератыХимия

рефератыЭкономика

рефераты
рефераты Информация рефераты
рефераты
рефераты

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


Задание на курсовое
проектирование по дисциплине   
"Инженерия знаний" студенту   
Данченкову А. В. группы ИИ-1-95.
   Тема: «Система
«Посредник». Заключение договоров на поставку строительных материалов».
1.
Исходные данные:
1.1
Данные о клиентах, предлагающих строительные материалы.
1.2
Данные о клиентах, нуждающихся в строительных материалах.
2.
Перечень разрабатываемых вопросов:
2.1
Виды услуг и режимы работы системы "Посредник".
2.2
Концептуальная модель знаний, необходимых для оказания услуг.
2.3
Представление данных о клиентах.
2.4
Сетевая модель представления знаний и ее  использование для получения справочной информации
и  формирования вариантов договоров.
2.5
Критерии выбора наиболее предпочтительного  варианта договора.
2.6
Логическая модель 
представления  знаний  на 
языке многосортного исчисления предикатов и на языке Пролог.
2.7
Организация диалога с пользователем.
3.
Перечень графических материалов:
3.1
Концептуальная схема предметной области
3.2
Классифицирующая сеть
3.3
Графическое представление сигнатуры и модельной структуры
3.4
Схема организации диалога
4.
Календарный план-график работы
4.1
Анализ  предметной  области 
и  построение  концептуальной модели                                                                                                                    20.09
4.2
Формирование БД клиентов                                                                                                                                                                                           01.10
4.3
Построение сетевой модели                                                                                                                                                                                            15.10
4.4
Разработка логической модели на языке  многосортного исчисления                                              
предикатов                                                                                                                                                                                                                                1.11
4.5
Разработка программы                                                                                                                                                                                                     1.12
4.6
Оформление пояснительной записки                                                                                                                                                                            10.12
4.7
Защита проекта
                                                                                                                                                                                                                 15.12
4.8
Задание выдано
                                                                                                                                                                                                                2.09
Руководитель Потресова Г.Д.  
/________________/
Студент      Данченков
А.В.     /________________/
Группа    ИИ-1-95
оглавление
Введение………………………………………………………………………..……………3
1. Виды услуг и
режимы работы системы "Посредник" …………………………………3
2. Концептуальная
модель знаний, необходимых для оказания услуг..…………………3
3. Представление
данных о клиентах………....……………………………………………6
4. Сетевая модель
представления знаний и ее  использование
для получения справочной информации и формирования вариантов  договора……….…………………………7
5. Критерии
выбора наиболее предпочтительного варианта договора.…………………9
6. Логическая
модель представления знаний на языке 
многосортного исчисления предикатов и языке  Пролог..……………………………………………….……………….…9
7. Организация
диалога с пользователем………………………………………………….12
Заключение………..…………………………………………………………………………12
Приложение (текст
программы «Посредник») …..………………………………….……14
Список литературы…….……………………………………………………………………30
Введение
В конце двадцатого века автоматизация всё сильнее завоёвывает все
сферы человеческой  деятельности.
Применение вычислительной техники в разнообразных отраслях народного хозяйства
призвано облегчить труд человека и уменьшить число ошибок, совершаемых при
принятии решений.
При построении систем, помогающих человеку,  используются приёмы, изучаемые такой
областью информатики, как инженерия знаний.
В данном курсовом проекте реализована система «Посредник», служащая
для заключения договоров между поставщиками и покупателями строительных материалов.
Эта система может использоваться сотрудниками посреднических контор, работающих
в этой области.
Программа реализована на языке Пролог.
1. Виды услуг и режимы работы системы «Посредник»
Основное предназначение системы «Посредник» – оказание услуг по
заключение договоров между поставщиками и покупателями строительных материалов.
Заключение договоров может производиться в обычном, либо в интерактивном
режиме. В первом случае система заключает контракт на основе имеющейся в базе
данных информации о клиентах, во втором случае система запрашивает данные у
пользователя, после чего ищет необходимую информацию в базе данных и, найдя
подходящие договоры, выводит их, либо при отсутствии на данный момент
возможностей для сделки, заносит информацию о клиенте в базу данных. Кроме всех
возможных вариантов договоров система выводит ещё и наиболее предпочтительные
для посредника с точки зрения коммерческой выгоды.
Кроме того, в системе имеются режимы просмотра и редактирования
(либо добавления) данных по поставщикам и по покупателям, а так же просмотра и
редактирования региональной принадлежности фирм-производителей. Если во время
работы с программой в базы данных были внесены какие-либо изменения, то при
выходе из программы при согласии пользователя будет произведено сохранение
изменений.
2. Концептуальная модель знаний, необходимых для оказания услуг
Концептуальная модель предметной области представляется множеством
классов объектов с заданными на нём отношениями  и операциями. Классы объектов характеризуются некоторым набором
атрибутов.
В данном курсовом проекте классами объектов  являются Спрос, Предложение и Договор.
Класс, Спрос, имеет следующие атрибуты: порядковый номер, название фирмы,
название товара, производитель, желаемой партии товара, цена за единицу товара
и срок поставки. У класса Предложение, имеются такие же атрибуты, за
исключением того, что вместо желаемой партии товара здесь присутствуют
минимальная партия  и максимальное
количество товара, имеющееся у поставщика.
Представим объекты классов 
Спрос и Предложение в виде таблиц:
Таблица
объектов класса Спрос № Фирма Товар Производитель Кол-во Цена, $ Срок поставки 1 ДСК-3 Кирпич облицовочный российская 1000 0.33 6 2 Мосжилстрой Керамзит европейская 30 22 8 3 Геракл Арматура стальная СНГ 15 51 10 4 МВМ Асбест строительный украинская 70 20 7 5 АТС-50 Кабель АВВГ российская 1000 2 18 6 СМУ-35 Керамзит российская 120 20 6 7 РЭУ-22 Стекло оконное белорусская 500 3 10 8 Атлант Обои моющиеся Vertex 1000 4 14 9 Sunpride Кирпич облицовочный московская 800 0.4 10 10 Hausbauer Плитка облицовочная итальянская 1000 11 7 11 СМУ-28 Ванна чугунная европейская 40 350 20 12 Протон Кабель АВВГ московская 1000 21 4
Таблица
объектов класса Предложение № Фирма Продукция Производитель Мин. партия Макс. партия Цена, $ Срок поставки 1 Стройсервис Кирпич облицовочный 2-й кирпичный 120 900 0.25 7 2 Орион Керамзит Электроизолит 10 50 20 4 3 Салют Арматура стальная ММЗ 1 20 50 8 4 Стройсервис Кабель АВВГ Иркутсккабель 900 9000 1 11 5 Байрамикс Асбест строительный Стройперлит 30 100 15 9 6 Всё для дома Кабель АВВГ ММЗ 900 9000 1 12 7 Спецстрой Стекло оконное Серп и молот 50 700 2 10 8 Астра Обои моющиеся Vertex 1000 9000 3 11 9 Глобус Асбест строительный Донецкбетон 10 200 15 6 10 Орбита Кирпич облицовочный Мосбетон 2000 9000 0.3 4 11 Всё для дома Плитка облицовочная Marlit 1000 8000 10 6 12 Ункомтех Кабель АВВГ Иркутсккабель 700 1200 0.9 8 13 Электросталь Арматура стальная ММЗ 7 20 65 3 14 Arkon Паралон жидкий Interchemall 3000 9000 10 10 15 Worms Ванна стальная Nord Star 35 1000 300 18
Концептуальная схема
предметной области представлена на рис.1. и рис.2.
Рис.1. Концептуальная схема
предметной области (спрос и предложение).
Рис.2. Концептуальная схема
предметной области (договор).
3. Представление данных о клиентах
Данные о клиентах в системе «Посредник» представлены в виде
стандартных баз данных (database)
языка Пролог. Поскольку
в Прологе имеется довольно мощный механизм работы с такими базами
данных, реализовать на нём   программу типа системы  «Посредник»
намного проще и естественней, чем на алгоритмических языках (типа Pascal или C).
Общий вид записей в базах данных следующий:
поставщик(N,F,T,P,M,X,C,D)
покупатель(N,F,T,P,K,C,D)
где  N - номер
записи, F - фирма-поставщик,
T – наименование
товара, P – производитель
товара, M – минимальная
партия, X – имеющаяся в
наличии партия, С – цена за единицу товара, D – срок поставки,
K – нужное покупателю количество товара. N, M, X, K, D – целочисленные, F, T, P – строковые, С –
действительная.
База данных по поставщикам
записана в файле kurs1.dat, по
покупателям – в kurs2.dat.
4. Сетевая модель представления знаний и её использование для
получения справочной информации и формирования вариантов договора
Сетевая модель реализуется с помощью так называемых семантических
сетей. В семантической сети имена некоторых объектов, процессов, действий,
сущностей и их классов ассоциируются с узлами, а отношения между ними
ассоциируются с дугами, соединяющими узлы. Сетевую модель можно представить в
виде следующей конструкции: S=, где
I – множество
информационных единиц, С1,С2,…,Сn – множество типов связей между
информационными единицами, Г – отображение, задающее связи (из заданного
множества типов связей) между информационными единицами, входящими в I.
Классифицирующие
сети (использованные в данной курсовой), на ряду с функциональными,  являются одним из классов однородных (у
которых дуги только одного типа) сетей. Классифицирующие сети строятся на
основе родовидового отношения sup, заданного на множестве классов
объектов. Это отношение интерпретируется следующим образом: если Ki sup
Kj, то в любой момент времени t 
каждый объект класса Ki является объектом класса Kj,
т.е. Kj является подклассом Ki (или Ki
является подклассом Kj). Конкретные объекты, как правило,
связываются с классами низшего уровня иерархии отношением принадлежности isa.
Запись ki isa K означает, что объект ki
является элементом класса K.
В данном курсовом проекте классифицирующая сеть используется для
определения региональной принадлежности производителя строительных материалов.
Благодаря этому при заключении договоров покупателю не обязательно задавать
конкретного производителя, а можно задать только  регеон  расположения тех
производителей, продукция которых покупателю кажется наиболее предпочтительной.
В системе «Посредник» имеется так же возможность получения
информации о принадлежности  какого-либо
производителя региону путём просмотра связей в классифицирующей сети, а так же
имеются режимы корректировки и дополнения этой сети.
Графическое представление классифицирующей сети показано на рис.3.
Програмно
классифицирующая сеть реализована в виде стандартных баз данных Пролога
(database) и выглядит следующим образом:
sup(Ki,Kj)
где Ki
и Kj  – класс и его подкласс соответственно.
Классифицирующая сеть
находится  в файле web.dat.
5. Критерии выбора наиболее предпочтительного варианта договора
В данном курсовом проекте наиболее предпочтительный договор
выбирается в пользу посредника. Выгода посредника состоит в получении
наибольшей прибыли в кратчайшие сроки. Доход посредника обычно составляет
некоторый комиссионный процент от заключённой сделки, поэтому наиболее выгодны
контракты, в которых  произведение
количества товара, необходимое покупателю на цену этого товара, назначенную
продавцом, будет максимальным. Это и будет первым
критерием  выбора наиболее предпочтительного
договора. Вторым критерием, как было
сказано выше, будет являться кратчайший срок поставки.
В начале программа выбирает предпочтительные договоры по первому
критерию. Если таких договоров получится несколько, то программа выбирает из
них тот, у которого срок поставки меньше (т.е. реализуется второй критерий).
Например, пусть имеется три возможных договора для фирмы «АТС-50»,
которой требуется  партия кабеля АВВГ
российского производителя объёмом 1000 единиц по цене 2$ за единицу в сроки не более 18 дней: № Фирма Товар Производитель Мин. партия. Кол-во Цена Сроки 4 Стройсервис Кабель АВВГ Иркутсккабель 900 9000 1 11 6 Всё для дома Кабель АВВГ ММЗ 900 9000 1 12 12 Ункомтех Кабель АВВГ Иркутсккабель 700 1200 0.9 8
При применении первого критерия выбираются фирмы «Стройсервис» и
«Всё для дома», поскольку цена, по которой они предлагают товар, больше, чем у
фирмы «Уникомтех» и следовательно доход 
посредника будет больше. На втором этапе из этих двух фирм выбирается
«Стройсервис», поскольку у неё меньше срок поставки.
6. логическая модель представления знаний на языке многосортного
исчисления предикатов и на языке Пролог
Логическая модель – это описание предметной области на каком-либо
логическом языке. Одним из таких логических языков является многосортное
исчисление предикатов. При представлении логических моделей на этом языке
классы сущностей предметной области интерпретируются, как имена  сортов.
Для примера введём
следующие имена сортов: Договор,
Поставщик, Покупатель, Продукция, Производитель, Количество, Цена, Срок,
Тип_Произв, а так же следующие функции и предикаты:
1.
пост:ДоговорПоставщик, покуп:ДоговорПокупатель,       
      прод:ДоговорПродукция, произв:ДоговорПроизводитель,  
      кол:ДоговорКоличество, цена: ДоговорЦена, срок:ДоговорСрок
2.
тип_произв: ПроизводительТип_Произв
3.
российский: Тип_Произв, европейский: Тип_Произв
4.
:Количество КоличествоT
      :Количество КоличествоT
     
Выражения 1-4
сотавляют сигнатуру и имеют следующий смысл:
1.
Задаёт
несколько функций, например прод (продукция), которые будучи применимы к объекту
е сорта Договор, дают например продукцию прод(е),
участвующую в операции е.
2.
Задаёт функцию, значениями которой служат типы производителя.
3.
Задаёт константы, принадлежащие сорту Тип_Произв.
4.
Задаёт
двухместные предикаты на объектах сорта Количество.
Сигнатура – это множество функций вида f: A1 A2… AnB, где A1, A2,…,An – аргументы, B – значение
функции. Множества аргументов и значений функций образуют соответственно сорта A и B.  В
частном случае, если B=T, причём
T={1,0} – особый сорт,
то сигнатура имеет вид  P: A1 A2… AnT, причём P называют предикатом.
Сигнатура задает структурные связи между понятиями предметной
области, представленными предикатами и функциями. Логические связи между этими
понятиями задаются формулами, которые записываются в сигнатуре. Структурные и
логические связи выражают некоторое знание о предметной области. Таким образом,
сигнатура формально представляет одну часть знания о предметной области, а
формулы, записанные в этой сигнатуре, представляют другую часть знания.
Графическое представление сигнатуры показано на рис.4, а  модельной структуры – на рис.5.
Рис.4. Графическое представление сигнатуры
Логическая модель в
Прологе представляется в виде предикатов и баз данных database. Например:
  database – договор
                    дог(Поставщик,
Покупатель)
Функцию пост (поставщик) можно реализовать так
  пост (N):– дог(Покупатель,Поставщик), N=Поставщик.
Функцию  можно представить
следующим образом:
(Количество1,Количество2):–Количество1<= Количество2.
7. Организация диалога с пользователем
При загрузке система «Посредник» выводит главное меню, в котором
представлены все режимы работы программы. Каждый режим выбирается посредством
нажатия цифровой клавиши. Система меню представлена многоуровневой
иерархической структурой, т.е. у многих режимов есть свои подменю.
В программе реализованы обычные для такого типа программ режимы
просмотра данных, их коррекции и удаления, наряду с обычным имеется
интерактивный режим работы. 
Если в базы данных были внесены какие-либо изменения, то при выходе
из программы система выведет запрос о необходимости сохранения изменений,
сопровождаемый звуковым сигналом.
Схема организации диалога представлена на рис.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.
Малпас Дж. Реляционный язык Пролог и его применение.–М.:
Наука, 1990.–464 с.
2.
Братко И. Программирование на языке Пролог для искуственного
интеллекта. –М.: Мир, 1990.–560 с.
3.
Данченков А.В. Инженерия знаний: лекции. Лектор Потресова
Г.Д.–М.:МИРЭА(ТУ), 1997.– рукопись.
4.
Данченков А.В. Логическое программирование: лекции. Лектор
Холкин И.И.–М.:МИРЭА(ТУ), 1996.– рукопись.
Рис.2.
Классифицирующая сеть.
Рис.5. Модельная
структура О системе
Рис. 6. Схемаорганизации диалога
/*==========================================================*/
/*      Курсовая работа по дисциплине
"Инженерия знаний"    */
/*                     Система
"Посредник"                 
*/
/*             Автор: Данченков А.В., гр.
ИИ-1-95           */
/*==========================================================*/
/* Тем,
кто будет переделовать мою курсовую могу посоветовать   */
/*
следующее: если программа не захочет компилироваться, то     */
/*
"поиграйтесь" с директивой прекомпилятора code=size. При вы- */
/* даче
ошибки 610 значение size следует увеличить, при выдаче  */
/*
ошибки 1007 - уменьшить. Отзывы и пожелания можно направлять */
/* по
адресу 2:5020/1310.7@FidoNet или 55:8010/34@FancyNet      */
/*      C наилучшими пожеланиями. Автор.                        */
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-й кирпичный",120,900,0.25,7)
поставщик(2,"Орион","Керамзит","Электроизолит",10,50,20,4)
поставщик(3,"Салют","Арматура
стальная","ММЗ",1,20,50,8)
поставщик(4,"Стройсервис","Кабель
АВВГ","Иркутсккабель",900,9000,1,11)
поставщик(5,"Байрамикс","Асбест
строительный","Стройперлит",30,100,15,9)
поставщик(6,"Всё
для дома","Кабель АВВГ","ММЗ",900,9000,1,12)
поставщик(7,"Спецстрой","Стекло
оконнное","Серп и молот",50,700,2,10)
поставщик(8,"Астра","Обои
моющиеся","Vertex",1000,9000,3,11)
поставщик(9,"Глобус","Асбест
строительный","Донецкбетон",10,200,15,6)
поставщик(10,"Орбита","Кирпич
облицовочный","Мосбетон",2000,9000,0.3,4)
поставщик(11,"Всё
для дома","Плитка
облицовочная","Marlit",1000,8000,10,6)
поставщик(12,"Ункомтех","Кабель
АВВГ","Иркутсккабель",700,1200,0.9,8)
поставщик(13,"Электросталь","Арматура
стальная","ММЗ",7,20,65,3)
поставщик(14,"Arkon","Паралон
жидкий","Interchemal",3000,9000,10,10)
поставщик(15,"Worms","Ванна
чугунная","Nord Star",35,1000,300,18)
покупатель(1,"ДСК-3","Кирпич
облицовочный","российская",1000,0.33,6)
покупатель(2,"Мосжилстрой","Керамзит","европейская",30,22,8)
покупатель(3,"Геракл","Арматура
стальная","СНГ",15,51,10)
покупатель(4,"МВМ","Асбест
строительный","украинская",70,20,7)
покупатель(5,"АТС-50","Кабель
АВВГ","российская",1000,2,18)
покупатель(6,"СМУ-35","Керамзит","российская",120,20,6)
покупатель(7,"РЭУ-22","Стекло
оконное","белорусская",500,3,10)
покупатель(8,"Атлант","Обои
моющиеся","Vertex",1000,4,14)
покупатель(9,"Sunpride","Кирпич
облицовочный","московская",800,0.4,10)
покупатель(10,"Hausbauer","Плитка
облицовочная","итальянская",1000,11,7)
покупатель(11,"СМУ-28","Ванна
чугунная","европейская",40,350,20)
покупатель(12,"Протон","Кабель
АВВГ","московская",1000,21,4)
sup("производитель","европейская")
sup("производитель","российская")
sup("производитель","СНГ")
sup("европейская","финская")
sup("европейская","польская")
sup("европейская","итальянская")
sup("СНГ","белорусская")
sup("СНГ","украинская")
sup("российская","московская")
sup("российская","ростовская")
sup("московская","Звезда-М")
sup("ростовская","Позитив")
sup("московская","Протон")
sup("мытищенская","ММЗ")
sup("российская","мытищенская")
sup("московская","2-й
кирпичный")
sup("хотьковская","Электроизолит")
sup("российская","хотьковская")
sup("мытищенская","Стройперлит")
sup("иркутская","Иркутсккабель")
sup("российская","иркутская")
sup("белорусская","Серп
и молот")
sup("финская","Vertex")
sup("украинская","Донецкбетон")
sup("московская","Мосбетон")
sup("итальянская","Marlit")
sup("польская","Interchemal")
sup("итальянская","Nord
Star")
рефераты Рекомендуем рефератырефераты

     
Рефераты @2011