program
Liburutegia_DerrigorrezkoAginduak_MaileguakEtaErreserbak;
uses
crt, sysutils;
const
iERRESERBA_MAX =
100
;
type
tsKate10 =
string
[
10
];
tsKate15 =
string
[
15
];
tsKate55 =
string
[
55
];
tsKate199 =
string
[
199
];
trdLiburu =
record
sLiburuKodea: tsKate15;
sIzenburua: tsKate55;
sMaileguanNori: tsKate15;
iAldizMaileguan:
integer
;
sKokapena: tsKate10;
sAzkenMaileguData: tsKate10;
end
;
tfrdLiburutegiFitxategia =
file
of
trdLiburu;
trdErreserba =
record
sLiburuKodea: tsKate15;
sErabiltzaileZbk: tsKate15;
sTelefonoa: tsKate10;
sEskariData: tsKate10;
end
;
tardErreserbak =
array
[
1..
iERRESERBA_MAX]
of
trdErreserba;
tfrdErreserbenFitxategia =
file
of
trdErreserba;
procedure
FitxategitikArrayraIrauli(sFitxIzenErreserbak: tsKate199;
var
ardErreserbak: tardErreserbak;
var
iLuzera:
integer
);
var
f_E: tfrdErreserbenFitxategia;
begin
iLuzera :=
0
;
assign(f_E, sFitxIzenErreserbak);
reset(f_E);
while
not
eof(f_E)
do
begin
iLuzera := iLuzera +
1
;
READ(f_E, ardErreserbak[iLuzera]);
end
;
close(f_E);
end
;
procedure
ArraytikFitxategiraIrauli(
const
ardErreserbak: tardErreserbak;
iLuzera:
integer
;
sFitxIzenErreserbak: tsKate199);
var
i:
integer
;
f_E: tfrdErreserbenFitxategia;
begin
assign(f_E, sFitxIzenErreserbak);
rewrite(f_E);
for
i:=
1
to
iLuzera
do
WRITE
(f_E, ardErreserbak[i]);
close(f_E);
end
;
function
fncAukeraHautatu:
char
;
var
cAukera:
char
;
begin
writeln
(
'1. Mailegu-eskaera berri bat gehitzea'
);
writeln
(
'2. Mailegatutako liburu bat itzultzea'
);
writeln
(
'3. Letra batetik hasten diren liburuei buruzko informazioa bistaratzea'
);
writeln
(
'0. Amaitu'
);
write
(
'Zure aukera: '
);
READLN(cAukera);
fncAukeraHautatu := cAukera;
end
;
procedure
LiburuaErakutsi(
const
rdLiburuBat: trdLiburu);
begin
WRITELN
(
'Liburuaren kodea: '
:
32
, rdLiburuBat
.
sLiburuKodea);
WRITELN
(
'Liburuaren izenburua: '
:
32
, rdLiburuBat
.
sIzenburua);
WRITELN
(
'Maileguan duen erabiltzailea: '
:
32
, rdLiburuBat
.
sMaileguanNori);
WRITELN
(
'Zenbatetan maileguan: '
:
32
, rdLiburuBat
.
iAldizMaileguan);
WRITELN
(
'Kokapena: '
:
32
, rdLiburuBat
.
sKokapena);
WRITELN
(
'Azken maileguaren data: '
:
32
, rdLiburuBat
.
sAzkenMaileguData);
writeln
;
end
;
procedure
LetraBatezHastenDirenLiburuak( cHasierakoLetra:
char
;
sFitxIzenLiburutegia: tsKate199);
var
f_L: tfrdLiburutegiFitxategia;
rdLiburuBat: trdLiburu;
begin
assign(f_L, sFitxIzenLiburutegia);
reset(f_L);
while
not
eof(f_L)
do
begin
READ(f_L, rdLiburuBat);
IF
cHasierakoLetra = rdLiburuBat
.
sIzenburua[
1
]
THEN
LiburuaErakutsi(rdLiburuBat);
end
;
close(f_L);
end
;
procedure
LiburutegianBilatu( sLiburuGako: tsKate15;
sFitxIzenLiburutegia: tsKate199;
var
iPosizioa:
integer
;
var
rdLiburuBat: trdLiburu);
var
f_L: tfrdLiburutegiFitxategia;
boAurkitua:
Boolean
;
begin
assign(f_L, sFitxIzenLiburutegia);
reset(f_L);
boAurkitua :=
FALSE
;
while
not
boAurkitua
and
not
eof(f_L)
do
begin
READ(f_L, rdLiburuBat);
IF
rdLiburuBat
.
sLiburuKodea = sLiburuGako
THEN
boAurkitua :=
TRUE
;
end
;
IF
boAurkitua
THEN
iPosizioa := filepos(f_L) -
1
ELSE
iPosizioa := -
1
;
close(f_L);
end
;
procedure
LiburuaEguneratuLiburutegian(
const
rdLiburuBat: trdLiburu;
sFitxIzenLiburutegia: tsKate199;
iPosizioa:
integer
);
var
f_L: tfrdLiburutegiFitxategia;
begin
assign(f_L, sFitxIzenLiburutegia);
reset(f_L);
SEEK(f_L, iPosizioa);
WRITE
(f_L, rdLiburuBat);
close(f_L);
end
;
procedure
MaileguEskariBerria( sGaurkoData: tsKate10;
sFitxIzenLiburutegia: tsKate199;
var
ardErreserbak: tardErreserbak;
var
iLuzera:
integer
);
var
sLiburuarenKodea: tsKate15;
sErabiltzailearenKodea: tsKate15;
iPosLiburutegian:
integer
;
rdLiburuBat : trdLiburu;
begin
write
(
'Liburu-kodea: '
);
readln(sLiburuarenKodea);
write
(
'Erabiltzaile-kodea: '
);
readln(sErabiltzailearenKodea);
LiburutegianBilatu(sLiburuarenKodea, sFitxIzenLiburutegia, iPosLiburutegian, rdLiburuBat);
if
rdLiburuBat
.
sMaileguanNori =
'INORI'
then
begin
rdLiburuBat
.
sMaileguanNori := sErabiltzailearenKodea;
rdLiburuBat
.
iAldizMaileguan := rdLiburuBat
.
iAldizMaileguan +
1
;
rdLiburuBat
.
sAzkenMaileguData := sGaurkoData;
LiburuaEguneratuLiburutegian(rdLiburuBat, sFitxIzenLiburutegia, iPosLiburutegian);
end
else
begin
if
iLuzera < iERRESERBA_MAX
then
begin
iLuzera := iLuzera +
1
;
ardErreserbak[iLuzera].sLiburuKodea := sLiburuarenKodea;
ardErreserbak[iLuzera].sErabiltzaileZbk := sErabiltzailearenKodea;
ardErreserbak[iLuzera].sEskariData := sGaurkoData;
write
(
'Telefonoa: '
);
readln(ardErreserbak[iLuzera].sTelefonoa);
end
;
end
;
end
;
function
fniErreserbaBilatuArrayean( sLiburuKodeGako: tsKate15;
const
ardErreserbak: tardErreserbak;
iLuzera:
integer
):
integer
;
var
i:
integer
;
boAurkitua:
Boolean
;
begin
i :=
1
;
boAurkitua :=
FALSE
;
while
not
boAurkitua
and
(i <= iLuzera)
do
begin
IF
sLiburuKodeGako = ardErreserbak[i].sLiburuKodea
THEN
boAurkitua :=
TRUE
else
i := i +
1
;
end
;
if
boAurkitua
then
fniErreserbaBilatuArrayean := i
else
fniErreserbaBilatuArrayean := -
1
;
end
;
procedure
ErreserbaZerrendatikEzabatu(
var
ardErreserbak: tardErreserbak;
var
iLuzera:
integer
;
iPosizioa:
integer
);
var
i:
integer
;
begin
for
i := iPosizioa +
1
to
iLuzera
do
ardErreserbak[i -
1
] := ardErreserbak[i];
iLuzera := iLuzera -
1
;
end
;
procedure
MailegatutakoLiburuaItzuli( sGaurkoData: tsKate10;
sFitxIzenLiburutegia: tsKate199;
var
ardErreserbak: tardErreserbak;
var
iLuzera:
integer
);
var
sLiburuGako: tsKate15;
iPosLiburutegian:
integer
;
iPosErreserban:
integer
;
rdLiburuBat: trdLiburu;
begin
write
(
'Liburu-kodea: '
);
readln(sLiburuGako);
LiburutegianBilatu(sLiburuGako, sFitxIzenLiburutegia, iPosLiburutegian, rdLiburuBat);
iPosErreserban := fniErreserbaBilatuArrayean(rdLiburuBat
.
sLiburuKodea, ardErreserbak, iLuzera);
if
iPosErreserban = -
1
then
rdLiburuBat
.
sMaileguanNori :=
'INORI'
else
begin
rdLiburuBat
.
sMaileguanNori := ardErreserbak[iPosErreserban].sErabiltzaileZbk;
rdLiburuBat
.
iAldizMaileguan := rdLiburuBat
.
iAldizMaileguan +
1
;
rdLiburuBat
.
sAzkenMaileguData := sGaurkoData;
ErreserbaZerrendatikEzabatu(ardErreserbak, iLuzera, iPosErreserban);
end
;
LiburuaEguneratuLiburutegian(rdLiburuBat, sFitxIzenLiburutegia, iPosLiburutegian);
end
;
var
sFitxIzenLiburutegia: tsKate199;
sFitxIzenErreserbak: tsKate199;
ardErreserbak: tardErreserbak;
iLuzera:
integer
;
sGaurkoData: tsKate10;
cAukera:
char
;
cHasierakoLetra:
char
;
begin
write
(
'Liburutegiaren fitxategi-izena eman (LIBURUAK.DAT adibidez): '
);
readln(sFitxIzenLiburutegia);
write
(
'Erreserben fitxategi-izena eman (ERRESERBAK.DAT adibidez): '
);
readln(sFitxIzenErreserbak);
if
not
fileExists(sFitxIzenLiburutegia)
or
not
fileExists(sFitxIzenErreserbak)
then
writeln
(
'ERROREA: behar diren bi fitxategietatik bat falta da (ala biak falta dira)'
)
else
begin
FitxategitikArrayraIrauli(sFitxIzenErreserbak, ardErreserbak, iLuzera);
write
(
'Gaurko data: '
);
readln(sGaurkoData);
repeat
cAukera := fncAukeraHautatu;
writeln
;
case
cAukera
of
'1'
: MaileguEskariBerria(sGaurkoData, sFitxIzenLiburutegia, ardErreserbak, iLuzera);
'2'
: MailegatutakoLiburuaItzuli(sGaurkoData, sFitxIzenLiburutegia, ardErreserbak, iLuzera);
'3'
:
begin
write
(
'Letra: '
);
readln(cHasierakoLetra);
cHasierakoLetra := upcase(cHasierakoLetra);
LetraBatezHastenDirenLiburuak(cHasierakoLetra, sFitxIzenLiburutegia);
end
;
end
;
readln;
until
cAukera =
'0'
;
ArraytikFitxategiraIrauli(ardErreserbak, iLuzera, sFitxIzenErreserbak);
end
;
readln;
end
.