Задание
№ 11
на курсовое
проектирование
по дисциплине
“Логическое
программирование”
студенту
Пакостиной
Александре
Викторовне.
Группа ИР-1-95.
Тема
исследования:
“Разработка
информационно
- справочной
системы”.
Исходные
данные:
База данных
BD,
включающая
записи вида:
Характеристика  | |||||||||||||||||||
| № | Место  | 
  | Цена  | Дата  | |||||||||||||||
артикула  | № цеха  | 
  | детали  | руб  | коп  | год  | месяц  | число  | |||||||||||
Язык
программирования:
Пролог.
Перечень
вопросов, подлежащих
разработке:
Разработать
меню, обеспечивающее
взаимодействие
пользователя
с системой, в
соответствии
с заданием,
предусмотрев
режимы:
Разработать
процедуры:
уничтожения
записей по
признакам;
загрузки;
сохранения;
просмотра;
уничтожения;
3.3.
Предусмотреть
создание из
базы BD
новых баз данных
B1,
B2,
характеризуемых
признаками,
задаваемыми
пользователем.
Перечень
графических
материалов:4.1.
Структурная
схема меню:
Структурная
схема программы:
Календарный
план работы
над курсовой
работой:
Получение
задания: 4.10.96.
Анализ
задания, постановка
задачи, подбор
и изучение
литературы:
18.10.96.
Разработка
меню и структуры
программы:
25.10.96.
Разработка
процедур
информационно-справочной
системы: 15.11.96.
Отладка
программы:
29.11.96.
Оформление
пояснительной
записки и сдача
работы на правку:
13.12.96.
Защита
курсовой работы:
20.12.96.
Руководитель:
Холкин И.И.
____________
Студент:
Пакостина А.В.
____________
Описание
Понятие
об информационно-справочных
системах и их
программная
реализация.Информационно-справочные
системы предназначены
для управления
различными
информационными
и справочными
массивами, в
число которых
входят и базы
данных. Эти
системы организовывают
определенный
интерфейс
пользователя
с функциями
обработки
информации
самой системы.
Набор возможностей
таких систем
обычно включает
в себя коррекцию
структуры
используемого
объекта (инкапсулирующего
информацию),
работа с его
составляющими
- дополнение,
редактирование,
удаление (в
случае, когда
роль такого
объекта выполняет
база данных,
это - записи),
простой просмотр,
поиск элементов.
Также необходимо
обеспечить
для такой системы
и функции
постоянного
надежного
хранения - в
простейшем
случае, это -
запись базы
из памяти в
файл на диске
и считывание
оного с диска
в память.Программная
реализация
мало отличается
от подобной
концепции, но
конкретизирует
абстрактные
операции в
конкретные
процедуры и
функции (или
же объекты) и
зависит полностью
от возможностей
языка, поставленной
задачи и искусства
программиста.
Базы
данных и способы
их представления.Общая
концепция
теории простых
баз данных
подразумевает
наличие некоторого
множества
таблиц и являющихся,
собственно,
базой данных,
имеющей определенный
идентификатор
(имя). Каждая
таблица состоит
из n-го
количества
записей (величина
n
зависит от
возможностей
конкретной
системы), каждая
из которых
имеет одну и
ту же структуру
(в рамках одной
таблицы) и может
объединять
в себе несколько
разнородных
объектов (их
количество
также зависит
целиком и полностью
от возможностей
системы).Работа
с базой данных
предполагает
в себе возможность
работать с
записями (либо
изменять структуру
таблиц).В языке
программирования
Пролог база
данных описывается
в отдельном
разделе, именуемом
database.
Таких разделов
может быть
несколько в
одной программе
и каждый из
них, если они
действительно
представляют
собой разные
БД, должны иметь
разные имена.
В случае отсутствия
имени у базы
данных, ей дается
имя по умолчанию
- dbasedom.Работу
с загружаемыми
базами данных
в Прологе реализуют
следующие
стандартные
предикаты:
assert
- добавить запись
в БД, retract
-
удалить указанную
запись, save
- сохранить
указанную БД
в файле, consult
- загрузить БД
из файла в память.В
данной работе
объявлена
главная база
данных bd,
имеющая предикат
characteristick,
и две временные
базы b1,
b2 с
предикатами
table1,
table2.
Разработка
системного
меню.Системное
меню объединяет
в себе доступ
ко всем процедурам
информационно
- справочной
системы. Разработка
меню отталкивается
от имеющихся
функций системы
(предикатов).
Поскольку
объявлен предикат
do
(char),
служащий буфером
между системным
меню и существующими
процедурами,
он имеет в себе
либо подменю
с выбором режимов
работы имеющихся
предикатов,
либо их вызов
с последующим
возвратом в
системное
меню:+--------------
Системное меню
--------------+
¦
 Выберите вариант
работы с базами
данных:  ¦
¦
                                           ¦
¦
  1 :-  Загрузить
                         ¦
¦
  2 :-  Сохранить
                         ¦
¦
  3 :-  Просмотреть
                       ¦
¦
  4 :-  Скорректировать
                   ¦
¦
  5 :-  Удалить запись
по признакам
       ¦
¦
  6 :-  Создать по
признакам     
         ¦
¦
  7 :-  Добавить    
                      ¦
¦
  8 :-  Выход в ДОС
                       ¦
¦
                                           ¦
¦
 ------------------| |------------------   ¦
+--------------------------------------------+
Разработка
структуры
программы.Системное
меню вызывает
только предикаты
do
(),
определенные
для каждой из
необходимых
задач (номер
режим полностью
совпадает с
нумерацией
в главном меню).
Каждая из реализаций
этого предиката
выводит меню,
либо сразу
вызывает
соответствующие
процедуры:
open,
store, adding, correct, see, del, indication.
Процедура
Indication
выводит дополнительное
подменю и вызывает
либо IndicationB1,
либо
IndicationB2
в зависимости
от выбора
пользователя.
Do(‘8’)
завершает
работу с системой.
Разработка
процедур:
Загрузка
базы данных
(Open).В
do(‘1’)
имеется меню:+---------
Загрузить
--------+
¦
     Куда загрузить
?      ¦
¦
                           ¦
¦
       1 :-  В bd          ¦
¦
       2 :-  В b1          ¦
¦
       3 :-  В b2          ¦
¦
       4 :-  Меню          ¦
¦
                           ¦
¦
     ------| |------       ¦
+----------------------------+процедура
Open
имеет четыре
реализации,
для каждого
из вариантов
работы. Для
любого случая
перед загрузкой
базы данных
проверяется
существование
файла с введенным
именем (предикат
exists).
Для загрузки
базы данных
используется
стандартный
предикат consult.
При вызове
Open(‘1’)
загрузка
производится
в базу bd,
при вызове
Open(‘2’)
в
базу b1,
при вызове
Open(‘3’)
-
в
b2.
Сохранение
(Store).В
do(‘2’)
меню:
+---------
Сохранить
--------+
¦
     Что сохранить
?       ¦
¦
                           ¦
¦
       1 :-  bd            ¦
¦
       2 :-  b1            ¦
¦
       3 :-  b2            ¦
¦
       4 :-  Меню          ¦
¦
                           ¦
¦
     ------| |------       ¦
+----------------------------+Существуют
предикаты для
записи главной
базы и двух
временных.
Используется
стандартный
предикат save,
записывающий
в текстовый
файл факты,
связанные с
данной БД.
Просмотр
(See).В
do(‘3’)
меню:
+--------
Просмотреть
-------+
¦
     Что просмотреть
?     ¦
¦
                           ¦
¦
       1 :-  bd            ¦
¦
       2 :-  b1            ¦
¦
       3 :-  b2            ¦
¦
       4 :-  Меню          ¦
¦
                           ¦
¦
     ------| |------       ¦
+----------------------------+Предложения
See(‘1’)
и
See(‘2’)
создают новые
окна и выводят
в них найденные
записи. После
каждой выведенной
записи запрашивается
нажатие клавиши,
затем повторяется
поиск с помошью
стандартного
предиката Fail
или происходит
выход из предиката
в системное
меню.
Добавление
(Adding).Данный
предикат был
добавлен в
программу по
причине облегчения
работы с ней,
хоть и в задании
его не было.В
этой процедуре
используется
определенная
в этой же программе
процедура Get,
запрашивающая
с клавиатуры
значения для
новой записи
в главной базе
данных и стандартная
процедура
assert,
добавляющая
новый факт в
базу данных.
Корректировка
(Correct).В
данной программе
существует
два варианта
корректировки
- редактирование
записи, найденной
по номеру артикула
и найденной
по названию
детали. В каждой
из версий предиката
вначале запрашивается
номер артикула
(или название)
изменяемой
записи, поиск
и вывод на экран,
затем происходит
ввод новых
значений полей,
подтверждаются
сделанные
изменения,
удаляется
старый факт
(retract)
и добавляется
вновь сформированный
(assert).
Создания
базы по признакам
(Indication).Indication(‘1’)
создает
базу b1,
а Indication(‘2’)
- базу b2.
Для каждой
базы существует
отдельный
предикат -
IndicationB1
и
IndicationB2.
Существуют
возможности
создания таких
баз по следующим
признакам: по
месту хранения,
по цене, по дате
поступления.
В каждом из
вариантов
производится
запрос на несколько
параметров
сразу и поиск
фактов, отвечающих
этим требованиям.
При успешном
поиске, найденный
факт добавляется
в базу b1
или
b2.
Удаление
записи по признакам
(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)),
<
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,Day)));
   !.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 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).
Отладка
программы.Открытие
БД.+--------------
Системное меню
--------------+
¦
 Выберите вариант
работы с базами
данных:  ¦
¦
  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       
            ¦
+----------------------------------------------------------+
Инструкция
	пользователя
	и решение
	контрольных
	примеров.Решение
	контрольных
	примеров
	основывается
	на том, что было
	сделано в отладке
	программы и
	может быть
	изучено по
	вышестоящей
	части (7.).Для
	работы с программой
	необходимо
	выбирать из
	предлагаемых
	меню пункты
	путем нажатия
	на соответствующие
	цифры. При
	появлении
	подменю повторить
	операцию, при
	запросе на
	имя файла - ввести
	строку, определяющую
	имя файла, при
	запросе на
	символ, нажать
	соответствующую
	клавишу на
	клавиатуре
	(не забывайте,
	пожалуйста
	об языковой
	раскладке
	клавиатуры
	и состоянии
	клавиши CAPSLOCK).
	Также в нескольких
	процедурах
	производится
	подтверждение
	(Yes/No
	- Да/Нет)
	- необходимо
	переключиться
	на английскую
	раскладку и
	нажать соответствующую
	клавишу в нижнем
	регистре.
Заключение.Язык
	программирования
	Пролог безусловно
	может быть
	использован
	для написания
	подобных
	информационно-справочных
	систем, так
	как он позволяет
	легко и быстро
	создавать
	логические
	запросы к базам
	данных, что
	безусловно
	выделяет его
	среди остальных
	языков программирования.
	
	
Список
	литературы.1.
	К.
	Кларк.
	“Введение
	в логическое
	программирование
	на Micro
	Prologe”.2.
	К.
	Хоггер.
	“Введение
	в логическое
	программирование”.
	
17
ГОСУДАРСТВЕННЫЙ
КОМИТЕТ РОССИЙСКОЙ
ФЕДЕРАЦИИ
ПО
ВЫСШЕМУ ОБРАЗОВАНИЮ
МОСКОВСКИЙ
ГОСУДАРСТВЕННЫЙ
ИНСТИТУТ
РАДИОТЕХНИКИ,
ЭЛЕКТРОНИКИ
И АВТОМАТИКИ
( ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ
)
Факультет
Кибернетики.
Кафедра
интеллектуальных
технологий
и систем.
Курсовая
работа.
Тема:
“Разработка
информационно
- справочной
системы”
по дисциплине
“Логическое
программирование”.
(III
семестр)
 
 
 
  | 
1996