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 | } |