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(PrintWriter out) {
58      out.println(ala + " " + aloitusvuosi + " " + tuntiaViikossa);
59    }
60  
61    
62    /**
63     * Tulostetaan harrastuksen tiedot
64     * @param os tietovirta johon tulostetaan
65     */
66    public void tulosta(OutputStream os) {
67      tulosta(new PrintStream(os));
68    }
69  
70    /**
71     * Tulostetaan harrastuksen tiedot
72     * @param out tietovirta johon tulostetaan
73     */
74    public void tulosta(PrintStream out) {
75      tulosta(new PrintWriter(out,true)); // ilman autoflushia ei mitään tulostu!
76    }
77  
78    
79    /**
80     * Antaa harrastukselle seuraavan rekisterinumeron.
81     * @return harrastuksen uusi tunnus_nro
82     * @example
83     * <pre name="test">
84     *   Harrastus pitsi1 = new Harrastus();
85     *   pitsi1.getTunnusnro() === 0;
86     *   pitsi1.rekisteroi();
87     *   Harrastus pitsi2 = new Harrastus();
88     *   pitsi2.rekisteroi();
89     *   int n1 = pitsi1.getTunnusnro();
90     *   int n2 = pitsi2.getTunnusnro();
91     *   n1 === n2-1;
92     * </pre>
93     */
94    public int  rekisteroi() {
95      tunnusnro = seuraavaNro;
96      seuraavaNro++;
97      return tunnusnro;
98    }
99  
100   
101   /**
102    * Palautetaan harrastuksen oma id
103    * @return harrastuksen id
104    */
105   public int getTunnusnro() { return tunnusnro; }
106   
107   
108   /**
109    * Palautetaan mille jäsenelle harrastus kuuluu
110    * @return jäsenen id
111    */
112   public int getJasenNro() { return jasenNro; }
113 
114     
115   /**
116    * Palauttaa harrastuksen tiedot merkkijonona jonka voi tallentaa tiedostoon.
117    * @return harrastus tolppaeroteltuna merkkijonona 
118    * @example
119    * <pre name="test">
120    *   Harrastus harrastus = new Harrastus();
121    *   harrastus.parse("   2   |  10  |   Kalastus  | 1949 | 22 t ");
122    *   harrastus.toString()    === "2|10|Kalastus|1949|22";
123    * </pre>
124    */
125   @Override
126   public String toString() {
127     return              "" +
128       tunnusnro      + "|" +
129       jasenNro       + "|" +
130       ala            + "|" +
131       aloitusvuosi   + "|" +
132       tuntiaViikossa;
133   }
134 
135   
136   /**
137    * Selvitää harrastuksen tiedot | erotellusta merkkijonosta.
138    * Pitää huolen että seuraavaNro on suurempi kuin tuleva tunnusnro.
139    * @param rivi josta harrastuksen tiedot otetaan
140    * @example
141    * <pre name="test">
142    *   Harrastus harrastus = new Harrastus();
143    *   harrastus.parse("   2   |  10  |   Kalastus  | 1949 | 22 t ");
144    *   harrastus.getJasenNro() === 10;
145    *   harrastus.toString()    === "2|10|Kalastus|1949|22";
146    *   
147    *   harrastus.rekisteroi();
148    *   int n = harrastus.getTunnusnro();
149    *   harrastus.parse(""+(n+20));
150    *   harrastus.rekisteroi();
151    *   harrastus.getTunnusnro() === n+20+1;
152    *   harrastus.toString()     === "" + (n+20+1) + "|10|Kalastus|1949|22";
153    * </pre>
154    */
155   public void parse(String rivi) {
156     StringBuffer sb = new StringBuffer(rivi);
157     tunnusnro     = Mjonot.erota(sb,'|',tunnusnro);
158     if ( tunnusnro >= seuraavaNro ) seuraavaNro = tunnusnro + 1;
159     jasenNro       = Mjonot.erota(sb,'|',jasenNro);
160     ala            = Mjonot.erota(sb,'|',ala);
161     aloitusvuosi   = Mjonot.erota(sb,'|',aloitusvuosi);
162     tuntiaViikossa = Mjonot.erota(sb,'|',tuntiaViikossa);
163   }
164 
165   
166   
167   /**
168    * Testiohjelma Harrastukselle.
169    * @param args ei käytössä
170    */
171   public static void main(String[] args) {
172     Harrastus har = new Harrastus();
173     har.vastaaPitsinNyplays(2);
174     har.tulosta(System.out);
175   }
176 
177 }
178 
179 
180