diff --git a/receptor/beolvasofv.c b/receptor/beolvasofv.c new file mode 100644 index 0000000000000000000000000000000000000000..0e0d7eef5ff2b3d8b81f868ca730abf77955f856 --- /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 0000000000000000000000000000000000000000..ed8a023273b0ffe85c2a9e9b28f7848491fd2c6b --- /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 Binary files a/receptor/receptor.zip and /dev/null differ