#include <iostream>
#include <fstream>
#include <cstdlib>
#include <time.h>

using namespace std;

struct kerdes{
    string kerdes, temakor;
    long int valasz;
    int pont;
}egykerdes[100];

int db;

bool bennevan(string temakor, string temakorok[100]); ///5. feladathoz

bool bennevan(int sorszam, int feladat[10]); ///7. feladathoz

int kerdes(int sorszam, string temakor); ///adott témakörböl a kérdés sorszámát adja vissza

int main()
{
    setlocale(LC_ALL,"hun");
    ///1. feladat
    cout << "1. feladat: beolvasás" << endl;
    ifstream be;
    be.open("felszam.txt");
    if(be.fail()) {

        cout << "A fájl nem nyítható meg!";
        cin.get();
        exit(-1);

    }

    int i=0;
    while(!be.eof()){
        string sorveg;
        getline(be, egykerdes[i].kerdes);
        //getline(be, sorveg);
        be >> egykerdes[i].valasz >> egykerdes[i].pont >> egykerdes[i].temakor;
        getline(be, sorveg);
        i++;
    }
    db=i;
    /*
    for(int i=0; i<db; i++){
        cout << egykerdes[i].kerdes << " " << egykerdes[i].valasz << " " << egykerdes[i].pont << " " << egykerdes[i].temakor << endl;
    }
    */
    be.close();

    ///2. feladat
    cout << "2. feladat: A feladatok száma: " << db << endl;

    ///3. feladat
    cout << "3. feladat: matematika feladatok" << endl;

    int matDB[3]={0,0,0};

    for(int i=0; i<db; i++){
        if(egykerdes[i].temakor=="matematika") {
            if(egykerdes[i].pont==1) matDB[0]++;
            if(egykerdes[i].pont==2) matDB[1]++;
            if(egykerdes[i].pont==3) matDB[2]++;
        }
    }

    cout << "Az adatfájlban " << matDB[0]+matDB[1]+matDB[2] << " matematika feladat van, 1 pontot ér " << matDB[0] << " feladat, 2 pontot ér " << matDB[1] << " feladat, 3 pontot ér "  << matDB[2] << " feladat." << endl;

    ///4. feladat
    cout << "4. feladat:" << endl;

    int minimum=egykerdes[0].valasz, maximum=egykerdes[0].valasz;
    for(int i=0; i<db; i++){
        if(egykerdes[i].valasz<minimum) minimum=egykerdes[i].valasz;
        if(egykerdes[i].valasz>maximum) maximum=egykerdes[i].valasz;
    }

    cout << "A válaszok " << minimum << " és " << maximum << " között vannak." << endl;

    ///5. feladat
    cout << "5. feladat: Témakörök: " << endl;

    string temakorok[100];
    int j=0;
    for(int i=0; i<db; i++){
        if(!bennevan(egykerdes[i].temakor,temakorok)) {
            temakorok[j]=egykerdes[i].temakor;
            j++;
        }
    }
    for(int i=0; i<j; i++){
        cout << temakorok[i] << endl;
    }


    int temakorokDB[j];
    for(int l=0; l<j; l++){
       temakorokDB[l]=0;
    }
    for(int l=0; l<j; l++){
        for(int i=0; i<db; i++){

        if(egykerdes[i].temakor==temakorok[l]) temakorokDB[l]++;
        }
    }

    for(int l=0; l<j; l++){
       cout << temakorok[l] << " " << temakorokDB[l] << endl;
    }

    ///6. feladat
    srand (time(NULL));
    string egytemakor;
    int valasza;
    cout << "6. feladat: Adjon meg egy témakört: " ;
    cin >> egytemakor;
    int temakorSzam;
    for(int l=0; l<j; l++){
       if(temakorok[l]==egytemakor) temakorSzam=l;
    }
    int kerdesSzam=kerdes(rand()%temakorokDB[temakorSzam],egytemakor);

    cout << egykerdes[kerdesSzam].kerdes << " ";
    cin >> valasza;
    if(egykerdes[kerdesSzam].valasz==valasza) {
        cout << "A válasz " << egykerdes[kerdesSzam].pont << " pontot ér" << endl;
    } else {
        cout << "A válasz 0 pontot ér." << endl;
        cout << "A helyes válasz: " << egykerdes[kerdesSzam].valasz << endl;


    }

    ///7. feladat
    cout << "7. feladat: 10 kérdésböl álló feladatsor véletlenszerü generálása: " ;
    int feladatsor[10];
    int k=0;
    while(k<10){
        i=rand()%db;
        if(!bennevan(i,feladatsor)){
            feladatsor[k]=i;
            k++;
        }
    }

    ofstream ki;
    ki.open("tesztfel.txt");
    if(ki.fail()) {

        cout << "A fájl nem nyítható meg!";
        cin.get();
        exit(-1);

    }
    for(int i=0; i<10; i++){
        ki << egykerdes[feladatsor[i]].kerdes << endl;
    }
    ki.close();

    cin.get();
    return 0;
}

bool bennevan(string temakor, string temakorok[100]){ ///5. feladathoz
    int i=0;
    bool van=false;
    while(!van && i<100) {
        if(temakorok[i]==temakor) van=true;
        i++;
    }
return van;
}

bool bennevan(int sorszam, int feladat[10]){ ///7. feladathoz
    int i=0;
    bool van=false;
    while(!van && i<10) {
        if(feladat[i]==sorszam) van=true;
        i++;
    }
return van;

}

int kerdes(int sorszam, string temakor){
///kikeresi annak a kerdesnek az indexet (i), amelyik a temakor témakör közül a sorszam-adik
   int i=0, index=-1;
   do{
       i++;
       if(egykerdes[i].temakor==temakor){
            index++;
       }

    }while(index!=sorszam && i<db);
return i;
}
