Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.78 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <stdexcept>
  4. #include <fstream>
  5. #include <cstring>
  6.  
  7.  
  8. using namespace std;
  9.  
  10. struct Radnik {
  11. char ime_i_prezime[20], adresa[50];
  12. int telefon;
  13.  
  14. };
  15. class Imenik {
  16. int kapacitet, broj_evidentiranih;
  17. Radnik *radnici;
  18. public:
  19.  
  20. explicit Imenik(int kapacitet) : broj_evidentiranih(0),kapacitet(kapacitet), radnici(new Radnik[kapacitet]) {}
  21.  
  22. ~Imenik() { delete[] radnici; }
  23.  
  24. Imenik(const Imenik &i) : broj_evidentiranih(i.broj_evidentiranih),kapacitet(i.kapacitet), radnici(new Radnik[i.kapacitet])
  25. {std::copy(i.radnici, i.radnici + kapacitet, radnici);}
  26.  
  27. void DodajRadnika(const Radnik &r) {
  28. if(broj_evidentiranih >= kapacitet)throw std::range_error("Dostignut kapacitet imenika!");
  29. radnici[broj_evidentiranih++] = r;
  30.  
  31. }
  32.  
  33. void IspisiImenik() const{
  34. for(int i = 0; i < broj_evidentiranih; i++) {
  35. std::cout << "Ime i prezime: " << radnici[i].ime_i_prezime << std::endl<<
  36. "Adresa: " << radnici[i].adresa << std::endl<< "Telefon: " << radnici[i].telefon << std::endl;
  37.  
  38. }
  39. }
  40.  
  41. Imenik (Imenik &&i):kapacitet(i.kapacitet),broj_evidentiranih(i.broj_evidentiranih),
  42. radnici(i.radnici){i.radnici=nullptr;}
  43.  
  44. Imenik &operator =(Imenik &i){
  45. if(kapacitet<i.kapacitet){
  46. Radnik *novi_prostor=new Radnik [i.kapacitet];
  47. delete[] radnici;
  48. radnici=novi_prostor;
  49. }
  50. kapacitet=i.kapacitet;
  51. copy(i.radnici,i.radnici+i.broj_evidentiranih,radnici);
  52. return *this;
  53. }
  54.  
  55. Imenik &operator =(Imenik &&i){
  56. if(&i!=this){
  57. delete [] radnici;
  58. radnici=i.radnici;
  59. kapacitet=i.kapacitet;
  60. i.radnici=nullptr;
  61. }
  62. return *this;
  63. }
  64.  
  65. void DodajRadnika(char ip[],char a[],int br){
  66. if(strlen(ip)>=20 || strlen(a)>=50)throw range_error("Predugi podaci");
  67. broj_evidentiranih++;
  68. strcpy(radnici[broj_evidentiranih].ime_i_prezime,ip);
  69. strcpy(radnici[broj_evidentiranih].adresa,a);
  70. radnici[broj_evidentiranih].telefon=br;
  71. }
  72.  
  73. void DodajRadnika(Radnik *r){
  74. if(broj_evidentiranih>=kapacitet)throw range_error("Dostignut kapacitet imenika");
  75. broj_evidentiranih++;
  76. strcpy(radnici[broj_evidentiranih].ime_i_prezime,(*r).ime_i_prezime);
  77. strcpy(radnici[broj_evidentiranih].adresa,(*r).adresa);
  78. radnici[broj_evidentiranih].telefon=(*r).telefon;
  79. delete r;
  80. }
  81.  
  82. void IspisiRadnika(char ip[]){
  83. for(int i = 0; i < broj_evidentiranih; i++) {
  84. if(radnici[i].ime_i_prezime==ip)
  85. std::cout << "Ime i prezime: " << radnici[i].ime_i_prezime << std::endl<<
  86. "Adresa: " << radnici[i].adresa << std::endl<< "Telefon: " << radnici[i].telefon << std::endl;
  87. }
  88. }
  89.  
  90. void IspisiSveNaSlovo(char slovo){
  91. for(int i = 0; i < broj_evidentiranih; i++) {
  92. if(radnici[i].ime_i_prezime[0]==slovo)
  93. std::cout << "Ime i prezime: " << radnici[i].ime_i_prezime << std::endl<<
  94. "Adresa: " << radnici[i].adresa << std::endl<< "Telefon: " << radnici[i].telefon << std::endl;
  95.  
  96. }
  97. }
  98.  
  99. void IspisiSortirano(){
  100. sort(radnici,radnici+broj_evidentiranih,[](Radnik r1,Radnik r2){
  101. return r1.ime_i_prezime<r2.ime_i_prezime;
  102. });
  103. for(int i = 0; i < broj_evidentiranih; i++) {
  104. std::cout << "Ime i prezime: " << radnici[i].ime_i_prezime << std::endl<<
  105. "Adresa: " << radnici[i].adresa << std::endl<< "Telefon: " << radnici[i].telefon << std::endl;
  106.  
  107. }
  108. }
  109.  
  110. int &operator [](char ip[]){
  111. for(int i=0;i<broj_evidentiranih;i++){
  112. if(radnici[i].ime_i_prezime==ip)return radnici[i].telefon;
  113. }
  114. }
  115.  
  116. int operator [](char ip[])const{
  117. for(int i=0;i<broj_evidentiranih;i++){
  118. if(radnici[i].ime_i_prezime==ip)return radnici[i].telefon;
  119. }
  120. }
  121.  
  122. void Sacuvaj(char ime[]){
  123. fstream datoteka(ime,ios::out | ios::in | ios::binary);
  124. datoteka.write(reinterpret_cast<char*>(this),sizeof (Imenik));
  125. datoteka.close();
  126. }
  127.  
  128. void Obnovi(char ime[]){
  129. fstream datoteka(ime,ios::out | ios::trunc | ios::binary);
  130. datoteka.write(reinterpret_cast<char*>(this),sizeof (Imenik));
  131. datoteka.close();
  132.  
  133. }
  134.  
  135. };
  136.  
  137. int main() {
  138. Radnik r1{"Meho Mehic", "Zmaja od Bosne 13, Sarajevo", 1234};
  139. Radnik r2{"Pero Peric", "Travnicka 15, Zenica", 4321};
  140. Imenik i(10);
  141. i.DodajRadnika(r1);
  142. i.DodajRadnika(r2);
  143. i.IspisiImenik();
  144.  
  145. return 0;
  146.  
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement