1   import java.io.*;
2   import java.util.*;
3   import fi.jyu.mit.ohj2.*;
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    * @version 1.1, 20.03.2003
10   */
11  public class Jasenet {
12    private static final int MAX_JASENIA = 5;
13    private int lkm = 0;
14    private boolean muutettu = false;
15    private String tiedoston_nimi = "";
16    private String bak_nimi = "";
17    private String koko_nimi = "";
18    private Jasen alkiot[] = new Jasen[MAX_JASENIA];
19  
20    public Jasenet() {  }
21  
22    /**
23     * Poikkeusluokka tietorakenteesta aiheutuville poikkeuksille.
24     * @author Vesa Lappalainen
25     * @version 1.0, 22.02.2003
26     */
27    public class SailoException extends Exception {
28      public SailoException(String viesti) { super(viesti); }
29    }
30  
31    /**
32     * Lisää uuden jäsenen tietorakenteeseen.  Ottaa jäsenen omistukseensa.
33     * @param jasen lisätäävän jäsnen viite.  Huom tietorakenne muuttuu omistajaksi
34     * @throws SailoException jos tietorakennen on jo täynnä
35     */
36    public void lisaa(Jasen jasen) throws SailoException {
37      if ( lkm >= alkiot.length ) throw new SailoException("Liikaa alkioita");
38      alkiot[lkm] = jasen;
39      lkm++;
40    }
41  
42  
43    /**
44     * Palauttaa viitteen i:teen jäseneen.
45     * @param i monennenko jäsenen viite halutaan
46     * @return viite jäseneen, jonka indeksi on i
47     * @throws SailoException jos i ei ole sallitulla alueella
48     */
49    public Jasen anna(int i) throws SailoException {
50      if ( i < 0 || lkm <= i ) throw new SailoException("Laiton indeksi " + i);
51      return alkiot[i];
52    }
53  
54  
55  
56  
57  
58    /**
59     * Lukee jäsenistön tiedostosta.  Kesken.
60     * @param tied tiedoston nimen alkuosa
61     * @throws SailoException jos lukeminen epäonnistuu
62     */
63    public void lue_tiedostosta(String tied) throws SailoException {
64      tiedoston_nimi = tied + ".dat";
65      koko_nimi = "Kelmien kerho";
66    }
67  
68    /**
69     * Tallentaa jäsenistön tiedostoon.  Kesken.
70     * @throws SailoException jos talletus epäonnistuu
71     */
72    public void talleta() { }
73  
74    /**
75     * Palauttaa Kerhon koko nimen
76     * @return Kerhon koko nimi merkkijononna
77     */
78    public String getKoko_nimi()           { return koko_nimi;                   }
79  
80    /**
81     * Palauttaa kerhon jäsenten lukumäärän
82     * @return jäsenten lukumäärä
83     */
84    public int getLkm()                    { return lkm;                         }
85  
86    /**
87     * Palauttaa tiedoston nimen, jota käytetään tallennukseen
88     * @return tallennustiedoston nimi
89     */
90    public String getTiedoston_nimi()      { return tiedoston_nimi;              }
91  
92    /**
93     * Palauttaa varakopiotiedoston nimen
94     * @return varakopiotiedoston nimi
95     */
96    public String getBak_nimi()            { return bak_nimi;                    }
97  
98    /**
99     * Tekee nykyisestä tiedostosta varakopiotiedoston. Kesken.
100    * @param bak_tark tarkennin varakopioiedostoille
101    * @return onnistuiko (true) vai ei (false)
102    */
103   public boolean TeeBak(String bak_tark) { bak_nimi = bak_tark; return true;   }
104 
105   /**
106    * Iteraattorin implementointi.
107    * @author Vesa Lappalainen
108    * @version 1.0, 20.03.2003
109    */
110   public class JasenetIterator implements Iterator {
111     private int kohdalla = -1;
112 
113     public boolean hasNext() {
114 //     if ( kohdalla + 1 >= lkm )  return false;
115 //     return true;
116       return kohdalla + 1 < lkm;
117     }
118 
119     public Object next() throws NoSuchElementException {
120       if ( !hasNext() ) throw new NoSuchElementException("Ei oo");
121       kohdalla++;
122       return alkiot[kohdalla];
123     }
124 
125     public void remove() throws UnsupportedOperationException {
126       throw new UnsupportedOperationException("Me ei poisteta");
127     }
128   }
129 
130   /**
131    * Palauttaa iteraattorin jolla kaikki jäsenet voidaan käydä lävitse
132    * @return iteraattori kaikkien läpikäymiseen
133    */
134   public Iterator iterator() {
135     return new JasenetIterator();
136   }
137 
138 
139 
140   /**
141    * Testiohjelma jäsenistölle
142    * @param args ei käytössä
143    */
144   public static void main(String args[]) {
145     Jasenet jasenet = new Jasenet();
146 
147     Jasen aku = new Jasen(), aku2 = new Jasen();
148     aku.rekisteroi();    aku.vastaa_aku_ankka();
149     aku2.rekisteroi();   aku2.vastaa_aku_ankka();
150 
151     try {
152       jasenet.lisaa(aku);
153       jasenet.lisaa(aku2);
154 
155       System.out.println("============= Jäsenet testi =================");
156 
157 //      for (int i=0; i<jasenet.getLkm(); i++) {
158       for (Iterator  i=jasenet.iterator(); i.hasNext(); ) {
159 //        Jasen jasen = jasenet.anna(i);
160         Jasen jasen = (Jasen)i.next();
161         System.out.println("Jäsen nro: " + i);
162         jasen.tulosta(System.out);
163       }
164 
165     } catch ( Jasenet.SailoException ex ) {
166       System.out.println(ex.getMessage());
167     }
168   }
169 
170 }
171 
172 
173