Advertisement
harissel22

Untitled

Jun 20th, 2019
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.04 KB | None | 0 0
  1. #include <iostream>
  2. #include<string>
  3. #include<memory>
  4. #include <list>
  5.  
  6. //apstraktna
  7. class Glas {
  8.  
  9.  
  10. public:
  11. std::string kandidat;
  12. bool vazeci;
  13. Glas(std::string kandidat, bool vazeci) : kandidat(kandidat), vazeci(vazeci) {}
  14. virtual Glas *DajKopiju() const =0;
  15. virtual void Ispisi() const = 0;
  16.  
  17. };
  18. class DomaciGlas : public Glas{
  19. std::string mjesto;
  20.  
  21. public:
  22. DomaciGlas(std::string kandidat, std::string mjesto)
  23. : Glas(kandidat,true), mjesto(mjesto){}
  24. Glas *DajKopiju() const override { return new DomaciGlas(*this);}
  25. void Ispisi() const override {
  26. std::cout<<kandidat<<", "<<mjesto<<", "<<"Domaci, ";
  27. if(vazeci == true) std::cout<<"Vazeci" <<std::endl;
  28. else std::cout<<"Nevazeci"<<std::endl;
  29. }
  30.  
  31. };
  32. class StraniGlas : public Glas{
  33. std::string drzava;
  34. public:
  35. StraniGlas(std::string kandidat, std::string drzava)
  36. : Glas(kandidat,true), drzava(drzava){}
  37. Glas *DajKopiju() const override { return new StraniGlas(*this);}
  38. void Ispisi() const override {
  39. std::cout<<kandidat<<", "<<drzava<<", "<<"Strani, ";
  40. if(vazeci == true) std::cout<<"Vazeci"<<std::endl;
  41. else std::cout<<"Nevazeci"<<std::endl;
  42. }
  43.  
  44. };
  45.  
  46. class Izbori {
  47. std::list<std::shared_ptr<Glas>> glasovi;
  48. int godina;
  49. public:
  50.  
  51. Izbori(int godina) : godina(godina) {}
  52. void Glasaj(std::string JMBG, std::string lokacija, bool domaci) {
  53.  
  54. if(domaci==true)
  55. glasovi.push_back(std::make_shared<DomaciGlas>(JMBG,lokacija));
  56. else
  57. glasovi.push_back(std::make_shared<StraniGlas>(JMBG,lokacija));
  58.  
  59. }
  60. void Glasaj(const Glas &glas){
  61.  
  62. glasovi.push_back(std::shared_ptr<Glas>(glas.DajKopiju()));
  63.  
  64. }
  65.  
  66. int DajBrojGlasova() const {
  67.  
  68. return glasovi.size();
  69.  
  70. }
  71. void ProglasiNevazecim(int broj){
  72.  
  73.  
  74. int brojac = 0;
  75. for(auto x : glasovi ){
  76. brojac++;
  77. if(brojac == broj){
  78. (*x).vazeci=false;
  79. break;
  80. }
  81. }
  82. }
  83. Glas* operator [](int i){
  84. auto it = glasovi.begin();
  85. std::advance(it,i);
  86. return (*it).get();
  87.  
  88. }
  89. const Glas* operator [](int i) const{
  90. auto it = glasovi.begin();
  91. std::advance(it,i);
  92. return (*it).get();
  93.  
  94. }
  95. Izbori(const Izbori &izb):glasovi(izb.glasovi){
  96.  
  97. for(auto x : izb.glasovi){
  98.  
  99. glasovi.push_back(std::shared_ptr<Glas>((*x).DajKopiju()));
  100.  
  101. }
  102. }
  103. Izbori& operator=(const Izbori &izb) {
  104. glasovi.resize(0);
  105. for(auto x: izb.glasovi) {
  106. glasovi.push_back(std::shared_ptr<Glas>((*x).DajKopiju()));
  107.  
  108. }
  109.  
  110. return *this;
  111. }
  112. std::shared_ptr<Glas> operator()(int i){
  113.  
  114. auto it = glasovi.begin();
  115. std::advance(it,i);
  116. return (*it);
  117.  
  118.  
  119. }
  120. const std::shared_ptr<Glas> operator()(int i) const{
  121.  
  122. auto it = glasovi.begin();
  123. std::advance(it,i);
  124. return (*it);
  125.  
  126.  
  127. }
  128. friend std::ostream &operator<<(std::ostream &tok, const Izbori &izb){
  129.  
  130. for(auto x: izb.glasovi){
  131.  
  132. x->Ispisi();
  133.  
  134. }
  135.  
  136. return tok;
  137. }
  138. int operator()(std::string JMBG) const{
  139. int brojac =0;
  140. for(const auto &x: glasovi){
  141.  
  142. if(x->kandidat == JMBG && x->vazeci == true)
  143. brojac++;
  144. }
  145.  
  146. return brojac;
  147. }
  148.  
  149.  
  150.  
  151. };
  152.  
  153.  
  154. int main()
  155. {
  156. Izbori izb(2016);
  157. izb.Glasaj("1205964154961", "Srebrenik", true); // domaći glas
  158. izb.Glasaj("2111197314131", "Austrija", false); // strani glas
  159. DomaciGlas dg("0211965154361", "Mostar");
  160. StraniGlas sg("3001973176522", "Holandija");
  161. izb.Glasaj(dg);
  162. izb.Glasaj(sg); // podržati i svaku novu vrstu glasova u budućnosti
  163. int broj_g = izb.DajBrojGlasova();
  164. izb.ProglasiNevazecim(2); // glas iz Austrije postaje nevažeći
  165. const Glas *iz_mostara = izb[2];
  166. iz_mostara->Ispisi(); // {Za: 3001973176522, Iz: Mostar, Domaci, Vazeci}
  167. izb(2)->Ispisi(); // {Za: 2111197314131, Iz: Austrija, Strani, Nevazeci}
  168. Izbori izb2(izb);
  169. std::cout << izb2; // ispisuje svaki glas u novom redu
  170. izb2.Glasaj("0211965154361", "Sarajevo", true);
  171. izb = izb2; // sada i 'izb' ima glas iz Sarajeva (i sve stare)
  172. int br_gl= izb("3001973176522"); // br. glasova za kandidata (samo važeći glasovi!)
  173. std::cout<<br_gl;
  174. return 0;
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement