| Jasen.java |
1 import java.io.*;
2 import fi.jyu.mit.ohj2.*;
3 /**
4 * Kerhon jäsen joka osaa mm. itse huolehtia tunnus_nro:staan.
5 *
6 * Muutokset: 02.04.2003, kenttien indeksointi<br>
7 *
8 * @author Vesa Lappalainen
9 * @version 1.0, 22.02.2003
10 * @version 1.3, 02.04.2003
11 */
12 public class Jasen {
13 private Kentta kentat[] = {
14 new IntKentta("id"),
15 new JonoKentta("nimi"),
16 new JonoKentta("hetu",new HetuTarkistus()),
17 new JonoKentta("katuosoite"),
18 new JonoKentta("postinumero"),
19 new JonoKentta("postiosoite"),
20 new JonoKentta("kotipuhelin"),
21 new JonoKentta("tyopuhelin"),
22 new JonoKentta("autopuhelin"),
23 new IntKentta("liittymisvuosi"),
24 new RahaKentta("jäsenmaksu"),
25 new RahaKentta("maksettumaksu"),
26 new JonoKentta("lisätietoja")
27 };
28
29 private static int seuraava_nro = 1;
30
31 public Jasen() { }
32
33 public int getKenttia() { return kentat.length; }
34 public int ekaKentta() { return 1; }
35
36 /**
37 * Antaa k:n kentän sisällön merkkijonona
38 * @param k monenenko kentän sisältö palautetaan
39 * @return kentän sisältö merkkijonona
40 */
41 public String anna(int k) {
42 try {
43 return kentat[k].toString();
44 } catch (Exception ex) {
45 return "";
46 }
47 }
48
49 /**
50 * Asettaa k:n kentän arvoksi parametrina tuodun merkkijonon arvon
51 * @param k kuinka monennen kentän arvo asetetaan
52 * @param jono jonoa joka asetetaan kentän arvoksi
53 * @return null jos asettaminen onnistuu, muuten vastaav virheilmoitus.
54 */
55 public String aseta(int k,String jono) {
56 try {
57 return kentat[k].aseta(jono);
58 } catch (Exception ex) {
59 return "Virhe: " + ex.getMessage();
60 }
61 }
62
63 /**
64 * Palauttaa k:tta jäsenen kenttää vastaavan kysymyksen
65 * @param k kuinka monennen kentän kysymys palautetaan (0-alkuinen)
66 * @return k:netta kenttää vastaava kysymys
67 */
68 public String getKysymys(int k) {
69 try {
70 return kentat[k].getKysymys();
71 } catch (Exception ex) {
72 return "Ääliö";
73 }
74 }
75
76 /**
77 * Arvotaan satunnainen kokonaisluku välille [ala,yla]
78 * @param ala arvonnan alaraja
79 * @param yla arvonnan yläraja
80 * @return satunnainen luku väliltä [ala,yla]
81 */
82 public static int rand(int ala, int yla) {
83 double n = (yla-ala)*Math.random() + ala;
84 return (int)Math.round(n);
85 }
86
87 /**
88 * Apumetodi, jolla saadaan täytettyä testiarvot jäsenelle.
89 * Henkilötunnus arvotaan, jotta kahdella jäsenellä ei olisi
90 * samoja tietoja.
91 */
92 public void vastaa_aku_ankka() {
93 /*
94 String apuhetu = Mjonot.fmt(rand(1,31),2,'0') +
95 Mjonot.fmt(rand(1,12),2,'0') +
96 Mjonot.fmt(rand(1,99),2,'0') + "-" +
97 Mjonot.fmt(rand(1,1000),3,'0') +
98 ( (char)((int)'A'+rand(1,25)));
99
100 nimi = "Ankka Aku";
101 hetu = apuhetu;
102 katuosoite = "Ankkakuja 6";
103 postinumero = "12345";
104 postiosoite = "ANKKALINNA";
105 kotipuhelin = "12-1234";
106 tyopuhelin = "";
107 autopuhelin = "";
108 liittymisvuosi = 1996;
109 jmaksu = 50.00;
110 maksu = 30.00;
111 lisatietoja = "Velkaa Roopelle";
112 */
113 }
114
115 /**
116 * Tulostetaan henkilön tiedot
117 * @param out tietovirta johon tulostetaan
118 */
119 public void tulosta(PrintStream out) {
120 // out.println(toString());
121 int pisin = 0;
122 for (int k=0; k<getKenttia(); k++)
123 if ( kentat[k].getKysymys().length() > pisin )
124 pisin = kentat[k].getKysymys().length();
125
126 for (int k=0; k<getKenttia(); k++)
127 out.println(Mjonot.fmt(kentat[k].getKysymys(),-pisin-1) +
128 ": " + kentat[k].toString());
129 /*
130 out.println(Mjonot.fmt(tunnus_nro,3,'0')+ " " + nimi + " " + hetu);
131 out.println(" " + katuosoite + " " + postinumero + " " + postiosoite);
132 out.println(" k: " + kotipuhelin +
133 " t: " + tyopuhelin +
134 " a: " + autopuhelin);
135 out.print(" Liittynyt " + liittymisvuosi + ".");
136 out.println(" Jäsenmaksu " + Mjonot.fmt(jmaksu,4,2) + " mk." +
137 " Maksettu " + Mjonot.fmt(maksu,4,2) + " mk.");
138 out.println(" " + lisatietoja);
139 */
140 }
141
142 /**
143 * Tulostetaan henkilön tiedot
144 * @param os tietovirta johon tulostetaan
145 */
146 public void tulosta(OutputStream os) {
147 tulosta(new PrintStream(os));
148 }
149
150 /**
151 * Antaa jäsenelle seuraavan rekisterinumeron.
152 * @return jäsenen uusi tunnus_nro
153 */
154 public int rekisteroi() {
155 ((IntKentta)(kentat[0])).setValue(seuraava_nro);
156 seuraava_nro++;
157 return getTunnus_nro();
158 }
159
160 public final int getTunnus_nro() { return ((IntKentta)(kentat[0])).getValue(); }
161
162 /**
163 * Muuttaa jäsenen tiedot |-erottetuksi merkkijonoksi
164 * @return |-erotettu merkkijono
165 */
166 public String toString() {
167 StringBuffer sb = new StringBuffer("");
168
169 for (int k=0; k<getKenttia(); k++)
170 sb.append(anna(k) + "|");
171 return sb.toString();
172 }
173
174 /**
175 * Otetaan jäsenen tiedot merkkijonosta joka on muotoa:<pre>
176 * 1|Ankka Aku|130227-411J|Ankkakuja 6|12345|ANKKALINNA|12-1234|||1996|50.0|30.0|Velkaa Roopelle|
177 * </pre>
178 * @param rivi merkkijono josta tiedot otetaan.
179 */
180 public void parse(String rivi) {
181 StringBuffer sb = new StringBuffer(rivi);
182 for (int k = 0; k < getKenttia(); k++ )
183 aseta(k,Mjonot.erota(sb,'|'));
184 if ( getTunnus_nro() >= seuraava_nro ) seuraava_nro = getTunnus_nro() + 1;
185 }
186
187 /**
188 * Testiohjelma jäsenelle.
189 * @param args ei käytössä
190 */
191 public static void main(String args[]) {
192 Jasen aku = new Jasen(), aku2 = new Jasen();
193 aku.rekisteroi();
194 aku2.rekisteroi();
195 aku.tulosta(System.out);
196 aku.vastaa_aku_ankka();
197 aku.tulosta(System.out);
198
199 aku2.vastaa_aku_ankka();
200 aku2.tulosta(System.out);
201
202 aku2.vastaa_aku_ankka();
203 aku2.tulosta(System.out);
204
205 System.out.println(aku2.toString());
206 }
207
208 }
209
210
211 | Jasen.java |