Advertisement
rijads

Kandidati, izbori, ovo ono

Jun 28th, 2014
417
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <vector>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8.  
  9.  
  10. class datum{
  11. private:
  12.     int _d;
  13.     int _m;
  14.     int _g;
  15. public:
  16.     datum(int d=1,int m=1,int g=1900){
  17.         _d = d;
  18.         _m = m;
  19.         _g = g;
  20.     }
  21.     datum(const datum& d){
  22.         _d = d._d;
  23.         _m = d._m;
  24.         _g = d._g;
  25.     }
  26.     datum& operator=(datum d){
  27.         if (this != &d){
  28.             _d = d._d;
  29.             _m = d._m;
  30.             _g = d._g;
  31.         }
  32.         return *this;
  33.     }
  34.     friend ostream& operator<<(ostream& out, datum& d){
  35.         out << d._d << "." << d._m << "." << d._g;
  36.         return out;
  37.     }
  38.     bool dodajdan(int d){
  39.             _d = d;
  40.             return true;
  41.     }
  42.     bool dodajmjesec(int m){
  43.             _m = m;
  44.             return true;
  45.     }
  46.     bool dodajgodinu(int g){
  47.         _g = g;
  48.         return true;
  49.     }
  50. };
  51. class kandidat {
  52. private:
  53.     string ime;
  54.     string mat;
  55.     datum d;
  56. public:
  57.     kandidat(string i = "<nepoznato_ime>", string m = "<maticni_nepoznat>", datum d = datum(1, 1, 1900)){
  58.         ime = i;
  59.         mat = m;
  60.         this->d = d;
  61.     }
  62.     kandidat(const kandidat& obj){
  63.         ime = obj.ime;
  64.         mat = obj.mat;
  65.         d = obj.d;
  66.     }
  67.     string getime(){
  68.         return ime;
  69.     }
  70.     string getmat(){
  71.         return mat;
  72.     }
  73.     datum getdat(){
  74.         return d;
  75.     }
  76.     kandidat& operator=(kandidat& obj){
  77.         ime = obj.ime;
  78.         mat = obj.mat;
  79.         d = obj.d;
  80.     }
  81.     friend ostream& operator<<(ostream& out, kandidat& d){
  82.         out << "Kandidat: \t\t" << d.ime << endl << "JMBG: \t\t\t" << d.mat << endl << "Datum rodjenja:\t\t" << d.d<<endl;
  83.         return out;
  84.     }
  85. };
  86. class izbori{
  87. private:
  88.     string mat;
  89.     int bodovi;
  90. public:
  91.     izbori(string m="<nepoznato>",int b=0){
  92.         mat = m;
  93.         bodovi = b;
  94.     }
  95.     izbori(const izbori& obj){
  96.         mat = obj.mat;
  97.         bodovi = obj.bodovi;
  98.     }
  99.     string getmat(){
  100.         return mat;
  101.     }
  102.     int getbod(){
  103.         return bodovi;
  104.     }
  105.     izbori& operator=(izbori& obj){
  106.         mat = obj.mat;
  107.         bodovi = obj.bodovi;
  108.         return *this;
  109.     }
  110.     bool operator<(izbori& obj){
  111.         if (this->bodovi < obj.bodovi)
  112.             return true;
  113.         return false;
  114.     }
  115.     friend ostream& operator<<(ostream& out, izbori& d){
  116.         out << "Broj osvojenih bodova:\t" << d.bodovi << endl;
  117.         return out;
  118.     }
  119. };
  120.  
  121. bool strtodat(string dat, datum &d){
  122.     int br = 0;
  123.     string dio = "";
  124.     for (string::iterator it = dat.begin(); it != dat.end(); it++){
  125.         if (br < 2){
  126.             dio += *it;
  127.         }
  128.         if (br == 2){
  129.             d.dodajdan(atoi(dio.c_str()));
  130.             dio.erase();
  131.             dio = "";
  132.         }
  133.         if (br > 2 && br < 5){
  134.             dio += *it;
  135.         }
  136.         if (br == 5){
  137.             d.dodajmjesec(atoi(dio.c_str()));
  138.             dio.erase();
  139.             dio = "";
  140.         }
  141.         if (br>5 && br < 10){
  142.             dio += *it;
  143.         }
  144.         if (br == 9){
  145.             d.dodajgodinu(atoi(dio.c_str()));
  146.             dio.erase();
  147.             dio = "";
  148.         }
  149.         br++;
  150.     }
  151.     br = 0;
  152.     return true;
  153. }
  154. bool dodajkandidate(vector<kandidat> &kand){
  155.     char* i = "kandidati.txt";
  156.     string mat = "";
  157.     string ime = "";
  158.     string dat;
  159.     datum d;
  160.     int b = 0;
  161.     bool nn = false;
  162.     ifstream ispis(i);
  163.     int x = 0;
  164.     bool p = false;
  165.     if (ispis.fail()){
  166.         cout << "Greska: Provjerite destinaciju i ime fajla. (Fajl se mora nalaziti u istom folderu gdje se nalazi i program)" << endl;
  167.         return false;
  168.     }
  169.     else{
  170.         char znak;
  171.         while (ispis.get(znak)){
  172.             if (znak == '\n')
  173.                 nn = true;
  174.             if (znak == ' ')
  175.                 b++;
  176.             if (nn){
  177.                 strtodat(dat, d);
  178.                 kandidat kan(ime, mat, d);
  179.                 kand.push_back(kan);
  180.                 ime.erase();
  181.                 ime = "";
  182.                 mat.erase();
  183.                 mat = "";
  184.                 dat.erase();
  185.                 dat = "";
  186.                 nn = false;
  187.                 b = 0;
  188.             }
  189.             if (b == 0){
  190.                 if (znak != '\n')
  191.                     mat += znak;
  192.             }
  193.             if (b == 1){
  194.                 if (znak!=' ')
  195.                     ime += znak;
  196.             }
  197.             if (b == 2){
  198.                 ime += znak;
  199.             }
  200.             if (b == 3){
  201.                 if (znak != ' ')
  202.                     dat += znak;
  203.             }
  204.         }
  205.     }
  206.     return true;
  207. }
  208.  
  209. bool dodajizbore(vector<izbori> &izb){
  210.     char* i = "izbori.txt";
  211.     string mat = "";
  212.     string bodova = "";
  213.     int bod = 0;
  214.     ifstream ispis(i);
  215.     if (ispis.fail()){
  216.         cout << "Greska: Provjerite destinaciju i ime fajla. (Fajl se mora nalaziti u istom folderu gdje se nalazi i program)" << endl;
  217.         return false;
  218.     }
  219.     else{
  220.         char znak;
  221.         while (ispis.get(znak)){
  222.             if (znak == ' '){
  223.                 while (ispis.get(znak)){
  224.                     if (znak != ' ')
  225.                         bodova += znak;
  226.                     if (znak == '\n'){
  227.                         bod = atoi(bodova.c_str());
  228.                         izbori iz(mat, bod);
  229.                         izb.push_back(iz);
  230.                         mat.erase();
  231.                         bodova.erase();
  232.                         break;
  233.                     }
  234.                 }
  235.             }
  236.             if (znak != '\n')
  237.                 mat += znak;
  238.         }
  239.     }
  240.     return true;
  241. }
  242.  
  243. class povezano{
  244. public:
  245.     vector<kandidat>_kand;
  246.     vector<izbori>_izb;
  247.     bool dodati(vector<kandidat>&__kand, vector<izbori>__izb){
  248.         for (vector<kandidat>::iterator it = __kand.begin(); it != __kand.end(); it++){
  249.             kandidat kan(it->getime(), it->getmat(), it->getdat());
  250.             _kand.push_back(kan);
  251.             for (vector<izbori>::iterator it2 = __izb.begin(); it2 != __izb.end(); it2++){
  252.                 if (it->getmat().compare(it2->getmat()) == 0){
  253.                     izbori izb(it2->getmat(), it2->getbod());
  254.                     _izb.push_back(izb);
  255.                 }
  256.             }
  257.         }
  258.         return true;
  259.     }
  260.     bool poredi(izbori obj, izbori obj1){
  261.         return(obj < obj1);
  262.     }
  263.     bool sortirati(){
  264.         sort(_izb.begin(), _izb.end());
  265.         return true;
  266.     }
  267.  
  268.     friend ostream& operator<<(ostream& out, povezano& obj){
  269.         for (vector<kandidat>::iterator it = obj._kand.begin(); it != obj._kand.end(); it++){
  270.             for (vector<izbori>::iterator it2 = obj._izb.begin(); it2 != obj._izb.end(); it2++){
  271.                 if (it->getmat().compare(it2->getmat()) == 0)
  272.                     out << "============================================"<<endl<<*it << *it2<<"============================================"<<endl<<endl;
  273.             }
  274.         }
  275.         return out;
  276.         }
  277. };
  278.  
  279. int main(){
  280.     vector<kandidat> kand;
  281.     vector<izbori> izb;
  282.     povezano pov;
  283.     float bodovi = 0;
  284.     int trbodovi = 0;
  285.     float lokacija = 0;
  286.     int trlokacija = 0;
  287.     char* kandidati = "kandidati.txt";
  288.     dodajkandidate(kand);
  289.     dodajizbore(izb);
  290.     pov.dodati(kand, izb);
  291.     pov.sortirati();
  292.     cout << pov;
  293.     for (vector<izbori>::iterator it = pov._izb.begin(); it != pov._izb.end(); it++){
  294.         bodovi+=it->getbod();
  295.         if (it->getbod() > trbodovi){
  296.             trbodovi = it->getbod();
  297.             trlokacija = lokacija;
  298.         }
  299.         lokacija++;
  300.     }
  301.     vector<izbori>::iterator it = pov._izb.begin() + trlokacija;
  302.     vector<kandidat>::iterator it2 = pov._kand.begin();
  303.     cout << "Pobjednik: "<<endl<<*it2<<*it<<"Broj osvojenih glasova:\t"<<it->getbod()/bodovi*100<<"%"<<endl<<"Ukupan broj glasova:\t"<<bodovi<<endl;
  304.     system("pause>0");
  305.     return 0;
  306. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement