Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Miletic Marko
- //41367
- //Vjezba 6
- #include <iostream>
- #include <fstream>
- #include <cstdlib>
- #include <ctime>
- #include "biblioteka_vrijeme_i_binarno_pretrazivanje.cc"
- using namespace std;
- struct tRoba {
- int sifra;
- char naziv[50];
- float cij, kol;
- float vrj_unosa;
- };
- tindeks indeks;
- int si = sizeof(tindeks);
- tRoba roba;
- int sr = sizeof(tRoba);
- void mog1() {
- fstream dat("roba_Miletic_Marko.dat", ios::in|ios::binary);
- char dn='n';
- int ne=0;
- if(!dat) dat.open("roba_Miletic_Marko.dat", ios::out|ios::binary);
- else ne=1;
- if(ne) cout<<"Rad s postojecom datotekom? (d=rad s postojecom, n=brisanje): ";
- if(ne) cin>>dn;
- if(ne && dn=='n')
- for(dat.close(), dat.clear(), dat.open("roba_Miletic_Marko.dat", ios::out|ios::binary); 0; )
- dn='n';
- fstream ind("roba_Miletic_Marko.ind", ios::in|ios::binary);
- if(!ind) ind.open("roba_Miletic_Marko.ind", ios::out|ios::binary);
- else if(dn=='n')
- for(ind.close(), ind.clear(), ind.open("roba_Miletic_Marko.ind", ios::out|ios::binary); 0;)
- dn='n';
- dat.close();
- dat.clear();
- ind.close();
- ind.clear();
- dat.open("roba_Miletic_Marko.dat", ios::in|ios::out|ios::binary|ios::ate);
- ind.open("roba_Miletic_Marko.ind", ios::in|ios::out|ios::binary|ios::ate);
- tRoba nova;
- int a;
- int sif=1;
- while(sif)
- for(sif=1, a=1, vrijeme_pocetak(), cout << "Sifra: ", cin >> nova.sifra, cout << "Naziv: ", cin.ignore(), cin.getline(nova.naziv, 50), cout << "Cijena: ", cin >> nova.cij, cout << "Kolicina: ", cin >> nova.kol; a; a=0)
- if(nova.sifra>99 && nova.sifra<1000) sif=0;
- else cout<<"!! Sifra(100-999). Ponovni unos.."<<endl;
- vrijeme_kraj();
- cout << "Proteklo vrijeme: " << (nova.vrj_unosa = vrijeme_proteklo() ) << endl;
- tindeks novi_;
- novi_.kljuc = nova.sifra;
- novi_.adresa = (int)dat.tellp();
- dat.write((char*)&nova, sr);
- ind.seekg(0, ios::end);
- int i;
- int broj_zapisa=(int)ind.tellg()/si;
- int br=1;
- for(i=broj_zapisa-1; i>=0 && br; br?i--:i)
- for(ind.seekg(i*si, ios::beg), ind.read( (char*)&indeks, si), ind.seekp((i+1)*si, ios::beg), ind.write((char*)&indeks, si), a=1; a; a=0)
- if(indeks.kljuc<novi_.kljuc)
- br=0;
- if(i<0) ind.seekp(0, ios::beg);
- else ind.seekp((i+1)*si, ios::beg);
- ind.write((char*)&novi_, si);
- ind.seekg(0, ios::beg);
- for(int i=0; i<=broj_zapisa; cout<<"sifra: " << indeks.kljuc<<endl<<"adresa: " << indeks.adresa << endl<<endl, i++)
- ind.read((char*)&indeks, si);
- dat.close();
- dat.clear();
- ind.close();
- ind.clear();
- }
- void mog2() {
- fstream dat("roba_Miletic_Marko.dat", ios::in|ios::binary);
- if(!dat) cout << "Maticna datoteka ne postoji." << endl;
- if(!dat) return;
- fstream ind("roba_Miletic_Marko.ind", ios::in|ios::binary);
- if(!ind) cout<<"ind ne postoji"<<endl;
- if(!ind) dat.close();
- if(!ind) dat.clear();
- if(!ind) return;
- dat.seekg(0, ios::end);
- int mat_br_zapisa = dat.tellg() / sizeof(tRoba);
- cout << "Broj zapisa: " << mat_br_zapisa << endl;
- int sifra;
- cout << "Sifra robe: ";
- cin >> sifra;
- int l=0;
- int d=mat_br_zapisa-1;
- bool nadjen = false;
- int br_proc = 0;
- while(!nadjen)
- if(l<=d) {
- ind.seekg((d+l)/2*si, ios::beg);
- ind.read((char*)&indeks, si);
- br_proc++;
- if(sifra>indeks.kljuc) l=(d+l)/2+1;
- else if(sifra<indeks.kljuc) d=(d+l)/2-1;
- else nadjen = true;
- } else break;
- if(!nadjen) cout<<"Zapis nije pronadjen."<<endl<<"Broj procitanih zapisa: "<<br_proc<<endl;
- if(!nadjen)
- for(dat.close(), dat.clear(), ind.close(), ind.clear(); 1; )
- return;
- cout << "Zapis je pronadjen." << endl << "Broj procitanih zapisa: " << br_proc << endl;
- cout << endl << "sifra: " << indeks.kljuc << endl << "adresa: " << indeks.adresa << endl << endl;
- dat.seekg(indeks.adresa, ios::beg);
- dat.read( (char*)&roba, sr);
- cout << "sifra: " << roba.sifra << endl
- << "naziv: " << roba.naziv << endl
- << "cijena: " << roba.cij << endl
- << "kolicina: " << roba.kol << endl
- << "vrijeme unosa: " << roba.vrj_unosa << endl << endl;
- dat.close();
- dat.clear();
- ind.close();
- ind.clear();
- }
- void mog3() {
- char mat_naziv[75];
- cin.ignore();
- cout << "Naziv maticne datoteke: ";
- cin.getline(mat_naziv, 75);
- fstream dat(mat_naziv, ios::in|ios::binary);
- if(!dat) cout<<"Maticna datoteka ne postoji."<<endl;
- if(!dat) return;
- fstream ind("roba_Miletic_Marko.ind", ios::in|ios::binary);
- if(!ind) cout<<"Indeksna datoteka ne postoji."<<endl;
- if(!ind) dat.close();
- if(!ind) dat.clear();
- if(!ind) return;
- double vrijed_uk=0;
- double vrj_uk=0;
- while(1) {
- ind.read((char*)&indeks, si);
- if(ind.eof() ) break;
- dat.seekg(indeks.adresa,ios::beg);
- dat.read((char*)&roba,sr);
- vrijed_uk+=(roba.cij*roba.kol);
- vrj_uk+=roba.vrj_unosa;
- cout << "sifra: " << roba.sifra << endl << "naziv: " << roba.naziv << endl << "cijena: " << roba.cij
- << endl << "kolicina: " << roba.kol << endl << "vrijeme unosa: " << roba.vrj_unosa << endl << endl;
- }
- cout << "Ukupna vrijednost robe: " << vrijed_uk << endl << "Ukupno vrijeme unosa: " << vrj_uk << endl;
- dat.close();
- dat.clear();
- ind.close();
- ind.clear();
- }
- int main() {
- srand(time(0) );
- rand();
- int x;
- do {
- cout << endl << " -- < Izbornik > -- " << endl
- << " 1. Rucni unos podataka o robi u indeksiranu datoteku" << endl
- << " 2. Pretrazivanje indeksirane datoteke prema sifri robe" << endl
- << " 3. Ispis sadrzaja maticne datoteke u redoslijedu sifre robe" << endl
- << " 4. Generiranje zapisa o robi (sa sortiranjem indeksa)" << endl
- << " 9. Izlaz iz programa" << endl << "Odabir: ";
- cin >> x;
- switch(x){
- case 1: mog1(); break;
- case 2: mog2(); break;
- case 3: mog3(); break;
- }
- } while(x!=9);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement