Задание № 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
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |