Skip to content
Snippets Groups Projects
Commit 3323ae68 authored by tht_krisztian's avatar tht_krisztian
Browse files

Modulozva

parent e41b7579
Branches
No related tags found
No related merge requests found
1
01.txt
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
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....
#ifndef INCLUDES
#define INCLUDES
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#endif
#include "receptor.h"
#define TESZT
Recept* Beolvas_recept(FILE *fp,char * fajlnev);
Hozzavalo* Beolvas_hozzavalo(char *str);
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{
//Beolvassuk hány db recept van
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);
//NÉV beolvasása
fgets(temp,100,fp);
strcpy(uj_rec->nev,temp);
//nehézségi szint beolvasása
fgets(temp,100,fp);
sscanf(temp,"%d ",&temp_int);
uj_rec->nehezseg=temp_int;
//becsült elkészítési idő beolvasása
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
//Hozzávalók beolvasása
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 uj_hozz
* @param ujmenny
* @param ujmertek
* @param ujnev
* @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;
}
int main()
{
//debugmalloc_naplofajl("dmalloc.txt");
......@@ -245,29 +15,25 @@ int main()
int i;
menu fomenu;
fomenu=alap;
printf("Udvozlom a Receptor programban!\n");
printf("Válasszon a felsorolt lehetőségek közül:\n");
while(fomenu>=0 && fomenu<4)
{
printf("\nUdvozlom a Receptor programban!\n");
printf("Valasszon a felsorolt lehetosegek kozul:\n");
printf("1. Recept fajlok betoltese.\n");
printf("2. Rendelkezesre allo alapanyagok megadasa:");
printf("2. Rendelkezesre allo alapanyagok megadasa:\n");
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",&i);
fomenu=betolt_adatok;
fomenu=i;
break;
case betolt_adatok:
Main_receptek(&receptek);
#ifdef TESZT
fprintf(stdout,"MAIN PROGRAM\n");
#endif
//kiir(&receptek);
szabadit_hozzavalok(receptek.eleje);
//szabadit_elkeszites(receptek.)
szabadit_receptek(receptek.eleje);
fomenu=alap;
break;
case alapanyagok_beker:
......@@ -275,10 +41,13 @@ int main()
fomenu=alap;
break;
case kereses:
printf("Funkcio meg nem elerheto\n");
kiir(&receptek);
fomenu=alap;
break;
default:
szabadit_hozzavalok(receptek.eleje);
//szabadit_elkeszites(receptek.)
szabadit_receptek(receptek.eleje);
break;
}
}
......
......@@ -19,6 +19,9 @@
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="beolvasofv.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="debugmalloc.h" />
<Unit filename="main.c">
<Option compilerVar="CC" />
......
#define TESZT
#ifndef FEJLEC
#ifndef INCLUDES
#define INCLUDES
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#endif
#define FEJLEC
typedef enum menu {
alap=0,
betolt_adatok=1,
......@@ -33,7 +40,7 @@ typedef struct Recept{
char nev[100];
char fajlnev[100];
int nehezseg;
int fozesi_ido; //percben kifejezve
int fozesi_ido;
Lista_hoz *hozzavalok;
int fo; //hány fő részére
int elkeszites_db;
......@@ -48,119 +55,17 @@ typedef struct Lista_rec{
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 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);
break;*/
}
void kiir(Lista_rec *lista)
{
Recept *egyik;
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;
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
}
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment