import java.io.*;
import fi.jyu.mit.ohj2.*;
/**
 * Kerhon jäsen joka osaa mm. itse huolehtia tunnus_nro:staan.
 *
 * @author Vesa Lappalainen
 * @version 1.0, 22.02.2003
 */
public class Jasen {
  private int tunnus_nro;
  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 seuraava_nro = 1;

  public Jasen() {  }

  /**
   * 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; }

  /**
   * 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);
  }

}