Смекни!
smekni.com

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

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(" "),

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 */