#include <iostream>
#include <string>
#include <fstream>
using namespace std;
struct pozost {
string data;
string nazwamaratonu;
string czas;
pozost *nast;
pozost();
};
pozost::pozost() //konstruktor
{
nast = 0;
}
struct zawodnik {
string nazwisko;
zawodnik *nast;
pozost *dane;
zawodnik();
};
zawodnik::zawodnik() //konstruktor
{
nast = 0;
}
void DodajPozost(pozost *&head, string &date, string &nameofmaraton, string &time);
void DodajZawodnika(zawodnik *&head, string &vorname, string &date, string &nameofmaraton, string &time);
void UtworzPlik(string &vorname, string &date, string &nameofmaraton, string &time);
void Drukuj(zawodnik *head);
int main()
{
/*
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_ALLOC_MEM_DF);
ifstream plikSPR;
plikSPR.open("DetectMemoryLeaks.h");
if (!plikSPR.is_open())
{
cerr << "Bład otwierania pliku";
exit(EXIT_FAILURE);
}
#include "DetectMemoryLeaks.h"
*/
zawodnik *glowa = nullptr;
string * pliki = new string[2];
pliki[0] = "2.txt";
pliki[1] = "3.txt";
for (int i = 0; i < 2; i++)
{
ifstream plik1;
plik1.open(pliki[i]);
if (!plik1.is_open())
{
cerr << "Bład otwierania pliku";
exit(EXIT_FAILURE);
}
string separator = ",";
string linianazwa, liniadata, n1, n2, nazw, cza;
int a, b;
getline(plik1, linianazwa);
getline(plik1, liniadata);
while (!plik1.eof())
{
plik1 >> a; //sciąga niepotrzebne dane
plik1 >> n1; //sciąga przecinek
plik1 >> nazw;
nazw = nazw.substr(0, nazw.find(separator));
plik1 >> b; //sciąga niepotrzebne dane
plik1 >> n2; //sciąga przecinek
plik1 >> cza;
DodajZawodnika(glowa, nazw, liniadata, linianazwa, cza);
}
}
getchar(); getchar();
Drukuj(glowa);
return 0;
}
void DodajPozost(pozost *&head, string &date, string &nameofmaraton, string &time)
{
pozost *p1 = head;
if (head->data > date)
{
p1->nast = head;
head = p1;
//head->data = date;
//head->nazwamaratonu = nameofmaraton;
head->czas = time;
}
else if (head->nast == nullptr)
{
head->nast = new pozost;
head->nast->data = date;
head->nast->nazwamaratonu = nameofmaraton;
head->nast->czas = time;
}
else
{
pozost *p2 = head;
pozost *p3 = head->nast;
while (p3 != nullptr)
{
if (p3->data < date)
{
p3 = p3->nast;
p2 = p2->nast;
}
else
break;
}
if (p3)
{
p2->nast = new pozost;
p2 = p2->nast;
// p2->data = date;
// p2->nazwamaratonu = nameofmaraton;
p2->czas = time;
p2->nast = p3;
}
else
{
p2->nast = new pozost;
// p2->data = date;
// p2->nazwamaratonu = nameofmaraton;
p2->czas = time;
}
}
}
void DodajZawodnika(zawodnik *&head, string &vorname, string &date, string &nameofmaraton, string &time)
{
if (head == nullptr)
{
head = new zawodnik;
head->nazwisko = vorname;
head->nast = nullptr;
head->dane = new pozost;
head->dane->czas = time;
head->dane->data = date;
head->dane->nazwamaratonu = nameofmaraton;
head->dane->nast = nullptr;
return;
//DodajPozost(head->dane, date, nameofmaraton, time);
}
else
{
zawodnik *z1 = head;
while (1)
{
if (z1->nast == nullptr)
{
z1->nast = new zawodnik;
z1 = z1->nast;
z1->nazwisko = vorname;
z1->nast = nullptr;
z1->dane = new pozost;
z1->dane->czas = time;
z1->dane->data = date;
z1->dane->nazwamaratonu = nameofmaraton;
z1->dane->nast = nullptr;
return;
//DodajPozost(z1->dane, date, nameofmaraton, time);
}
if (vorname == z1->nazwisko)
{
DodajPozost(z1->dane, date, nameofmaraton, time);
return;
}
z1 = z1->nast;
}
}
//UtworzPlik(vorname, date, nameofmaraton, time);
}
void Drukuj(zawodnik *head)
{
if (head != nullptr)
{
string nazwapliku = head->nazwisko;
nazwapliku += ".txt";
fstream plik;
plik.open(nazwapliku, ios_base::app); //app - dołącz tylko na końcu pliku
if (!plik.is_open())
{
cerr << "Bład otwierania pliku";
exit(EXIT_FAILURE);
}
plik << head->nazwisko << endl << endl;
for (pozost* i = head->dane; i != nullptr; i = i->nast)
{
plik << i->data << " " << i->nazwamaratonu << " " << i->czas << endl;
}
plik.close();
Drukuj(head->nast);
}
}
void UtworzPlik(string &vorname, string &date, string &nameofmaraton, string &time)
{
string nazwapliku = vorname;
nazwapliku += ".txt";
fstream plik;
plik.open(nazwapliku, ios_base::app); //app - dołącz tylko na końcu pliku
if (!plik.is_open())
{
cerr << "Bład otwierania pliku";
exit(EXIT_FAILURE);
}
int licznik = 0;
if (licznik == 0)
{
plik << vorname;
plik << "n";
plik << date << " " << nameofmaraton << " " << time;
}
if (licznik != 0)
{
plik << date << " " << nameofmaraton << " " << time;
}
licznik++; plik.close();
}