Скачать работу в формате MO Word.

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

Задание N П-14

P

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

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

Липаткину Дмитрию Вячеславовичу гр. ИИ-1-95.


1. Тема:

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


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

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

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

║ TEХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ ║

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

║ ║Года ║а Nо ║а No ║ ║номер.║Паспорт ║ ФИО ║Район║

║Марка║выпу-║ Дви- ║шасси║цвет║знака ╠═════╦════╬═╦═╦═╣Учёта║

║авт. ║ ска ║гателя║ ║ ║ ║Серия║ No ║Ф║И║О║ ║

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


Меню системы должно включать режимы:cохранения, загрузки,

просмотра-добавления, корректировки, создания из базы ВТ

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

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


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/








aСодержание

@стр.

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

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

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

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

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

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

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

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

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

5.3 Вывода информации о системе

Process(0)...........................

5.4 Вывода меню корректировки Process(1).

5.5 Удаления записей Process(2)..........

5.6 Вывода меню просмотра Process(3).....

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

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

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

5.10 Ввода новых данных Process(7)......

5.11 Просмотра-добавления Process(8)....

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

5.13 Процедура выбора записи Select(_)..

5.14 Загрузки БД с диска Lod............

5.15 Сохранения БД на диске Sve.........

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

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

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

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

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

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







@

@Введение


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

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

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

ных, что позволяет на его основе создавать различного рода инфор-

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

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

соответствует предикат в Прологе, элементу - факт, атрибуту отно-

шения - аргумент предиката и т.д. Встроенные ва Пролога предикаты

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

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


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

@системах и @их программной реализации


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

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

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

тельно облегчают труд человека во всех отраслях народного хозяй-

ства. Значительно простилась работ московской милиции по обна-

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

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

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

о сотруднике: достаточно загрузить информационно-справочную сис-

тему и она в добной форме выдаст всю необходимую информацию.

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

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

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

зеях, сбор данных о наличии рабочих вакансий в даннома регеоне и

многие другие.

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

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

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

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

написание таких систем.


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


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

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

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

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

иерархическая, сетевая и реляционная. В силу особенностейа языка

Пролог, с его помощью реализуется реляционная модель. Каждая

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

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

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

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

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

ту - факт, и мощности - число фактов. Исходя иза вышеперечислен-

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

зации реляционных баз данных.


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


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

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

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

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

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


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

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

2 - Уничтожение данных - режим даления данных

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

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

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

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

7 - Ввод новых данных - режим ввода новых данных

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

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




















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


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

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



@ 5.1 Основная процедура Start.


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

ло выполнения программы. Эта процедура загружаета начальнуюа базу

данных, после чего передает правление процедуре вывод главно-

го меню Patch.


@ 5.2 Процедура вывода главного меню Patch.


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

дает от пользователя ввода числа, которое будет занесено ва пере-

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

жимов Process, в которую переменная C передается в качестве аргу-

мента. В процедуре использован предикат Repeat, ва связиа са этим

после возврата из процедуры Process в случае, если C не равно 9

происходит повторный вывод пунктов меню и ожидание ввода числа.


@5.3 Процедура вывода информации о системе Process(0).


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

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


@5.4 Процедура вывода меню коррекции данных Process(1).


Процедура Process(1) служит для вывода менюа режим коррек-

ции данных, находящихся в БД, и внесения новых записей. После ак-

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

мощью которых надо выбрать интересующийа васа объекта изменения.

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

мощью нажатия соответствующей цифровой клавиши. Считанное са кла-

виатуры число заносится в переменную X, после чего вызывается

процедура Select, аргументом которой служит X. С помощью процеду-

ры Select, описанной ниже, собственно и реализуетcя режима кор-

рекции. В процедуре Process(1) также применен предикат Repeat, с

помощью которого реализован повторный вывод меню в случае ошибки

ввода.


@5.5 Процедура удаления записей Process(2).


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

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

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

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

ся процедурой Select,описанной ниже. Процедура Selectа возвращает

номер выбранной записи и с помощью встроенного предикат retract

запись даляется из базы данных. В случае ошибки (отсутствия за-

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

ствующее сообщение (процедура Error).


@5.6 Процедура вывода меню просмотра БД Process(3).


Процедура Process(3) выводит cодержимое базы данных.Для вы-

хода в главное меню надо нажать любую клавишу.


@5.7 Процедура вывода меню загрузки БД Process(4).


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

"Загрузить основную базу из выбранного файла", " Загрузить основ-

ную базу из файла dima.dat", "Выход в главное меню". Собственно

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

торой служит переменная C, считанная c клавиатуры при вводе

пользователема номер желаемого пункт меню. В процедуре

Process(4) также применена процедура Repeat.


@5.8 Процедура вывода меню сохранения БД Process(5).


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

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

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


@5.9 Процедура создания новой БД Process(6).


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

цедура работает следующим образом: из базы, все записи рассматри-

ваются по заданому вами признаку и записи, имеющие этот признак,

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

файл "not.dat".В этой процедуре используется процедура Procedure,

которая имеет переменную С, которая описана ниже.


@ 5.10 Процедура ввода новых данных Process(7).

@

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

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

ле чего она их заносит в БД и вы выходите в главное меню.

@

@ 5.11 Процедура просмотра-добавления Process(8).


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

данных. Процедура работает так: надо ввести маркуа автомобиля и

появятся все данные про этот автомобиль и при нажатии клавиши бу-

дет осуществлен выход в главное меню, если вы ввели не существую-

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

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


@5.12 Процедура выхода из программы Process(9).

@

@ Данная служит для выхода из программы. она происходит при на-

жатии клавиши 9.



@ 5.13 Процедура выбора записи Select(_).


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

которых вы хотите изменить запись. Вы набираете номер признака, а

потом и вводите его. Дальше выполняется процедура Sel(M,N). C пе-

ременной М (признак, который вы ввели) вы входите в эту процеду-

ру. Процедура по признаку М находит номер записи N и отсылает об-

ратно в процедуру Select.


@5.14 Процедура загрузки БД с диска Lod.


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

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

lod(1) загружает основную БД из файла, заданного

пользователем,lod(2) - из файл dima.dat. Ва данныха процедурах

проверяется наличие файла на диске с помощью предикат existfile

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

сутствия файла на диске, выдается соответствующее сообщение (про-

цедура Io_error).


@5.15 @Процедура сохранения БД на диске Sve.


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

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

Sve(1) сохраняет основную Да ва файле, заданнома пользователем,

Sve(2) - в файле dima.dat. Сохранение Да осуществляется са по-

мощью встроенного предиката save. В случае ошибки выдается соот-

ветствующее сообщение (процедура Error).


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


/* **************************

* КУРСОВАЯ РБот *

* *

* *

* *

**************************

*/

domains

b,c,d,m,r,z,i,n,n1,ko,ob,pl=integer

t,a,f,s,l,p,u,na,j=symbol

database -svod1

svod1(a,b,c,d,f,m,t,r,s,l,p,u)

database -lolo

lolo(a,b,c,d,f,m,t,r,s,l,p,u)

database -kuku

kuku(a,b,c,d,f,m,t,r,s,l,p,u)

database

svod(a,b,c,d,f,m,t,r,s,l,p,u)

predicates

start

patch

load

select(i)

sel(i,i)

process(i)

procedure(i)

sve(i)

lod(i)

repeat


goal

start.


clauses

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

start:-

makewindow(1,10,0,"ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ",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("dima.dat"),

consult("dima.dat"),

cursor(1,2),

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

load:-

cursor(1,2),

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

/*Пpоцедуpа ввода новых данных,стр. */

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

nl,

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

write("Введите год выпуск :"),readint(O),nl,

write("Введите номер двигателя :"),readint(I),nl,

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

write("Введите цвет :"),readln(T),nl,

write("Введите номерной знак :"),readint(FF),nl,

write("Введите серию паспорт :"),readln(OO),nl,

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

write("Введите фамилию :"),readln(KK),nl,

write("Введите инициалы имени :"),readln(II),nl,

write(" oтчества :"),readln(TT),nl,

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

N1=K,NA1=O,KO1=I,OB1=Y,PL1=T,FF1=FF,OO1=OO,

YY1=YY,KK1=KK,II1=II,TT1=TT,HH1=HH,

assertz(svod(N1,NA1,KO1,OB1,PL1,FF1,OO1,YY1,KK1,II1,TT1,HH1)),

removewindow,

fail.

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

process(8):-

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

nl,

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

svod(KY,NA,KO,OB,PL,N,,,,,,),

A=KY,

write("Марка автомобиля :"),write(A),nl,

write("Год выпуска :"),write(NA),nl,

write("Номер двигателя :"),write(KO),nl,

write("Номер шасси :"),write( OB),nl,

write("Цвет автомобиля :"),write(PL),nl,

write("Номерной знак :"),write(N),nl,

write("Cерия паспорта :"),write(),nl,

write("Номер паспорта :"),write(),nl,

write("Фамилия :"),write(),nl,

write("Инициалы имени :"),write(),nl,

write(" отчества :"),write(),nl,

write("район чета :"),write(),nl, nl,nl,

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

readchar(_),

removewindow,

!.

process(8):-

write("Этой марки автомобиля нет в базе."),

write("Повторите введенную марку автомобиля "),

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

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

readln(A),nl,

A=N1,

write("Введите год выпуск :"),readint(F),nl,

write("Введите номер двигателя :"),readint(Y),nl,

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

write("Введите цвет :"),readln(G),nl,

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

write("Введите серию паспорт :"),readln(),nl,

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

write("Введите фамилию :"),readln(),nl,

write("Введите инициалы имени :"),readln(),nl,

write(" отчества :"),readln(),nl,

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

NA1=F,KO1=Y,OB1=J,PL1=G,FF1=,OO1=,

YY1=,KK1=,II1=,TT1=,HH1=,

assertz(svod(N1,NA1,KO1,OB1,PL1,FF1,OO1,YY1,KK1,II1,TT1,HH1)),

removewindow,

fail.


/*Пpоцедуpа вывода данных о пpогpамме,стр. */

process(0):-

makewindow(1,2,7,"О пpогpамме...",0,0,25,80),

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,nl,

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

readchar(_),

removewindow.


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

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

nl,

select(N),

RR=N,

svod(KY,NA,KO,OB,PL,RR,,,,,,),

write("Марка автомобиля :"),write(KY),nl,

write("Год выпуска :"),write(NA),nl,

write("Номер двигателя :"),write(KO),nl,

write("Номер шасси :"),write( OB),nl,

write("Цвет автомобиля :"),write(PL),nl,

write("Номерной знак :"),write(RR),nl,

write("Серия паспорта :"),write(),nl,

write("Номер паспорта :"),write(),nl,

write("Фамилия :"),write(),nl,

write("Инициалы имени :"),write(),nl,

write(" oтчества :"),write(),nl,

write("Район чета :"),write(),nl,

nl,

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

write("Введите год выпуск :"),readint(NA1),nl,

write("Введите номер двигателя :"),readint(KO1),nl,

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

write("Введите цвет :"),readln(PL1),nl,

write("Введите номерной знак :"),readint(RR1),nl,

write("Введите серию паспорт :"),readln(OO1),nl,

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

write("Введите фамилию :"),readln(KK1),nl,

write("Введите инициалы имени :"),readln(II1),nl,

write(" отчества :"),readln(TT1),nl,

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

retract(svod(KY,NA,KO,OB,PL,RR,,,,,,)),

assert(svod(N1,NA1,KO1,OB1,PL1,RR1,OO1,YY1,KK1,II1,TT1,HH1)),

!,

removewindow.


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

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

nl,

select(N),

X=N,

svod(KY,NA,KO,OB,PL,X,,,,,,),

retract(svod(KY,NA,KO,OB,PL,X,,,,,,)),!,

removewindow.


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

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

nl,

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

write("║ ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ ║"),

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

write("║марка║ год ║ No ║ Noа ║ ║номер-║паспорт ║ ФИО ║ ║"),

write("║авт. ║выпу-║двига-║шасси║цвет║ нойа ║═════╦══╬═╦═╦═╣район║"),

write("║ ║ск ║ теля ║ ║ ║ знак ║серия║No║Ф║И║О║ ║"),

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

svod(KY,NA,KO,OB,PL,N,,,,,,),

cursor(Z,_),

cursor(Z,0),write(KY),

cursor(Z,8),write(NA),

cursor(Z,16),write(KO),

cursor(Z,26),write( OB),

cursor(Z,32),write(PL),

cursor(Z,39),write(N),

cursor(Z,46),write(),

cursor(Z,52),write(),

cursor(Z,58),write(),

cursor(Z,66),write(),

cursor(Z,68),write(),

cursor(Z,70),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 - База будет загружена из файла dima.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 - База будет записана в файл dima.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("Если вы хотите узнать данные о автомобилe, то"),

nl,

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

readln(X),

svod(KY,NA,KO,OB,PL,N,,,,,,),

S=KY,

S=X,

NA1=NA,KO1=KO,OB1= OB,PL1=PL,FF1=N,OO1=,YY1=,

KK1=,II1=,TT1=,HH1=,

assert(svod1(S,NA1,KO1,OB1,PL1,FF1,OO1,YY1,KK1,II1,TT1,HH1)),

fail.

procedure(1):-

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

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

write("║ TEXНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ ║"),

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

write("║марка║ год ║ No ║ Noа ║ ║номер-║ паспорт! ФИО ║ ║"),

write("║авт. ║выпу-║двига-║шасси║цвет║ нойа ╠═════╦══╦═╦═╦═╣район║"),

write("║ ║ ска ║ теля ║ ║ ║ знак ║серия║No║Ф║И║О║ ║"),

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

svod1(S,NA,KO,OB,PL,N,,,,,,),

cursor(Z,_),

cursor(Z,0),write(S),

cursor(Z,8),write(NA),

cursor(Z,16),write(KO),

cursor(Z,26),write( OB),

cursor(Z,32),write(PL),

cursor(Z,39),write(N),

cursor(Z,46),write(),

cursor(Z,52),write(),

cursor(Z,58),write(),

cursor(Z,66),write(),

cursor(Z,68),write(),

cursor(Z,70),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,KO,OB,PL,N,,,,,,),

S=NA,

S=X,

N1=KY,KO1=KO,OB1= OB,PL1=PL,FF1=N,OO1=,YY1=,

KK1=,II1=,TT1=,HH1=,

assert(lolo(N1,S,KO,OB1,PL1,FF1,OO1,YY1,KK1,II1,TT1,HH1)),

fail.

procedure(2):-

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

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

write("║ ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ ║"),

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

write("║марка║ год ║ No ║ Noа ║ ║номер-║паспорт ║ ФИО ║район║"),

write("║автю.║выпу-║двига-║шасси║цвет║ нойа ╠═════╦══╬═╦═╦═╣ ║"),

write("║ ║ ска ║ теля ║ ║ ║ знак ║серия║No║Ф║И║О║ ║"),

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

lolo(KY,S,KO,OB,PL,N,,,,,,),

cursor(Z,_),

cursor(Z,0),write(KY),

cursor(Z,8),write(S),

cursor(Z,16),write(KO),

cursor(Z,26),write( OB),

cursor(Z,32),write(PL),

cursor(Z,39),write(N),

cursor(Z,46),write(),

cursor(Z,52),write(),

cursor(Z,58),write(),

cursor(Z,66),write(),

cursor(Z,68),write(),

cursor(Z,70),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("Введите интересующий цвет :"),

readln(X),

svod(KY,NA,KO,OB,PL,N,,,,,,),

S=PL,

S=X,

N1=KY,NA1=NA,KO1=KO,OB1= OB,OO1=,YY1=,

KK1=,II1=,TT1=,HH1=,FF1=N,

assert(kuku(N1,NA1,KO1,OB1,S,FF1,OO1,YY1,KK1,II1,TT1,HH1)),

fail.

procedure(3):-

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

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

write("║ ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ ║"),

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

write("║марка║ год ║ No ║ Noа ║ цвет ║номер-║ паспорт║ ФИО ║район║"),

write("║авт. ║выпу-║двига-║шасси║ ║ нойа ╠═════╦══╬═╦═╦═╣ ║"),

write("║ ║ ска ║ теля ║ ║ ║ знак ║серия║No║Ф║И║О║ ║"),

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

kuku(KY,NA,KO,OB,S,N,,,,,,),

cursor(Z,_),

cursor(Z,0),write(KY),

cursor(Z,8),write(NA),

cursor(Z,16),write(KO),

cursor(Z,26),write( OB),

cursor(Z,32),write(S),

cursor(Z,39),write(N),

cursor(Z,46),write(),

cursor(Z,52),write(),

cursor(Z,58),write(),

cursor(Z,66),write(),

cursor(Z,68),write(),

cursor(Z,70),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("dima.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("dima.dat"),

consult("dima.dat"),

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

beep,

!.


lod(2):-

write("Файла dima.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(KY),

svod(KY,_,_,_,_,Z,_,_,_,_,_,_),

N=Z.

sel(1,N):N=0.

sel(2,N):nl,

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

readint(L),

svod(_,L,_,_,_,Z,_,_,_,_,_,_),

N=Z.

sel(2,N):N=0.

sel(3,N):nl,

write("Введите цвет : "),

readln(F),

svod(_,_,_,_,F,Z,_,_,_,_,_,_),

N=Z.

sel(3,N):N=0.

sel(4,N):nl,

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

readln(Q),

svod(_,_,_,_,_,Z,_,_,_,_,_,Q),

N=Z.

sel(4,N):N=0.

sel(5,N):nl,

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

readint(),

svod(_,_,,_,_,Z,_,_,_,_,_,_),

N=Z.


sel(5,N):N=0.


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


При отладке программы ошибки странялись в два этапа. На

первом этапе интерпритатор языка Пролог сам казывал на синтакси-

ческие ошибки. Такие ошибки возникали при неправильнома написании

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

прошл спешно,

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

рому этапу - просмотру текста программы и логическому осмыслению

ошибки. На этом этапе были странены ошибки неправильного вывода

записи БД и кривое построение таблицы.



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


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

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

имеется возможность создания новой базы данных. Ва основнойа БД

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

мера двигателя и шасси, цвете автомобиля,районе чета,номерном

знаке,серии и номере паспорта и фамилию,имя и отчество.


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


0 - О системе...

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

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

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

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

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

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

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

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

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


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

ствующую цифровую клавишу. Ниже приводится описаниеа каждого из

пунктов.


@8.1 О системе...


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

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

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


@8.2 Корректировка данных.


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


1 - Известна марка автомобиля

2 - Известен год выпуска

3 - Известен цвет автомобиля

4 - Известен район чета


Если известна марка автомобиля, то следует ввестиа цифру

1, если известен год выпуска-цифру 2 и т.д.. После этого система

запросит соответственно марку или года илиа т.д.. Марку следует

вводить в том же виде (сочетание заглавных и строчных букв) в ка-

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

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

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

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

дует нажать клавишу <Enter>.



@8.3 ничтожение записей.


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

Как и в подпункте "Изменение данных" режим "Корректировк дан-

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

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

произойдет даление выбранной записи и вывод сообщения, подтвер-

ждающего выполнение данной операции.


@8.4 Просмотр базы.


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

щихся баз данных. При входе в этот режима просмотривается основ-

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

(при наличии на диске файла dima.dat)а приа запуске информацион-

но-справочной системы. После выбора этого пункта, на экрана выво-

дятся записи основной БД в виде таблицы. Для возвращения ва меню

следует нажать любую клавишу.


@8.5 Загрузка базы.


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

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


1 - Загрузить основную базу из выбранного файла

2 - Загрузить основную базу из файла dima.dat

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


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

новной базы из стандартного файла dima.datа, ва случае дачной

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

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

При выборе пунктов 1 система запросит имя файла, ва кото-

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

ся соответствующее сообщение, приа сбое появится сообщениеа об

ошибке.

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


@8.6 Сохранение базы.


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

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


1 - Сохранить основную базу в казанном файле

2 - Сохранить основную базу в файле dima.dat

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


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

ню режима "Загрузка базы".



@8.7 Создание новой базы.


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

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


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

2 - База будет сохранена по году впуска

3 - База будет сохранена по цвету

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


При нажатии 1,2,3 вам надо будета ввестиа соответственно

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

соответствующая база данных и сохранена ва файлеа "not.dat". При

выборе 4 будет совершен выход в основное меню.


@8.8 Ввод новых данных.


Данный режим преедназначен для создания новой записи, пу-

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

дет помещена в БД.



@8.9 Просмотр-добавление.


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

ления новой записи.При запуске этого режим выводится следущее

требование:

Введите марку автомобиля

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

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

бавления такой же как ввод новых данных.


@8.10 Выход из пограммы.

@ Данный режим предназначен для выхода из программыв ДОС.


@8.9 Решение контрольных примеров.


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

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

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

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

корректировки, создания новой БД, загрузки и сохранения БД. При

решении контрольных примеров ошибок в программе не обнаружено.


@Заключение


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

языка программирования Пролог для создания информационно-справоч-

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

возможности для реализации таких систем и написания дружественно-

го интерфейса для общения пользователя с программой.




















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


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

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


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


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

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


CODE=12050

/* **************************

* КУРСОВАЯ РБот *

* *

* *

* *

**************************

*/

domains

b,c,d,m,r,z,i,n,n1,ko,ob,pl=integer

t,a,f,s,l,p,u,na,j=symbol

database -svod1

svod1(a,b,c,d,f,m,t,r,s,l,p,u)

database -lolo

lolo(a,b,c,d,f,m,t,r,s,l,p,u)

database -kuku

kuku(a,b,c,d,f,m,t,r,s,l,p,u)

database

svod(a,b,c,d,f,m,t,r,s,l,p,u)

predicates

start

patch

load

select(i)

sel(i,i)

process(i)

procedure(i)

sve(i)

lod(i)

repeat


goal

start.


clauses

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

start:-

makewindow(1,10,0,"ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ",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("dima.dat"),

consult("dima.dat"),

cursor(1,2),

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

load:cursor(1,2),

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

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

process(7):-

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

nl,

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

write("Введите год выпуск :"),readint(O),nl,

write("Введите номер двигателя :"),readint(I),nl,

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

write("Введите цвет :"),readln(T),nl,

write("Введите номерной знак :"),readint(FF),nl,

write("Введите серию паспорт :"),readln(OO),nl,

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

write("Введите фамилию :"),readln(KK),nl,

write("Введите инициалы имени :"),readln(II),nl,

write(" oтчества :"),readln(TT),nl,

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

N1=K,NA1=O,KO1=I,OB1=Y,PL1=T,FF1=FF,OO1=OO,

YY1=YY,KK1=KK,II1=II,TT1=TT,HH1=HH,

assertz(svod(N1,NA1,KO1,OB1,PL1,FF1,OO1,YY1,KK1,II1,TT1,HH1)),

removewindow,

fail.

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

process(8):-

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

nl,

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

svod(KY,NA,KO,OB,PL,N,,,,,,),

A=KY,

write("Марка автомобиля :"),write(A),nl,

write("Год выпуска :"),write(NA),nl,

write("Номер двигателя :"),write(KO),nl,

write("Номер шасси :"),write( OB),nl,

write("Цвет автомобиля :"),write(PL),nl,

write("Номерной знак :"),write(N),nl,

write("Cерия паспорта :"),write(),nl,

write("Номер паспорта :"),write(),nl,

write("Фамилия :"),write(),nl,

write("Инициалы имени :"),write(),nl,

write(" отчества :"),write(),nl,

write("район чета :"),write(),nl, nl,nl,

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

readchar(_),

removewindow,

!.

process(8):-

write("Этой марки автомобиля нет в базе."),

write("Повторите введенную марку автомобиля "),

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

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

readln(A),nl,

A=N1,

write("Введите год выпуск :"),readint(F),nl,

write("Введите номер двигателя :"),readint(Y),nl,

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

write("Введите цвет :"),readln(G),nl,

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

write("Введите серию паспорт :"),readln(),nl,

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

write("Введите фамилию :"),readln(),nl,

write("Введите инициалы имени :"),readln(),nl,

write(" отчества :"),readln(),nl,

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

NA1=F,KO1=Y,OB1=J,PL1=G,FF1=,OO1=,

YY1=,KK1=,II1=,TT1=,HH1=,

assertz(svod(N1,NA1,KO1,OB1,PL1,FF1,OO1,YY1,KK1,II1,TT1,HH1)),

removewindow,

fail.


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

process(0):-

makewindow(1,2,7,"О пpогpамме...",0,0,25,80),

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,nl,

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

readchar(_),

removewindow.


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

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

nl,

select(N),

RR=N,

svod(KY,NA,KO,OB,PL,RR,,,,,,),

write("Марка автомобиля :"),write(KY),nl,

write("Год выпуска :"),write(NA),nl,

write("Номер двигателя :"),write(KO),nl,

write("Номер шасси :"),write( OB),nl,

write("Цвет автомобиля :"),write(PL),nl,

write("Номерной знак :"),write(RR),nl,

write("Серия паспорта :"),write(),nl,

write("Номер паспорта :"),write(),nl,

write("Фамилия :"),write(),nl,

write("Инициалы имени :"),write(),nl,

write(" oтчества :"),write(),nl,

write("Район чета :"),write(),nl,

nl,

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

write("Введите год выпуск :"),readint(NA1),nl,

write("Введите номер двигателя :"),readint(KO1),nl,

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

write("Введите цвет :"),readln(PL1),nl,

write("Введите номерной знак :"),readint(RR1),nl,

write("Введите серию паспорт :"),readln(OO1),nl,

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

write("Введите фамилию :"),readln(KK1),nl,

write("Введите инициалы имени :"),readln(II1),nl,

write(" отчества :"),readln(TT1),nl,

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

retract(svod(KY,NA,KO,OB,PL,RR,,,,,,)),

assert(svod(N1,NA1,KO1,OB1,PL1,RR1,OO1,YY1,KK1,II1,TT1,HH1)),

!,

removewindow.


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

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

nl,

select(N),

X=N,

svod(KY,NA,KO,OB,PL,X,,,,,,),

retract(svod(KY,NA,KO,OB,PL,X,,,,,,)),!,

removewindow.


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

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

nl,

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

write("║ ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ ║"),

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

write("║марка║ год ║ No ║ Noа ║ ║номер-║паспорт ║ ФИО ║ ║"),

write("║авт. ║выпу-║двига-║шасси║цвет║ нойа ║═════╦══╬═╦═╦═╣район║"),

write("║ ║ск ║ теля ║ ║ ║ знак ║серия║No║Ф║И║О║ ║"),

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

svod(KY,NA,KO,OB,PL,N,,,,,,),

cursor(Z,_),

cursor(Z,0),write(KY),

cursor(Z,8),write(NA),

cursor(Z,16),write(KO),

cursor(Z,26),write( OB),

cursor(Z,32),write(PL),

cursor(Z,39),write(N),

cursor(Z,46),write(),

cursor(Z,52),write(),

cursor(Z,58),write(),

cursor(Z,66),write(),

cursor(Z,68),write(),

cursor(Z,70),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 - База будет загружена из файла dima.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 - База будет записана в файл dima.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("Если вы хотите узнать данные о автомобилe, то"),

nl,

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

readln(X),

svod(KY,NA,KO,OB,PL,N,,,,,,),

S=KY,

S=X,

NA1=NA,KO1=KO,OB1= OB,PL1=PL,FF1=N,OO1=,YY1=,

KK1=,II1=,TT1=,HH1=,

assert(svod1(S,NA1,KO1,OB1,PL1,FF1,OO1,YY1,KK1,II1,TT1,HH1)),

fail.

procedure(1):-

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

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

write("║ TEXНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ ║"),

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

write("║марка║ год ║ No ║ Noа ║ ║номер-║ паспорт! ФИО ║ ║"),

write("║авт. ║выпу-║двига-║шасси║цвет║ нойа ╠═════╦══╦═╦═╦═╣район║"),

write("║ ║ ска ║ теля ║ ║ ║ знак ║серия║No║Ф║И║О║ ║"),

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

svod1(S,NA,KO,OB,PL,N,,,,,,),

cursor(Z,_),

cursor(Z,0),write(S),

cursor(Z,8),write(NA),

cursor(Z,16),write(KO),

cursor(Z,26),write( OB),

cursor(Z,32),write(PL),

cursor(Z,39),write(N),

cursor(Z,46),write(),

cursor(Z,52),write(),

cursor(Z,58),write(),

cursor(Z,66),write(),

cursor(Z,68),write(),

cursor(Z,70),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,KO,OB,PL,N,,,,,,),

S=NA,

S=X,

N1=KY,KO1=KO,OB1= OB,PL1=PL,FF1=N,OO1=,YY1=,

KK1=,II1=,TT1=,HH1=,

assert(lolo(N1,S,KO,OB1,PL1,FF1,OO1,YY1,KK1,II1,TT1,HH1)),

fail.

procedure(2):-

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

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

write("║ ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ ║"),

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

write("║марка║ год ║ No ║ Noа ║ ║номер-║паспорт ║ ФИО ║район║"),

write("║автю.║выпу-║двига-║шасси║цвет║ нойа ╠═════╦══╬═╦═╦═╣ ║"),

write("║ ║ ска ║ теля ║ ║ ║ знак ║серия║No║Ф║И║О║ ║"),

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

lolo(KY,S,KO,OB,PL,N,,,,,,),

cursor(Z,_),

cursor(Z,0),write(KY),

cursor(Z,8),write(S),

cursor(Z,16),write(KO),

cursor(Z,26),write( OB),

cursor(Z,32),write(PL),

cursor(Z,39),write(N),

cursor(Z,46),write(),

cursor(Z,52),write(),

cursor(Z,58),write(),

cursor(Z,66),write(),

cursor(Z,68),write(),

cursor(Z,70),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("Введите интересующий цвет :"),

readln(X),

svod(KY,NA,KO,OB,PL,N,,,,,,),

S=PL,

S=X,

N1=KY,NA1=NA,KO1=KO,OB1= OB,OO1=,YY1=,

KK1=,II1=,TT1=,HH1=,FF1=N,

assert(kuku(N1,NA1,KO1,OB1,S,FF1,OO1,YY1,KK1,II1,TT1,HH1)),

fail.

procedure(3):-

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

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

write("║ ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ ║"),

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

write("║марка║ год ║ No ║ Noа ║ цвет ║номер-║ паспорт║ ФИО ║район║"),

write("║авт. ║выпу-║двига-║шасси║ ║ нойа ╠═════╦══╬═╦═╦═╣ ║"),

write("║ а║ ска ║ теля ║ ║ ║ знак ║серия║No║Ф║И║О║ ║"),

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

kuku(KY,NA,KO,OB,S,N,,,,,,),

cursor(Z,_),

cursor(Z,0),write(KY),

cursor(Z,8),write(NA),

cursor(Z,16),write(KO),

cursor(Z,26),write( OB),

cursor(Z,32),write(S),

cursor(Z,39),write(N),

cursor(Z,46),write(),

cursor(Z,52),write(),

cursor(Z,58),write(),

cursor(Z,66),write(),

cursor(Z,68),write(),

cursor(Z,70),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("dima.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("dima.dat"),

consult("dima.dat"),

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

beep,

!.

lod(2):-

write("Файла dima.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(KY),

svod(KY,_,_,_,_,Z,_,_,_,_,_,_),

N=Z.

sel(1,N):N=0.

sel(2,N):nl,

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

readint(L),

svod(_,L,_,_,_,Z,_,_,_,_,_,_),

N=Z.

sel(2,N):N=0.

sel(3,N):nl,

write("Введите цвет : "),

readln(F),

svod(_,_,_,_,F,Z,_,_,_,_,_,_),

N=Z.

sel(3,N):N=0.

sel(4,N):nl,

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

readln(Q),

svod(_,_,_,_,_,Z,_,_,_,_,_,Q),

N=Z.

sel(4,N):N=0.

sel(5,N):nl,

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

readint(),

svod(_,_,,_,_,Z,_,_,_,_,_,_),

N=Z.

sel(5,N):N=0.