Kerho.java |
1 package kerho; 2 3 import java.util.Collection; 4 import java.util.Iterator; 5 import java.util.List; 6 7 import kanta.SailoException; 8 import kerho.Harrastus; 9 10 /** 11 * Kerho-luokka, joka huolehtii jäsenistöstä. Pääosin kaikki metodit 12 * ovat vain "välittäjämetodeja" jäsenistöön. 13 * 14 * @author Vesa Lappalainen 15 * @version 1.0, 09.02.2003 16 * @version 1.1, 23.02.2003 17 * @version 1.2, 07.01.2008 / testit 18 */ 19 public class Kerho implements Iterable<Jasen> { 20 private Jasenet jasenet = new Jasenet(); 21 private Harrastukset harrastukset = new Harrastukset(); 22 23 24 /** 25 * Palautaa kerhon jäsenmäärän 26 * @return jäsenmäärä 27 */ 28 public int getJasenia() { 29 return jasenet.getLkm(); 30 } 31 32 33 /** 34 * Poistaa jäsenistöstä ja harrasteista ne joilla on nro. Kesken. 35 * @param id viitenumero, jonka mukaan poistetaan 36 * @return montako jäsentä poistettiin 37 */ 38 public int poista(int id) { 39 int ret = jasenet.poista(id); 40 harrastukset.poistaJasenenHarrastukset(id); 41 return ret; 42 } 43 44 45 /** 46 * Poistaa tämän harrastuksen 47 * @param harrastus poistettava harrastus 48 */ 49 public void poistaHarrastus(Harrastus harrastus) { 50 harrastukset.poista(harrastus); 51 } 52 53 54 /** 55 * Lisää kerhoon uuden jäsenen 56 * @param jasen lisättävä jäsen 57 * @example 58 * <pre name="test"> 59 * #THROWS SailoException 60 * #PACKAGEIMPORT 61 * Kerho kerho = new Kerho(); 62 * Jasen aku1 = new Jasen(), aku2 = new Jasen(); 63 * aku1.rekisteroi(); aku2.rekisteroi(); 64 * kerho.getJasenia() === 0; 65 * kerho.lisaa(aku1); kerho.getJasenia() === 1; 66 * kerho.lisaa(aku2); kerho.getJasenia() === 2; 67 * kerho.lisaa(aku1); kerho.getJasenia() === 3; 68 * kerho.getJasenia() === 3; 69 * 70 * Iterator<Jasen> iter = kerho.iterator(); 71 * Jasen jasen0 = iter.next(); 72 * Jasen jasen1 = iter.next(); 73 * jasen0 === aku1; 74 * jasen1 === aku2; 75 * iter.next() === aku1; 76 * jasen1 == aku1 === false; 77 * jasen1 == aku2 === true; 78 * kerho.lisaa(aku1); kerho.getJasenia() === 4; 79 * kerho.lisaa(aku1); kerho.getJasenia() === 5; 80 * </pre> 81 * 82 */ 83 public void lisaa(Jasen jasen) { 84 jasenet.lisaa(jasen); 85 } 86 87 88 /** 89 * Korvaa jäsenen tietorakenteessa. Ottaa jäsenen omistukseensa. 90 * Etsitään samalla tunnusnumerolla oleva jäsen. Jos ei löydy, 91 * niin lisätään uutena jäsenenä. 92 * @param jasen lisätäävän jäsenen viite. Huom tietorakenne muuttuu omistajaksi 93 */ 94 public void korvaaTaiLisaa(Jasen jasen) { 95 jasenet.korvaaTaiLisaa(jasen); 96 } 97 98 99 /** 100 * Listään uusi harrastus kerhoon 101 * @param har lisättävä harrastus 102 */ 103 public void lisaa(Harrastus har) { 104 harrastukset.lisaa(har); 105 } 106 107 108 /** 109 * Kaikien jäsenten iteraattori 110 * @return jäseniteraattori 111 */ 112 @Override 113 public Iterator<Jasen> iterator() { 114 return jasenIterator(); 115 } 116 117 118 /** 119 * Kaikien jäsenten iteraattori 120 * @return jäseniteraattori 121 */ 122 public Iterator<Jasen> jasenIterator() { 123 return jasenet.iterator(); 124 } 125 126 127 /** 128 * Kaikkien harrastusten iteraattori 129 * @return harrastusiteraattori 130 */ 131 public Iterator<Harrastus> harrastusIterator() { 132 return harrastukset.iterator(); 133 } 134 135 136 /** 137 * Palauttaa "taulukossa" hakuehtoon vastaavien jäsenten viitteet 138 * @param hakuehto hakuehto 139 * @param k etsittävän kentän indeksi 140 * @return tietorakenteen löytyneistä jäsenistä 141 */ 142 public Collection<Jasen> etsi(String hakuehto, int k) { 143 return jasenet.etsi(hakuehto, k); 144 } 145 146 147 /** 148 * Palauttaa i:n jäsenen 149 * @param i monesko jäsen palautetaan 150 * @return viite i:teen jäseneen 151 * @throws IndexOutOfBoundsException jos i väärin 152 public Jasen annaJasen(int i) throws IndexOutOfBoundsException { 153 return jasenet.anna(i); 154 } 155 */ 156 157 158 /** 159 * Haetaan kaikki jäsen harrastukset 160 * @param jasen jäsen jolle harrastuksia haetaan 161 * @return tietorakenne jossa viiteet löydetteyihin harrastuksiin 162 */ 163 public List<Harrastus> annaHarrastukset(Jasen jasen) { 164 return harrastukset.annaHarrastukset(jasen.getTunnusNro()); 165 } 166 167 168 /** 169 * Laitetaan harrastukset muuttuneeksi, niin pakotetaan tallentamaan. 170 */ 171 public void setHarrastusMuutos() { 172 harrastukset.setMuutos(); 173 } 174 175 176 /** 177 * Lukee kerhon tiedot tiedostosta 178 * @param nimi jota käyteään lukemisessa 179 * @throws SailoException jos lukeminen epäonnistuu 180 * 181 * @example 182 * <pre name="test"> 183 * #THROWS SailoException 184 * #import java.io.*; 185 * #import java.util.*; 186 * #import kanta.SailoException; 187 * 188 * Kerho kerho = new Kerho(); 189 * 190 * Jasen aku1 = new Jasen(); aku1.vastaaAkuAnkka(); aku1.rekisteroi(); 191 * Jasen aku2 = new Jasen(); aku2.vastaaAkuAnkka(); aku2.rekisteroi(); 192 * Harrastus pitsi21 = new Harrastus(); pitsi21.vastaaPitsinNyplays(aku2.getTunnusNro()); 193 * Harrastus pitsi11 = new Harrastus(); pitsi11.vastaaPitsinNyplays(aku1.getTunnusNro()); 194 * Harrastus pitsi22 = new Harrastus(); pitsi22.vastaaPitsinNyplays(aku2.getTunnusNro()); 195 * Harrastus pitsi12 = new Harrastus(); pitsi12.vastaaPitsinNyplays(aku1.getTunnusNro()); 196 * Harrastus pitsi23 = new Harrastus(); pitsi23.vastaaPitsinNyplays(aku2.getTunnusNro()); 197 * 198 * String tiedNimi = "testikelmit"; 199 * File ftied = new File(tiedNimi+".dat"); 200 * File fhtied = new File(tiedNimi+".har"); 201 * ftied.delete(); 202 * fhtied.delete(); 203 * kerho.lueTiedostosta(tiedNimi); #THROWS SailoException 204 * kerho.lisaa(aku1); 205 * kerho.lisaa(aku2); 206 * kerho.lisaa(pitsi21); 207 * kerho.lisaa(pitsi11); 208 * kerho.lisaa(pitsi22); 209 * kerho.lisaa(pitsi12); 210 * kerho.lisaa(pitsi23); 211 * kerho.talleta(); 212 * kerho = new Kerho(); 213 * kerho.lueTiedostosta(tiedNimi); 214 * Iterator<Jasen> i = kerho.iterator(); 215 * i.next().toString() === aku1.toString(); 216 * i.next().toString() === aku2.toString(); 217 * i.hasNext() === false; 218 * Iterator<Harrastus> ih = kerho.harrastusIterator(); 219 * ih.next().toString() === pitsi21.toString(); 220 * ih.next().toString() === pitsi11.toString(); 221 * ih.next().toString() === pitsi22.toString(); 222 * ih.next().toString() === pitsi12.toString(); 223 * ih.next().toString() === pitsi23.toString(); 224 * ih.hasNext() === false; 225 * kerho.lisaa(aku2); 226 * kerho.lisaa(pitsi23); 227 * kerho.talleta(); 228 * ftied.delete() === true; 229 * fhtied.delete() === true; 230 * File fbak = new File(tiedNimi+".bak"); 231 * File fhbak = new File(tiedNimi+".hbak"); 232 * fbak.delete() === true; 233 * fhbak.delete() === true; 234 * </pre> 235 */ 236 public void lueTiedostosta(String nimi) throws SailoException { 237 jasenet = new Jasenet(); // jos luetaan olemassa olevaan niin helpoin tyhjentää näin 238 harrastukset = new Harrastukset(); 239 240 jasenet.setTiedostonPerusNimi(nimi); 241 harrastukset.setTiedostonPerusNimi(nimi); 242 jasenet.lueTiedostosta(nimi); 243 harrastukset.lueTiedostosta(nimi); 244 } 245 246 247 /** 248 * Tallettaa kerhon tiedot tiedostoon. 249 * Vaikka jäsenten tallettamien epäonistuisi, niin yritetään silti tallettaa 250 * harrastuksia ennen poikkeuksen heittämistä. 251 * @throws SailoException jos tallettamisessa ongelmia 252 */ 253 public void talleta() throws SailoException { 254 String virhe = ""; 255 try { 256 jasenet.talleta(); 257 } catch (SailoException ex) { 258 virhe = ex.getMessage(); 259 } 260 261 try { 262 harrastukset.talleta(); 263 } catch (SailoException ex) { 264 virhe += ex.getMessage(); 265 } 266 if (!"".equals(virhe)) throw new SailoException(virhe); 267 } 268 269 270 /** 271 * Testiohjelma kerhosta 272 * @param args ei käytössä 273 */ 274 public static void main(String args[]) { 275 Kerho kerho = new Kerho(); 276 277 // kerho.lueTiedostosta("kelmit"); 278 279 Jasen aku = new Jasen(), aku2 = new Jasen(); 280 aku.rekisteroi(); 281 aku.vastaaAkuAnkka(); 282 aku2.rekisteroi(); 283 aku2.vastaaAkuAnkka(); 284 285 kerho.lisaa(aku); 286 kerho.lisaa(aku2); 287 288 System.out.println("============= Kerhon testi ================="); 289 290 int i = 0; 291 for (Jasen jasen:kerho) { 292 System.out.println("Jäsen paikassa: " + i++); 293 jasen.tulosta(System.out); 294 } 295 296 } 297 298 299 /** 300 * @return kerhon koko nimi 301 */ 302 public String getNimi() { 303 return jasenet.getKokoNimi(); 304 } 305 306 307 /** 308 * @param id jäsenen id, jota haetaan 309 * @return jäsen jolla on valittu id 310 */ 311 public Jasen annaJasenId(int id) { 312 return jasenet.annaId(id); 313 } 314 315 } 316