Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include<cstring>
- #include "biblioteka_vrijeme_i_binarno_pretrazivanje.cc"
- using namespace std;
- struct roba{
- int sifra;
- char naziv[20];
- int cijena;
- int kolicina;
- double vrijeme;
- };
- struct ttindeks{
- int br_zap;
- int adresa;
- };
- void napravi(){
- fstream dat, ind;
- cout<<"kreiranje datoteka"<<endl;
- dat.open("roba_gabric_antonio.dat",ios::out);
- dat.close();
- dat.clear();
- ind.open("roba_gabric_antonio.ind",ios::out|ios::binary);
- ind.close();
- ind.clear();
- }
- void ispis(){
- fstream dat, ind;
- ttindeks indeks;
- roba slog;
- dat.open("roba_gabric_antonio.dat",ios::in|ios::binary);
- while(1){
- dat.read((char*)&slog,sizeof(roba));
- if(dat.eof())break;
- cout<<"sifra robe:"<<slog.sifra<<endl;
- cout<<"adresa zapisa:"<<(int)dat.tellg()-sizeof(roba)<<endl;
- }
- dat.close();
- dat.clear();
- }
- void preslozi(char naziv[], ttindeks spremi){
- ttindeks indeks,pom;
- fstream ind;
- int nadjeno=0,brojac=0;
- ind.open (naziv,ios::in|ios::out|ios::binary);
- while(1){
- ind.seekg(brojac*sizeof(ttindeks));
- brojac++;
- ind.read ((char *)&indeks,sizeof(ttindeks));
- if (ind.eof())break;
- if ((indeks.br_zap>spremi.br_zap)&&(nadjeno==0)){
- nadjeno=1;
- ind.seekp((int)ind.tellg()-sizeof(ttindeks));
- ind.write ((char *)&spremi,sizeof(ttindeks));
- memcpy (&pom,&indeks,sizeof(ttindeks));
- }else if (nadjeno==1){
- ind.seekp((int)ind.tellg()-sizeof(ttindeks));
- ind.write ((char *)&pom,sizeof(ttindeks));
- memcpy (&pom,&indeks,sizeof(ttindeks));
- }
- }
- ind.close();
- ind.clear();
- }
- void upis(){
- fstream dat, ind;
- roba slog;
- ttindeks indeks;
- vrijeme_pocetak();
- cout<<"unesi sifru robe:"<<endl;
- do{
- cin>>slog.sifra;
- }while(slog.sifra<100 || slog.sifra>999);
- cout<<"unesi naziv robe:"<<endl;
- unos(slog.naziv);
- cout<<"unesi cijenu robe:"<<endl;
- cin>>slog.cijena;
- cout<<"unesi kolicinu robe:"<<endl;
- cin>>slog.kolicina;
- vrijeme_kraj();
- slog.vrijeme = vrijeme_proteklo()/1000;
- cout<<"vrijeme unosa:"<<slog.vrijeme<<endl;
- dat.open ("roba_gabric_antonio.dat",ios::out|ios::in|ios::binary|ios::ate);
- ind.open ("roba_gabric_antonio.ind",ios::out|ios::in|ios::binary|ios::ate);
- dat.write ((char *)&slog,sizeof(roba));
- indeks.br_zap=slog.sifra;
- indeks.adresa=(int)dat.tellp()-sizeof(roba);
- ind.write((char*)&indeks, sizeof(ttindeks));
- dat.close(); dat.clear();
- ind.close(); ind.clear();
- preslozi("roba_gabric_antonio.ind",indeks);
- ispis();
- }
- void trazi(int br){
- vrijeme_pocetak();
- roba slog;
- fstream dat, ind;
- ttindeks indeks;
- bool nadjen=false;
- int brojac=0,GORE,DOLJE,POZ, sifra1;
- cout<<"unesi sifru robe koju zelis pronaci:"<<endl;
- cin>>sifra1;
- dat.open ("roba_gabric_antonio.dat",ios::in|ios::binary);
- ind.open ("roba_gabric_antonio.ind",ios::in|ios::binary);
- DOLJE=0;GORE=br;
- while (1){
- POZ=(GORE+DOLJE)/2;
- ind.seekg(POZ*sizeof(ttindeks));
- ind.read ((char *)&indeks, sizeof(ttindeks));
- brojac++;
- if (indeks.br_zap==sifra1){
- dat.seekg(indeks.adresa);
- dat.read ((char *)&slog, sizeof(roba));
- nadjen=true;
- cout<<"sifra:"<<slog.sifra<<endl;
- cout<<"naziv:"<<slog.naziv<<endl;
- cout<<"cijena:"<<slog.cijena<<endl;
- cout<<"kolicina:"<<slog.kolicina<<endl;
- cout<<"vrijeme unosa:"<<slog.vrijeme<<endl;
- break;
- }
- if (sifra1>indeks.br_zap)
- DOLJE=POZ;
- else
- GORE=POZ;
- if (POZ==(GORE+DOLJE)/2)break;
- }
- dat.close();dat.clear();
- ind.close();ind.clear();
- vrijeme_kraj();
- if (!nadjen) cout << "Zapis nije pronadjen!" << endl;
- }
- void ispiss(){
- fstream dat, ind;
- double vrijeme1 = 0;
- int vrijednost = 0;
- roba slog;
- ttindeks indeks;
- dat.open("roba_gabric_antonio.dat", ios::in|ios::binary);
- ind.open("roba_gabric_antonio.ind", ios::in|ios::binary);
- while(1){
- ind.read((char*)&indeks,sizeof(ttindeks));
- if(ind.eof()) break;
- dat.seekg(indeks.adresa);
- dat.read((char*)&slog, sizeof(roba));
- cout<<"sifra:"<<slog.sifra<<endl;
- cout<<"naziv:"<<slog.naziv<<endl;
- cout<<"cijena:"<<slog.cijena<<endl;
- cout<<"kolicina:"<<slog.kolicina<<endl;
- cout<<"vrijeme unosa:"<<slog.vrijeme<<endl;
- vrijeme1 = vrijeme1 + slog.vrijeme;
- vrijednost = vrijednost+(slog.cijena * slog.kolicina);
- }
- cout<<"ukupno vrijeme:"<<vrijeme1<<endl;
- cout<<"ukupna vrijednost robe:"<<vrijednost<<endl;
- dat.close();
- dat.clear();
- ind.close();
- ind.clear();
- }
- int main(){
- fstream dat, ind;
- int izb, suma = 0;
- char dn, nazivd[20];
- do{
- cout<<"unesi izbor:"<<endl;
- cout<<"1. rucni unos podataka u indeksiranu datoteku"<<endl;
- cout<<"2. pretrazivanje indeksirane datoteke prema sifri robe"<<endl;
- cout<<"3. ispis sadrzaja maticne datoteke u redoslijedu sifre robe"<<endl;
- cin>>izb;
- switch(izb){
- case 1: dat.open("roba_gabric_antonio.dat", ios::in|ios::binary);
- if(dat){
- cout<<"datoteka postoji na disku!"<<endl;
- cout<<"nova datoteka d/n?"<<endl;
- cin>>dn;
- if(dn=='d'){
- napravi();
- }
- dat.close();
- dat.clear();
- }
- else if(!dat){
- cout<<"datoteka ne postoji!"<<endl;
- napravi();
- dat.close();
- dat.clear();
- }
- upis(); break;
- case 2: dat.open("roba_gabric_antonio.dat", ios::in|ios::binary);
- if(!dat) cout<<"datoteka ne postoji na disku!"<<endl;
- else{
- dat.seekg(0, ios::end);
- suma=dat.tellg()/sizeof(roba);
- cout<<"Datoteka sadrzi: "<<suma <<" zapisa"<<endl;
- trazi(suma);
- }
- break;
- case 3: cout<<"upisi naziv datoteke:"<<endl;
- unos(nazivd);
- if(!dat) cout<<"datoteka ne postoji"<<endl;
- else
- ispiss();
- dat.close();
- dat.clear();
- break;
- }
- }while(izb!=9);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement