1   package kerho;
2   
3   
4   /**
5    * Kerhon jäsenistö joka osaa mm. lisätä uuden jäsenen
6    *
7    * @author Vesa Lappalainen
8    * @version 1.0, 22.02.2003
9    */
10  public class Jasenet {
11    private static final int MAX_JASENIA = 5;
12    private int lkm = 0;
13    //private boolean muutettu = false;
14    private String tiedostonNimi = "";
15    private String bakNimi = "";
16    private String kokoNimi = "";
17    private Jasen alkiot[] = new Jasen[MAX_JASENIA];
18  
19  
20    /**
21     * Oletusmuodostaja
22     */
23    public Jasenet() {
24        // Attribuuttien oma alustus riittää
25    }
26    
27  
28    /**
29     * Lisää uuden jäsenen tietorakenteeseen.  Ottaa jäsenen omistukseensa.
30     * @param jasen lisätäävän jäsenen viite.  Huom tietorakenne muuttuu omistajaksi
31     * @throws SailoException jos tietorakenne on jo täynnä
32     * @example
33     * <pre name="test">
34     * #THROWS SailoException 
35     * #PACKAGEIMPORT
36     * Jasenet jasenet = new Jasenet();
37     * Jasen aku1 = new Jasen(), aku2 = new Jasen();
38     * jasenet.getLkm() === 0;
39     * jasenet.lisaa(aku1); jasenet.getLkm() === 1;
40     * jasenet.lisaa(aku2); jasenet.getLkm() === 2;
41     * jasenet.lisaa(aku1); jasenet.getLkm() === 3;
42     * jasenet.anna(0) === aku1;
43     * jasenet.anna(1) === aku2;
44     * jasenet.anna(2) === aku1;
45     * jasenet.anna(1) == aku1 === false;
46     * jasenet.anna(1) == aku2 === true;
47     * jasenet.anna(3) === aku1; #THROWS IndexOutOfBoundsException 
48     * jasenet.lisaa(aku1); jasenet.getLkm() === 4;
49     * jasenet.lisaa(aku1); jasenet.getLkm() === 5;
50     * jasenet.lisaa(aku1);  #THROWS SailoException
51     * </pre>
52     */
53    public void lisaa(Jasen jasen) throws SailoException {
54      if ( lkm >= alkiot.length ) throw new SailoException("Liikaa alkioita");
55      alkiot[lkm] = jasen;
56      lkm++;
57    }
58  
59  
60    /**
61     * Palauttaa viitteen i:teen jäseneen.
62     * @param i monennenko jäsenen viite halutaan
63     * @return viite jäseneen, jonka indeksi on i
64     * @throws IndexOutOfBoundsException jos i ei ole sallitulla alueella  
65     */
66    public Jasen anna(int i) throws IndexOutOfBoundsException  {
67      if ( i < 0 || lkm <= i ) throw new IndexOutOfBoundsException("Laiton indeksi: " + i);
68      return alkiot[i];
69    }
70  
71  
72    /**
73     * Lukee jäsenistön tiedostosta.  Kesken.
74     * @param tied tiedoston nimen alkuosa
75     * @throws SailoException jos lukeminen epäonnistuu
76     */
77    public void lueTiedostosta(String tied) throws SailoException {
78      tiedostonNimi = tied + ".dat";
79      kokoNimi = "Kelmien kerho";
80    }
81  
82    /**
83     * Tallentaa jäsenistön tiedostoon.  Kesken.
84     * @throws SailoException jos talletus epäonnistuu
85     */
86    public void talleta() throws SailoException { 
87        // Ei vielä tee mitään
88    }
89  
90    /**
91     * Palauttaa Kerhon koko nimen
92     * @return Kerhon koko nimi merkkijononna
93     */
94    public String getKokoNimi()           { return kokoNimi;                   }
95  
96    /**
97     * Palauttaa kerhon jäsenten lukumäärän
98     * @return jäsenten lukumäärä
99     */
100   public int getLkm()                    { return lkm;                         }
101 
102   /**
103    * Palauttaa tiedoston nimen, jota käytetään tallennukseen
104    * @return tallennustiedoston nimi
105    */
106   public String getTiedostonNimi()      { return tiedostonNimi;              }
107 
108   /**
109    * Palauttaa varakopiotiedoston nimen
110    * @return varakopiotiedoston nimi
111    */
112   public String getBakNimi()            { return bakNimi;                    }
113 
114   /**
115    * Tekee nykyisestä tiedostosta varakopiotiedoston. Kesken.
116    * @param bak_tark tarkennin varakopioiedostoille
117    * @return onnistuiko (true) vai ei (false)
118    */
119   public boolean teeBak(String bak_tark) { bakNimi = bak_tark; return true;   }
120 
121   /**
122    * Testiohjelma jäsenistölle
123    * @param args ei käytössä
124    */
125   public static void main(String args[]) {
126     Jasenet jasenet = new Jasenet();
127 
128     Jasen aku = new Jasen(), aku2 = new Jasen();
129     aku.rekisteroi();    aku.vastaaAkuAnkka();
130     aku2.rekisteroi();   aku2.vastaaAkuAnkka();
131 
132     try {
133       jasenet.lisaa(aku);
134       jasenet.lisaa(aku2);
135 
136       System.out.println("============= Jäsenet testi =================");
137 
138       for (int i=0; i<jasenet.getLkm(); i++) {
139         Jasen jasen = jasenet.anna(i);
140         System.out.println("Jäsen nro: " + i);
141         jasen.tulosta(System.out);
142       }
143 
144     } catch ( SailoException ex ) {
145       System.out.println(ex.getMessage());
146     }
147   }
148 
149 }
150 
151 
152