Разработка информационно-справочной системы "Каталог строительных объектов" 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,,),
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(),nl,
write("Улиц :"),write(),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,,),
write("Город обьект :"),write(N),nl,
write("Наименование :"),write(NA),nl,
write("Код СМУ :"),write(X),nl,
write("Год вступления в эксплуатацию :"),write(OB),nl,
write("Смета стоимости :"),write(PL),nl,
write("Район :"),write(),nl,
write("Улиц :"),write(),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,,)),
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,,),
retract(svod(KY,NA,X,OB,PL,,)),!,
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,,),
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(),
cursor(Z,67),write(),
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,,),
S=KY,
S=X,
NA1=Na,KO1=N,OB1=OB,PL1=PL,FF1=,HH1=,
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,,),
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(),
cursor(Z,67),write(),
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,,),
S=OB,
S=X,
N1=KY,NA1=NA,KO1=N,PL1=PL,FF1=,HH1=,
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,,),
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(),
cursor(Z,67),write(),
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,,),
S=PL,
S>=X,
N1=KY,NA1=NA,KO1=N,HH1=,FF1=,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,,),
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(),
cursor(Z,67),write(),
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