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

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

Задание № 11

на курсовое проектирование

по дисциплине “Логическое программирование”

студенту Пакостиной Александре Викторовне.

Группа ИР-1-95.

1. Тема исследования: “Разработка информационно - справочной системы”.

2. Исходные данные: База данных BD, включающая записи вида:

|Характеристика детали | | | | | | | | |

|№ |Место |Назван|Цена |Дата поступления | | | | |

| |хранения |ие | | | | | | |

|артику|№ цеха|№склад|детали|руб |коп |год |месяц |число |

|ла | |а | | | | | | |

| | | | | | | | | |

Язык программирования: Пролог.

3. Перечень вопросов, подлежащих разработке:

4. Разработать меню, обеспечивающее взаимодействие пользователя с

системой, в соответствии с заданием, предусмотрев режимы:

5. Разработать процедуры:

. уничтожения записей по признакам;

. загрузки;

. сохранения;

. просмотра;

. уничтожения;

3.3. Предусмотреть создание из базы BD новых баз данных B1, B2,

характеризуемых признаками, задаваемыми пользователем.

4. Перечень графических материалов:

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

[pic]

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

[pic]

5. Календарный план работы над курсовой работой:

6. Получение задания: 4.10.96.

7. Анализ задания, постановка задачи, подбор и изучение литературы:

18.10.96.

8. Разработка меню и структуры программы: 25.10.96.

9. Разработка процедур информационно-справочной системы: 15.11.96.

10. Отладка программы: 29.11.96.

11. Оформление пояснительной записки и сдача работы на правку: 13.12.96.

12. Защита курсовой работы: 20.12.96.

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

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

Описание

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

реализация.

Информационно-справочные системы предназначены для управления различными

информационными и справочными массивами, в число которых входят и базы

данных. Эти системы организовывают определенный интерфейс пользователя с

функциями обработки информации самой системы. Набор возможностей таких

систем обычно включает в себя коррекцию структуры используемого объекта

(инкапсулирующего информацию), работа с его составляющими - дополнение,

редактирование, удаление (в случае, когда роль такого объекта выполняет

база данных, это - записи), простой просмотр, поиск элементов. Также

необходимо обеспечить для такой системы и функции постоянного надежного

хранения - в простейшем случае, это - запись базы из памяти в файл на

диске и считывание оного с диска в память.

Программная реализация мало отличается от подобной концепции, но

конкретизирует абстрактные операции в конкретные процедуры и функции (или

же объекты) и зависит полностью от возможностей языка, поставленной

задачи и искусства программиста.

2. Базы данных и способы их представления.

Общая концепция теории простых баз данных подразумевает наличие

некоторого множества таблиц и являющихся, собственно, базой данных,

имеющей определенный идентификатор (имя). Каждая таблица состоит из n-го

количества записей (величина n зависит от возможностей конкретной

системы), каждая из которых имеет одну и ту же структуру (в рамках одной

таблицы) и может объединять в себе несколько разнородных объектов (их

количество также зависит целиком и полностью от возможностей системы).

Работа с базой данных предполагает в себе возможность работать с записями

(либо изменять структуру таблиц).

В языке программирования Пролог база данных описывается в отдельном

разделе, именуемом database. Таких разделов может быть несколько в одной

программе и каждый из них, если они действительно представляют собой

разные БД, должны иметь разные имена. В случае отсутствия имени у базы

данных, ей дается имя по умолчанию - dbasedom.

Работу с загружаемыми базами данных в Прологе реализуют следующие

стандартные предикаты: assert - добавить запись в БД, retract - удалить

указанную запись, save - сохранить указанную БД в файле, consult -

загрузить БД из файла в память.

В данной работе объявлена главная база данных bd, имеющая предикат

characteristick, и две временные базы b1, b2 с предикатами table1,

table2.

3. Разработка системного меню.

Системное меню объединяет в себе доступ ко всем процедурам информационно

- справочной системы. Разработка меню отталкивается от имеющихся функций

системы (предикатов). Поскольку объявлен предикат do (char), служащий

буфером между системным меню и существующими процедурами, он имеет в себе

либо подменю с выбором режимов работы имеющихся предикатов, либо их вызов

с последующим возвратом в системное меню:

+-------------- Системное меню --------------+

¦ Выберите вариант работы с базами данных: ¦

¦ ¦

¦ 1 :- Загрузить ¦

¦ 2 :- Сохранить ¦

¦ 3 :- Просмотреть ¦

¦ 4 :- Скорректировать ¦

¦ 5 :- Удалить запись по признакам ¦

¦ 6 :- Создать по признакам ¦

¦ 7 :- Добавить ¦

¦ 8 :- Выход в ДОС ¦

¦ ¦

¦ ------------------| |------------------ ¦

+--------------------------------------------+

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

Системное меню вызывает только предикаты do (), определенные для

каждой из необходимых задач (номер режим полностью совпадает с нумерацией

в главном меню). Каждая из реализаций этого предиката выводит меню, либо

сразу вызывает соответствующие процедуры: open, store, adding, correct,

see, del, indication. Процедура Indication выводит дополнительное подменю

и вызывает либо IndicationB1, либо IndicationB2 в зависимости от выбора

пользователя. Do(‘8’) завершает работу с системой.

5. Разработка процедур:

6. Загрузка базы данных (Open).

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

+--------- Загрузить --------+

¦ Куда загрузить ? ¦

¦ ¦

¦ 1 :- В bd ¦

¦ 2 :- В b1 ¦

¦ 3 :- В b2 ¦

¦ 4 :- Меню ¦

¦ ¦

¦ ------| |------ ¦

+----------------------------+

процедура Open имеет четыре реализации, для каждого из вариантов

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

существование файла с введенным именем (предикат exists). Для загрузки

базы данных используется стандартный предикат consult. При вызове

Open(‘1’) загрузка производится в базу bd, при вызове Open(‘2’) в базу

b1, при вызове Open(‘3’) - в b2.

7. Сохранение (Store).

В do(‘2’) меню:

+--------- Сохранить --------+

¦ Что сохранить ? ¦

¦ ¦

¦ 1 :- bd ¦

¦ 2 :- b1 ¦

¦ 3 :- b2 ¦

¦ 4 :- Меню ¦

¦ ¦

¦ ------| |------ ¦

+----------------------------+

Существуют предикаты для записи главной базы и двух временных.

Используется стандартный предикат save, записывающий в текстовый файл

факты, связанные с данной БД.

8. Просмотр (See).

В do(‘3’) меню:

+-------- Просмотреть -------+

¦ Что просмотреть ? ¦

¦ ¦

¦ 1 :- bd ¦

¦ 2 :- b1 ¦

¦ 3 :- b2 ¦

¦ 4 :- Меню ¦

¦ ¦

¦ ------| |------ ¦

+----------------------------+

Предложения See(‘1’) и See(‘2’) создают новые окна и выводят в них

найденные записи. После каждой выведенной записи запрашивается нажатие

клавиши, затем повторяется поиск с помошью стандартного предиката Fail

или происходит выход из предиката в системное меню.

9. Добавление (Adding).

Данный предикат был добавлен в программу по причине облегчения работы

с ней, хоть и в задании его не было.

В этой процедуре используется определенная в этой же программе

процедура Get, запрашивающая с клавиатуры значения для новой записи в

главной базе данных и стандартная процедура assert, добавляющая новый

факт в базу данных.

10. Корректировка (Correct).

В данной программе существует два варианта корректировки -

редактирование записи, найденной по номеру артикула и найденной по

названию детали. В каждой из версий предиката вначале запрашивается

номер артикула (или название) изменяемой записи, поиск и вывод на

экран, затем происходит ввод новых значений полей, подтверждаются

сделанные изменения, удаляется старый факт (retract) и добавляется

вновь сформированный (assert).

11. Создания базы по признакам (Indication).

Indication(‘1’) создает базу b1, а Indication(‘2’) - базу b2. Для

каждой базы существует отдельный предикат - IndicationB1 и

IndicationB2. Существуют возможности создания таких баз по следующим

признакам: по месту хранения, по цене, по дате поступления. В каждом

из вариантов производится запрос на несколько параметров сразу и поиск

фактов, отвечающих этим требованиям. При успешном поиске, найденный

факт добавляется в базу b1 или b2.

12. Удаление записи по признакам (Del).

Признаками для удаляемой записи могут служить номер артикула,

название, а также возможно уничтожить из памяти всю базу данных. Во

всех вариантах используется процедура удаления записи retract.

6. Листинг.

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

%

%

% Пакостина Александра.

%

% ИР-1-95.

%

% Задание 11.

%

%

%

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

domains

artikul = integer

cex, sklad = integer

name = string

rubley, kopeek = integer

year, month, day = integer

placedom = place(cex, sklad)

pricedom = price(rubley, kopeek)

datedom = date(year, month, day)

database - bd

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

database - b1

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

database - b2

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

predicates

windows

go

do(char)

open(char)

store(char)

adding

correct(char)

indication(char)

indicationB1(char)

indicationB2(char)

see(char)

del(char)

exists(string)

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

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

goal

windows, go.

clauses

characteristick(1,place(5,6),"Gayka",price(0,45),date(1996,1,4)).

characteristick(2,place(6,7),"Vint",price(0,65),date(1996,2,45)).

windows :-

makewindow(1,52,0,"",24,0,1,80),

write(" Пакостина Александра."),

makewindow(2,52,0,"",0,0,1,80),

write(" Система управления базой данных \"Характеристика

детали\""),

makewindow(3,112,1," Системное меню ",2,17,14,46),

nl, write(" Выберите вариант работы с базами данных:"), nl,

nl, write(" 1 :- Загрузить"),

nl, write(" 2 :- Сохранить"),

nl, write(" 3 :- Просмотреть"),

nl, write(" 4 :- Скорректировать"),

nl, write(" 5 :- Удалить запись по признакам"),

nl, write(" 6 :- Создать по признакам"),

nl, write(" 7 :- Добавить"),

nl, write(" 8 :- Выход в ДОС"), nl,

nl, write(" ------------------| |------------------"),

framewindow(126).

go :-

gotowindow(3), cursor(11,21),

readchar(X), do(X).

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

%%%

do('1') :-

makewindow(4,18,1," Загрузить ",5,25,10,30),

framewindow(19),

nl, write(" Куда загрузить ?"), nl,

nl, write(" 1 :- В bd"),

nl, write(" 2 :- В b1"),

nl, write(" 3 :- В b2"),

nl, write(" 4 :- Меню"), nl,

nl, write(" ------| |------"),

cursor(7,13), readchar(X), open(X),

removewindow, go, !.

do('2') :-

makewindow(4,18,1," Сохранить ",5,25,10,30),

framewindow(19),

nl, write(" Что сохранить ?"), nl,

nl, write(" 1 :- bd"),

nl, write(" 2 :- b1"),

nl, write(" 3 :- b2"),

nl, write(" 4 :- Меню"), nl,

nl, write(" ------| |------"),

cursor(7,13), readchar(X), store(X),

removewindow, go, !.

do('3') :-

makewindow(4,18,1," Просмотреть ",5,25,10,30),

framewindow(19),

write(" Что просмотреть ?"), nl,

nl, write(" 1 :- bd"),

nl, write(" 2 :- b1"),

nl, write(" 3 :- b2"),

nl, write(" 4 :- Меню"), nl,

nl, write(" ------| |------"),

cursor(7,13), readchar(X), see(X),

removewindow, go, !.

do('4') :-

makewindow(4,18,1," Корректировка ",5,25,9,30),

framewindow(19),

write(" Способ нахождения записи: "), nl,

nl, write(" 1 :- по номеру артикула"),

nl, write(" 2 :- по названию"),

nl, write(" 3 :- Меню"), nl,

nl, write(" ------| |------"),

cursor(6,13), readchar(X), correct(X),

removewindow, go, !.

do('5') :-

makewindow(4,18,1," Удаление записи по признаку ",5,25,10,30),

framewindow(19),

write(" Введите признак:"), nl,

nl, write(" 1 :- По артикулу"),

nl, write(" 2 :- По названию"),

nl, write(" 3 :- Удалить всю базу"),

nl, write(" 4 :- Меню"), nl,

nl, write(" ------| |------"),

cursor(7,13), readchar(X), del(X),

removewindow, go, !.

do('6') :-

makewindow(4,18,1," Создать базу по признаку ",5,25,9,30),

framewindow(19),

write(" Какую базу создать ?"), nl,

nl, write(" 1 :- B1"),

nl, write(" 2 :- B2"),

nl, write(" 3 :- Меню"), nl,

nl, write(" ------| |------"),

cursor(6,13), readchar(X), indication(X),

removewindow, go, !.

do('7') :-

makewindow(4,18,1," Добавить запись к главной базе ",7,10,13,60),

framewindow(19), adding,

removewindow, go, !.

do('8') :-

makewindow(4,95,1,"Запрос",10,29,5,22), nl,

framewindow(94),

write(" Выйти ? (Yes/No)"), readchar(X),

X='y', exit;

removewindow, go, !.

do(_) :-

makewindow(4,76,1,"Ошибка",8,29,5,22),

framewindow(75), nl,

write(" Выберите из меню"), readchar(_),

removewindow, go.

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

%%%

open('1') :-

makewindow(5,95,1,"Загрузка bd",7,20,10,40),

framewindow(94), nl,

write(" Имя файла : "), readln(FN),

exists(FN), consult(FN, bd),

nl, write(" Загружено"), readchar(_), removewindow, !.

open('2') :-

makewindow(5,95,1,"Загрузка b1",7,20,10,40),

framewindow(94), nl,

write(" Имя файла : "), readln(FN),

exists(FN), consult(FN, b1),

nl, write(" Загружено"), readchar(_), removewindow, !.

open('3') :-

makewindow(5,95,1,"Загрузка b2",7,20,10,40),

framewindow(94), nl,

write(" Имя файла : "), readln(FN),

exists(FN), consult(FN, b2),

nl, write(" Загружено"), readchar(_), removewindow, !.

open('4') :-

!.

open(_) :-

makewindow(5,76,1,"Ошибка",8,29,5,22),

framewindow(75), nl,

write(" Выберите из меню"), readchar(_),

removewindow, removewindow, do('1').

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

%%%

store('1') :-

makewindow(5,95,1,"Сохранение bd",7,20,10,40),

framewindow(94), nl,

write(" Имя файла : "), readln(FN), save(FN, bd),

nl, write(" Сохранено"), readchar(_), removewindow, !.

store('2') :-

makewindow(5,95,1,"Сохранение b1",7,20,10,40),

framewindow(94), nl,

write(" Имя файла : "),

readln(FN), save(FN, b1),

nl, write(" Сохранено"), readchar(_), removewindow, !.

store('3') :-

makewindow(5,95,1,"Сохранение b2",7,20,10,40),

framewindow(94), nl,

write(" Имя файла : "),

readln(FN), save(FN, b2),

nl, write(" Сохранено"), readchar(_), removewindow, !.

store('4') :-

!.

store(_) :-

makewindow(5,76,1,"Ошибка",8,29,5,22),

framewindow(75), nl,

write(" Выберите из меню"), readchar(_),

removewindow, removewindow, do('2').

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

%%%

see('1') :-

makewindow(5,95,1," Просмотр bd ",7,10,9,60),

framewindow(94), nl,

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

show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),

nl,nl,write("Нажмите ENTER для продолжения..."),

readchar(_), nl, fail.

see('1') :-

removewindow, removewindow, do('3'), !.

see('2') :-

makewindow(5,95,1," Просмотр b1 ",7,10,9,60),

framewindow(94), nl,

table1(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),

show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),

nl,nl,write("Нажмите ENTER для продолжения..."),

readchar(_), nl, fail.

see('2') :-

removewindow, removewindow, do('3'), !.

see('3') :-

makewindow(5,95,1," Просмотр b2 ",7,10,9,60),

framewindow(94), nl,

table2(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),

show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),

nl,nl,write("Нажмите ENTER для продолжения..."),

readchar(_), nl, fail.

see('3') :-

removewindow, removewindow, do('3'), !.

see('4') :-

!.

see(_) :-

makewindow(5,76,1,"Ошибка",8,29,5,22),

framewindow(75), nl,

write(" Выберите из меню"), readchar(_),

removewindow, removewindow, do('3').

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

%%%

correct('1') :-

makewindow(5,95,1," Корректировка записи, найденной по артикулу

",7,10,13,60),

framewindow(94),

write("Номер артикула: "), readint(X),

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

nl, write("Старая запись:"), nl, nl,

show(X,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)), nl, nl,

write("Введите новый вариант:"), nl, nl,

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

clearwindow,

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

))),

assert(characteristick(ArtD,place(NCD,NSD),NameD,price(RubD,KopD),date(YearD

,MonD,DayD))),

removewindow, removewindow, do('4'), !.

correct('1') :-

removewindow, removewindow, do('4'), !.

correct('2') :-

makewindow(5,95,1," Корректировка записи, найденной по названию

",7,10,13,60),

framewindow(94),

write("Название: "), readln(X),

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

nl, write("Старая запись:"), nl, nl,

show(Art,place(NC,NS),X,price(Rub,Kop),date(Year,Mon,Day)), nl, nl,

write("Введите новый вариант:"), nl, nl,

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

clearwindow,

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

)),

assert(characteristick(ArtD,place(NCD,NSD),NameD,price(RubD,KopD),date(YearD

,MonD,DayD))),

removewindow, removewindow, do('4'), !.

correct('2') :-

removewindow, removewindow, do('4'), !.

correct('3') :-

!.

correct(_) :-

makewindow(5,76,1,"Ошибка",8,29,5,22),

framewindow(75), nl,

write(" Выберите из меню"), readchar(_),

removewindow, removewindow, do('4').

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

%%%

del('1') :-

makewindow(5,95,1," Удаление по артикулу ",7,20,10,40),

framewindow(94),

write(" Номер артикула: "), readint(X),

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

))), nl,

write(" Готово."), readchar(_),

removewindow,removewindow, do('5'), !.

del('1') :-

makewindow(6,76,1,"Ошибка",8,29,5,22),

framewindow(75), nl,

write(" Запись не найдена."), readchar(_),

removewindow, removewindow, removewindow, do('5').

del('2') :-

makewindow(5,95,1," Удаление по названию ",7,20,10,40),

framewindow(94),

write(" Название: "), readln(X),

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

)), nl,

write(" Готово."), readchar(_),

removewindow,removewindow, do('5'), !.

del('2') :-

makewindow(6,76,1,"Ошибка",8,29,5,22),

framewindow(75), nl,

write(" Запись не найдена."), readchar(_),

removewindow, removewindow, removewindow, do('5').

del('3') :-

makewindow(5,95,1," Удаление всей базы ",7,20,10,40),

framewindow(94),

retract(characteristick(_,place(_,_),_,price(_,_),date(_,_,_))),

fail.

del('3') :-

write(" База удалена."), readchar(_),

removewindow,removewindow, do('5'), !.

del('4') :-

!.

del('_') :-

makewindow(5,76,1,"Ошибка",8,29,5,22),

framewindow(75), nl,

write(" Выберите из меню"), readchar(_),

removewindow, removewindow, do('5').

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

%%%

indication('1') :-

makewindow(5,18,1," Создать базу B1 по признаку ",8,25,10,30),

framewindow(19),

write(" Введите признак:"), nl,

nl, write(" 1 :- По месту хранения"),

nl, write(" 2 :- По цене"),

nl, write(" 3 :- По дате поступления"),

nl, write(" 4 :- Меню"), nl,

nl, write(" ------| |------"),

cursor(7,13), readchar(X), indicationB1(X),

removewindow, removewindow, do('6'), !.

indication('2') :-

makewindow(5,18,1," Создать базу B2 по признаку ",8,25,10,30),

framewindow(19),

write(" Введите признак:"), nl,

nl, write(" 1 :- По месту хранения"),

nl, write(" 2 :- По цене"),

nl, write(" 3 :- По дате поступления"),

nl, write(" 4 :- Меню"), nl,

nl, write(" ------| |------"),

cursor(7,13), readchar(X), indicationB2(X),

removewindow, removewindow, do('6'), !.

indication('3') :-

!.

indication(_) :-

makewindow(5,76,1,"Ошибка",8,29,5,22),

framewindow(75), nl,

write(" Выберите из меню"), readchar(_),

removewindow, removewindow, do('6').

indicationB1('1') :-

makewindow(6,95,1," Создание базы B1 по месту хранения ",7,20,10,40),

framewindow(94), nl,

write(" Номер цеха: "), readint(X),

write(" Номер склада: "), readint(Y),

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

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

fail.

indicationB1('1') :-

removewindow, removewindow, indication('1').

indicationB1('2') :-

makewindow(6,95,1," Создание базы B1 по цене ",7,20,10,40),

framewindow(94), nl,

write(" Рублей: "), readint(X),

write(" Копеек: "), readint(Y),

characteristick(Art,place(NC,NS),Name,price(X,Y),date(Year,Mon,Day)),

assert(table1(Art,place(NC,NS),Name,price(X,Y),date(Year,Mon,Day))),

fail.

indicationB1('2') :-

removewindow, removewindow, indication('1').

indicationB1('3') :-

makewindow(6,95,1," Создание базы B1 по дате поступления

",7,20,10,40),

framewindow(94), nl,

write(" Год: "), readint(X),

write(" Месяц: "), readint(Y),

write(" День: "), readint(Z),

characteristick(Art,place(NC,NS),Name,price(Rub,Kop),date(X,Y,Z)),

assert(table1(Art,place(NC,NS),Name,price(Rub,Kop),date(X,Y,Z))),

fail.

indicationB1('3') :-

removewindow, removewindow, indication('1').

indicationB1('4') :-

!.

indicationB1(_) :-

makewindow(6,76,1,"Ошибка",8,29,5,22),

framewindow(75), nl,

write(" Выберите из меню"), readchar(_),

removewindow, removewindow, indication('1').

indicationB2('1') :-

makewindow(6,95,1," Создание базы B2 по месту хранения ",7,20,10,40),

framewindow(94), nl,

write(" Номер цеха: "), readint(X),

write(" Номер склада: "), readint(Y),

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

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

fail.

indicationB2('1') :-

removewindow, removewindow, indication('2').

indicationB2('2') :-

makewindow(6,95,1," Создание базы B2 по цене ",7,20,10,40),

framewindow(94), nl,

write(" Рублей: "), readint(X),

write(" Копеек: "), readint(Y),

characteristick(Art,place(NC,NS),Name,price(X,Y),date(Year,Mon,Day)),

assert(table2(Art,place(NC,NS),Name,price(X,Y),date(Year,Mon,Day))),

fail.

indicationB2('2') :-

removewindow, removewindow, indication('2').

indicationB2('3') :-

makewindow(6,95,1," Создание базы B2 по дате поступления

",7,20,10,40),

framewindow(94), nl,

write(" Год: "), readint(X),

write(" Месяц: "), readint(Y),

write(" День: "), readint(Z),

characteristick(Art,place(NC,NS),Name,price(Rub,Kop),date(X,Y,Z)),

assert(table2(Art,place(NC,NS),Name,price(Rub,Kop),date(X,Y,Z))),

fail.

indicationB2('3') :-

removewindow, removewindow, indication('2').

indicationB2('4') :-

!.

indicationB2(_) :-

makewindow(6,76,1,"Ошибка",8,29,5,22),

framewindow(75), nl,

write(" Выберите из меню"), readchar(_),

removewindow, removewindow, indication('2').

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

%%%

adding :-

get(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),

nl, write(" Вы ввели :"),

nl, show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),

nl,

nl, write(" Добавить ? (Yes/No)"), readchar(A),

A='y',

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

y)));

!.

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

%%%

exists(FN) :-

existfile(FN);

makewindow(6,76,1,"Ошибка",10,25,5,30), nl,

framewindow(75),

write(" Файл ",FN," не найден!"),

readchar(_), removewindow,

removewindow, removewindow, do('1').

show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)) :-

write(" Артикул : ",Art),

nl, write(" Местоположение (Цех, Склад) : ",NC,", ",NS),

nl, write(" Наименование товара : ",Name),

nl, write(" Стоимость (Рублей:Копеек) : ",Rub,":",Kop),

nl, write(" Дата поступления (Год-Месяц-День) : ",Year,"-",Mon,"-

",Day).

get(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)) :-

write(" Артикул : "), readint(Art),

write(" Местоположение : "), nl,

write(" Цех : "), readint(NC),

write(" Склад : "), readint(NS),

write(" Наименование товара : "), readln(Name),

write(" Стоимость : "), nl,

write(" Рублей : "), readint(Rub),

write(" Копеек : "), readint(Kop),

write(" Дата поступления : "), nl,

write(" Год : "), readint(Year),

write(" Месяц : "), readint(Mon),

write(" День : "), readint(Day).

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

Открытие БД.

+-------------- Системное меню --------------+

¦ Выберите вариант работы с базами данных: ¦

¦ 1 :-+--------- Загрузить --------+ ¦

¦ 2 :-¦ Куда загрузить ? ¦ ¦

¦ +--------------Загрузка bd-------------+ ¦

¦ ¦ ¦ ¦

¦ ¦ Имя файла : data ¦ ¦

¦ ¦ ¦ ¦

¦ ¦ Загружено ¦ ¦

+--¦ ¦--+

+--------------------------------------+

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

+-------------- Системное меню --------------+

¦ Выберите вариант работы с базами данных: ¦

¦ ¦

¦ 1 :-+--------- Сохранить --------+ ¦

¦ 2 :-¦ Что сохранить ? ¦ ¦

¦ +-------------Сохранение b2------------+ ¦

¦ ¦ ¦ ¦

¦ ¦ Имя файла : data2 ¦ ¦

¦ ¦ ¦ ¦

¦ ¦ Сохранено ¦ ¦

+--¦ ¦--+

+--------------------------------------+

Просмотр.

+-------------- Системное меню --------------+

¦ Выберите вариант работы с базами данных: ¦

¦ ¦

¦ 1 :-+-------- Просмотреть -------+ ¦

¦ 2 :-¦ Что просмотреть ? ¦ ¦

+----------------------- Просмотр bd ----------------------+

¦ Артикул : 2 ¦

¦ Местоположение (Цех, Склад) : 6, 7 ¦

¦ Наименование товара : Vint ¦

¦ Стоимость (Рублей:Копеек) : 0:65 ¦

¦ Дата поступления (Год-Месяц-День) : 1996-2-45 ¦

¦ ¦

¦Нажмите ENTER для продолжения... ¦

+----------------------------------------------------------+

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

+-------------- Системное меню --------------+

¦ Выберите вариант работы с базами данных: ¦

¦ ¦

¦ 1 :-+------- Корректировка ------+ ¦

¦ 2 :-¦ Способ нахождения записи: ¦ ¦

+------- Корректировка записи, найденной по названию ------+

¦Старая запись: ¦

¦ ¦

¦ Артикул : 1 ¦

¦ Местоположение (Цех, Склад) : 5, 6 ¦

¦ Наименование товара : Gayka ¦

¦ Стоимость (Рублей:Копеек) : 0:45 ¦

¦ Дата поступления (Год-Месяц-День) : 1996-1-4 ¦

¦ ¦

¦Введите новый вариант: ¦

¦ ¦

¦ Артикул : ¦

+----------------------------------------------------------+

Удаление.

+-------------- Системное меню --------------+

¦ Выберите вариант работы с базами данных: ¦

¦ ¦

¦ 1 :-+ Удаление записи по признаку+ ¦

¦ 2 :-¦ Введите признак: ¦ ¦

¦ +-------- Удаление по артикулу --------+ ¦

¦ ¦ Номер артикула: 1 ¦ ¦

¦ ¦ ¦ ¦

¦ ¦ Готово. ¦ ¦

+--¦ ¦--+

+--------------------------------------+

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

+-------------- Системное меню --------------+

¦ Выберите вариант работы с базами данных: ¦

¦ ¦

¦ 1 :-+- Создать базу по признаку -+ ¦

¦ 2 :-¦ Какую базу создать ? ¦ ¦

¦ +------ Создание базы B1 по цене ------+ ¦

¦ ¦ ¦ ¦

¦ ¦ Рублей: 0 ¦ ¦

¦ ¦ Копеек: 45 ¦ ¦

+--¦ ¦--+

+--------------------------------------+

+----------------------------+

Добавление.

+-------------- Системное меню --------------+

¦ Выберите вариант работы с базами данных: ¦

¦ ¦

¦ 1 :- Загрузить ¦

¦ 2 :- Сохранить ¦

+------------- Добавить запись к главной базе -------------+

¦ Местоположение : ¦

¦ Цех : 5 ¦

¦ Склад : 6 ¦

¦ Наименование товара : Shayba ¦

¦ Стоимость : ¦

¦ Рублей : 1 ¦

¦ Копеек : 2 ¦

¦ Дата поступления : ¦

¦ Год : 1996 ¦

¦ Месяц : 23 ¦

¦ День : 3 ¦

+----------------------------------------------------------+

8. Инструкция пользователя и решение контрольных примеров.

Решение контрольных примеров основывается на том, что было сделано в

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

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

путем нажатия на соответствующие цифры. При появлении подменю повторить

операцию, при запросе на имя файла - ввести строку, определяющую имя

файла, при запросе на символ, нажать соответствующую клавишу на

клавиатуре (не забывайте, пожалуйста об языковой раскладке клавиатуры и

состоянии клавиши CAPSLOCK). Также в нескольких процедурах производится

подтверждение (Yes/No - Да/Нет) - необходимо переключиться на английскую

раскладку и нажать соответствующую клавишу в нижнем регистре.

9. Заключение.

Язык программирования Пролог безусловно может быть использован для

написания подобных информационно-справочных систем, так как он позволяет

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

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

10. Список литературы.

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

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