SHOW:
|
|
- or go back to the newest paste.
| 1 | #include <iostream> | |
| 2 | #include <fstream> | |
| 3 | #include <string> | |
| 4 | #include <vector> | |
| 5 | #include <ctime> | |
| 6 | #include <cstdlib> | |
| 7 | ||
| 8 | using namespace std; | |
| 9 | ||
| 10 | time_t toDay(time_t time) {
| |
| 11 | struct tm *t = localtime(&time); | |
| 12 | t->tm_hour = t->tm_min = t->tm_sec = 0; | |
| 13 | return mktime(t); | |
| 14 | } | |
| 15 | ||
| 16 | class vokabel | |
| 17 | {
| |
| 18 | public: | |
| 19 | string deutsch; | |
| 20 | string latein; | |
| 21 | int phase; | |
| 22 | int abfrage; | |
| 23 | int anzahl; | |
| 24 | void dateiAuslesen(fstream *data) | |
| 25 | {
| |
| 26 | /* | |
| 27 | Pro Vokabel: | |
| 28 | Erste Zeile: Deutsch | |
| 29 | Zweite Zeile: Latein | |
| 30 | Dritte Zeile: Phase | |
| 31 | Vierte Zeile: Zeit | |
| 32 | Fünfte Zeile: Anzahl | |
| 33 | */ | |
| 34 | *data >> deutsch; //erste zeile | |
| 35 | ||
| 36 | *data >> latein; //zweite zeile | |
| 37 | ||
| 38 | *data >> phase; //dritte zeile | |
| 39 | ||
| 40 | *data >> abfrage; //vierte zeile | |
| 41 | ||
| 42 | *data >> anzahl; //fünfte zeile | |
| 43 | } | |
| 44 | void neueVokabel() | |
| 45 | {
| |
| 46 | cout << "Latein:"; | |
| 47 | cin >> latein; | |
| 48 | cout << "Deutsch:"; | |
| 49 | cin >> deutsch; | |
| 50 | phase = 0; | |
| 51 | abfrage = toDay(time(NULL)); | |
| 52 | anzahl = 0; | |
| 53 | } | |
| 54 | void vokabelAnzeigen() | |
| 55 | {
| |
| 56 | cout << "Latein:" << latein << endl << "Deutsch:" << deutsch << endl << "Phase:" << phase << endl << "Abfrage:" << abfrage | |
| 57 | << endl << "Anzahl:" << anzahl << endl; | |
| 58 | } | |
| 59 | void vokabelSchreiben(fstream *data) | |
| 60 | {
| |
| 61 | *data << "vokabel" << endl << deutsch << endl << latein << endl << phase << endl << abfrage << endl << anzahl << endl; | |
| 62 | } | |
| 63 | void vokabelAbfrage() | |
| 64 | {
| |
| 65 | string s; | |
| 66 | cout << latein << endl << "Deutsch:"; | |
| 67 | cin >> s; | |
| 68 | cout << "Lösung:" << deutsch << endl; | |
| 69 | ||
| 70 | s = ""; | |
| 71 | while (!(s=="j" || s=="n" || s=="J" || s=="N")) | |
| 72 | {
| |
| 73 | cout << "Richtig? (J/N)"; | |
| 74 | cin >> s; | |
| 75 | if (!(s=="j" || s=="n" || s=="J" || s=="N")) cout << "Invalide Eingabe!" << endl; | |
| 76 | } | |
| 77 | if (s=="j" || s=="J") | |
| 78 | {
| |
| 79 | if (anzahl!=3) anzahl++; | |
| 80 | } else {
| |
| 81 | if (phase>0) phase--; | |
| 82 | anzahl = 0; | |
| 83 | ||
| 84 | } | |
| 85 | if (anzahl == 3) | |
| 86 | {
| |
| 87 | if (phase != 6) phase++; | |
| 88 | switch (phase) | |
| 89 | {
| |
| 90 | case 0: | |
| 91 | abfrage = toDay(time(NULL))+86400; //+1 tag | |
| 92 | break; | |
| 93 | case 1: | |
| 94 | abfrage = toDay(time(NULL))+259200; //+3 tage | |
| 95 | break; | |
| 96 | case 2: | |
| 97 | abfrage = toDay(time(NULL))+864000; //+10 tage | |
| 98 | break; | |
| 99 | case 3: | |
| 100 | abfrage = toDay(time(NULL))+2592000; //+30 tage | |
| 101 | break; | |
| 102 | case 4: | |
| 103 | abfrage = toDay(time(NULL))+7776000; //+90 tage | |
| 104 | break; | |
| 105 | case 5: | |
| 106 | abfrage = toDay(time(NULL))+10368000; //+120 tage | |
| 107 | break; | |
| 108 | case 6: | |
| 109 | abfrage = toDay(time(NULL))+17280000; //+200 tage | |
| 110 | break; | |
| 111 | } | |
| 112 | anzahl = 0; | |
| 113 | } | |
| 114 | ||
| 115 | cout << "Phase:" << phase << endl << "Anzahl:" << anzahl << endl; | |
| 116 | } | |
| 117 | }; | |
| 118 | ||
| 119 | class vokabelkasten | |
| 120 | {
| |
| 121 | public: | |
| 122 | string abfragsprache; | |
| 123 | string istsprache; | |
| 124 | vector<vokabel> vokabelkarte; | |
| 125 | void kastenAuslesen(fstream *data) | |
| 126 | {
| |
| 127 | vokabel neuevok; | |
| 128 | string header; | |
| 129 | while (header!="kasten") | |
| 130 | {
| |
| 131 | *data >> header; | |
| 132 | if (header == "vokabel") | |
| 133 | {
| |
| 134 | neuevok.dateiAuslesen(data); | |
| 135 | vokabelkarte.push_back(neuevok); //abspeichern | |
| 136 | } | |
| 137 | } | |
| 138 | } | |
| 139 | }; | |
| 140 | ||
| 141 | main() | |
| 142 | {
| |
| 143 | srand(time(NULL)); | |
| 144 | time_t timer = time(NULL); | |
| 145 | timer = toDay(timer); | |
| 146 | - | cout << "Lateinvokabelabfrager von Sorunome" << endl << "Lade Vokabelkästen..." << endl; |
| 146 | + | cout << "Lateinvokabelabfrager von Sorunome" << endl << "Lade Vokabelkasten..." << endl; |
| 147 | cout << ":)"; | |
| 148 | fstream data; // Datei-Handle | |
| 149 | - | vector<vokabel> kasten; |
| 149 | + | |
| 150 | vector<vokabelkasten> kasten; | |
| 151 | int i = 0; | |
| 152 | int temp = 0; | |
| 153 | vokabel neuevok; | |
| 154 | vokabelkasten neuvokkasten; | |
| 155 | string s; | |
| 156 | while(!data.eof()) | |
| 157 | {
| |
| 158 | string header; | |
| 159 | - | if (header == "vokabel") |
| 159 | + | |
| 160 | if (header == "kasten") | |
| 161 | - | neuevok.dateiAuslesen(&data); |
| 161 | + | |
| 162 | - | kasten[0].vokabelkarte.push_back(neuevok); //abspeichern |
| 162 | + | neuvokkasten.kastenAuslesen(&data); |
| 163 | kasten.push_back(neuvokkasten); | |
| 164 | } | |
| 165 | ||
| 166 | - | cout << ":)"; |
| 166 | + | |
| 167 | cout << ":)"; | |
| 168 | cout << kasten[0].vokabelkarte.size() << " Vokabeln fertig geladen." << endl << endl; | |
| 169 | string input; | |
| 170 | while (input !="exit") | |
| 171 | {
| |
| 172 | cout << "Input:"; | |
| 173 | cin >> input; | |
| 174 | if (input == "help") | |
| 175 | {
| |
| 176 | cout << endl << "Help" << endl << "exit: verlassen" << endl << "new: neue Vokabel" << endl | |
| 177 | << "print: Vokabel drucken" << endl << "edit: Vokabel editieren" << endl << "ask: Vokabel abfragen" << endl | |
| 178 | << "time: Zeit anzeigen" << endl << "start: Vokabelabfrage" << endl << endl; | |
| 179 | } | |
| 180 | if (input == "new") | |
| 181 | {
| |
| 182 | cout << endl; | |
| 183 | neuevok.neueVokabel(); | |
| 184 | kasten[0].vokabelkarte.push_back(neuevok); | |
| 185 | cout << endl; | |
| 186 | } | |
| 187 | if (input == "print") | |
| 188 | {
| |
| 189 | temp = 0; | |
| 190 | temp--; | |
| 191 | while (kasten[0].vokabelkarte.size()<=temp) | |
| 192 | {
| |
| 193 | cout << endl << "Vokabel-ID:"; | |
| 194 | cin >> temp; | |
| 195 | if (kasten[0].vokabelkarte.size()<=temp) cout << "Vokabel existiert nicht!" ; | |
| 196 | } | |
| 197 | cout << endl; | |
| 198 | kasten[0].vokabelkarte[temp].vokabelAnzeigen(); | |
| 199 | cout << endl; | |
| 200 | } | |
| 201 | if (input == "edit") | |
| 202 | {
| |
| 203 | temp = 0; | |
| 204 | temp--; | |
| 205 | while (kasten[0].vokabelkarte.size()<=temp) | |
| 206 | {
| |
| 207 | cout << endl << "Vokabel-ID:"; | |
| 208 | cin >> temp; | |
| 209 | if (kasten[0].vokabelkarte.size()<=temp) cout << "Vokabel existiert nicht!" ; | |
| 210 | } | |
| 211 | cout << endl; | |
| 212 | kasten[0].vokabelkarte[temp].vokabelAnzeigen(); | |
| 213 | cout << endl; | |
| 214 | kasten[0].vokabelkarte[temp].neueVokabel(); | |
| 215 | cout << endl; | |
| 216 | ||
| 217 | } | |
| 218 | if (input == "ask") | |
| 219 | {
| |
| 220 | temp = 0; | |
| 221 | temp--; | |
| 222 | while (kasten[0].vokabelkarte.size()<=temp) | |
| 223 | {
| |
| 224 | cout << endl << "Vokabel-ID:"; | |
| 225 | cin >> temp; | |
| 226 | if (kasten[0].vokabelkarte.size()<=temp) cout << "Vokabel existiert nicht!" ; | |
| 227 | } | |
| 228 | cout << endl << endl; | |
| 229 | kasten[0].vokabelkarte[temp].vokabelAbfrage(); | |
| 230 | cout << endl; | |
| 231 | } | |
| 232 | if (input == "time") | |
| 233 | {
| |
| 234 | cout << endl << toDay(time(NULL)) << endl; | |
| 235 | } | |
| 236 | if (input == "start") | |
| 237 | {
| |
| 238 | vector<int> abfragen; | |
| 239 | temp = toDay(time(NULL)); | |
| 240 | cout << endl << "Schlage Vokabeln nach..." << endl; | |
| 241 | for (i=0;i<kasten[0].vokabelkarte.size();i++) | |
| 242 | {
| |
| 243 | if (temp >= kasten[0].vokabelkarte[i].abfrage) | |
| 244 | {
| |
| 245 | abfragen.push_back(i); | |
| 246 | } | |
| 247 | } | |
| 248 | cout << "Fertig. " << abfragen.size() << " Vokabeln zum Abfragen." << endl; | |
| 249 | int abfragenGemischt[abfragen.size()]; | |
| 250 | for (i=0;i<abfragen.size();i++) | |
| 251 | {
| |
| 252 | temp = rand() % abfragen.size(); | |
| 253 | if (abfragen[temp]!=-1) | |
| 254 | {
| |
| 255 | abfragenGemischt[i] = abfragen[temp]; | |
| 256 | abfragen[temp] = -1; | |
| 257 | } else {
| |
| 258 | i--; | |
| 259 | } | |
| 260 | } | |
| 261 | for (i=0;i<abfragen.size();i++) | |
| 262 | {
| |
| 263 | s = ""; | |
| 264 | cout << endl; | |
| 265 | while (!(s=="j" || s=="n" || s=="J" || s=="N")) | |
| 266 | {
| |
| 267 | cout << "Nächste Vokabel abfragen? (J/N)"; | |
| 268 | cin >> s; | |
| 269 | if (!(s=="j" || s=="n" || s=="J" || s=="N")) cout << "Invalide Eingabe!" << endl; | |
| 270 | } | |
| 271 | cout << endl; | |
| 272 | if (s=="j" || s=="J") | |
| 273 | {
| |
| 274 | kasten[0].vokabelkarte[abfragenGemischt[i]].vokabelAbfrage(); | |
| 275 | } else {
| |
| 276 | i = abfragen.size(); | |
| 277 | } | |
| 278 | } | |
| 279 | cout << endl; | |
| 280 | } | |
| 281 | } | |
| 282 | data.close(); | |
| 283 | data.open("data.txt", ios::out);
| |
| 284 | for (i=0;i<kasten[0].vokabelkarte.size();i++) | |
| 285 | {
| |
| 286 | kasten[0].vokabelkarte[i].vokabelSchreiben(&data); | |
| 287 | } | |
| 288 | data.close(); | |
| 289 | ||
| 290 | } |