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

Загрузить архив:
Файл: 240-0557.zip (18kb [zip], Скачиваний: 25) скачать

                         Задание 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,считаннаяс  клавиатурыпривводе

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

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,OOO,YYY,KKK,III,TTT,HHH),

         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(OOO),nl,

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

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

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

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

         write("районучета         :"),write(HHH),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(FFFF),nl,

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

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

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

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

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

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

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

         YY1=IIII,KK1=KKKK,II1=TTTT,TT1=MMMM,HH1=GGGG,

      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,OOO,YYY,KKK,III,TTT,HHH),

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(OOO),nl,

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

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

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

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

write("Районучета            :"),write(HHH),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,OOO,YYY,KKK,III,TTT,HHH)),

       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,OOO,YYY,KKK,III,TTT,HHH),

            retract(svod(KY,NA,KO,OB,PL,X,OOO,YYY,KKK,III,TTT,HHH)),!,

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,OOO,YYY,KKK,III,TTT,HHH),

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

cursor(Z,52),write(YYY),

cursor(Z,58),write(KKK),

cursor(Z,66),write(III),

cursor(Z,68),write(TTT),

cursor(Z,70),write(HHH),

nl,

fail.

        process(3):-

write("╚═════════════════════════════════════════════════════════╝

nl,

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

           readchar(_),

            removewindow.

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

        process(4):-

nl,

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

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

            write("2 - База будет загружена из файла 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,OOO,YYY,KKK,III,TTT,HHH),

S=KY,

S=X,

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

KK1=KKK,II1=III,TT1=TTT,HH1=HHH,

       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,OOO,YYY,KKK,III,TTT,HHH),

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

cursor(Z,52),write(YYY),

cursor(Z,58),write(KKK),

cursor(Z,66),write(III),

cursor(Z,68),write(TTT),

cursor(Z,70),write(HHH),

nl,

fail.

        procedure(1):-

write("═══════════════════════════════════════════════════════════"),

save("not.dat",svod1), nl,

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

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

            readchar(_), removewindow,

!.

        procedure(1):-

write("═══════════════════════════════════════════════════════════"),

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

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

       makewindow(1,2,7,"ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ",0,0,25,80).

            procedure(2):-

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

nl,

cursor(7,10),

retractall(_,lolo),

nl,

write("Если вы хотите узнать данные о годе выпуска , то"),nl,

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

            readint(X),

            svod(KY,NA,KO,OB,PL,N,OOO,YYY,KKK,III,TTT,HHH),

S=NA,

S=X,

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

KK1=KKK,II1=III,TT1=TTT,HH1=HHH,

           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,OOO,YYY,KKK,III,TTT,HHH),

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

cursor(Z,52),write(YYY),

cursor(Z,58),write(KKK),

cursor(Z,66),write(III),

cursor(Z,68),write(TTT),

cursor(Z,70),write(HHH),

nl,

fail.

        procedure(2):-

write("═══════════════════════════════════════════════════════════"),

save("not1.dat",lolo),

nl,

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

nl,

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

            readchar(_),

            removewindow,

!.

        procedure(2):-

write("═══════════════════════════════════════════════════════════"),

nl,

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

nl,

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

            readchar(_),

        makewindow(1,2,7,"ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ",0,0,25,80).

        procedure(3):-

makewindow(1,2,7,"Создание базы данных по цвету автомобилей",0,0,25,80),

nl,

           cursor(7,10),

retractall(_,kuku),

nl,

   write("Если вы хотите узнать данные об автомобиле , то"),

nl,

            write("Введите интересующий цвет :"),

            readln(X),

            svod(KY,NA,KO,OB,PL,N,OOO,YYY,KKK,III,TTT,HHH),

S=PL,

S=X,

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

            KK1=KKK,II1=III,TT1=TTT,HH1=HHH,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,OOO,YYY,KKK,III,TTT,HHH),

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

cursor(Z,52),write(YYY),

cursor(Z,58),write(KKK),

cursor(Z,66),write(III),

cursor(Z,68),write(TTT),

cursor(Z,70),write(HHH),

nl,

fail.

        procedure(3):-

write("═══════════════════════════════════════════════════════════"),

save("not2.dat",kuku),

nl,

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

nl,

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

            readchar(_),

            removewindow,

!.

        procedure(3):-

write("═══════════════════════════════════════════════════════════"),

nl,

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

nl,

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

            readchar(_),

       makewindow(1,2,7,"ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ",0,0,25,80).

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

        sve(1):-

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

readln(N),

save(N),

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

beep,

!.

        sve(1):-

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

readchar(_).

        sve(2):-

save("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(PPPP),

        svod(_,_,PPPP,_,_,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 и т.д.. После этогосистема

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

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

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

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

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

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

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

                    @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,OOO,YYY,KKK,III,TTT,HHH),

         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(OOO),nl,

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

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

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

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

         write("районучета         :"),write(HHH),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(FFFF),nl,

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

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

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

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

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

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

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

         YY1=IIII,KK1=KKKK,II1=TTTT,TT1=MMMM,HH1=GGGG,

      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,OOO,YYY,KKK,III,TTT,HHH),

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(OOO),nl,

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

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

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

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

write("Районучета            :"),write(HHH),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,OOO,YYY,KKK,III,TTT,HHH)),

       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,OOO,YYY,KKK,III,TTT,HHH),

            retract(svod(KY,NA,KO,OB,PL,X,OOO,YYY,KKK,III,TTT,HHH)),!,

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,OOO,YYY,KKK,III,TTT,HHH),

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

cursor(Z,52),write(YYY),

cursor(Z,58),write(KKK),

cursor(Z,66),write(III),

cursor(Z,68),write(TTT),

cursor(Z,70),write(HHH),

nl,

fail.

        process(3):-

write("╚═════════════════════════════════════════════════════════╝

nl,

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

           readchar(_),

            removewindow.

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

        process(4):-

nl,

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

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

            write("2 - База будет загружена из файла 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,OOO,YYY,KKK,III,TTT,HHH),

S=KY,

S=X,

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

KK1=KKK,II1=III,TT1=TTT,HH1=HHH,

       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,OOO,YYY,KKK,III,TTT,HHH),

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

cursor(Z,52),write(YYY),

cursor(Z,58),write(KKK),

cursor(Z,66),write(III),

cursor(Z,68),write(TTT),

cursor(Z,70),write(HHH),

nl,

fail.

        procedure(1):-

write("═══════════════════════════════════════════════════════════"),

save("not.dat",svod1), nl,

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

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

            readchar(_), removewindow,

!.

        procedure(1):-

write("═══════════════════════════════════════════════════════════"),

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

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

       makewindow(1,2,7,"ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ",0,0,25,80).

            procedure(2):-

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

nl,

cursor(7,10),

retractall(_,lolo),

nl,

write("Если вы хотите узнать данные о годе выпуска , то"),nl,

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

            readint(X),

           svod(KY,NA,KO,OB,PL,N,OOO,YYY,KKK,III,TTT,HHH),

S=NA,

S=X,

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

KK1=KKK,II1=III,TT1=TTT,HH1=HHH,

           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,OOO,YYY,KKK,III,TTT,HHH),

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

cursor(Z,52),write(YYY),

cursor(Z,58),write(KKK),

cursor(Z,66),write(III),

cursor(Z,68),write(TTT),

cursor(Z,70),write(HHH),

nl,

fail.

        procedure(2):-

write("═══════════════════════════════════════════════════════════"),

save("not1.dat",lolo),

nl,

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

nl,

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

            readchar(_),

            removewindow,

!.

        procedure(2):-

write("═══════════════════════════════════════════════════════════"),

          nl,

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

nl,

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

            readchar(_),

        makewindow(1,2,7,"ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ",0,0,25,80).

        procedure(3):-

makewindow(1,2,7,"Создание базы данных по цвету автомобилей",0,0,25,80),

nl,

cursor(7,10),

retractall(_,kuku),

nl,

   write("Если вы хотите узнать данные об автомобиле , то"),

nl,

            write("Введите интересующий цвет :"),

            readln(X),

            svod(KY,NA,KO,OB,PL,N,OOO,YYY,KKK,III,TTT,HHH),

S=PL,

S=X,

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

            KK1=KKK,II1=III,TT1=TTT,HH1=HHH,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,OOO,YYY,KKK,III,TTT,HHH),

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

cursor(Z,52),write(YYY),

cursor(Z,58),write(KKK),

cursor(Z,66),write(III),

cursor(Z,68),write(TTT),

cursor(Z,70),write(HHH),

nl,

fail.

        procedure(3):-

write("═══════════════════════════════════════════════════════════"),

save("not2.dat",kuku),

nl,

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

nl,

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

            readchar(_),

            removewindow,

!.

        procedure(3):-

write("═══════════════════════════════════════════════════════════"),

nl,

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

nl,

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

            readchar(_),

       makewindow(1,2,7,"ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОЛЮБИТЕЛЯ",0,0,25,80).

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

        sve(1):-

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

            readln(N),

            save(N),

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

beep,

!.

        sve(1):-

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

readchar(_).

        sve(2):-

save("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(PPPP),

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

        N=Z.

        sel(5,N):-

        N=0.