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