1   package kerho;
2   import java.io.*;
3   import fi.jyu.mit.ohj2.Mjonot;
4   /**
5    * Kerhon jäsen joka osaa mm. itse huolehtia tunnusNro:staan.
6    *
7    * @author Vesa Lappalainen
8    * @version 1.0, 22.02.2003
9    */
10  public class Jasen {
11    private int tunnusNro;
12    private String nimi             = "";
13    private String hetu             = "";
14    private String katuosoite       = "";
15    private String postinumero      = "";
16    private String postiosoite      = "";
17    private String kotipuhelin      = "";
18    private String tyopuhelin       = "";
19    private String autopuhelin      = "";
20    private int    liittymisvuosi   = 0;
21    private double jmaksu           = 0;
22    private double maksu            = 0;
23    private String lisatietoja      = "";
24    private static int seuraavaNro = 1;
25  
26  
27    /**
28     * Arvotaan satunnainen kokonaisluku välille [ala,yla]
29     * @param ala arvonnan alaraja
30     * @param yla arvonnan yläraja
31     * @return satunnainen luku väliltä [ala,yla]
32     */
33    public static int rand(int ala, int yla) {
34      double n = (yla-ala)*Math.random() + ala;
35      return (int)Math.round(n);
36    }
37  
38    /**
39     * Apumetodi, jolla saadaan täytettyä testiarvot jäsenelle.
40     * @param apuhetu hetu joka annetaan henkilölle 
41     */
42    public void vastaaAkuAnkka(String apuhetu) {
43      nimi           = "Ankka Aku";
44      hetu           = apuhetu;
45      katuosoite     = "Ankkakuja 6";
46      postinumero    = "12345";
47      postiosoite    = "ANKKALINNA";
48      kotipuhelin    = "12-1234";
49      tyopuhelin     = "";
50      autopuhelin    = "";
51      liittymisvuosi = 1996;
52      jmaksu         = 50.00;
53      maksu          = 30.00;
54      lisatietoja    = "Velkaa Roopelle";
55    }
56  
57    /**
58     * Apumetodi, jolla saadaan täytettyä testiarvot jäsenelle.
59     * Henkilötunnus arvotaan, jotta kahdella jäsenellä ei olisi
60     * samoja tietoja.
61     */
62    public void vastaaAkuAnkka() {
63      String apuhetu = Mjonot.fmt(rand(1,31),2,'0') +
64                       Mjonot.fmt(rand(1,12),2,'0') +
65                       Mjonot.fmt(rand(1,99),2,'0') + "-" +
66                       Mjonot.fmt(rand(1,1000),3,'0') +
67                       ( (char)((int)'A'+rand(1,25)));
68      vastaaAkuAnkka(apuhetu);
69    }
70  
71    /**
72     * Tulostetaan henkilön tiedot
73     * @param out tietovirta johon tulostetaan
74     */
75    public void tulosta(PrintStream out) {
76      out.println(Mjonot.fmt(tunnusNro,3,'0')+ "  " + nimi + "  " + hetu);
77      out.println("  " + katuosoite + "  " +  postinumero + " " + postiosoite);
78      out.println("  k: " + kotipuhelin +
79                  " t: " + tyopuhelin  +
80                  " a: " + autopuhelin);
81      out.print("  Liittynyt " + liittymisvuosi + ".");
82      out.println("  Jäsenmaksu " + Mjonot.fmt(jmaksu,4,2) + " mk." +
83                  "  Maksettu "   + Mjonot.fmt(maksu,4,2)  + " mk.");
84      out.println("  " + lisatietoja);
85    }
86  
87    /**
88     * Tulostetaan henkilön tiedot
89     * @param os tietovirta johon tulostetaan
90     */
91    public void tulosta(OutputStream os) {
92      tulosta(new PrintStream(os));
93    }
94  
95    /**
96     * Antaa jäsenelle seuraavan rekisterinumeron.
97     * @return jäsenen uusi tunnusNro
98     * @example
99     * <pre name="testRekisteroi">
100    *   Jasen aku1 = new Jasen();
101    *   aku1.getTunnusNro() === 0;
102    *   aku1.rekisteroi();
103    *   Jasen aku2 = new Jasen();
104    *   aku2.rekisteroi();
105    *   int n1 = aku1.getTunnusNro();
106    *   int n2 = aku2.getTunnusNro();
107    *   n1 === n2-1;
108    * </pre>
109    */
110   public int  rekisteroi() {
111     tunnusNro = seuraavaNro;
112     seuraavaNro++;
113     return tunnusNro;
114   }
115 
116   /**
117    * Palauttaa jäsenen tunnusnumeron.
118    * @return jäsenen tunnusnumero
119    */
120   public int getTunnusNro() { return tunnusNro; }
121 
122   /**
123    * Testiohjelma jäsenelle.
124    * @param args ei käytössä
125    */
126   public static void main(String args[]) {
127     Jasen aku = new Jasen(), aku2 = new Jasen();
128     aku.rekisteroi();
129     aku2.rekisteroi();
130     aku.tulosta(System.out);
131     aku.vastaaAkuAnkka();
132     aku.tulosta(System.out);
133 
134     aku2.vastaaAkuAnkka();
135     aku2.tulosta(System.out);
136 
137     aku2.vastaaAkuAnkka();
138     aku2.tulosta(System.out);
139   }
140 
141 }
142 
143 
144