package kerho; import java.io.*; import kanta.HetuKentta; import kanta.HetuTarkistus; import kanta.IntKentta; import kanta.JonoKentta; import kanta.Kentta; import kanta.PerusTietue; import kanta.PuhelinKentta; import kanta.RahaKentta; import kanta.RegExpTarkistaja; import kanta.SisaltaaTarkistaja; import fi.jyu.mit.ohj2.Mjonot; import static kanta.HetuTarkistus.*; /** * Kerhon jäsen joka osaa mm. itse huolehtia tunnusNro:staan. * * @author Vesa Lappalainen * @version 1.0, 22.02.2003 * @version 2.0, 09.01.2011 - kentät indeksoituna * @version 2.1, 23.03.2012 - peritty tietueesta * * @example *
* // getAvain() * Jasen aku = new Jasen(); * aku.parse(" 1 | Ankka Aku | 030201-111C"); * aku.getAvain(0) === " 1"; * aku.getAvain(1) === "ANKKA AKU"; * aku.getAvain(2) === "010203-111C"; * aku.getAvain(20) === ""; ** * @example *
* // aseta(String) * Jasen jasen = new Jasen(); * jasen.aseta(1,"Ankka Aku") === null; * jasen.aseta(2,"kissa") =R= ".*Hetu liian lyhyt" * jasen.aseta(2,"030201-1111") === "hetu: Tarkistusmerkin kuuluisi olla C"; * jasen.aseta(2,"030201-111C") === null; * jasen.aseta(9,"kissa") === "liittymisvuosi: Ei kokonaisluku (kissa)"; * jasen.aseta(9,"1940") === null; ** * @example *
* // getOtsikot() * #import java.util.Arrays; * Jasen jasen = new Jasen(); * Arrays.toString(jasen.getOtsikot()) =R= "\\[nimi, hetu, katuosoite.*"; ** * @example *
* // rekisteroi() * 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; ** * @example *
* // parse(String) * Jasen jasen = new Jasen(); * jasen.parse(" 3 | Ankka Aku | 030201-111C"); * jasen.getTunnusNro() === 3; * jasen.toString().startsWith("3|Ankka Aku|030201-111C|") === true; // on enemmäkin kuin 3 kenttää, siksi loppu | * * jasen.rekisteroi(); * int n = jasen.getTunnusNro(); * jasen.parse(""+(n+20)); // Otetaan merkkijonosta vain tunnusnumero * jasen.rekisteroi(); // ja tarkistetaan että seuraavalla kertaa tulee yhtä isompi * jasen.getTunnusNro() === n+20+1; ** * @example *
* // equals(Jasen) * Jasen jasen1 = new Jasen(); * jasen1.parse(" 3 | Ankka Aku | 030201-111C"); * Jasen jasen2 = new Jasen(); * jasen2.parse(" 3 | Ankka Aku | 030201-111C"); * Jasen jasen3 = new Jasen(); * jasen3.parse(" 3 | Ankka Aku | 030201-115H"); * * jasen1.equals(jasen2) === true; * jasen2.equals(jasen1) === true; * jasen1.equals(jasen3) === false; * jasen3.equals(jasen2) === false; **/ public class Jasen extends PerusTietue { private Kentta kentat[] = { // valitettavasti ei voi olla final // vaikka pitäisi, clone estää tämän :-( new IntKentta("id"), new JonoKentta("nimi"), new HetuKentta("hetu", new HetuTarkistus()), new JonoKentta("katuosoite"), new JonoKentta("postinumero", new SisaltaaTarkistaja(SisaltaaTarkistaja.NUMEROT)), new JonoKentta("postiosoite"), new PuhelinKentta("kotipuhelin"), new PuhelinKentta("työpuhelin"), new JonoKentta("autopuhelin", new RegExpTarkistaja("[- 0-9]*")), new IntKentta("liittymisvuosi"), new RahaKentta("jäsenmaksu"), new RahaKentta("maksettumaksu"), new JonoKentta("lisätietoja") }; private static int seuraavaNro = 1; @Override public Kentta[] getKentat() { return kentat; } @Override protected void setKentat(Kentta[] uudetKentat) { kentat = uudetKentat; } @Override public int getSeuraavaNro() { return seuraavaNro; } @Override protected void setSeuraavaNro(int i) { seuraavaNro = i; } /** * Eka kenttä joka on mielekäs kysyttäväksi * @return eknn kentän indeksi */ @Override public int ekaKentta() { return 1; } /** * Alustetaan jäsenen merkkijono-attribuuti tyhjiksi jonoiksi * ja tunnusnro = 0. */ public Jasen() { // Toistaiseksi ei tarvita mitään } /** * @return jäsenen nimi * @example *
* Jasen aku = new Jasen(); * aku.vastaaAkuAnkka(); * aku.getNimi() =R= "Ankka Aku .*"; **/ public String getNimi() { return anna(1); } /** * Apumetodi, jolla saadaan täytettyä testiarvot jäsenelle. * @param apuhetu hetu joka annetaan henkilölle */ public void vastaaAkuAnkka(String apuhetu) { aseta(1,"Ankka Aku " + kanta.HetuTarkistus.rand(1000, 9999)); aseta(2,apuhetu); aseta(3,"Ankkakuja 6"); aseta(4,"12345"); aseta(5,"ANKKALINNA"); aseta(6,"12-1234"); aseta(7,""); aseta(8,""); aseta(9,"1996"); aseta(10,"50"); aseta(11,"30"); aseta(12,"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 = arvoHetu(); vastaaAkuAnkka(apuhetu); } /** * Tulostetaan henkilön tiedot * @param out tietovirta johon tulostetaan */ @Override public void tulosta(PrintWriter out) { int pisin = 0; for (Kentta kentta : kentat) if (kentta.getKysymys().length() > pisin) pisin = kentta.getKysymys().length(); for (Kentta kentta : kentat) out.println(Mjonot.fmt(kentta.getKysymys(), -pisin - 1) + ": " + kentta.toString()); } /** * Tehdään identtinen klooni jäsenestä * @return Object kloonattu jäsen * @example *
* #THROWS CloneNotSupportedException * Jasen jasen = new Jasen(); * jasen.parse(" 3 | Ankka Aku | 123"); * Jasen kopio = jasen.clone(); * kopio.toString() === jasen.toString(); * jasen.parse(" 4 | Ankka Tupu | 123"); * kopio.toString().equals(jasen.toString()) === false; * kopio instanceof Jasen === true; **/ @Override public Jasen clone() throws CloneNotSupportedException { return (Jasen)super.clone(); } /** * 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); } }