Смекни!
smekni.com

Информационно-справочная система, обеспечивающая работу с базой данных Bit (стр. 3 из 5)

ню". Собственно просмотр содержимого БД осуществляют процедуры

View(1) и View(2), рассмотренные ниже. Процедура Working(3) реа-

лизована в стиле процедур Main_menu и Working(1) с применением

процедуры Repeat.

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

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

ную базу из файла bit.dat", " Загрузить базу BSTUD из выбранного

файла"," Загрузить базу BSTUD из файла bstud.dat" и "Выход в

главное меню". Собственно загрузка баз данных осуществляется про-

цедурой Load_bd, аргументом которой служит переменная C, считан-

ная с клавиатуры при вводе пользователем номера желаемого пункта

меню. В процедуре Working(4) также применена процедура Repeat.

Процедура Working(5) аналогична Working(4). Для сохранения

баз данных применяется процедура Save_bd, рассмотренная ниже, ар-

гументом которой является переменная I.

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

цедура работает следующим образом: из базы, имеющей метку "аби-

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

оценок за экзамены и новая запись с помощью предиката assertz до-

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

таны все записи, используется 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),