Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct binaris_lancolt
- {
- int sorszam;
- char nev[101];
- int ar;
- struct binaris_lancolt *next;
- } binaris_lancolt;
- typedef struct txt_lancolt
- {
- char hozzavalok[10001];
- struct txt_lancolt *next;
- } txt_lancolt;
- typedef enum
- {
- MEGTEKINT=1,
- LETREHOZ,
- TOROL,
- STATISZTIKA,
- KILEP
- } lehetoseg;
- void lancolt_letrehoz(txt_lancolt **f, binaris_lancolt **h, FILE *t, FILE *b)
- {
- int szambe;
- char szovegnek[101];
- int i,j;
- int MAXMERET;
- binaris_lancolt *head, *binaris;
- txt_lancolt *fej, *txt;
- char sor[10001];
- head=NULL;
- fej=NULL;
- fread(&MAXMERET,sizeof(int),1,b);
- for(i=0;i<MAXMERET;i++)
- {
- binaris=(binaris_lancolt*)malloc(sizeof(binaris_lancolt));
- binaris->next=head;
- head=binaris;
- fread(&szambe,sizeof(int),1,b);
- binaris->sorszam=szambe;
- j=0;
- do
- {
- szovegnek[j]=fgetc(b);
- j++;
- } while(szovegnek[j-1]!='\0');
- strcpy(binaris->nev, szovegnek);
- fread(&szambe,sizeof(int),1,b);
- binaris->ar=szambe;
- fgetc(b); //ujsor elvetése \r
- fgetc(b); //ujsor elvetése \n
- }
- while(fgets(sor, sizeof(sor), t)!=NULL)
- {
- txt=(txt_lancolt*)malloc(sizeof(txt_lancolt));
- txt->next=fej;
- fej=txt;
- sor[strlen(sor)-1] = '\0';
- strcpy(txt->hozzavalok, sor);
- }
- *f=fej;
- *h=head;
- }
- void lancolt_megfordit(txt_lancolt **f, binaris_lancolt **h)
- {
- txt_lancolt *fej, *tforditott, *t;
- binaris_lancolt *head, *bforditott, *b;
- tforditott=NULL;
- bforditott=NULL;
- fej=*f;
- head=*h;
- while(fej!=NULL)
- {
- t=fej->next;
- fej->next=tforditott;
- tforditott=fej;
- fej=t;
- }
- *f=tforditott;
- while(head!=NULL)
- {
- b=head->next;
- head->next=bforditott;
- bforditott=head;
- head=b;
- }
- *h=bforditott;
- }
- int lehetosegek()
- {
- int a;
- printf("Mit szeretnel? Nyomd meg a megfelelo gombot\n1. A recepteket megtekinteni\n2. Uj receptet hozzaadni\n3. Receptet torolni\n4. Statisztika\n5. Kilep\n");
- scanf_s("%d", &a);
- switch(a)
- {
- case 1: return MEGTEKINT;
- case 2: return LETREHOZ;
- case 3: return TOROL;
- case 4: return STATISZTIKA;
- case 5: return KILEP;
- }
- return -1;
- }
- //MEGTEKINTÉSES FÜGGVÉNYEK:
- void lehetoseg_kilistaz(binaris_lancolt *h)
- {
- binaris_lancolt *p;
- for(p=h; p!=NULL; p=p->next)
- {
- printf("%d %s\n", p->sorszam, p->nev);
- }
- }
- int lehetoseg_valasztas()
- {
- int a;
- printf("Melyik etel hozzavaloira vagy kivancsi? Ird be a megfelelo szamot.\n");
- scanf("%d", &a);
- return a;
- }
- void hozzavalo_kiir(int valasztas, txt_lancolt *f, binaris_lancolt *h)
- {
- txt_lancolt *t;
- binaris_lancolt *b;
- int ell=0;
- for(b=h, t=f; b!=NULL; b=b->next, t=t->next)
- {
- if(valasztas==b->sorszam)
- {
- printf("%s\n", t->hozzavalok);
- ell=1; //ha választott sorszámot, ami a listában van
- }
- }
- if(ell!=1) //ha olyan sorszámot választott, ami nincs a listában
- {
- printf("Ilyen sorszamu etel nincs! Probalkozz ujra\n");
- valasztas=lehetoseg_valasztas();
- hozzavalo_kiir(valasztas, f, h);
- }
- }
- //HOZZÁADÓS FÜGGVÉNYEK:
- void hozzair(txt_lancolt **f, binaris_lancolt **h)
- {
- txt_lancolt *txt, *fej, *t;
- binaris_lancolt *binaris, *head, *b;
- char etel[101], hozzav[10001];
- int a;
- head=*h;
- fej=*f;
- for(b=head; b->next!=NULL; b=b->next);
- binaris=(binaris_lancolt*)malloc(sizeof(binaris_lancolt));
- b->next=binaris;
- (binaris->next)=NULL;
- for(t=fej; t->next!=NULL; t=t->next);
- txt=(txt_lancolt*)malloc(sizeof(txt_lancolt));
- t->next=txt;
- (txt->next)=NULL;
- fflush(stdin); //hogy az első fgets működjön normálisan
- printf("Mi az etel neve? (max 100 karakter)\n");
- fgets(binaris->nev, 101, stdin);
- (binaris->nev)[strlen(binaris->nev)-1]='\0';
- printf("Milyen hozzavalok kellenek hozza? Minden hozzavalo elott hasznalja a | karaktert. Pl. |2 hagyma |3 paradicsom |9paprika. (osszesen max 10000 karaktert hasznalhat)\n");
- fgets(txt->hozzavalok, 10001, stdin);
- txt->hozzavalok[strlen(txt->hozzavalok)-1]='\0';
- printf("A hozzavalok osszesen mennyibe kerulnek?\n");
- scanf("%d", &a);
- binaris->ar=a;
- for(b=head; b->next->next!=NULL; b=b->next);
- (binaris->sorszam)=(b->sorszam)+1;
- *f=fej;
- *h=head;
- }
- //TÖRLŐS FÜGGVÉNYEK:
- int lehetoseg_torol()
- {
- int a;
- printf("Melyik etelt szeretned torolni? Ird be a megfelelo szamot.\n");
- scanf("%d", &a);
- return a;
- }
- void elem_torol(binaris_lancolt **h, txt_lancolt **f, int a)
- {
- binaris_lancolt *b, *bin, *head;
- txt_lancolt *t, *txt, *fej;
- int db=0, sorsz=1;
- head=*h;
- fej=*f;
- if(a==1)
- {
- b=head;
- head=head->next;
- free(b);
- t=fej;
- fej=fej->next;
- free(t);
- for(b=head; b!=NULL; b=b->next) //sorszámcsökkentés
- {
- (b->sorszam)=(b->sorszam)-1;
- }
- }
- for(b=head, t=fej; b!=NULL; b=b->next, t=t->next)
- {
- db++;
- }
- if(a==db)
- {
- b=head;
- while(b->next->next!=NULL)
- {
- b=b->next ;
- }
- free(b->next);
- b->next=NULL;
- t=fej;
- while(t->next->next!=NULL)
- {
- t=t->next;
- }
- free(t->next);
- t->next=NULL;
- }
- if(a>1 && a<db)
- {
- for(b=head, t=fej; b!=NULL; b=b->next, t=t->next)
- {
- bin=b->next;
- txt=t->next;
- sorsz++;
- if(sorsz==a)
- {
- b->next=bin->next;
- free(bin);
- t->next=txt->next;
- free(txt);
- }
- }
- for(b=head, t=fej; b!=NULL; b=b->next, t=t->next)
- {
- if(a<b->sorszam)
- {
- b->sorszam=(b->sorszam)-1;
- }
- }
- }
- if(a<1 || a>db)
- {
- printf("Ilyen sorszamu elem nincs! Probalkozz ujra!\n");
- a=lehetoseg_torol();
- elem_torol(&head, &fej, a);
- }
- *h=head;
- *f=fej;
- }
- //STATISZTIKÁS FÜGGVÉNYEK:
- int szamol(char *c)
- {
- int i, n=0;
- for(i=0; i<=strlen(c); i++)
- {
- if(c[i]=='|')
- {
- n++;
- }
- }
- return n;
- }
- void atlag_hozzavalo(txt_lancolt *f)
- {
- int dbt=0;
- double atlag, db=0;
- txt_lancolt *t;
- for(t=f; t!=NULL; t=t->next)
- {
- db=db+szamol(t->hozzavalok);
- dbt++;
- }
- atlag=db/dbt;
- printf("Egy etelhez atlagosan %lf hozzavalo kell\n", atlag);
- }
- void atlag_ar(binaris_lancolt *h)
- {
- binaris_lancolt *p;
- double ar=0, n=0;
- for(p=h; p!=NULL; p=p->next)
- {
- ar=ar+(p->ar);
- n++;
- }
- printf("Atlagosan %lf forint kell az etel hozzavaloihoz\n", ar/n);
- }
- //MENÜ:
- void menu(txt_lancolt **f, binaris_lancolt **h)
- {
- int valasztas, lehetosegv;
- binaris_lancolt *head;
- txt_lancolt *fej;
- fej=*f;
- head=*h;
- valasztas=lehetosegek();
- while(valasztas!=KILEP)
- {
- if(valasztas==-1)
- {
- printf("Ilyen opcio nincs, probalkozz ujra!\n");
- }
- if(valasztas==MEGTEKINT)
- {
- lehetoseg_kilistaz(head);
- lehetosegv=lehetoseg_valasztas();
- hozzavalo_kiir(lehetosegv, fej, head);
- }
- if(valasztas==LETREHOZ)
- {
- hozzair(&fej, &head);
- }
- if(valasztas==TOROL)
- {
- lehetoseg_kilistaz(head);
- lehetosegv=lehetoseg_torol();
- elem_torol(&head, &fej, lehetosegv);
- }
- if(valasztas==STATISZTIKA)
- {
- atlag_hozzavalo(fej);
- atlag_ar(head);
- }
- valasztas=lehetosegek();
- }
- printf("Koszonom, hogy hasznaltad a programot!\n");
- }
- //FÁJL FELÜLÍRÁSA:
- void bfajl_felulir(binaris_lancolt *h, FILE *bw)
- {
- int MAXMERET=0, j;
- binaris_lancolt *b, *head;
- for(b=h; b!=NULL; b=b->next)
- {
- MAXMERET++;
- }
- fwrite(&MAXMERET, sizeof(int), 1, bw);
- for(head=h; head!=NULL; head=head->next)
- {
- fwrite(&(head->sorszam), sizeof(int), 1, bw);
- j=0;
- do
- {
- fputc((head->nev[j]), bw);
- j++;
- } while((head->nev[j-1])!='\0');
- fwrite(&(head->ar), sizeof(int), 1, bw);
- fputc('\r', bw);
- fputc('\n', bw);
- }
- }
- void tfajl_felulir(txt_lancolt *f, FILE *tw)
- {
- txt_lancolt *fej;
- for(fej=f; fej!=NULL; fej=fej->next)
- {
- fprintf(tw, "%s\n", fej->hozzavalok);
- }
- }
- //LÁNCOLT LISTA FELSZABADÍTÁSA:
- void felszabadit(txt_lancolt **f, binaris_lancolt **h)
- {
- txt_lancolt *fej, *t;
- binaris_lancolt *head, *b;
- head=*h;
- fej=*f;
- while(head!=NULL)
- {
- b=head;
- head=head->next;
- free(b);
- }
- while(fej!=NULL)
- {
- t=fej;
- fej=fej->next;
- free(t);
- }
- *h=head;
- *f=fej;
- }
- int main()
- {
- FILE *b, *t, *bw, *tw;
- binaris_lancolt *head, *binaris;
- txt_lancolt *fej, *txt;
- b=fopen("adat.dat", "rb");
- t=fopen("hozzavalok.txt", "r");
- if(b!=NULL && t!=NULL)
- {
- lancolt_letrehoz(&fej, &head, t, b);
- lancolt_megfordit(&fej, &head);
- fclose(b);
- fclose(t);
- menu(&fej, &head);
- bw=fopen("adat.dat", "wb");
- tw=fopen("hozzavalok.txt", "w");
- bfajl_felulir(head, bw);
- tfajl_felulir(fej, tw);
- fclose(bw);
- fclose(tw);
- felszabadit(&fej, &head);
- }
- if(b==NULL)
- {
- perror ( "binaris.dat" );
- }
- if(t==NULL)
- {
- perror("hozzavalok.txt");
- }
- getchar();
- getchar();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement