Разработка информационно справочной системы
domains
Str=string
Int=integer
ФИО=фиЃEStr,Str,Str)
ОЦЕН=ъGен(Int,Int,Int)
database - студенЃE студенЃEInt,ФИО,Int,Int),
database - абитурЃEыQ абитурЃEыQ(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
/* ОсньAъья ЃEъGедурЃE*/
begin:-
makewindow(1,26,94,"СПИСОК АБИТУРЬЕНТОВ",0,0,25,80),
clearwindow,
autoload,
main_menu.
/* ГЃEвньD ЃEЃE */
main_menu:-
repeat,
cursor(7,0),
write("
0 - О системЃE..
"),nl,
write("
1 - КъAреЃEирьAЃE даыLых"),nl, write("
2 - УыGчтьEение заЃEсеЃE),nl,
write("
3 - ПросмъCЃEбазы"),nl,
write("
4 - ЗагрузкЃEбазы"),nl,
write("
5 - СъFраыDыGЃEбазы"),nl,
write("
6 - СьFдаыGЃEыMвоЃEбазы"),nl,
write("
7 - ВыхьC из ЃEьBраЃEЃE),nl,
write("
=>"),
readint(C),
clearwindow,
working(C),
clearwindow,
C = 7,
retractall(_),
removewindow.
/* Процедура автоЃEтическьH загрузЃE базы даыLых */
autoload:-
retractall(_,абитурЃEыQ),
existfile("bit.dat"),
consult("bit.dat",абитурЃEыQ), cursor(21,30),
write("*БазЃEзагруженЃE").
autoload:-
makewindow(2,74,79,"ОШИБКА",6,18,8,40),
cursor(2,10),
write("Нет базы ъь дискЃE),
sound(70,294),
removewindow,
!.
/* ВывьC даыLых ЃEсоздателЃEЃEьBраЃEЃE*/
working(0):-
makewindow(3,27,30,"О системЃE..",0,0,25,80),
nl,nl,
write("
ИыSыЌЃEциЃEыM-спpавъHъья системЃE),
nl,nl,
write("
СЃEсоЃEабитурЃEыQьA "), nl,nl,nl,nl,
write("
ПрограмЃE составЃEъь ЃEсредЃE "),
nl,
write("
TURBO-PROLOG v.2.0."),
nl,nl,nl,
write("
автоp: ДанчеыIьA А.В."),
nl,nl,
write("
МГИРЭА, гp.ИИ-1-95 (ЃE 1996 ЃE "),
nl,
sound(5,220),
cursor(22,26),
write("НажЃEте ъь ЃEбую ЃEавишЃE),
readchar(_),
removewindow,!.
/* Процедура вывода ЃEЃE ЃEрректировкЃEдаыLых */
working(1):-
makewindow(4,26,48,"КыЌpектировкЃEдаыLых",0,0,25,80),
sound(5,220),
repeat,
nl,
nl,
cursor(9,0),
write("
1 - Изменение даыLых"),nl,
write("
2 - Дь@авЃEыGЃEдаыLых"),nl,
write("
3 - ВыхьC ЃEглавыMЃEЃEЃE" ),nl,
write("
=>"),
readint(X),
clearwindow,
X>0,X<=3,
correct(X),
clearwindow,
X=3,!,
removewindow.
/* Процедура уничтожеыGя даыLых */
working(2):-
makewindow(5,48,107,"УыGчтьEение заЃEсеЃE,0,0,25,80),
sound(5,220),
nl,
accept(N),
X=N, абитурЃEыQ(X,фиЃEFm,Nm,Ot),Pl,Ls,ъGен(E1,E2,E3)),
retract(абитурЃEыQ(X,фиЃEFm,Nm,Ot),Pl,Ls,ъGен(E1,E2,E3))),
ok,
!,
removewindow.
working(2):- error,
removewindow,!.
/* Процедура вывода ЃEЃE ЃEъBЃEтрЃE базы даыLых */
working(3):-
makewindow(6,30,26,"ПросмъCp базы",0,0,25,80),
sound(5,220),
repeat,
nl,
nl,
cursor(10,0),
write("
1 - ПросмъCЃEъBыMвньH базы"),nl,
write("
2 - ПросмъCЃEбазы BSTUD"),nl,
write("
3 - ВыхьC ЃEглавыMЃEЃEЃE" ),nl,
write("
=>"),
readint(X),
clearwindow,
X>0,X<=3,
view(X),
clearwindow,
X=3,!,
removewindow.
/* Процедура загрузЃE
базы даыLых */
working(4):-
makewindow(7,62,120,"ЗагрузкЃE,5,10,15,60),
sound(5,220),
repeat,
nl,nl,
write(" 1 - Загрузить ъBыMвнЃE базу из выбраныMго файлЃE),nl,
write(" 2 - Загрузить ъBыMвнЃE базу из файлЃEbit.dat"),nl,
write(" 3 - Загрузить базу BSTUD из выбраныMго файлЃE),nl,
write(" 4 - Загрузить базу BSTUD из файлЃEbstud.dat"),nl,
write(" 5 - ВыхьC ЃEъBыMвньD ЃEЃE"),nl,
write(" =>"),
readint(C),
clearwindow,
C>0,C<=5,
load_bd(C), clearwindow,
C = 5,!,
removewindow.
/* Процедура сохраненЃE базы даыLых */
working(5):-
makewindow(8,62,120,"СъFраыDыGЃE,5,10,15,60),
sound(5,220),
repeat,
nl,nl, write(" 1 - СъFраыGть ъBыMвнЃE базу ЃEуказаныMЃEфайлЃE),nl,
write(" 2 - СъFраыGть ъBыMвнЃE базу ЃEфайлЃEbit.dat"),nl,
write(" 3 - СъFраыGть базу BSTUD ЃEуказаныMЃEфайлЃE),nl,
write(" 4 - СъFраыGть базу BSTUD ЃEфайлЃEbstud.dat"),nl,
write(" 5 - ВыхьC ЃEъBыMвньD ЃEЃE"),nl,
write(" =>"),
readint(I),
clearwindow,
I>0,I<=5,
save_bd(I),
clearwindow,!,
removewindow.
/* Процедура созданЃE ыMвоЃEбазы даыLых */
working(6):- makewindow(10,43,120,"СьFдаыGЃEбазы даыLых BSTUD",6,18,8,40),
sound(5,220),
nl,
retractall(_,студенЃE, абитурЃEыQ(N,фиЃEFam,Nam,Otch),Pol,List,ъGен(E1,E2,E3)),
N=N1, Fam1=Fam, Nam1=Nam,
Otch1=Otch, List1=List, Sum=E1+E2+E3,
assertz(студенЃEN1,фиЃEFam1,Nam1,Otch1),List,Sum)),
fail.
working(6):-
write(" БазЃEBSTUD созданЃE"),
nl,
write(" НЃEзабудьте сохранитЃEее!"),
nl,nl,
write(" НажЃEте ъь ЃEбую
ЃEавишЃE),
readchar(_),
removewindow,!.
working(7):-!.
working(_):-
makewindow(16,74,79,"ОШИБКА ВВОДА",6,18,8,40),
nl,
write(" Введите числЃEъC
0 до 7,"),nl,
write(" соъCветствЃEщеЃEвыбраныMЃE
ЃEыIту"),nl,nl,nl,
write(" НажЃEте ъь ЃEбую
ЃEавишЃE),
sound(20,494),
sound(30,392),
readchar(_),
removewindow.
/* Процедура ЃEррекциЃEдаыLых ЃEбазе */
correct(1):-
makewindow(4,26,48,"Изменение даыLых",0,0,25,80),
nl,
accept(N),
X=N, абитурЃEыQ(X,фиЃEFam,Nam,Otch),Pol,List,ъGен(E1,E2,E3)),
clearwindow,nl,
write(" ПъAядкьAый
ыMЃEЃEабитурЃEыQЃE: "),write(N),nl,
write(" ФамилЃE
: "),write(Fam),nl,
write(" ИЃE
: "),write(Nam),nl,
write(" ОтчествЃE
: "),write(Otch),nl,
write(" ПьJ
: "),write(Pol),nl,
write(" НьKер
эЃEаменациоыLьBЃEЃEстЃE: "),write(List),nl,nl,
write(" ОцеыIЃEза
эЃEаменЃE -
"),nl,nl,
write(" ЗЃEЃEрвый: "),write(E1),write(" "),
write(" ЗЃEвтъAьH:
"),write(E2),write(" "),
write(" ЗЃEтретий: "),write(E3),
nl,nl,nl,
write(" Введите
фаЃEЃEю
: "),readln(Fam1),
write(" Введите
имя
: "),readln(Nam1),
write(" Введите
ъCчество
: "),readln(Otch1),
write(" Введите
ЃEЃE
: "),readln(Pol1),
write(" Введите
ыMЃEЃEэЃEаменациоыLьBЃEЃEстЃE "),readln(List1),
write(" Введите
ъGенЃE за эЃEаменЃE - "),nl, write(" ЗЃEЃEрвый
: "),readln(Ekz1),
write(" ЗЃEвтъAьH
: "),readln(Ekz2),
write(" ЗЃEтретий
: "),readln(Ekz3),nl,
X1=X,
retract(абитурЃEыQ(X,фиЃEFam,Nam,Otch),Pol,List,ъGен(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(абитурЃEыQ(X1,фиЃEFam2,Nam2,Otch2),Pol2,List2,ъGен(E11,E22,E33))),
!,
mesage,
removewindow.
correct(2):-
makewindow(9,26,48,"ВвоЃEыMвыЃEдаыLых",0,0,25,80),
repeat,
nl,
write(" Введите
ЃEЃEдкьAый ыMЃEЃEабитурЃEыQЃE :
"),readint(K),nl,
write(" Введите
фаЃEЃEю
: "),readln(F),nl,
write(" Введите
имя
: "),readln(N),nl,
write(" Введите
ъCчество
: "),readln(O),nl,
write(" Введите
ЃEЃE
: "),readln(P),nl,
write(" Введите
ыMЃEЃEэЃEаменациоыLьBЃEЃEстЃE : "),
readint(L),nl,
write(" Введите
ъGенЃE за эЃEаменЃE -"),nl,nl,
write(" ЗЃEЃEрвый
: "),readint(E1),nl,
write(" ЗЃEвтъAьH
: "),readint(E2),nl,
write(" ЗЃEтретий
: "),readint(E3),nl, N1=K,
Fam=F,Nam=N,Otch=O,
Pol=P,List=L,
Ekz1=E1,Ekz2=E2,Ekz3=E3,
assertz(абитурЃEыQ(N1,фиЃEFam,Nam,Otch),Pol,List,ъGен(Ekz1,Ekz2,Ekz3))),
ask,!,
mesage,
removewindow. correct(_).
/* Процедура ЃEъBЃEтрЃEбазы */
view(1):-
makewindow(16,31,26,"ПросмъCp ъBыMвньH базы",0,0,25,80),
nl,nl,
write("ЙННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»"),nl,
write("є
СПИСОК
АБИТУРЬЕНТОВ
"),nl,
write("МННННЛНННННННННННННННННННННННННННННННННННННЛНННННЛНННННЛНННННННННННННННННННН№"),nl,
write("є є
ФИО
No є ъGенЃE за эЃEаменЃEє"),nl,
write("є No МННННННННННННЛНННННННННННЛНННННННННННН№
ПьJ є эЃE.МННННННЛННННННЛНННННН№"),nl,
write("є є ФамилЃE є ИЃE є ОтчествЃE є єЃEстає
1 эЃEє 2 эЃEє 3 эЃEє"),nl,
write("МННННОННННННННННННОНННННННННННОННННННННННННОНННННОНННННОННННННОННННННОНННННН№"),nl, абитурЃEыQ(N,фиЃEFam,Nam,Otch),Pol,List,ъGен(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("НажЃEте ъь ЃEбую ЃEавишЃE),
readchar(_),
removewindow.
view(2):-
nl,
makewindow(13,31,26,"ПросмъCЃEыMвоЃEбазы даыLых",0,0,25,80),
write(" ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННН»"),nl,
write(" є
СПИСОК СТУДЕНТОВ
"),nl,
write(" МННННЛНННННННННННННННННННННННННННННННННННННЛНННННЛННННННН№"),nl,
write(" є є
ФИО
No є суЃEЃEє"),nl,
write(" є
No МННННННННННННЛНННННННННННЛНННННННННННН№ эЃE.є баЃEЃEє"),nl,
write(" є є ФамилЃE є ИЃE є ОтчествЃE єЃEстає є"),nl,
write(" МННННОННННННННННННОНННННННННННОННННННННННННОНННННОННННННН№"),nl, студенЃEN,фиЃEFam,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("НажЃEте ъь ЃEбую ЃEавишЃE),
readchar(_),
removewindow.
view(_).
/* ВспьKагателЃEЃE ЃEъGедурЃEЃEЃEъGедурЃEcorrect(1) ЃEworking(2)
*/
accept(N):-
nl,
cursor(10,0),
write(" 1
- известен ыMЃEЃEабитурЃEыQЃE),nl,
write("
2 - известъь
фаЃEЃEя"),nl,
write("
=>"),
readint(X),
acp(X,N).
acp(1,N):-
nl,
write("
Введите ыMЃEЃEабитурЃEыQЃE "),nl,
write("
>"),
readint(N), абитурЃEыQ(P,_,_,_,_),
P=N.
acp(1,N):-
N=0.
acp(2,N):-
nl,
write(" Введите фаЃEЃEю абитурЃEыQЃE "),nl,
write("
>"),
readln(L), абитурЃEыQ(Y,фиЃEL,_,_),_,_,_),
N=Y.
acp(2,N):-
N=0.
/* ВспьKагателЃEЃE ЃEъGедурЃEЃEcorrect(1) */ skip("",Fam,Fam2):-
Fam2=Fam,
!.
skip(Fam1,_,Fam2):-
Fam2=Fam1,
!.
skip1("",Fam,Fam2):-
Fam2=Fam,
!.
skip1(Fam1,_,Fam2):-
str_int(Fam1,Fam3),
Fam2=Fam3,
!.
/* Процедура чтенЃE ЃEдискЃE*/
load_bd(1):-
retractall(_,абитурЃEыQ),nl,nl,
write(" Введите
имя файлЃE:"),
readln(N),
existfile(N),
consult(N,абитурЃEыQ), ok,
!.
load_bd(1):-
io_error,
!.
load_bd(2):-
retractall(_,абитурЃEыQ),
existfile("bit.dat"),
consult("bit.dat",абитурЃEыQ),
ok,
!.
load_bd(2):-
io_error,
!.
load_bd(3):-
retractall(_,студенЃE,nl,nl,
write(" Введите
имя файлЃE:"),
readln(N),
existfile(N),
consult(N,студенЃE,
ok, !.
load_bd(3):-
io_error,
!.
load_bd(4):-
retractall(_,студенЃE,
existfile("bstud.dat"),
consult("bstud.dat",студенЃE,
ok,
!.
load_bd(4):-
io_error,
!.
load_bd(_).
/* Процедура заЃEси ъь диск */
save_bd(1):-
nl,nl,
write(" Введите
имя файлЃE: "),
readln(N),
save(N,абитурЃEыQ),nl,
ok, !.
save_bd(1):-
error.
save_bd(2):-
save("bit.dat",абитурЃEыQ),
ok,
!.
save_bd(2):-
error.
save_bd(3):-
nl,nl,
write(" Введите
имя файлЃE: "),
readln(N),
save(N,студенЃE,nl,
ok,
!.
save_bd(3):-
error.
save_bd(4):-
save("bstud.dat",студенЃE,
ok,
!.
save_bd(4):- error.
save_bd(_).
/* Процедура заЃEъBЃEъь ьIЃEчаыGЃEввьCЃEЃEcorrect(2) */ ask:-
makewindow(10,43,120,"Въ@роЃE,6,18,8,40),nl,nl,
write(" ПродоЃEитЃEЃEъGесЃEввьCЃEдаыLых?
"),nl,nl,
write("
[Д]ЃE[Н]ет"),
readchar(Ch),
removewindow,
clearwindow,
Ch='Н',!.
/* ВывьC ЃEедупрежденЃE ЃEыDь@ходиЃEстЃEсохраненЃE даыLых */ mesage:-
makewindow(17,74,79,"ПредуЃEеждеыGЃE,6,18,8,40),nl,
write(" НЃEзабудьте сохранитЃE"),nl, write(" вньAЃEвведеные даыLые!"),nl,nl,
write(" НажЃEте ъь ЃEбую ЃEавишЃE),
readchar(Ch),
removewindow.
/* Процедуры вывода соь@щеыGя ь@ ъIибЃE */
error:-
makewindow(15,74,79,"ОШИБКА",6,18,8,40),
cursor(2,16),
write("ОШИБКА"),nl,nl,
write(" НажЃEте ъь ЃEбую
ЃEавишЃE),
sound(70,294),
readchar(_),
removewindow,
!.
io_error:-
makewindow(16,74,79,"ОШИБКА",6,18,8,40),
cursor(2,7),
write("ДаныMго файлЃEыDЃEъь дискЃE),nl,nl,
write(" НажЃEте ъь ЃEбую
ЃEавишЃE),
sound(70,294),
readchar(_),
removewindow.
/* Процедура вывода соь@щеыGя ь@ усЃEшньK завершении даыLьH ъ@ерации */ ok:-
makewindow(17,27,90,"ОК",6,18,8,40),
cursor(2,7),
write(" ОПЕРАЦИЯ ВЫПОЛНЕНА"),nl,nl,
write(" НажЃEте ъь ЃEбую
ЃEавишЃE),
readchar(_),
removewindow.
/* Процедура repeat */
repeat.
repeat:- repeat.
абитурьент(1,фио("ИВАНОВ","СИДОР","ГРИГОРЬЕВИЧ"),"М",7,оцен(5,5,3))
абитурьент(2,фио("ПЕТРОВ","ПЕТР","ВЛАДИМИРОВИЧ"),"М",8,оцен(4,5,4))
абитурьент(3,фио("ЛИСЕНКОВА","ВАРВАРА","ПЕТРОВНА"),"Ж",45,оцен(4,3,3))
абитурьент(4,фио("СИДОРОВ","ПЕТР","ПЕТРОВИЧ"),"М",11,оцен(5,4,5))
абитурьент(5,фио("КУЗНЕЦОВ","ПАВЕЛ","СЕРГЕЕВИЧ"),"М",17,оцен(3,4,5))
абитурьент(6,фио("ГРИШКИНА","ЮЛИЯ","ПЕТРОВНА"),"Ж",5,оцен(4,3,5))
абитурьент(7,фио("МАЗИКИНА","МАРИНА","ЮРЬЕВНА"),"Ж",27,оцен(4,5,5))
студент(1,фио("ИВАНОВ","СИДОР","ГРИГОРЬЕВИЧ"),7,13)
студент(2,фио("ПЕТРОВ","ПЕТР","ВЛАДИМИРОВИЧ"),8,13)
студент(3,фио("ЛИСЕНКОВА","ВАРВАРА","ПЕТРОВНА"),45,10)
студент(4,фио("СИДОРОВ","ПЕТР","ПЕТРОВИЧ"),11,14)
студент(5,фио("КУЗНЕЦОВ","ПАВЕЛ","СЕРГЕЕВИЧ"),17,12)
студент(6,фио("ГРИШКИНА","ЮЛИЯ","ПЕТРОВНА"),5,12)
студент(7,фио("МАЗИКИНА","МАРИНА","ЮРЬЕВНА"),27,14)
|