Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <stdexcept>
- #include <fstream>
- #include <cstring>
- using namespace std;
- struct Radnik {
- char ime_i_prezime[20], adresa[50];
- int telefon;
- };
- class Imenik {
- int kapacitet, broj_evidentiranih;
- Radnik *radnici;
- public:
- explicit Imenik(int kapacitet) : broj_evidentiranih(0),kapacitet(kapacitet), radnici(new Radnik[kapacitet]) {}
- ~Imenik() { delete[] radnici; }
- Imenik(const Imenik &i) : broj_evidentiranih(i.broj_evidentiranih),kapacitet(i.kapacitet), radnici(new Radnik[i.kapacitet])
- {std::copy(i.radnici, i.radnici + kapacitet, radnici);}
- void DodajRadnika(const Radnik &r) {
- if(broj_evidentiranih >= kapacitet)throw std::range_error("Dostignut kapacitet imenika!");
- radnici[broj_evidentiranih++] = r;
- }
- void IspisiImenik() const{
- for(int i = 0; i < broj_evidentiranih; i++) {
- std::cout << "Ime i prezime: " << radnici[i].ime_i_prezime << std::endl<<
- "Adresa: " << radnici[i].adresa << std::endl<< "Telefon: " << radnici[i].telefon << std::endl;
- }
- }
- Imenik (Imenik &&i):kapacitet(i.kapacitet),broj_evidentiranih(i.broj_evidentiranih),
- radnici(i.radnici){i.radnici=nullptr;}
- Imenik &operator =(Imenik &i){
- if(kapacitet<i.kapacitet){
- Radnik *novi_prostor=new Radnik [i.kapacitet];
- delete[] radnici;
- radnici=novi_prostor;
- }
- kapacitet=i.kapacitet;
- copy(i.radnici,i.radnici+i.broj_evidentiranih,radnici);
- return *this;
- }
- Imenik &operator =(Imenik &&i){
- if(&i!=this){
- delete [] radnici;
- radnici=i.radnici;
- kapacitet=i.kapacitet;
- i.radnici=nullptr;
- }
- return *this;
- }
- void DodajRadnika(char ip[],char a[],int br){
- if(strlen(ip)>=20 || strlen(a)>=50)throw range_error("Predugi podaci");
- broj_evidentiranih++;
- strcpy(radnici[broj_evidentiranih].ime_i_prezime,ip);
- strcpy(radnici[broj_evidentiranih].adresa,a);
- radnici[broj_evidentiranih].telefon=br;
- }
- void DodajRadnika(Radnik *r){
- if(broj_evidentiranih>=kapacitet)throw range_error("Dostignut kapacitet imenika");
- broj_evidentiranih++;
- strcpy(radnici[broj_evidentiranih].ime_i_prezime,(*r).ime_i_prezime);
- strcpy(radnici[broj_evidentiranih].adresa,(*r).adresa);
- radnici[broj_evidentiranih].telefon=(*r).telefon;
- delete r;
- }
- void IspisiRadnika(char ip[]){
- for(int i = 0; i < broj_evidentiranih; i++) {
- if(radnici[i].ime_i_prezime==ip)
- std::cout << "Ime i prezime: " << radnici[i].ime_i_prezime << std::endl<<
- "Adresa: " << radnici[i].adresa << std::endl<< "Telefon: " << radnici[i].telefon << std::endl;
- }
- }
- void IspisiSveNaSlovo(char slovo){
- for(int i = 0; i < broj_evidentiranih; i++) {
- if(radnici[i].ime_i_prezime[0]==slovo)
- std::cout << "Ime i prezime: " << radnici[i].ime_i_prezime << std::endl<<
- "Adresa: " << radnici[i].adresa << std::endl<< "Telefon: " << radnici[i].telefon << std::endl;
- }
- }
- void IspisiSortirano(){
- sort(radnici,radnici+broj_evidentiranih,[](Radnik r1,Radnik r2){
- return r1.ime_i_prezime<r2.ime_i_prezime;
- });
- for(int i = 0; i < broj_evidentiranih; i++) {
- std::cout << "Ime i prezime: " << radnici[i].ime_i_prezime << std::endl<<
- "Adresa: " << radnici[i].adresa << std::endl<< "Telefon: " << radnici[i].telefon << std::endl;
- }
- }
- int &operator [](char ip[]){
- for(int i=0;i<broj_evidentiranih;i++){
- if(radnici[i].ime_i_prezime==ip)return radnici[i].telefon;
- }
- }
- int operator [](char ip[])const{
- for(int i=0;i<broj_evidentiranih;i++){
- if(radnici[i].ime_i_prezime==ip)return radnici[i].telefon;
- }
- }
- void Sacuvaj(char ime[]){
- fstream datoteka(ime,ios::out | ios::in | ios::binary);
- datoteka.write(reinterpret_cast<char*>(this),sizeof (Imenik));
- datoteka.close();
- }
- void Obnovi(char ime[]){
- fstream datoteka(ime,ios::out | ios::trunc | ios::binary);
- datoteka.write(reinterpret_cast<char*>(this),sizeof (Imenik));
- datoteka.close();
- }
- };
- int main() {
- Radnik r1{"Meho Mehic", "Zmaja od Bosne 13, Sarajevo", 1234};
- Radnik r2{"Pero Peric", "Travnicka 15, Zenica", 4321};
- Imenik i(10);
- i.DodajRadnika(r1);
- i.DodajRadnika(r2);
- i.IspisiImenik();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement