1   package kerho;
2   
3   import java.io.*;
4   
5   import fi.jyu.mit.ohj2.Mjonot;
6   
7   /**
8    * Harrastus joka osaa mm. itse huolehtia tunnus_nro:staan.
9    *
10   * @author Vesa Lappalainen
11   * @version 1.0, 22.02.2003
12   */
13  public class Harrastus {
14    private int    tunnusnro;
15    private int    jasenNro;
16    private String ala;
17    private int    aloitusvuosi;
18    private int    tuntiaViikossa;
19  
20    private static int seuraavaNro = 1;
21  
22    /**
23     * Alustetaan harrastus.  Toistaiseksi ei tarvitse tehdä mitään
24     */
25    public Harrastus() {  
26        // Vielä ei tarvita mitään
27    }
28  
29    
30    /**
31     * Alustetaan tietyn jäsenen harrastus.  
32     * @param jasenNro jäsenen viitenumero 
33     */
34    public Harrastus(int jasenNro) {  
35      this.jasenNro = jasenNro;
36    }
37  
38    
39    /**
40     * Apumetodi, jolla saadaan täytettyä testiarvot Harrastukselle.
41     * Aloitusvuosi arvotaan, jotta kahdella harrastuksella ei olisi
42     * samoja tietoja.
43     * @param nro viite henkilöön, jonka harrastuksesta on kyse
44     */
45    public void vastaaPitsinNyplays(int nro) {
46       jasenNro = nro;
47       ala = "Pitsin nypläys";
48       aloitusvuosi = Jasen.rand(1900,2000);
49       tuntiaViikossa = Jasen.rand(0,60);
50    }
51    
52    
53    /**
54     * Tulostetaan harrastuksen tiedot
55     * @param out tietovirta johon tulostetaan
56     */
57    public void tulosta(PrintStream out) {
58      out.println(ala + " " + aloitusvuosi + " " + tuntiaViikossa);
59    }
60  
61    
62    /**
63     * Tulostetaan henkilön tiedot
64     * @param os tietovirta johon tulostetaan
65     */
66    public void tulosta(OutputStream os) {
67      tulosta(new PrintStream(os));
68    }
69  
70    /**
71     * Antaa harrastukselle seuraavan rekisterinumeron.
72     * @return harrastuksen uusi tunnus_nro
73     * @example
74     * <pre name="test">
75     *   Harrastus pitsi1 = new Harrastus();
76     *   pitsi1.getTunnusnro() === 0;
77     *   pitsi1.rekisteroi();
78     *   Harrastus pitsi2 = new Harrastus();
79     *   pitsi2.rekisteroi();
80     *   int n1 = pitsi1.getTunnusnro();
81     *   int n2 = pitsi2.getTunnusnro();
82     *   n1 === n2-1;
83     * </pre>
84     */
85    public int  rekisteroi() {
86      tunnusnro = seuraavaNro;
87      seuraavaNro++;
88      return tunnusnro;
89    }
90  
91    
92    /**
93     * Palautetaan harrastuksen oma id
94     * @return harrastuksen id
95     */
96    public int getTunnusnro() { return tunnusnro; }
97    
98    
99    /**
100    * Palautetaan mille jäsenelle harrastus kuuluu
101    * @return jäsenen id
102    */
103   public int getJasenNro() { return jasenNro; }
104 
105     
106   /**
107    * Palauttaa harrastuksen tiedot merkkijonona jonka voi tallentaa tiedostoon.
108    * @return harrastus tolppaeroteltuna merkkijonona 
109    */
110   @Override
111   public String toString() {
112     return              "" +
113       tunnusnro      + "|" +
114       jasenNro       + "|" +
115       ala            + "|" +
116       aloitusvuosi   + "|" +
117       tuntiaViikossa;
118   }
119 
120   
121   /**
122    * Selvitää harrastuksen tiedot | erotellusta merkkijonosta.
123    * Pitää huolen että seuraavaNro on suurempi kuin tuleva tunnusnro.
124    * @param rivi josta harrastuksen tiedot otetaan
125    * @example
126    * <pre name="test">
127    *   Harrastus harrastus = new Harrastus();
128    *   harrastus.parse("   2   |  10  |   Kalastus  | 1949 | 22 t ");
129    *   harrastus.getJasenNro() === 10;
130    *   harrastus.toString()    === "2|10|Kalastus|1949|22";
131    *   
132    *   harrastus.rekisteroi();
133    *   int n = harrastus.getTunnusnro();
134    *   harrastus.parse(""+(n+20));
135    *   harrastus.rekisteroi();
136    *   harrastus.getTunnusnro() === n+20+1;
137    *   harrastus.toString()     === "" + (n+20+1) + "|10|Kalastus|1949|22";
138    * </pre>
139    */
140   public void parse(String rivi) {
141     StringBuffer sb = new StringBuffer(rivi);
142     tunnusnro     = Mjonot.erota(sb,'|',tunnusnro);
143     if ( tunnusnro >= seuraavaNro ) seuraavaNro = tunnusnro + 1;
144     jasenNro       = Mjonot.erota(sb,'|',jasenNro);
145     ala            = Mjonot.erota(sb,'|',ala);
146     aloitusvuosi   = Mjonot.erota(sb,'|',aloitusvuosi);
147     tuntiaViikossa = Mjonot.erota(sb,'|',tuntiaViikossa);
148   }
149 
150   
151   
152   /**
153    * Testiohjelma Harrastukselle.
154    * @param args ei käytössä
155    */
156   public static void main(String[] args) {
157     Harrastus har = new Harrastus();
158     har.vastaaPitsinNyplays(2);
159     har.tulosta(System.out);
160   }
161 
162 }
163 
164 
165