Advertisement
Guest User

Untitled

a guest
Jan 17th, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.55 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define B 9
  5. #define STEP 1
  6. #define FAKTOR_BAKETIRANJA 5
  7.  
  8. typedef struct Grad
  9. {
  10. int evBr;
  11. char adresaPo[50];
  12. char dateTime[30];
  13. char adresaPri[50];
  14. int cena;
  15. int kljuc;
  16. int active;
  17.  
  18. }GRAD;
  19.  
  20. typedef struct Bucket
  21. {
  22. GRAD gradovi[FAKTOR_BAKETIRANJA];
  23. }BUCKET;
  24.  
  25.  
  26. void kreirajDatoteku(char* naziv)
  27. {
  28. FILE* f = fopen(naziv,"wb+");
  29. BUCKET* b = calloc(B,sizeof(BUCKET));
  30. fseek(f,0,SEEK_SET);
  31. fwrite(b,sizeof(BUCKET),B,f);
  32. fclose(f);
  33. }
  34.  
  35. FILE* otvoriDatoteku(char* naziv)
  36. {
  37. FILE* f = fopen(naziv,"rb+");
  38. if(f==NULL)
  39. {
  40. printf("Datoteka ne postoji\n");
  41. }
  42. else
  43. {
  44. printf("Datoteka uspesno otvorena\n");
  45. }
  46. return f;
  47. }
  48. void upisNovogSloga(GRAD grad, FILE* f)
  49. {
  50. fseek(f,grad.kljuc*sizeof(BUCKET),SEEK_SET);
  51. int c = grad.kljuc;
  52. int flag =0;
  53. BUCKET baket;
  54. while(fread(&baket,sizeof(BUCKET),1,f) && flag == 0 && c<B)
  55. {
  56. for(int i=0;i<FAKTOR_BAKETIRANJA;i++)
  57. {
  58. if(baket.gradovi[i].active != 1)
  59. {
  60. printf("NASLI SMO MESTO ZA UPISIVANJE\n");
  61. baket.gradovi[i] = grad;
  62. fseek(f,-sizeof(BUCKET),SEEK_CUR);
  63. fwrite(&baket,sizeof(BUCKET),1,f);
  64. printf("Slog uspesno sacuvan\n");
  65. flag = 1;
  66. break;
  67. }
  68. if(i = FAKTOR_BAKETIRANJA -1)
  69. {
  70. printf("STIGLI SMO DO KRAJA BAKETA, PRELAZIMO NA SLEDECI\n");
  71. fseek(f,STEP*sizeof(BUCKET),SEEK_CUR);
  72. }
  73. }
  74. c++;
  75. }
  76. if(flag == 0)
  77. {
  78. printf("OVERFLOW\n");
  79. GRAD g;
  80. int slogCount = 0;
  81. FILE* of = fopen("overflow.bin","rb+");
  82. while(fread(&g,sizeof(GRAD),1,of))
  83. {
  84. printf("Slog broj: %d",slogCount+1);
  85. slogCount++;
  86. }
  87. fwrite(&grad,sizeof(GRAD),1,of);
  88. printf("Slog uspesno sacuvan u overflow\n");
  89. fclose(of);
  90. }
  91. }
  92.  
  93. void ispisSvihSlogova(FILE* f)
  94. {
  95. BUCKET b;
  96. fseek(f,0,SEEK_SET);
  97. int bucketCount = 0;
  98. while(fread(&b,sizeof(BUCKET),1,f))
  99. {
  100. for(int i =0;i<FAKTOR_BAKETIRANJA;i++)
  101. {
  102. if(b.gradovi[i].active == 1)
  103. {
  104. printf("BAKET BROJ: %d, SLOG BROJ: %d\n",bucketCount+1,i+1);
  105. printf("Evidencioni broj:%d\tCena:%d\tAdresa posiljaoca:%s\tAdresa primaoca:%s\tDatum:%s\n",b.gradovi[i].evBr,b.gradovi[i].cena,b.gradovi[i].adresaPo,b.gradovi[i].adresaPri,b.gradovi[i].dateTime);
  106. }
  107. }
  108. bucketCount++;
  109. }
  110. }
  111.  
  112. void azuriranjeSloga(FILE* f, int evBr)
  113. {
  114. int key = evBr%B;
  115. fseek(f,sizeof(BUCKET)*key,SEEK_SET);
  116. int flag = 0;
  117. BUCKET bucket;
  118. while(fread(&bucket,sizeof(BUCKET),1,f) && flag ==0)
  119. {
  120. for(int i=0;i<FAKTOR_BAKETIRANJA;i++)
  121. {
  122. if(bucket.gradovi[i].evBr == evBr)
  123. {
  124. printf("Unesite novi datum\n");
  125. scanf("%s",bucket.gradovi[i].dateTime);
  126. fseek(f,-sizeof(BUCKET),SEEK_CUR);
  127. fwrite(&bucket,sizeof(BUCKET),1,f);
  128. flag=1;
  129. break;
  130. }
  131. }
  132. if(flag ==0)
  133. {
  134. printf("Slog sa takvom sifrom ne postoji\n");
  135. }
  136. }
  137.  
  138. }
  139.  
  140. void logickoBrisanje(FILE* f,int evBr)
  141. {
  142. int key = evBr%B;
  143. fseek(f,sizeof(BUCKET)*key,SEEK_SET);
  144. BUCKET baket;
  145. int flag =0;
  146. while(fread(&baket,sizeof(BUCKET),1,f) && flag ==0)
  147. {
  148. for(int i=0;i<FAKTOR_BAKETIRANJA;i++)
  149. {
  150. if(baket.gradovi[i].evBr==evBr)
  151. {
  152. baket.gradovi[i].active = 3;
  153. fseek(f,-sizeof(BUCKET),SEEK_CUR);
  154. fwrite(&baket,sizeof(BUCKET),1,f);
  155. flag = 1;
  156. break;
  157. }
  158. }
  159. }
  160. if(flag == 0)
  161. {
  162. printf("Slog sa tim evidencionim brojem ne postoji\n");
  163. }
  164. }
  165.  
  166. int main()
  167. {
  168. FILE* f;
  169. char naziv[20];
  170. while(1)
  171. {
  172. printf("1.Otvaranje datoteke\n");
  173. printf("2.Kreiranje datoteke\n");
  174. printf("3.Naziv otvorene datoteke\n");
  175. printf("4.Dodavanje slogova u datoteku\n");
  176. printf("5.Ispis svih slogova\n");
  177. printf("6.Modifikacija sloga\n");
  178. printf("7.Logicko brisanje sloga\n");
  179. printf("8.Exit\n");
  180.  
  181. int options;
  182. printf("Izaberite opciju\n");
  183. scanf(" %d",&options);
  184. switch(options)
  185. {
  186. case 1:
  187. {
  188. printf("Unesite naziv datoteke\n");
  189. scanf(" %s",naziv);
  190. f = otvoriDatoteku(naziv);
  191. break;
  192. }
  193. case 2:
  194. {
  195. printf("Unesite naziv datoteke\n");
  196. scanf(" %s",naziv);
  197. kreirajDatoteku(naziv);
  198. break;
  199. }
  200. case 3:
  201. {
  202. printf("Naziv datoteke: %s\n",naziv);
  203. break;
  204. }
  205. case 4:
  206. {
  207. GRAD grad;
  208. printf("Unesite adresu posiljaoca:\n");
  209. scanf(" %s", grad.adresaPo);
  210. printf("Unesite adresu primaoca:\n");
  211. scanf(" %s", grad.adresaPri);
  212. printf("Unesite cenu:\n");
  213. scanf(" %d", &grad.cena);
  214. printf("Unesite datum i vreme:\n");
  215. scanf(" %s", grad.dateTime);
  216. printf("Unesite evidencioni broj:\n");
  217. scanf(" %d", &grad.evBr);
  218. grad.active = 1;
  219. grad.kljuc = grad.evBr %B;
  220. upisNovogSloga(grad,f);
  221. break;
  222. }
  223. case 5:
  224. {
  225. ispisSvihSlogova(f);
  226. break;
  227. }
  228. case 6:
  229. {
  230. int evid;
  231. printf("Unesite evidencioni broj sloga koji zelite da promenite:\n");
  232. scanf("%d",&evid);
  233. azuriranjeSloga(f,evid);
  234. break;
  235. }
  236. case 7:
  237. {
  238. int evid;
  239. printf("Unesite evidencioni broj sloga koji zelite da obrisete:\n");
  240. scanf("%d",&evid);
  241. logickoBrisanje(f,evid);
  242. break;
  243. }
  244. case 8:
  245. {
  246. fclose(f);
  247. exit(0);
  248. }
  249. }
  250. }
  251. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement