Загрузить архив: | |
Файл: ref-3514.zip (31kb [zip], Скачиваний: 70) скачать |
Задание № 11
на курсовое проектирование
по дисциплине “Логическое программирование”
студенту Пакостиной Александре Викторовне.
Группа ИР-1-95.
1. Тема исследования: “Разработка информационно - справочной системы”.
2. Исходные данные: База данных BD, включающая записи вида:
Характеристика детали |
||||||||||||||||||
№ |
Место хранения |
Название |
Цена |
Дата поступления |
||||||||||||||
артикула |
№ цеха |
№склада |
детали |
руб |
коп |
год |
месяц |
число |
||||||||||
Язык программирования: Пролог.
3. Перечень вопросов, подлежащих разработке:
3.1. Разработать меню, обеспечивающее взаимодействие пользователя с системой, в соответствии с заданием, предусмотрев режимы:
3.2. Разработать процедуры:
· уничтожения записей по признакам;
· загрузки;
· сохранения;
· просмотра;
· уничтожения;
3.3. Предусмотреть создание из базы BD новых баз данных B1, B2, характеризуемых признаками, задаваемыми пользователем.
4.
Перечень графических
материалов:
4.1. Структурная
схема меню:
4.2. Структурная схема программы:
5. Календарный план работы над курсовой работой:
5.1. Получение задания: 4.10.96.
5.2. Анализ задания, постановка задачи, подбор и изучение литературы: 18.10.96.
5.3. Разработка меню и структуры программы: 25.10.96.
5.4. Разработка процедур информационно-справочной системы: 15.11.96.
5.5. Отладка программы: 29.11.96.
5.6. Оформление пояснительной записки и сдача работы на правку: 13.12.96.
5.7. Защита курсовой работы: 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. Разработка процедур:
5.1. Загрузка
базы данных(Open).
В do(‘1’) имеется
меню:
+--------- Загрузить --------+
¦ Куда загрузить ? ¦
¦ ¦
¦ 1 :-В bd ¦
¦ 2 :-В b1 ¦
¦ 3 :-В b2 ¦
¦ 4 :-Меню ¦
¦ ¦
¦ ------| |------ ¦
+----------------------------+
процедура Open
имеет четыре реализации, для каждого из вариантов работы. Для любого случая
перед загрузкой базы данных проверяется существование файла с введенным именем
(предикат exists).
Для загрузки базы данных используется стандартный предикат consult. При вызове Open(‘1’) загрузка производится в базу bd, при вызове Open(‘2’)
в базу b1,
при вызове Open(‘3’) - в b2.
5.2. Сохранение
(Store).
В do(‘2’)
ìåíþ:
+--------- Сохранить --------+
¦ Что сохранить ? ¦
¦ ¦
¦ 1 :-bd¦
¦ 2 :-b1¦
¦ 3 :-b2 ¦
¦ 4 :-Меню ¦
¦ ¦
¦ ------| |------ ¦
+----------------------------+
Существуют
предикаты для записи главной базы и двух временных. Используется стандартный предикат
save,
записывающий в текстовый файл факты, связанные с данной БД.
5.3. Просмотр (See).
В do(‘3’)
меню:
+-------- Просмотреть -------+
¦ Что просмотреть ? ¦
¦ ¦
¦ 1 :-bd ¦
¦ 2 :-b1 ¦
¦ 3 :-b2 ¦
¦ 4 :-Меню ¦
¦ ¦
¦ ------| |------ ¦
+----------------------------+
Предложения See(‘1’) и See(‘2’) создают новые окна и выводят
в них найденные записи. После каждой выведенной записи запрашивается нажатие
клавиши, затем повторяется поиск с помошью стандартного предиката Fail или происходит выход из предиката в
системное меню.
5.4. Добавление
(Adding).
Данный предикат был добавлен в
программу по причине облегчения работы с ней, хоть и в задании его не было.
В этой процедуре используется определенная в этой
же программе процедура Get,
запрашивающая с клавиатуры значения для новой записи в главной базе данных и
стандартная процедура assert, добавляющая
новый факт в базу данных.
5.5. Корректировка
(Correct).
В данной программе существует два
варианта корректировки - редактирование записи, найденной по номеру артикула и
найденной по названию детали. В каждой из версий предиката вначале запрашивается
номер артикула (или название) изменяемой записи, поиск и вывод на экран, затем
происходит ввод новых значений полей, подтверждаются сделанные изменения,
удаляется старый факт (retract) и
добавляется вновь сформированный (assert).
5.6. Создания
базы по признакам (Indication).
Indication(‘1’) создает
базу b1, а Indication(‘2’) - базу b2. Для каждой базы существует
отдельный предикат - IndicationB1 и IndicationB2. Существуют возможности
создания таких баз по следующим признакам: по месту хранения, по цене, по дате
поступления. В каждом из вариантов производится запрос на несколько параметров
сразу и поиск фактов, отвечающих этим требованиям. При успешном поиске,
найденный факт добавляется в базу b1 или b2.
5.7. Удаление
записи по признакам (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).
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. К.
Хоггер. “Введение в логическое
программирование”.