From 4145c627a225fd720c37ec8500cd865b11a70da4 Mon Sep 17 00:00:00 2001
From: tht_krisztian <tht_krisztian@sch.bme.hu>
Date: Mon, 2 Dec 2013 20:14:00 +0100
Subject: [PATCH] Modulozva2.0

---
 receptor/beolvasofv.c   | 358 ++++++++++++++++++++++++++++++++++++++++
 receptor/receptor.h.bak |  68 ++++++++
 receptor/receptor.zip   | Bin 4086 -> 0 bytes
 3 files changed, 426 insertions(+)
 create mode 100644 receptor/beolvasofv.c
 create mode 100644 receptor/receptor.h.bak
 delete mode 100644 receptor/receptor.zip

diff --git a/receptor/beolvasofv.c b/receptor/beolvasofv.c
new file mode 100644
index 0000000..0e0d7ee
--- /dev/null
+++ b/receptor/beolvasofv.c
@@ -0,0 +1,358 @@
+#define TESZT
+#include "receptor.h"
+#ifndef BEOLVASO_FV
+#define BEOLVASO_FV
+#ifndef INCLUDES
+#define INCLUDES
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#endif
+
+void Lista_hoz_beszur(Hozzavalo *uj,Lista_hoz *lista);
+void Lista_rec_beszur(Recept *uj,Lista_rec *lista);
+void Lista_hoz_init(Lista_hoz *lista);
+void Lista_rec_init(Lista_rec *lista);
+void Main_receptek(Lista_rec *lista);
+Recept* Beolvas_recept(FILE *fp,char * fajlnev);
+Hozzavalo* Beolvas_hozzavalo(char *str);
+void kiir(Lista_rec *lista);
+void szabadit_hozzavalok(Recept *eleje);
+void szabadit_elkeszites(char** pt,int db);
+void szabadit_receptek(Recept *eleje);
+char mertekegysegek_szovegben[][15]={"mg","g","dkg","kg","ml","cl","dl","l","db","teaskanal","kiskanal","evokanal","merokanal","p�r","fej","gerezd","szelet","csomag",""};
+
+void Lista_hoz_beszur(Hozzavalo *uj,Lista_hoz *lista)
+{
+    uj->kovetkezo=lista->eleje->kovetkezo;
+    lista->eleje->kovetkezo=uj;
+    uj->kovetkezo->elozo=uj;
+    uj->elozo=lista->eleje;
+
+}
+
+void Lista_rec_beszur(Recept *uj,Lista_rec *lista)
+{
+    uj->kovetkezo=lista->eleje->kovetkezo;
+    lista->eleje->kovetkezo=uj;
+    uj->kovetkezo->elozo=uj;
+    uj->elozo=lista->eleje;
+}
+
+
+void Lista_hoz_init(Lista_hoz *lista)
+{
+    lista->eleje=(Hozzavalo*)malloc(sizeof(Hozzavalo));
+    lista->vege=(Hozzavalo*)malloc(sizeof(Hozzavalo));
+    lista->eleje->kovetkezo=lista->vege;
+    lista->eleje->elozo=NULL;
+    lista->vege->kovetkezo=NULL;
+    lista->vege->elozo=lista->eleje;
+}
+
+void Lista_rec_init(Lista_rec *lista)
+{
+    lista->eleje=(Recept *) malloc(sizeof(Recept));
+    lista->vege=(Recept*) malloc(sizeof(Recept));
+    lista->eleje->kovetkezo=lista->vege;
+    lista->eleje->elozo=NULL;
+    lista->vege->kovetkezo=NULL;
+    lista->vege->elozo=lista->eleje;
+}
+
+/** Beolvassa a 00.txt f�jlban t�rolt f�jlneveket, �s l�trehozza a l�ncolt list�t a receptekb�l
+* Megh�vja a Beolvas_recept, Lista_rec_beszur f�ggv�nyeket.
+* @param lista Egy str�zsa, a recepteken.
+* @param temp (max 100) ideiglenes puffer beolvas�shoz
+* @param fajlnev (max 50) �ppen kiolvasand� f�jl nev�t t�rolja
+* @param fp_00 FILE pointer a 00.txt f�jlra
+* @param fp File pointer az �ppen beolvasasnd� f�jlra mutat
+* @param ujelem Recept pointer, ebben t�rol�dik az �jonnan beolvasott recept, ekkor m�g nincs neki foglalva hely
+* @param db_rec a 00.txt els� sor�ban t�rolt sz�m, megadja a receptek sz�m�t
+*/
+void Main_receptek(Lista_rec *lista)
+{
+#ifdef TESZT
+fprintf(stdout,"Main receptek f�ggv�ny: \n");
+#endif
+    char temp[100]="";
+    char fajlnev[50];
+
+    FILE *fp_00=NULL;
+    FILE *fp=NULL;
+    Recept *ujelem;
+    Lista_rec_init(lista);
+
+    fp_00=fopen("00.txt","rt");
+    if(fp_00==NULL) printf("Nem sikerult megnyitni a fajlt!\n");
+    else{
+        int db_rec,i,k;
+        fgets(temp,5,fp_00);
+        db_rec=atoi(temp);
+        #ifdef TESZT
+        fprintf(stdout,"Receptek sz�ma: %d\n",db_rec);
+        #endif
+        for(i=0;i<db_rec;i++)
+        {
+            fgets(temp,50,fp_00);
+            k=0;
+            while(temp[k]!='\n')
+            {
+                fajlnev[k++]=temp[k];
+            }
+            fajlnev[k]='\0';
+            fp=fopen(fajlnev, "rt");
+            if (fp==NULL) printf("Nem sikerult megnyitni a fajlt!\n");
+            else
+            {
+                ujelem=Beolvas_recept(fp,fajlnev);
+                Lista_rec_beszur(ujelem,lista);
+            }
+        }
+    }
+    #ifdef TESZT
+    fprintf(stdout,"----Main Receptek V�ge\n");
+    #endif
+}
+/** Param�terk�nt �tvett f�jlb�l beolvassa a recept nev�t,neh�zs�g�t,elk.idej�t.
+*! Dinamikus mem�ri�t foglal, amit a h�v� feladata felszabad�tani.
+* Megh�vja Lista_hoz_init, Beolvas_hozzavalo, Lista_hoz_beszur f�ggv�nyeket.
+* @param fp FILE pointer receptre mutatat.
+* @param fajlnev a forr�sf�jl neve kiterjeszt�ssel.
+* @param uj_rec dinamikusan foglalt ter�let egy recept sz�m�ra.
+* @param temp ideiglenes puffer f�jlb�l olvas�shoz.
+* @param temp_int ideiglenes puffer sz�mok t�rol�s�hoz.
+* @param allapot defini�lt t�pus, mely ir�ny�t egy switch-et, kett�v�lasztja a beolvas�s els� r�sz�t a hozz�val�k beolvas�s�st�l.
+* @param lista_hozza Str�zsa a hozz�val�k l�ncolt list�j�n. (!Dinamikusan foglalt)
+* @param temp_hozza ideiglenes t�rol� az �ppen beolvasni k�v�nt hozz�val�nak.
+* @return pointer az ujonnan l�trehozott receptre, NULL, ha nem tudott dinamikusan foglalni helyet
+*/
+Recept* Beolvas_recept(FILE *fp,char * fajlnev)
+{
+    #ifdef TESZT
+    fprintf(stdout,"Beolvas_recept f�ggv�ny: \n");
+    #endif
+
+    Recept* uj_rec=(Recept*)malloc(sizeof(Recept));
+    if(uj_rec!=NULL)
+    {
+        char temp[100];
+        int temp_int;
+
+        strcpy(uj_rec->fajlnev,fajlnev);
+
+        fgets(temp,100,fp);
+        strcpy(uj_rec->nev,temp);
+
+        fgets(temp,100,fp);
+        sscanf(temp,"%d ",&temp_int);
+        uj_rec->nehezseg=temp_int;
+
+        fgets(temp,100,fp);
+        sscanf(temp,"%d ",&temp_int);
+        uj_rec->fozesi_ido=temp_int;
+
+        #ifdef TESZT
+        fprintf(stdout,"Recept: %s\n",uj_rec->fajlnev);
+        #endif
+
+        beolvasas allapot;
+        allapot=elso_szakasz;
+
+        Lista_hoz *lista_hozza=(Lista_hoz*)malloc(sizeof(Lista_hoz));
+        if(lista_hozza!=NULL)
+        {
+            Lista_hoz_init(lista_hozza);
+
+            Hozzavalo *temp_hozza;
+            #ifdef TESZT
+            fprintf(stdout,"Hozz�val�k beolvas�sa: \n");
+            #endif
+            while(fgets(temp,100,fp) && strstr(temp,"Elkeszites:")==NULL)
+            {
+                switch(allapot)
+                {
+                    case elso_szakasz:
+                    if(strstr(temp,"Hozzavalok:")!=NULL)
+                    {
+                        allapot=hozzavalok_beolvas;
+                        fgets(temp,100,fp);
+                        sscanf(temp,"%d ",&temp_int);
+                        uj_rec->fo=temp_int;
+                    }
+                    break;
+
+                    case hozzavalok_beolvas:
+                    temp_hozza=Beolvas_hozzavalo(temp);
+                    if(temp_hozza==NULL) printf("Hiba a hozzavalok letrehozasanal!\n");
+                    else Lista_hoz_beszur(temp_hozza,lista_hozza);
+                    break;
+                }
+            }
+            uj_rec->hozzavalok=lista_hozza;
+        }
+    }
+    #ifdef TESZT
+    fprintf(stdout,"----Beolvas_recept V�ge");
+    #endif
+    return uj_rec;
+}
+
+/** Param�terk�n �tvesz egy sornyi beolvasott hozz�val�t, amivel azt�n felt�lt egy Hozzavalo t�pus� dinamikusan fogalalt v�ltoz�t.
+* @param str param�terk�nt �tvett sztring, mely tartalmazza a beolvasott hozz�val�t
+* @param uj_hozz Dinamikusan fogalalt mem�ria egy hozz�val�nak
+* @param ujmenny ideiglenes t�rol�
+* @param ujmertek ideiglenes t�rol�
+* @param ujnev ideiglenes t�rol�
+* @return �rtelmezett hozz�val�ra mutatott pointerrel, NULL, ha nem siker�lt dinamikusan mem�ri�t foglalni.
+*/
+Hozzavalo* Beolvas_hozzavalo(char *str)
+{
+    #ifdef TESZT
+    fprintf(stdout,"Beolvas_hozzavalo f�ggv�ny: \n");
+    #endif
+    Hozzavalo* uj_hozz=(Hozzavalo*)malloc(sizeof(Hozzavalo));
+    if(uj_hozz!=NULL)
+    {
+        char ujmenny[255],ujmertek[255],ujnev[255];
+        sscanf(str,"%s %s ",ujmenny,ujmertek);
+        if(isdigit(ujmenny[0]))
+        {
+            int i,k;
+            uj_hozz->mennyiseg=atoi(ujmenny);
+            i=0;
+            while(strcmp(mertekegysegek_szovegben[i],ujmertek) && strcmp(mertekegysegek_szovegben[i],"")) i++;
+            if(!strcmp(mertekegysegek_szovegben[i],ujmertek)) uj_hozz->mertekegyseg=i;
+            else uj_hozz->mertekegyseg=ismeretlen;
+
+
+            k=strlen(ujmenny)+strlen(ujmertek)+2;
+            for(i=0;k<=(strlen(str));i++) ujnev[i]=str[k++];
+        }
+        else
+        {
+            strcpy(ujnev,str);
+            uj_hozz->mennyiseg=-1;
+            uj_hozz->mertekegyseg=-1;
+        }
+
+        strcpy(uj_hozz->nev,ujnev);
+        #ifdef TESZT
+        fprintf(stdout,"%s",ujnev);
+        fprintf(stdout,"----Beolvas_hozzavalo V�ge\n");
+        #endif
+    }
+    return uj_hozz;
+}
+
+/*void Beolvas_elkeszites()
+{
+    //h�ny utas�t�s lesz?
+    int i;
+    ujelem->elkeszites_db=atoi(temp);
+
+    //!a h�v� feladata felszabad�tani
+    lista_elem->elkeszites= (char **) malloc(lista_elem->elkeszites_db*sizeof(char*));
+
+    for(i=0;i<lista_elem->elkeszites_db;i++)
+    {
+        fgets(temp,400,fp);
+        lista_elem->elkeszites[i]=(char *) malloc((strlen(temp)+1)*sizeof(char));
+        strcpy(lista_elem->elkeszites[i],temp);
+    }
+    fgets(temp,400,fp);
+}*/
+
+void kiir(Lista_rec *lista)
+{
+    Hozzavalo *i;
+    printf("Az on valasztasa a %s receptje\n",lista->eleje->kovetkezo->nev);
+    printf("Nehezsegi szint: %2d/10\n",lista->eleje->kovetkezo->nehezseg);
+    printf("\r");
+    printf("Varhato idotartam: %d perc\n",lista->eleje->kovetkezo->fozesi_ido);
+
+    i=lista->eleje->kovetkezo->hozzavalok->vege->elozo;
+    printf("Hozzaval�k: \n");
+    while(i!=lista->eleje->kovetkezo->hozzavalok->eleje)
+    {
+        if(i->mennyiseg>0)
+        {
+            printf("%d %s %s\n",i->mennyiseg,mertekegysegek_szovegben[i->mertekegyseg],i->nev);
+        }
+        else
+        {
+            printf("%s\n",i->nev);
+        }
+        i=i->elozo;
+    }
+    //!Meg kell �rni, hogy csak egyet olvasson be amire sz�ks�g�nk van
+    /*printf("\nElkeszites:\n");
+    int k;
+    for(k=0;k<lista->eleje->kovetkezo->elkeszites_db;k++)
+    {
+        printf("%s\n",lista->eleje->kovetkezo->elkeszites[k]);
+    }*/
+}
+
+//A hozz�val�knak foglalt dinamikus mem�ria ter�letet felszabad�tja
+
+void szabadit_hozzavalok(Recept *eleje)
+{
+    #ifdef TESZT
+    fprintf(stdout,"Szabadit_hozzavalok: \n");
+    #endif
+    int db=0;
+    Recept *mozgo_rec;
+    Hozzavalo *mozgo_hoz,*kov;
+    for(mozgo_rec=eleje->kovetkezo;mozgo_rec->kovetkezo!=NULL;mozgo_rec=mozgo_rec->kovetkezo)
+    {
+        for(mozgo_hoz=mozgo_rec->hozzavalok->eleje->kovetkezo;mozgo_hoz->kovetkezo!=NULL;)
+        {
+            kov=mozgo_hoz->kovetkezo;
+            free(mozgo_hoz);
+            db++;
+            mozgo_hoz=kov;
+        }
+        free(mozgo_rec->hozzavalok->eleje);
+        free(mozgo_rec->hozzavalok->vege);
+    }
+    #ifdef TESZT
+    fprintf(stdout,"Felszabaditott hozzavalok: %d\n",db);
+    fprintf(stdout,"----Szabadit_hozzavalok V�ge\n");
+    #endif
+}
+
+//Az elk�sz�t�s m�dj�t t�rol� char m�trixnak foglalt ter�letet felszabad�tja
+void szabadit_elkeszites(char** pt,int db)
+{
+    int i;
+    for(i=0;i<db;i++)
+    {
+        free(pt[i]);
+    }
+    free(pt);
+}
+
+//A recept strukt�r�knak dinamikusan foglalt mem�ri�t felszabad�tja
+void szabadit_receptek(Recept *eleje)
+{
+    #ifdef TESZT
+    fprintf(stdout,"Szabadit_receptek: \n");
+    #endif
+    int db=0;
+    Recept *akt,*kov;
+    for(akt=eleje->kovetkezo;akt->kovetkezo!=NULL;)
+    {
+        kov=akt->kovetkezo;
+        free(akt);
+        db++;
+        akt=kov;
+    }
+    free(eleje);
+    #ifdef TESZT
+    fprintf(stdout,"Felszabaditott receptek: %d\n",db);
+    fprintf(stdout,"----Szabadit_hozzavalok V�ge\n");
+    #endif
+}
+#endif // BEOLVASO_FV
diff --git a/receptor/receptor.h.bak b/receptor/receptor.h.bak
new file mode 100644
index 0000000..ed8a023
--- /dev/null
+++ b/receptor/receptor.h.bak
@@ -0,0 +1,68 @@
+#include <stdio.h>
+#ifndef FEJLEC
+#define FEJLEC
+typedef enum menu {
+    alap=0,
+    betolt_adatok=1,
+    alapanyagok_beker=2,
+    kereses=3
+}menu;
+
+typedef enum beolvasas{
+    elso_szakasz,
+    hozzavalok_beolvas
+} beolvasas;
+
+typedef enum mertek{
+    mg=0,g,dkg,kg,ml,cl,dl,l,db,teaskanal,kiskanal,evokanal,merokanal,par,fej,gerezd,szelet,csomag,ismeretlen
+} mertek;
+/** Egy hozzávalót tároló struktúra.*/
+typedef struct Hozzavalo{
+    char nev[100];
+    int mennyiseg;
+    mertek mertekegyseg;
+    struct Hozzavalo *elozo;
+    struct Hozzavalo *kovetkezo;
+} Hozzavalo;
+
+typedef struct Lista_hoz{
+    Hozzavalo *eleje;
+    Hozzavalo *vege;
+}Lista_hoz;
+
+typedef struct Recept{
+    char nev[100];
+    char fajlnev[100];
+    int nehezseg;
+    int fozesi_ido;
+    Lista_hoz *hozzavalok;
+    int fo; //hány fő részére
+    int elkeszites_db;
+    char** elkeszites;
+    struct Recept *kovetkezo;
+    struct Recept *elozo;
+} Recept;
+
+//Láncolt lista adatszerkezet strázsája, pointerek a lista első és utolsó elemére
+typedef struct Lista_rec{
+    Recept *eleje;
+    Recept *vege;
+}Lista_rec;
+
+//char mertekegysegek_szovegben[][15]={"mg","g","dkg","kg","ml","cl","dl","l","db","teaskanal","kiskanal",
+//"evokanal","merokanal","pár","fej","gerezd","szelet","csomag",""};
+
+/*void Lista_hoz_beszur(Hozzavalo *uj,Lista_hoz *lista);
+void Lista_rec_beszur(Recept *uj,Lista_rec *lista);
+void Lista_hoz_init(Lista_hoz *lista);
+void Lista_rec_init(Lista_rec *lista);
+void Main_receptek(Lista_rec *lista);
+Recept* Beolvas_recept(FILE *fp,char * fajlnev);
+Hozzavalo* Beolvas_hozzavalo(char *str);
+void kiir(Lista_rec *lista);
+void szabadit_hozzavalok(Recept *eleje);
+void szabadit_elkeszites(char** pt,int db);
+void szabadit_receptek(Recept *eleje);*/
+
+#endif //FEJLEC
+
diff --git a/receptor/receptor.zip b/receptor/receptor.zip
deleted file mode 100644
index da94d664b111184fa8feee7cb5fbe4b0a8b2f4d7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4086
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%0A&yd!iR9B0n93BA+Np|1QTK)&?(
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
TpwM7pU|}#}WMEjs2jT$$Ew3h2

-- 
GitLab