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

CODE=12050

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

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

             *                        *

             *   Котова Владимира     *

             *                        *

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

*/            

            

            

domains

      z,i,n,n1,kol,tkol,tel,faks=integer

      prod,adr,j=symbol

database -svod1

          svod1(n,j,kol,tkol,adr,tel,faks)

database -lolo

          lolo(n,prod,kol,i,adr,tel,faks)         

database -kuku

          kuku(n,prod,kol,tkol,j,i,i)

database-svod

             svod(n,prod,kol,tkol,adr,tel,faks)

      predicates

     

      start

      patch

        load

      select(i)

      sel(i,i)

      process(i)

      procedure(i)

      sve(i)

      lod(i)

      repeat

           

goal

      start.

     

clauses

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

      start:-

          makewindow(1,2,7,"ОВОЩНАЯ БАЗА",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("kot.dat"),

          consult("kot.dat"),

          cursor(1,2),

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

      load:-

          cursor(1,2),

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

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

      process(7):-

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

          nl,

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

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

          write("Введите количество на складе :"),readint(I),nl,

          write("Введите требуемое количество :"),readint(Y),nl,

          write("Введите адрес получателя     :"),readln(T),nl,

          write("Введите телефон получателя   :"),readint(V),nl,

          write("Введите факс получателя      :"),readint(A),nl,

          N1=K,PROD1=O,KOL1=I,TKOL1=Y,ADR1=T,TEL1=V,FAKS1=A,

          assertz(svod(N1,PROD1,KOL1,TKOL1,ADR1,TEL1,FAKS1)),

          removewindow,

          fail.

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

         process(8):-

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

         nl,

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

         svod(N,PROD,KOL,TKOL,ADR,TEL,FAKS),

         A=N,

         write("Номер записи         :"),write(A),nl,

         write("Наименование товара  :"),write(PROD),nl,

         write("Количество на складе :"),write(KOL),nl,

         write("Требуемое количество :"),write(TKOL),nl,

         write("Адрес получателя     :"),write(ADR),nl,

         write("Телефон получателя   :"),write(TEL),nl,

         write("Факс получателя      :"),nl,nl,nl,nl,nl,

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

         readchar(_),

         removewindow,

         !.

         process(8):-

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

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

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

         readint(A),nl,

         A=N1,

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

         write("Введите количество на складе  :"),readint(Y),nl,

         write("Введите требуемое количество  :"),readint(J),nl,

         write("Введите адрес получателя      :"),readln(G),nl,

         write("Введите телефон получателя    :"),readint(E),nl,

         write("Введите факс получателя       :"),readint(Z),nl,

         PROD1=F,KOL1=Y,TKOL1=J,ADR1=G,TEL1=E,FAKS1=Z,

         assertz(svod(N1,PROD1,KOL1,TKOL1,ADR1,TEL1,FAKS1)),

         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-94  (с) 1995 г. "),nl,nl,nl,nl,

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

         readchar(_),

         removewindow.

           

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

      process(1):-

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

          nl,

          select(N),

          X=N,

            svod(X,PROD,KOL,TKOL,ADR,TEL,FAKS),

            write("Номер записи               :"),write(N),nl,

          write("Наименование товара        :"),write(PROD),nl,

          write("Количество товара на складе:"),write(KOL),nl,

          write("Требуемое количество       :"),write(TKOL),nl,

          write("Адрес получателя           :"),write(ADR),nl,

          write("Телефон получателя         :"),write(TEL),nl,

          write("Факс получателя            :"),write(FAKS),nl,

          nl,        

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

          write("Введите количество на складе :"),readint(KOL1),

          write("Введите требуемое количество :"),readint(TKOL1),

          write("Введите адрес получателя     :"),readln(ADR1),

          write("Введите телефон получателя   :"),readint(TEL1),

          write("Введите факс получателя      :"),readint(FAKS1), 

          X1=X,

          retract(svod(X,PROD,KOL,TKOL,ADR,TEL,FAKS)),

          assert(svod(X1,PROD1,KOL1,TKOL1,ADR1,TEL1,FAKS1)),

          !,

          removewindow.

         

         

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

      process(2):-

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

          nl,

          select(N),

          X=N,

          svod(X,PROD,KOL,TKOL,ADR,TEL,FAKS),

          retract(svod(X,PROD,KOL,TKOL,ADR,TEL,FAKS)),!,

          removewindow.

          

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

      process(3):-

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

      nl,

          write("____________________________________________________________________________!"),

          write("                        ОВОЩНАЯ БАЗА                                              "),

          nl,            

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

          nl,

          write("!номер!название!кол на!треб  !          получатель                          !"),

          nl,

          write("!     ! тавара !складе!кол-во!          адрес         ! телефон   !    факс !"),

          nl,

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

          nl,

            svod(N,PROD,KOL,TKOL,ADR,TEL,FAKS),

          cursor(Z,_),

          cursor(Z,0),write(N),

          cursor(Z,7),write(PROD),

          cursor(Z,18),write(KOL),

          cursor(Z,23),write(TKOL),

          cursor(Z,33),write(ADR),

          cursor(Z,55),write(TEL),

          cursor(Z,67),write(FAKS),

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

          nl,

          fail.

      process(3):-

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

          nl,

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

          readchar(_),

          removewindow.

                

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

        process(4):-

            nl,

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

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

            write("2 - База будет загружена из файла kot.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 - База будет записана в файл kot.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(N,PROD,KOL,TKOL,ADR,TEL,FAKS),

            S=PROD,

            S=X,

            N1=N,KOL1=KOL,TKOL1=TKOL,ADR1=ADR,TEL1=TEL,FAKS1=FAKS,

            assert(svod1(N1,S,KOL1,TKOL1,ADR,TEL,FAKS)),

            fail.

           

        procedure(1):-       

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

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

          nl,

          write("!номер!название!кол на!треб  !          получатель                          !"),

          nl,

          write("!     ! тавара !складе!кол-во!          адрес         ! телефон   !    факс !"),

          nl,

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

          nl,

            svod(N,S,KOL,TKOL,ADR,TEL,FAKS),

          N1=N,

          cursor(Z,_),

          cursor(Z,0),write(N1),

          cursor(Z,7),write(S),

          cursor(Z,18),write(KOL),

          cursor(Z,23),write(TKOL),

          cursor(Z,33),write(ADR),

          cursor(Z,55),write(TEL),

          cursor(Z,67),write(FAKS),

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

          nl,

          fail.

         

      procedure(1):-

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

          save("now.dat",svod1),

          nl,

          write("База сохранена в файле now.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(N,PROD,KOL,TKOL,ADR,TEL,FAKS),

            S=TKOL,

            S>=X,

            N1=N,PROD1=PROD,KOL1=KOL,ADR1=ADR,TEL1=TEL,FAKS1=FAKS,

            assert(lolo(N1,PROD1,KOL1,S,ADR1,TEL1,FAKS1)),

            fail.

           

        procedure(2):-

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

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

          nl,

          write("!номер!название!кол на!треб  !          получатель                          !"),

          nl,

          write("!     ! тавара !складе!кол-во!          адрес         ! телефон   !    факс !"),

          nl,

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

          nl,

          lolo(N,PROD,KOL,S,ADR,TEL,FAKS),

          N1=N,

          cursor(Z,_),

          cursor(Z,0),write(N1),

          cursor(Z,7),write(PROD),

          cursor(Z,18),write(KOL),

          cursor(Z,23),write(S),

          cursor(Z,33),write(ADR),

          cursor(Z,55),write(TEL),

          cursor(Z,67),write(FAKS),

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

          nl,

          fail.

         

      procedure(2):-

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

          save("now1.dat",lolo),

          nl,

          write("База сохранена в файле now1.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),

            readint(Y),

            readint(Z),

            svod(N,PROD,KOL,TKOL,ADR,TEL,FAKS),

            S=ADR,

            D=TEL,

            C=FAKS,

            S=X,

            D=Y,

            C=Z,

            N1=N,PROD1=PROD,KOL1=KOL,TKOL1=TKOL,

            assert(kuku(N1,PROD1,KOL1,TKOL1,S,D,C)),

            fail.

        procedure(3):-

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

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

          nl,

          write("!номер!название!кол на!треб  !          получатель                          !"),

          nl,

          write("!     ! тавара !складе!кол-во!          адрес         ! телефон   !    факс !"),

          nl,

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

          nl,

          kuku(N,PROD,KOL,TKOL,S,D,C),

          N1=N,

          cursor(Z,_),

          cursor(Z,0),write(N1),

          cursor(Z,7),write(PROD),

          cursor(Z,18),write(KOL),

          cursor(Z,23),write(TKOL),

          cursor(Z,33),write(S),

          cursor(Z,55),write(D),

          cursor(Z,67),write(C),

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

          nl,

          fail.

         

      procedure(3):-

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

          save("now2.dat",svod1),

          nl,

          write("База сохранена в файле now2.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("kot.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("kot.dat"),

            consult("kot.dat"),

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

            beep,

            !.

           

        lod(2):-

            write("Файла kot.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("6 - известен телефон получателя"),nl,

      write("7 - известен факс получателя"),nl,

      write("==>"),

      readint(X),

      sel(X,N).

     

      sel(1,N):-

      nl,

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

      readint(N),

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

      M=N.

     

        sel(1,N):-

        N=0.

       

        sel(2,N):-

        nl,

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

        readln(L),

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

        N=Z.

        

        sel(2,N):-

        N=0.

       

        sel(3,N):-

        nl,

        write("Введите количество рабочих: "),

        readint(F),

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

        N=Z.

       

        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("Введите объем продукции (млн.руб):"),

        readln(W),

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

        N=Z.

       

        sel(5,N):-

        N=0.

       

        sel(6,N):-

        nl,

        write("Введите занимаемую площадь:"),

        readint(E),

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

        N=Z.

       

        sel(6,N):-

        N=0.

       

        sel(7,N):-

        nl,

        write("Введите факс получателя:"),

        readint(A),

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

        N=Z.

       

        sel(7,N):-

        N=0.