﻿#include <iostream>
#include <cstdlib>
#include <fstream>
#include <sstream>


using namespace std;

struct egyszavazat{

    int sorszam, szavazatszam;
    string vezeteknev, utonev, partnev;

}szavazat[100];

int db;                                         ///A db változó tartalmazza majd a fájl sorainak számát. Itt kell deklarálni, hogy a függvények hozzáférjenek.
///függvények deklarációja
int partszavazatokszama(string partrovidnev);   ///Egy pártra leadott szavatok száma, 5. feladathoz
string partnev(string partrovidnev);            ///A párt nevét adja vissza, 5. feladathoz
int legtobbszavazat();                          ///6. feladathoz
int legtobbszavazat(int valasztokerulet);       ///7. feladathoz



int main()
{

    setlocale(LC_ALL, "hun");
    ///1. feladat
    ifstream be;
    be.open("szavazatok.txt");
    if(be.fail()) {

        cout << "A fájl nem nyitható meg";
        cin.get();
        exit(-1);
    }

    int i=0;

    while(be>>szavazat[i].sorszam>>szavazat[i].szavazatszam>>szavazat[i].vezeteknev>>szavazat[i].utonev>>szavazat[i].partnev){

        i++;
    }
    db=i;
    be.close();
    cout << "A fájl beolvasásása sikerült." << endl;

    ///2. feladat
    cout << "2. feladat" << endl;
    cout << "A helyhatósági választáson " << db << " képviselőjelölt indult." << endl;

    ///3. feladat
    cout << "3. feladat" << endl;
    string vezeteknev, utonev;
    cout << "Adjon meg egy nevet: ";
    cin >> vezeteknev >> utonev;
    cout << endl;
    bool van = false;
    i=0;
    int szavazatszama;

    while(!van && i<db) {

       if(szavazat[i].vezeteknev==vezeteknev && szavazat[i].utonev==utonev) {

            szavazatszama=szavazat[i].szavazatszam;
            van = true;
       }
       i++;

    }
    if(van) {

        cout << vezeteknev << " " << utonev << " képviselőjelölt " << szavazatszama << " szavazatot kapott." << endl;

    } else {

        cout << "Ilyen nevű képviselőjelölt nem szerepel a nyilvántartásban!" << endl;

    }

    /** A van logikai változó nélkül:

     while(!(szavazat[i].vezeteknev==vezeteknev && szavazat[i].utonev==utonev) && i<db) {

       i++;

    }
    if(i<db) {

        cout << vezeteknev << " " << utonev << " képviselőjelölt " << szavazat[i].szavazatszam << " szavazatot kapott." << endl;

    } else {

        cout << "Ilyen nevű képviselőjelölt nem szerepel a nyilvántartásban!" << endl;

    }
    */

    ///4. feladat
    cout << "4. feladat" << endl;
    int szavazatokszama=0;
    for(int i=0; i<db; i++) {

        szavazatokszama+=szavazat[i].szavazatszam;
    }

    float arany = (float) szavazatokszama/12345;

    printf("%s %d %s %.2f %s","A választáson " ,szavazatokszama," állampolgár, a jogosultak ", arany*100, "%-a vett részt.\n");

    ///5. feladat
    cout << "5. feladat" << endl;
    string partok[] = {"GYEP","HEP","ZEP","TISZ","-"};

    for(int i=0; i<5; i++) {

        arany = (float) partszavazatokszama(partok[i])/szavazatokszama;
        cout << partnev(partok[i]) << ": ";
        printf("%.2f", arany*100);
        cout << "%" << endl;

    }
    ///6. feladat
    cout << "6. feladat" << endl;
    cout << "A legtöbb szavazatott kapott: " << endl;
    for(int i=0; i<db; i++) {

        if(szavazat[i].szavazatszam==legtobbszavazat()) {

            cout << szavazat[i].vezeteknev << " " <<  szavazat[i].utonev << " ";
            if(szavazat[i].partnev=="-") cout << "független";
            else cout << szavazat[i].partnev;
            cout << endl;

        }
    }

    ///7. feladat
    cout << "7. feladat" << endl;

    ofstream ki;
    ki.open("kepviselok.txt");
    if(ki.fail()) {

        cout << "A fájl nem nyitható meg.";
        cin.get();
        exit(-1);
    }

    for(int j=1; j<9; j++) {    ///8 választókerület van!
        for(int i=0; i<db; i++) {
            if(szavazat[i].sorszam==j && szavazat[i].szavazatszam==legtobbszavazat(j)) {

                ki << j << " " << szavazat[i].vezeteknev << " " <<  szavazat[i].utonev << " ";
                if(szavazat[i].partnev=="-") ki << "független";
                else ki << szavazat[i].partnev;
                ki << endl;

            }
        }
    }

    ki.close();
    cout << "A fájl kiírása sikerült.";
    cin.get();
    return 0;
}

///függvények definíciója

int partszavazatokszama(string partrovidnev){
    int szum = 0;
    for(int i=0; i<db; i++) {

        if(szavazat[i].partnev==partrovidnev) szum += szavazat[i].szavazatszam;

    }
    return szum;

}

string partnev(string partrovidnev){
    string nev;
    if(partrovidnev=="GYEP") return "Gyümölcsevők Pártja";
    else if(partrovidnev=="HEP") return "Húsevők Pártja";
    else if(partrovidnev=="ZEP") return "Tejivók Szövetsége";
    else if(partrovidnev=="TISZ") return "Zöldségevők Pártja";
    else return "Független jelöltek";
}

int legtobbszavazat(){

    int legtobb = szavazat[0].szavazatszam;
    for(int i=1; i<db; i++) {

        if(szavazat[i].szavazatszam>legtobb) legtobb = szavazat[i].szavazatszam;

    }
    return legtobb;
}

int legtobbszavazat(int valasztokerulet){

    int legtobb = 0;
    for(int i=0; i<db; i++) {

        if(szavazat[i].szavazatszam>legtobb && szavazat[i].sorszam==valasztokerulet) legtobb = szavazat[i].szavazatszam;

    }
    return legtobb;
}
