Harrastus.java |
1 package kerho; 2 3 import java.io.*; 4 5 import fi.jyu.mit.ohj2.Mjonot; 6 7 /** 8 * Harrastus joka osaa mm. itse huolehtia tunnus_nro:staan. 9 * TODO: Muuta käyttämään kenttätaulukkoa 10 * @author Vesa Lappalainen 11 * @version 1.0, 22.02.2003 12 */ 13 public class Harrastus implements Cloneable { 14 private int tunnusnro; 15 private int jasenNro; 16 private String ala = ""; 17 private int aloitusvuosi; 18 private int tuntiaViikossa; 19 20 private static int seuraavaNro = 1; 21 22 /** 23 * Alustetaan harrastus. Toistaiseksi ei tarvitse tehdä mitään 24 */ 25 public Harrastus() { 26 // Vielä ei tarvita mitään 27 } 28 29 30 /** 31 * Alustetaan tietyn jäsenen harrastus. 32 * @param jasenNro jäsenen viitenumero 33 */ 34 public Harrastus(int jasenNro) { 35 this.jasenNro = jasenNro; 36 } 37 38 /** 39 * @return harrastukse kenttien lukumäärä 40 */ 41 public int getKenttia() { 42 return 5; 43 } 44 45 /** 46 * @return ensimmäinen käyttäjän syötettävän kentän indeksi 47 */ 48 public int ekaKentta() { 49 return 2; 50 } 51 52 53 /** 54 * @param k minkä kentän kysymys halutaan 55 * @return valitun kentän kysymysteksti 56 */ 57 public String getKysymys(int k) { 58 switch (k) { 59 case 0: return "id"; 60 case 1: return "jäsenId"; 61 case 2: return "ala"; 62 case 3: return "aloitusvuosi"; 63 case 4: return "h/vko"; 64 default: return "???"; 65 } 66 } 67 68 69 /** 70 * @param k Minkä kentän sisältö halutaan 71 * @return valitun kentän sisältö 72 * @example 73 * <pre name="test"> 74 * Harrastus har = new Harrastus(); 75 * har.parse(" 2 | 10 | Kalastus | 1949 | 22 t "); 76 * har.anna(0) === "2"; 77 * har.anna(1) === "10"; 78 * har.anna(2) === "Kalastus"; 79 * har.anna(3) === "1949"; 80 * har.anna(4) === "22"; 81 * 82 * </pre> 83 */ 84 public String anna(int k) { 85 switch (k) { 86 case 0: return ""+tunnusnro; 87 case 1: return ""+jasenNro; 88 case 2: return ala; 89 case 3: return ""+aloitusvuosi; 90 case 4: return ""+tuntiaViikossa; 91 default: return "???"; 92 } 93 } 94 95 96 /** 97 * Asetetaan valitun kentän sisältö. Mikäli asettaminen onnistuu, 98 * palautetaan null, muutoin virheteksti. 99 * @param k minkä kentän sisältö asetetaan 100 * @param s asetettava sisältö merkkijonona 101 * @return null jos ok, muuten virheteksti 102 * @example 103 * <pre name="test"> 104 * Harrastus har = new Harrastus(); 105 * har.aseta(3,"kissa") === "Aloitusvuosi väärin jono = \"kissa\""; 106 * har.aseta(3,"1940") === null; 107 * har.aseta(4,"kissa") === "Viikkotunnit väärin jono = \"kissa\""; 108 * har.aseta(4,"20") === null; 109 * 110 * </pre> 111 */ 112 public String aseta(int k,String s) { 113 String st = s.trim(); 114 StringBuffer sb = new StringBuffer(st); 115 switch (k) { 116 case 0: tunnusnro = Mjonot.erota(sb,'$',tunnusnro); return null; 117 case 1: jasenNro = Mjonot.erota(sb,'$',jasenNro); return null; 118 case 2: ala = st; return null; 119 case 3: 120 try { 121 aloitusvuosi = Mjonot.erotaEx(sb,'§',aloitusvuosi); 122 } catch (NumberFormatException ex) { 123 return "Aloitusvuosi väärin " + ex.getMessage(); 124 } 125 return null; 126 127 case 4: 128 try { 129 tuntiaViikossa = Mjonot.erotaEx(sb,'§',tuntiaViikossa); 130 } catch (NumberFormatException ex) { 131 return "Viikkotunnit väärin " + ex.getMessage(); 132 } 133 return null; 134 135 default: return "Väärä kentän indeksi"; 136 } 137 } 138 139 140 /** 141 * Tehdään identtinen klooni jäsenestä 142 * @return Object kloonattu jäsen 143 * @example 144 * <pre name="test"> 145 * #THROWS CloneNotSupportedException 146 * Harrastus har = new Harrastus(); 147 * har.parse(" 2 | 10 | Kalastus | 1949 | 22 t "); 148 * Harrastus kopio = har.clone(); 149 * kopio.toString() === har.toString(); 150 * har.parse(" 1 | 11 | Uinti | 1949 | 22 t "); 151 * kopio.toString().equals(har.toString()) === false; 152 * </pre> 153 */ 154 @Override 155 public Harrastus clone() throws CloneNotSupportedException { // NOPMD 156 return (Harrastus)super.clone(); 157 } 158 159 160 161 162 /** 163 * Apumetodi, jolla saadaan täytettyä testiarvot Harrastukselle. 164 * Aloitusvuosi arvotaan, jotta kahdella harrastuksella ei olisi 165 * samoja tietoja. 166 * @param nro viite henkilöön, jonka harrastuksesta on kyse 167 */ 168 public void vastaaPitsinNyplays(int nro) { 169 jasenNro = nro; 170 ala = "Pitsin nypläys"; 171 aloitusvuosi = Jasen.rand(1900,2000); 172 tuntiaViikossa = Jasen.rand(0,60); 173 } 174 175 176 /** 177 * @return harrastuksen tiedot tulostettavana merkkijonona 178 * @example 179 * <pre name="test"> 180 * Harrastus har = new Harrastus(); 181 * har.parse(" 2 | 10 | Kalastus | 1949 | 22 t "); 182 * har.toPrintString() === "Kalastus 1949 22 t/vko" 183 * 184 * </pre> 185 */ 186 public String toPrintString() { 187 return ala + " " + aloitusvuosi + " " + tuntiaViikossa + " t/vko"; 188 } 189 190 191 /** 192 * Tulostetaan harrastuksen tiedot 193 * @param out tietovirta johon tulostetaan 194 */ 195 public void tulosta(PrintWriter out) { 196 out.println(toPrintString()); 197 } 198 199 200 /** 201 * Tulostetaan harrastuksen tiedot 202 * @param os tietovirta johon tulostetaan 203 */ 204 public void tulosta(OutputStream os) { 205 tulosta(new PrintStream(os)); 206 } 207 208 /** 209 * Tulostetaan harrastuksen tiedot 210 * @param out tietovirta johon tulostetaan 211 */ 212 public void tulosta(PrintStream out) { 213 tulosta(new PrintWriter(out,true)); // ilman autoflushia ei mitään tulostu! 214 } 215 216 217 /** 218 * Antaa harrastukselle seuraavan rekisterinumeron. 219 * @return harrastuksen uusi tunnus_nro 220 * @example 221 * <pre name="test"> 222 * Harrastus pitsi1 = new Harrastus(); 223 * pitsi1.getTunnusnro() === 0; 224 * pitsi1.rekisteroi(); 225 * Harrastus pitsi2 = new Harrastus(); 226 * pitsi2.rekisteroi(); 227 * int n1 = pitsi1.getTunnusnro(); 228 * int n2 = pitsi2.getTunnusnro(); 229 * n1 === n2-1; 230 * </pre> 231 */ 232 public int rekisteroi() { 233 tunnusnro = seuraavaNro; 234 seuraavaNro++; 235 return tunnusnro; 236 } 237 238 239 /** 240 * Palautetaan harrastuksen oma id 241 * @return harrastuksen id 242 */ 243 public int getTunnusnro() { return tunnusnro; } 244 245 246 /** 247 * Palautetaan mille jäsenelle harrastus kuuluu 248 * @return jäsenen id 249 */ 250 public int getJasenNro() { return jasenNro; } 251 252 253 /** 254 * Palauttaa harrastuksen tiedot merkkijonona jonka voi tallentaa tiedostoon. 255 * @return harrastus tolppaeroteltuna merkkijonona 256 * @example 257 * <pre name="test"> 258 * Harrastus harrastus = new Harrastus(); 259 * harrastus.parse(" 2 | 10 | Kalastus | 1949 | 22 t "); 260 * harrastus.toString() === "2|10|Kalastus|1949|22"; 261 * </pre> 262 */ 263 @Override 264 public String toString() { 265 return "" + 266 tunnusnro + "|" + 267 jasenNro + "|" + 268 ala + "|" + 269 aloitusvuosi + "|" + 270 tuntiaViikossa; 271 } 272 273 274 /** 275 * Selvitää harrastuksen tiedot | erotellusta merkkijonosta. 276 * Pitää huolen että seuraavaNro on suurempi kuin tuleva tunnusnro. 277 * @param rivi josta harrastuksen tiedot otetaan 278 * @example 279 * <pre name="test"> 280 * Harrastus harrastus = new Harrastus(); 281 * harrastus.parse(" 2 | 10 | Kalastus | 1949 | 22 t "); 282 * harrastus.getJasenNro() === 10; 283 * harrastus.toString() === "2|10|Kalastus|1949|22"; 284 * 285 * harrastus.rekisteroi(); 286 * int n = harrastus.getTunnusnro(); 287 * harrastus.parse(""+(n+20)); 288 * harrastus.rekisteroi(); 289 * harrastus.getTunnusnro() === n+20+1; 290 * harrastus.toString() === "" + (n+20+1) + "|10|Kalastus|1949|22"; 291 * </pre> 292 */ 293 public void parse(String rivi) { 294 StringBuffer sb = new StringBuffer(rivi); 295 tunnusnro = Mjonot.erota(sb,'|',tunnusnro); 296 if ( tunnusnro >= seuraavaNro ) seuraavaNro = tunnusnro + 1; 297 jasenNro = Mjonot.erota(sb,'|',jasenNro); 298 ala = Mjonot.erota(sb,'|',ala); 299 aloitusvuosi = Mjonot.erota(sb,'|',aloitusvuosi); 300 tuntiaViikossa = Mjonot.erota(sb,'|',tuntiaViikossa); 301 } 302 303 304 305 /** 306 * Testiohjelma Harrastukselle. 307 * @param args ei käytössä 308 */ 309 public static void main(String[] args) { 310 Harrastus har = new Harrastus(); 311 har.vastaaPitsinNyplays(2); 312 har.tulosta(System.out); 313 } 314 315 } 316 317 318