Advertisement
Guest User

Gotovo :D

a guest
May 23rd, 2015
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.21 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<math.h>
  5. #define C (BLOK/sizeof(zapis)) //9
  6. #define N 10000
  7. #define M (int)( (double)N*1.20/C) //1333
  8. #define BLOK 512
  9.  
  10. typedef struct{
  11. int ID_klijenta;
  12. char prezime[20+1];
  13. char ime[20+1];
  14. float stanje_na_racunu;
  15. }zapis;
  16. zapis podaci;
  17.  
  18. //typedef int tip;
  19.  
  20. struct at {
  21. int element;
  22. struct at *sljed;
  23. };
  24. typedef struct at atom;
  25.  
  26.  
  27.  
  28. int dodaj (atom **glavap, int element) {
  29. atom *novi, *p;
  30. if ((novi = (atom *) malloc(sizeof(atom))) == NULL)
  31. return 0;
  32. novi->element = element;
  33. if (*glavap == NULL || (*glavap)->element >= element) {
  34. // Dodavanje na pocetak liste
  35. novi->sljed = *glavap;
  36. *glavap = novi;
  37. } else {
  38. // Dodavanje iza postojeceg elementa kad:
  39. // a) postojeæi atom nema sljedeæeg
  40. // b) element u sljedecem cvoru je veci ili jednak novome
  41. for (p = *glavap; p->sljed && (p->sljed)->element < element; p = p->sljed);
  42. novi->sljed = p->sljed;
  43. p->sljed = novi;
  44. }
  45. return 1;
  46. }
  47.  
  48. /*
  49. Trazi- funkcija koja vraca poziciju trazenog elementa u listi
  50. */
  51. int trazi (atom *glava, int element) {
  52. atom *p;
  53. int pozicija=0;
  54. for (p = glava; p != NULL; p = p->sljed) {
  55. pozicija++;
  56. if (p ->element == element) return pozicija-1;
  57. }
  58. printf("Fatal error!");
  59. exit (-5);
  60. }
  61.  
  62.  
  63. int main(void){
  64. int element;
  65. int korak;
  66. FILE *fu=NULL;
  67. FILE *fi=NULL;
  68. FILE *ft=NULL;
  69. atom *glava=NULL;
  70.  
  71. fu=fopen("podaci.dat","r");
  72. if(fu==NULL){
  73. printf("Otvaranje datoteke \"podaci.dat\" nije uspjelo. Prekidam.\n");
  74. exit (-1);
  75. }
  76. fi=fopen("podaci.bin","wb+");
  77. if(fi==NULL){
  78. printf("Stvaranje ili otvaranje datoteke \"podaci.bin\" nije uspjelo. Prekidam.\n");
  79. exit (-2);
  80. }
  81. ft=fopen("sortirano.dat","w");
  82. if(ft==NULL){
  83. printf("Stvaranje ili otvaranje datoteke \"sortirano.dat\" nije uspjelo. Prekidam.\n");
  84. exit (-3);
  85. }
  86.  
  87. /* Zapisujem sve podatke u strukturu podaci[N];
  88. */
  89. int i;
  90. char charID[100]; //jer kad citam mi spremi kao char,a meni u podaci.ID_klijenta mora bit int
  91. fseek(fu,0L,SEEK_SET);
  92. fseek(fi,0L,SEEK_SET);
  93. for(i=0;i<N;i++){
  94. fscanf(fu,"%[^\;];%[^\;];%[^\;];%f",charID,&podaci.ime,&podaci.prezime,&podaci.stanje_na_racunu);
  95. podaci.ID_klijenta=atoi(charID);
  96. /*
  97. Trenutno citam redak po redak iz tekstualne datoteke "podaci.dat". (Odnosno podatak o svakoj osobi- 1 po 1)
  98. */
  99.  
  100. /*
  101. Sada slijedi prepis iz "podaci.dat" u "podaci.bin",za svaku osobu- 1 po 1
  102. */
  103.  
  104. fwrite(&podaci,sizeof(podaci),1,fi);
  105. /*
  106. puni listu
  107. */
  108. korak=dodaj(&glava, podaci.ID_klijenta);
  109. if(korak==0){
  110. printf("Prilikom upisa podataka u listu ponestalo je memorije na disku. Prekidam...\n");
  111. exit (-4);
  112. }
  113.  
  114. }
  115. /*
  116. Ako smo uspjeli doci do ovdje znaci da su elementi uspjesno prepisani iz "podaci.dat" u "podaci.bin",te da je lista napunjena.
  117. Sada se u njoj nalaze svi ID-ovi klijenata, ali uzlazno sortirani.
  118. */
  119.  
  120. /*
  121. Sljedece...
  122. Citati ID po ID iz liste (usput prazniti listu), te ga pronaci u binarnoj datoteci "podaci.bin",
  123. potom podatke o toj osobi staviti u strukturu, te ih zapisati u "sortirano.dat".
  124. */
  125. fseek(fu,0L,SEEK_SET);
  126. fseek(fi,0L,SEEK_SET);
  127. int pozicija=0;
  128. for(i=0;i<N;i++){
  129. fscanf(fu,"%[^\;];%[^\;];%[^\;];%f",charID,&podaci.ime,&podaci.prezime,&podaci.stanje_na_racunu);
  130. podaci.ID_klijenta=atoi(charID);
  131. pozicija=trazi(glava,podaci.ID_klijenta);
  132. // printf("\n%d\n\n",pozicija);
  133. fseek(fi,pozicija*sizeof(podaci),SEEK_SET);
  134. fwrite(&podaci,sizeof(podaci),1,fi);
  135. //fprintf(ft,"%d;%s;%s;%f\n",podaci.ID_klijenta,&podaci.ime,&podaci.prezime,podaci.stanje_na_racunu);
  136. }
  137.  
  138. fseek(ft,0L,SEEK_SET);
  139. fseek(fi,0L,SEEK_SET);
  140. for(i=0;i<N;i++){
  141. fread(&podaci,sizeof(podaci),1,fi);
  142. fprintf(ft,"%d;%s;%s;%.2f\n",podaci.ID_klijenta,podaci.ime,podaci.prezime,podaci.stanje_na_racunu);
  143. }
  144.  
  145. printf("sve OK");
  146.  
  147.  
  148. fclose(fu);
  149. fclose(fi);
  150. fclose(ft);
  151. return 0;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement