001    import java.io.*;
002    import java.util.*;
003    import fi.jyu.mit.ohj2.*;
004    /**
005     * Kerhon jäsenistö joka osaa mm. lisätä uuden jäsenen
006     *
007     * @author Vesa Lappalainen
008     * @version 1.0, 22.02.2003
009     * @version 1.1, 20.03.2003
010     */
011    public class Jasenet {
012      private static final int MAX_JASENIA = 5;
013      private int lkm = 0;
014      private boolean muutettu = false;
015      private String tiedoston_nimi = "";
016      private String bak_nimi = "";
017      private String koko_nimi = "";
018      private Jasen alkiot[] = new Jasen[MAX_JASENIA];
019    
020      public Jasenet() {  }
021    
022      /**
023       * Poikkeusluokka tietorakenteesta aiheutuville poikkeuksille.
024       * @author Vesa Lappalainen
025       * @version 1.0, 22.02.2003
026       */
027      public class SailoException extends Exception {
028        public SailoException(String viesti) { super(viesti); }
029      }
030    
031      /**
032       * Lisää uuden jäsenen tietorakenteeseen.  Ottaa jäsenen omistukseensa.
033       * @param jasen lisätäävän jäsnen viite.  Huom tietorakenne muuttuu omistajaksi
034       * @throws SailoException jos tietorakennen on jo täynnä
035       */
036      public void lisaa(Jasen jasen) throws SailoException {
037        if ( lkm >= alkiot.length ) throw new SailoException("Liikaa alkioita");
038        alkiot[lkm] = jasen;
039        lkm++;
040      }
041    
042    
043      /**
044       * Palauttaa viitteen i:teen jäseneen.
045       * @param i monennenko jäsenen viite halutaan
046       * @return viite jäseneen, jonka indeksi on i
047       * @throws SailoException jos i ei ole sallitulla alueella
048       */
049      public Jasen anna(int i) throws SailoException {
050        if ( i < 0 || lkm <= i ) throw new SailoException("Laiton indeksi " + i);
051        return alkiot[i];
052      }
053    
054    
055    
056    
057    
058      /**
059       * Lukee jäsenistön tiedostosta.  Kesken.
060       * @param tied tiedoston nimen alkuosa
061       * @throws SailoException jos lukeminen epäonnistuu
062       */
063      public void lue_tiedostosta(String tied) throws SailoException {
064        tiedoston_nimi = tied + ".dat";
065        koko_nimi = "Kelmien kerho";
066      }
067    
068      /**
069       * Tallentaa jäsenistön tiedostoon.  Kesken.
070       * @throws SailoException jos talletus epäonnistuu
071       */
072      public void talleta() { }
073    
074      /**
075       * Palauttaa Kerhon koko nimen
076       * @return Kerhon koko nimi merkkijononna
077       */
078      public String getKoko_nimi()           { return koko_nimi;                   }
079    
080      /**
081       * Palauttaa kerhon jäsenten lukumäärän
082       * @return jäsenten lukumäärä
083       */
084      public int getLkm()                    { return lkm;                         }
085    
086      /**
087       * Palauttaa tiedoston nimen, jota käytetään tallennukseen
088       * @return tallennustiedoston nimi
089       */
090      public String getTiedoston_nimi()      { return tiedoston_nimi;              }
091    
092      /**
093       * Palauttaa varakopiotiedoston nimen
094       * @return varakopiotiedoston nimi
095       */
096      public String getBak_nimi()            { return bak_nimi;                    }
097    
098      /**
099       * 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