![]() |
|
|
Реферат: Информационно-справочная система, обеспечивающая работу с базой данных Bitnl, 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(" "), 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" ___ |
![]() |
||
НОВОСТИ | ![]() |
![]() |
||
ВХОД | ![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |