diff --git a/receptor/00.txt b/receptor/00.txt new file mode 100644 index 0000000000000000000000000000000000000000..1794372ea2321e047044df2815bfbba2aba5914d --- /dev/null +++ b/receptor/00.txt @@ -0,0 +1,2 @@ +1 +01.txt diff --git a/receptor/01.txt b/receptor/01.txt new file mode 100644 index 0000000000000000000000000000000000000000..e7106a66951ee15fc84c0fe22c32c4fe9158b919 --- /dev/null +++ b/receptor/01.txt @@ -0,0 +1,25 @@ +Kelt tészta (pizza) +2 (nehezseg) +45 perc +Hozzavalok: +5 fő részére +1 kg liszt +250 ml tej +1 evokanal cukor +2 kocka élesztõ +1 dl olivaolaj +4 dl langyos víz +fokhagyma granulátum +pizzafûszerkeverék +só +Elkeszites: +9 lépésből áll +1. egy korsóba: langyos tej, cukor, élesztõ +2. korsó tartallmát villával elkeverni és valamivel lefedni 3-4 percre +3. lisztbe bele a korsó tartalma és ujjal kicsit elkeverni +4. takarja le 15 perce +5. adja hozzá az olajat, fokh. granulátumot, sót, fûszerkeveréket +6. kézzel elkeverni a vizet amit kis adagokban adunk hozzá a liszthez +7. két kézzel összegyúrni +8. 15 percet hagyd állni +9. serpenyõ alját lissztel vagy olajjal kend ki.... diff --git a/receptor/main.c b/receptor/main.c new file mode 100644 index 0000000000000000000000000000000000000000..d18d41846b5b87e130c6e528fe304606e96f544e --- /dev/null +++ b/receptor/main.c @@ -0,0 +1,359 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +//#include "debugmalloc.h" + +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; + +char mertekegysegek_szovegben[][15]={"mg","g","dkg","kg","ml","cl","dl","l","db","teaskanal","kiskanal", +"evokanal","merokanal","pár","fej","gerezd","szelet","csomag",""}; + +//Hozzávalók tárolására szolgáló struktúra +typedef struct Hozzavalo{ + char nev[100]; + int mennyiseg; + mertek mertekegyseg; + struct hozzavalo_struct *elozo; + struct Hozzavalot *kovetkezo; +} Hozzavalo; + +typedef struct Lista_hoz{ + Hozzavalo *eleje; + Hozzavalo *vege; +}Lista_hoz; + +//Recept adatstruktúra, mag +typedef struct Recept{ + char nev[100]; + char fajlnev[100]; + int nehezseg; + int fozesi_ido; //percben kifejezve + 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; + +void beszur_a_hoz_listaba(Hozzavalo * uj,Lista_hoz *lista) +{ + Hozzavalo *temp; + temp=lista->eleje->kovetkezo; + temp->elozo=uj; + uj->kovetkezo=lista->eleje->kovetkezo; + uj->elozo=lista->eleje; + lista->eleje->kovetkezo=uj; + +} + +void beszur_a_rec_listaba(Recept *uj,Lista_rec *lista) +{ + lista->eleje->kovetkezo->elozo=uj; + uj->kovetkezo=lista->eleje->kovetkezo; + uj->elozo=lista->eleje; + lista->eleje->kovetkezo=uj; +} + +//új hozzavalót befűzi a lista elejére +//!Minden egyes hozzávalóhoz külön foglalunk helyet, ami felszabadítása a hívó kötelessége +Hozzavalo* hozzavalo_beolvas(char *str) +{ + Hozzavalo* ujelem=(Hozzavalo*)malloc(sizeof(Hozzavalo)); + //új értékek beolvasása + char ujmenny[255],ujmertek[255],ujnev[255]; + sscanf(str,"%s %s ",ujmenny,ujmertek); + //!!le kell kezelni, hogy ne csak ilyen formátumban fogadja el és, hogy ha több fázisa van a hozzávalóknak: (1 dl tej)... Bevonó hozzávalói: + if(isdigit(ujmenny[0])) + { + ujelem->mennyiseg=atoi(ujmenny); + //állapítsuk meg milyen mértékegység + int i,k; + i=0; + while(strcmp(mertekegysegek_szovegben[i],ujmertek) && strcmp(mertekegysegek_szovegben[i],"")) i++; + + if(!strcmp(mertekegysegek_szovegben[i],ujmertek)) ujelem->mertekegyseg=i; + else ujelem->mertekegyseg=ismeretlen; + + + k=strlen(ujmenny)+strlen(ujmertek)+2; + for(i=0;k<=(strlen(str));i++) ujnev[i]=str[k++]; + } + else + { + strcpy(ujnev,str); + ujelem->mennyiseg=-1; + ujelem->mertekegyseg=-1; + } + + //név eltárolása + strcpy(ujelem->nev,ujnev); + + //visszatérünk az újdonsult elemmel + return ujelem; +} + +Recept* beolvas(FILE *fp,char * fajlnev) +{ + Recept* ujelem_2=(Recept*)malloc(sizeof(Recept)); + char temp[100]; + int temp_int; + + strcpy(ujelem_2->fajlnev,fajlnev); + + //NÉV beolvasása + fgets(temp,100,fp); + strcpy(ujelem_2->nev,temp); + + //nehézségi szint beolvasása + fgets(temp,100,fp); + sscanf(temp,"%d ",&temp_int); + ujelem_2->nehezseg=temp_int; + + //becsült elkészítési idő beolvasása + fgets(temp,100,fp); + sscanf(temp,"%d ",&temp_int); + ujelem_2->fozesi_ido=temp_int; + + //Hozzávalók beolvasása + beolvasas allapot; + allapot=elso_szakasz; + + Lista_hoz *ujlista=(Lista_hoz*)malloc(sizeof(Lista_hoz)); + ujlista->eleje=(Hozzavalo*)malloc(sizeof(Hozzavalo)); + ujlista->vege=(Hozzavalo*)malloc(sizeof(Hozzavalo)); + + ujlista->eleje->kovetkezo=ujlista->vege; + ujlista->eleje->elozo=NULL; + ujlista->vege->kovetkezo=NULL; + ujlista->vege->elozo=ujlista->eleje; + Hozzavalo *ujhozza; + 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); + ujelem_2->fo=temp_int; + } + break; + + case hozzavalok_beolvas: + ujhozza=hozzavalo_beolvas(temp); + beszur_a_hoz_listaba(ujhozza,ujlista); + break; + + /* + //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); + break;*/ + } + } + return ujelem_2; +} + +// +void lista_letrehoz(Lista_rec *lista) +{ + char temp[100]=""; + char fajlnev[50]; + int i; + FILE *fp_0=NULL; + FILE *fp=NULL; + Recept *ujelem; + + 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; + + fp_0=fopen("00.txt","rt"); + if(fp_0==NULL) printf("Nem sikerult megnyitni a fajlt!"); + else{ + //Beolvassuk hány db recept van + int db_rec; + fgets(temp,5,fp_0); + db_rec=atoi(temp); + for(i=0;i<db_rec;i++) + { + char c; + i=0; + fgets(temp,50,fp_0); + while(temp[i]!='\n') + { + fajlnev[i++]=temp[i]; + } + fajlnev[i]='\0'; + fp=fopen(fajlnev, "rt"); + if (fp==NULL) printf("Nem sikerult megnyitni a fajlt!"); + else + { + ujelem=beolvas(fp,fajlnev); + beszur_a_rec_listaba(ujelem,lista); + } + } + } +} + + +void beker_alapanyagok(); + +//Kiir egy Recept struktúrát, úgy hogx beolvassa az elkészítés menetétét is. +void kiir(Lista_rec *lista) +{ + 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); + Recept *egyik; + Hozzavalo *i; + egyik=lista->eleje->kovetkezo; + i=egyik->hozzavalok->vege; + 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) +{ + Recept *aktrec=eleje; + Hozzavalo *akt; + Hozzavalo *kov=NULL; + while(akt) + { + akt=aktrec->hozzavalok->eleje; + while(akt) + { + kov=akt->kovetkezo; + free(akt); + akt=kov; + } + akt=aktrec->hozzavalok->eleje->kovetkezo; + } +} + +//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) +{ + Recept *akt=eleje; + Recept *kov=NULL; + while(akt) + { + kov=akt->kovetkezo; + free(akt); + akt=kov; + } +} + +int main() +{ + //debugmalloc_naplofajl("dmalloc.txt"); + Lista_rec receptek; + Recept *temp; + menu fomenu; + fomenu=alap; + printf("Udvozlom a Receptor programban!\n"); + printf("Válasszon a felsorolt lehetőségek közül:\n"); + printf("1. Recept fajlok betoltese.\n"); + printf("2. Rendelkezesre allo alapanyagok megadasa:"); + printf("3. Keresd meg a legalkalmasabb receptet.\n"); + printf("4. Kilépés\n\n"); + while(fomenu>=0 && fomenu<4) + { + switch(fomenu) + { + case alap: + scanf("%d",&fomenu); + break; + case betolt_adatok: + printf("Ezen dolgozom\n"); + lista_letrehoz(&receptek); + kiir(&receptek); + szabadit_hozzavalok(receptek.eleje); + //szabadit_elkeszites(receptek.) + szabadit_receptek(receptek.eleje); + fomenu=alap; + break; + case alapanyagok_beker: + printf("Ezen is dolgozom\n"); + fomenu=alap; + break; + case kereses: + printf("Funkcio meg nem elerheto\n"); + fomenu=alap; + break; + default: + break; + } + } + return 0; +} diff --git a/receptor/receptor.cbp b/receptor/receptor.cbp new file mode 100644 index 0000000000000000000000000000000000000000..86b4e18581cb0964d9dfcff7c2c8ac581abee15b --- /dev/null +++ b/receptor/receptor.cbp @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<CodeBlocks_project_file> + <FileVersion major="1" minor="6" /> + <Project> + <Option title="receptor" /> + <Option pch_mode="2" /> + <Option compiler="gcc" /> + <Build> + <Target title="Debug"> + <Option output="bin/Debug/receptor" prefix_auto="1" extension_auto="1" /> + <Option object_output="obj/Debug/" /> + <Option type="1" /> + <Option compiler="gcc" /> + <Compiler> + <Add option="-g" /> + </Compiler> + </Target> + </Build> + <Compiler> + <Add option="-Wall" /> + </Compiler> + <Unit filename="debugmalloc.h" /> + <Unit filename="main.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="receptor.h" /> + <Extensions> + <code_completion /> + <debugger /> + <envvars /> + </Extensions> + </Project> +</CodeBlocks_project_file> diff --git a/receptor/receptor.h b/receptor/receptor.h new file mode 100644 index 0000000000000000000000000000000000000000..7fa759bb345c15e68bc30462ed189f8e894a95df --- /dev/null +++ b/receptor/receptor.h @@ -0,0 +1,16 @@ +typedef enum menu; +typedef struct Hozzavalo Hozzavalo; +typedef struct Lista_hoz Lista_hoz; +typedef struct Recept Recept; +typedef struct lista_recept Lista_rec; + +void beszur_a_hoz_listaba(Hozzavalo*,Lista_hoz*); +void beszur_a_rec_listaba(Recept*,Lista_rec*); +Hozzavalo* hozzavalo_beolvas(char*); +Recept* beolvas(FILE*,char*); +void lista_letrehoz(Lista_rec*); +void beker_alapanyagok(); +void kiir(Recept*); +void szabadit_hozzavalok(Hozzavalo*); +void szabadit_elkeszites(char**,int db); +void szabadit_receptek(Recept*);