#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;
time_t toDay(time_t time) {
struct tm *t = localtime(&time);
t->tm_hour = t->tm_min = t->tm_sec = 0;
return mktime(t);
}
class vokabel
{
public:
string deutsch;
string latein;
int phase;
int abfrage;
int anzahl;
void dateiAuslesen(fstream *data)
{
/*
Pro Vokabel:
Erste Zeile: Deutsch
Zweite Zeile: Latein
Dritte Zeile: Phase
Vierte Zeile: Zeit
Fünfte Zeile: Anzahl
*/
*data >> deutsch; //erste zeile
*data >> latein; //zweite zeile
*data >> phase; //dritte zeile
*data >> abfrage; //vierte zeile
*data >> anzahl; //fünfte zeile
}
void neueVokabel()
{
cout << "Latein:";
cin >> latein;
cout << "Deutsch:";
cin >> deutsch;
phase = 0;
abfrage = toDay(time(NULL));
anzahl = 0;
}
void vokabelAnzeigen()
{
cout << "Latein:" << latein << endl << "Deutsch:" << deutsch << endl << "Phase:" << phase << endl << "Abfrage:" << abfrage
<< endl << "Anzahl:" << anzahl << endl;
}
void vokabelSchreiben(fstream *data)
{
*data << "vokabel" << endl << deutsch << endl << latein << endl << phase << endl << abfrage << endl << anzahl << endl;
}
void vokabelAbfrage()
{
string s;
cout << latein << endl << "Deutsch:";
cin >> s;
cout << "Lösung:" << deutsch << endl;
s = "";
while (!(s=="j" || s=="n" || s=="J" || s=="N"))
{
cout << "Richtig? (J/N)";
cin >> s;
if (!(s=="j" || s=="n" || s=="J" || s=="N")) cout << "Invalide Eingabe!" << endl;
}
if (s=="j" || s=="J")
{
if (anzahl!=3) anzahl++;
} else {
if (phase>0) phase--;
anzahl = 0;
}
if (anzahl == 3)
{
if (phase != 6) phase++;
switch (phase)
{
case 0:
abfrage = toDay(time(NULL))+86400; //+1 tag
break;
case 1:
abfrage = toDay(time(NULL))+259200; //+3 tage
break;
case 2:
abfrage = toDay(time(NULL))+864000; //+10 tage
break;
case 3:
abfrage = toDay(time(NULL))+2592000; //+30 tage
break;
case 4:
abfrage = toDay(time(NULL))+7776000; //+90 tage
break;
case 5:
abfrage = toDay(time(NULL))+10368000; //+120 tage
break;
case 6:
abfrage = toDay(time(NULL))+17280000; //+200 tage
break;
}
anzahl = 0;
}
cout << "Phase:" << phase << endl << "Anzahl:" << anzahl << endl;
}
};
class vokabelkasten
{
public:
string abfragsprache;
string istsprache;
vector<vokabel> vokabelkarte;
void kastenAuslesen(fstream *data)
{
vokabel neuevok;
string header;
while (header!="kasten")
{
*data >> header;
if (header == "vokabel")
{
neuevok.dateiAuslesen(data);
vokabelkarte.push_back(neuevok); //abspeichern
}
}
}
};
main()
{
srand(time(NULL));
time_t timer = time(NULL);
timer = toDay(timer);
cout << "Lateinvokabelabfrager von Sorunome" << endl << "Lade Vokabelkasten..." << endl;
cout << ":)";
fstream data; // Datei-Handle
data.open("data.txt", ios::in); //datei auslesen
vector<vokabelkasten> kasten;
int i = 0;
int temp = 0;
vokabel neuevok;
vokabelkasten neuvokkasten;
string s;
while(!data.eof())
{
string header;
data >> header;
if (header == "kasten")
{
neuvokkasten.kastenAuslesen(&data);
kasten.push_back(neuvokkasten);
}
}
cout << ":)";
cout << kasten[0].vokabelkarte.size() << " Vokabeln fertig geladen." << endl << endl;
string input;
while (input !="exit")
{
cout << "Input:";
cin >> input;
if (input == "help")
{
cout << endl << "Help" << endl << "exit: verlassen" << endl << "new: neue Vokabel" << endl
<< "print: Vokabel drucken" << endl << "edit: Vokabel editieren" << endl << "ask: Vokabel abfragen" << endl
<< "time: Zeit anzeigen" << endl << "start: Vokabelabfrage" << endl << endl;
}
if (input == "new")
{
cout << endl;
neuevok.neueVokabel();
kasten[0].vokabelkarte.push_back(neuevok);
cout << endl;
}
if (input == "print")
{
temp = 0;
temp--;
while (kasten[0].vokabelkarte.size()<=temp)
{
cout << endl << "Vokabel-ID:";
cin >> temp;
if (kasten[0].vokabelkarte.size()<=temp) cout << "Vokabel existiert nicht!" ;
}
cout << endl;
kasten[0].vokabelkarte[temp].vokabelAnzeigen();
cout << endl;
}
if (input == "edit")
{
temp = 0;
temp--;
while (kasten[0].vokabelkarte.size()<=temp)
{
cout << endl << "Vokabel-ID:";
cin >> temp;
if (kasten[0].vokabelkarte.size()<=temp) cout << "Vokabel existiert nicht!" ;
}
cout << endl;
kasten[0].vokabelkarte[temp].vokabelAnzeigen();
cout << endl;
kasten[0].vokabelkarte[temp].neueVokabel();
cout << endl;
}
if (input == "ask")
{
temp = 0;
temp--;
while (kasten[0].vokabelkarte.size()<=temp)
{
cout << endl << "Vokabel-ID:";
cin >> temp;
if (kasten[0].vokabelkarte.size()<=temp) cout << "Vokabel existiert nicht!" ;
}
cout << endl << endl;
kasten[0].vokabelkarte[temp].vokabelAbfrage();
cout << endl;
}
if (input == "time")
{
cout << endl << toDay(time(NULL)) << endl;
}
if (input == "start")
{
vector<int> abfragen;
temp = toDay(time(NULL));
cout << endl << "Schlage Vokabeln nach..." << endl;
for (i=0;i<kasten[0].vokabelkarte.size();i++)
{
if (temp >= kasten[0].vokabelkarte[i].abfrage)
{
abfragen.push_back(i);
}
}
cout << "Fertig. " << abfragen.size() << " Vokabeln zum Abfragen." << endl;
int abfragenGemischt[abfragen.size()];
for (i=0;i<abfragen.size();i++)
{
temp = rand() % abfragen.size();
if (abfragen[temp]!=-1)
{
abfragenGemischt[i] = abfragen[temp];
abfragen[temp] = -1;
} else {
i--;
}
}
for (i=0;i<abfragen.size();i++)
{
s = "";
cout << endl;
while (!(s=="j" || s=="n" || s=="J" || s=="N"))
{
cout << "Nächste Vokabel abfragen? (J/N)";
cin >> s;
if (!(s=="j" || s=="n" || s=="J" || s=="N")) cout << "Invalide Eingabe!" << endl;
}
cout << endl;
if (s=="j" || s=="J")
{
kasten[0].vokabelkarte[abfragenGemischt[i]].vokabelAbfrage();
} else {
i = abfragen.size();
}
}
cout << endl;
}
}
data.close();
data.open("data.txt", ios::out);
for (i=0;i<kasten[0].vokabelkarte.size();i++)
{
kasten[0].vokabelkarte[i].vokabelSchreiben(&data);
}
data.close();
}