| Naytto.java |
1 import java.io.*;
2 import java.util.*;
3
4 import fi.jyu.mit.ohj2.*;
5 /**
6 * Käyttöliittymäluokka Kerho-ohjelmaan
7 * Kerho-ohjelman menujen testaus. Varsinaiset toiminnot puuttuvat.<br>
8 * Tarvitsee avukseen JAR-paketin:
9 * <a href="http://www.mit.jyu.fi/vesal/kurssit/ohj2/ali/Ali.jar">Ali.jar</a><br>
10 * Aliohjelmien dokumentaatio on:
11 * <a href="http://www.mit.jyu.fi/vesal/kurssit/ohj2/ali/index.html">\kurssit\ohj2\ali</a><br>
12 * <br>
13 *
14 * Lisätty tietorakenteen käyttö jäsenistön osalta.
15 * Uuden jäsenen lisääminen lisää aina vain Aku Ankan (tosi sat. hetulla).
16 * Tulostus tulostaa kaikki jäsenet.
17 * Harrastusten osalta lisää vain pitsin nypläyksiä.
18 *
19 * Muutokset: 02.04.2003, tiedon syöttö<br>
20 *
21 * @author Vesa Lappalainen
22 * @version 1.0, 09.02.2003
23 * @version 1.1, 23.02.2003
24 * @version 1.2, 20.03.2003
25 * @version 1.3, 02.04.2003
26 */
27 public class Naytto {
28
29 /**
30 * Viite kerhoon, jota tämä käyttöliittymä käyttää
31 */
32 private Kerho kerho;
33
34 /**
35 * Käyttöliittymän alustus. Käyttöliittymälle PITÄÄ kerto mitä
36 * Kerho se käsittelee.
37 * @param kerho jota käsitellään
38 * @throws Exception jos kerhoa ei ole tuotu parametrina
39 */
40 public Naytto(Kerho kerho) throws Exception {
41 if ( kerho == null ) throw new Exception("Kerho täytyy antaa!");
42 this.kerho = kerho;
43 }
44
45 /**
46 * Apualiohjelma tulostamiseen
47 * @param s tuolsettava merkkijono
48 * @param printlf tulostetaanko (true) rivinvaihto vai ei (false)
49 */
50 private static void tulosta(String s, boolean printlf) {
51 System.out.print(s);
52 if ( printlf ) System.out.println();
53 }
54
55 /**
56 * Apualiohjelma tulostamiseen, tulostaa myös rivinvaihdon.
57 * @param s tulostettava merkkijono
58 */
59 private static void tulosta(String s) {
60 tulosta(s,true);
61 }
62
63 /**
64 * Tulostaa n kappaletta tyhjiä rivejä
65 * @param n tulostettavien tyhjien rivien lukumäärä
66 */
67 private static void tyhja(int n) {
68 for (int i=0; i<n; i++) tulosta("");
69 }
70
71 /**
72 * Tulostaa kirjaimen ja tekstin alleviivattuna sekä tyhjää ympärille.
73 * <pre>
74 * Kutsu: otsikko('1',"Kissa istuu puussa");
75 * tulostaa:
76 * --- 4 tyhjää riviä
77 * 1. Kissa istuu puussa
78 * =====================
79 * --- 2 tyhjää riviä
80 * </pre>
81 * @param kirjain alkuun tulostettava kirjain
82 * @param teksti kirjaimen perään tulostettava. teksti
83 */
84 private static void otsikko(char kirjain, String teksti) {
85 tyhja(4);
86 tulosta("" + kirjain + ". " + teksti);
87 tulosta(Mjonot.tayta("=",1+2+teksti.length()));
88 tyhja(2);
89 }
90
91 /**
92 * Tulostaa "Ei toimi vielä" ja jää odottamaan näppäimen painallusta
93 */
94 void ei_toimi() {
95 tulosta("Ei toimi vielä!");
96 IO.odota_jotakin();
97 }
98
99 /**
100 * Avustustoiminto
101 * @param valinta kirjain jolla toiminto aktivoitiin
102 */
103 void avustus(char valinta) {
104 otsikko(valinta, "Avustus");
105 ei_toimi();
106 }
107
108 /**
109 * Tulostaa yhden jäsenen tiedot (myös harrastukset) valittuun
110 * tietovirtaan.
111 * @param os tietovirta johon tulostetaan
112 * @param jasen tulostettava jäsen
113 */
114 private void tulosta(OutputStream os, final Jasen jasen) {
115 jasen.tulosta(os);
116 int jid = jasen.getTunnus_nro();
117 for (Iterator i=kerho.harrastus_iterator(jid); i.hasNext(); ) {
118 Harrastus har = (Harrastus)i.next();
119 har.tulosta(os);
120 }
121 }
122
123 /**
124 * Kystään tiedot yhdelle jäsenelle. Muutetaan suoraan jäsenen tietoja.
125 * @param jasen muutettava jäsen
126 * @return halusiko käyttäjä pois muutoksesta (false) vai onnistuiko muutos (true)
127 */
128 private boolean kysy_tiedot(Jasen jasen) {
129
130 int kenttia = jasen.getKenttia();
131 int eka = jasen.ekaKentta();
132
133 for (int k=eka; k<kenttia; k++ ) {
134 while ( true ) {
135 String oletus = jasen.anna(k);
136 String kysymys = jasen.getKysymys(k);
137 String vastaus = Syotto.kysy(kysymys,oletus);
138 vastaus = Mjonot.poista_2_tyhjat(vastaus).trim();
139 if ( k == eka && vastaus.equals("") ) return false;
140 if ( vastaus.equals("q") ) return false;
141 if ( vastaus.equals(".") ) return true;
142 String virhe = jasen.aseta(k,vastaus);
143 if ( virhe == null ) break;
144 System.out.println("Virhe: " + virhe);
145 }
146
147 }
148 return true;
149
150 /*
151 tulosta("Toistaiseksi osaan lisätä vain Aku Ankan");
152 jasen.vastaa_aku_ankka();
153 int lkm = Jasen.rand(0,5);
154 for (int i=0; i<lkm; i++) {
155 Harrastus har = new Harrastus();
156 har.vastaa_pitsin_nyplays(jasen.getTunnus_nro());
157 kerho.lisaa(har);
158 }
159 */
160 // return true;
161 }
162
163
164 /**
165 * Kysy tiedot uudelle jäsenelle. Luodaan uusi jäsen ja rekisteröidään.
166 * Jos jäsentä ei halutakkaan lisätä, niin mahdolliset häneen liittyvät
167 * tiedot tulee poistaa.
168 * @return halutaanko vielä jatkaa (true) vai lopettaa kyseleminen (false)
169 */
170 private boolean kysy_uusi_jasen() {
171 Jasen jasen = new Jasen();
172 jasen.rekisteroi();
173 while ( kysy_tiedot(jasen) ) {
174 tulosta("Lisätäänkö");
175 tulosta(System.out,jasen);
176 tulosta(":",false);
177 if ( IO.kylla_vastaus() ) {
178 try {
179 kerho.lisaa(jasen);
180 return true;
181 } catch ( SailoException ex ) {
182 tulosta(ex.getMessage());
183 }
184 }
185 }
186 kerho.poista(jasen.getTunnus_nro());
187 return false;
188 }
189
190 /**
191 * Uuden jäsenen lisäys
192 * @param valinta kirjain jolla toiminto aktivoitiin
193 */
194 void lisaa_uusi_jasen(char valinta) {
195 otsikko(valinta,"Uuden jäsenen lisäys");
196 while ( kysy_uusi_jasen() );
197 }
198
199 /**
200 * Jäsenen tietojen etsiminen
201 * @param valinta kirjain jolla toiminto aktivoitiin
202 */
203 void etsi_jasenen_tiedot(char valinta)
204 {
205 otsikko(valinta,"Etsi jäsenen tiedot");
206 ei_toimi();
207 }
208
209
210 /**
211 * Ohjelman tulosteet, pitäisi tulla alimenu
212 * @param valinta kirjain jolla toiminto aktivoitiin
213 */
214 void tulosteet(char valinta) {
215 otsikko(valinta,"Tulosteet");
216 tulosta("Toimii toistaiseksi vain näytölle");
217 tulosta("---------------------------------------------------------");
218
219 for (Iterator i=kerho.jasen_iterator(); i.hasNext(); ) {
220 Jasen jasen = (Jasen)i.next();
221 tulosta("Jäsen nro: " + jasen.getTunnus_nro());
222 tulosta(System.out,jasen);
223 tulosta("");
224 }
225
226 tulosta("---------------------------------------------------------");
227 IO.odota_jotakin();
228 }
229
230
231 /**
232 * Tietojen korjailu
233 * @param valinta kirjain jolla toiminto aktivoitiin
234 */
235 void tietojen_korjailu(char valinta) {
236 otsikko(valinta,"Tietojen korjailu");
237 ei_toimi();
238 }
239
240
241 /**
242 * Jäsenmaksujen päivitys
243 * @param valinta kirjain jolla toiminto aktivoitiin
244 */
245 void paivita_jasenmaksuja(char valinta) {
246 otsikko(valinta,"Päivitä jäsenmaksuja");
247 ei_toimi();
248 }
249
250
251 /**
252 * Tulostaa ohjelman päämenun
253 */
254 public void paamenu() {
255 tulosta("\n\n\n\n");
256 tulosta("Jäsenrekisteri");
257 tulosta("==============");
258 tulosta("");
259 tulosta("Kerhossa " + kerho.getNimi()+ " on " +
260 kerho.getJasenia() + " jäsentä.");
261 tulosta("");
262 tulosta("Valitse:");
263 tulosta(" ? = avustus");
264 tulosta(" 0 = lopetus");
265 tulosta(" 1 = lisää uusi jäsen");
266 tulosta(" 2 = etsi jäsenen tiedot");
267 tulosta(" 3 = tulosteet");
268 tulosta(" 4 = tietojen korjailu");
269 tulosta(" 5 = päivitä jäsenmaksuja");
270 tulosta(" :",false);
271 }
272
273 /**
274 * Silmukka jossa odotetaan näppäintä ja suoritetaan vastaava toiminto.
275 * 0:n painaminen lopettaa silmukan ja palaa kutsuvaan ohjelmaan.
276 * @return palauttaa 0 jos kaikki meni hyvin, 1 jos tuli virhe
277 */
278 int paavalinta() {
279 char nappain;
280
281 while ( true ) {
282
283 paamenu();
284
285 nappain = IO.odota_nappain("?012345",IO.EI_OLETUSTA,IO.MERKKI_ISOKSI);
286
287 switch (nappain) {
288 case '?': avustus(nappain); break;
289 case '0': return 0;
290 case '1': lisaa_uusi_jasen(nappain); break;
291 case '2': etsi_jasenen_tiedot(nappain); break;
292 case '3': tulosteet(nappain); break;
293 case '4': tietojen_korjailu(nappain); break;
294 case '5': paivita_jasenmaksuja(nappain); break;
295 default : tulosta("Näin ei voi käydä!"); return 1;
296 }
297
298 }
299 }
300
301 /**
302 * Tulostaa ohjelman logon
303 */
304 void logo() {
305 tulosta("");
306 tulosta(" ###################################");
307 tulosta(" # J Ä S E N R E K I S T E R I #");
308 tulosta(" # versio 9.95 #");
309 tulosta(" # Hannu Hanhi #");
310 tulosta(" ###################################");
311 }
312
313
314 /**
315 * Tulostaa ohjelman alkuohjeet
316 */
317 void ohjeet() {
318 logo();
319 tulosta("");
320 tulosta("Tällä ohjelmalla ylläpidetään kerhon jäsenrekisteriä.");
321 }
322
323
324 /**
325 * Tulostaa loppukiitokset
326 */
327 void kiitokset() {
328 tulosta("");
329 tulosta("KIITOS KÄYTÖSTÄ JA TERVETULOA UUDELLEEN");
330 tulosta("");
331 tulosta("");
332 }
333
334
335 /**
336 * Lukee kerhon tiedot levyltä. Kysyy ensin käyttäjältä tiedoson nimen.
337 * @return palauttaa tyhjän merkkijonon jos kaikki menee hyvin, muuten
338 * virhetekstin
339 */
340 String lue_kerho() {
341 tulosta("Anna kerhon nimi>");
342 ei_toimi();
343 try {
344 kerho.lue_tiedostosta("kelmit");
345 } catch ( SailoException ex ) {
346 System.out.println(ex.getMessage());
347 return ex.getMessage();
348 }
349
350 return "";
351 }
352
353
354 /**
355 * Tallentaa kerhon tiedot levylle.
356 * @return palauttaa tyhjän merkkijonon jos kaikki menee hyvin, muuten
357 * virhetekstin
358 */
359 String talleta_kerho() {
360 logo();
361
362 tulosta("");
363
364 tulosta("Talletus...");
365 try {
366 kerho.talleta();
367 } catch ( SailoException ex ) {
368 System.out.println(ex.getMessage());
369 return ex.getMessage();
370 }
371
372 return "";
373 }
374
375
376 /**
377 * Ohjelman pääohjelma
378 * @param args komentorivin parametrit, ei käytössä vielä
379 */
380 public static void main(String[] args) {
381 Kerho kerho = new Kerho();
382
383 try {
384 Naytto naytto = new Naytto(kerho);
385
386 naytto.ohjeet();
387
388 naytto.lue_kerho();
389
390 naytto.paavalinta();
391
392 naytto.talleta_kerho();
393
394 naytto.kiitokset();
395 }
396 catch (Exception ex) {
397 System.out.println("VIRHE: " + ex.getMessage());
398 }
399 }
400
401 }
402
403 | Naytto.java |