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