Рефераты - Афоризмы - Словари
Русские, белорусские и английские сочинения
Русские и белорусские изложения
 

Разработка информационно-справочной системы

Работа из раздела: «Программирование и комп-ры»
                                Задание № 11
                         на курсовое проектирование
                 по дисциплине “Логическое программирование”
                 студенту Пакостиной Александре Викторовне.
                               Группа ИР-1-95.


1. Тема исследования: “Разработка информационно - справочной системы”.
2. Исходные данные: База данных BD, включающая записи вида:

|Характеристика детали                                            | | | | | | | | |
|№     |Место        |Назван|Цена         |Дата поступления     | |      |      |      |
|      |хранения     |ие    |             |                     | |      |      |      |
|артику|№ цеха|№склад|детали|руб   |коп   |год   |месяц |число |
|ла    |      |а     |      |      |      |      |      |      |
|      |      |      |      |      |      |      |      |      |

  Язык программирования: Пролог.
3. Перечень вопросов, подлежащих разработке:
   4. Разработать меню, обеспечивающее взаимодействие пользователя с
      системой, в соответствии с заданием, предусмотрев режимы:
   5. Разработать процедуры:
      . уничтожения записей по признакам;
      . загрузки;
      . сохранения;
      . просмотра;
      . уничтожения;
  3.3. Предусмотреть создание из базы BD новых баз данных B1, B2,
      характеризуемых признаками, задаваемыми пользователем.
4. Перечень графических материалов:

  4.1. Структурная схема меню:

  [pic]
5. Структурная схема программы:

                                    [pic]


5. Календарный план работы над курсовой работой:
   6. Получение задания: 4.10.96.
   7. Анализ задания, постановка задачи, подбор и изучение литературы:
      18.10.96.
   8. Разработка меню и структуры программы: 25.10.96.
   9. Разработка процедур информационно-справочной системы: 15.11.96.
  10. Отладка программы: 29.11.96.
  11. Оформление пояснительной записки и сдача работы на правку: 13.12.96.
  12. Защита курсовой работы: 20.12.96.



                                      Руководитель: Холкин И.И. ____________

                                        Студент: Пакостина А.В. ____________
Описание

1. Понятие об информационно-справочных системах и их программная
  реализация.

  Информационно-справочные системы предназначены для управления различными
  информационными и справочными массивами, в число которых входят и базы
  данных. Эти системы организовывают определенный интерфейс пользователя с
  функциями обработки информации самой системы. Набор возможностей таких
  систем обычно включает в себя коррекцию структуры используемого объекта
  (инкапсулирующего информацию), работа с его составляющими - дополнение,
  редактирование, удаление (в случае, когда роль такого объекта выполняет
  база данных, это - записи), простой просмотр, поиск элементов. Также
  необходимо обеспечить для такой системы и функции постоянного надежного
  хранения - в простейшем случае, это - запись базы из памяти в файл на
  диске и считывание оного с диска в память.

  Программная реализация мало отличается от подобной концепции, но
  конкретизирует абстрактные операции в конкретные процедуры и функции (или
  же объекты) и зависит полностью от возможностей языка, поставленной
  задачи и искусства программиста.
2. Базы данных и способы их представления.

  Общая концепция теории простых баз данных подразумевает наличие
  некоторого множества таблиц и являющихся, собственно, базой данных,
  имеющей определенный идентификатор (имя). Каждая таблица состоит из n-го
  количества записей (величина n зависит от возможностей конкретной
  системы), каждая из которых имеет одну и ту же структуру (в рамках одной
  таблицы) и может объединять в себе несколько разнородных объектов (их
  количество также зависит целиком и полностью от возможностей системы).

  Работа с базой данных предполагает в себе возможность работать с записями
  (либо изменять структуру таблиц).

  В языке программирования Пролог база данных описывается в отдельном
  разделе, именуемом database. Таких разделов может быть несколько в одной
  программе и каждый из них, если они действительно представляют собой
  разные БД, должны иметь разные имена. В случае отсутствия имени у базы
  данных, ей дается имя по умолчанию - dbasedom.

  Работу с загружаемыми базами данных в Прологе реализуют следующие
  стандартные предикаты: assert - добавить запись в БД, retract - удалить
  указанную запись, save - сохранить указанную БД в файле, consult -
  загрузить БД из файла в память.

  В данной работе объявлена главная база данных bd, имеющая предикат
  characteristick, и две временные базы b1, b2 с предикатами table1,
  table2.
3. Разработка системного меню.

  Системное меню объединяет в себе доступ ко всем процедурам информационно
  - справочной системы. Разработка меню отталкивается от имеющихся функций
  системы (предикатов). Поскольку объявлен предикат do (char), служащий
  буфером между системным меню и существующими процедурами, он имеет в себе
  либо подменю с выбором режимов работы имеющихся предикатов, либо их вызов
  с последующим возвратом в системное меню:

  +-------------- Системное меню --------------+
¦  Выберите вариант работы с базами данных:  ¦
¦                                            ¦
¦   1 :-  Загрузить                          ¦
¦   2 :-  Сохранить                          ¦
¦   3 :-  Просмотреть                        ¦
¦   4 :-  Скорректировать                    ¦
¦   5 :-  Удалить запись по признакам        ¦
¦   6 :-  Создать по признакам               ¦
¦   7 :-  Добавить                           ¦
¦   8 :-  Выход в ДОС                        ¦
¦                                            ¦
¦  ------------------| |------------------   ¦
+--------------------------------------------+


4. Разработка структуры программы.

  Системное меню вызывает только предикаты do (<режим>), определенные для
  каждой из необходимых задач (номер режим полностью совпадает с нумерацией
  в главном меню). Каждая из реализаций этого предиката выводит меню, либо
  сразу вызывает соответствующие процедуры: open, store, adding, correct,
  see, del, indication. Процедура Indication выводит дополнительное подменю
  и вызывает либо IndicationB1, либо IndicationB2 в зависимости от выбора
  пользователя. Do(‘8’) завершает работу с системой.
5. Разработка процедур:
   6. Загрузка базы данных (Open).

      В do(‘1’) имеется меню:

      +--------- Загрузить --------+
  ¦      Куда загрузить ?      ¦
  ¦                            ¦
  ¦        1 :-  В bd          ¦
  ¦        2 :-  В b1          ¦
  ¦        3 :-  В b2          ¦
  ¦        4 :-  Меню          ¦
  ¦                            ¦
  ¦      ------| |------       ¦
  +----------------------------+

      процедура Open имеет четыре реализации, для каждого из вариантов
      работы. Для любого случая перед загрузкой базы данных проверяется
      существование файла с введенным именем (предикат exists). Для загрузки
      базы данных используется стандартный предикат consult. При вызове
      Open(‘1’) загрузка производится в базу bd, при вызове Open(‘2’) в базу
      b1, при вызове Open(‘3’) - в b2.
   7. Сохранение (Store).

      В do(‘2’) меню:
  +--------- Сохранить --------+
  ¦      Что сохранить ?       ¦
  ¦                            ¦
  ¦        1 :-  bd            ¦
  ¦        2 :-  b1            ¦
  ¦        3 :-  b2            ¦
  ¦        4 :-  Меню          ¦
  ¦                            ¦
  ¦      ------| |------       ¦
  +----------------------------+

      Существуют предикаты для записи главной базы и двух временных.
      Используется стандартный предикат save, записывающий в текстовый файл
      факты, связанные с данной БД.
   8. Просмотр (See).

      В do(‘3’) меню:
  +-------- Просмотреть -------+
  ¦      Что просмотреть ?     ¦
  ¦                            ¦
  ¦        1 :-  bd            ¦
  ¦        2 :-  b1            ¦
  ¦        3 :-  b2            ¦
  ¦        4 :-  Меню          ¦
  ¦                            ¦
  ¦      ------| |------       ¦
  +----------------------------+

      Предложения See(‘1’) и See(‘2’) создают новые окна и выводят в них
      найденные записи. После каждой выведенной записи запрашивается нажатие
      клавиши, затем повторяется поиск с помошью стандартного предиката Fail
      или происходит выход из предиката в системное меню.
   9. Добавление (Adding).

      Данный предикат был добавлен в программу по причине облегчения работы
      с ней, хоть и в задании его не было.

      В этой процедуре используется определенная в этой же программе
      процедура Get, запрашивающая с клавиатуры значения для новой записи в
      главной базе данных и стандартная процедура assert, добавляющая новый
      факт в базу данных.
  10. Корректировка (Correct).

      В данной программе существует два варианта корректировки -
      редактирование записи, найденной по номеру артикула и найденной по
      названию детали. В каждой из версий предиката вначале запрашивается
      номер артикула (или название) изменяемой записи, поиск и вывод на
      экран, затем происходит ввод новых значений полей, подтверждаются
      сделанные изменения, удаляется старый факт (retract) и добавляется
      вновь сформированный (assert).
  11. Создания базы по признакам (Indication).

      Indication(‘1’) создает базу b1, а Indication(‘2’) - базу b2. Для
      каждой базы существует отдельный предикат - IndicationB1 и
      IndicationB2. Существуют возможности создания таких баз по следующим
      признакам: по месту хранения, по цене, по дате поступления. В каждом
      из вариантов производится запрос на несколько параметров сразу и поиск
      фактов, отвечающих этим требованиям. При успешном поиске, найденный
      факт добавляется в базу b1 или b2.
  12. Удаление записи по признакам (Del).

      Признаками для удаляемой записи могут служить номер артикула,
      название, а также возможно уничтожить из памяти всю базу данных. Во
      всех вариантах используется процедура удаления записи retract.
  6. Листинг.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %
%
  %  Пакостина Александра.
%
  %         ИР-1-95.
%
  %  Задание 11.
%
  %
%
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  domains

    artikul = integer
    cex, sklad = integer
    name = string
    rubley, kopeek = integer
    year, month, day = integer
    placedom = place(cex, sklad)
    pricedom = price(rubley, kopeek)
    datedom = date(year, month, day)

  database - bd

    characteristick(artikul, placedom, name, pricedom, datedom)

  database - b1

    table1(artikul, placedom, name, pricedom, datedom)

  database - b2

    table2(artikul, placedom, name, pricedom, datedom)

  predicates

    windows
    go
    do(char)
    open(char)
    store(char)
    adding
    correct(char)
    indication(char)
    indicationB1(char)
    indicationB2(char)
    see(char)
    del(char)
    exists(string)
    show(artikul, placedom, name, pricedom, datedom)
    get(artikul, placedom, name, pricedom, datedom)

  goal

    windows, go.

  clauses

    characteristick(1,place(5,6),'Gayka',price(0,45),date(1996,1,4)).
    characteristick(2,place(6,7),'Vint',price(0,65),date(1996,2,45)).

    windows :-
      makewindow(1,52,0,'',24,0,1,80),
      write(' Пакостина Александра.'),
      makewindow(2,52,0,'',0,0,1,80),
      write('           Система управления базой данных \'Характеристика
детали\''),
      makewindow(3,112,1,' Системное меню ',2,17,14,46),
      nl, write('  Выберите вариант работы с базами данных:'), nl,
      nl, write('   1 :-  Загрузить'),
      nl, write('   2 :-  Сохранить'),
      nl, write('   3 :-  Просмотреть'),
      nl, write('   4 :-  Скорректировать'),
      nl, write('   5 :-  Удалить запись по признакам'),
      nl, write('   6 :-  Создать по признакам'),
      nl, write('   7 :-  Добавить'),
      nl, write('   8 :-  Выход в ДОС'), nl,
      nl, write('  ------------------| |------------------'),
      framewindow(126).

    go :-
      gotowindow(3), cursor(11,21),
      readchar(X), do(X).

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%

    do('1') :-
      makewindow(4,18,1,' Загрузить ',5,25,10,30),
      framewindow(19),
      nl, write('      Куда загрузить ?'), nl,
      nl, write('        1 :-  В bd'),
      nl, write('        2 :-  В b1'),
      nl, write('        3 :-  В b2'),
      nl, write('        4 :-  Меню'), nl,
      nl, write('      ------| |------'),
      cursor(7,13), readchar(X), open(X),
      removewindow, go, !.

    do('2') :-
      makewindow(4,18,1,' Сохранить ',5,25,10,30),
      framewindow(19),
      nl, write('      Что сохранить ?'), nl,
      nl, write('        1 :-  bd'),
      nl, write('        2 :-  b1'),
      nl, write('        3 :-  b2'),
      nl, write('        4 :-  Меню'), nl,
      nl, write('      ------| |------'),
      cursor(7,13), readchar(X), store(X),
      removewindow, go, !.

    do('3') :-
      makewindow(4,18,1,' Просмотреть ',5,25,10,30),
      framewindow(19),
      write('      Что просмотреть ?'), nl,
      nl, write('        1 :-  bd'),
      nl, write('        2 :-  b1'),
      nl, write('        3 :-  b2'),
      nl, write('        4 :-  Меню'), nl,
      nl, write('      ------| |------'),
      cursor(7,13), readchar(X), see(X),
      removewindow, go, !.

    do('4') :-
      makewindow(4,18,1,' Корректировка ',5,25,9,30),
      framewindow(19),
      write(' Способ нахождения записи: '), nl,
      nl, write('  1 :-  по номеру артикула'),
      nl, write('  2 :-  по названию'),
      nl, write('  3 :-  Меню'), nl,
      nl, write('      ------| |------'),
      cursor(6,13), readchar(X), correct(X),
      removewindow, go, !.

    do('5') :-
      makewindow(4,18,1,' Удаление записи по признаку ',5,25,10,30),
      framewindow(19),
          write('     Введите признак:'), nl,
      nl, write('  1 :-  По артикулу'),
      nl, write('  2 :-  По названию'),
      nl, write('  3 :-  Удалить всю базу'),
      nl, write('  4 :-  Меню'), nl,
      nl, write('      ------| |------'),
      cursor(7,13), readchar(X), del(X),
      removewindow, go, !.

    do('6') :-
      makewindow(4,18,1,' Создать базу по признаку ',5,25,9,30),
      framewindow(19),
          write('    Какую базу создать ?'), nl,
      nl, write('         1 :-  B1'),
      nl, write('         2 :-  B2'),
      nl, write('         3 :-  Меню'), nl,
      nl, write('      ------| |------'),
      cursor(6,13), readchar(X), indication(X),
      removewindow, go, !.

    do('7') :-
      makewindow(4,18,1,' Добавить запись к главной базе ',7,10,13,60),
      framewindow(19), adding,
      removewindow, go, !.

    do('8') :-
      makewindow(4,95,1,'Запрос',10,29,5,22), nl,
      framewindow(94),
      write('  Выйти ? (Yes/No)'), readchar(X),
      X='y', exit;
      removewindow, go, !.

    do(_) :-
      makewindow(4,76,1,'Ошибка',8,29,5,22),
      framewindow(75), nl,
      write(' Выберите из меню'), readchar(_),
      removewindow, go.

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%

    open('1') :-
      makewindow(5,95,1,'Загрузка bd',7,20,10,40),
      framewindow(94), nl,
      write(' Имя файла : '), readln(FN),
      exists(FN), consult(FN, bd),
      nl, write(' Загружено'), readchar(_), removewindow, !.

    open('2') :-
      makewindow(5,95,1,'Загрузка b1',7,20,10,40),
      framewindow(94), nl,
      write(' Имя файла : '), readln(FN),
      exists(FN), consult(FN, b1),
      nl, write(' Загружено'), readchar(_), removewindow, !.

    open('3') :-
      makewindow(5,95,1,'Загрузка b2',7,20,10,40),
      framewindow(94), nl,
      write(' Имя файла : '), readln(FN),
      exists(FN), consult(FN, b2),
      nl, write(' Загружено'), readchar(_), removewindow, !.

    open('4') :-
      !.

    open(_) :-
      makewindow(5,76,1,'Ошибка',8,29,5,22),
      framewindow(75), nl,
      write(' Выберите из меню'), readchar(_),
      removewindow, removewindow, do('1').

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%

    store('1') :-
      makewindow(5,95,1,'Сохранение bd',7,20,10,40),
      framewindow(94), nl,
      write(' Имя файла : '), readln(FN), save(FN, bd),
      nl, write(' Сохранено'), readchar(_), removewindow, !.

    store('2') :-
      makewindow(5,95,1,'Сохранение b1',7,20,10,40),
      framewindow(94), nl,
      write(' Имя файла : '),
      readln(FN), save(FN, b1),
      nl, write(' Сохранено'), readchar(_), removewindow, !.

    store('3') :-
      makewindow(5,95,1,'Сохранение b2',7,20,10,40),
      framewindow(94), nl,
      write(' Имя файла : '),
      readln(FN), save(FN, b2),
      nl, write(' Сохранено'), readchar(_), removewindow, !.

    store('4') :-
      !.

    store(_) :-
      makewindow(5,76,1,'Ошибка',8,29,5,22),
      framewindow(75), nl,
      write(' Выберите из меню'), readchar(_),
      removewindow, removewindow, do('2').

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%

    see('1') :-
      makewindow(5,95,1,' Просмотр bd ',7,10,9,60),
      framewindow(94), nl,

characteristick(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
      show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
      nl,nl,write('Нажмите ENTER для продолжения...'),
      readchar(_), nl, fail.

    see('1') :-
      removewindow, removewindow, do('3'), !.

    see('2') :-
      makewindow(5,95,1,' Просмотр b1 ',7,10,9,60),
      framewindow(94), nl,
      table1(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
      show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
      nl,nl,write('Нажмите ENTER для продолжения...'),
      readchar(_), nl, fail.

    see('2') :-
      removewindow, removewindow, do('3'), !.

    see('3') :-
      makewindow(5,95,1,' Просмотр b2 ',7,10,9,60),
      framewindow(94), nl,
      table2(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
      show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
      nl,nl,write('Нажмите ENTER для продолжения...'),
      readchar(_), nl, fail.

    see('3') :-
      removewindow, removewindow, do('3'), !.

    see('4') :-
      !.

    see(_) :-
      makewindow(5,76,1,'Ошибка',8,29,5,22),
      framewindow(75), nl,
      write(' Выберите из меню'), readchar(_),
      removewindow, removewindow, do('3').

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%

    correct('1') :-
      makewindow(5,95,1,' Корректировка записи, найденной по артикулу
',7,10,13,60),
      framewindow(94),
      write('Номер артикула: '), readint(X),

characteristick(X,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
      nl, write('Старая запись:'), nl, nl,
      show(X,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)), nl, nl,
      write('Введите новый вариант:'), nl, nl,

get(ArtD,place(NCD,NSD),NameD,price(RubD,KopD),date(YearD,MonD,DayD)), nl,
      clearwindow,

retract(characteristick(X,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day
))),

assert(characteristick(ArtD,place(NCD,NSD),NameD,price(RubD,KopD),date(YearD
,MonD,DayD))),
      removewindow, removewindow, do('4'), !.

    correct('1') :-
      removewindow, removewindow, do('4'), !.

    correct('2') :-
      makewindow(5,95,1,' Корректировка записи, найденной по названию
',7,10,13,60),
      framewindow(94),
      write('Название: '), readln(X),

characteristick(Art,place(NC,NS),X,price(Rub,Kop),date(Year,Mon,Day)),
      nl, write('Старая запись:'), nl, nl,
      show(Art,place(NC,NS),X,price(Rub,Kop),date(Year,Mon,Day)), nl, nl,
      write('Введите новый вариант:'), nl, nl,

get(ArtD,place(NCD,NSD),NameD,price(RubD,KopD),date(YearD,MonD,DayD)), nl,
      clearwindow,

retract(characteristick(Art,place(NC,NS),X,price(Rub,Kop),date(Year,Mon,Day)
)),

assert(characteristick(ArtD,place(NCD,NSD),NameD,price(RubD,KopD),date(YearD
,MonD,DayD))),
      removewindow, removewindow, do('4'), !.

    correct('2') :-
      removewindow, removewindow, do('4'), !.

    correct('3') :-
      !.

    correct(_) :-
      makewindow(5,76,1,'Ошибка',8,29,5,22),
      framewindow(75), nl,
      write(' Выберите из меню'), readchar(_),
      removewindow, removewindow, do('4').

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%

    del('1') :-
      makewindow(5,95,1,' Удаление по артикулу ',7,20,10,40),
      framewindow(94),
      write(' Номер артикула: '), readint(X),

retract(characteristick(X,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day
))), nl,
      write(' Готово.'), readchar(_),
      removewindow,removewindow, do('5'), !.

    del('1') :-
      makewindow(6,76,1,'Ошибка',8,29,5,22),
      framewindow(75), nl,
      write(' Запись не найдена.'), readchar(_),
      removewindow, removewindow, removewindow, do('5').

    del('2') :-
      makewindow(5,95,1,' Удаление по названию ',7,20,10,40),
      framewindow(94),
      write(' Название: '), readln(X),

retract(characteristick(Art,place(NC,NS),X,price(Rub,Kop),date(Year,Mon,Day)
)), nl,
      write(' Готово.'), readchar(_),
      removewindow,removewindow, do('5'), !.

    del('2') :-
      makewindow(6,76,1,'Ошибка',8,29,5,22),
      framewindow(75), nl,
      write(' Запись не найдена.'), readchar(_),
      removewindow, removewindow, removewindow, do('5').

    del('3') :-
      makewindow(5,95,1,' Удаление всей базы ',7,20,10,40),
      framewindow(94),
      retract(characteristick(_,place(_,_),_,price(_,_),date(_,_,_))),
      fail.

    del('3') :-
      write(' База удалена.'), readchar(_),
      removewindow,removewindow, do('5'), !.

    del('4') :-
      !.

    del('_') :-
      makewindow(5,76,1,'Ошибка',8,29,5,22),
      framewindow(75), nl,
      write(' Выберите из меню'), readchar(_),
      removewindow, removewindow, do('5').

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%

    indication('1') :-
      makewindow(5,18,1,' Создать базу B1 по признаку ',8,25,10,30),
      framewindow(19),
          write('      Введите признак:'), nl,
      nl, write('  1 :-  По месту хранения'),
      nl, write('  2 :-  По цене'),
      nl, write('  3 :-  По дате поступления'),
      nl, write('  4 :-  Меню'), nl,
      nl, write('      ------| |------'),
      cursor(7,13), readchar(X), indicationB1(X),
      removewindow, removewindow, do('6'), !.

    indication('2') :-
      makewindow(5,18,1,' Создать базу B2 по признаку ',8,25,10,30),
      framewindow(19),
          write('      Введите признак:'), nl,
      nl, write('  1 :-  По месту хранения'),
      nl, write('  2 :-  По цене'),
      nl, write('  3 :-  По дате поступления'),
      nl, write('  4 :-  Меню'), nl,
      nl, write('      ------| |------'),
      cursor(7,13), readchar(X), indicationB2(X),
      removewindow, removewindow, do('6'), !.

    indication('3') :-
      !.

    indication(_) :-
      makewindow(5,76,1,'Ошибка',8,29,5,22),
      framewindow(75), nl,
      write(' Выберите из меню'), readchar(_),
      removewindow, removewindow, do('6').



    indicationB1('1') :-
      makewindow(6,95,1,' Создание базы B1 по месту хранения ',7,20,10,40),
      framewindow(94), nl,
      write(' Номер цеха: '), readint(X),
      write(' Номер склада: '), readint(Y),

characteristick(Art,place(X,Y),Name,price(Rub,Kop),date(Year,Mon,Day)),

assert(table1(Art,place(X,Y),Name,price(Rub,Kop),date(Year,Mon,Day))),
      fail.

    indicationB1('1') :-
      removewindow, removewindow, indication('1').

    indicationB1('2') :-
      makewindow(6,95,1,' Создание базы B1 по цене ',7,20,10,40),
      framewindow(94), nl,
      write(' Рублей: '), readint(X),
      write(' Копеек: '), readint(Y),
      characteristick(Art,place(NC,NS),Name,price(X,Y),date(Year,Mon,Day)),
      assert(table1(Art,place(NC,NS),Name,price(X,Y),date(Year,Mon,Day))),
      fail.

    indicationB1('2') :-
      removewindow, removewindow, indication('1').

    indicationB1('3') :-
      makewindow(6,95,1,' Создание базы B1 по дате поступления
',7,20,10,40),
      framewindow(94), nl,
      write(' Год: '), readint(X),
      write(' Месяц: '), readint(Y),
      write(' День: '), readint(Z),
      characteristick(Art,place(NC,NS),Name,price(Rub,Kop),date(X,Y,Z)),
      assert(table1(Art,place(NC,NS),Name,price(Rub,Kop),date(X,Y,Z))),
      fail.

    indicationB1('3') :-
      removewindow, removewindow, indication('1').

    indicationB1('4') :-
      !.

    indicationB1(_) :-
      makewindow(6,76,1,'Ошибка',8,29,5,22),
      framewindow(75), nl,
      write(' Выберите из меню'), readchar(_),
      removewindow, removewindow, indication('1').

    indicationB2('1') :-
      makewindow(6,95,1,' Создание базы B2 по месту хранения ',7,20,10,40),
      framewindow(94), nl,
      write(' Номер цеха: '), readint(X),
      write(' Номер склада: '), readint(Y),

characteristick(Art,place(X,Y),Name,price(Rub,Kop),date(Year,Mon,Day)),

assert(table2(Art,place(X,Y),Name,price(Rub,Kop),date(Year,Mon,Day))),
      fail.

    indicationB2('1') :-
      removewindow, removewindow, indication('2').

    indicationB2('2') :-
      makewindow(6,95,1,' Создание базы B2 по цене ',7,20,10,40),
      framewindow(94), nl,
      write(' Рублей: '), readint(X),
      write(' Копеек: '), readint(Y),
      characteristick(Art,place(NC,NS),Name,price(X,Y),date(Year,Mon,Day)),
      assert(table2(Art,place(NC,NS),Name,price(X,Y),date(Year,Mon,Day))),
      fail.

    indicationB2('2') :-
      removewindow, removewindow, indication('2').

    indicationB2('3') :-
      makewindow(6,95,1,' Создание базы B2 по дате поступления
',7,20,10,40),
      framewindow(94), nl,
      write(' Год: '), readint(X),
      write(' Месяц: '), readint(Y),
      write(' День: '), readint(Z),
      characteristick(Art,place(NC,NS),Name,price(Rub,Kop),date(X,Y,Z)),
      assert(table2(Art,place(NC,NS),Name,price(Rub,Kop),date(X,Y,Z))),
      fail.

    indicationB2('3') :-
      removewindow, removewindow, indication('2').

    indicationB2('4') :-
      !.

    indicationB2(_) :-
      makewindow(6,76,1,'Ошибка',8,29,5,22),
      framewindow(75), nl,
      write(' Выберите из меню'), readchar(_),
      removewindow, removewindow, indication('2').

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%

    adding :-
      get(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
      nl, write(' Вы ввели :'),
      nl, show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
nl,
      nl, write(' Добавить ? (Yes/No)'), readchar(A),
      A='y',

assert(characteristick(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Da
y)));
      !.

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%

    exists(FN) :-
      existfile(FN);
      makewindow(6,76,1,'Ошибка',10,25,5,30), nl,
      framewindow(75),
      write(' Файл ',FN,' не найден!'),
      readchar(_), removewindow,
      removewindow, removewindow, do('1').

    show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)) :-
          write(' Артикул                           : ',Art),
      nl, write(' Местоположение (Цех, Склад)       : ',NC,', ',NS),
      nl, write(' Наименование товара               : ',Name),
      nl, write(' Стоимость (Рублей:Копеек)         : ',Rub,':',Kop),
      nl, write(' Дата поступления (Год-Месяц-День) : ',Year,'-',Mon,'-
',Day).

    get(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)) :-
      write(' Артикул                           : '), readint(Art),
      write(' Местоположение                    : '), nl,
      write('        Цех                        : '), readint(NC),
      write('        Склад                      : '), readint(NS),
      write(' Наименование товара               : '), readln(Name),
      write(' Стоимость                         : '), nl,
      write('        Рублей                     : '), readint(Rub),
      write('        Копеек                     : '), readint(Kop),
      write(' Дата поступления                  : '), nl,
      write('        Год                        : '), readint(Year),
      write('        Месяц                      : '), readint(Mon),
      write('        День                       : '), readint(Day).


7. Отладка программы.

  Открытие БД.

  +-------------- Системное меню --------------+
¦  Выберите вариант работы с базами данных:  ¦
¦   1 :-+--------- Загрузить --------+       ¦
¦   2 :-¦      Куда загрузить ?      ¦       ¦
¦  +--------------Загрузка bd-------------+  ¦
¦  ¦                                      ¦  ¦
¦  ¦ Имя файла : data                     ¦  ¦
¦  ¦                                      ¦  ¦
¦  ¦ Загружено                            ¦  ¦
+--¦                                      ¦--+
   +--------------------------------------+

  Сохранение БД.

  +-------------- Системное меню --------------+
¦  Выберите вариант работы с базами данных:  ¦
¦                                            ¦
¦   1 :-+--------- Сохранить --------+       ¦
¦   2 :-¦      Что сохранить ?       ¦       ¦
¦  +-------------Сохранение b2------------+  ¦
¦  ¦                                      ¦  ¦
¦  ¦ Имя файла : data2                    ¦  ¦
¦  ¦                                      ¦  ¦
¦  ¦ Сохранено                            ¦  ¦
+--¦                                      ¦--+
   +--------------------------------------+

  Просмотр.

      +-------------- Системное меню --------------+
       ¦  Выберите вариант работы с базами данных:  ¦
       ¦                                            ¦
       ¦   1 :-+-------- Просмотреть -------+       ¦
       ¦   2 :-¦      Что просмотреть ?     ¦       ¦
+----------------------- Просмотр bd ----------------------+
¦ Артикул                           : 2                    ¦
¦ Местоположение (Цех, Склад)       : 6, 7                 ¦
¦ Наименование товара               : Vint                 ¦
¦ Стоимость (Рублей:Копеек)         : 0:65                 ¦
¦ Дата поступления (Год-Месяц-День) : 1996-2-45            ¦
¦                                                          ¦
¦Нажмите ENTER для продолжения...                          ¦
+----------------------------------------------------------+

  Корректировка.

      +-------------- Системное меню --------------+
       ¦  Выберите вариант работы с базами данных:  ¦
       ¦                                            ¦
       ¦   1 :-+------- Корректировка ------+       ¦
       ¦   2 :-¦ Способ нахождения записи:  ¦       ¦
+------- Корректировка записи, найденной по названию ------+
¦Старая запись:                                            ¦
¦                                                          ¦
¦ Артикул                           : 1                    ¦
¦ Местоположение (Цех, Склад)       : 5, 6                 ¦
¦ Наименование товара               : Gayka                ¦
¦ Стоимость (Рублей:Копеек)         : 0:45                 ¦
¦ Дата поступления (Год-Месяц-День) : 1996-1-4             ¦
¦                                                          ¦
¦Введите новый вариант:                                    ¦
¦                                                          ¦
¦ Артикул                           :                      ¦
+----------------------------------------------------------+

  Удаление.

  +-------------- Системное меню --------------+
¦  Выберите вариант работы с базами данных:  ¦
¦                                            ¦
¦   1 :-+ Удаление записи по признаку+       ¦
¦   2 :-¦     Введите признак:       ¦       ¦
¦  +-------- Удаление по артикулу --------+  ¦
¦  ¦ Номер артикула: 1                    ¦  ¦
¦  ¦                                      ¦  ¦
¦  ¦ Готово.                              ¦  ¦
+--¦                                      ¦--+
   +--------------------------------------+

  Создание по признакам.

  +-------------- Системное меню --------------+
¦  Выберите вариант работы с базами данных:  ¦
¦                                            ¦
¦   1 :-+- Создать базу по признаку -+       ¦
¦   2 :-¦    Какую базу создать ?    ¦       ¦
¦  +------ Создание базы B1 по цене ------+  ¦
¦  ¦                                      ¦  ¦
¦  ¦ Рублей: 0                            ¦  ¦
¦  ¦ Копеек: 45                           ¦  ¦
+--¦                                      ¦--+
   +--------------------------------------+
        +----------------------------+

  Добавление.

      +-------------- Системное меню --------------+
       ¦  Выберите вариант работы с базами данных:  ¦
       ¦                                            ¦
       ¦   1 :-  Загрузить                          ¦
       ¦   2 :-  Сохранить                          ¦
+------------- Добавить запись к главной базе -------------+
¦ Местоположение                    :                      ¦
¦        Цех                        : 5                    ¦
¦        Склад                      : 6                    ¦
¦ Наименование товара               : Shayba               ¦
¦ Стоимость                         :                      ¦
¦        Рублей                     : 1                    ¦
¦        Копеек                     : 2                    ¦
¦ Дата поступления                  :                      ¦
¦        Год                        : 1996                 ¦
¦        Месяц                      : 23                   ¦
¦        День                       : 3                    ¦
+----------------------------------------------------------+
8. Инструкция пользователя и решение контрольных примеров.

  Решение контрольных примеров основывается на том, что было сделано в
  отладке программы и может быть изучено по вышестоящей части (7.).

  Для работы с программой необходимо выбирать из предлагаемых меню пункты
  путем нажатия на соответствующие цифры. При появлении подменю повторить
  операцию, при запросе на имя файла - ввести строку, определяющую имя
  файла, при запросе на символ, нажать соответствующую клавишу на
  клавиатуре (не забывайте, пожалуйста об языковой раскладке клавиатуры и
  состоянии клавиши CAPSLOCK). Также в нескольких процедурах производится
  подтверждение (Yes/No - Да/Нет) - необходимо переключиться на английскую
  раскладку и нажать соответствующую клавишу в нижнем регистре.
9. Заключение.

  Язык программирования Пролог безусловно может быть использован для
  написания подобных информационно-справочных систем, так как он позволяет
  легко и быстро создавать логические запросы к базам данных, что
  безусловно выделяет его среди остальных языков программирования.
10. Список литературы.

  1. К. Кларк. “Введение в логическое программирование на Micro Prologe”.

  2. К. Хоггер. “Введение в логическое программирование”.

ref.by 2006—2022
contextus@mail.ru