скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Информационно-справочная система, обеспечивающая работу с базой данных Bit

бавляется к базе с меткой "студент". Для того, чтобы были обрабо-

таны все записи, используется fail. После создания новой  БД  вы-

дается соответствующее сообщение и предупреждение  о  том,  чтобы

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

        

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

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

возврат в процедуру Main_menu, в которой выполняется условие C=7,

благодаря чему происходит выход из программы.

   

     Процедура Working(_) выводит сообщение об ошибке ввода  циф-

ры и подсказку о том, что следует ввести число от 0 до  7.  Вывод

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

ной с помощью встроенного предиката sound. После нажатия  клавиши

происходит возврат в главное меню.

        

      Данная процедура  производит  коррекцию  данных  в  записи.

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

меру, либо по фамилии абитурьента. Данную возможность  предостав-

ляет процедура Accept, описанная ниже, которая  вызывается  после

создания окна "Изменение данных". Процедура Accept  передает  но-

мер выбранной записи в переменную N, после чего содержимое  запи-

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

ляется возможность ввести измененные данные; если  нет  необходи-

мости изменять какой-либо элемент, можно нажать клавишу  <Enter>.

Все данные, в том числе и числа, считываются в формате строк. Это

необходимо для осуществления возможности отказа от изменения эле-

мента нажатием клавиши <Enter>. Все считанные  данные  передаются

процедурам Skip (для строковых выходных данных) и Skip1 (для  це-

лочисленных выходных данных). Эти процедуры в зависимости от  то-

го,  была  ли  нажата  клавиша  <Enter>  возвращают  в  процедуру

Correct(1) либо старое значение, либо новое,  при  чем  процедура

Skip1 преобразует с помощь встроенного предиката str_int  строко-

вые данные в целочисленные. Старая запись удаляется из базы  дан-

ных предикатом retract, а новая добавляется  предикатом  assertz.

По окончании выводится предупреждение о том, что  следует  сохра-

нить вновь введенные данные(процедура Mesage).

      

      Процедура Correct(2) служит для добавления  записей  к  БД.

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

запросы системы. С помощью предиката assertz данные добавляются в

БД, после чего вызывается предикат  Ask,  формирующий  запрос  на

продолжение процесса ввода новых записей.  Если  от  пользователя

будет получен утвердительный ответ, то благодаря процедуре Repeat

цикл ввода данных повторится, при получении отрицательного  отве-

та система выдаст предупреждение о необходимости сохранения вновь

введенных данных (процедура Mesage) и произойдет возврат из  про-

цедуры Correct(2).

           

      Данная процедура служит для вывода на экран содержимого ос-

новной ( View(1) ) и вновь созданной ( View(2) ) баз данных. Каж-

дая из процедур выводит заголовочную таблицу, после чего распеча-

тывает содержимое каждой записи. Для перебора  всей  БД  применен

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

жать любую клавишу для продолжения.

            

      Данная  процедура  является  вспомагательной  к  процедурам

Correct(1) и Working(2). Она в паре со  вспомагательной  процеду-

рой Acp определяет номер желаемой записи после ввода  пользовате-

лем либо собственно номера этой записи, либо после ввода  фамилии

абитурьента (данные пункты присутствуют в меню, выводимом  проце-

дурой Accept) и возвращает этот номер в вызывавшую процедуру.

         

      Процедуры Skip и Skip1 являются вспомагательными к процеду-

ре Correct(1). Они  позволяют  определить,  следует  ли  замещать

имеющийся элемент записи на новый или нет (если была нажата  кла-

виша <Enter>). В процедурах проверяется, является ли первый аргу-

мент пустой строкой. Если это так, то третьему аргумент  присваи-

вается второй. Если же первый аргумент не является  пустой  стро-

кой, то он присваивается третьему аргументу (в  Skip1  происходит

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

ную).

          

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

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

Bd_load(1) загружает основную БД из файла, заданного  пользовате-

лем, Bd_load(2) - из файла bit.dat, Bd_load(3) -  базу  BSTUD  из

файла, заданного пользователем и BD_load(4) - базу BSTUD из  фай-

ла bstud.dat. В данных процедурах проверяется  наличие  файла  на

диске с помощью предиката existfile и загрузка БД в память с  по-

мощью предиката consult. В случае отсутствия файла на диске,  вы-

дается соответствующее сообщение (процедура  Io_error).

        

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

лах на диске по  признакам,  зависящим  от  аргумента  процедуры:

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

Bd_save(2) - в файле bit.dat, Bd_save(3) - базу  BSTUD  в  файле,

заданном  пользователем  и  BD_save(4)  -  базу  BSTUD  в   файле

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

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

ние (процедура Error).

              

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

Correct(2). Она запрашивает пользователя, желает  ли  он  продол-

жить ввод данных.

                    

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

сохранения вновь введенных данных.

               

       Эти процедуры выводят сообщения об ошибках.

                      

       Данная процедура выводит сообщение об успешном  выполнении

операции.

                     

domains

        Str=string

        Int=integer

        ФИО=фио(Str,Str,Str)

        ОЦЕН=оцен(Int,Int,Int)

database - студент

           студент(Int,ФИО,Int,Int),

database - абитурьент

           абитурьент(Int,ФИО,Str,Int,ОЦЕН)

predicates

        begin

        main_menu

        autoload

        accept(Int)

        acp(Int,Int)

        working(Int)

        correct(Int)

        view(Int)

        skip(Str,Str,Str)

        skip1(Str,Int,Int)

        ask

        mesage

        error

        io_error

        ok

        save_bd(Int)

        load_bd(Int)

        repeat

goal

        begin.

clauses

/* Основная процедура, стр.8 */

      begin:-

           makewindow(1,26,94,"СПИСОК АБИТУРЬЕНТОВ",0,0,25,80),

            clearwindow,

            autoload,

            main_menu.

/* Главное меню, стр.8 */

      main_menu:-

            repeat,

            cursor(7,0),

            write("                    0 - О системе...  "),nl,

            write("                    1 - Корректировка данных"),nl,

            write("                    2 - Уничтожение записей"),nl,

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

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

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

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

            write("                    7 - Выход из программы"),nl,

            write("                    =>"),

            readint(C),

            clearwindow,

            working(C),

            clearwindow,

            C = 7,

            retractall(_),

            removewindow.

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

      autoload:-

            retractall(_,абитурьент),

            existfile("bit.dat"),

            consult("bit.dat",абитурьент),

            cursor(21,30),

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

      autoload:-

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

            cursor(2,10),

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

            sound(70,294),

            removewindow,

            !.

/* Вывод данных о создателе программы, стр.9 */

      working(0):-

            makewindow(3,27,30,"О системе...",0,0,25,80),

            nl,nl,

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

            nl,nl,

write("                            Список абитурьентов     "),

            nl,nl,nl,nl,

write("                        Программа составлена в среде      "),

            nl,

write("                             TURBO-PROLOG v.2.0."),

            nl,nl,nl,

write("                            автоp: Данченков А.В."),

            nl,nl,

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

            nl,

            sound(5,220),

            cursor(22,26),

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

            readchar(_),

            removewindow,!.

/* Процедура вывода меню корректировки данных, стр.9 */

      working(1):-

            makewindow(4,26,48,"Коppектировка данных",0,0,25,80),

            sound(5,220),

            repeat,

            nl,

            nl,

            cursor(9,0),

            write("        1 - Изменение данных"),nl,

            write("        2 - Добавление данных"),nl,

            write("        3 - Выход в главное меню" ),nl,

            write("        =>"),

            readint(X),

            clearwindow,

            X>0,X<=3,

            correct(X),

            clearwindow,

            X=3,!,

            removewindow.

/* Процедура уничтожения данных, стр.9 */

      working(2):-

            makewindow(5,48,107,"Уничтожение записей",0,0,25,80),

            sound(5,220),

            nl,

            accept(N),

            X=N,

            абитурьент(X,фио(Fm,Nm,Ot),Pl,Ls,оцен(E1,E2,E3)),

            retract(абитурьент(X,фио(Fm,Nm,Ot),Pl,Ls,оцен(E1,E2,E3))),

            ok,

            !,

            removewindow.

      working(2):-

            error,

            removewindow,!.

/* Процедура вывода меню просмотра  базы данных, стр.9 */

      working(3):-

            makewindow(6,30,26,"Просмотp базы",0,0,25,80),

            sound(5,220),

            repeat,

            nl,

            nl,

            cursor(10,0),

            write("            1 - Просмотр основной базы"),nl,

            write("            2 - Просмотр базы BSTUD"),nl,

            write("            3 - Выход в главное меню" ),nl,

            write("            =>"),

            readint(X),

            clearwindow,

            X>0,X<=3,

            view(X),

            clearwindow,

            X=3,!,

            removewindow.

/* Процедура загрузки  базы данных, стр.10 */

      working(4):-

            makewindow(7,62,120,"Загрузка",5,10,15,60),

            sound(5,220),

            repeat,

            nl,nl,

            write("1 - Загрузить основную базу из выбранного файла"),nl,

            write("2 - Загрузить основную базу из файла bit.dat"),nl,

            write("3 - Загрузить базу BSTUD из выбранного файла"),nl,

            write("4 - Загрузить базу BSTUD из файла bstud.dat"),nl,

            write("5 - Выход в основное меню"),nl,

            write("=>"),

            readint(C),

            clearwindow,

            C>0,C<=5,

            load_bd(C),

            clearwindow,

            C = 5,!,

            removewindow.

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

      working(5):-

            makewindow(8,62,120,"Сохранение",5,10,15,60),

            sound(5,220),

            repeat,

            nl,nl,

            write("1 - Сохранить основную базу в указанном файле"),nl,

            write("2 - Сохранить основную базу в файле bit.dat"),nl,

            write("3 - Сохранить базу BSTUD в указанном файле"),nl,

            write("4 - Сохранить базу BSTUD в файле bstud.dat"),nl,

            write("5 - Выход в основное меню"),nl,

            write("=>"),

            readint(I),

            clearwindow,

            I>0,I<=5,

            save_bd(I),

            clearwindow,!,

            removewindow.

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

   working(6):-

         makewindow(10,43,120,"Создание базы данных BSTUD",6,18,8,40),

         sound(5,220),

         nl,

         retractall(_,студент),

         абитурьент(N,фио(Fam,Nam,Otch),Pol,List,оцен(E1,E2,E3)),

         N=N1, Fam1=Fam, Nam1=Nam,

         Otch1=Otch, List1=List, Sum=E1+E2+E3,

         assertz(студент(N1,фио(Fam1,Nam1,Otch1),List,Sum)),

         fail.

   working(6):-

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

         nl,

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

         nl,nl,

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

         readchar(_),

         removewindow,!.

/* Процедура выхода, стр.10 */

   working(7):-!.

/* Обработка ошибки пользователя, стр.10 */

   working(_):-

         makewindow(16,74,79,"ОШИБКА ВВОДА",6,18,8,40),

         nl,

         write("        Введите число от 0 до 7,"),nl,

         write("  соответствующее выбранному пункту"),nl,nl,nl,

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

         sound(20,494),

         sound(30,392),

         readchar(_),

         removewindow.

/* Процедура коррекции данных в базе, стр.10 */

   correct(1):-

         makewindow(4,26,48,"Изменение данных",0,0,25,80),

         nl,

         accept(N),

         X=N,

         абитурьент(X,фио(Fam,Nam,Otch),Pol,List,оцен(E1,E2,E3)),

         clearwindow,nl,

         write("Порядковый номер абитурьента : "),write(N),nl,

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

         write("Имя                          : "),write(Nam),nl,

         write("Отчество                     : "),write(Otch),nl,

         write("Пол                          : "),write(Pol),nl,

         write("Номер экзаменационного листа : "),write(List),nl,nl,

         write("Оценки за экзамены  -          "),nl,nl,

         write("За первый:  "),write(E1),write("   "),

         write("За второй:  "),write(E2),write("   "),

Страницы: 1, 2, 3, 4


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.