#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

struct tabor
{
    int h1,n1,h2,n2;
    string diakok,tema;
};

void F1(vector<tabor> &t)
{
    ifstream fbe;
    fbe.open("taborok.txt");
    tabor tmp;
    while(fbe>>tmp.h1&&fbe>>tmp.n1&&fbe>>tmp.h2&&fbe>>tmp.n2&&fbe>>tmp.diakok&&fbe>>tmp.tema)
    {
        t.push_back(tmp);
    }
    fbe.close();
}

void F2(vector<tabor> t)
{
    cout << "2. feladat" << endl;
    printf("Az adatsorok száma: %d\n",t.size());    // 28
    printf("Az először rögzített tábor témája : %s\n",t[0].tema.c_str());
    printf("Az utoljára rögzített tábor témája: %s\n",t[t.size()-1].tema.c_str());
}

void F3(vector<tabor> t)
{
    cout << "------------------------------------------------------" << endl;
    cout << "3. feladat" << endl;
    bool van=false;
    for(auto tabor:t)
    {
        if(tabor.tema=="zenei")
        {
            printf("Zenei tábor kezdődik %d. hó %d. napján.\n",tabor.h1,tabor.n1);
            van=true;
        }
    }
    if(!van) cout << "Nem volt zenei tábor." << endl;
}

bool diakok_szerint(tabor a, tabor b)
{
    return a.diakok.size()>b.diakok.size();
}

void F4(vector<tabor> t)
{
    cout << "------------------------------------------------------" << endl;
    cout << "4. feladat" << endl;
    vector<tabor> tmp;
    tmp=t;
    sort(tmp.begin(),tmp.end(),diakok_szerint);
    cout << tmp[0].h1 << " " << tmp[0].n1 << " " << tmp[0].tema << endl;
    int i=1;
    while(tmp[i].diakok.size()==tmp[0].diakok.size())
    {
        cout << tmp[i].h1 << " " << tmp[i].n1 << " " << tmp[i].tema << endl;
        i++;
    }
}

int sorszam(int h,int n)
{
    // A nyári szünet első napja 6. hó 16.
    // A nyári szünet 77. napja 8. hó 31.
    // (A nyári hónapok rendre 30, 31, 31 naposak.)
    int napok=0;
    switch(h)
    {
        case 6: napok+=(n-15); break;   // júniusban 15 nap, ami nyári szünet
        case 7: napok+=15+n; break;     // július esetén: júniusi 15 nap + a megadott nap
        case 8: napok+=46+n;            // augusztus esetén: 15 júniusi nap + 31 júliusi nap + a megadott nap
    }
    return napok;
}

void F6(vector<tabor> t)
{
    cout << "------------------------------------------------------" << endl;
    cout << "6. feladat" << endl;
    int honap,nap,k,v,db;
    printf("hó: ");
    scanf("%d",&honap);
    printf("nap: ");
    scanf("%d",&nap);
    int s=sorszam(honap,nap);           // a megadott dátum sorszáma
    db=0;
    for(auto tab:t)
    {
        k=sorszam(tab.h1,tab.n1);       // egy adott tábor kezdőnapjának sorszáma
        v=sorszam(tab.h2,tab.n2);       // egy adott tábor befejező napjának sorszáma
        if((k<=s)&&(s<=v)) db++;
    }
    printf("Ekkor éppen %d tábor tart.\n",db);
}

bool honap_nap_szerint(tabor a, tabor b)
{
    return ((a.h1<b.h1)||((a.h1==b.h1)&&(a.n1<b.n1)));
}

void F7(vector<tabor> t)
{
    cout << "------------------------------------------------------" << endl;
    cout << "7. feladat" << endl;
    string tanulo;
    cout << "Adja meg egy tanuló betűjelét: ";
    cin >> tanulo;
    vector<tabor> erdeklodes;
    int poz;
    for(auto tab:t)
    {
        poz=tab.diakok.find(tanulo);
        if(poz>-1)
        {
            erdeklodes.push_back(tab);
        }
    }
    sort(erdeklodes.begin(),erdeklodes.end(),honap_nap_szerint);
    ofstream fki;
    fki.open("egytanulo.txt");
    for(auto tmp:erdeklodes)
        fki << tmp.h1 << "." << tmp.n1 << "-" << tmp.h2 << "." << tmp.n2 << ". " << tmp.tema << endl;
    fki.close();
    bool utkozes=false;
    for(int i=1;i<erdeklodes.size();i++)
    {
        if(sorszam(erdeklodes[i-1].h2,erdeklodes[i-1].n2)>=sorszam(erdeklodes[i].h1,erdeklodes[i].n1))
        {
            utkozes=true;
            break;
        }
    }
    if(utkozes) cout << "Nem mehet el mindegyik táborba." << endl;
}

int main()
{
    setlocale(LC_ALL,"");
    vector<tabor> taborok;
    F1(taborok);
    F2(taborok);
    F3(taborok);
    F4(taborok);

    F6(taborok);
    F7(taborok);
    return 0;
}
