Задание
№ 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)),
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,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.
К.
Хоггер.
“Введение
в логическое
программирование”.
ГОСУДАРСТВЕННЫЙ
КОМИТЕТ РОССИЙСКОЙ
ФЕДЕРАЦИИ
ПО
ВЫСШЕМУ ОБРАЗОВАНИЮ
МОСКОВСКИЙ
ГОСУДАРСТВЕННЫЙ
ИНСТИТУТ
РАДИОТЕХНИКИ,
ЭЛЕКТРОНИКИ
И АВТОМАТИКИ
( ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ
)
Факультет
Кибернетики.
Кафедра
интеллектуальных
технологий
и систем.
Курсовая
работа.
Тема:
“Разработка
информационно
- справочной
системы”
по дисциплине
“Логическое
программирование”.
(III
семестр)
|
Задание:
11
Студент:
Пакостина
Александра
Группа:
ИР-1-95
Руководитель:
доцент
кафедры Холкин
Игорь Иванович
|
1996
|