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

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

CODE=12050

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

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

             *                        *

             *   Федорова   Вадима    *

             *                        *

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

*/

domains

        z,i,n,n1,n,no,dat,datv=integer

        gor,fio,se,j=symbol

database -svod1

          svod1(n,j,dat,gor,se,no,datv)

database -lolo

          lolo(n,fio,dat,gor,j,no,datv)

database -kuku

          kuku(n,fio,dat,gor,se,i,datv)

database-svod

         svod(n,fio,dat,gor,se,no,datv)

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

consult("mak.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("Введите город рождения:"),readln(Y),nl,

            write("Введите серию удостоверения:"),readln(T),nl,

            write("Введите номер удостоверения:"),readint(V),nl,

            write("Введите дату выдачи(число,месяц,год):"),readint(A),nl,

N1=K,FIO1=O,DAT1=I,GOR1=Y,SE1=T,NO1=V,DATV1=A,

            assertz(svod(N1,FIO1,DAT1,GOR1,SE1,NO1,DATV1)),

removewindow,

            fail.

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

         process(8):-

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

         nl,

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

         svod(N,FIO,DAT,GOR,SE,NO,DATV),

         A=N,

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

         write("Фамилия,имя,отчество владельца:"),write(FIO),nl,

         write("Число,месяц,год рождения:"),write(DAT),nl,

         write("Городрождения:"),write(GOR),nl,

         write("Серию удостоверения:"),write(SE),nl,

         write("Номер удостоверения:"),write(NO),nl,

         write("Дату выдачи(число,месяц,год):"),write(DATV),nl,nl,nl,nl,nl,

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

         readchar(_),

         removewindow,

         !.

         process(8):-

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

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

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

     readint(A),nl,

             A=N1,

            write("Введите фамилию,имя и отчество владельца :"),readln(F),nl,

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

            write("Введите город рождения:"),readln(J),nl,

            write("Введите серию удостоверения:"),readln(G),nl,

            write("Введите номер удостоверения:"),readint(E),nl,

            write("Введите дату выдачи(число,месяц,год):"),readint(Z),nl,

         FIO1=F,DAT1=Y,GOR1=J,SE1=G,NO1=E,DATV1=Z,

         assertz(svod(N1,FIO1,DAT1,GOR1,SE1,NO1,DATV1)),

         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:Федoров В.         "),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,FIO,DAT,GOR,SE,NO,DATV),

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

write("Фамилия,имя,отчество владельца:"),write(FIO),nl,

            write("Число,месяц,год рождения:"),write(DAT),nl,

write("Городрождения:"),write(GOR),nl,

write("Серию удостоверения:"),write(SE),nl,

            write("Номер удостоверения:"),write(NO),nl,

            write("Дату выдачи(число,месяц,год):"),write(DATV),nl,nl,nl,nl,nl,

nl,

            write("Введите фамилию,имя и отчество владельца :"),readln(FIO1),nl,

            write("Введите число,месяц и год рождения:"),readint(DAT1),nl,

            write("Введите город рождения:"),readln(GOR1),nl,

            write("Введите серию удостоверения:"),readln(SE1),nl,

            write("Введите номер удостоверения:"),readint(NO1),nl,

            write("Введите дату выдачи(число,месяц,год):"),readint(DATV1),nl,

X1=X,

retract(svod(X,FIO,DAT,GOR,SE,NO,DATV)),

            assert(svod(X1,FIO1,DAT1,GOR1,SE1,NO1,DATV1)),

!,

            removewindow.

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

        process(2):-

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

            nl,

select(N),

X=N,

svod(X,FIO,DAT,GOR,SE,NO,DATV),

            retract(svod(X,FIO,DAT,GOR,SE,NO,DATV)),!,

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,FIO,DAT,GOR,SE,NO,DATV),

cursor(Z,_),

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

cursor(Z,7),write(FIO),

cursor(Z,25),write(DAT),

cursor(Z,41),write(GOR),

cursor(Z,49),write(SE),

cursor(Z,55),write(NO),

            cursor(Z,61),write(DATV),

cursor(Z,76),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 - База будет загружена из файла mak.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 - База будет записана в файл mak.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,FIO,DAT,GOR,SE,NO,DATV),

S=FIO,

S=X,

            N1=N,DAT1=DAT,GOR1=GOR,SE1=SE,NO1=NO,DATV1=DATV,

            assert(svod1(N1,S,DAT1,GOR1,SE1,NO1,DATV1)),

fail.

        procedure(1):-

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

write("____________________________________________________________________________!"),

            write("                        ВОДИТЕЛЬСКОЕУДОСТОВЕРЕНИЕ                          "),

nl,

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

nl,

            write("!номер!    Фамилия И.О. !Дата,место рождения!     !     ! Дата выдачи   !"),

nl,

            write("!     !                 !число,месяц,год! город !серия!номер!число,месяц,год!"),

           nl,

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

nl,

svod(N,S,DAT,GOR,SE,NO,DATV),

cursor(Z,_),

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

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

cursor(Z,25),write(DAT),

cursor(Z,41),write(GOR),

cursor(Z,49),write(SE),

cursor(Z,55),write(NO),

cursor(Z,61),write(DATV),

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

nl,

            fail.

        procedure(1):-

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

save("nov.dat",svod1),

nl,

            write("База сохранена в файле nov.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("Введите серию удостоверения:"),

            readln(X),

svod(N,FIO,DAT,GOR,SE,NO,DATV),

S=SE,

S=X,

            N1=N,FIO1=FIO,DAT1=DAT,GOR1=GOR,NO1=NO,DATV1=DATV,

            assert(lolo(N1,FIO1,DAT1,GOR1,S,NO1,DATV1)),

fail.

        procedure(2):-

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

write("____________________________________________________________________________!"),

            write("                        ВОДИТЕЛЬСКОЕУДОСТОВЕРЕНИЕ                          "),

nl,

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

nl,

            write("!номер!    Фамилия И.О. !Дата,место рождения!     !     ! Дата выдачи   !"),

nl,

            write("!     !                 !число,месяц,год! город !серия!номер!число,месяц,год!"),

nl,

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

nl,

            svod(N,FIO,DAT,GOR,S,NO,DATV),

cursor(Z,_),

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

cursor(Z,7),write(FIO),

cursor(Z,25),write(DAT),

cursor(Z,41),write(GOR),

cursor(Z,49),write(S),

cursor(Z,55),write(NO),

cursor(Z,61),write(DATV),

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

nl,

fail.

        procedure(2):-

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

            save("nov1.dat",lolo),

nl,

            write("База сохранена в файле nov1.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,FIO,DAT,GOR,SE,NO,DATV),

S=NO,

            S=X,

            N1=N,FIO1=FIO,DAT1=DAT,GOR1=GOR,SE1=SE,DATV1=DATV,

            assert(kuku(N1,FIO1,DAT1,GOR1,SE1,S,DATV1)),

fail.

        procedure(3):-

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

write("____________________________________________________________________________!"),

            write("                        ВОДИТЕЛЬСКОЕУДОСТОВЕРЕНИЕ                          "),

nl,

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

nl,

            write("!номер!    Фамилия И.О. !Дата,место рождения!     !     ! Дата выдачи   !"),

nl,

            write("!     !                 !число,месяц,год! город !серия!номер!число,месяц,год!"),

            nl,

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

nl,

svod(N,FIO,DAT,GOR,SE,S,DATV),

cursor(Z,_),

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

cursor(Z,7),write(FIO),

cursor(Z,25),write(DAT),

cursor(Z,41),write(GOR),

cursor(Z,49),write(SE),

cursor(Z,55),write(S),

cursor(Z,61),write(DATV),

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

nl,

fail.

        procedure(3):-

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

save("nov2.dat",kuku),

nl,

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

consult("mak.dat"),

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

beep,

!.

        lod(2):-

            write("Файла mak.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("Введите город рождения:"),

        readln(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.