Разработка информационно-справочной системы "Каталог строительных объектов" Prolog
Задание N П-8
На курсовое проектирование по дисциплине
"Логическое программирование" студенту
Мухамеджанову И.И. гр. ИИ-1-95.
1. Тема:
разработка информационно-справочной системы.
2. Исходные данные:
Разработать информационно-справочную систему, обеспечиваю-
щую работу с базой данных включающей записи вида:
--------------------------------------------------------------------
| КАТАЛОГ СТРОИТЕЛЬНЫХ ОБЬЕКТОВ |
--------------------------------------------------------------------
|город | |код| год | смета | адрес |
|обьекта| наименование |СМУ|вступления в|стоимости|-----------------
| | | |эксплуатацию| | район | улица |
--------------------------------------------------------------------
| | | | | | | |
Предусмотреть создание из базы новых баз данных ,характеризуемых
признаками задаваемыми пользователем.
Меню системы должно включать режимы корректировки, уничтоже-
ния, просмотра-добавления, загрузки, сохранения.
Язык программирования Пролог.
3. Перечень вопросов, подлежащих разработке:
3.1 Разработка меню, обеспечивающее взаимодействие пользо-
вателя с системой, в соответствии с заданием, предус-
мотрев режимы:
- корректировки данных,
- уничтожения данных,
- просмотра базы,
- загрузки базы,
- сохранения базы,
- создания новой базы.
3.2 Разработка процедур:
- корректировки данных,
- уничтожения данных,
- просмотра базы,
- загрузки базы,
- сохранения базы,
- создания новой базы.
4. Перечень графических материалов:
4.1 структурная схема меню
4.2 структурная схема программы.
5. Календарный план-график работы над курсовой работой:
1. Получение задания
4.10.96
2. Анализ задания, постановка задачи, подбор и изучение
литературы
18.10.96
3. Разработка меню и структуры программы
25.10.96
4. Разработка процедур информационно-справочной системы
15.11.96
5. Отладка программы
29.11.96
6. Оформление пояснительной записки и сдача работы на про-
верку
24.12.96
7. Защита курсовой работы
25.12.96
Руководитель /Холкин И.И./
Студент /Мухамеджанов И.И. ИИ-1-95/
СОДЕРЖАНИЕ.
Введение ....................................
1. Понятие об информационных системах и их
программной реализации ...................
2. База данных и способы ее представления ...
3. Разработка системного меню ...............
4. Разработка структуры программы ...........
5. Разработка процедур:
5.1 Основной процедуры START...............
5.2 Вывода главного меню PATCH.............
5.3 Автоматической загрузки БД LOAD ......
5.4 Вывода информации о системе PROCESS(0)
5.5 Корректировки данных PROCESS(1) ..........
5.6 Удаления записей PROCESS(2) ..............
5.7 Просмотра базы данных PROCESS(3) .........
5.8 Загрузки базы PROCESS(4) .................
5.9 Вывода меню сохранения PROCESS(5) ........
5.10 Создания новой БД PROCESS(6) ............
5.11 Просмотра-добавления PROCESS(7) .........
5.12 Выхода из программы PROCESS(8) ..........
5.13 Вспомагательной Select ..............
5.14 Загрузки БД с диска LOD ..........
5.15 Сохранения БД на диске SVE .......
5.16 Вспомагательной Sel .................
6. Листинг программы ........................
7. Отладка программы ........................
8. Инструкция пользователя и решение
контрольных примеров: ...................
Заключение .................................
Список литературы ..........................
ВВЕДЕНИЕ
Данная курсовая написана на языке Пролог в среде Turbo Prolog v
2.0 (русифицированная версия). В структуре языка заложены возможности
простой и черезвычайно эффективной работы с базами данных, что позво-
ляет на его основе создавать различного рода информационно - справоч-
ные системы. Структура языка Пролог соответствует структуре реляцион-
ных баз данных. Так отношению в РБД соответствует предикат в Прологе,
элементу - факт, атрибуту отношения - аргумент предиката и т.д. Встро-
енные в Пролог предикаты работы с окнами позволяют создать дружествен-
ный интерфейс для работы пользователя с информационно - справочной
системой.
1. ПОНЯТИЕ ОБ ИНФОРМАЦИОННО-СПРАВОЧНЫХ СИСТЕМАХ И
ИХ ПРОГРАММНОЙ РЕАЛИЗАЦИИ
Информационно-справочные системы - это программы-оболочки, служа-
щие для управления массивами и базами данных. В наш век всеобщей
компьютеризации информационно-справочные системы значительно облегчают
труд человека во всех отраслях народного хозяйства. Значительно упрос-
тилась работа московской милиции по обнаружению угнаного транспорта
после создания в Москве компьютерных баз данных по угнаным автомоби-
лям. Бухгалтерам предприятий и фирм теперь не нужно перебирать горы
бумаг, чтобы получить все данные о сотруднике: достаточно загрузить
информационно-справочную систему и она в удобной форме выдаст всю не-
обходимую информацию.
Области применения информационно-справочных систем воистину безг-
раничны: это ведение статистики удоя скота на ферме, составление ката-
логов книг в библиотеках и произведений искусства в музеях, сбор дан-
ных о наличии рабочих вакансий в данном регеоне и многие другие.
Одним из способов програмной реализации информационно-справочной
системы является использование для ее создания языка логического прог-
раммирования Пролог. В данной реализации языка содержится множество
встроенных предикатов, существенно облегчающих написание таких систем.
2.БАЗА ДАННЫХ И СПОСОБЫ ЕЕ ПРЕДСТАВЛЕНИЯ
База данных в простейшем случае - упорядоченная структура данных в
виде таблицы, каждая запись которой может объединять разнотипные дан-
ные, причем все записи одной базы имеют одинаковую структуру. Сущест-
вуют три модели представления баз данных: иерархическая, сетевая и ре-
ляционная. В силу особенностей языка Пролог, с его помощью реализуется
реляционная модель. Каждая строка в базе данных называется элементом
отношения, каждая колонка - атрибутом отношения, колличество колонок -
арностью, а колличество строк - мощностью. В языке программирования
Пролог атрибуту отношения соответствует аргумент предиката, арности -
колличество аргументов в предикате, отношению - предикат, элементу -
факт, и мощности - число фактов. Исходя из вышеперечисленных соответс-
твий Пролог является прекрасным средством для реализации реляционных
баз данных.
3.РАЗРАБОТКА СИСТЕМНОГО МЕНЮ
Все режимы программы активизируются с помощью меню, которое реа-
лизовано с помощью процедуры start_patch. Для активизации какого либо
режима пользователю следует нажать цифровую клавишу, соответствующую
выбранному пункту меню.
Меню данной программы состоит из семи пунктов:
0 - О системе... - вывод данных о системе
1 - Корректировка данных - режим корректировки данных
2 - Уничтожение данных - режим удаления данных
3 - Просмотр базы - режим просмотра базы
4 - Загрузка базы - режим загрузки базы
5 - Сохранение базы - режим сохранения базы
6 - Создание новой базы - режим создания новой базы
7 - Просмотр-добавление - режим просмотра-добавления
8 - Выход из программы - выход из программы
На следующей странице представлена графическая структура меню.
5. РАЗРАБОТКА ПРОЦЕДУР
Процедуры создавались на основе требований, изложенных в задании
к курсовой работе.
5.1 ОСНОВНОЙ ПРОЦЕДУРЫ START
С помощью процедуры START в разделе GOAL инициируется начало вы-
полнения программы. Эта процедура запускает процедуру начальной заг-
рузки базы данных LOAD, после чего передает управление процедуре
вывода главного меню PATCH.
5.2 ВЫВОДА ГЛАВНОГО МЕНЮ PATCH
Эта процедура выводит список пунктов главного меню и ожидает от
пользователя ввода числа, которое будет занесено в переменную C. После
этого вызывается процедура обработки основных режимов PROCESS, в кото-
рую переменная C передается в качестве аргумента. В процедуре исполь-
зован предикат Repeat, в связи с этим после возврата из процедуры RUN
в случае, если C не равно 8 происходит повторный вывод пунктов
меню и ожидание ввода числа.
5.3 АВТОМАТИЧЕСКОЙ ЗАГРУЗКИ БД LOAD
Процедура LOAD предназначена для автоматической загрузки ос-
новной базы данных при запуске программы. Это значительно облегчает
работу с системой, так как не требуется при запуске программы подгру-
жать основную БД из режима "Загрузка". Процедура LOAD проверяет
существование на диске файла ilgiz.dat с помощью встроенного предиката
existfile и подгружает БД в память с помощью предиката consult. В слу-
чае отсутствия файла выдается сообщение об ошибке.
5.4 ВЫВОДА ИНФОРМАЦИИ О СИСТЕМЕ PROCESS(0)
Данная процедура выводит информацию о языке, на котором написана
система и данные о создателе.
5.5 КОРРЕКТИРОВКИ ДАННЫХ PROCESS(1)
Процедура process(1) служит для вывода меню режима коррекции дан-
ных, находящихся в БД, и внесения новых записей.После активизации
процедура вызывает вспомогательную процедуру SELECT,которая выводит
меню в котором имеются разделы базы данных ,покоторым возможен поиск
нужной записи.Активизация режимов происходит аналогично главному
меню с помощью нажатия соответствующей цифровойклавиши. Считанное
с клавиатуры число заносится в переменную X, послечего вызывается
процедура SEL, аргументом которой служит X. С помощью процедуры SEL
по заданному признаку находится нужная запись,которая выводится в
PROCESS(1) с последующей ее корректировкой.В процедуре process(1)
также применен предикат Repeat, с помощью которого реализован
повторный вывод меню в случае ошибки ввода.
5.6 УДАЛЕНИЯ ЗАПИСЕЙ PROCESS(2)
Данная процедура предназначена для удаления записей из базы дан-
ных. В программе предусмотрена возможность задания какого-либо раздела
из базы данных , по которому может быть найдена удаляемая запись.
Эта возможность также реализуется процедурой SELECT, описанной ниже.
Процедура SELECT возвращает номер выбранной записи и с помощью встроен-
ного предиката retract запись удаляется из базы данных.
5.7 ПРОСМОТРА БАЗЫ ДАННЫХ PROCESS(3)
Процедура PROCESS(3) осуществляет просмотр содержимого БД.Процедура
PROCESS(3) реализована в стиле процедур MENU и PROCESS(1) с применением
процедуры Repeat.
5.8 ЗАГРУЗКИ БАЗЫ PROCESS(4)
Данная процедура запрашивает у пользователя имя файла содержащего
базу данных.Собственно загрузка баз данных осуществляется процедурой
lod аргументом которой служит переменная N, считанная с клавиатуры
при вводе пользователем имени файла. В процедуре PROCESS(4)
также применена процедура Repeat.
5.9 ВЫВОДА МЕНЮ СОХРАНЕНИЯ PROCESS(5)
Процедура PROCESS(5) аналогична PROCESS(4). Для сохранения баз данных
применяется процедура SVE, рассмотренная ниже, аргументом
которой является переменная I.
5.10 СОЗДАНИЕ НОВОЙ БД PROCESS(6)
Данная процедура служит для создания новой базы данных. Процедура
работает следующим образом:При помощи процедуры SELECT у пользователя
запрашивается раздел базы данных по которому он хочет создать новую
базу и затем,используя процедуру SEL,заносит в новую базу записи соот-
ветствующие заданному признаку.
Для того, чтобы были обработаны все записи, используется
fail. После создания новой БД выдается соответствующее сообщение и
предупреждение о том, чтобы пользователь не забыл сохранить вновь соз-
даную БД.
5.11 ПРОСМОТРА-ДОБАВЛЕНИЯ PROCESS(7)
Данная процедура служит для просмотра-добавления базы данных.
Процедура работает следующим образом:пользователя просят ввести номер
нужной ему записи и,если запись существует,она выводится на экран. В
противном случае выводится сообщение о том,что запись не существует и
просьба, повторив введенный номер, заполнить запись.При окончании ввода
выводится запрос на продолжение ввода данных и условие выхода в основное
меню.В зависимости от выбора пользователя процесс либо повторяется,
либо прекращается.
5.12 ВЫХОДА ИЗ ПРОГРАММЫ PROCESS(8)
Данная процедура состоит из отсечения, которое запрещает дальней-
ший перебор. Процедура оканчивается успехом и происходит возврат в
процедуру PATCH, в которой выполняется условие C=8, благодаря чему
происходит выход из программы.
5.13 ВСПОМОГАТЕЛЬНОЙ SELECT
Процедура SELECT является чисто вспомогательной и используется
некоторыми основными проседурами для поиска и доступа к записи по
выбранному признаку,выводя меню запроса признака и затем передавая вве-
денный параметр в процедуру SEL.
5.15 ЗАГРУЗКА БД С ДИСКА LOD
Данная процедура осуществляет загрузку базы данных из файла в
зависимости от введенного пользователем имени. В данной процедуре
проверяется наличие файла на диске с помощью предиката existfile и
загрузка БД в память с помощью предиката consult. В случае отсутствия
файла на диске, выдается соответствующее сообщение .
5.16 СОХРАНЕНИЕ БД НА ДИСКЕ SVE
Данная процедура осуществляет сохранение баз данных в файлах на
диске по признакам, зависящим от аргумента процедуры: sve(1) сох-
раняет основную БД в файле, заданном пользователем, sve(2) - в
файле ilgiz.dat Сохранение БД осуществляется с помощью встроенного
предиката save. В случае ошибки выдается соответствующее сообщение.
5.17 ВСПОМАГАТЕЛЬНОЙ SEL
Процедура SEL является вспомагательной к процедуре SELECT.
В зависимости от выбранного пользователем в процедуре SELECT пункте
SEL находит в базе данных записи удоволетворяющие заданной маске .
6. ЛИСТИНГ ПРОГРАММЫ
CODE=12050
/* **************************
* КУРСОВАЯ РАБОТА *
* *
* *
**************************
*/
domains
i,c,d,f=integer
a,b,m,t=symbol
database -svod1
svod1(a,b,c,d,f,m,t)
database -lolo
lolo(a,b,c,d,f,m,t)
database -kuku
kuku(a,b,c,d,f,m,t)
database
svod(a,b,c,d,f,m,t)
predicates
start
patch
load
select(i)
sel(i,i)
process(i)
procedure(i)
sve(i)
lod(i)
repeat
goal
start.
clauses
/*Процедура создания основного меню и загрузки базы данных*/
start:-
makewindow(1,26,94,"КАТАЛОГ СТРОИТЕЛЬНЫХ ОБЬЕКТОВ",0,0,25,80),
clearwindow,
load,
patch.
/*Процедура управления основным меню*/
patch:-
repeat,
cursor(7,0),
write(" 0 - О пpогpамме... "),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,
write(" 9 - выход из программы"),nl,
write(" =>"),
readint(Choice),
Choice >= 0,
Choice < 10,
clearwindow,
process(Choice),
clearwindow,
Choice = 9,
retractall(_),
removewindow.
/*Процедура поиска и загрузки файла содержащего базу данных*/
load:-
existfile("ilgiz.dat"),
consult("ilgiz.dat"),
cursor(1,2),
write("База загружена").
load:-
makewindow(2,74,79,"ОШИБКА",6,18,8,40),
cursor(2,10),
write("Нет базы на диске"),
readchar(_),
removewindow,
!.
/*Пpоцедуpа ввода новых данных*/
process(7):-
makewindow(1,2,7,"Ввод новых данных",0,0,25,80),
nl,
write("Введите город обьекта :"),readln(K),nl,
write("Введите наименование :"),readln(O),nl,
write("Введите код СМУ :"),readint(I),nl,
write("Введите год вступления в эксплуатацию :"),readint(Y),nl,
write("Введите смету стоимости :"),readint(T),nl,
write("Введите район :"),readln(FF),nl,
write("Введите улицу :"),readln(HH),nl,
N1=K,NA1=O,KO1=I,OB1=Y,PL1=T,FF1=FF,HH1=HH,
assertz(svod(N1,NA1,KO1,OB1,PL1,FF1,HH1)),
removewindow,
fail.
/*Процедура просмотра-добавления*/
process(8):-
makewindow(1,2,7,"Просмотр-добавление",0,0,25,80),
nl,
write("Введите город объекта:"),readln(A),nl,nl,
svod(KY,NA,N,OB,PL,FFF,HHH),
A=KY,
write("Город :"),write(KY),nl,
write("Наименование :"),write(NA),nl,
write("Код СМУ :"),write(N),nl,
write("Год вступления в эксплуатацию :"),write(OB),nl,
write("Смета стоимости :"),write(PL),nl,nl,nl,
write("Район :"),write(FFF),nl,
write("Улица :"),write(HHH),nl,
write("Нажмите на любую клавишу"),
readchar(_),
removewindow,
!.
process(8):-
write("Этого города нет в базе."),
write("Повторите введенный город и продолжайте ввод данных"),nl,nl,nl,
write("Введите город:"),
readln(A),nl,
A=N1,
write("Введите наименование :"),readln(F),nl,
write("Введите код СМУ :"),readint(Y),nl,
write("Введите год вступления в эксплуатацию :"),readint(J),nl,
write("Введите смету стоимости :"),readint(G),nl,
write("Введите район :"),readln(L),nl,
write("Введите улицу :"),readln(M),nl,
NA1=F,KO1=Y,OB1=J,PL1=G,FF1=L,HH1=M,
assertz(svod(N1,NA1,KO1,OB1,PL1,FF1,HH1)),
removewindow,
fail.
/*Пpоцедуpа вывода данных о пpогpамме*/
process(0):-
makewindow(1,27,30,"О пpогpамме...",0,0,25,80),nl,nl,
write(" Инфоpмационно-спpавочная система"),nl,nl,
write(" обслуживающая работу с базои данных BSO"),nl,nl,
write(" Язык-TURBO-PROLOG v.2.0. "),nl,nl,
write(" автоp: Мухамеджанов И.И. "),nl,nl,
write(" МИРЭА, гp.ИИ-1-95 (с) 1996 г. "),nl,
cursor(20,24),
write("Нажмите на любую клавишу"),
readchar(_),
removewindow.
/*Процедура изменения содержимого записей базы данных*/
process(1):-
makewindow(1,2,7,"Коppекция данных",0,0,25,80),
nl,
select(N),
X=N,
svod(KY,NA,X,OB,PL,FFF,HHH),
write("Город обьекта :"),write(N),nl,
write("Наименование :"),write(NA),nl,
write("Код СМУ :"),write(X),nl,
write("Год вступления в эксплуатацию :"),write(OB),nl,
write("Смета стоимости :"),write(PL),nl,
write("Район :"),write(FFF),nl,
write("Улица :"),write(HHH),nl,
nl,
write("Введите город объекта :"),readln(N1),
write("Введите наименование:"),readln(NA1),nl,
write("Введите код СМУ :"),readint(KO1),nl,
write("Введите год вступления в эксплуатацию :"),readint(OB1),nl,
write("Введите смету стоимости :"),readint(PL1),nl,
write("Введите район :"),readln(FF1),nl,
write("Введите улицу :"),readln(HH1),nl,
retract(svod(KY,NA,KO,OB,PL,FFF,HHH)),
assert(svod(N1,NA1,KO1,OB1,PL1,FF1,HH1)),
!,
removewindow.
/*Процедура удаления записей из базы данных*/
process(2):-
makewindow(1,2,7,"Удаление записей",0,0,25,80),
nl,
select(N),
X=N,
svod(KY,NA,X,OB,PL,FFF,HHH),
retract(svod(KY,NA,X,OB,PL,FFF,HHH)),!,
removewindow.
/*Процедура просмотра содержимого базы данных*/
process(3):-
makewindow(1,2,7,"Просмотp базы",0,0,25,80),
nl,
write("============================================================================="),nl,
write("| КАТАЛОГ СТРОИТЕЛЬНЫХ ОБЬЕКТОВ |"),nl,
write("============================================================================="),nl,
write("| город | | код | год |смета | адрес |"),nl,
write("| обьекта | наименование | СМУ |вступления в|стоимости|----------------------"),nl,
write("| | | |эксплуатацию| | раион | улица |"),nl,
write("============================================================================="),nl,
svod(KY,NA,N,OB,PL,FFF,HHH),
cursor(Z,_),
cursor(Z,2),write(KY),
cursor(Z,12),write(NA),
cursor(Z,27),write(N),
cursor(Z,35),write(OB),
cursor(Z,46),write(PL),
cursor(Z,0),write("|"),
cursor(Z,56),write(FFF),
cursor(Z,67),write(HHH),
nl,
fail.
process(3):-
write("------------------------------------------------------------------------------"),
nl,
write("Нажмите на любую клавишу"),
readchar(_),
removewindow.
/*Процедура загрузки в память базы данных*/
process(4):-
nl,
makewindow(2,15,4,"Загрузка",5,5,20,70),
write("1 - База будет загружена из указанного файла"),nl,
write("2 - База будет загружена из файла ilgiz.dat"),nl,
write("3 - Выход в основное меню"),nl,
write("==>"),
readint(C),
C>0,C<4,
lod(C),
!,
removewindow.
/*Процедура сохранения базы данных*/
process(5):-
nl,
makewindow(2,15,4,"Запись",5,5,20,70),
write("1 - База будет записана в указанный файл"),nl,
write("2 - База будет записана в файл ilgiz.dat"),nl,
write("3 - Выход в основное меню"),nl,
write("==>"),
readint(I),
I>0,I<4,
sve(I),!,
removewindow.
/*Процедура выбора создания новой базы*/
process(6):-
nl,
makewindow(3,2,7,"Создание новой базы",0,0,25,80),
write("1 - База будет создана по городу "),nl,
write("2 - База будет создана по году вступления в эксплуатацию"),nl,
write("3 - База будет создана по смете стоимости "),nl,
write("4 - Выход в основное меню"),nl,
write("==>"),
readint(O),
O>0,O<5,
procedure(O),
removewindow.
process(_).
/*Процедура создания новой базы данных и ее сохранения*/
procedure(1):-
makewindow(1,2,7,"Создание новой базы по городу",0,0,25,80),
nl,
cursor(7,10),
retractall(_,svod1),
nl,
write("Если вы хотите узнать данные , то"),
nl,
write("Введите город:"),
readln(X),
svod(KY,NA,N,OB,PL,FFF,HHH),
S=KY,
S=X,
NA1=Na,KO1=N,OB1=OB,PL1=PL,FF1=FFF,HH1=HHH,
assert(svod1(S,NA1,KO1,OB1,PL1,FF1,HH1)),
fail.
procedure(1):-
write("База создана"),nl,
write("______________________________________________________________________________"),
write(" КАТАЛОГ СТРОИТЕЛЬНЫХ ОБЬЕКТОВ !"),
write("------------------------------------------------------------------------------"),
write("! ! ! код !год ! смета ! адрес !"),
write("! город ! наименование ! СМУ !вступления в!стоимости! ----------------------"),
write("! ! ! !эксплуатацию! ! раион ! улица !"),
write("------------------------------------------------------------------------------"),
nl,
svod1(S,NA,N,OB,PL,FFF,HHH),
cursor(Z,_),
cursor(Z,2),write(S),
cursor(Z,12),write(NA),
cursor(Z,27),write(N),
cursor(Z,35),write(OB),
cursor(Z,46),write(PL),
cursor(Z,56),write(FFF),
cursor(Z,67),write(HHH),
nl,
fail.
procedure(1):-
write("------------------------------------------------------------------------------"),
save("not.dat",svod1),
nl,
write("База сохранена в файле not.dat"),
nl,
write("Нажмите любую клавишу"),
readchar(_),
removewindow,
!.
procedure(1):-
write("------------------------------------------------------------------------------"),
nl,
write("Невозможно сохранить созданную базу"),
nl,
write("Нажмите любую клавишу"),
readchar(_),
makewindow(1,2,7,"КАТАЛОГ СТРОИТЕЛЬНЫХ ОБЬЕКТОВ",0,0,25,80).
procedure(2):-
makewindow(1,2,7,"Создание новой базы по году вступления в эксплуатацию",0,0,25,80),
nl,
cursor(7,10),
retractall(_,lolo),
nl,
write("Если вы хотите узнать данные по году создания объекта , то"),nl,
write("Введите год :"),
readint(X),
svod(KY,NA,N,OB,PL,FFF,HHH),
S=OB,
S=X,
N1=KY,NA1=NA,KO1=N,PL1=PL,FF1=FFF,HH1=HHH,
assert(lolo(N1,NA1,KO1,S,PL1,FF1,HH1)),
fail.
procedure(2):-
write("База создана"),nl,
write("______________________________________________________________________________"),
write(" KАТАЛОГ СТРОИТЕЛЬНЫХ ОБЪЕКТОВ "),
write("-----------------------------------------------------------------------------!"),
write("! ! ! код !год ! смета ! адрес !"),
write("! город ! наименование ! СМУ !вступления в!стоимости!----------------------!"),
write("! ! ! !эксплуатацию! ! район ! улица !"),
write("------------------------------------------------------------------------------"),
lolo(KY,NA,N,S,PL,FFF,HHH),
cursor(Z,_),
cursor(Z,2),write(KY),
cursor(Z,12),write(NA),
cursor(Z,27),write(N),
cursor(Z,35),write(S),
cursor(Z,46),write(PL),
cursor(Z,76),write("!"),
cursor(Z,56),write(FFF),
cursor(Z,67),write(HHH),
nl,
fail.
procedure(2):-
write("-----------------------------------------------------------------------------"),
save("not1.dat",lolo),
nl,
write("База сохранена в файле not1.dat"),
nl,
write("Нажмите любую клавишу"),
readchar(_),
removewindow,
!.
procedure(2):-
write("-----------------------------------------------------------------------------"),
nl,
write("Невозможно сохранить созданную базу"),
nl,
write("Нажмите любую клавишу"),
readchar(_),
makewindow(1,2,7,"ХАРАКТЕРИСТИКА ПРЕДПРИЯТИЯ",0,0,25,80).
procedure(3):-
makewindow(1,2,7,"Создание базы данных по смете стоимости",0,0,25,80),
nl,
cursor(7,10),
retractall(_,kuku),
nl,
write("Если вы хотите узнать данные о наибольшей смете стоимости , то"),
nl,
write("Введите начальное значение сметы стоимости :"),
readint(X),
svod(KY,NA,N,OB,PL,FFF,HHH),
S=PL,
S>=X,
N1=KY,NA1=NA,KO1=N,HH1=HHH,FF1=FFF,OB1=OB,
assert(kuku(N1,NA1,KO1,OB1,S,FF1,HH1)),
fail.
procedure(3):-
write("База создана"),nl,
write("_____________________________________________________________________________"),nl,
write(" КАТАЛОГ СТРОИТЕЛЬНЫХ ОБЬЕКТОВ !"),nl,
write("-----------------------------------------------------------------------------"),nl,
write("! ! ! код ! год ! смета ! адрес !"),nl,
write("! город ! наименование ! СМУ !вступления в!стоимости!----------------------"),nl,
write("! ! ! !эксплуатацию! ! раион ! улица !"),nl,
write("-----------------------------------------------------------------------------"),nl,
kuku(KY,NA,N,OB,S,FFF,HHH),
cursor(Z,_),
cursor(Z,2),write(KY),
cursor(Z,12),write(NA),
cursor(Z,27),write(N),
cursor(Z,35),write(OB),
cursor(Z,46),write(S),
cursor(Z,76),write("!"),
cursor(Z,56),write(FFF),
cursor(Z,67),write(HHH),
nl,
fail.
procedure(3):-
write("-----------------------------------------------------------------------------"),
save("not2.dat",kuku),
nl,
write("База сохранена в файле not.dat"),
nl,
write("Нажмите любую клавишу"),
readchar(_),
removewindow,
!.
procedure(3):-
write("-----------------------------------------------------------------------------"),
nl,
write("Невозможно сохранить созданную базу"),
nl,
write("Нажмите любую клавишу"),
readchar(_),
makewindow(1,2,7,"КАТАЛОГ СТРОИТЕЛЬНЫХ ОБЬЕКТОВ",0,0,25,80).
/*Процедура записи на диск*/
sve(1):-
write("Введите имя файла :"),
readln(N),
save(N),
write("Все в порядке"),
beep,
!.
sve(1):-
write("Ошибка обмена, нажмите любую клавишу"),
readchar(_).
sve(2):-
save("ilgiz.dat").
sve(3).
/*Процедура чтения с диска*/
lod(1):-
retractall(_),
write("Введите имя файла :"),
readln(N),
existfile(N),
consult(N),
write("Все в порядке"),
beep,
!.
lod(1):-
nl,
write("Данного файла нет на диске"),nl,
write("Нажмите любую клавишу"),
readchar(_).
lod(2):-
retractall(_),
existfile("ilgiz.dat"),
consult("ilgiz.dat"),
write("Все в порядке"),
beep,
!.
lod(2):-
write("Файла ilgiz.dat нет на диске"),nl,
write("нажмите любую клавишу"),
readchar(_).
lod(3).
repeat.
repeat:- repeat.
/*Выбор записи*/
select(N):-
nl,
write("1 - известен город"),nl,
write("2 - известно наименование"),nl,
write("3 - известно код СМУ"),nl,
write("4 - известен год вступления в эксплуатацию"),nl,
write("5 - известна смета стоимости"),nl,
write("==>"),
readint(X),
sel(X,N).
sel(1,N):-
nl,
write("Введите город :"),
readln(M),
svod(M,_,Z,_,_,_,_),
N=Z.
sel(1,N):-
N=0.
sel(2,N):-
nl,
write("Введите наименование:"),
readln(L),
svod(_,L,Z,_,_,_,_),
N=Z.
sel(2,N):-
N=0.
sel(3,N):-
nl,
write("Введите код СМУ: "),
readint(F),
svod(_,_,F,_,_,_,_),
N=F.
sel(3,N):-
N=0.
sel(4,N):-
nl,
write("Введите год вступления в эксплуатацию:"),
readint(Q),
svod(_,_,Z,Q,_,_,_),
N=Z.
sel(4,N):-
N=0.
sel(5,N):-
nl,
write("Введите смету стоимости:"),
readint(W),
svod(_,_,Z,_,W,_,_),
N=Z.
7. ОТЛАДКА ПРОГРАММЫ
При отладке программы ошибки устранялись в три этапа. На пер-
вом этапе интерпритатор языка Пролог сам указывал на синтаксические
ошибки. Такие ошибки возникали при неправильном написании имен встро-
енных предикатов, когда я забывал описать новые предикаты в разделе
predicates и т.д. Если компиляция прошла успешно, но программа работа-
ла некорректно, приходилось переходить ко второму этапу - просмотру
текста программы и логическому осмыслению ошибки. На этом этапе были
устранены такие ошибки, как вывод всего одной записи базы данных в ре-
жиме просмотра БД. Причиной этому было отсутствие в конце процедуры
предиката fail. Ошибка была устранена. Если не помогал второй этап,
приходилось переходить к третьему - трассировке.В процессе конечной
отладки и решения контрольных примеров ошибок в программе обнаружено
не было.
8.ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ И РЕШЕНИЕ
КОНТРОЛЬНЫХ ПРИМЕРОВ:
Программа "Каталог строительных обьектов " представляет собой
информационно-справочную систему. В данной программе имеется возможность
создания новой базы данных, являющейся списком записей удоволетворяющих
одному из разделов основной базы данных. В основной БД присутствуют данные о
городе, наименовании, коде СМУ,годе вступления в эксплуатацию,смете стоимости,
адрессе обьекта.
ности.
При запуске программы на экран выводится главное меню:
0 - О программе...
1 - Корректировка данных
2 - Удаление данных
3 - Просмотр базы
4 - Загрузка базы
5 - Сохранение базы
6 - Создание новой базы
7 - Просмотр-добавление
8 - Выход из программы
Для выбора какого-либо пункта следует нажать соответствующую
цифровую клавишу. Ниже приводится описание каждого из пунктов.
0 - О программе...
При выборе данного пункта на экран выводятся данные о системе
и ее авторе. После нажатия на любую клавишу происходит выход в главное
меню.
1 - Корректировка данных
При входе в этот пункт на экран выводится подменю:
1 - Известен город
2 - Известен год вступления в эксплуатацию
3 - Иввестна смета стоимости
Выберете признак который Вам известен и затем введите его на запрос
системы.Признак следует вводить в том же виде(сочетание заглавных и
строчных букв) в каком она имеется в базе данных. После определения кор-
ректируемой записи система выводит на экран
все данные об этом обьекте и позволяет их отредактировать, после-
довательно распечатывая поля записи.
2 - Удаление данных
Данный режим служит для удаления записей из базы данных. Как и
в подпункте "Изменение данных" режима "Корректировка данных" пользова-
телю предоставляется возможность ввести один из признаков нужной записи.
После ввода этих данных произойдет удаление выбранной записи и вывод
сообщения, подтверждающего выполнение данной операции. В случае невоз-
можности удаления записи (например запись сданным номером не сущест-
вует), выдается соответствующее сообщение об ошибке.
3 - Просмотр базы
Данный режим предназначен для просмотра содержимого имеющихся
баз данных. При входе в этот режим на экран выводятся записи текущей БД
в виде таблицы.Для возвращения в основное меню следует нажать любую
клавишу.
4 - Загрузка базы
Данный режим предназначен для загрузки баз данных из файлов.
При входе в этот пункт выводится запрос имени файла содержащего базу
данных. При успешной загрузке появится соответствующее сообщение, при
сбое появится сообщение об ошибке.
5 - Сохранение базы
Данный режим предназначен для сохранения баз данных. При входе
в данный режим выводится следующее меню:
1 - Сохранить основную базу в указанном файле
2 - Сохранить основную базу в файле ilgiz.dat
3 - Выход в основное меню
Работа с его пунктами полностью аналогична работе с подменю ре-
жима "Загрузка базы".
6 - Создание новой базы
Данный режим предназначен для создания дочерней базы данных.
При запуске этого режима дочерняя БД создается автоматически, о чем
выводится соответствующее сообщение и предупреждение о необходимости
сохранения дочерней БД. После нажатия любой клавиши происходит выход в
главное меню.
7 - Просмотр-добавление
Данный режим предназначен для просмотра-добавления записей в базе
данных. При входе в него у пользователя запрашивается номер нужной ему
записи и ,если она существует, то на экран выводится ее содержимое.В про-
тивном случае выводится соответствующее сообщение и просьба ,повторив
введенный номер,заполнить выбранную запись.После заполнения записи система
выведет сообщение о необходимости сохранения данной записи и запрос на
повторный ввод данных.При нажатии любой клавиши снова произойдет переход
в меню "Просмотр-добавление".Выход в основное меню осуществляется нажатием
любой клавиши.
8 - Выход из программы
Этот пункт меню предназначен для выхода из информационно-спра-
вочной системы в ДОС.
В целях конечной отладки программы и устранения скрытых ошибок
было решено несколько контрольных примеров по работе с системой во
всех режимах. Была создана и отредактирована основная база данных. с
ее помощью были опробованы режимы удаления, корректировки, создания
новой БД, загрузки и сохранения БД. При решении контрольных примеров
ошибок в программе не обнаружено.
ЗАКЛЮЧЕНИЕ
В данной курсовой работе были исследованы возможности языка
программирования Пролог для создания информационно-справочных систем.
Можно сделать вывод, что Пролог представляет богатые возможности для
реализации таких систем и написания дружественного интерфейса для об-
щения пользователя с программой.
ЛИТЕРАТУРА:
И.Братко "Программирование на языке Пролог для
искусственного интеллекта"
Дж.Доорс "Пролог - язык программирования будущего"
Ю.Тихонов "МПролог - язык логического
программирования. Версия 2.3"
Ш
╣
[1]A*.FRM*.MAC
<
Б[1]A*.FRM