2024ko Maiatzaren deialdiko programa: Jatetxea
Azterketa ariketari lotutako informazioa. Proiektuan bost fitxategietan banaturik dago:
- DatuMotak.h liburutegi-fitxategian estrukturen datu-motak definitzen dira eta konstanteen balioak finkatzen dira
- Prototipoak.h liburutegi-fitxategi honetan funtzioen goiburu guztiak biltzen dira
- main.c programa nagusia da eta bere kodeak ariketaren logika jasotzen du
- DatuFitxategiakSortu.c fitxategian biltzen diren funtzioek datu-fitxategiak sortzeko balio dute
- IkaslearenKodea.c ikasleak garatuko dituen funtzioen kodea fitxategi honetan bilduko da
Bi datu-fitxategi behar dira: Mahaiak.dat eta MenuakEgunezEgun.dat. Biak estrukturak gordetzen dituzten fitxategien izenak izango dira:
- Lehen datu-fitxategiaren izena (Mahaiak.dat) teklatuz ematen da eta dagokion estruktura struct tstMahaia izango da
- Bigarren datu-fitxategiaren izena (MenuakEgunezEgun.dat) konstante bat da eta dagokion estruktura struct tstMenua izango da
Hau da 2024-05-22_Jatetxea proiektuaren porgrama gidatzeko erabiliko den menua:
============================================================================= | MENUA | ============================================================================= | 1. Erakutsi jatetxeko mahaien egoera | | 2. Pantailaratu gaurko (ASTEAZKEN) menuak | | 3. Mahaia erreserbatu | |---------------------------------------------------------------------------| | 4. Erreserba ezeztatu (2024KO AZTERKETAN EZ ZEN ESKATU) | |---------------------------------------------------------------------------| | 5. Jatekoa eskatu | | 6. Kontua eskatu | |---------------------------------------------------------------------------| | 7. Gaurko kutxa osoa erakutsi (2024KO AZTERKETAN EZ ZEN ESKATU) | |
Goian ikusten denez, menuak hamar aukera ditu. Urdinez idazten direnak ez ziren azterketan eskatu. Deskriba ditzagun labur-labur aukera bakoitzaren helburua.
- aukera: Mahaien fitxategitik abiatuta, hamar mahaien egoera pantailaratzen da
- aukera: Kartaren arraytik abiatuta astegun baten menuak pantailaratzen dira
- aukera: Mahaien fitxategitik abiatuta, erreserba bat burutzen da
- aukera: Mahaien fitxategitik abiatuta, erreserba bat ezeztatzen da
- aukera: Mahaien fitxategitik eta kartaren arraytik abiatuta, mahai baten mandatua egiten da
- aukera: Mahaien fitxategitik eta irabazien arraytik abiatuta, mahai bateko kontua ordaintzen da
- aukera: Eguneko irabazien arraytik abiatuta, hamar mahaietan gaur jaso diren euroak erakusten dira
- aukera: ... (galdera berri bat, adibidez media bat kalkulatu)
- aukera: ... (galdera berri bat, adibidez bezero bat bilatu)
- aukera: Menua amaitu eta programatik irten (fitxategi bat sortu eta elikatu)
Azken aukeran, programatik irtetekoan, irabazien arrayaren informazioarekin eta sAsteguna aldagaiak duen katearekin Irabaziak_[sAsteguna].dat zenbaki errealen fitxategia sortu eta datuz betetzen da.
DatuMotak.h liburutegian konstanteak definitzen dira #define klausulari esker, eta, ondoren, behar diren bi estrukturen datu-motak definitzen dira ere. Gero, proiektuaren beste fitxategietan (main.c fitxategian, DatuFitxategiakSortu.c fitxategian eta IkaslearenKodea.c fitxategian) derrigorrezkoa izango da liburutegi honen #include egitea.
Hona hemen DatuMotak.h liburutegian jasotzen dena:
/*====================================================================
Programatzailea: Jesus Romo Uriarte
Data: 2025eko apirilaren 14a
Deskribapena: Informatika azterketa
2023-24 ikasturteko ohiko deialdia
Bilbo, 2024ko maiatzaren 22a
Ezaugarriak: Programak erabiltzen dituen datu-egituren eta
konstanteen definizioak biltzen dira hemen
=====================================================================*/
#define TRUE 1
#define FALSE 0
#define iMAHAIEN_MAX 10
#define iAULKI_KOP_MAX 6
#define iAULKI_KOP_MIN 2
#define iMENUEN_MAX 5
#define iZAZPI_EGUN 7
#define iFITX_IZEN_MAX 150
#define iDATU_IZEN_MAX 100
#define iASTEGUNAREN_LUZERA 15
#define MENUEN_FITX_IZEN "MenuakEgunezEgun.dat"
/*----------------Programaren datu-moten deklarazioa----------------*/
//Estrukturen deklarazio orokorra
struct tstMahaia
{
int iMahaiZbk;
int iAulkiKop;
int boLibre;
char sErreserbaIzena[iDATU_IZEN_MAX];
int iMahaikideKop;
};
struct tstMenua
{
char sIzen[iDATU_IZEN_MAX];
float fPrezioa;
char sEguna[iASTEGUNAREN_LUZERA];
};
Programaren funtzioei dagozkien prototipo guztiak liburutegi honetan jasoko dira. Gero, proiektuaren beste fitxategietan (main.c fitxategian, DatuFitxategiakSortu.c fitxategian eta IkaslearenKodea.c fitxategian) derrigorrezkoa izango da liburutegi honen #include egitea.
Hona hemen Prototipoak.h liburutegian jasotzen dena:
/*====================================================================
Programatzailea: Jesus Romo Uriarte
Data: 2025eko apirilaren 14a
Deskribapena: Informatika azterketa
2023-24 ikasturteko ohiko deialdia
Bilbo, 2024ko maiatzaren 22a
Ezaugarriak: Programak erabiltzen dituen funtzio guztien
prototipoak biltzen dira hemen
=====================================================================*/
/*----------Funtzioen prototipoak-------------*/
int iFitxategirikBada(const char *sMahaienFitxIzen);
int iEgunaTxartoEmanda(const char sAsteguna[]);
int iMahaienFitxategianDatuakKargatu(const char sMahaienFitxIzen[]);
int iMenuenFitxategianDatuakKargatu(const char sMenuenFitxIzen[]);
void MenuakFitxategitikArrayra(const char *sMahaienFitxIzen,
struct tstMenua astMenuak[],
int *iLuz,
const char *sAsteEguna);
char cMenuarenAukeraHautatu(const char sAsteguna[]);
void MahaiBatErakutsi(const struct tstMahaia *stMahai);
void MahaiakErakutsi(const char *sMahaienFitxIzen);
void EgunekoMenuakPantailaratu(const struct tstMenua astMenuak[],
int iLuzM);
void MahaiaErreserbatu(const char* sFitxIzenMahaiak,
const char* sBezeroIzena,
int iMahaikideak);
void ErreserbaAldatu(const char *sMahaienFitxIzen,
int iMahaiZbk,
const char *sIzen,
int iZenbatMahaikide);
int iMahaikideKopuruaLortu(const char *sMahaienFitxIzen,
int iMahaiZbk);
void IrabaziakFitxategiBateanGorde1(const float afGaurkoIrabaziak[], // 10 idazketa
const char *sIrabazienFitxIzen);
void IrabaziakFitxategiBateanGorde2(const float afGaurkoIrabaziak[], // idazketa bakarra
const char *sIrabazienFitxIzen);
void MahaiaLibratu(const char *sMahaienFitxIzen,
int iMahaiZbk);
void IrabazienFitxategiaPantailaratu(const char *sIrabazienFitxIzen);
/*------------"Prototipoak.h" liburutegi-fitxategiaren amaiera------------*/
main.c fitxategian programaren logika nagusia kodetzen da, hona hemen bere kodea:
/*======================================================================================
Programatzailea: Jesus Romo Uriarte
Data: 2025eko apirilaren 14a
Deskribapena: Informatika azterketa
2023-24 ikasturteko ohiko deialdia
Bilbo, 2024ko maiatzaren 22a
Bertsioaren Ezaugarriak:
- Datu-motak eta konstanteak "DatuMotak.h" liburutegian definitu dira
- Funtzioen goiburuak "Prototipoak.h" liburutegian definitu dira
- Mahaien fitxategia sortzeko kodea eta menuen fitxategia sortzeko
kodea "DatuFitxategiakSortu.c" fitxategian idatzi dira
=======================================================================================*/
#include <stdio.h>
#include <stdlib.h> // system() funtzioarako
#include <string.h>
#include <conio.h> // getch() eta getche()
#include "DatuMotak.h"
#include "Prototipoak.h"
/*------------- Funtzioen prototipoak "Prototipoak.h" liburutegian -------------*/
/*------- Funtzio nagusia -------------*/
int main()
{
char sMahaienFitxIzen[iFITX_IZEN_MAX];
char sAsteguna[iASTEGUNAREN_LUZERA];
char sIrabazienFitxIzen[iFITX_IZEN_MAX];
char sBezeroIzen[iFITX_IZEN_MAX];
char cAukera;
struct tstMenua astKarta[iZAZPI_EGUN];
int iErrorea;
int iKartarenLuzera;
int iZenbatMahaikide;
int iMahaiZbk;
int iMenuaKartan;
float afGaurkoIrabaziak[iMAHAIEN_MAX] = {0.0}; // 0tik 9ra, posizio guztietan 0.0 euro
printf("\n -------------------------------------------------------------------");
printf("\n -------- Jatetxe bateko ERRESERBAK eta MANDATUAK kudeatzen --------");
printf("\n -------------------------------------------------------------------\n");
printf("\n\n Jatetxeko mahaien datuak gordetzen dituen\n fitxategiaren izen laburra eman (Mahaiak): ");
gets(sMahaienFitxIzen);
strcat(sMahaienFitxIzen, ".dat");
// Mahaien fitxategia lehendik existitzen bada, bere informazioa mantendu
if (iFitxategirikBada(sMahaienFitxIzen) == FALSE)
{
printf("\n\a ERROREA! '%s' fitxategia ez da existitzen oraintxe sortu da!\n", sMahaienFitxIzen);
iErrorea = iMahaienFitxategianDatuakKargatu(sMahaienFitxIzen);
if (iErrorea != 0)
return iErrorea;
}
do
{
printf(" Gaurko asteko eguna? (Astelehen, Astearte, ... Igande): ");
gets(sAsteguna);
strupr(sAsteguna);
if (iEgunaTxartoEmanda(sAsteguna) == TRUE)
printf("\a");
} while (iEgunaTxartoEmanda(sAsteguna) == TRUE);
// Menuen fitxategia beti berria sortuko da
iErrorea = iMenuenFitxategianDatuakKargatu(MENUEN_FITX_IZEN);
if (iErrorea != 0)
return iErrorea;
MenuakFitxategitikArrayra(MENUEN_FITX_IZEN, astKarta, &iKartarenLuzera, sAsteguna);
do
{
cAukera = cMenuarenAukeraHautatu(sAsteguna);
printf("\n");
switch (cAukera)
{
case '1': //printf("\n 1 - Erakutsi jatetxeko mahaien egoera");
MahaiakErakutsi(sMahaienFitxIzen);
break;
case '2': //printf("\n 2 - Pantailaratu gaurko (%s) menuak", sAsteguna);
EgunekoMenuakPantailaratu(astKarta, iKartarenLuzera);
break;
case '3': //printf("\n 3 - Mahaia erreserbatu";
MahaiakErakutsi(sMahaienFitxIzen);
printf(" Erreserba egiten...\n Bezeroaren izena sartu: ");
gets(sBezeroIzen);
fflush(stdin);
printf(" Mahaikiden kopurua sartu: ");
scanf("%d", &iZenbatMahaikide);
fflush(stdin);
MahaiaErreserbatu(sMahaienFitxIzen, sBezeroIzen, iZenbatMahaikide);
break;
case '4': //printf("\n 4 - Erreserba ezeztatu);
//hemen idatzi "ErreserbaEzeztatu()" funtzioaren deia
printf(" Mahaien fitxategitik abiatuta, erreserba bat ezeztatzen da\n");
break;
case '5': //printf("\n 5 - Jatekoa eskatu");
do
{
printf(" Jatekoa eskatzen... Mahai-zenbakia (1..%d): ", iMAHAIEN_MAX);
scanf("%d",&iMahaiZbk);
fflush(stdin);
} while (iMahaiZbk < 1 || iMahaiZbk > iMAHAIEN_MAX);
iZenbatMahaikide = iMahaikideKopuruaLortu(sMahaienFitxIzen,iMahaiZbk);
printf(" Egin beharreko eskaera-kopurua: %d\n",iZenbatMahaikide);
for (int i=1; i<=iZenbatMahaikide; i++)
{
EgunekoMenuakPantailaratu(astKarta, iKartarenLuzera);
do
{
printf(" %d. mahaikidearen menua aukeratu (1 eta %d artekoa): ", i, iKartarenLuzera);
scanf("%d", &iMenuaKartan);
fflush(stdin);
} while (iMenuaKartan < 1 || iMenuaKartan > iKartarenLuzera);
afGaurkoIrabaziak[iMahaiZbk-1] = afGaurkoIrabaziak[iMahaiZbk-1] + astKarta[iMenuaKartan-1].fPrezioa;
printf(" Batura egin ondoren, %d. mahaiaren kontua %.2f Eurotakoa izango da\n", iMahaiZbk, afGaurkoIrabaziak[iMahaiZbk-1]);
}
break;
case '6': //printf("\n 6 - Kontua eskatu eta ordaindu");
do
{
printf(" Kontua eskatzen... Mahai-zenbakia (1..%d): ", iMAHAIEN_MAX);
scanf("%d",&iMahaiZbk);
fflush(stdin);
} while (iMahaiZbk < 1 || iMahaiZbk > iMAHAIEN_MAX);
printf(" %d. mahaiak %.2f Euro ordaindu behar ditu\n", iMahaiZbk, afGaurkoIrabaziak[iMahaiZbk-1]);
printf(" %d. mahaia libratzen...\n", iMahaiZbk);
if (afGaurkoIrabaziak[iMahaiZbk-1] != 0)
MahaiaLibratu(sMahaienFitxIzen, iMahaiZbk);
else
{
printf(" %d. mahaia ezin daiteke bihurtu eskuragarri, dagoeneko libre\n", iMahaiZbk);
printf(" dagoelako edo bezeroek oraindik ez dutelako kontua ordaindu\n");
}
break;
case '7': //printf("\n 7 - Gaurko kutxa osoa erakutsi");
//hemen idatzi "KontuakPantailaratu()" funtzioaren deia
printf(" Irabazien arraytik abiatuta, hamar mahaietan\n gaur jaso diren euroak erakusten dira\n");
break;
case '8': //printf("\n 8 - Zeregin berri bat");
printf(" 8. aukerako zeregina\n");
break;
case '9': //printf("\n 9 - Zeregin berri bat");
printf(" 9. aukerako zeregina\n");
break;
case '0': //printf("\n 0 - Irabaziak eguneratu eta programatik irten");
strcpy(sIrabazienFitxIzen, "Irabaziak_");
strcat(sIrabazienFitxIzen, sAsteguna);
strcat(sIrabazienFitxIzen, ".dat");
IrabaziakFitxategiBateanGorde1(afGaurkoIrabaziak, sIrabazienFitxIzen);
IrabazienFitxategiaPantailaratu(sIrabazienFitxIzen);
IrabaziakFitxategiBateanGorde2(afGaurkoIrabaziak, sIrabazienFitxIzen);
IrabazienFitxategiaPantailaratu(sIrabazienFitxIzen);
printf("\n Programaren amaiera\n");
break;
}
if (cAukera != '0')
{
printf("\n Aurrera egiteko edozein tekla sakatu... ");
getche(); // itxaroteko
}
} while (cAukera!='0');
return 0;
}
/*--------- Mahaien fitxategia existitzen den konprobaketa ------------*/
int iFitxategirikBada(const char *sMahaienFitxIzen)
{
FILE *fbErakMahaiak;
int iBaiBada;
fbErakMahaiak = fopen(sMahaienFitxIzen, "rb");
if (fbErakMahaiak == NULL)
iBaiBada = FALSE; // 0
else
{
fclose(fbErakMahaiak);
iBaiBada = TRUE; // 1
}
return iBaiBada;
}
/*----------------iEgunaTxartoEmanda------------------*/
int iEgunaTxartoEmanda(const char sAsteguna[])
{
int iErantzuna;
iErantzuna = TRUE;
if (strcmp(sAsteguna, "ASTELEHEN") == 0)
{
iErantzuna = FALSE;
return iErantzuna;
}
if (strcmp(sAsteguna, "ASTEARTE") == 0)
{
iErantzuna = FALSE;
return iErantzuna;
}
if (strcmp(sAsteguna, "ASTEAZKEN") == 0)
{
iErantzuna = FALSE;
return iErantzuna;
}
if (strcmp(sAsteguna, "OSTEGUN") == 0)
{
iErantzuna = FALSE;
return iErantzuna;
}
if (strcmp(sAsteguna, "OSTIRAL") == 0)
{
iErantzuna = FALSE;
return iErantzuna;
}
if (strcmp(sAsteguna, "LARUNBAT") == 0)
{
iErantzuna = FALSE;
return iErantzuna;
}
if (strcmp(sAsteguna, "IGANDE") == 0)
{
iErantzuna = FALSE;
return iErantzuna;
}
return iErantzuna;
}
/*------ Egun bateko menuak fitxategitik arrayra iraultzea------*/
void MenuakFitxategitikArrayra(const char *sMenuenFitxIzen,
struct tstMenua astMenuak[],
int *iLuz,
const char *sAsteEguna)
{
FILE *fbErakMenuak;
struct tstMenua stMenuBat;
*iLuz = 0;
fbErakMenuak = fopen(sMenuenFitxIzen, "rb");
while (fread(&stMenuBat, sizeof(stMenuBat), 1, fbErakMenuak) == 1)
{
if (strcmp(stMenuBat.sEguna, sAsteEguna) == 0)
{
astMenuak[*iLuz] = stMenuBat;
*iLuz = *iLuz + 1;
}
}
fclose(fbErakMenuak);
}
/*---------Menua------------*/
char cMenuarenAukeraHautatu(const char sAsteguna[])
{
char cAukera;
system("cls");
printf("\n ===================MENUA===================");
printf("\n 1 - Erakutsi jatetxeko mahaien egoera");
printf("\n 2 - Pantailaratu gaurko (%s) menuak", sAsteguna);
printf("\n 3 - Mahaia erreserbatu");
printf("\n 4 - ... Erreserba ezeztatu");
printf("\n 5 - Jatekoa eskatu");
printf("\n 6 - Kontua eskatu eta ordaindu");
printf("\n 7 - ... Gaurko kutxa osoa erakutsi");
printf("\n 8 - ... Zeregin berri bat");
printf("\n 9 - ... Zeregin berri bat");
printf("\n 0 - Programatik irten");
printf("\n ===========================================\n");
do
{
printf("\n Zure aukera hautatu: ");
cAukera = getche();
if (cAukera < '0' || cAukera > '9')
printf("\a");
} while (cAukera < '0' || cAukera > '9');
printf("\n");
return cAukera;
}
/*-------Mahai estruktura erakutsi---------------*/
void MahaiBatErakutsi(const struct tstMahaia *stMahaiBat)
{
printf("%10d", stMahaiBat->iMahaiZbk);
printf("%12d", stMahaiBat->iAulkiKop);
printf("%16d", stMahaiBat->iMahaikideKop);
if (stMahaiBat->boLibre)
printf(" Libre\n");
else
printf(" Erreserbatuta: %s\n", stMahaiBat->sErreserbaIzena);
}
/*--------Jatetxe estruktura erakutsi ---------*/
void MahaiakErakutsi(const char *sMahaienFitxIzen)
{
FILE *fbErakMahaiak;
struct tstMahaia stMahaiBat;
fbErakMahaiak = fopen(sMahaienFitxIzen, "rb");
printf(" --------------------------------------------------------------------\n");
printf("%10s%12s%16s%22s\n","MAHAIA","AULKIAK","MAHAIKIDEAK","ESKURAGARRITASUNA" );
printf(" --------------------------------------------------------------------\n");
while (fread(&stMahaiBat, sizeof(stMahaiBat), 1, fbErakMahaiak) == 1)
MahaiBatErakutsi(&stMahaiBat);
printf(" --------------------------------------------------------------------\n");
fclose(fbErakMahaiak);
}
/*----------Menuak erakutsi-------------*/
void EgunekoMenuakPantailaratu(const struct tstMenua astMenuak[],
int iLuzMenuZerrenda)
{
int i;
printf(" ----------------------------------------------------------------------\n");
printf("%13s%20s%19s%16s\n", "MENU ZBK.", "MENUA", "PREZIOA", "EGUNA");
printf(" ----------------------------------------------------------------------");
for (i=0; i<iLuzMenuZerrenda; i++)
printf("\n %8d%24s%14.2f euro %15s", i + 1, astMenuak[i].sIzen, astMenuak[i].fPrezioa, astMenuak[i].sEguna);
printf("\n ----------------------------------------------------------------------\n");
}
/*----------Mahai informazioa aldatu-------------*/
void ErreserbaAldatu(const char *sMahaienFitxIzen,
int iMahaiZbk,
const char *sIzen,
int iZenbatMahaikide)
{
FILE *fbErakMahaiak;
struct tstMahaia stMahaiBat;
fbErakMahaiak = fopen(sMahaienFitxIzen, "r+b");
fseek(fbErakMahaiak, (iMahaiZbk-1)*(long)sizeof(stMahaiBat), SEEK_SET);
fread(&stMahaiBat, sizeof(stMahaiBat), 1, fbErakMahaiak);
stMahaiBat.boLibre = 0;
strcpy(stMahaiBat.sErreserbaIzena, sIzen);
stMahaiBat.iMahaikideKop = iZenbatMahaikide;
fseek(fbErakMahaiak, (iMahaiZbk-1)*(long)sizeof(stMahaiBat), SEEK_SET);
fwrite(&stMahaiBat, sizeof(stMahaiBat), 1, fbErakMahaiak);
fclose(fbErakMahaiak);
}
/*----- Mahaikide zenbakia lortu-----------*/
int iMahaikideKopuruaLortu(const char *sMahaienFitxIzen,
int iMahaiZbk)
{
FILE *fbErakMahaiak;
struct tstMahaia stMahaiBat;
fbErakMahaiak = fopen(sMahaienFitxIzen, "rb");
fseek(fbErakMahaiak, (iMahaiZbk-1)*(long)sizeof(stMahaiBat), SEEK_SET);
fread(&stMahaiBat, sizeof(stMahaiBat), 1, fbErakMahaiak);
fclose(fbErakMahaiak);
return stMahaiBat.iMahaikideKop;
}
/*-----------Irabaziak fitxategira irauli, 10 idazketak banan-banan eginez-----------*/
void IrabaziakFitxategiBateanGorde1(const float afGaurkoIrabaziak[],
const char *sIrabazienFitxIzen)
{
FILE *fbErakKutxa;
fbErakKutxa = fopen(sIrabazienFitxIzen, "wb");
for (int iKont=0; iKont<iMAHAIEN_MAX; iKont++)
{
fwrite(&afGaurkoIrabaziak[iKont], sizeof(float), 1, fbErakKutxa);
}
fclose(fbErakKutxa);
printf(" 10 idazketa...\n");
}
/*-----------Irabaziak fitxategira irauli, 10 zenbakiak idazketa bakarrean hartuz-----------*/
void IrabaziakFitxategiBateanGorde2(const float afGaurkoIrabaziak[],
const char *sIrabazienFitxIzen)
{
FILE *fbErakKutxa;
fbErakKutxa = fopen(sIrabazienFitxIzen, "wb");
fwrite(afGaurkoIrabaziak, sizeof(afGaurkoIrabaziak[0]), iMAHAIEN_MAX, fbErakKutxa);
fclose(fbErakKutxa);
printf("\n Idazketa bakarra...\n");
}
/*-----------Mahaia eskuragarri ipini-----------*/
void MahaiaLibratu(const char *sMahaienFitxIzen,
int iMahaiZbk)
{
FILE *fbErakMahaiak;
struct tstMahaia stMahaiBat;
fbErakMahaiak = fopen(sMahaienFitxIzen, "r+b");
fseek(fbErakMahaiak, (iMahaiZbk-1)*(long)sizeof(stMahaiBat), SEEK_SET);
fread(&stMahaiBat, sizeof(stMahaiBat), 1, fbErakMahaiak);
stMahaiBat.boLibre = 1;
strcpy(stMahaiBat.sErreserbaIzena, "");
stMahaiBat.iMahaikideKop = 0;
fseek(fbErakMahaiak, (iMahaiZbk-1)*(long)sizeof(stMahaiBat), SEEK_SET);
fwrite(&stMahaiBat, sizeof(stMahaiBat), 1, fbErakMahaiak);
fclose(fbErakMahaiak);
}
/*-----------Irabaziak, float diren 10 elementuko fitxategi bat-----------*/
void IrabazienFitxategiaPantailaratu(const char *sIrabazienFitxIzen)
{
FILE *fbErakEuroak;
float fEuroak;
int iMahaiZenbakia = 0;
fbErakEuroak = fopen(sIrabazienFitxIzen, "rb");
printf(" -----------------------------------------------------------\n");
printf(" GAURKO IRABAZIAK (EUROAK)\n");
printf(" -----------------------------------------------------------\n");
printf(" '%s' fitxategiaren edukia:", sIrabazienFitxIzen);
while (fread(&fEuroak, sizeof(float), 1, fbErakEuroak) == 1)
{
iMahaiZenbakia++;
printf("\n %2d zenbakiko mahaian %8.2f euro irabazi dira", iMahaiZenbakia, fEuroak);
}
printf("\n -----------------------------------------------------------\n");
fclose(fbErakEuroak);
}
/*------------Mahai bat erreserbatu mahaikide kopuru jakin batentzat--------------*/
void MahaiaErreserbatu(const char* sFitxIzenMahaiak, const char* sBezeroIzena, int iMahaikideak)
{
FILE *f;
struct tstMahaia rdMahaiBat;
int iAulkiKopurua = iMahaikideak;
int boMahaiaErreserbatua = FALSE;
f = fopen(sFitxIzenMahaiak, "r+b");
do
{
printf(" sBezeroIzena = %s, iMahaikideak = %d, iAulkiKopurua = %d\n",
sBezeroIzena, iMahaikideak, iAulkiKopurua);
fseek(f, 0L, SEEK_SET); // fitxategia hasierara
while (fread(&rdMahaiBat, sizeof(struct tstMahaia), 1, f) == 1 && !boMahaiaErreserbatua)
{
if (rdMahaiBat.iAulkiKop == iAulkiKopurua && rdMahaiBat.boLibre)
{
rdMahaiBat.boLibre = FALSE;
strcpy(rdMahaiBat.sErreserbaIzena, sBezeroIzena);
rdMahaiBat.iMahaikideKop = iMahaikideak;
fseek(f, (-1)*(long)sizeof(struct tstMahaia), SEEK_CUR); // posizio egokira
fwrite(&rdMahaiBat, sizeof(struct tstMahaia), 1, f);
printf(" Erreserba gauzatu da, mahai zenbakia: %d\n", rdMahaiBat.iMahaiZbk);
boMahaiaErreserbatua = TRUE;
}
}
iAulkiKopurua++;
} while (iAulkiKopurua <= iAULKI_KOP_MAX && !boMahaiaErreserbatua);
if (!boMahaiaErreserbatua)
printf(" Eskatutako mahaikide kopururako tokirik ez dago.\n");
fclose(f);
}
Jarraian ikus daitekeen bezala, datu-fitxategiak sortzeko funtzioak DatuFitxategiakSortu.c barnean garatu dira:
/*====================================================================
Programatzailea: Jesus Romo Uriarte
Data: 2025eko apirilaren 14a
Deskribapena: Informatika azterketa
2023-24 ikasturteko ohiko deialdia
Bilbo, 2024ko maiatzaren 22a
Ezaugarriak: Fitxategiak sortzeko funtzioak garatzen dira
=====================================================================*/
/*-------------------------------------------------------------------
Mahaien eta menuen datu-fitxategiekin lan egiteko funtzioen
garapenak biltzen dira fitxategi honetan.
- Mahaien fitxategi bitarra sortu datuak kargatuz
- Menuen fitxategi bitarra sortu datuak kargatuz
---------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h> // rand() eta srand()
#include <string.h> // strcpy()
#include <time.h> // time()
#include "DatuMotak.h"
#include "Prototipoak.h"
/*------------- Funtzioen prototipoak "Prototipoak.h" liburutegian -------------*/
/*----------Array konstante batetik mahaien datuak hartu eta fitxategira kargatu------------*/
#define iMAX_IZENAK 23
static char asIzenenZerrenda[][iDATU_IZEN_MAX] =
{ "Luisa", "Eva", "Janire", "Itsaso", "Jon", // 5+
"Leire", "Gorka", "Koldo", "Iesus", "Andoni", // 10+
"Helene", "Pedro", "Anne", "Ainhoa", "Kepa", // 15+
"Juan", "Gemma", "Marina", "Carmen", "Mario", // 20+
"Belen", "Nuria", "Carlos" // 23
};
int iMahaienFitxategianDatuakKargatu(const char sMahaienFitxIzen[])
{
FILE *fbErakFitx;
char *sModua = "wb"; // Fitxategi bitarra sortu
struct tstMahaia stMahaia;
srand(time(NULL));
fbErakFitx = fopen(sMahaienFitxIzen, sModua);
for (int i=0; i<iMAHAIEN_MAX; i++)
{
stMahaia.iMahaiZbk = i + 1;
/* Aulkiak 2 eta 6 artean auzaz */
stMahaia.iAulkiKop = (rand() % (iAULKI_KOP_MAX - iAULKI_KOP_MIN + 1)) + iAULKI_KOP_MIN;
if (rand() % 2 == 0)
{
stMahaia.boLibre = TRUE;
strcpy(stMahaia.sErreserbaIzena, "");
stMahaia.iMahaikideKop = 0;
}
else
{
stMahaia.boLibre = FALSE;
strcpy(stMahaia.sErreserbaIzena, asIzenenZerrenda[rand() % iMAX_IZENAK]);
stMahaia.iMahaikideKop = rand() % (stMahaia.iAulkiKop) + 1;
}
if (fwrite (&stMahaia, sizeof(struct tstMahaia), 1, fbErakFitx) != 1)
{
printf("\n\a ERROREA: Ezin izan da idatzi fitxategiaren bukaeran\n");
return -11;
}
} // for
fclose(fbErakFitx);
return 0;
};
/*----------Array konstante batetik menuen datuak hartu eta fitxategira kargatu------------*/
#define iMENUEN_LUZERA 41
static struct tstMenua astMenuenZerrenda[] =
{
{"Menu 1" , 18.00 , "ASTELEHEN"} , // 1
{"Menu 1" , 20.50 , "OSTEGUN"} , // 2
{"Menu 2" , 22.5 , "ASTELEHEN"} ,
{"Menu 3" , 18.00 , "ASTEARTE"} ,
{"Menu 4" , 22.75 , "ASTEAZKEN"} ,
{"Menu 5" , 50.0 , "OSTEGUN"} ,
{"Menu 5" , 22.75 , "ASTEARTE"} ,
{"Menu 6" , 23.00 , "ASTEAZKEN"} ,
{"Menu 7" , 20.00 , "ASTEAZKEN"} ,
{"Menu 8" , 45.0 , "OSTIRAL"} , // 10
{"Menu 9" , 19.50 , "OSTIRAL"} , // 11
{"Menu 10" , 21.50 , "OSTIRAL"} , // 12
{"Menu 11" , 23.50 , "ASTELEHEN"} ,
{"Menu 11" , 23.50 , "LARUNBAT"} ,
{"Menu 11" , 23.50 , "IGANDE"} ,
{"Menu 12" , 18.95 , "OSTEGUN"} ,
{"Menu 12" , 18.95 , "LARUNBAT"} ,
{"Menu 12" , 18.95 , "IGANDE"} ,
{"Begano 1" , 18.00 , "ASTELEHEN"} ,
{"Begano 1" , 20.00 , "ASTEAZKEN"} , // 20
{"Begano 2" , 21.00 , "ASTELEHEN"} , // 21
{"Begano 2" , 19.00 , "ASTEARTE"} , // 22
{"Begano 3" , 22.00 , "ASTEARTE"} ,
{"Begano 3" , 18.0 , "OSTEGUN"} ,
{"Begano 3" , 19.0 , "OSTIRAL"} ,
{"Begano 3" , 19.0 , "LARUNBAT"} ,
{"Begano 3" , 19.0 , "IGANDE"} ,
{"Begano 4" , 24.0 , "OSTIRAL"} ,
{"Begano 4" , 24.0 , "LARUNBAT"} ,
{"Begano 4" , 24.0 , "IGANDE"} , // 30
{"Begetariano 1" , 19.0 , "ASTELEHEN"} , // 31
{"Begetariano 1" , 21.75 , "ASTEAZKEN"} , // 32
{"Begetariano 1" , 21.75 , "LARUNBAT"} ,
{"Begetariano 1" , 21.75 , "IGANDE"} ,
{"Begetariano 2" , 19.25 , "ASTEARTE"} ,
{"Begetariano 2" , 19.25 , "LARUNBAT"} ,
{"Begetariano 2" , 19.25 , "IGANDE"} ,
{"Piszitariano" , 35.25 , "OSTEGUN"} ,
{"Piszitariano" , 35.25 , "OSTIRAL"} ,
{"Piszitariano" , 35.25 , "LARUNBAT"} , // 40
{"Piszitariano" , 35.25 , "IGANDE"} // 41
};
int iMenuenFitxategianDatuakKargatu(const char sMenuenFitxIzen[])
{
FILE *fbstKarta;
char *sModua = "wb"; // Fitxategi bitarra sortu
int i;
fbstKarta = fopen(sMenuenFitxIzen, sModua);
for (i=0; i<iMENUEN_LUZERA; i++)
{
/* Programa honetan konprobazio hau ez da guztiz beharrezkoa */
if (fwrite (&astMenuenZerrenda[i], sizeof(struct tstMenua), 1, fbstKarta) != 1)
{
printf("\n\a ERROREA: Ezin izan zaio gehitu fitxategiari elementua\n");
return -21;
}
} // for
fclose(fbstKarta);
return 0;
}
Ikasleak idatzi beharko duen gehiena fitxategi honetan jasoko du:
/*====================================================================
Ikaslearen izena-abizena: _______________________
Lanak Zure kode gehiena hemen idatziko duzu. Esate baterako,
----- demagun 10 mahaietan lortu diren euroak pantailaratu
nahi direla: 7. aukerako KontuakPantailaratu() funtzioa.
Urratsak Hiru fitxategitan idatzi beharko duzu:
--------
- "main.c" fitxategian 7. aukera editatu KontuakPantailaratu()
funtzioaren deia egiteko
- "Prototipoak.h" liburutegian KontuakPantailaratu() funtzioaren
goiburua idatzi
- "IkaslearenKodea.c" fitxategi honetan KontuakPantailaratu()
funtzioa garatu
=====================================================================*/
#include <stdio.h>
#include "DatuMotak.h"
#include "Prototipoak.h"
/*-----4. aukera-------Mahaia baten erreserba ezeztatu-------------------*/
// Idatzi hemen "ErreserbaEzeztatu()" funtzioaren kodea
/*-----7. aukera-------Mahaien uneko irabaziak pantailaratu--------------*/
// Idatzi hemen "KontuakPantailaratu()" funtzioaren kodea
/*-----8. aukera-------Zeregin berria, adibidez media bat kalkulatu------*/
// Idatzi hemen media kalkulatzen duen funtzioaren kodea
/*-----9. aukera-------Zeregin berria, adibidez bilaketa bat egin--------*/
// Idatzi hemen bilaketa burutzen duen funtzioaren kodea
/*---------------"IkaslearenKodea.c" fitxategiaren amaiera---------------*/
|
Proiektuak behar dituen 5 fitxategi horiek Code::Blocks ingurune grafikoan nola agertzen diren jakiteko, ikusi blogeko 3. kontroleko proiektua izena duen orrialdea.


iruzkinik ez:
Argitaratu iruzkina