Advertisement
troxzilla

dsds

Nov 24th, 2014
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.05 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<cstring>
  4. #include "biblioteka_vrijeme_i_binarno_pretrazivanje.cc"
  5. using namespace std;
  6. struct roba{
  7. int sifra;
  8. char naziv[20];
  9. int cijena;
  10. int kolicina;
  11. double vrijeme;
  12. };
  13. struct ttindeks{
  14. int br_zap;
  15. int adresa;
  16. };
  17. void napravi(){
  18. fstream dat, ind;
  19. cout<<"kreiranje datoteka"<<endl;
  20. dat.open("roba_gabric_antonio.dat",ios::out);
  21. dat.close();
  22. dat.clear();
  23. ind.open("roba_gabric_antonio.ind",ios::out|ios::binary);
  24. ind.close();
  25. ind.clear();
  26. }
  27. void ispis(){
  28. fstream dat, ind;
  29. ttindeks indeks;
  30. roba slog;
  31. dat.open("roba_gabric_antonio.dat",ios::in|ios::binary);
  32. while(1){
  33. dat.read((char*)&slog,sizeof(roba));
  34. if(dat.eof())break;
  35. cout<<"sifra robe:"<<slog.sifra<<endl;
  36. cout<<"adresa zapisa:"<<(int)dat.tellg()-sizeof(roba)<<endl;
  37. }
  38. dat.close();
  39. dat.clear();
  40. }
  41. void preslozi(char naziv[], ttindeks spremi){
  42. ttindeks indeks,pom;
  43. fstream ind;
  44. int nadjeno=0,brojac=0;
  45. ind.open (naziv,ios::in|ios::out|ios::binary);
  46. while(1){
  47. ind.seekg(brojac*sizeof(ttindeks));
  48. brojac++;
  49. ind.read ((char *)&indeks,sizeof(ttindeks));
  50. if (ind.eof())break;
  51. if ((indeks.br_zap>spremi.br_zap)&&(nadjeno==0)){
  52. nadjeno=1;
  53. ind.seekp((int)ind.tellg()-sizeof(ttindeks));
  54. ind.write ((char *)&spremi,sizeof(ttindeks));
  55. memcpy (&pom,&indeks,sizeof(ttindeks));
  56. }else if (nadjeno==1){
  57. ind.seekp((int)ind.tellg()-sizeof(ttindeks));
  58. ind.write ((char *)&pom,sizeof(ttindeks));
  59. memcpy (&pom,&indeks,sizeof(ttindeks));
  60. }
  61. }
  62. ind.close();
  63. ind.clear();
  64. }
  65.  
  66. void upis(){
  67. fstream dat, ind;
  68. roba slog;
  69. ttindeks indeks;
  70. vrijeme_pocetak();
  71. cout<<"unesi sifru robe:"<<endl;
  72. do{
  73. cin>>slog.sifra;
  74. }while(slog.sifra<100 || slog.sifra>999);
  75. cout<<"unesi naziv robe:"<<endl;
  76. unos(slog.naziv);
  77. cout<<"unesi cijenu robe:"<<endl;
  78. cin>>slog.cijena;
  79. cout<<"unesi kolicinu robe:"<<endl;
  80. cin>>slog.kolicina;
  81. vrijeme_kraj();
  82. slog.vrijeme = vrijeme_proteklo()/1000;
  83. cout<<"vrijeme unosa:"<<slog.vrijeme<<endl;
  84. dat.open ("roba_gabric_antonio.dat",ios::out|ios::in|ios::binary|ios::ate);
  85. ind.open ("roba_gabric_antonio.ind",ios::out|ios::in|ios::binary|ios::ate);
  86. dat.write ((char *)&slog,sizeof(roba));
  87. indeks.br_zap=slog.sifra;
  88. indeks.adresa=(int)dat.tellp()-sizeof(roba);
  89. ind.write((char*)&indeks, sizeof(ttindeks));
  90. dat.close(); dat.clear();
  91. ind.close(); ind.clear();
  92. preslozi("roba_gabric_antonio.ind",indeks);
  93. ispis();
  94. }
  95.  
  96. void trazi(int br){
  97. vrijeme_pocetak();
  98. roba slog;
  99. fstream dat, ind;
  100. ttindeks indeks;
  101. bool nadjen=false;
  102. int brojac=0,GORE,DOLJE,POZ, sifra1;
  103. cout<<"unesi sifru robe koju zelis pronaci:"<<endl;
  104. cin>>sifra1;
  105. dat.open ("roba_gabric_antonio.dat",ios::in|ios::binary);
  106. ind.open ("roba_gabric_antonio.ind",ios::in|ios::binary);
  107. DOLJE=0;GORE=br;
  108. while (1){
  109. POZ=(GORE+DOLJE)/2;
  110. ind.seekg(POZ*sizeof(ttindeks));
  111. ind.read ((char *)&indeks, sizeof(ttindeks));
  112. brojac++;
  113. if (indeks.br_zap==sifra1){
  114. dat.seekg(indeks.adresa);
  115. dat.read ((char *)&slog, sizeof(roba));
  116. nadjen=true;
  117. cout<<"sifra:"<<slog.sifra<<endl;
  118. cout<<"naziv:"<<slog.naziv<<endl;
  119. cout<<"cijena:"<<slog.cijena<<endl;
  120. cout<<"kolicina:"<<slog.kolicina<<endl;
  121. cout<<"vrijeme unosa:"<<slog.vrijeme<<endl;
  122. break;
  123. }
  124. if (sifra1>indeks.br_zap)
  125. DOLJE=POZ;
  126. else
  127. GORE=POZ;
  128. if (POZ==(GORE+DOLJE)/2)break;
  129. }
  130. dat.close();dat.clear();
  131. ind.close();ind.clear();
  132. vrijeme_kraj();
  133. if (!nadjen) cout << "Zapis nije pronadjen!" << endl;
  134. }
  135.  
  136. void ispiss(){
  137. fstream dat, ind;
  138. double vrijeme1 = 0;
  139. int vrijednost = 0;
  140. roba slog;
  141. ttindeks indeks;
  142. dat.open("roba_gabric_antonio.dat", ios::in|ios::binary);
  143. ind.open("roba_gabric_antonio.ind", ios::in|ios::binary);
  144. while(1){
  145. ind.read((char*)&indeks,sizeof(ttindeks));
  146. if(ind.eof()) break;
  147. dat.seekg(indeks.adresa);
  148. dat.read((char*)&slog, sizeof(roba));
  149. cout<<"sifra:"<<slog.sifra<<endl;
  150. cout<<"naziv:"<<slog.naziv<<endl;
  151. cout<<"cijena:"<<slog.cijena<<endl;
  152. cout<<"kolicina:"<<slog.kolicina<<endl;
  153. cout<<"vrijeme unosa:"<<slog.vrijeme<<endl;
  154. vrijeme1 = vrijeme1 + slog.vrijeme;
  155. vrijednost = vrijednost+(slog.cijena * slog.kolicina);
  156. }
  157. cout<<"ukupno vrijeme:"<<vrijeme1<<endl;
  158. cout<<"ukupna vrijednost robe:"<<vrijednost<<endl;
  159. dat.close();
  160. dat.clear();
  161. ind.close();
  162. ind.clear();
  163. }
  164.  
  165. int main(){
  166. fstream dat, ind;
  167. int izb, suma = 0;
  168. char dn, nazivd[20];
  169. do{
  170. cout<<"unesi izbor:"<<endl;
  171. cout<<"1. rucni unos podataka u indeksiranu datoteku"<<endl;
  172. cout<<"2. pretrazivanje indeksirane datoteke prema sifri robe"<<endl;
  173. cout<<"3. ispis sadrzaja maticne datoteke u redoslijedu sifre robe"<<endl;
  174. cin>>izb;
  175. switch(izb){
  176. case 1: dat.open("roba_gabric_antonio.dat", ios::in|ios::binary);
  177. if(dat){
  178. cout<<"datoteka postoji na disku!"<<endl;
  179. cout<<"nova datoteka d/n?"<<endl;
  180. cin>>dn;
  181. if(dn=='d'){
  182. napravi();
  183. }
  184. dat.close();
  185. dat.clear();
  186. }
  187.  
  188. else if(!dat){
  189. cout<<"datoteka ne postoji!"<<endl;
  190. napravi();
  191. dat.close();
  192. dat.clear();
  193. }
  194. upis(); break;
  195.  
  196. case 2: dat.open("roba_gabric_antonio.dat", ios::in|ios::binary);
  197. if(!dat) cout<<"datoteka ne postoji na disku!"<<endl;
  198. else{
  199. dat.seekg(0, ios::end);
  200. suma=dat.tellg()/sizeof(roba);
  201. cout<<"Datoteka sadrzi: "<<suma <<" zapisa"<<endl;
  202. trazi(suma);
  203. }
  204. break;
  205. case 3: cout<<"upisi naziv datoteke:"<<endl;
  206. unos(nazivd);
  207. if(!dat) cout<<"datoteka ne postoji"<<endl;
  208. else
  209. ispiss();
  210. dat.close();
  211. dat.clear();
  212. break;
  213.  
  214.  
  215. }
  216. }while(izb!=9);
  217. return 0;
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement