package kerho; import java.io.*; import fi.jyu.mit.ohj2.Mjonot; /** * Kerhon jäsen joka osaa mm. itse huolehtia tunnusNro:staan. * * @author Vesa Lappalainen * @version 1.0, 22.02.2003 */ public class Jasen { private int tunnusNro; private String nimi = ""; private String hetu = ""; private String katuosoite = ""; private String postinumero = ""; private String postiosoite = ""; private String kotipuhelin = ""; private String tyopuhelin = ""; private String autopuhelin = ""; private int liittymisvuosi = 0; private double jmaksu = 0; private double maksu = 0; private String lisatietoja = ""; private static int seuraavaNro = 1; /** * @return jäsneen kenttien lukumäärä */ public int getKenttia() { return 13; } /** * @return ensimmäinen mielekäs kenttä kysyttäväksi */ public int getEka() { return 1; } /** * Palauttaa k:n kentän kysymyksen * @param k kentän indeksi * @return merkkijonona k:n kentän kysymys */ public String getKysymys(int k) { switch (k) { case 0: return "id"; case 1: return "nimi"; case 2: return "hetu"; // ... TODO } return "pöö"; } /** * Palauttaa k:n kentän sisällön * @param k kentän indeksi * @return merkkijonona k:n kentän sisältö */ public String get(int k) { switch (k) { case 0: return ""+tunnusNro; case 1: return nimi; case 2: return hetu; // ... TODO } return "pöö"; } /** * Asettaa arvon k:teen kenttään * @param k kentän indeksi * @param jono kentän uusi arvo * @return null jos ok, muuten virheteksti */ public String set(int k, String jono) { switch (k) { case 1: nimi=jono; return null; case 2: if ( jono.length() == 0 ) { hetu = ""; return null; } if ( !Character.isDigit(jono.charAt(0)) ) return "Pitää alkaa numerolla"; hetu = jono; return null; // ... TODO } return "pöö"; } /** * Arvotaan satunnainen kokonaisluku välille [ala,yla] * @param ala arvonnan alaraja * @param yla arvonnan yläraja * @return satunnainen luku väliltä [ala,yla] */ public static int rand(int ala, int yla) { double n = (yla-ala)*Math.random() + ala; return (int)Math.round(n); } /** * Apumetodi, jolla saadaan täytettyä testiarvot jäsenelle. * @param apuhetu hetu joka annetaan henkilölle */ public void vastaaAkuAnkka(String apuhetu) { nimi = "Ankka Aku"; hetu = apuhetu; katuosoite = "Ankkakuja 6"; postinumero = "12345"; postiosoite = "ANKKALINNA"; kotipuhelin = "12-1234"; tyopuhelin = ""; autopuhelin = ""; liittymisvuosi = 1996; jmaksu = 50.00; maksu = 30.00; lisatietoja = "Velkaa Roopelle"; } /** * Apumetodi, jolla saadaan täytettyä testiarvot jäsenelle. * Henkilötunnus arvotaan, jotta kahdella jäsenellä ei olisi * samoja tietoja. */ public void vastaaAkuAnkka() { String apuhetu = Mjonot.fmt(rand(1,31),2,'0') + Mjonot.fmt(rand(1,12),2,'0') + Mjonot.fmt(rand(1,99),2,'0') + "-" + Mjonot.fmt(rand(1,1000),3,'0') + ( (char)((int)'A'+rand(0,25))); vastaaAkuAnkka(apuhetu); } /** * Tulostetaan henkilön tiedot * @param out tietovirta johon tulostetaan */ public void tulosta(PrintStream out) { out.println(Mjonot.fmt(tunnusNro,3,'0')+ " " + nimi + " " + hetu); out.println(" " + katuosoite + " " + postinumero + " " + postiosoite); out.println(" k: " + kotipuhelin + " t: " + tyopuhelin + " a: " + autopuhelin); out.print(" Liittynyt " + liittymisvuosi + "."); out.println(" Jäsenmaksu " + Mjonot.fmt(jmaksu,4,2) + " mk." + " Maksettu " + Mjonot.fmt(maksu,4,2) + " mk."); out.println(" " + lisatietoja); } /** * Tulostetaan henkilön tiedot * @param os tietovirta johon tulostetaan */ public void tulosta(OutputStream os) { tulosta(new PrintStream(os)); } /** * Antaa jäsenelle seuraavan rekisterinumeron. * @return jäsenen uusi tunnusNro * @example *
   *   Jasen aku1 = new Jasen();
   *   aku1.getTunnusNro() === 0;
   *   aku1.rekisteroi();
   *   Jasen aku2 = new Jasen();
   *   aku2.rekisteroi();
   *   int n1 = aku1.getTunnusNro();
   *   int n2 = aku2.getTunnusNro();
   *   n1 === n2-1;
   * 
*/ public int rekisteroi() { tunnusNro = seuraavaNro; seuraavaNro++; return tunnusNro; } /** * Palauttaa jäsenen tunnusnumeron. * @return jäsenen tunnusnumero */ public int getTunnusNro() { return tunnusNro; } /** * Palauttaa jäsenen tiedot merkkijonona jonka voi tallentaa tiedostoon. * @return jäsen tolppaeroteltuna merkkijonona */ @Override public String toString() { return "" + tunnusNro + "|" + nimi + "|" + hetu + "|" + katuosoite + "|" + postinumero + "|" + postiosoite + "|" + kotipuhelin + "|" + tyopuhelin + "|" + autopuhelin + "|" + liittymisvuosi + "|" + jmaksu + "|" + maksu + "|" + lisatietoja ; } /** * Selvitää jäsenen tiedot | erotellusta merkkijonosta * Pitää huolen että seuraavaNro on suurempi kuin tuleva tunnusNro. * @param rivi josta jäsenen tiedot otetaan * * @example *
   *   Jasen jasen = new Jasen();
   *   jasen.parse("   3  |  Ankka Aku   | 123");
   *   jasen.getTunnusNro() === 3;
   *   jasen.toString().startsWith("3|Ankka Aku|123|") === true;
   *
   *   jasen.rekisteroi();
   *   int n = jasen.getTunnusNro();
   *   jasen.parse(""+(n+20));
   *   jasen.rekisteroi();
   *   jasen.getTunnusNro() === n+20+1;
   *     
   * 
*/ public void parse(String rivi) { StringBuffer sb = new StringBuffer(rivi); tunnusNro = Mjonot.erota(sb,'|',tunnusNro); if ( tunnusNro >= seuraavaNro ) seuraavaNro = tunnusNro + 1; nimi = Mjonot.erota(sb,'|',nimi); hetu = Mjonot.erota(sb,'|',hetu); katuosoite = Mjonot.erota(sb,'|',katuosoite); postinumero = Mjonot.erota(sb,'|',postinumero); postiosoite = Mjonot.erota(sb,'|',postiosoite); kotipuhelin = Mjonot.erota(sb,'|',kotipuhelin); tyopuhelin = Mjonot.erota(sb,'|',tyopuhelin); autopuhelin = Mjonot.erota(sb,'|',autopuhelin); liittymisvuosi = Mjonot.erota(sb,'|',liittymisvuosi); jmaksu = Mjonot.erota(sb,'|',jmaksu); maksu = Mjonot.erota(sb,'|',maksu); lisatietoja = Mjonot.erota(sb,'|',lisatietoja); } /** * Testiohjelma jäsenelle. * @param args ei käytössä */ public static void main(String args[]) { Jasen aku = new Jasen(), aku2 = new Jasen(); aku.rekisteroi(); aku2.rekisteroi(); aku.tulosta(System.out); aku.vastaaAkuAnkka(); aku.tulosta(System.out); aku2.vastaaAkuAnkka(); aku2.tulosta(System.out); aku2.vastaaAkuAnkka(); aku2.tulosta(System.out); } /** * @return jäsenen nimi */ public String getNimi() { return nimi; } /** * * @param nimi2 jäsneen uusi nnimi */ public void setNimi(String nimi2) { nimi = nimi2; } }