import java.io.*;
import fi.jyu.mit.ohj2.*;
/**
* Kerhon jäsen joka osaa mm. itse huolehtia tunnus_nro:staan.
*
* Muutokset: 02.04.2003, kenttien indeksointi
*
* @author Vesa Lappalainen
* @version 1.0, 22.02.2003
* @version 1.3, 02.04.2003
*/
public class Jasen {
private int tunnus_nro; // 0
private String nimi = ""; // 1
private String hetu = ""; // 2
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 seuraava_nro = 1;
public Jasen() { }
public int getKenttia() { return 13; }
public int ekaKentta() { return 1; }
/**
* Antaa k:n kentän sisällön merkkijonona
* @param k monenenko kentän sisältö palautetaan
* @return kentän sisältö merkkijonona
*/
public String anna(int k) {
switch ( k ) {
case 0: return ""+tunnus_nro ;
case 1: return ""+nimi ;
case 2: return ""+hetu ;
case 3: return ""+katuosoite ;
case 4: return ""+postinumero ;
case 5: return ""+postiosoite ;
case 6: return ""+kotipuhelin ;
case 7: return ""+tyopuhelin ;
case 8: return ""+autopuhelin ;
case 9: return ""+liittymisvuosi ;
case 10: return ""+jmaksu ;
case 11: return ""+maksu ;
case 12: return ""+lisatietoja ;
default: return "Äääliö";
}
}
/**
* Asettaa k:n kentän arvoksi parametrina tuodun merkkijonon arvon
* @param k kuinka monennen kentän arvo asetetaan
* @param jono jonoa joka asetetaan kentän arvoksi
* @return null jos asettaminen onnistuu, muuten vastaav virheilmoitus.
*/
public String aseta(int k,String jono) {
StringBuffer sb = new StringBuffer(jono);
switch ( k ) {
case 0: tunnus_nro = Mjonot.erota(sb,'§',tunnus_nro); return null;
case 1: nimi = jono ; return null;
case 2: hetu = jono ; return null;
case 3: katuosoite = jono ; return null;
case 4: postinumero = jono ; return null;
case 5: postiosoite = jono ; return null;
case 6: kotipuhelin = jono ; return null;
case 7: tyopuhelin = jono ; return null;
case 8: autopuhelin = jono ; return null;
case 9:
try {
liittymisvuosi = Mjonot.erotaEx(sb,'§',liittymisvuosi);
} catch (NumberFormatException ex) {
return "Liittymisvuosi väärin " + ex.getMessage();
}
return null;
case 10: jmaksu = Mjonot.erota(sb,'§',jmaksu); return null;
case 11: maksu = Mjonot.erota(sb,'§',maksu); return null;
case 12: lisatietoja = Mjonot.erota(sb,'§',lisatietoja); return null;
default: return "ÄÄliö";
}
}
/**
* Palauttaa k:tta jäsenen kenttää vastaavan kysymyksen
* @param k kuinka monennen kentän kysymys palautetaan (0-alkuinen)
* @return k:netta kenttää vastaava kysymys
*/
public String getKysymys(int k) {
switch ( k ) {
case 0: return "Tunnus nro" ;
case 1: return "Jäsenen nimi" ;
case 2: return "hetu" ;
case 3: return "katuosoite" ;
case 4: return "postinumero" ;
case 5: return "postiosoite" ;
case 6: return "kotipuhelin" ;
case 7: return "tyopuhelin" ;
case 8: return "autopuhelin" ;
case 9: return "liittymisvuosi" ;
case 10: return "jmaksu" ;
case 11: return "maksu" ;
case 12: return "lisatietoja" ;
default: return "Äääliö";
}
}
/**
* 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.
* Henkilötunnus arvotaan, jotta kahdella jäsenellä ei olisi
* samoja tietoja.
*/
public void vastaa_aku_ankka() {
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(1,25)));
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";
}
/**
* Tulostetaan henkilön tiedot
* @param out tietovirta johon tulostetaan
*/
public void tulosta(PrintStream out) {
out.println(Mjonot.fmt(tunnus_nro,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 tunnus_nro
*/
public int rekisteroi() {
tunnus_nro = seuraava_nro;
seuraava_nro++;
return tunnus_nro;
}
public int getTunnus_nro() { return tunnus_nro; }
/**
* Muuttaa jäsenen tiedot |-erottetuksi merkkijonoksi
* @return |-erotettu merkkijono
*/
public String toString() {
StringBuffer sb = new StringBuffer("");
for (int k=0; k
* 1|Ankka Aku|130227-411J|Ankkakuja 6|12345|ANKKALINNA|12-1234|||1996|50.0|30.0|Velkaa Roopelle|
*
* @param rivi merkkijono josta tiedot otetaan.
*/
public void parse(String rivi) {
StringBuffer sb = new StringBuffer(rivi);
for (int k = 0; k < getKenttia(); k++ )
aseta(k,Mjonot.erota(sb,'|'));
if ( tunnus_nro >= seuraava_nro ) seuraava_nro = tunnus_nro + 1;
}
/**
* 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.vastaa_aku_ankka();
aku.tulosta(System.out);
aku2.vastaa_aku_ankka();
aku2.tulosta(System.out);
aku2.vastaa_aku_ankka();
aku2.tulosta(System.out);
System.out.println(aku2.toString());
}
}