ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Система Посередник
         

     

    Інформатика, програмування
    Система "Посередник". Укладання договорів на постачання будівельних матеріалів
    Введення
    Наприкінці двадцятого століття автоматизація все сильніше завойовує всі сфери
    людської діяльності. Застосування обчислювальної техніки в різноманітних
    галузях народного господарства покликане полегшити працю людини і зменшити число
    помилок, що здійснюються при прийнятті рішень.
    При побудові систем, що допомагають людині, використовуються прийоми, досліджувані такий
    областю інформатики, як інженерія знань.
    В даному курсовому проекті реалізована система "Посередник", що служить для
    укладання договорів між постачальниками та покупцями будівельних матеріалів.
    Ця система може використовуватися співробітниками посередницьких контор, що працюють
    в цій області.
    Програма реалізована на мові Пролог.
    1. Види послуг та режими роботи системи "Посередник"
    Основне призначення системи "Посередник" - надання послуг з укладення
    договорів між постачальниками та покупцями будівельних матеріалів. Висновок
    договорів може проводитися в звичайному, або в інтерактивному режимі. У першому
    випадку система укладає контракт на основі наявної в базі даних інформації про
    клієнтів, у другому випадку система запрошує дані у користувача, після чого
    шукає необхідну інформацію в базі даних і, знайшовши відповідні договори, виводить
    їх, або за відсутності на даний момент можливостей для угоди, заносить
    інформацію про клієнта в базу даних. Крім всіх можливих варіантів договорів
    система виводить ще й найбільш бажані для посередника з точки зору
    комерційної вигоди.
    Крім того, в системі є режими перегляду і редагування (або
    додати) даних по постачальникам і по покупцям, а також перегляду і
    редагування регіональної приналежності фірм-виробників. Якщо під час
    роботи з програмою в бази даних були внесені які-небудь зміни, то при
    вихід з програми за згодою користувача буде вироблено збереження
    змін.
    2. Концептуальна модель знань, необхідних для надання послуг
    Концептуальна модель предметної області представляється безліччю класів
    об'єктів з заданими на ньому відносинами і операціями. Класи об'єктів
    характеризуються деяким набором атрибутів.
    В даному курсовому проекті класами об'єктів є Попит, Пропозиція і
    Договір. Клас, Попит, має наступні атрибути: порядковий номер, назва
    фірми, назва товару, виробник, бажаної партії товару, ціна за одиницю
    товару і термін постачання. У класу Пропозиція, є такі ж атрибути, за
    винятком того, що замість бажаної партії товару тут присутні
    мінімальна партія і максимальна кількість товару, що є у постачальника.
    Уявімо об'єкти класів Попит і Пропозиція у вигляді таблиць:
    Таблиця об'єктів класу Попит
    № ФірмаТоварПроізводітельКол-воЦена, $ Термін постачання
    1ДСК-3Кірпіч обліцовочнийроссійская10000.336
    2МосжілстройКерамзіт европейская30228
    3ГераклАрматура стальнаяСНГ155110
    4МВМАсбест строітельнийукраінская70207
    5АТС-50Кабель АВВГроссійская1000218
    6СМУ-35Керамзіт россійская120206
    7РЕУ-22Стекло оконноебелорусская500310
    8АтлантОбоі моющіесяVertex1000414
    9SunprideКірпіч обліцовочниймосковская8000.410
    10HausbauerПлітка обліцовочнаяітальянская1000117
    11СМУ-28Ванна чугуннаяевропейская4035020
    12ПротонКабель АВВГмосковская1000214

    Таблиця об'єктів класу Пропозиція № ФірмаПродукціяПроізводітельМін.
    партіяМакс. партіяЦена, $ Термін постачання
    1СтройсервісКірпіч обліцовочний2-й цегляний 1209000.257
    2ОріонКерамзіт Електроізоліт1050204
    3СалютАрматура стальнаяММЗ120508
    4СтройсервісКабель АВВГІркутсккабель9009000111
    5БайраміксАсбест строітельнийСтройперліт30100159
    6Все для домаКабель АВВГММЗ9009000112
    7СпецстройСтекло оконноеСерп і молот50700210
    8АстраОбоі моющіесяVertex10009000311
    9ГлобусАсбест строітельнийДонецкбетон10200156
    10ОрбітаКірпіч обліцовочнийМосбетон200090000.34
    11Все для домаПлітка обліцовочнаяMarlit10008000106
    12УнкомтехКабель АВВГІркутсккабель70012000.98
    13ЕлектростальАрматура стальнаяММЗ720653
    14ArkonПаралон жідкійInterchemall300090001010
    15WormsВанна стальнаяNord Star35100030018

    Концептуальна схема предметної області представлена на рис.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СтройсервісКабель АВВГІркутсккабель9009000111
    6Все для домаКабель АВВГММЗ9009000112
    12УнкомтехКабель АВВГІркутсккабель70012000.98

    При застосуванні перший критерій вибираються фірми "Будсервіс" та "Все для дому",
    оскільки ціна, за якою вони пропонують товар, більше, ніж у фірми "Унікомтех"
    і отже дохід посередника буде більше. На другому етапі з цих двох фірм
    вибирається "Будсервіс", оскільки у неї менше термін поставки.
    6. логічна модель подання знань на мові многосортного обчислення
    предикатів і мовою Пролог
    Логічна модель - це опис предметної області на будь-якому логічному
    мовою. Одним з таких логічних мов є многосортное числення
    предикатів. При поданні логічних моделей на цій мові класи сутностей
    предметної області інтерпретуються, як імена сортів.
    Для прикладу введемо наступні імена сортів: Договір, Постачальник, Покупець,
    Продукція, Виробник, Кількість, Ціна, Термін, Тіп_Проізв, а так само наступні
    функції і предикати:
    пост: ДоговорПоставщік, покуп: ДоговорПокупатель,
    прод: ДоговорПродукція, произв: ДоговорПроізводітель,
    кол: ДоговорКолічество, ціна: ДоговорЦена, термін: ДоговорСрок
    тіп_проізв: ПроізводітельТіп_Проізв
    російський: Тіп_Проізв, європейський: Тіп_Проізв
    : Кількість КолічествоT
    : Кількість КолічествоT
    Визначає декілька функцій, наприклад прод (продукція), які будучи застосовні до
    об'єкту е сорти Договір, дають наприклад продукцію прод (е), що бере участь в операції
    тобто
    Визначає функцію, значеннями якої служать типи виробника.
    Визначає константи, що належать сорту Тіп_Проізв.
    Визначає двомісні предикати на об'єктах сорти Кількість.
    Сигнатура - це безліч функцій виду 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
    7. Організація діалогу з користувачем
    При завантаженні система "Посередник" виводить головне меню, в якому представлені
    всі режими роботи програми. Кожен режим вибирається за допомогою натиснення
    цифрової клавіші. Система меню представлена багаторівневої ієрархічної
    структурою, тобто у багатьох режимів є свої підменю.
    У програмі реалізовані звичайні для такого типу програм режими перегляду
    даних, їх корекції та видалення, поряд зі звичайним є інтерактивний режим
    роботи.
    Якщо в бази даних були внесені які-небудь зміни, то при виході з програми
    система виведе запит про необхідність збереження змін, що супроводжується
    звуковим сигналом.
    Схема організації діалогу представлена на рис.6.

    висновок
    При написанні курсового проекту було використано різноманітні моделі
    представлення знань, що вивчаються інженерією знань. Система "Посередник"
    програмно реалізована на мові Пролог в середовищі Turbo Prolog 2.0.
    Додаток
    Текст програми "посередник"
    /*================================================ ==========*/< br /> / * Курсовий проект з дисципліни "Інженерія знань" */
    / * Система "Посередник" */
    / * Автор: Данченко А.В., гр. ІІ-1-95 */
    /*================================================ ==========*/< br /> 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 ( "* Бази завантажені *").< br /> 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 ( "=>"),< br /> readint (C),
    clearwindow,
    working (C),
    clearwindow,
    C = 6,
    retractall (_),< br /> 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 ."),< br /> nl, nl, nl,
    write ( "автоp: Данченко А.В."),
    nl, nl,
    write ( "МІРЕА, гp.ІІ-1-95 (С) 1997 р."),
    nl,
    sound (5,220),
    cursor (22,26),
    write ( "Натисніть на будь-яку клавішу"),
    readchar (_),< br /> 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 ( "=>"),< br /> readint (X),
    clearwindow,
    X> 0, X
    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
    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 ( "=>"),< br /> readint (X),
    clearwindow,
    X> 0, X
    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 ( "=>"),< br /> readint (X),
    clearwindow,
    X> 0, X
    interact (X),
    clearwindow,
    X = 3,!,
    removewindow.
     
    / * Процедура виходу з програми */
    working (6):-flag (1), retract (flag (1)), save_bd,!.
    working (6).
     
    working (_):-< br /> 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 (_),< br /> 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 ,_),< br /> 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 ("|"),< br /> cursor (Z, 76), write ("|"),< br /> nl,
    fail.
    view (1): -
    write ("=============================================== ==================="),< br /> nl,
    cursor (22,26),
    write ( "Натисніть на будь-яку клавішу"),
    readchar (_),< br /> 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 ,_),< br /> 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 ("|"),< br /> cursor (Z, 76), write ("|"),< br /> nl,
    fail.
    view (2): -
    write ("=============================================== ==================="),< br /> nl,
    cursor (22,26),
    write ( "Натисніть на будь-яку клавішу"),
    readchar (_),< br /> 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 (_),< br /> removewindow,!.
    view (_).< br /> / * Процедури корекції даних в базах даних */
    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 (_).< br /> / * Допоміжні процедури видалення даних */
    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 (_).< br />  
    / * Процедура запиту на закінчення введення в correct (3) та correct (3) */
    ask: -
    makewindow (10,43,120, "Питання", 6,18,8,40), nl, nl,
    write ( "Продовжити процес введення даних?"), nl, nl,
    write ( "[Д] а/[Н] ет"),
    readchar (Ch),
    removewindow,
    clearwindow,
    Ch = 'Н',!.< br />  
    / * Висновок запиту про збереження змінених баз даних */
    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 ),!.< br /> sve:-io_error, removewindow.
     
     
    / * Процедури виведення повідомлень про помилки */
    error: -
    makewindow (15,74,79, "ПОМИЛКА", 6,18,8,40),
    cursor (2,16),
    write ( "ПОМИЛКА"), nl, nl,
    write ( "Натисніть на будь-яку клавішу"),
    sound (70,294),
    readchar (_),< br /> removewindow,
    !.
     
    io_error: -
    makewindow (16,74,79, "ПОМИЛКА", 6,18,8,40),
    cursor (2,7),
    write ( "Помилка вводу/виводу"), nl, nl,
    write ( "Натисніть на будь-яку клавішу"),
    sound (70,294),
    readchar (_),< br /> removewindow.
     
    / * Процедура виводу повідомлення про успішне завершення цієї операції */
    ok: -
    makewindow (17,27,90, "ОК", 6,18,8,40),
    cursor (2,7),
    write ( "Операцію виконали"), nl, nl,
    write ( "Натисніть на будь-яку клавішу"),
    readchar (_),< br /> 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 = 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 ,_,_,_,_,_),< br /> 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 ,_),< br /> 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 ("|"),< br /> cursor (Z, 76), write ("|"),< br /> nl,
    покупець (N ,_,_,_, Part ,_,_),< br /> retract (contract (N, N1)),
    Cs = Part * Price1,
    form_best (N, N1, Cs, Srok1),
    form_best2 (N),
    fail.
     
    prn (N ,_):-< br /> write ("=============================================== ===================="),< br /> nl,
    best2 (N, Np ,_,_),< br /> постачальник (Np, Firm ,_,_,_,_,_,_), nl,
    write ( "Найкращий"), nl,
    write ( "контракт з фірмою:", Firm), nl,
    cursor (22,26),
    write ( "Натисніть на будь-яку клавішу"),
    readchar (_),< br /> clearwindow,!.
    / * Перевіряє, чи є контракти */
    checkcontr (N):-contract (N ,_).< br /> / * Процедура формування найбільш пріоритетним контракту */
    form_best (N, Np, S, Srok): - Na = N,
    best (Na, Np1, S1, Srok1), S = S1,
    assertz (best (Na, Np, S, Srok )),!.< br />  
    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 )),!.< br /> form_best (_,_,_,_).< br /> fb1 (N ,_,_,_):-< br /> retract (best (N ,_,_,_)), fail.
    fb1 (_,_,_,_).< br />  
     
     
    form_best2 (N): -
    best (N, Np, S, Srok), f_b2 (N, Np, S, Srok), fail.
    form_best2 (_).< br /> 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 )),!.< br /> f_b2 (_,_,_,_).< br /> fb2 (N ,_,_,_):- retract (best2 (N ,_,_,_)), fail.
    fb2 (_,_,_,_).< br />  
     
    / * Процедури укладення договорів в інтерактивному режимі */
    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 = 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 )),!.< br /> 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 )),!.< br />  
    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 = 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 )),!.< br /> 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 )),!.< br /> interact (_).< br /> / * Висновок попередження про неможливість укладення договору */
    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 (_).< br /> / * Визначення необхідності додавання і додавання */
    / * Елемента в що класифікують мережа */
    ins_sup (S):-sup (_, S ),!.< br /> ins_sup (S):-sup ( "виробник", S ),!.< br /> ins_sup (S): -
    write ( "Введіть регіональну приналежність об'єкта _", S, "_ :"),< br /> readln (M), nl,
    assertz (sup (M, S)), assert (flag (1)), ins_sup (M ),!.< br /> / * Вивід на друк зв'язків у класифікує мережі */
    view_sup (S): -
    sup (S, M), write (S, "->", M), write ( ";"),
    view_sup (M), nl, fail.
    view_sup (_):- readchar (_).< br />


         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status