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