program
JatetxeaDerrigorrezkoAginduak_2024;
uses
crt, sysutils;
const
iMAHAIEN_MAX =
10
;
iMENUEN_MAX =
7
;
iAULKI_KOP_MAX =
4
;
type
integer
=
smallint
;
real
=
double
;
tsKate99 =
string
[
99
];
tsKate20 =
string
[
20
];
trdMahaia =
record
iMahaiZbk :
integer
;
iAulkiKop :
integer
;
boLibre :
boolean
;
sErreserbaIzena: tsKate20;
iMahaikideKop :
integer
;
end
;
tfrdMahaiak =
file
of
trdMahaia;
trdMenua =
record
sIzena : tsKate20;
rPrezioa :
real
;
sAsteEguna: tsKate20;
end
;
tfrdKarta =
file
of
trdMenua;
tardKarta =
array
[
1..
iMENUEN_MAX]
of
trdMenua;
tarKontua =
array
[
1..
iMAHAIEN_MAX]
of
real
;
tfrIrabaziak =
file
of
real
;
function
fncAukerenMenua:
char
;
var
cAukera:
char
;
begin
clrscr;
writeln
(
'AUKEREN MENUA'
:
33
);
writeln
(
'============='
:
33
);
writeln
(
'1. '
:
20
,
'Erakutsi jatetxeko mahaien egoera'
);
writeln
(
'2. '
:
20
,
'Erreserbatu mahaia'
);
writeln
(
'3. '
:
20
,
'Menuak erakutsi'
);
writeln
(
'4. '
:
20
,
'Jatekoa eskatu'
);
writeln
(
'5. '
:
20
,
'Kontua eskatu eta ordaindu'
);
writeln
(
'0. '
:
20
,
'Programatik irten'
);
writeln
(
'-----------------'
:
37
);
repeat
write
(
'Zure aukera: '
:
33
);
READLN(cAukera);
until
(cAukera >=
'0'
)
and
(cAukera <=
'5'
);
FNCAUKERENMENUA := cAukera;
end
;
function
fnsAstegunaZehaztu: tsKate20;
var
cAukera:
char
;
begin
clrscr;
writeln
(
'ASTEGUNAK'
:
29
);
writeln
(
'========='
:
29
);
writeln
(
'1. '
:
20
,
'Astelehena'
);
writeln
(
'2. '
:
20
,
'Asteartea'
);
writeln
(
'3. '
:
20
,
'Asteazkena'
);
writeln
(
'4. '
:
20
,
'Osteguna'
);
writeln
(
'5. '
:
20
,
'Ostirala'
);
writeln
(
'--------------'
:
34
);
repeat
write
(
'Zure aukera: '
:
33
);
READLN(cAukera);
until
(cAukera >=
'1'
)
and
(cAukera <=
'5'
);
case
cAukera
of
'1'
: FNSASTEGUNAZEHAZTU :=
'Astelehena'
;
'2'
: FNSASTEGUNAZEHAZTU :=
'Asteartea'
;
'3'
: FNSASTEGUNAZEHAZTU :=
'Asteazkena'
;
'4'
: FNSASTEGUNAZEHAZTU :=
'Osteguna'
;
'5'
: FNSASTEGUNAZEHAZTU :=
'Ostirala'
;
end
;
end
;
procedure
MenuenArrayaKargatuFitxategitik(sFitxIzenMenuak: tsKate99;
sAsteEgunBat: tsKate20;
var
ardKarta: tardKarta;
var
iLuzera:
integer
);
var
rdMenuBat: trdMenua;
frdKarta : tfrdKarta;
begin
assign(frdKarta, sFitxIzenMenuak);
reset(frdKarta);
iLuzera :=
0
;
while
not
eof(frdKarta)
do
begin
READ(frdKarta, rdMenuBat);
if
upcase(rdMenuBat
.
sAsteEguna) = upcase(sAsteEgunBat)
then
begin
iLuzera := iLuzera +
1
;
ARDKARTA[iLuzera] := rdMenuBat;
end
;
end
;
close(frdKarta);
end
;
procedure
KontuenArrayaHasieratu(
var
arKontua: tarKontua);
var
k:
integer
;
begin
for
k:=
1
to
iMAHAIEN_MAX
do
ARKONTUA[k] :=
0.0
;
end
;
procedure
MahaiakErakutsi(sFitxIzenMahaiak: tsKate99);
var
frdMahaiak: tfrdMahaiak;
rdMahaiBat: trdMahaia;
begin
assign(frdMahaiak, sFitxIzenMahaiak);
reset(frdMahaiak);
writeln
(
'------------------------------------------------------------------------'
);
writeln
(
'MAHAIA'
:
10
,
'AULKIAK'
:
10
,
'MAHAIKIDEAK'
:
15
,
'ERABILGARRITASUNA'
:
28
);
writeln
(
'------------------------------------------------------------------------'
);
while
not
eof(frdMahaiak)
do
begin
read(frdMahaiak, rdMahaiBat);
WRITE
(rdMahaiBat
.
iMahaiZbk:
10
);
WRITE
(rdMahaiBat
.
iAulkiKop:
10
);
WRITE
(rdMahaiBat
.
iMahaikideKop:
15
);
if
rdMahaiBat
.
boLibre
then
WRITE
(
'Libre'
:
16
)
else
WRITE
(
'Erreserbatua: '
:
25
, rdMahaiBat
.
sErreserbaIzena);
writeln
;
end
;
writeln
(
'------------------------------------------------------------------------'
);
close(frdMahaiak);
end
;
procedure
MahaiaErreserbatu(sFitxIzenMahaiak: tsKate99;
sBezeroIzena: tsKate20;
iMahaikideak:
integer
);
var
frdMahaiak : tfrdMahaiak;
rdMahaiBat : trdMahaia;
iAulkiKopurua :
integer
;
boMahaiaErreserbatua:
boolean
;
begin
assign(frdMahaiak, sFitxIzenMahaiak);
reset(frdMahaiak);
boMahaiaErreserbatua :=
FALSE
;
iAulkiKopurua := iMahaikideak;
repeat
writeln
(
'sBezeroIzena = '
, sBezeroIzena,
'iMahaikideak = '
:
20
, iMahaikideak,
'iAulkiKopurua = '
:
20
, iAulkiKopurua);
while
not
eof(frdMahaiak)
and
not
boMahaiaErreserbatua
do
begin
READ(frdMahaiak, rdMahaiBat);
if
(rdMahaiBat
.
iAulkiKop = iAulkiKopurua)
and
rdMahaiBat
.
boLibre
then
begin
rdMahaiBat
.
boLibre :=
FALSE
;
rdMahaiBat
.
sErreserbaIzena := sBezeroIzena;
rdMahaiBat
.
iMahaikideKop := iMahaikideak;
SEEK(frdMahaiak, filepos(frdMahaiak) -
1
);
WRITE
(frdMahaiak, rdMahaiBat);
writeln
(
'Erreserba gauzatu da, mahai zenbakia: '
:
40
, rdMahaiBat
.
iMahaiZbk);
boMahaiaErreserbatua :=
TRUE
;
end
end
;
iAulkiKopurua := iAulkiKopurua +
1
;
seek(frdMahaiak,
0
);
until
(iAulkiKopurua > iAULKI_KOP_MAX)
or
boMahaiaErreserbatua;
if
not
boMahaiaErreserbatua
then
WRITELN
(
'Eskatutako mahaikide kopururako tokirik ez dago.'
);
close(frdMahaiak);
end
;
procedure
EgunekoMenuakPantailaratu(
const
ardKarta: tardKarta; iLuzera:
integer
);
var
k:
integer
;
begin
writeln
(
'--------------------------------------------------------------'
);
writeln
(
'ZBK.'
:
6
,
'MENUA'
:
14
,
'PREZIOA'
:
15
,
'ASTEGUNA'
:
15
);
writeln
(
'--------------------------------------------------------------'
);
for
k:=
1
to
iLuzera
do
WRITELN
(k:
5
, ardKarta[k].sIzena:
15
, ardKarta[k].rPrezioa:
10
:
2
,
' Euro'
, ardKarta[k].sAsteEguna:
15
);
writeln
(
'--------------------------------------------------------------'
);
end
;
procedure
Mandatua( sFitxIzenMahaiak: tsKate99;
iMahaia:
integer
;
const
ardGaurkoKarta: tardKarta;
iZenbatMenuGaur:
integer
;
var
arKontua: tarKontua);
var
iKont :
integer
;
frdMahaiak: tfrdMahaiak;
rdMahaiBat: trdMahaia;
iMenuZbk :
integer
;
begin
assign(frdMahaiak, sFitxIzenMahaiak);
reset(frdMahaiak);
seek (frdMahaiak, iMahaia-
1
);
read(frdMahaiak, rdMahaiBat);
close(frdMahaiak);
if
rdMahaiBat
.
iMahaikideKop =
0
then
writeln
(iMahaia,
'. zenbakidun mahaia libre dago'
)
else
begin
writeln
(
'Eskatuko den menu kopurua: '
,rdMahaiBat
.
iMahaikideKop);
arKontua[iMahaia] :=
0.0
;
for
iKont:=
1
to
rdMahaiBat
.
iMahaikideKop
do
begin
repeat
write
(
'Aukeratu '
, iKont,
'. mahaikidearen menua: '
);
READLN(iMenuZbk);
until
(iMenuZbk >=
1
)
and
(iMenuZbk <= iZenbatMenuGaur);
ARKONTUA[iMahaia] := arKontua[iMahaia] + ardGaurkoKarta[iMenuZbk].rPrezioa;
end
;
end
;
end
;
function
fnrOrdaindu(
const
arKontua: tarKontua;
iMahaia:
integer
):
real
;
begin
FNRORDAINDU := arKontua[iMahaia];
end
;
procedure
KontuenArrayaErakutsi(
const
arKontua: tarKontua);
var
k:
integer
;
begin
for
k:=
1
to
iMAHAIEN_MAX
do
WRITELN
(k:
12
,
'. mahaia: '
, ARKONTUA[k]:
0
:
2
,
' euro'
);
end
;
procedure
MahaiaAskatu(sFitxIzenMahaiak: tsKate99;
iMahaiZenbakia:
integer
);
var
frdMahaiak: tfrdMahaiak;
rdMahaiBat: trdMahaia;
begin
writeln
(
'Kontua ordaindu ondoren, mahaia libratzen...'
);
assign(frdMahaiak, sFitxIzenMahaiak);
reset(frdMahaiak);
seek (frdMahaiak, iMahaiZenbakia -
1
);
read(frdMahaiak, rdMahaiBat);
write
(
'Mahai zenbakia: '
, rdMahaiBat
.
iMahaiZbk);
write
(
'Aulkiak: '
:
14
, rdMahaiBat
.
iAulkiKop);
write
(
'Mahaikideak: '
:
18
, rdMahaiBat
.
iMahaikideKop);
write
(
'Bezeroa: '
:
14
, rdMahaiBat
.
sErreserbaIzena);
writeln
;
RDMAHAIBAT
.
iMahaikideKop :=
0
;
RDMAHAIBAT
.
boLibre :=
TRUE
;
RDMAHAIBAT
.
sErreserbaIzena :=
''
;
write
(
'Mahai zenbakia: '
, rdMahaiBat
.
iMahaiZbk);
write
(
'Aulkiak: '
:
14
, rdMahaiBat
.
iAulkiKop);
write
(
'Mahaikideak: '
:
18
, rdMahaiBat
.
iMahaikideKop);
write
(
'Bezeroa: '
:
14
, rdMahaiBat
.
sErreserbaIzena);
seek (frdMahaiak, iMahaiZenbakia -
1
);
WRITE
(frdMahaiak, rdMahaiBat);
close(frdMahaiak);
end
;
procedure
IrabaziakGorde(sFitxIzenIrabaziak: tsKate99;
const
arKontua: tarKontua);
var
frIrabaziak: tfrIrabaziak;
k :
integer
;
begin
assign(frIrabaziak, sFitxIzenIrabaziak);
rewrite(frIrabaziak);
for
k:=
1
to
iMAHAIEN_MAX
do
WRITE
(frIrabaziak, arKontua[k]);
close(frIrabaziak);
end
;
var
sFitxIzenMahaiak : tsKate99;
sFitxIzenMenuak : tsKate99;
sFitxIzenIrabaziak: tsKate99;
sAsteEgunBat : tsKate20;
ardGaurkoKarta : tardKarta;
iZenbatMenuGaur :
integer
;
cAukera :
char
;
sBezeroIzena : tsKate20;
iMahaikideak :
integer
;
iMahaia :
integer
;
arKontua : tarKontua;
begin
clrscr;
writeln
(
'Jatetxeko datuak gordetzen dituzten bi fitxategien izenak zehaztu...'
);
write
(
'Mahaien fitxategiaren izena eman (adibidez, MAHAIAK.DAT): '
);
readln(sFitxIzenMahaiak);
write
(
'Menuen fitxategiaren izena sartu (esaterako, MENUAK.DAT): '
);
readln(sFitxIzenMenuak);
if
fileexists(sFitxIzenMahaiak)
and
fileexists(sFitxIzenMenuak)
then
begin
write
(
'Gaurko asteguna eman: '
);
sAsteEgunBat := fnsAstegunaZehaztu;
MenuenArrayaKargatuFitxategitik(sFitxIzenMenuak, sAsteEgunBat, ardGaurkoKarta, iZenbatMenuGaur);
KontuenArrayaHasieratu(arKontua);
repeat
cAukera := fncAukerenMenua;
clrscr;
case
cAukera
of
'1'
: MahaiakErakutsi(sFitxIzenMahaiak);
'2'
:
begin
write
(
'Bezeroaren izena eman: '
:
40
);
readln(sBezeroIzena);
write
(
'Mahaikideen kopurua eman: '
:
40
);
readln(iMahaikideak);
MahaiaErreserbatu(sFitxIzenMahaiak, sBezeroIzena, iMahaikideak);
end
;
'3'
: EgunekoMenuakPantailaratu(ardGaurkoKarta, iZenbatMenuGaur);
'4'
:
begin
repeat
write
(
'Janaria eskatzen, mahaiaren zenbakia eman (1 eta '
, iMAHAIEN_MAX,
' artekoa): '
);
readln(iMahaia);
until
(iMahaia >=
1
)
and
(iMahaia <= iMAHAIEN_MAX);
EgunekoMenuakPantailaratu(ardGaurkoKarta, iZenbatMenuGaur);
Mandatua(sFitxIzenMahaiak, iMahaia, ardGaurkoKarta, iZenbatMenuGaur, arKontua);
writeln
;
writeln
(
'Mahai guztien kontuak gordetzen duen arrayaren edukia:'
);
KontuenArrayaErakutsi(arKontua);
end
;
'5'
:
begin
repeat
write
(
'Kontua eskatu duen mahaiaren zenbakia eman (1 eta '
, iMAHAIEN_MAX,
' artekoa): '
);
readln(iMahaia);
until
(iMahaia >=
1
)
and
(iMahaia <= iMAHAIEN_MAX);
if
fnrOrdaindu(arKontua, iMahaia) =
0.0
then
writeln
(iMahaia,
'. zenbakidun mahaia libre dago edo ez da jatekorik eskatu'
)
else
begin
WRITELN
(iMahaia,
' zenbakiko mahaiak '
, fnrOrdaindu(arKontua, iMahaia):
0
:
2
,
' Euroko kontua ordaindu behar du.'
);
MahaiaAskatu(sFitxIzenMahaiak, iMahaia);
end
;
end
;
'0'
:
begin
sFitxIzenIrabaziak :=
'IRABAZIAK_'
+ sAsteEgunBat +
'.DAT'
;
IrabaziakGorde(sFitxIzenIrabaziak, arKontua);
end
;
end
;
writeln
;
readln;
until
cAukera =
'0'
;
end
else
begin
if
not
fileexists(sFitxIzenMahaiak)
then
writeln
(
'ERROREA!! "'
, sFitxIzenMahaiak,
'" fitxategirik ez dago.'
);
if
not
fileexists(sFitxIzenMenuak)
then
writeln
(
'ERROREA!! "'
, sFitxIzenMenuak,
'" fitxategirik ez dago.'
);
writeln
;
writeln
(
'(RETURN sakatu programatik irteteko)'
);
readln;
end
;
end
.