Рефераты, курсовые. Учебные работы для всех учащихся.

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

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

Введение .................................... 4 1. Понятие об информационных системах и их программной реализации ................... 4 2. База данных и способы ее представления ... 4 3. Разработка системного меню ............... 5 4. Разработка структуры программы ........... 7 5. Разработка процедур: 5.1 Основной процедуры Begin ............. 8 5.2 Вывода главного меню Main_menu ....... 8 5.3 Автоматической загрузки БД Autoload .. 9 5.4 Вывода информации о системе Working(0) ........................... 9 5.5 Вывода меню корректировки Working(1) . 9 5.6 Удаления записей Working(2) .......... 9 5.7 Вывода меню просмотра Working(3) ..... 9 5.8 Вывода меню загрузки Working(4) ..... 10 5.9 Вывода меню сохранения Working(5) ... 10 5.10 Создания новой БД Working(6) ....... 10 5.11 Выхода из программы Working(7) ..... 10 5.12 Обработки ошибки пользователя Working(_) ......................... 10 5.13 Корректировки данных Correct(1) .... 10 5.14 Добавления новых записей Correct(2). 11 5.15 Просмотра БД View .................. 11 5.16 Вспомагательной Accept ............. 11 5.17 Вспомагательных Skip и Skip1 ....... 11 5.18 Загрузки БД с диска Bd_load ........ 12 5.19 Сохранения БД на диске Bd_save ..... 12 5.20 Вспомагательной Ask ................ 12 5.21 Mesage ............................. 12 5.22 Error и Io_error ................... 12 5.23 Ok ................................. 12 6. Листинг программы ....................... 13 7. Отладка программы ....................... 24 8. Инструкция пользователя и решение контрольных примеров: ................... 25 Заключение ................................. 28 Список литературы .......................... 29 @Введение Данная курсовая написана на языке Пролог в среде Turbo Prolog v 2.0 (русифицированная версия). В структуре языка заложены возможности простой и черезвычайно эффективной работы с базами данных, что позволяет на его основе создавать различного рода информационно - справочные системы.

Структура языка Пролог соответствует структуре реляционных баз данных. Так отношению в РБД соответствует предикат в Прологе, элементу - факт, атрибуту отношения - аргумент предиката и т.д.

Встроенные в Пролог предикаты работы с окнами позволяют создать дружественный интерфейс для работы пользователя с информационно - справочной системой. @ 1. Понятие об информационно-справочных @системах и @их программной реализации Информационно-справочные системы - это программы-оболочки, служащие для управления массивами и базами данных. В наш век всеобщей компьютеризации информационно-справочные системы значительно облегчают труд человека во всех отраслях народного хозяйства.

Значительно упростилась работа московской милиции по обнаружению угнаного транспорта после создания в Москве компьютерных баз данных по угнаным автомобилям.

Бухгалтерам предприятий и фирм теперь не нужно перебирать горы бумаг, чтобы получить все данные о сотруднике: достаточно загрузить информационно-справочную систему и она в удобной форме выдаст всю необходимую информацию.

Области применения информационно-справочных систем воистину безграничны: это ведение статистики удоя скота на ферме, составление каталогов книг в библиотеках и произведений искусства в музеях, сбор данных о наличии рабочих вакансий в данном регеоне и многие другие. Одним из способов програмной реализации информационно-справочной системы является использование для ее создания языка логического программирования Пролог. В данной реализации языка содержится множество встроенных предикатов, существенно облегчающих написание таких систем. @2. База данных и способы ее представления База данных в простейшем случае - упорядоченная структура данных в виде таблицы, каждая запись которой может объединять разнотипные данные, причем все записи одной базы имеют одинаковую структуру.

Существуют три модели представления баз данных: иерархическая, сетевая и реляционная. В силу особенностей языка Пролог, с его помощью реализуется реляционная модель.

Каждая строка в базе данных называется элементом отношения, каждая колонка - атрибутом отношения, колличество колонок - арностью, а колличество строк - мощностью. В языке программирования Пролог атрибуту отношения соответствует аргумент предиката, арности - колличество аргументов в предикате, отношению - предикат, элементу - факт, и мощности - число фактов.

Исходя из вышеперечисленных соответствий Пролог является прекрасным средством для реализации реляционных баз данных. @3. Разработка системного меню Все режимы программы активизируются с помощью меню, которое реализовано с помощью процедуры main_menu. Для активизации какого либо режима пользователю следует нажать цифровую клавишу, соответствующую выбранному пункту меню. Меню данной программы состоит из семи пунктов: 0 - О системе... - вывод данных о системе 1 - Корректировка данных - режим корректировки данных 2 - Уничтожение данных - режим удаления данных 3 - Просмотр базы - режим просмотра базы 4 - Загрузка базы - режим загрузки базы 5 - Сохранение базы - режим сохранения базы 6 - Создание новой базы - режим создания новой базы 7 - Выход из программы - выход из программы На следующей странице представлена графическая структура меню. @4. Разработка структуры программы AСтруктура программы 'Список абитурьентов': begin основная процедура autoload main_manu автозагрузка БД главное меню working(0) working(1) working(2) working(3) Информация Корректировка Удаление Просмотр о системе данных данных базы working(4) working(5) working(6) Процедура Процедура Создание загрузки БД сохранения БД новой БД working(7) correct(1) correct(2) accept(N) Выход Изменение Ввод новых Определение данных данных удаляемой working(_) записи Обработка correct(_) ошибки выход в главное меню (1) (2) (3) (1) (2) (3) load_bd(1) load_bd(2) load_bd(3) load_bd(4) Загрузка Загрузка Загрузка Загрузка основной БД основной БД новой БД новой БД из файла из файла из файла из файла пользователя bit.dat пользователя bstud.dat save_bd(1) save_bd(2) save_bd(3) save_bd(4) Сохранение Сохранение Сохранение Сохранение основной БД основной БД новой БД новой БД в файле в файле в файле в файле пользователя bit.dat пользователя bstud.dat view(1) view(2) view(_) Просмотр Просмотр Выход основной БД новой БД в меню @5. Разработка процедур Процедуры создавались на основе требований, изложенных в задании к курсовой работе. @ 5.1 Основная процедура Begin. С помощью процедуры Begin в разделе GOAL инициируется начало выполнения программы. Эта процедура запускает процедуру начальной загрузки базы данных Autoload, после чего передает управление процедуре вывода главного меню Main_menu. @ 5.2 Процедура вывода главного меню Main_menu. Эта процедура выводит список пунктов главного меню и ожидает от пользователя ввода числа, которое будет занесено в переменную C. После этого вызывается процедура обработки основных режимов Working, в которую переменная C передается в качестве аргумента. В процедуре использован предикат Repeat, в связи с этим после возврата из процедуры Working в случае, если C не равно 7 происходит повторный вывод пунктов меню и ожидание ввода числа. @5.3 Процедура автоматической загрузки БД Autoload. Процедура Autoload предназначена для автоматической загрузки основной базы данных при запуске программы. Это значительно облегчает работу с системой, так как не требуется при запуске программы подгружать основную БД из режима 'Загрузка'. Процедура Autoload проверяет существование на диске файла bit.dat с помощью встроенного предиката existfile и подгружает БД в память с помощью предиката consult. В случае отсутствия файла выдается сообщение об ошибке. @5.4 Процедура вывода информации о системе Working(0). Данная процедура выводит информацию о языке, на котором написана система и данные о создателе. @5.5 Процедура вывода меню коррекции данных Working(1). Процедура Working(1) служит для вывода меню режима коррекции данных, находящихся в БД, и внесения новых записей. После активизации процедура выводит меню в котором имеются режимы: 'Изменение данных', 'Добавление данных' и 'Выход в меню'. Активизация режимов происходит аналогично главному меню с помощью нажатия соответствующей цифровой клавиши.

Считанное с клавиатуры число заносится в переменную X, после чего вызывается процедура Correct, аргументом которой служит X. С помощью процедур Correct(1) и Correct(2), описанных ниже, собственно и реализуется режимы коррекции и добавления. В процедуре Working(1) также применен предикат Repeat, с помощью которого реализован повторный вывод меню в случае ошибки ввода. @5.6 Процедура удаления записей Working(2). Данная процедура предназначена для удаления записей из базы данных. В программе предусмотрена возможность задания либо номера удаляемой записи, либо фамилии абитурьента, содержащейся в данной записи. Эта возможность реализуется процедурой Accept, описанной ниже.

Процедура Accept возвращает номер выбранной записи и с помощью встроенного предиката retract запись удаляется из базы данных. В случае ошибки (отсутствия записи, выбранной пользователем для удаления) выводится соответствующее сообщение (процедура Error). @5.7 Процедура вывода меню просмотра БД Working(3). Процедура Working(3) выводит меню, содержащее пункты: 'Просмотр основной базы', 'Просмотр базы BSTUD' и 'Выход в главное меню'. Собственно просмотр содержимого БД осуществляют процедуры View(1) и View(2), рассмотренные ниже.

Процедура Working(3) реализована в стиле процедур Main_menu и Working(1) с применением процедуры Repeat. @5.8 Процедура вывода меню загрузки БД Working(4). Данная процедура выводит меню, содержащее следующие пункты: 'Загрузить основную базу из выбранного файла', ' Загрузить основную базу из файла bit.dat', ' Загрузить базу BSTUD из выбранного файла',' Загрузить базу BSTUD из файла bstud.dat' и 'Выход в главное меню'. Собственно загрузка баз данных осуществляется процедурой Load_bd, аргументом которой служит переменная C, считанная с клавиатуры при вводе пользователем номера желаемого пункта меню. В процедуре Working(4) также применена процедура Repeat. @5.9 Процедура вывода меню сохранения БД Working(5). Процедура Working(5) аналогична Working(4). Для сохранения баз данных применяется процедура Save_bd, рассмотренная ниже, аргументом которой является переменная I. @5.10 Процедура создания новой БД Working(6). Данная процедура служит для создания новой базы данных.

Процедура работает следующим образом: из базы, имеющей метку 'абитурьент' , извлекаются нужные данные, производится суммирование оценок за экзамены и новая запись с помощью предиката assertz добавляется к базе с меткой 'студент'. Для того, чтобы были обработаны все записи, используется fail. После создания новой БД выдается соответствующее сообщение и предупреждение о том, чтобы пользователь не забыл сохранить вновь созданую БД. @5.11 Процедура выхода из программы Working(7). Данная процедура состоит из отсечения, которое запрещает дальнейший перебор.

Процедура оканчивается успехом и происходит возврат в процедуру Main_menu, в которой выполняется условие C=7, благодаря чему происходит выход из программы. @5.12 Процедура обработки ошибки пользователя Working(_). Процедура Working(_) выводит сообщение об ошибке ввода цифры и подсказку о том, что следует ввести число от 0 до 7. Вывод сообщения сопровождается подачей звукового сигнала, реализованной с помощью встроенного предиката sound. После нажатия клавиши происходит возврат в главное меню. @5.13 Процедура корректировки данных Correct(1). Данная процедура производит коррекцию данных в записи.

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

Данную возможность предоставляет процедура Accept, описанная ниже, которая вызывается после создания окна 'Изменение данных'. Процедура Accept передает номер выбранной записи в переменную N, после чего содержимое записи распечатывается на экране. После этого пользователю предоставляется возможность ввести измененные данные; если нет необходимости изменять какой-либо элемент, можно нажать клавишу . Все данные, в том числе и числа, считываются в формате строк. Это необходимо для осуществления возможности отказа от изменения элемента нажатием клавиши . Все считанные данные передаются процедурам Skip (для строковых выходных данных) и Skip1 (для целочисленных выходных данных). Эти процедуры в зависимости от того, была ли нажата клавиша возвращают в процедуру Correct(1) либо старое значение, либо новое, при чем процедура Skip1 преобразует с помощь встроенного предиката str_int строковые данные в целочисленные.

Старая запись удаляется из базы данных предикатом retract, а новая добавляется предикатом assertz. По окончании выводится предупреждение о том, что следует сохранить вновь введенные данные(процедура Mesage). @5.14 Процедура добавления новых записей Correct(2). Процедура Correct(2) служит для добавления записей к БД. Пользователь поочередно вводит каждый элемент записи, отвечая на запросы системы. С помощью предиката assertz данные добавляются в БД, после чего вызывается предикат Ask, формирующий запрос на продолжение процесса ввода новых записей. Если от пользователя будет получен утвердительный ответ, то благодаря процедуре Repeat цикл ввода данных повторится, при получении отрицательного ответа система выдаст предупреждение о необходимости сохранения вновь введенных данных (процедура Mesage) и произойдет возврат из процедуры Correct(2). @5.15 Процедура просмотра баз данных View. Данная процедура служит для вывода на экран содержимого основной ( View(1) ) и вновь созданной ( View(2) ) баз данных.

Каждая из процедур выводит заголовочную таблицу, после чего распечатывает содержимое каждой записи. Для перебора всей БД применен предикат fail. После вывода всех записей выводится просьба нажать любую клавишу для продолжения. @5.16 Вспомагательная процедура Accept. Данная процедура является вспомагательной к процедурам Correct(1) и Working(2). Она в паре со вспомагательной процедурой Acp определяет номер желаемой записи после ввода пользователем либо собственно номера этой записи, либо после ввода фамилии абитурьента (данные пункты присутствуют в меню, выводимом процедурой Accept) и возвращает этот номер в вызывавшую процедуру. @5.17 Вспомагательные процедуры Skip и Skip1. Процедуры Skip и Skip1 являются вспомагательными к процедуре Correct(1). Они позволяют определить, следует ли замещать имеющийся элемент записи на новый или нет (если была нажата клавиша ). В процедурах проверяется, является ли первый аргумент пустой строкой. Если это так, то третьему аргумент присваивается второй. Если же первый аргумент не является пустой строкой, то он присваивается третьему аргументу (в Skip1 происходит предварительное преобразование строковой переменной в целочисленную). @5.18 Процедура загрузки БД с диска Bd_load. Данная процедура осуществляет загрузку баз данных из файлов на диске по признакам, зависящим от аргумента процедуры: Bd_load(1) загружает основную БД из файла, заданного пользователем, Bd_load(2) - из файла bit.dat, Bd_load(3) - базу BSTUD из файла, заданного пользователем и BD_load(4) - базу BSTUD из файла bstud.dat. В данных процедурах проверяется наличие файла на диске с помощью предиката existfile и загрузка БД в память с помощью предиката consult. В случае отсутствия файла на диске, выдается соответствующее сообщение (процедура Io_error). @5.19 @Процедура сохранения БД на диске Bd_save. Данная процедура осуществляет сохранение баз данных в файлах на диске по признакам, зависящим от аргумента процедуры: Bd_save(1) сохраняет основную БД в файле, заданном пользователем, Bd_save(2) - в файле bit.dat, Bd_save(3) - базу BSTUD в файле, заданном пользователем и BD_save(4) - базу BSTUD в файле bstud.dat. Сохранение БД осуществляется с помощью встроенного предиката save. В случае ошибки выдается соответствующее сообщение (процедура Error). @5.20 Вспомагательная процедура Ask. Процедура Ask является вспомагательной к процедуре Correct(2). Она запрашивает пользователя, желает ли он продолжить ввод данных. @5.21 Процедура Mesage. Данная процедура выводит предупреждение о необходимости сохранения вновь введенных данных. @5.22 Процедуры Error и Io_error. Эти процедуры выводят сообщения об ошибках. @5.23 Процедура Ok. Данная процедура выводит сообщение об успешном выполнении операции. @6. Листинг программы. 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 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 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 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 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(' '), 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. @7. Отладка программы При отладке программы ошибки устранялись в три этапа. На первом этапе интерпритатор языка Пролог сам указывал на синтаксические ошибки. Такие ошибки возникали при неправильном написании имен встроенных предикатов, когда я забывал описать новые предикаты в разделе predicates и т.д. Если компиляция прошла успешно, но программа работала некорректно, приходилось переходить ко второму этапу - просмотру текста программы и логическому осмыслению ошибки. На этом этапе были устранены такие ошибки, как вывод всего одной записи базы данных в режиме просмотра БД. Причиной этому было отсутствие в конце процедуры предиката fail. Ошибка была устранена. Если не помогал второй этап, приходилось переходить к третьему - трассировке. Так была установлена следующая ошибка: при выходе из процедуры Working(4) главное меню выводилось не в окне 'Список абитурьентов', а в окне 'Загрузка' (т.е. не удалялось это окно 'Загрузка'). После трассировки было выяснено, что в процедуре не в том месте стоит предикат Repeat ( он стоял в начале процедуры, а его следовало поставить после предиката makewindow), из-за чего происходило многократное создание окна 'Загрузка' и только однократное его удаление.

Ошибка была исправлена. В процессе конечной отладки и решения контрольных примеров ошибок в программе обнаружено не было. @8. Инструкция пользователя и решение контрольных примеров Программа 'Список абитурьентов' представляет собой информационно-справочную систему. В данной программе имеется возможность создания новой базы данных, являющейся списком зачисленных студентов. В основной БД присутствуют данные о фамилии, имени и отчестве абитурьента, его поле, номере экзаменационного листа и оценках за три экзамена. В дочерней БД имеются те же данные за исключением пола и того, что оценки за экзамены заменены их суммой. При запуске программы на экран выводится главное меню: 0 - О системе... 1 - Корректировка данных 2 - Уничтожение данных 3 - Просмотр базы 4 - Загрузка базы 5 - Сохранение базы 6 - Создание новой базы 7 - Выход из программы Для выбора какого-либо пункта следует нажать соответствующую цифровую клавишу. Вход в каждый пункт сопровождается коротким звуковым сигналом. При нажатии неверной клавиши на экран выводится окно с сообщением об ошибке и подсказкой, в каком интервале следует вводить число. Ниже приводится описание каждого из пунктов. @8.1 О системе... При выборе данного пункта на экран выводятся данные о системе и ее авторе. После нажатия на любую клавишу происходит выход в главное меню. @8.2 Корректировка данных. При входе в этот пункт на экран выводится подменю: 1 - Изменение данных 2 - Добавление данных 3 - Выход в главное меню Пункт 1 предназначен для изменения данных в записях. При входе в него так же появляется подменю: 1 - Известен номер абитурьента 2 - Известна фамилия Если известен номер абитурьента, то следует ввести цифру 1, если известна фамилия - цифру 2. После этого система запросит соответственно номер или фамилию.

Фамилию следует вводить в том же виде (сочетание заглавных и строчных букв) в каком она имеется в базе данных. После определения корректируемой записи система выводит на экран все данные об этом абитурьенте и позволяет их отредактировать, последовательно распечатывая поля записи. Если данные в текущем поле исправлять не требуется, следует нажать клавишу . После корректировки всех полей система предупредит о необходимости сохранить вновь введенные данные и после нажатия любой клавиши выйдет в меню 'Корректировка данных'. Пункт 2 меню 'Корректировка данных' предназначен для добавления новых записей. После входа в этот режим система последовательно запрашивает данные о новом абитурьенте. По окончании ввода выводится запрос, хочет ли пользователь продолжить процесс ввода новых записей. При утвердительном ответе (нажатии клавиши Д в верхнем регистре) программа предоставляет возможность ввести данные еще об одном абитурьенте, после чего процесс повторится. При отрицательном ответе (нажатии клавиши Н (рус.) на верхнем регистре) будет выдано предупреждение о необходимости сохранить вновь введенные данные и после нажатия любой клавиши выйдет в меню 'Корректировка данных'. Пункт 3 служит для выхода в основное меню. @8.3 Уничтожение записей.

Данный режим служит для удаления записей из базы данных. Как и в подпункте 'Изменение данных' режима 'Корректировка данных' пользователю предоставляется возможность ввести либо номер, либо фамилию удаляемого абитурьента. После ввода этих данных произойдет удаление выбранной записи и вывод сообщения, подтверждающего выполнение данной операции. В случае невозможности удаления записи (например запись с данным номером не существует), выдается соответствующее сообщение об ошибке. @8.4 Просмотр базы.

Данный режим предназначен для просмотра содержимого имеющихся баз данных. При входе в этот режим выводится следующее подменю: 1 - Просмотр основной базы 2 - Просмотр базы BSTUD 3 - Выход в главное меню Пункт 1 предназначен для просмотра основной базы данных, содержимое которой подгружается автоматически (при наличии на диске файла bit.dat) при запуске информационно-справочной системы. После выбора этого пункта, на экран выводятся записи основной БД в виде таблицы. Для возвращения в меню следует нажать любую клавишу. Пункт 2 предназначен для просмотра дочерней базы данных BSTUD. В отличии от основной БД сразу после загрузки она пуста, и чтобы ее просмотреть следует создать эту БД с помощью пункта 6 или загрузить ее с диска с помощью пункта 4 основного меню.

Данные дочерней базы представляются также в виде таблицы. Пункт 3 служит для выхода в главное меню. @8.5 Загрузка базы.

Данный режим предназначен для загрузки баз данных из файлов. При входе в этот пункт выводится меню: 1 - Загрузить основную базу из выбранного файла 2 - Загрузить основную базу из файла bit.dat 3 - Загрузить базу BSTUD из выбранного файла 4 - Загрузить базу BSTUD из файла bstud.dat 5 - Выход в основное меню При выборе пунктов 2 и 4 произойдет загрузка соответственно основной и дочерней БД из стандартных файлов bit.dat или bstud.dat, в случае удачной загрузки будет выдано соответствующее сообщение. После нажатия на любую клавишу произойдет выход в главное меню. При выборе пунктов 1 и 3 система запросит имя файла, в котором содержится соответствующая БД. При успешной загрузке появится соответствующее сообщение, при сбое появится сообщение об ошибке. Пункт 5 предназначен для выхода в главное меню. @8.6 Сохранение базы.

Данный режим предназначен для сохранения баз данных. При входе в данный режим выводится следующее меню: 1 - Сохранить основную базу в указанном файле 2 - Сохранить основную базу в файле bit.dat 3 - Сохранить базу BSTUD в указанном файле 4 - Сохранить базу BSTUD в файле bstud.dat 5 - Выход в основное меню Работа с его пунктами полностью аналогична работе с подменю режима 'Загрузка базы'. @8.7 Создание новой базы.

независимая экспертиза ущерба в Москве
оценка ценных бумаг в Калуге
оценка кадастровая стоимость в Туле