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

CODE=12050

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

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

             *                        *

             *  Косарева  Вячеслава   *

             *                        *

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

*/

domains

        z,i,n,n1,ko,ob,pl=integer

        na,j=symbol

database -svod1

          svod1(n,j,ko,ob,pl)

database -lolo

          lolo(n,na,i,ob,pl)

database -kuku

          kuku(n,na,ko,i,pl)

database

         svod(n,na,ko,ob,pl)

        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("slava.dat"),

            consult("slava.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("Введите занимаемую площадь  :"),readint(T),nl,

            N1=K,NA1=O,KO1=I,OB1=Y,PL1=T,

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

            removewindow,

            fail.

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

         process(8):-

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

         nl,

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

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

         A=N,

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

         write("Название предприятия:"),write(NA),nl,

         write("Количество рабочих  :"),write(KO),nl,

         write("Объем продукции     :"),write(OB),nl,

         write("Занимаемая площадь  :"),write(PL),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("Введите занимаемую площадь  :"),readint(G),nl,

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

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

         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,NA,KO,OB,PL),

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

            write("Название предприятия:"),write(NA),nl,

            write("Количество рабочих  :"),write(KO),nl,

            write("Объем продукции     :"),write(OB),nl,

            write("Занимаемая площадь  :"),write(PL),nl,

            nl,

            write("Введите название предприятия:"),readln(NA1),nl,

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

            write("Введите объем продукции     :"),readint(OB1),nl,

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

            X1=X,

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

            assert(svod(X1,NA1,KO1,OB1,PL1)),

            !,

            removewindow.

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

        process(2):-

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

            nl,

            select(N),

            X=N,

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

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

            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,NA,KO,OB,PL),

            cursor(Z,_),

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

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

            cursor(Z,27),write(KO),

            cursor(Z,42),write(OB),

            cursor(Z,54),write(PL),

            cursor(Z,66),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 - База будет загружена из файла slava.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 - База будет записана в файл slava.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,NA,KO,OB,PL),

            S=NA,

            S=X,

            N1=N,KO1=KO,OB1=OB,PL1=PL,

            assert(svod1(N1,S,KO1,OB1,PL1)),

            fail.

        procedure(1):-

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

write("__________________________________________________________________!"),

write("                        ХАРАКТЕРИСТИКА ПРЕДПРИЯТИЯ                 "),

nl,

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

nl,

write("!номер!  наименование  !   количество  !  объем    !  занимаемая  !"),

nl,

write("!     !  предприятия   !   рабочих     ! продукции !  площадь      "),

nl,

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

nl,

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

            cursor(Z,_),

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

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

            cursor(Z,27),write(KO),

            cursor(Z,42),write(OB),

            cursor(Z,54),write(PL),

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

            nl,

            fail.

        procedure(1):-

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

            save("not.dat",svod1),

            nl,

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

            nl,

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

            readchar(_),

            removewindow,

            !.

        procedure(1):-

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

            nl,

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

            nl,

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

            readchar(_),

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

            procedure(2):-

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

            nl,

            cursor(7,10),

            retractall(_,lolo),

            nl,

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

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

            readint(X),

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

            S=KO,

            S>=X,

            N1=N,NA1=NA,OB1=OB,PL1=PL,

            assert(lolo(N1,NA1,S,OB1,PL1)),

            fail.

        procedure(2):-

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

write("__________________________________________________________________!"),

write("                        ХАРАКТЕРИСТИКА ПРЕДПРИЯТИЯ                 "),

nl,

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

nl,

write("!номер!  наименование  !   количество  !  объем    !  занимаемая  !"),

nl,

write("!     !  предприятия   !   рабочих     ! продукции !  площадь      "),

nl,

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

nl,

            lolo(N,NA,S,OB,PL),

            cursor(Z,_),

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

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

            cursor(Z,27),write(S),

            cursor(Z,42),write(OB),

            cursor(Z,54),write(PL),

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

            nl,

            fail.

        procedure(2):-

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

            save("not1.dat",lolo),

            nl,

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

            nl,

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

            readchar(_),

            removewindow,

            !.

        procedure(2):-

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

            nl,

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

            nl,

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

            readchar(_),

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

        procedure(3):-

     makewindow(1,2,7,"Создание базы данных по объему продукции",0,0,25,80),

            nl,

            cursor(7,10),

            retractall(_,kuku),

            nl,

   write("Если вы хотите узнать данные о наибольшем объеме продукции , то"),

            nl,

            write("Введите начальный объем :"),

            readint(X),

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

            S=OB,

            S>=X,

            N1=N,NA1=NA,KO1=KO,PL1=PL,

            assert(kuku(N1,NA1,KO1,S,PL1)),

            fail.

        procedure(3):-

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

write("__________________________________________________________________!"),

write("                        ХАРАКТЕРИСТИКА ПРЕДПРИЯТИЯ                 "),

nl,

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

nl,

write("!номер!  наименование  !   количество  !  объем    !  занимаемая  !"),

nl,

write("!     !  предприятия   !   рабочих     ! продукции !  площадь      "),

nl,

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

nl,

          kuku(N,NA,KO,S,PL),

            cursor(Z,_),

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

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

            cursor(Z,27),write(KO),

            cursor(Z,42),write(S),

            cursor(Z,54),write(PL),

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

            nl,

            fail.

        procedure(3):-

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

            save("not2.dat",kuku),

            nl,

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

            nl,

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

            readchar(_),

            removewindow,

            !.

        procedure(3):-

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

            nl,

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

            nl,

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

            readchar(_),

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

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

        sve(1):-

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

            readln(N),

            save(N),

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

            beep,

            !.

        sve(1):-

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

            readchar(_).

        sve(2):-

            save("slava.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("slava.dat"),

            consult("slava.dat"),

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

            beep,

            !.

        lod(2):-

            write("Файла slava.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("Введите номер записи                :"),

        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("Введите занимаемую площадь:"),

        readint(W),

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

        N=Z.