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

Меню

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

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

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

         write("За третий:  "),write(E3),

         nl,nl,nl,

         write("Введите фамилию                   : "),readln(Fam1),

         write("Введите имя                       : "),readln(Nam1),

         write("Введите отчество                  : "),readln(Otch1),

         write("Введите пол                       : "),readln(Pol1),

         write("Введите номер экзаменационного листа: "),readln(List1),

         write("Введите оценки за экзамены  -       "),nl,

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

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

         write("За третий                         : "),readln(Ekz3),nl,

         X1=X,

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

         skip(Fam1,Fam,Fam2),

         skip(Nam1,Nam,Nam2),

         skip(Otch1,Otch,Otch2),

         skip(Pol1,Pol,Pol2),

         skip1(List1,List,List2),

         skip1(Ekz1,E1,E11),

         skip1(Ekz2,E2,E22),

         skip1(Ekz3,E3,E33),

assertz(абитурьент(X1,фио(Fam2,Nam2,Otch2),Pol2,List2,оцен(E11,E22,E33))),

         !,

         mesage,

         removewindow.

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

   correct(2):-

         makewindow(9,26,48,"Ввод новых данных",0,0,25,80),

         repeat,

         nl,

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

         write("Введите фамилию                     : "),readln(F),nl,

         write("Введите имя                         : "),readln(N),nl,

         write("Введите отчество                    : "),readln(O),nl,

         write("Введите пол                         : "),readln(P),nl,

         write("Введите номер экзаменационного листа: "), readint(L),nl,

         write("Введите оценки за экзамены  -"),nl,nl,

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

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

         write("          За третий                 : "),readint(E3),nl,

         N1=K,

         Fam=F,Nam=N,Otch=O,

         Pol=P,List=L,

         Ekz1=E1,Ekz2=E2,Ekz3=E3,

assertz(абитурьент(N1,фио(Fam,Nam,Otch),Pol,List,оцен(Ekz1,Ekz2,Ekz3))),

         ask,!,

         mesage,

         removewindow.

   correct(_).

/* Процедура просмотра базы, стр.11 */

   view(1):-

         makewindow(16,31,26,"Просмотp основной базы",0,0,25,80),

         nl,nl,

write("╔═══════════════════════════════════════════════════════╗"),nl,

write("║               СПИСОК АБИТУРЬЕНТОВ                     ║"),nl,

write("╠════╦═════════════════════╦═══╦═════╦══════════════════╣"),nl,

write("║    ║       ФИО           ║   ║  No ║оценки за экзамены║"),nl,

write("║ No ╠═══════╦════╦════════╣Пол║ экз.╠═════╦══════╦═════╣"),nl,

write("║    ║Фамилия║Имя ║Отчество║   ║листа║1 экз║ 2 экз║3 экз║"),nl,

write("╠════╬═══════╬════╬════════╬═══╬═════╬═════╬══════╬═════╣"),nl,

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

         cursor(Z,_),

         cursor(Z,2),write(N),

         cursor(Z,5),write("║",Fam),

         cursor(Z,18),write("║",Nam),

         cursor(Z,30),write("║",Otch),

         cursor(Z,43),write("║  ",Pol),

         cursor(Z,49),write("║  ",List),

         cursor(Z,55),write("║   ",E1),

         cursor(Z,62),write("║   ",E2),

         cursor(Z,69),write("║   ",E3),

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

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

         nl,

         fail.

   view(1):-

write("╚════╩═══════╩════╩════════╩═══╩═════╩═════╩══════╩═════╝"),

         nl,

         cursor(22,26),

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

         readchar(_),

         removewindow.

   view(2):-

         nl,

         makewindow(13,31,26,"Просмотр новой базы данных",0,0,25,80),

write("╔═══════════════════════════════════════════════════════╗"),nl,

write("║                    СПИСОК СТУДЕНТОВ                   ║"),nl,

write("╠════╦════════════════════════════════════╦═════╦═══════╣"),nl,

write("║    ║                 ФИО                ║  No ║ сумма ║"),nl,

write("║ No ╠════════════╦═══════════╦═══════════╣ экз.║ балов ║"),nl,

write("║    ║   Фамилия  ║    Имя    ║  Отчество ║листа║       ║"),nl,

write("╠════╬════════════╬═══════════╬═══════════╬═════╬═══════╣"),nl,

         студент(N,фио(Fam,Nam,Otch),List,Sum),

         cursor(Z,_),

         cursor(Z,11),write(N),

         cursor(Z,14),write("║",Fam),

         cursor(Z,27),write("║",Nam),

         cursor(Z,39),write("║",Otch),

         cursor(Z,52),write("║  ",List),

         cursor(Z,58),write("║   ",Sum),

         cursor(Z,9),write("║"),

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

         nl,

         fail.

   view(2):-

write("╚════╩════════════╩═══════════╩═══════════╩═════╩═══════╝"),

         nl,

         cursor(22,26),

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

         readchar(_),

         removewindow.

   view(_).

/* Вспомагательная процедура к процедуре */

/*   correct(1)  и working(2), стр.11    */

   accept(N):-

         nl,

         cursor(10,0),

         write("     1 - известен номер абитурьента"),nl,

         write("     2 - известна  фамилия"),nl,

         write("     =>"),

         readint(X),

         acp(X,N).

   acp(1,N):-

         nl,

         write("     Введите номер абитурьента: "),nl,

         write("     >"),

         readint(N),

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

         P=N.

      acp(1,N):-

            N=0.

      acp(2,N):-

            nl,

            write("  Введите фамилию абитурьента: "),nl,

            write("  >"),

            readln(L),

            абитурьент(Y,фио(L,_,_),_,_,_),

            N=Y.

      acp(2,N):-

            N=0.

/* Вспомагательная процедура к correct(1), стр.11 */

      skip("",Fam,Fam2):-

            Fam2=Fam,

            !.

      skip(Fam1,_,Fam2):-

            Fam2=Fam1,

            !.

      skip1("",Fam,Fam2):-

            Fam2=Fam,

            !.

      skip1(Fam1,_,Fam2):-

            str_int(Fam1,Fam3),

            Fam2=Fam3,

            !.

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

      load_bd(1):-

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

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

            readln(N),

            existfile(N),

            consult(N,абитурьент),

            ok,

            !.

      load_bd(1):-

            io_error,

            !.

      load_bd(2):-

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

            existfile("bit.dat"),

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

            ok,

            !.

      load_bd(2):-

            io_error,

            !.

      load_bd(3):-

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

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

            readln(N),

            existfile(N),

            consult(N,студент),

            ok,

            !.

      load_bd(3):-

            io_error,

            !.

      load_bd(4):-

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

            existfile("bstud.dat"),

            consult("bstud.dat",студент),

            ok,

            !.

      load_bd(4):-

            io_error,

            !.

      load_bd(_).

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

      save_bd(1):-

            nl,nl,

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

            readln(N),

            save(N,абитурьент),nl,

            ok,

            !.

      save_bd(1):-

            error.

      save_bd(2):-

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

            ok,

            !.

      save_bd(2):-

            error.

      save_bd(3):-

            nl,nl,

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

            readln(N),

            save(N,студент),nl,

            ok,

            !.

      save_bd(3):-

            error.

      save_bd(4):-

            save("bstud.dat",студент),

            ok,

            !.

      save_bd(4):-

            error.

      save_bd(_).

/* Процедура запроса на окончание ввода в correct(2), стр.12 */

      ask:-

            makewindow(10,43,120,"Вопрос",6,18,8,40),nl,nl,

            write("  Продолжить процесс ввода данных? "),nl,nl,

            write("             [Д]а/[Н]ет"),

            readchar(Ch),

            removewindow,

            clearwindow,

            Ch='Н',!.

/* Вывод предупреждения о необходимости сохранения данных, стр.12 */

     mesage:-

            makewindow(17,74,79,"Предупреждение",6,18,8,40),nl,

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

            write("        вновь введенные данные!"),nl,nl,

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

            readchar(Ch),

            removewindow.

/* Процедуры вывода сообщения об ошибке, стр.12 */

      error:-

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

            cursor(2,16),

            write("ОШИБКА"),nl,nl,

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

            sound(70,294),

            readchar(_),

            removewindow,

            !.

      io_error:-

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

            cursor(2,7),

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

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

            sound(70,294),

            readchar(_),

            removewindow.

/* Процедура вывода сообщения об успешном завершении */

/*               данной операции, стр.12             */

      ok:-

            makewindow(17,27,90,"ОК",6,18,8,40),

            cursor(2,7),

            write("   ОПЕРАЦИЯ ВЫПОЛНЕНА"),nl,nl,

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

            readchar(_),

            removewindow.

/* Процедура repeat */

      repeat.

      repeat:- repeat.

                     

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

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

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

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

каты в разделе predicates и т.д. Если компиляция прошла  успешно,

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

рому этапу - просмотру текста программы и логическому  осмыслению

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

го одной записи базы данных в режиме просмотра БД. Причиной  это-

му было отсутствие в конце процедуры предиката fail. Ошибка  была

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

третьему - трассировке. Так была  установлена  следующая  ошибка:

при выходе из процедуры Working(4) главное меню выводилось  не  в

окне "Список абитурьентов", а в окне "Загрузка" (т.е.  не  удаля-

лось это окно "Загрузка"). После трассировки было выяснено, что в

процедуре не в том месте стоит предикат Repeat ( он стоял в нача-

ле  процедуры,  а  его  следовало  поставить   после    предиката

makewindow), из-за чего происходило  многократное  создание  окна

"Загрузка" и только однократное его удаление. Ошибка была исправ-

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

ошибок в программе обнаружено не было.

   

        Программа "Список абитурьентов" представляет собой инфор-

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

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

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

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

оценках за три экзамена. В дочерней БД имеются те  же  данные  за

исключением пола и того, что оценки за экзамены заменены их  сум-

мой.

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

                    0 - О системе...

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

                    2 - Уничтожение данных

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

                    4 - Загрузка базы

                    5 - Сохранение базы

                    6 - Создание новой базы

                    7 - Выход из программы

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

ствующую цифровую клавишу. Вход в каждый пункт сопровождается ко-

ротким звуковым сигналом. При нажатии неверной клавиши  на  экран

выводится окно с сообщением об ошибке и подсказкой, в  каком  ин-

тервале следует вводить число. Ниже приводится  описание  каждого

из пунктов.

                       

        При выборе данного пункта на  экран  выводятся  данные  о

системе и ее авторе. После нажатия на  любую  клавишу  происходит

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

                   

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

                      1 - Изменение данных

                      2 - Добавление данных

                      3 - Выход в главное меню

        Пункт 1 предназначен для изменения данных в записях.  При

входе в него так же появляется подменю:

                      1 - Известен номер абитурьента

                      2 - Известна фамилия

        Если известен номер абитурьента, то следует ввести  цифру

1, если известна фамилия - цифру 2. После этого система  запросит

соответственно номер или фамилию. Фамилию следует вводить  в  том

же виде (сочетание заглавных и строчных букв) в каком она  имеет-

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

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

отредактировать, последовательно распечатывая поля  записи.  Если

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

клавишу <Enter>. После корректировки всех полей система предупре-

дит о необходимости сохранить вновь введенные данные и после  на-

жатия любой клавиши выйдет в меню "Корректировка данных".

        Пункт 2 меню "Корректировка данных" предназначен для  до-

бавления новых записей. После входа в этот режим система последо-

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

ввода выводится запрос, хочет ли пользователь продолжить  процесс

ввода новых записей. При утвердительном ответе (нажатии клавиши Д

в верхнем регистре) программа  предоставляет  возможность  ввести

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

При отрицательном ответе (нажатии клавиши Н (рус.) на верхнем ре-

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

вновь введенные данные и после нажатия любой клавиши выйдет в ме-

ню "Корректировка данных".

        Пункт 3 служит для выхода в основное меню.

                   

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

Как и в подпункте "Изменение данных" режима  "Корректировка  дан-

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

либо фамилию удаляемого  абитурьента.  После  ввода  этих  данных

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

ждающего выполнение данной операции. В случае невозможности  уда-

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

выдается соответствующее сообщение об ошибке.

                       

        Данный режим предназначен для просмотра содержимого имею-

щихся баз данных. При входе в этот режим выводится следующее под-

меню:

                    1 - Просмотр основной базы

                    2 - Просмотр базы BSTUD

                    3 - Выход в главное меню

        Пункт 1 предназначен для просмотра основной базы  данных,

содержимое которой подгружается  автоматически  (при  наличии  на

диске файла bit.dat) при запуске информационно-справочной  систе-

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

ной БД в виде таблицы. Для возвращения в меню следует нажать  лю-

бую клавишу.

        Пункт 2 предназначен для просмотра дочерней  базы  данных

BSTUD. В отличии от основной БД сразу после загрузки она пуста, и

чтобы ее просмотреть следует создать эту БД с  помощью  пункта  6

или загрузить ее с диска с помощью пункта 4 основного меню.  Дан-

ные дочерней базы представляются также в виде таблицы.

       Пункт  3 служит для выхода в главное меню.

                      

       Данный режим предназначен для загрузки баз данных из  фай-

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

          1 - Загрузить основную базу из выбранного файла

          2 - Загрузить основную базу из файла bit.dat

          3 - Загрузить базу BSTUD из выбранного файла

          4 - Загрузить базу BSTUD из файла bstud.dat

          5 - Выход в основное меню

       При выборе пунктов 2 и 4 произойдет загрузка соответствен-

но основной и дочерней  БД  из  стандартных  файлов  bit.dat  или

bstud.dat, в случае удачной загрузки будет  выдано  соответствую-

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

главное меню.

       При выборе пунктов 1 и 3 система запросит имя файла, в ко-

тором содержится соответствующая БД. При успешной  загрузке  поя-

вится соответствующее сообщение, при сбое появится  сообщение  об

ошибке.

       Пункт 5 предназначен для  выхода в главное меню.

                     

       Данный режим предназначен для сохранения баз  данных.  При

входе в данный режим выводится следующее меню:

          1 - Сохранить основную базу в указанном файле

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

          3 - Сохранить базу BSTUD в указанном файле

          4 - Сохранить базу BSTUD в файле bstud.dat

          5 - Выход в основное меню

       Работа с его пунктами полностью аналогична работе с подме-

ню режима "Загрузка базы".

                   

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

ных. При запуске этого режима дочерняя БД создается  автоматичес-

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

необходимости сохранения дочерней БД. После нажатия любой  клави-

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

                    

        Этот пункт меню предназначен для выхода  из  информацион-

но-справочной системы в ДОС.

               

        В целях конечной отладки программы и  устранения  скрытых

ошибок было решено несколько контрольных  примеров  по  работе  с

системой во всех режимах. Была создана и  отредактирована  основ-

ная база данных. с ее помощью были  опробованы  режимы  удаления,

корректировки, создания новой БД, загрузки и сохранения  БД.  При

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

                          

         В данной курсовой работе  были  исследованы  возможности

языка программирования Пролог для создания информационно-справоч-

ных систем. Можно сделать вывод, что Пролог представляет  богатые

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

го интерфейса для общения  пользователя с программой.

                       

         И.Братко   "Программирование на языке Пролог для

                     искусственного интеллекта"

         Дж.Доорс   "Пролог - язык программирования будущего"

         Ю.Тихонов  "МПролог - язык логического

                     программирования. Версия 2.3"

___


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


Новости

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

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

Пока нет

Новости в Twitter и Facebook

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

Новости

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

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.