Advertisement
viktorka01

Untitled

Dec 1st, 2015
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.03 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.  
  6. typedef struct binaris_lancolt
  7. {
  8. int sorszam;
  9. char nev[101];
  10. int ar;
  11. struct binaris_lancolt *next;
  12. } binaris_lancolt;
  13.  
  14. typedef struct txt_lancolt
  15. {
  16. char hozzavalok[10001];
  17. struct txt_lancolt *next;
  18. } txt_lancolt;
  19.  
  20. typedef enum
  21. {
  22. MEGTEKINT=1,
  23. LETREHOZ,
  24. TOROL,
  25. STATISZTIKA,
  26. KILEP
  27. } lehetoseg;
  28.  
  29.  
  30. void lancolt_letrehoz(txt_lancolt **f, binaris_lancolt **h, FILE *t, FILE *b)
  31. {
  32. int szambe;
  33. char szovegnek[101];
  34. int i,j;
  35. int MAXMERET;
  36. binaris_lancolt *head, *binaris;
  37. txt_lancolt *fej, *txt;
  38. char sor[10001];
  39.  
  40. head=NULL;
  41. fej=NULL;
  42.  
  43. fread(&MAXMERET,sizeof(int),1,b);
  44. for(i=0;i<MAXMERET;i++)
  45. {
  46. binaris=(binaris_lancolt*)malloc(sizeof(binaris_lancolt));
  47. binaris->next=head;
  48. head=binaris;
  49. fread(&szambe,sizeof(int),1,b);
  50. binaris->sorszam=szambe;
  51. j=0;
  52. do
  53. {
  54. szovegnek[j]=fgetc(b);
  55. j++;
  56. } while(szovegnek[j-1]!='\0');
  57. strcpy(binaris->nev, szovegnek);
  58. fread(&szambe,sizeof(int),1,b);
  59. binaris->ar=szambe;
  60. fgetc(b); //ujsor elvetése \r
  61. fgetc(b); //ujsor elvetése \n
  62. }
  63.  
  64. while(fgets(sor, sizeof(sor), t)!=NULL)
  65. {
  66. txt=(txt_lancolt*)malloc(sizeof(txt_lancolt));
  67. txt->next=fej;
  68. fej=txt;
  69. sor[strlen(sor)-1] = '\0';
  70. strcpy(txt->hozzavalok, sor);
  71. }
  72. *f=fej;
  73. *h=head;
  74. }
  75.  
  76. void lancolt_megfordit(txt_lancolt **f, binaris_lancolt **h)
  77. {
  78. txt_lancolt *fej, *tforditott, *t;
  79. binaris_lancolt *head, *bforditott, *b;
  80.  
  81. tforditott=NULL;
  82. bforditott=NULL;
  83. fej=*f;
  84. head=*h;
  85.  
  86. while(fej!=NULL)
  87. {
  88. t=fej->next;
  89. fej->next=tforditott;
  90. tforditott=fej;
  91. fej=t;
  92. }
  93. *f=tforditott;
  94.  
  95. while(head!=NULL)
  96. {
  97. b=head->next;
  98. head->next=bforditott;
  99. bforditott=head;
  100. head=b;
  101. }
  102. *h=bforditott;
  103. }
  104.  
  105. int lehetosegek()
  106. {
  107. int a;
  108. printf("Mit szeretnel? Nyomd meg a megfelelo gombot\n1. A recepteket megtekinteni\n2. Uj receptet hozzaadni\n3. Receptet torolni\n4. Statisztika\n5. Kilep\n");
  109. scanf_s("%d", &a);
  110. switch(a)
  111. {
  112. case 1: return MEGTEKINT;
  113. case 2: return LETREHOZ;
  114. case 3: return TOROL;
  115. case 4: return STATISZTIKA;
  116. case 5: return KILEP;
  117. }
  118. return -1;
  119. }
  120.  
  121.  
  122. //MEGTEKINTÉSES FÜGGVÉNYEK:
  123. void lehetoseg_kilistaz(binaris_lancolt *h)
  124. {
  125. binaris_lancolt *p;
  126. for(p=h; p!=NULL; p=p->next)
  127. {
  128. printf("%d %s\n", p->sorszam, p->nev);
  129. }
  130. }
  131.  
  132. int lehetoseg_valasztas()
  133. {
  134. int a;
  135. printf("Melyik etel hozzavaloira vagy kivancsi? Ird be a megfelelo szamot.\n");
  136. scanf("%d", &a);
  137. return a;
  138. }
  139.  
  140. void hozzavalo_kiir(int valasztas, txt_lancolt *f, binaris_lancolt *h)
  141. {
  142. txt_lancolt *t;
  143. binaris_lancolt *b;
  144. int ell=0;
  145. for(b=h, t=f; b!=NULL; b=b->next, t=t->next)
  146. {
  147. if(valasztas==b->sorszam)
  148. {
  149. printf("%s\n", t->hozzavalok);
  150. ell=1; //ha választott sorszámot, ami a listában van
  151. }
  152. }
  153. if(ell!=1) //ha olyan sorszámot választott, ami nincs a listában
  154. {
  155. printf("Ilyen sorszamu etel nincs! Probalkozz ujra\n");
  156. valasztas=lehetoseg_valasztas();
  157. hozzavalo_kiir(valasztas, f, h);
  158. }
  159. }
  160.  
  161.  
  162. //HOZZÁADÓS FÜGGVÉNYEK:
  163. void hozzair(txt_lancolt **f, binaris_lancolt **h)
  164. {
  165. txt_lancolt *txt, *fej, *t;
  166. binaris_lancolt *binaris, *head, *b;
  167. char etel[101], hozzav[10001];
  168. int a;
  169.  
  170. head=*h;
  171. fej=*f;
  172.  
  173. for(b=head; b->next!=NULL; b=b->next);
  174. binaris=(binaris_lancolt*)malloc(sizeof(binaris_lancolt));
  175. b->next=binaris;
  176. (binaris->next)=NULL;
  177. for(t=fej; t->next!=NULL; t=t->next);
  178. txt=(txt_lancolt*)malloc(sizeof(txt_lancolt));
  179. t->next=txt;
  180. (txt->next)=NULL;
  181.  
  182. fflush(stdin); //hogy az első fgets működjön normálisan
  183. printf("Mi az etel neve? (max 100 karakter)\n");
  184. fgets(binaris->nev, 101, stdin);
  185. (binaris->nev)[strlen(binaris->nev)-1]='\0';
  186.  
  187. printf("Milyen hozzavalok kellenek hozza? Minden hozzavalo elott hasznalja a | karaktert. Pl. |2 hagyma |3 paradicsom |9paprika. (osszesen max 10000 karaktert hasznalhat)\n");
  188. fgets(txt->hozzavalok, 10001, stdin);
  189. txt->hozzavalok[strlen(txt->hozzavalok)-1]='\0';
  190.  
  191. printf("A hozzavalok osszesen mennyibe kerulnek?\n");
  192. scanf("%d", &a);
  193. binaris->ar=a;
  194.  
  195. for(b=head; b->next->next!=NULL; b=b->next);
  196. (binaris->sorszam)=(b->sorszam)+1;
  197. *f=fej;
  198. *h=head;
  199. }
  200.  
  201.  
  202. //TÖRLŐS FÜGGVÉNYEK:
  203. int lehetoseg_torol()
  204. {
  205. int a;
  206. printf("Melyik etelt szeretned torolni? Ird be a megfelelo szamot.\n");
  207. scanf("%d", &a);
  208. return a;
  209. }
  210.  
  211. void elem_torol(binaris_lancolt **h, txt_lancolt **f, int a)
  212. {
  213. binaris_lancolt *b, *bin, *head;
  214. txt_lancolt *t, *txt, *fej;
  215. int db=0, sorsz=1;
  216.  
  217. head=*h;
  218. fej=*f;
  219.  
  220. if(a==1)
  221. {
  222. b=head;
  223. head=head->next;
  224. free(b);
  225.  
  226. t=fej;
  227. fej=fej->next;
  228. free(t);
  229.  
  230. for(b=head; b!=NULL; b=b->next) //sorszámcsökkentés
  231. {
  232. (b->sorszam)=(b->sorszam)-1;
  233. }
  234. }
  235.  
  236. for(b=head, t=fej; b!=NULL; b=b->next, t=t->next)
  237. {
  238. db++;
  239. }
  240.  
  241. if(a==db)
  242. {
  243. b=head;
  244. while(b->next->next!=NULL)
  245. {
  246. b=b->next ;
  247. }
  248. free(b->next);
  249. b->next=NULL;
  250.  
  251. t=fej;
  252. while(t->next->next!=NULL)
  253. {
  254. t=t->next;
  255. }
  256. free(t->next);
  257. t->next=NULL;
  258. }
  259.  
  260. if(a>1 && a<db)
  261. {
  262. for(b=head, t=fej; b!=NULL; b=b->next, t=t->next)
  263. {
  264. bin=b->next;
  265. txt=t->next;
  266. sorsz++;
  267. if(sorsz==a)
  268. {
  269. b->next=bin->next;
  270. free(bin);
  271. t->next=txt->next;
  272. free(txt);
  273. }
  274. }
  275.  
  276. for(b=head, t=fej; b!=NULL; b=b->next, t=t->next)
  277. {
  278. if(a<b->sorszam)
  279. {
  280. b->sorszam=(b->sorszam)-1;
  281. }
  282. }
  283. }
  284.  
  285. if(a<1 || a>db)
  286. {
  287. printf("Ilyen sorszamu elem nincs! Probalkozz ujra!\n");
  288. a=lehetoseg_torol();
  289. elem_torol(&head, &fej, a);
  290. }
  291.  
  292. *h=head;
  293. *f=fej;
  294. }
  295.  
  296.  
  297. //STATISZTIKÁS FÜGGVÉNYEK:
  298. int szamol(char *c)
  299. {
  300. int i, n=0;
  301. for(i=0; i<=strlen(c); i++)
  302. {
  303. if(c[i]=='|')
  304. {
  305. n++;
  306. }
  307. }
  308. return n;
  309. }
  310.  
  311. void atlag_hozzavalo(txt_lancolt *f)
  312. {
  313. int dbt=0;
  314. double atlag, db=0;
  315. txt_lancolt *t;
  316. for(t=f; t!=NULL; t=t->next)
  317. {
  318. db=db+szamol(t->hozzavalok);
  319. dbt++;
  320. }
  321. atlag=db/dbt;
  322. printf("Egy etelhez atlagosan %lf hozzavalo kell\n", atlag);
  323. }
  324.  
  325. void atlag_ar(binaris_lancolt *h)
  326. {
  327. binaris_lancolt *p;
  328. double ar=0, n=0;
  329. for(p=h; p!=NULL; p=p->next)
  330. {
  331. ar=ar+(p->ar);
  332. n++;
  333. }
  334. printf("Atlagosan %lf forint kell az etel hozzavaloihoz\n", ar/n);
  335. }
  336.  
  337.  
  338. //MENÜ:
  339. void menu(txt_lancolt **f, binaris_lancolt **h)
  340. {
  341. int valasztas, lehetosegv;
  342. binaris_lancolt *head;
  343. txt_lancolt *fej;
  344.  
  345. fej=*f;
  346. head=*h;
  347.  
  348. valasztas=lehetosegek();
  349.  
  350. while(valasztas!=KILEP)
  351. {
  352. if(valasztas==-1)
  353. {
  354. printf("Ilyen opcio nincs, probalkozz ujra!\n");
  355. }
  356.  
  357. if(valasztas==MEGTEKINT)
  358. {
  359. lehetoseg_kilistaz(head);
  360. lehetosegv=lehetoseg_valasztas();
  361. hozzavalo_kiir(lehetosegv, fej, head);
  362. }
  363. if(valasztas==LETREHOZ)
  364. {
  365. hozzair(&fej, &head);
  366. }
  367. if(valasztas==TOROL)
  368. {
  369. lehetoseg_kilistaz(head);
  370. lehetosegv=lehetoseg_torol();
  371. elem_torol(&head, &fej, lehetosegv);
  372. }
  373. if(valasztas==STATISZTIKA)
  374. {
  375. atlag_hozzavalo(fej);
  376. atlag_ar(head);
  377. }
  378. valasztas=lehetosegek();
  379. }
  380. printf("Koszonom, hogy hasznaltad a programot!\n");
  381. }
  382.  
  383.  
  384. //FÁJL FELÜLÍRÁSA:
  385. void bfajl_felulir(binaris_lancolt *h, FILE *bw)
  386. {
  387. int MAXMERET=0, j;
  388. binaris_lancolt *b, *head;
  389.  
  390. for(b=h; b!=NULL; b=b->next)
  391. {
  392. MAXMERET++;
  393. }
  394.  
  395. fwrite(&MAXMERET, sizeof(int), 1, bw);
  396. for(head=h; head!=NULL; head=head->next)
  397. {
  398. fwrite(&(head->sorszam), sizeof(int), 1, bw);
  399. j=0;
  400. do
  401. {
  402. fputc((head->nev[j]), bw);
  403. j++;
  404. } while((head->nev[j-1])!='\0');
  405. fwrite(&(head->ar), sizeof(int), 1, bw);
  406. fputc('\r', bw);
  407. fputc('\n', bw);
  408. }
  409. }
  410.  
  411.  
  412. void tfajl_felulir(txt_lancolt *f, FILE *tw)
  413. {
  414. txt_lancolt *fej;
  415. for(fej=f; fej!=NULL; fej=fej->next)
  416. {
  417. fprintf(tw, "%s\n", fej->hozzavalok);
  418. }
  419. }
  420.  
  421.  
  422. //LÁNCOLT LISTA FELSZABADÍTÁSA:
  423. void felszabadit(txt_lancolt **f, binaris_lancolt **h)
  424. {
  425. txt_lancolt *fej, *t;
  426. binaris_lancolt *head, *b;
  427.  
  428. head=*h;
  429. fej=*f;
  430.  
  431. while(head!=NULL)
  432. {
  433. b=head;
  434. head=head->next;
  435. free(b);
  436. }
  437.  
  438. while(fej!=NULL)
  439. {
  440. t=fej;
  441. fej=fej->next;
  442. free(t);
  443. }
  444.  
  445. *h=head;
  446. *f=fej;
  447. }
  448.  
  449.  
  450.  
  451. int main()
  452. {
  453. FILE *b, *t, *bw, *tw;
  454. binaris_lancolt *head, *binaris;
  455. txt_lancolt *fej, *txt;
  456.  
  457. b=fopen("adat.dat", "rb");
  458. t=fopen("hozzavalok.txt", "r");
  459.  
  460. if(b!=NULL && t!=NULL)
  461. {
  462. lancolt_letrehoz(&fej, &head, t, b);
  463. lancolt_megfordit(&fej, &head);
  464.  
  465. fclose(b);
  466. fclose(t);
  467.  
  468. menu(&fej, &head);
  469.  
  470. bw=fopen("adat.dat", "wb");
  471. tw=fopen("hozzavalok.txt", "w");
  472.  
  473. bfajl_felulir(head, bw);
  474. tfajl_felulir(fej, tw);
  475.  
  476. fclose(bw);
  477. fclose(tw);
  478.  
  479. felszabadit(&fej, &head);
  480. }
  481.  
  482. if(b==NULL)
  483. {
  484. perror ( "binaris.dat" );
  485. }
  486.  
  487. if(t==NULL)
  488. {
  489. perror("hozzavalok.txt");
  490. }
  491.  
  492. getchar();
  493. getchar();
  494. return 0;
  495. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement