Реферат: Разработка информационно-справочной системы "Каталог строительных объектов" Prolog

                          Задание N П-8

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

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

                 Мухамеджанову И.И. гр.ИИ-1-95.

    1. Тема:

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

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

       Разработать информационно-справочнуюсистему, обеспечиваю-

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

   --------------------------------------------------------------------

   |                КАТАЛОГ СТРОИТЕЛЬНЫХОБЬЕКТОВ                     |

   --------------------------------------------------------------------

   |город |               |код|   год     | смета   |      адрес    |

   |обьекта| наименование  |СМУ|вступления в|стоимости|-----------------

   |      |               |   |эксплуатацию|         | район  | улица |

   --------------------------------------------------------------------

   |      |               |   |            |         |       |      |

   Предусмотреть создание из базы новых базданных, характеризуемых

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

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

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

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

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

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

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

           мотрев режимы:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                           4.10.96

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

          литературы

                            18.10.96

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

                            25.10.96

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

                            15.11.96

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

                            29.11.96

       6. Оформление пояснительной записки исдача работы на про-

          верку

                            24.12.96

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

                            25.12.96

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

                              Студент   /Мухамеджанов И.И. ИИ-1-95/

                           СОДЕРЖАНИЕ.

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

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

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

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

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

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

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

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

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

             5.3 Автоматической загрузки БДLOAD ......

             5.4 Вывода информации о системеPROCESS(0)

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

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

             5.7 Просмотра базы данныхPROCESS(3) .........

             5.8 Загрузки базы PROCESS(4).................

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

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

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

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

             5.13 Вспомагательной Select..............

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

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

             5.16 Вспомагательной Sel.................

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

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

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

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

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

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

                          ВВЕДЕНИЕ

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

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

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

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

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

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

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

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

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

системой.

          1. ПОНЯТИЕ ОБ ИНФОРМАЦИОННО-СПРАВОЧНЫХСИСТЕМАХ И

                   ИХ ПРОГРАММНОЙ РЕАЛИЗАЦИИ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

               2.БАЗА ДАННЫХ И СПОСОБЫ ЕЕПРЕДСТАВЛЕНИЯ

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

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

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

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

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

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

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

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

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

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

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

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

баз данных.

               3.РАЗРАБОТКА СИСТЕМНОГО МЕНЮ

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

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

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

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

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

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

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

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

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

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

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

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

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

     8 — Выход из программы     — выход из программы

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

                   5.    РАЗРАБОТКА ПРОЦЕДУР

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

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

                   5.1  ОСНОВНОЙ ПРОЦЕДУРЫ START

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

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

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

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

                    5.2 ВЫВОДА ГЛАВНОГО МЕНЮPATCH

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

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

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

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

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

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

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

                    5.3 АВТОМАТИЧЕСКОЙ ЗАГРУЗКИБД LOAD

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

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

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

жать  основную БД из режима «Загрузка». Процедура LOAD проверяет

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

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

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

                    5.4 ВЫВОДА ИНФОРМАЦИИ ОСИСТЕМЕ PROCESS(0)

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

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

                   5.5 КОРРЕКТИРОВКИ ДАННЫХPROCESS(1)

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

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

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

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

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

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

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

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

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

PROCESS(1) споследующей ее корректировкой.В процедуре process(1)

также примененпредикат Repeat,  с помощью которогореализован

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

                    5.6 УДАЛЕНИЯ ЗАПИСЕЙPROCESS(2)

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

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

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

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

Процедура SELECTвозвращает номер выбранной записи и с помощью встроен-

ного предикатаretract запись удаляется из базы данных.

                    5.7 ПРОСМОТРА БАЗЫ ДАННЫХPROCESS(3)

     Процедура PROCESS(3) осуществляет просмотрсодержимого БД.Процедура

PROCESS(3)реализована в стиле процедур MENU и PROCESS(1) с применением

процедуры Repeat.

                   5.8 ЗАГРУЗКИ БАЗЫ PROCESS(4)

     Данная процедура запрашивает упользователя имя файла содержащего

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

lod аргументомкоторой служит переменная N, считанная  с  клавиатуры

при  вводе пользователем имени файла.  В процедуре PROCESS(4)

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

                   5.9 ВЫВОДА МЕНЮ СОХРАНЕНИЯPROCESS(5)

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

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

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

                  5.10 СОЗДАНИЕ НОВОЙ БДPROCESS(6)

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

работаетследующим образом: При помощи процедуры SELECT у пользователя

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

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

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

Для того,  чтобы были обработаны все записи,  используется

fail.  После создания  новой  БД выдается соответствующее сообщение и

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

даную БД.

                  5.11 ПРОСМОТРА-ДОБАВЛЕНИЯPROCESS(7)

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

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

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

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

просьба, повториввведенный номер, заполнить запись.При окончании ввода

выводится запросна продолжение ввода данных и условие выхода в основное

меню.Взависимости от выбора пользователя процесс либо повторяется,

либопрекращается.

                  5.12 ВЫХОДА ИЗ ПРОГРАММЫ  PROCESS(8)

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

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

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

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

                  5.13 ВСПОМОГАТЕЛЬНОЙ SELECT

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

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

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

денный параметр впроцедуру SEL.

                  5.15 ЗАГРУЗКА БД С ДИСКА LOD

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

зависимости отвведенного пользователем имени. В данной процедуре

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

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

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

                  5.16 СОХРАНЕНИЕ БД НА ДИСКЕSVE

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

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

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

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

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

                  5.17 ВСПОМАГАТЕЛЬНОЙ SEL

     Процедура SEL  является вспомагательной  к процедуреSELECT.

В зависимости отвыбранного пользователем в процедуре SELECT пункте

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

                      6. ЛИСТИНГ ПРОГРАММЫ

CODE=12050

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

             *  КУРСОВАЯ   РАБОТА    *

             *                        *

             *                        *

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

*/

domains

  i,c,d,f=integer

      a,b,m,t=symbol

database -svod1

          svod1(a,b,c,d,f,m,t)

database -lolo

          lolo(a,b,c,d,f,m,t)

database -kuku

          kuku(a,b,c,d,f,m,t)

database

         svod(a,b,c,d,f,m,t)

        predicates

        start

        patch

        load

        select(i)

        sel(i,i)

        process(i)

        procedure(i)

        sve(i)

        lod(i)

        repeat

goal

        start.

clauses

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

        start:-

            makewindow(1,26,94,«КАТАЛОГСТРОИТЕЛЬНЫХ ОБЬЕКТОВ»,0,0,25,80),

            clearwindow,

            load,

            patch.

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

        patch:-

            repeat,

            cursor(7,0),

            write("                     0 — О пpогpамме...  "),nl,

            write("                     1 — коррекцияданных"),nl,

            write("                     2 — удалениеданных"),nl,

            write("                     3 — просмотр базы"),nl,

            write("                     4 — загрузкабазы"),nl,

            write("                     5 — сохранениебазы"),nl,

            write("                     6 — создание новойбазы"),nl,

            write("                     7 — ввод новыхданных"),nl,

            write("                     8 — просмотр-добавление"),nl,

            write("                     9 — выход изпрограммы"),nl,

            write("                     =>"),

            readint(Choice),

            Choice >= 0,

            Choice < 10,

            clearwindow,

            process(Choice),

            clearwindow,

            Choice = 9,

            retractall(_),

            removewindow.

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

        load:-

            existfile(«ilgiz.dat»),

            consult(«ilgiz.dat»),

            cursor(1,2),

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

        load:-

           makewindow(2,74,79,«ОШИБКА»,6,18,8,40),

            cursor(2,10),

            write(«Нет базы на диске»),

            readchar(_),

            removewindow,

            !.

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

        process(7):-

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

            nl,

            write(«Введите городобьекта                    :»),readln(K),nl,

            write(«Введитенаименование                     :»),readln(O),nl,

            write(«Введите код СМУ                          :»),readint(I),nl,

            write(«Введите год вступленияв эксплуатацию    :»),readint(Y),nl,

            write(«Введите сметустоимости                  :»),readint(T),nl,

            write(«Введите район                            :»),readln(FF),nl,

            write(«Введите улицу                             :»),readln(HH),nl,

           N1=K,NA1=O,KO1=I,OB1=Y,PL1=T,FF1=FF,HH1=HH,

           assertz(svod(N1,NA1,KO1,OB1,PL1,FF1,HH1)),

            removewindow,

            fail.

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

         process(8):-

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

         nl,

         write(«Введите городобъекта:»),readln(A),nl,nl,

         svod(KY,NA,N,OB,PL,FFF,HHH),

         A=KY,

         write(«Город                         :»),write(KY),nl,

         write(«Наименование                  :»),write(NA),nl,

         write(«Код СМУ                       :»),write(N),nl,

         write(«Год вступления вэксплуатацию :»),write(OB),nl,

         write(«Смета стоимости               :»),write(PL),nl,nl,nl,

         write(«Район                        :»),write(FFF),nl,

         write(«Улица                        :»),write(HHH),nl,

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

         readchar(_),

         removewindow,

         !.

         process(8):-

write(«Этогогорода нет в базе.»),

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

write(«Введитегород:»),

         readln(A),nl,

         A=N1,

         write(«Введите наименование                  :»),readln(F),nl,

         write(«Введите код СМУ                       :»),readint(Y),nl,

         write(«Введите год вступления вэксплуатацию :»),readint(J),nl,

         write(«Введите сметустоимости              :»),readint(G),nl,

         write(«Введите район                         :»),readln(L),nl,

         write(«Введите улицу                         :»),readln(M),nl,

         NA1=F,KO1=Y,OB1=J,PL1=G,FF1=L,HH1=M,

        assertz(svod(N1,NA1,KO1,OB1,PL1,FF1,HH1)),

         removewindow,

         fail.

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

         process(0):-

         makewindow(1,27,30,«Опpогpамме...»,0,0,25,80),nl,nl,

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

write("                     обслуживающая работу сбазои данных BSO"),nl,nl,

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

write("                            автоp: МухамеджановИ.И. "),nl,nl,

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

cursor(20,24),

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

         readchar(_),

         removewindow.

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

        process(1):-

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

            nl,

            select(N),

           X=N,

            svod(KY,NA,X,OB,PL,FFF,HHH),

            write(«Город обьекта                     :»),write(N),nl,

            write(«Наименование                      :»),write(NA),nl,

            write(«Код СМУ                           :»),write(X),nl,

            write(«Год вступления вэксплуатацию     :»),write(OB),nl,

            write(«Смета стоимости                   :»),write(PL),nl,

            write(«Район                            :»),write(FFF),nl,

            write(«Улица                            :»),write(HHH),nl,

            nl,

            write(«Введите город объекта:»),readln(N1),

            write(«Введитенаименование:»),readln(NA1),nl,

            write(«Введите код СМУ  :»),readint(KO1),nl,

            write(«Введите год вступленияв эксплуатацию :»),readint(OB1),nl,

            write(«Введите сметустоимости  :»),readint(PL1),nl,

            write(«Введите район  :»),readln(FF1),nl,

            write(«Введите улицу  :»),readln(HH1),nl,

            retract(svod(KY,NA,KO,OB,PL,FFF,HHH)),

           assert(svod(N1,NA1,KO1,OB1,PL1,FF1,HH1)),

            !,

            removewindow.

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

        process(2):-

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

            nl,

            select(N),

            X=N,

            svod(KY,NA,X,OB,PL,FFF,HHH),

           retract(svod(KY,NA,X,OB,PL,FFF,HHH)),!,

            removewindow.

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

        process(3):-

        makewindow(1,2,7,«Просмотpбазы»,0,0,25,80),

        nl,

write("============================================================================="),nl,

write("|             КАТАЛОГ СТРОИТЕЛЬНЫХ ОБЬЕКТОВ                                 |"),nl,

write("============================================================================="),nl,

write("|город   |              | код |   год     |смета    |         адрес       |"),nl,

write("|обьекта | наименование | СМУ |вступления в|стоимости|----------------------"),nl,

write("|         |              |     |эксплуатацию|         |  раион  |   улица |"),nl,

write("============================================================================="),nl,

           svod(KY,NA,N,OB,PL,FFF,HHH),

           cursor(Z,_),

            cursor(Z,2),write(KY),

            cursor(Z,12),write(NA),

            cursor(Z,27),write(N),

            cursor(Z,35),write(OB),

            cursor(Z,46),write(PL),

            cursor(Z,0),write("|"),

            cursor(Z,56),write(FFF),

            cursor(Z,67),write(HHH),

            nl,

            fail.

        process(3):-

write("------------------------------------------------------------------------------"),

nl,

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

           readchar(_),

            removewindow.

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

        process(4):-

            nl,

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

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

            write(«2 — База будетзагружена из файла ilgiz.dat»),nl,

            write(«3 — Выход в основноеменю»),nl,

            write("==>"),

            readint(C),

            C>0,C<4,

            lod(C),

            !,

            removewindow.

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

        process(5):-

            nl,

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

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

            write(«2 — База будет записанав файл ilgiz.dat»),nl,

            write(«3 — Выход в основноеменю»),nl,

            write("==>"),

            readint(I),

            I>0,I<4,

            sve(I),!,

            removewindow.

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

        process(6):-

            nl,

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

            write(«1 — База будет созданапо городу           „),nl,

            write(“2 — База будет созданапо году вступления в эксплуатацию»),nl,

            write(«3 — База будет созданапо смете стоимости „),nl,

            write(“4 — Выход в основноеменю»),nl,

            write("==>"),

            readint(O),

            O>0,O<5,

            procedure(O),

            removewindow.

            process(_).

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

        procedure(1):-

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

            nl,

            cursor(7,10),

            retractall(_,svod1),

            nl,

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

            nl,

            write(«Введите город:»),

            readln(X),

            svod(KY,NA,N,OB,PL,FFF,HHH),

            S=KY,

            S=X,

           NA1=Na,KO1=N,OB1=OB,PL1=PL,FF1=FFF,HH1=HHH,

           assert(svod1(S,NA1,KO1,OB1,PL1,FF1,HH1)),

            fail.

        procedure(1):-

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

write("______________________________________________________________________________"),

write("                     КАТАЛОГ СТРОИТЕЛЬНЫХОБЬЕКТОВ                          !"),

write("------------------------------------------------------------------------------"),

write("!         !             ! код! год        ! смета   !       адрес         !"),

write("!  город ! наименование! СМУ! вступления в! стоимости!----------------------"),

write("!         !              !    ! эксплуатацию!         !  раион  !   улица  !"),

write("------------------------------------------------------------------------------"),

nl,

            svod1(S,NA,N,OB,PL,FFF,HHH),

            cursor(Z,_),

            cursor(Z,2),write(S),

            cursor(Z,12),write(NA),

            cursor(Z,27),write(N),

            cursor(Z,35),write(OB),

            cursor(Z,46),write(PL),

            cursor(Z,56),write(FFF),

            cursor(Z,67),write(HHH),

            nl,

            fail.

        procedure(1):-

write("------------------------------------------------------------------------------"),

            save(«not.dat»,svod1),

            nl,

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

            nl,

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

            readchar(_),

            removewindow,

            !.

        procedure(1):-

write("------------------------------------------------------------------------------"),

            nl,

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

            nl,

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

            readchar(_),

            makewindow(1,2,7,«КАТАЛОГСТРОИТЕЛЬНЫХ ОБЬЕКТОВ»,0,0,25,80).

            procedure(2):-

    makewindow(1,2,7,«Создание новой базыпо году вступления в эксплуатацию»,0,0,25,80),

            nl,

            cursor(7,10),

            retractall(_,lolo),

            nl,

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

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

            readint(X),

            svod(KY,NA,N,OB,PL,FFF,HHH),

            S=OB,

            S=X,

            N1=KY,NA1=NA,KO1=N,PL1=PL,FF1=FFF,HH1=HHH,

           assert(lolo(N1,NA1,KO1,S,PL1,FF1,HH1)),

            fail.

        procedure(2):-

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

write("______________________________________________________________________________"),

write("           KАТАЛОГ СТРОИТЕЛЬНЫХ ОБЪЕКТОВ                                      "),

write("-----------------------------------------------------------------------------!"),

write("!         !             ! код! год         ! смета  !      адрес           !"),

write("!  город ! наименование! СМУ! вступленияв! стоимости!----------------------!"),

write("!         !              !    ! эксплуатацию!         !  район  !   улица  !"),

write("------------------------------------------------------------------------------"),

            lolo(KY,NA,N,S,PL,FFF,HHH),

            cursor(Z,_),

            cursor(Z,2),write(KY),

            cursor(Z,12),write(NA),

            cursor(Z,27),write(N),

            cursor(Z,35),write(S),

            cursor(Z,46),write(PL),

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

            cursor(Z,56),write(FFF),

            cursor(Z,67),write(HHH),

            nl,

            fail.

        procedure(2):-

write("-----------------------------------------------------------------------------"),

            save(«not1.dat»,lolo),

            nl,

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

            nl,

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

            readchar(_),

            removewindow,

            !.

        procedure(2):-

write("-----------------------------------------------------------------------------"),

            nl,

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

            nl,

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

            readchar(_),

           makewindow(1,2,7,«ХАРАКТЕРИСТИКА ПРЕДПРИЯТИЯ»,0,0,25,80).

        procedure(3):-

     makewindow(1,2,7,«Создание базыданных по смете стоимости»,0,0,25,80),

            nl,

            cursor(7,10),

            retractall(_,kuku),

            nl,

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

            nl,

            write(«Введите начальноезначение сметы стоимости :»),

            readint(X),

            svod(KY,NA,N,OB,PL,FFF,HHH),

            S=PL,

            S>=X,

           N1=KY,NA1=NA,KO1=N,HH1=HHH,FF1=FFF,OB1=OB,

           assert(kuku(N1,NA1,KO1,OB1,S,FF1,HH1)),

            fail.

        procedure(3):-

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

write("_____________________________________________________________________________"),nl,

write("                      КАТАЛОГ СТРОИТЕЛЬНЫХОБЬЕКТОВ                        !"),nl,

write("-----------------------------------------------------------------------------"),nl,

write("!         !             ! код! год        ! смета  !  адрес              !"),nl,

write("!  город ! наименование! СМУ! вступленияв! стоимости!----------------------"),nl,

write("!         !              !    ! эксплуатацию!         !  раион  !   улица !"),nl,

write("-----------------------------------------------------------------------------"),nl,

          kuku(KY,NA,N,OB,S,FFF,HHH),

            cursor(Z,_),

            cursor(Z,2),write(KY),

            cursor(Z,12),write(NA),

            cursor(Z,27),write(N),

            cursor(Z,35),write(OB),

            cursor(Z,46),write(S),

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

            cursor(Z,56),write(FFF),

            cursor(Z,67),write(HHH),

            nl,

            fail.

        procedure(3):-

write("-----------------------------------------------------------------------------"),

            save(«not2.dat»,kuku),

            nl,

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

            nl,

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

            readchar(_),

            removewindow,

            !.

        procedure(3):-

write("-----------------------------------------------------------------------------"),

            nl,

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

            nl,

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

            readchar(_),

            makewindow(1,2,7,«КАТАЛОГСТРОИТЕЛЬНЫХ ОБЬЕКТОВ»,0,0,25,80).

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

        sve(1):-

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

            readln(N),

            save(N),

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

            beep,

            !.

        sve(1):-

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

            readchar(_).

        sve(2):-

            save(«ilgiz.dat»).

        sve(3).

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

        lod(1):-

            retractall(_),

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

            readln(N),

            existfile(N),

            consult(N),

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

            beep,

            !.

        lod(1):-

            nl,

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

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

            readchar(_).

        lod(2):-

            retractall(_),

            existfile(«ilgiz.dat»),

            consult(«ilgiz.dat»),

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

            beep,

            !.

        lod(2):-

            write(«Файла ilgiz.dat нет надиске»),nl,

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

            readchar(_).

        lod(3).

        repeat.

        repeat:- repeat.

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

        select(N):-

        nl,

        write(«1 — известенгород»),nl,

        write(«2 — известнонаименование»),nl,

        write(«3 — известно код СМУ»),nl,

        write(«4 — известен год вступленияв эксплуатацию»),nl,

        write(«5 — известна сметастоимости»),nl,

        write("==>"),

        readint(X),

        sel(X,N).

        sel(1,N):-

        nl,

        write(«Введите город                :»),

        readln(M),

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

        N=Z.

        sel(1,N):-

        N=0.

        sel(2,N):-

        nl,

        write(«Введитенаименование:»),

        readln(L),

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

        N=Z.

        sel(2,N):-

        N=0.

        sel(3,N):-

        nl,

        write(«Введите код СМУ: „),

        readint(F),

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

        N=F.

        sel(3,N):-

        N=0.

        sel(4,N):-

        nl,

        write(“Введите год вступления вэксплуатацию:»),

        readint(Q),

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

        N=Z.

        sel(4,N):-

        N=0.

        sel(5,N):-

        nl,

        write(«Введите сметустоимости:»),

       readint(W),

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

        N=Z.

                    7. ОТЛАДКА ПРОГРАММЫ

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

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

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

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

predicates и т.д.Если компиляция прошла успешно, но программа работа-

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

текста  программы и логическому осмыслениюошибки.  На этом этапе были

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

жиме  просмотра БД.  Причиной этому былоотсутствие в конце процедуры

предикатаfail.  Ошибка была устранена.  Если не помогал второй  этап,

приходилосьпереходить к третьему — трассировке.В процессе конечной

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

не было.

                    8.ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ ИРЕШЕНИЕ

                          КОНТРОЛЬНЫХ ПРИМЕРОВ:

Программа«Каталог строительных обьектов » представляет собой

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

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

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

городе,наименовании, коде СМУ, годе вступления в эксплуатацию, смете стоимости,

адрессе обьекта.

ности.

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

                    0 — О программе...

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

                    2 — Удаление данных

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

еще рефераты
Еще работы по программированию, базе данных