1 package kerho;
2 import java.io.OutputStream;
3 import java.util.Collection;
4 import java.util.Iterator;
5
6 import fi.jyu.mit.ohj2.IO;
7 import fi.jyu.mit.ohj2.Mjonot;
8 import fi.jyu.mit.ohj2.Syotto;
9
22 public class Naytto {
23
24
27 private final Kerho kerho;
28
29
32 private Jasen nykyhenkilo = null;
33
34 private static enum Rivinvaihto {
35
36 EITULE,
37
38 TULEE
39 };
40
41
42
48 public Naytto(Kerho kerho) throws SailoException {
49 if ( kerho == null ) throw new SailoException("Kerho täytyy antaa!");
50 this.kerho = kerho;
51 }
52
53
54
59 private static void tulosta(String s, Rivinvaihto printlf) {
60 System.out.print(s);
61 if ( printlf == Rivinvaihto.TULEE ) System.out.println();
62 }
63
64
65
69 private static void tulosta(String s) {
70 tulosta(s,Rivinvaihto.TULEE);
71 }
72
73
74
78 private static void tulostaEiRV(String s) {
79 tulosta(s,Rivinvaihto.EITULE);
80 }
81
82
83
87 private static void tulostaRivinvaihtoja(int n) {
88 for (int i=0; i<n; i++) tulosta("");
89 }
90
91
92
105 private static void otsikko(char kirjain, String teksti) {
106 tulostaRivinvaihtoja(4);
107 tulosta("" + kirjain + ". " + teksti);
108 tulosta(Mjonot.tayta("=",1+2+teksti.length()));
109 tulostaRivinvaihtoja(2);
110 }
111
112
113
116 private void eiToimi() {
117 tulosta("Ei toimi vielä!");
118 IO.odota_jotakin();
119 }
120
121
122
126 private void avustus(char valinta) {
127 otsikko(valinta, "Avustus");
128 eiToimi();
129 }
130
131
132
137 private void tulosta(OutputStream os, final Jasen jasen) {
138 jasen.tulosta(os);
139 for (Harrastus har: kerho.annaHarrastukset(jasen) ) har.tulosta(os);
140
141
148
149
151 }
152
153
154
159 private boolean kysyTiedot(Jasen jasen) {
160 int kenttia = jasen.getKenttia();
161 int eka = jasen.ekaKentta();
162 for (int k=eka; k<kenttia; k++ ) {
163 while ( true ) { String oletus = jasen.anna(k);
165 String vastaus = Syotto.kysy(jasen.getKysymys(k),oletus);
166 vastaus = Mjonot.poista_2_tyhjat(vastaus).trim();
167 if ( k == eka && "".equals(vastaus) ) return false;
168 if ( ".".equals(vastaus) ) return true;
169 if ( "q".equals(vastaus) ) return false;
170 String virhe = jasen.aseta(k,vastaus);
171 if ( virhe == null ) break;
172 System.out.println(virhe);
173 System.out.println("Annatko tiedon uudelleen.");
174 }
175 }
176 return true;
177 }
178
179
180
186 private boolean kysyUusiJasen() {
187 Jasen jasen = new Jasen();
188 jasen.rekisteroi();
189 while ( kysyTiedot(jasen) ) {
190 tulosta("Lisätäänkö");
191 tulosta(System.out,jasen);
192 tulostaEiRV(":");
193 if ( IO.kylla_vastaus() ) {
194 try {
195 kerho.lisaa(jasen);
196 nykyhenkilo = jasen;
197 return true;
198 } catch ( SailoException ex ) {
199 tulosta(ex.getMessage());
200 }
201 }
202 }
203 kerho.poista(jasen.getTunnusnro());
204 return false;
205 }
206
207
208
212 private void lisaaUusiJasen(char valinta) {
213 otsikko(valinta,"Uuden jäsenen lisäys");
214 while ( kysyUusiJasen() ); }
216
217
218
222 private void etsiJasenenTiedot(char valinta) {
223 otsikko(valinta,"Etsi jäsenen tiedot");
224
225 if ( nykyhenkilo != null ) {
226 System.out.println("Nykyinen henkilö:");
227 tulosta(System.out,nykyhenkilo);
228 }
229
230 String sallitut = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ";
231 Jasen apujasen = new Jasen();
232 sallitut = sallitut.substring(0,apujasen.getKenttia());
233
234 char c;
235
236 while ( true ) {
237 System.out.print("Valitse kenttä jonka mukaan etsitään (?=kenttälista uudel.) : ");
238 c = IO.odota_nappain("?"+sallitut,'q',IO.MERKKI_ISOKSI);
239 if ( c == 'q' ) return;
240 if ( c != '?') break;
241
242 for ( int k = apujasen.ekaKentta(); k < apujasen.getKenttia(); k++) {
243 System.out.println(" " + sallitut.charAt(k) + " = " + apujasen.getKysymys(k));
244 }
245
246 }
247
248 int k = sallitut.indexOf(c);
249
250 String kysymys = apujasen.getKysymys(k);
251 String vastaus = Syotto.kysy(kysymys,"");
252 if ( "".equals(vastaus) ) return;
253 if ( "q".equals(vastaus) ) return;
254
255 Collection<Jasen> loytyneet = kerho.etsi(vastaus,k);
256
257 System.out.println("Tähän täsmää " + loytyneet.size() + " jäsentä:");
258
259 for (Jasen jasen : loytyneet ) {
260 tulosta(System.out,jasen);
261 nykyhenkilo = jasen;
262 IO.odota_jotakin();
263 }
264
265
266 }
267
268
269
270
271
275 private void tulosteet(char valinta) {
276 otsikko(valinta,"Tulosteet");
277 tulosta("Toimii toistaiseksi vain näytölle");
278 tulosta("---------------------------------------------------------");
279
280 int i = 0;
281 for ( Iterator<Jasen> it = kerho.iterator(); it.hasNext(); ) {
282 Jasen jasen = it.next();
283 tulosta("Jäsen nro: " + i++);
286 tulosta(System.out,jasen);
287 tulosta("");
288 }
289
290 tulosta("---------------------------------------------------------");
291 IO.odota_jotakin();
292 }
293
294
295
299 private void tietojenKorjailu(char valinta) {
300 otsikko(valinta,"Tietojen korjailu");
301 eiToimi();
302 }
303
304
305
309 private void paivitaJasenmaksuja(char valinta) {
310 otsikko(valinta,"Päivitä jäsenmaksuja");
311 eiToimi();
312 }
313
314
315
318 private void paamenu() {
319 tulosta("\n\n\n\n");
320 tulosta("Jäsenrekisteri");
321 tulosta("==============");
322 tulosta("");
323 tulosta("Kerhossa " + kerho.getNimi()+ " on " +
324 kerho.getJasenia() + " jäsentä.");
325 tulosta("");
326 tulosta("Valitse:");
327 tulosta(" ? = avustus");
328 tulosta(" 0 = lopetus");
329 tulosta(" 1 = lisää uusi jäsen");
330 tulosta(" 2 = etsi jäsenen tiedot");
331 tulosta(" 3 = tulosteet");
332 tulosta(" 4 = tietojen korjailu");
333 tulosta(" 5 = päivitä jäsenmaksuja");
334 tulostaEiRV(" :");
335 }
336
337
338
343 public int paavalinta() {
344 char nappain;
345
346 while ( true ) {
347
348 paamenu();
349
350 nappain = IO.odota_nappain("?012345",IO.EI_OLETUSTA,IO.MERKKI_ISOKSI);
351
352 switch (nappain) {
353 case '?': avustus(nappain); break;
354 case '0': return 0;
355 case '1': lisaaUusiJasen(nappain); break;
356 case '2': etsiJasenenTiedot(nappain); break;
357 case '3': tulosteet(nappain); break;
358 case '4': tietojenKorjailu(nappain); break;
359 case '5': paivitaJasenmaksuja(nappain); break;
360 default : tulosta("Näin ei voi käydä!"); return 1;
361 }
362
363 }
364 }
365
366
367
370 private void logo() {
371 tulosta("");
372 tulosta(" ###################################");
373 tulosta(" # J Ä S E N R E K I S T E R I #");
374 tulosta(" # versio 9.95 #");
375 tulosta(" # Hannu Hanhi #");
376 tulosta(" ###################################");
377 }
378
379
380
383 public void ohjeet() {
384 logo();
385 tulosta("");
386 tulosta("Tällä ohjelmalla ylläpidetään kerhon jäsenrekisteriä.");
387 }
388
389
390
393 public void kiitokset() {
394 tulosta("");
395 tulosta("KIITOS KÄYTÖSTÄ JA TERVETULOA UUDELLEEN");
396 tulosta("");
397 tulosta("");
398 }
399
400
401
406 public String lueKerho() {
407 tulosta("Anna kerhon nimi>");
408 eiToimi();
409 try {
410 kerho.lueTiedostosta("kelmit");
411 } catch ( SailoException ex ) {
412 System.out.println(ex.getMessage());
413 return ex.getMessage();
414 }
415
416 return "";
417 }
418
419
420
425 public String talletaKerho() {
426 logo();
427
428 tulosta("");
429
430 tulosta("Talletus...");
431 try {
432 kerho.talleta();
433 } catch ( SailoException ex ) {
434 System.out.println(ex.getMessage());
435 return ex.getMessage();
436 }
437
438 return "";
439 }
440
441
442
446 public static void main(String[] args) {
447 Kerho kerho = new Kerho();
448
449 try {
450 Naytto naytto = new Naytto(kerho);
451
452 naytto.ohjeet();
453
454 naytto.lueKerho();
455
456 naytto.paavalinta();
457
458 naytto.talletaKerho();
459
460 naytto.kiitokset();
461 }
462 catch (Exception ex) {
463 System.out.println("VIRHE: " + ex.getMessage());
464 }
465 }
466
467 }
468
469