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