Скачайте в формате документа WORD

Разработка информационно-справочной системы "Технический паспорт автомобиля" Prolog

Задание N П-21


На курсовое проектирование по дисциплине

"Логическое программирование" студенту

Тарасову Михаилу Сергеевичу гр. ИИ-1-95.


1. Тема:

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


2. Исходные данные:

Разработать информационно-справочную систему, обеспечивающую работу с базой данных Avto включающей записи вида:

╔═════════════════════════════════════════════════════════════════════╗

║ ТЕХ. ПАСПОРТ АВТОМОБИЛЯ ║

╠══╦═════════╦═════╦═════╦═════╦════════╦═══════════════════╦═════════╣

║N

║а ║АВТОМОБИЛ║ВЫПУС║ДВИГ ║ШАССИ║ ЗНАК ║ ║ ЧЕТ ║

╠══╬═════════╬═════╬═════╬═════╬════════╬═══════╦═════╦═════╬═════════╣


Из базы Avto создать 2 базы Avto1 и Avto2 по признакам, определяе-

мым пользователем


Меню системы должно включать режимы корректировки, ничтожения

просмотра, загрузки, сохранения.

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


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


3.1 Разработка меню, обеспечивающее взаимодействие пользователя с системой, в соответствии с заданием, предусмотрев режимы:

- корректировки данных,

- ничтожения данных,

- просмотра базы,

- загрузки базы,

- сохранения базы,

- создания новой базы.

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

- корректировки данных,

- ничтожения данных,

- просмотра базы,

- загрузки базы,

- сохранения базы,

- создания новой базы.


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


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

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




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


1. Получение задания

4.10.96

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

литературы

с 5.10.96 по 20.10.96

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

22.10.96

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

18.11.96

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

29.11.96

6. Доработка программы с четом вновь изменившихся требований

20.12.96

7. Вторичная отладка программы

21.12.96

8. Оформление пояснительной записки

24.12.96

9. Сдача работы на проверку

25.12.96

7. Защита курсовой работы

27.12.96












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

Студент /Тарасов М.С., ИИ-1-95/







 Содержание.


Введение ....................................

1. Понятие об информационных системах и их

программной реализации ...................

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

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

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

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

5.1 Основной процедуры Nachalo ...........

5.2 Вывода главного меню Mainmenu ........

5.3 Загрузки БД Zagruz ...................

5.4 Вывода информации о программе

Rabota (0) ...........................

5.5 Корректировки данных Rabota (1)......

5.6 даления записей Rabota (2) ..........

5.7 Просмотра базы Rabota (3) ............

5.8 Вывода меню загрузки Rabota (4).....

5.9 Вывода меню сохранения Rabota (5)...

5.10 Создания новой БД Rabota (6) .......

5.11 Добавления новых записей Rabota(7)..

5.12 Просмотра-добавления данных

Rabota(8) ...........................

5.13 Выхода из программы Rabota(9)..


5.14 Процедуры выбора Сhoice1............

5.15 Процедур Sbros и Sbros1.......

5.16 Загрузки БД с диска Loadbase........

5.17 Сохранения БД на диске Savebase.....

5.18 Вспомогательной для коррекции даных

Correct(N)а........................

6. Листинг программы .......................

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

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

контрольных примеров: ...................

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

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











Данная курсовая написана на языке Пролог в среде Turboа Prologа v

2.0 (русифицированная версия). В структуре языка заложены возможности

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

ляета на его основе создавать различного рода информационно - справоч-

ные системы. Структура языка Пролог соответствует структуре реляцион-

ных баз данных. Так отношению в РБД соответствует предикат в Прологе,

элементу - факт, атрибуту отношения - аргумент предиката и т.д. Встро-

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

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

системой.


Информационно-справочные системы - это программы-оболочки, служа-

щие для управления массивами и базами данных. Ва наша века всеобщей

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

труд человека во всех отраслях народного хозяйства. Значительно прос-

тилась работ московскойа милиции по обнаружению угнаного транспорта

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

лям. Бухгалтерама предприятийа и фирм теперь не нужно перебирать горы

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

информационно-справочную систему и она в добной форме выдаст всю не-

обходимую информацию.

Области применения информационно-справочных систем воистину безг-

раничны: это ведение статистики доя скот на ферме, составление ката-

логов книг в библиотеках и произведений искусства в музеях, сбор дан-

ных о наличии рабочих вакансий в данном регеоне и многие другие.

Одним иза способов програмной реализации информационно-справочной

системы является использование для ее создания языка логического прог-

раммирования Пролог. Ва данной реализации языка содержится множество

встроенных предикатов, существенно облегчающих написание таких систем.


База данных в простейшем случае - упорядоченная структур данных

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

данные, причем все записи одной базы имеют одинаковую структуру. Су-

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

реляционная. В силу особенностей языка Пролог, с его помощью реализу-

ется реляционная модель. Каждая строка в базе данных называется эле-

ментом отношения, каждая колонка - атрибутома отношения, колличество

колонок - арностью, колличество строк - мощностью. В языке програм-

мирования Пролог атрибуту отношения соответствует аргумента предиката,

рности -а колличество аргументов в предикате, отношению - предикат,

элементу - факт, и мощности - число фактов.

Исходя иза вышеперечисленных соответствий Пролог является прекрас-

ным средством для реализации реляционных баз данных.


Все режимы программы активизируются с помощью меню, которое реа-

лизовано с помощью процедуры mainmenu. Для активизации какого либо ре-

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

выбранному пункту меню.






Меню данной программы состоит из девяти пунктов:


0 - О пpогpамме... - вывод данных о системе

1 - коррекция данных - режим корректировки данных

2 - даление данных - режим даления данных

3 - просмотр базы - режим просмотра базы

4 - загрузка базы - режим загрузки базы

5 - сохранение базы - режим сохранения базы

6 - создание новой базы - режим создания новой базы

7 - ввод новых данных - выход из программы

8 - просмотр-добавление - просмотр и добавление данных

9 - выход из программы - выход


На следующей странице представлена графическая структура меню.























Процедуры создавались на основе требований, изложенных в задании

к курсовой работе.


С помощью процедуры Nachalo разделе GOAL инициируется начало вы-

полнения программы. Эта процедура запускает процедуру начальной заг-

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

вывода главного меню Mainmenu.


Эта процедур выводита список пунктов главного меню и ожидает от

пользователя ввода числа, которое будет занесено в переменную C. После

этого вызывается процедура обработки основных режимов Rabota, в кото-

рую переменная C передается в качестве аргумента. В процедуре исполь-

зован предикат Povtor, в связи с этим после возврата из процедуры Ra-

bota в случае, если C не равно 7 происходит повторныйа вывода пунктов

меню и ожидание ввода числа.


Процедура Zagruz предназначена для автоматической загрузки основ-

ной базы данных при запуске программы. Это значительно облегчает рабо-

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

основную БД из режима "Загрузка". Процедура Zagruz проверяет существо-

вание на диске файла avto.dat с помощью встроенного предиката existfi-

le и задгружает БД в память с помощью предиката consult. В случае от-

сутствия файла выдается сообщение об ошибке.


Данная процедура выводит информацию о языке, на котором написана

система и данные о создателе.


Процедура Rabota (1) служит коррекции данных, находящихся в БД, и

внесения новых записей.При активизации процедура запрашивает номер за-

писи и если таковая существует выводит ее значения послеа чего просит

ввести новыеа значения.Если же запись с таковым номером не существует

то процедура выводит сообщение об этом просит повторить номера записи

после чего осуществляется ввод новых данных.


Данная процедура предназначена для удаления записей из базы дан-

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

предикат Choice1. После выбора признака все записи содержащие его да-

ляются с помощью встроенного предиката Retract.


Процедура Rabota (3) выводит содержание базы данных в виде таблицы.


Данная процедура выводит меню, содержащее следующие пункты: "База

будет загружена из казанного файла", " База будет загружена из файла

avto.dat", " Выход в основное меню". Загрузка баз данных осуществляет-

ся процедурой Loadbase, аргументом которой служит переменная C, счи-

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

меню.


Процедура Rabotaа (5)а аналогична Rabota (4). Для сохранения баз

данных применяется процедура Savebase, рассмотренная ниже, аргументом

которой является переменная I.




Данная процедура служит для создания новых баз данных. Процедура

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

будет создана новая БД :


1 - По марке автомобиля

2 - По году выпуска

3 - По району чета

4 - Выход в основное меню

=>

Выбор делается вводом соответствующей цифры после чего процедура

передаета правлениеа процедуре Rabota1(N)а где N - номер выбранного

пункта. Процедура Rabota1 будет рассмотрена ниже.


5.11а Процедура ввода новых данных Rabota(7)


Процедура предназначена для ввода новых данных в базу.После ее за-

пуска происходит последовательный запрос каждого следующего поля запи-

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

меню.

5.12а Процедура просмотра и добавления данных


Данная процедур запрашиваета номера записи и если находит в базе

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

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

Если же записи с данным номером нет в базе то процедур просит

повторить ввод номера и после этого производится последовательный ввод

данных.

5.13


Данная процедура состоит из отсечения, которое запрещает дальней-

ший перебор. Процедура оканчивается спехом и происходита возврата в

процедуру Mainmenu, в которой выполняется словие C=7, благодаря чему

происходит выход из программы.


5.14

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

вателема либо собственно номера этой записи, либо после ввода фамилии

другого поля меню и возвращает этот номер в вызывавшую процедуру.


5.15


Процедуры Sbrosа иа Sbros1а являются вспомагательными к процедуре

Correct(1). Они позволяют определить, следует ли замещать имеющийся

элемент записи на новый или нет (если была нажата клавиша <Enter>). В

процедурах проверяется, является ли первый аргумента пустойа строкой.

Если это так, то третьему аргумент присваивается второй. Если же пер-

вый аргумент не является пустой строкой, то он присваивается третьему

ргументу (в Sbros1 происходит предварительное преобразование строко-

вой переменной в целочисленную).


5.16

Данная процедура осуществляет загрузку баз данных иза файлова на

диске по признакам, зависящим от аргумента процедуры: Loadbase(1) заг-




ружает основную БД из файла, заданного пользователем, Loadbase(2) - из

файл avto.dat В данных процедурах проверяется наличие файла на диске

с помощью предиката existfile и загрузка БД в память с помощью преди-

ката consult. В случае отсутствия файла на диске, выдается соответс-

твующее сообщение.

5.17

Данная процедура осуществляет сохранение баз данных ва файлаха на

диске по признакам, зависящим от аргумента процедуры: Savebase(1) сох-

раняет основную БД в файле, заданном пользователем, Savebase(2) -а в

файле bit.dat. Сохранение БД осуществляется с помощью встроенного пре-

диката save. В случае ошибки выдается соответствующее сообщение.


5.18а Процедура Cjrrect(j,i).

Данная процедура обеспечивает ввод соответствующего поля записи.























domains

z,n,dvig,god,n1,shasi,i=integer

j,mark,znac,fam,ima,otc,ucet=string


database -avto1

avto1(i,j,i,i,i,j,j,j,j,j)

database -avto2

avto2(i,j,i,i,i,j,j,j,j,j)

database -avto3

avto3(i,j,i,i,i,j,j,j,j,j)

database

avto(i,j,i,i,i,j,j,j,j,j)


predicates


nachalo

mainmenu

zagruz

choice1(i)

correct(i,i)

rabota(i)

rabota1(i)

savebase(i)

loadbase(i)

povtor

sbros(j,j,j)

sbros1(j,i,i)


goal

nachalo.


clauses


/*Процедура создания основного меню и загрузки базы данных*/


nachalo:makewindow(1,7,7,"ТЕХ. ПАСПОРТ АВТОМОБИЛЯ",0,0,25,80),

clearwindow,zagruz,

mainmenu.


/*Процедура управления основным меню*/


mainmenu:-

povtor,

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(Vibor),

Vibor >= 0,

Vibor < 10,

clearwindow,

rabota(Vibor),

clearwindow,

Vibor = 9,

retractall(_),

removewindow.


/*Процедура поиска и загрузки файла содержащего базу данных*/


zagruz:existfile("avto.dat"),

consult("avto.dat"),

cursor(1,2),

write("База загружена").

zagruz:cursor(1,2),

write("Нет базы на диске").


/*Пpоцедуpа ввода новых данных*/


rabota(7):makewindow(1,7,7,"Ввод новых данных",0,0,25,80),

nl,

WRITE("Введите порядковый номер :"),readint(K),nl,

write("Введите МАРКУ :"),readln(F),nl,

write("Введите ГОД ВЫПУСК :"),readint(Y),nl,

write("Введите N ДВИГАТЕЛЯ :"),readint(J),nl,

write("Введите N ШАССИ :"),readint(G),nl,

write("Введите НОМЕРНОЙ ЗНАК :"),readln(W),nl,

write("Введите ФАМИЛИЮ :"),readln(B),nl,

write("Введите ИМЯ :"),readln(C),nl,

write("Введите ОТЧЕСТВО :"),readln(D),nl,

write("Введите РАЙОН ЧЕТ :"),readln(R),nl,


N1=K,MARK1=F,GOD1=Y,DVIG1=J,SHASI1=G,ZNAC1=W,

FAM1=B,IMA1=C,OTC1=D,UCET1=R,

assertz(avto(N1,MARK1,GOD1,DVIG1,SHASI1,ZNAC1,FAM1,IMA1,OTC1,UCET1)),

removewindow, fail.


/*Процедура просмотра-добавления*/


rabota(8):-

makewindow(1,7,7,"Просмотр-добавление",0,0,25,80),

nl,

write("Введите номер записи:"),readint(A),nl,nl,

avto(N,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

A=N,



write("НОМЕР ЗАПИСИ :"),write(N),nl,

write("МАРК :"),write(MARK),nl,

write("ГОД ВЫПУСК :"),write(GOD),nl,

write("N ДВИГАТЕЛЯ :"),write(DVIG),nl,

write("N ШАССИ :"),write(SHASI),nl,

write("НОМЕРНОЙ ЗНАК :"),write(ZNAC),nl,

write("ФАМИЛИЯ :"),write(FAM),nl,

write("ИМЯ :"),write(IMA),nl,

write("ОТЧЕСТВО :"),write(OTC),nl,

write("РАЙОН ЧЕТ :"),write(UCET),nl,nl,

readchar(_),

removewindow,

!.



rabota(8):-

write("Этого номера записи нет в базе."),

write("Повторите введенный номер записи и продолжайте ввод данных"),

nl,nl,nl,

write("Введите номер:"),

readint(A),nl,

N1=A,

write("МАРК :"),readln(F),nl,

write("ГОД ВЫПУСК :"),readint(Y),nl,

write("N ДВИГАТЕЛЯ :"),readint(J),nl,

write("N ШАССИ :"),readint(G),nl,

write("НОМЕРНОЙ ЗНАК :"),readln(W),nl,

write("ФАМИЛИЯ :"),readln(B),nl,

write("ИМЯ :"),readln(C),nl,

write("ОТЧЕСТВО :"),readln(D),nl,

write("РАЙОН ЧЕТ :"),readln(R),nl,


MARK1=F,GOD1=Y,DVIG1=J,SHASI1=G,ZNAC1=W,FAM1=B,IMA1=C,OTC1=D,UCET1=R,

assertz(avto(N1,MARK1,GOD1,DVIG1,SHASI1,ZNAC1,FAM1,IMA1,OTC1,UCET1)),

removewindow,

fail.


/*Пpоцедуpа вывода данных о пpогpамме*/

rabota(0):makewindow(1,54,7,"О пpогpамме...",5,5,20,50),

write("а Инфоpмационно-спpавочная система"),nl,nl,

write(" о техническом паспорте автомобиля "),nl,nl,

write(" Язык-TURBO-PROLOG v.2.0. "),nl,nl,

write(" автоp:ТАРАСОВ М. "),nl,nl,

write(" МИРЭА, гp.ИИ-1-95а (с) 1996 г. "),nl,nl,nl,

write(" Нажмите на любую клавишу"),

readchar(_),

removewindow.


/*Процедура удаления записей из базы данных*/

rabota(2):makewindow(1,7,7,"Удаление записей",0,0,25,80),




nl,

choice1(N),

X=N,

avto(X,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

retract(avto(X,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET)),!,

removewindow.


/*Процедура просмотра содержимого базы данных*/

rabota(3):makewindow(1,7,7,"Просмотp базы",0,0,25,80),

nl,

write(" ╔═════════════════════════════════════════════════════════╗"),nl,

write(" ║ ТЕХ. ПАСПОРТ АВТОМОБИЛЯ ║"),nl,

write(" ╠══╦═════════╦═════╦═════╦═════╦════════╦═══════╦═════════╣"),nl,

write(" ║N

write(" ║а ║АВТОМОБИЛ║ВЫПУС║ДВИГ ║ШАССИ║ ЗНАК ║ ║ ЧЕТ ║"),nl,

write(" ╠══╬═════════╬═════╬═════╬═════╬════════╬═╦═════╬═════════╣"),nl,

avto(N,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

cursor(Z,_),cursor(Z,1),write("║"),

cursor(Z,2),write(N),cursor(Z,4),write("║"),

cursor(Z,5),write(MARK),cursor(Z,14),write("║"),

cursor(Z,15),write(GOD),cursor(Z,20),write("║"),

cursor(Z,21),write(DVIG),cursor(Z,26),write("║"),

cursor(Z,27),write(SHASI),cursor(Z,32),write("║"),

cursor(Z,33),write(ZNAC),cursor(Z,41),write("║"),

cursor(Z,42),write(FAM),cursor(Z,49),write("║"),

cursor(Z,50),write(IMA),cursor(Z,58),write("║"),

cursor(Z,59),write(OTC),cursor(Z,66),write("║"),

cursor(Z,67),write(UCET),

cursor(Z,76),write("║"),

nl,

fail.


rabota(3):-

write(" ╠══╬═════════╬═════╬═════╬═════╬════════╬══╬═══════╬═════════╣"),

nl,

write("Нажмите на любую клавишу"),

readchar(_),

removewindow.


/*Процедура загрузки в память базы данных*/

rabota(4):nl,

makewindow(2,15,4,"Загрузка",5,5,20,70),

write("1 - База будет загружена из казанного файла"),nl,

write("2 - База будет загружена из файла avto.dat"),nl,

write("3 - Выход в основное меню"),nl,

write("==>"),

readint(C),

C>0,C<4,

loadbase(C),

!,

removewindow.




/*Процедура сохранения базы данных*/

rabota(5):nl,

makewindow(2,15,4,"Запись",5,5,20,70),

write("1 - База будет записана в указанный файл"),nl,

write("2 - База будет записана в файл avto.dat"),nl,

write("3 - Выход в основное меню"),nl,

write("==>"),

readint(I),

I>0,I<4,

savebase(I),!,

removewindow.


/*Процедура выбора создания новой базы*/

rabota(6):nl,

makewindow(3,7,7,"Создание новой базы",0,0,25,80),

write(" 1 - По марке автомобиля"),nl,

write(" 2 - По году выпуска"),nl,

write(" 3 - По району учета"),nl,

write(" 4 - Выход в основное меню"),nl,

write("==>"),

readint(O),

O>0,O<5,

rabota(O),

removewindow.


/*Процедура изменения содержимого записей базы данных*/

rabota(1):makewindow(1,7,7,"Коppекция данных",0,0,25,80),

nl,

choice1(N),

X=N,

avto(X,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

write("НОМЕР ЗАПИСИ :"),write(N),nl,

write("МАРК :"),write(MARK),nl,

write("ГОД ВЫПУСК :"),write(GOD),nl,

write("N ДВИГАТЕЛЯ :"),write(DVIG),nl,

write("N ШАССИ :"),write(SHASI),nl,

write("НОМЕРНОЙ ЗНАК :"),write(ZNAC),nl,

write("ФАМИЛИЯ :"),write(FAM),nl,

write("ИМЯ :"),write(IMA),nl,

write("ОТЧЕСТВО :"),write(OTC),nl,

write("РАЙОН ЧЕТ :"),write(UCET),nl,nl,

write("Введите МАРКУ :"),readln(MARK1),nl,

write("Введите ГОД ВЫПУСК :"),readln(GOD1),nl,

write("Введите N ДВИГАТЕЛЯ :"),readln(DVIG1),nl,

write("Введите N ШАССИ :"),readln(SHASI1),nl,

write("Введите НОМЕРНОЙ ЗНАК :"),readln(ZNAC1),nl,

write("Введите ФАМИЛИЮ :"),readln(FAM1),nl,

write("Введите ИМЯ :"),readln(IMA1),nl,

write("Введите ОТЧЕСТВО :"),readln(OTC1),nl,

write("Введите РАЙОН УЧЕТ :"),readln(UCET1),nl,



X1=X,

retract(avto(X,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET)),

sbros(MARK1,MARK,MARK2),

sbros1(GOD1,GOD,GOD2),

sbros1(DVIG1,DVIG,DVIG2),

sbros1(SHASI1,SHASI,SHASI2),

sbros(ZNAC1,ZNAC,ZNAC2),

sbros(FAM1,FAM,FAM2),

sbros(IMA1,IMA,IMA2),

sbros(OTC1,OTC,OTC2),

sbros(UCET1,UCET,UCET2),

assertz(avto(X1,MARK2,GOD2,DVIG2,SHASI2,ZNAC2,FAM2,

IMA2,OTC2,UCET2)),

!,

removewindow.

rabota(_).


sbros("",MARK,MARK2):MARK2=MARK,

!.


sbros(MARK1,_,MARK2):MARK2=MARK1,

!.


sbros1("",MARK,MARK2):MARK2=MARK,

!.

sbros1(MARK1,_,MARK2):str_int(MARK1,MARK3),

MARK2=MARK3,

!.


/*Процедура создания новой базы данных и ее сохранения*/


rabota1(1):makewindow(1,7,7,"Создание новой базы по марке автомобиля",0,0,25,80),

nl,

cursor(7,10),

retractall(_,avto1),

nl,

write("Введите марку автомобиля:"),

readln(X),

avto(N,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

S=MARK,

S=X,

N1=N,GOD1=GOD,DVIG1=DVIG,SHASI1=SHASI,

ZNAC1=ZNAC,FAM1=FAM,IMA1=IMA,OTC1=OTC,UCET1=UCET,

assert(avto1(N1,S,GOD1,DVIG1,SHASI1,ZNAC1,FAM1,

IMA1,OTC1,UCET1)),

fail.





rabota1(1):-

write("База создана"),nl,

write("╔═════════════════════════════════════════════════════════╗"),nl,

write("║ ТЕХ. ПАСПОРТ АВТОМОБИЛЯ ║"),nl,

write("╠══╦═════════╦═════╦═════╦═════╦═══════╦════════╦═════════╣"),nl,

write("║N

write("║а ║АВТОМОБИЛ║ВЫПУС║ДВИГ ║ШАССИ║ ЗНКа ║ ║ ЧЕТ ║"),nl,

write("╠══╬═════════╬═════╬═════╬═════╬═══════╬════════╬═════════╣"),nl,


avto1(N,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

cursor(Z,_),cursor(Z,1),write("║"),

cursor(Z,2),write(N),cursor(Z,4),write("║"),

cursor(Z,5),write(MARK),cursor(Z,14),write("║"),

cursor(Z,15),write(GOD),cursor(Z,20),write("║"),

cursor(Z,21),write(DVIG),cursor(Z,26),write("║"),

cursor(Z,27),write(SHASI),cursor(Z,32),write("║"),

cursor(Z,33),write(ZNAC),cursor(Z,41),write("║"),

cursor(Z,42),write(FAM),cursor(Z,49),write("║"),

cursor(Z,50),write(IMA),cursor(Z,58),write("║"),

cursor(Z,59),write(OTC),cursor(Z,66),write("║"),

cursor(Z,67),write(UCET),

cursor(Z,76),write("║"),

nl,

fail.


rabota1(1):-

write(" ╠══╬═════════╬═════╬═════╬═════╬════════╬════════╬═════════╣"),

save("avto1.dat",avto1),

nl,

write("База сохранена в файле avto1.dat"),

nl,

write("Нажмите любую клавишу"),

readchar(_),

removewindow,

!.


rabota1(1):-

write(" ╠══╬═════════╬═════╬═════╬═════╬════════╬═══════╬═════════╣"),

nl,

write("Невозможно сохранить созданную базу"),

nl,

write("Нажмите любую клавишу"),

readchar(_),

makewindow(1,7,7,"ТЕХ. ПАСПОРТ АВТОМОБИЛЯ",0,0,25,80).



rabota1(2):makewindow(1,7,7,"Создание новой базы по году выпуска",0,0,25,80),

nl,

cursor(7,10),

retractall(_,avto2),

nl,

write("Введите год выпуска автомобиля:"),



readint(X),

avto(N,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

S=GOD,

S=X,

N1=N,MARK1=MARK,DVIG1=DVIG,SHASI1=SHASI,ZNAC1=ZNAC,FAM1=FAM,

IMA1=IMA,OTC1=OTC,UCET1=UCET,

assert(avto2(N1,MARK1,S,DVIG1,SHASI1,ZNAC1,FAM1,IMA1,

OTC1,UCET1)),

fail.


rabota1(2):-

write("База создана"),nl,

write(" ╔════════════════════════════════════════════════════════╗"),nl,

write(" ║ ТЕХ. ПАСПОРТ АВТОМОБИЛЯ ║"),nl,

write(" ╠══╦═════════╦═════╦═════╦═════╦════════╦══════╦═════════╣"),nl,

write(" ║N

write(" ║а ║АВТОМОБИЛ║ВЫПУС║ДВИГ ║ШАССИ║ ЗНАК ║ ║ ЧЕТ ║"),nl,

write(" ╠══╬═════════╬═════╬═════╬═════╬════════╬══════╬═════════╣"),nl,


avto2(N,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

cursor(Z,_),cursor(Z,1),write("║"),

cursor(Z,2),write(N),cursor(Z,4),write("║"),

cursor(Z,5),write(MARK),cursor(Z,14),write("║"),

cursor(Z,15),write(GOD),cursor(Z,20),write("║"),

cursor(Z,21),write(DVIG),cursor(Z,26),write("║"),

cursor(Z,27),write(SHASI),cursor(Z,32),write("║"),

cursor(Z,33),write(ZNAC),cursor(Z,41),write("║"),

cursor(Z,42),write(FAM),cursor(Z,49),write("║"),

cursor(Z,50),write(IMA),cursor(Z,58),write("║"),

cursor(Z,59),write(OTC),cursor(Z,66),write("║"),

cursor(Z,67),write(UCET),

cursor(Z,76),write("║"),

nl,

fail.


rabota1(2):-

write(" ╠══╬═════════╬═════╬═════╬═════╬════════╬════════╬═════════╣"),

save("avto2.dat",avto2),

nl,

write("База сохранена в файле avto2.dat"),

nl,

write("Нажмите любую клавишу"),

readchar(_),

removewindow,

!.


rabota1(2):-

write(" ╠══╬═════════╬═════╬═════╬═════╬═══════╬═══════╬═════════╣"),

nl,

write("Невозможно сохранить созданную базу"),

nl,

write("Нажмите любую клавишу"),

readchar(_),

makewindow(1,7,7,"ТЕХ. ПАСПОРТ АВТОМОБИЛЯ",0,0,25,80).



rabota1(3):makewindow(1,7,7,"Создание новой базы по району чета",0,0,25,80),

nl,

cursor(7,10),

retractall(_,avto3),

nl,

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

readln(X),

avto(N,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

S=UCET,

S=X,

N1=N,MARK1=MARK,GOD1=GOD,DVIG1=DVIG,SHASI1=SHASI,

ZNAC1=ZNAC,FAM1=FAM,IMA1=IMA,OTC1=OTC,

assert(avto3(N1,MARK1,GOD1,DVIG1,SHASI1,ZNAC1,FAM1,

IMA1,OTC1,S)),

fail.

rabota1(3):-

write("База создана"),nl,

write(" ╔══════════════════════════════════════════════════════╗"),nl,

write(" ║ ТЕХ. ПАСПОРТ АВТОМОБИЛЯ ║"),nl,

write(" ╠══╦═════════╦═════╦═════╦═════╦══════╦══════╦═════════╣"),nl,

write(" ║N

write(" ║а ║АВТОМОБИЛ║ВЫПУС║ДВИГ ║ШАССИ║ ЗНАК ║ ║ ЧЕТ ║"),nl,

write(" ╠══╬═════════╬═════╬═════╬═════╬══════╬══════╬═════════╣"),nl,


avto3(N,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

cursor(Z,_),cursor(Z,1),write("║"),

cursor(Z,2),write(N),cursor(Z,4),write("║"),

cursor(Z,5),write(MARK),cursor(Z,14),write("║"),

cursor(Z,15),write(GOD),cursor(Z,20),write("║"),

cursor(Z,21),write(DVIG),cursor(Z,26),write("║"),

cursor(Z,27),write(SHASI),cursor(Z,32),write("║"),

cursor(Z,33),write(ZNAC),cursor(Z,41),write("║"),

cursor(Z,42),write(FAM),cursor(Z,49),write("║"),

cursor(Z,50),write(IMA),cursor(Z,58),write("║"),

cursor(Z,59),write(OTC),cursor(Z,66),write("║"),

cursor(Z,67),write(UCET),

cursor(Z,76),write("║"),

nl,

fail.

rabota1(3):-

write(" ╠══╬═════════╬═════╬═════╬═════╬════════╬════════╬═════════╣"),

save("avto3.dat",avto3),

nl,

write("База сохранена в файле avto3.dat"),

nl,

write("Нажмите любую клавишу"),

readchar(_),

removewindow,

!.


rabota1(3):-

write(" ╠══╬═════════╬═════╬═════╬═════╬════════╬════════╬═════════╣"),

nl,



write("Невозможно сохранить созданную базу"),

nl,

write("Нажмите любую клавишу"),

readchar(_),

makewindow(1,7,7,"ТЕХ. ПАСПОРТ АВТОМОБИЛЯ",0,0,25,80).


/*Процедура записи на диск*/

savebase(1):write("Введите имя файла :"),

readln(N),

save(N),

write("Все в порядке"),

beep,

!.


savebase(1):write("Ошибка обмена, нажмите любую клавишу"),

readchar(_).


savebase(2):save("avto.dat").


savebase(3).

/*Процедура чтения с диска*/

loadbase(1):retractall(_),

write("Введите имя файла :"),

readln(N),

existfile(N),

consult(N),

write("Все в порядке"),

beep,

!.


loadbase(1):nl,

write("Данного файла нет на диске"),nl,

write("Нажмите любую клавишу"),

readchar(_).


loadbase(2):retractall(_),

existfile("avto.dat"),

consult("avto.dat"),

write("Все в порядке"),

beep,

!.


loadbase(2):write("Файла avto.dat нет на диске"),nl,

write("нажмите любую клавишу"),

readchar(_).




loadbase(3).


povtor.

povtor:- povtor.


/*Выбор записи*/

аchoice1(N):nl,

write("1 - известен номер записи "),nl,

write("2 - известна МАРК "),nl,

write("3 - известен ГОД ВЫПУСК "),nl,

write("4 - известен N ДВИГАТЕЛЯ "),nl,

write("5 - известен N ШАССИ "),nl,

write("6 - известен НОМЕРНОЙ ЗНКа "),nl,

write("7 - известна ФАМИЛИЯ "),nl,

write("8 - известно ИМЯ "),nl,

write("9 - известно ОТЧЕСТВО "),nl,

write("10- известен РАЙОН УЧЕТ "),nl,

write("=>"),

readint(X),

correct(X,N).


correct(1,N):nl,

write("Введите номер записи :"),

readint(N),

avto(M,_,_,_,_,_,_,_,_,_),

M=N.


correct(1,N):N=0.


correct(2,N):nl,

write("Введите марку автомобиля :"),

readln(L),

avto(Z,L,_,_,_,_,_,_,_,_),

N=Z.


correct(2,N):N=0.


correct(3,N):nl,

write("Введите Год выпуск : "),

readint(F),

avto(Z,_,F,_,_,_,_,_,_,_),

N=Z.


correct(3,N):N=0.

correct(4,N):nl,




write("Введите N двигателя :"),

readint(Q),

avto(Z,_,_,Q,_,_,_,_,_,_),

N=Z.


correct(4,N):N=0.


correct(5,N):nl,

write("Введите N шасси :"),

readint(W),

avto(Z,_,_,_,W,_,_,_,_,_),

N=Z.


correct(5,N):N=0.


correct(6,N):nl,

write(":"),

readln(ZNAC),

avto(Z,_,_,_,_,ZNAC,_,_,_,_),

N=Z.


correct(6,N):N=0.


correct(7,N):nl,

write(":"),

readln(FAM),

avto(Z,_,_,_,_,_,FAM,_,_,_),

N=Z.


correct(7,N):N=0.


correct(8,N):nl,

write(":"),

readln(IMA),

avto(Z,_,_,_,_,_,_,IMA,_,_),

N=Z.


correct(8,N):N=0.


correct(9,N):nl,

write(":"),

readln(OTC),

avto(Z,_,_,_,_,_,_,_,OTC,_),

N=Z.



correct(9,N):N=0.


correct(10,N):nl,

write(":"),

readln(UCET),

avto(Z,_,_,_,_,_,_,_,_,UCET),

N=Z.


Программа "Технический паспорт автомобиля" представляет собой ин-

формационно-справочную систему. В данной программе имеется возможность

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

выбираемому пользователем признаку. В основной БД присутствуют данные

о марке,годе выпуска,номере двигателя и шасси,номерном знаке,фамилии,

имени и отчестве владельца, также районе чета. В дочерней БД имеются

те же данные но для одного конкретного признака,как-то марка автомоби-

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

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

совпадения.


При запуске программы на экран выводится главное меню:


0 - О пpогpамме...

1 - коррекция данных

2 - даление данных

3 - просмотр базы

4 - загрузка базы

5 - сохранение базы

6 - создание новой базы

7 - ввод новых данных

8 - просмотр-добавление

9 - выход из программы


Для выбора какого-либо пункта следует нажать соответствующую циф-

ровую клавишу.


При выборе данного пункта на экран выводятся данные о системе и

ее авторе. После нажатия на любую клавишу происходит выход в главное

меню.

Выводится меню:


1 - известен номер записи

2 - известна МАРКА

3 - известен ГОД ВЫПУСКА

4 - известен N ДВИГАТЕЛЯ

5 - известен N ШАССИ

6 - известен НОМЕРНОЙ ЗНАК

7 - известна ФАМИЛИЯ

8 - известно ИМЯ

9 - известно ОТЧЕСТВО

10- известен РАЙОН ЧЕТА




Следует ввести цифру соответствующего пункта. После этого система

запросита соответственно номер и т.д. Данные следует вводить в том же

виде в каком они емеются в базе данных (такое же сочетание строчныха и

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

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

вать, последовательно распечатывая поля записи. Если данные в текущем

поле исправлять не требуется, следует нажать клавишу <Enter>.


Данный режим служит для даления записей из базы данных. Как и в

подпункте "Крректировка данных" пользователюа предоставляется возмож-

ность ввести необходимое поле записи. После ввода этих данных произой-

дет даление выбранной записи.


Данный режим предназначен для просмотра содержимого имеющихся баз

данных. На экран выводится таблица всех записей текущей базы.


Данный режима предназначен для загрузки баз данных из файлов. При

входе в этот пункт выводится меню:


1 - База будет загружена из указанного файла

2 - База будет загружена из файла avto.dat

3 - Выход в основное меню


При выборе пунктов 1 и 2 произойдет загрузк соответственно ос-

новнойа иа дочернейа Да из стандартного файла avto.dat или казанного

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

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

главное меню.


Пункт 3 предназначен для выхода в главное меню.

Данный режим предназначен для сохранения баз данных. При входе

в данный режим выводится следующее меню:


1 - База будет записана в казанный файл

2 - База будет записана в файл avto.dat

3 - Выход в основное меню


Работ с его пунктами полностью аналогична работе с подменю режи-

ма "Загрузка базы".


Данный режим предназначен для создания дочерних база данных. При

запуске этого режима выводитсяь меню:


1 - По марке автомобиля

2 - По году выпуска

3 - По району чета

4 - Выход в основное меню


Вводом соответствующей цифры производится выбор нужного параметра

для создания новой базы.После чего производится его ввод.Новые базы

сохраняются автоматическиа соответственно ва файлах avto1.dat, av-

to2.dat, avto3.dat и содержат все записи имеющие одинаковый заданный

параметр.



Пункт 4 производит возвращение к основному меню.


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

ной системы в ДОС.


В целях конечной отладки программы и устранения скрытых ошибок бы-

ло решено несколько контрольных примеров по работе с системой во всех

режимах. Была создана и отредактирована основная база данных. с ее по-

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

БД, загрузки и сохранения БД. При решении контрольных примеров ошибок

в программе не обнаружено.


В даннойа курсовой работе были исследованы возможности языка прог-

раммирования Пролог для создания информационно-справочных систем. Мож-

но сделать вывод, что Пролог представляет богатые возможности для реа-

лизации таких систем и написания дружественного интерфейса для общения

пользователя с программой.





 ЛИТЕРАТУРА:


И.Братко "Программирование на языке Пролог для

искусственного интеллекта"


Дж.Доорс "Пролог - язык программирования будущего"


Ю.Тихонова "Пролог - язык логического

программирования. Версия 2.3"