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