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