Разработка информационно-справочной системы
Разработка информационно-справочной системы
Задание № 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').
Страницы: 1, 2
|