3. kontrola



  2024/05/22, programa 

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
Irudian erakusten da nola agertzen diren 5 fitxategi horiek Code::Blocks ingurunean. Alde batetik iturburu-kodearen
3 fitxategiak eta beste aldetik 2 liburutegi-fitxategiak (irudia handiago ikusteko bere gainean klik egin)

Bi datu-fitxategi behar dira: Mahaiak.dat eta MenuakEgunezEgun.dat. Biak estrukturak gordetzen dituzten fitxategien izenak izango dira:

  1. Lehen datu-fitxategiaren izena (Mahaiak.dat) teklatuz ematen da eta dagokion estruktura struct tstMahaia izango da
  2. 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)  | 
| 8. ... (2024KO AZTERKETAN EZ ZEN ESKATU) |
| 9. ... (2024KO AZTERKETAN EZ ZEN ESKATU) |
|---------------------------------------------------------------------------| | 0. Programatik irten | ============================================================================= Zure aukera hautatu: _

Goian ikusten denez, menuak hamar aukera ditu. Urdinez idazten direnak ez ziren azterketan eskatu. Deskriba ditzagun labur-labur aukera bakoitzaren helburua.

  1. aukera:   Mahaien fitxategitik abiatuta, hamar mahaien egoera pantailaratzen da
  2. aukera:   Kartaren arraytik abiatuta astegun baten menuak pantailaratzen dira
  3. aukera:   Mahaien fitxategitik abiatuta, erreserba bat burutzen da
  4. aukera:   Mahaien fitxategitik abiatuta, erreserba bat ezeztatzen da
  5. aukera:   Mahaien fitxategitik eta kartaren arraytik abiatuta, mahai baten mandatua egiten da
  6. aukera:   Mahaien fitxategitik eta irabazien arraytik abiatuta, mahai bateko kontua ordaintzen da
  7. aukera:   Eguneko irabazien arraytik abiatuta, hamar mahaietan gaur jaso diren euroak erakusten dira
  8. aukera:   ... (galdera berri bat, adibidez media bat kalkulatu)
  9. aukera:   ... (galdera berri bat, adibidez bezero bat bilatu)
  10. 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---------------*/


  Proiektuaren baliabideak 





  Proiektuaren fitxategiak eta Code::Blocks ingurunea 

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