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