Skip to content
Snippets Groups Projects
Commit f405863f authored by Vesa Lappalainen's avatar Vesa Lappalainen :bicyclist:
Browse files

Vaihe 5 - Harrastuksetkin lisataan ja tulostetaan

parent 6c1c571b
Branches tyo5
Tags vaihe5
No related merge requests found
No preview for this file type
...@@ -6,6 +6,7 @@ import java.io.PrintStream; ...@@ -6,6 +6,7 @@ import java.io.PrintStream;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.net.URL; import java.net.URL;
import java.util.List;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import fi.jyu.mit.fxgui.ComboBoxChooser; import fi.jyu.mit.fxgui.ComboBoxChooser;
...@@ -23,6 +24,7 @@ import javafx.scene.control.TextField; ...@@ -23,6 +24,7 @@ import javafx.scene.control.TextField;
import javafx.scene.text.Font; import javafx.scene.text.Font;
import kerho.Jasen; import kerho.Jasen;
import kerho.Kerho; import kerho.Kerho;
import kerho.Harrastus;
import kerho.SailoException; import kerho.SailoException;
/** /**
...@@ -31,6 +33,8 @@ import kerho.SailoException; ...@@ -31,6 +33,8 @@ import kerho.SailoException;
* @author vesal * @author vesal
* @version 31.12.2015 * @version 31.12.2015
* @version 5.1.2015 * @version 5.1.2015
* @version 5.2.2017 - lisätty jäsenien käsittely
* @version 5.2.2017 - lisätty harrastusten käsittely
*/ */
public class KerhoGUIController implements Initializable { public class KerhoGUIController implements Initializable {
...@@ -97,7 +101,7 @@ public class KerhoGUIController implements Initializable { ...@@ -97,7 +101,7 @@ public class KerhoGUIController implements Initializable {
@FXML private void handleUusiHarrastus() { @FXML private void handleUusiHarrastus() {
Dialogs.showMessageDialog("Ei osata vielä lisätä harrastusta"); uusiHarrastus();
} }
...@@ -214,7 +218,7 @@ public class KerhoGUIController implements Initializable { ...@@ -214,7 +218,7 @@ public class KerhoGUIController implements Initializable {
areaJasen.setText(""); areaJasen.setText("");
try (PrintStream os = TextAreaOutputStream.getTextPrintStream(areaJasen)) { try (PrintStream os = TextAreaOutputStream.getTextPrintStream(areaJasen)) {
jasenKohdalla.tulosta(os); tulosta(os,jasenKohdalla);
} }
} }
...@@ -253,6 +257,19 @@ public class KerhoGUIController implements Initializable { ...@@ -253,6 +257,19 @@ public class KerhoGUIController implements Initializable {
} }
/**
* Tekee uuden tyhjän harrastuksen editointia varten
*/
public void uusiHarrastus() {
if ( jasenKohdalla == null ) return;
Harrastus har = new Harrastus();
har.rekisteroi();
har.vastaaPitsinNyplays(jasenKohdalla.getTunnusNro());
kerho.lisaa(har);
hae(jasenKohdalla.getTunnusNro());
}
/** /**
* @param kerho Kerho jota käytetään tässä käyttöliittymässä * @param kerho Kerho jota käytetään tässä käyttöliittymässä
*/ */
...@@ -277,6 +294,7 @@ public class KerhoGUIController implements Initializable { ...@@ -277,6 +294,7 @@ public class KerhoGUIController implements Initializable {
} }
} }
/** /**
* Tulostaa jäsenen tiedot * Tulostaa jäsenen tiedot
* @param os tietovirta johon tulostetaan * @param os tietovirta johon tulostetaan
...@@ -286,6 +304,9 @@ public class KerhoGUIController implements Initializable { ...@@ -286,6 +304,9 @@ public class KerhoGUIController implements Initializable {
os.println("----------------------------------------------"); os.println("----------------------------------------------");
jasen.tulosta(os); jasen.tulosta(os);
os.println("----------------------------------------------"); os.println("----------------------------------------------");
List<Harrastus> harrastukset = kerho.annaHarrastukset(jasen);
for (Harrastus har:harrastukset)
har.tulosta(os);
} }
......
package kanta;
/**
* Luokka henkilötunnuksen tarkistamiseksi
* @author vesal
* @version 9.1.2011
*
*/
public class HetuTarkistus {
/** Hetuun kelpaavat tarkistusmerkit järjestyksessä */
// 0123456789012345678901234567890
public static final String TARKISTUSMERKIT = "0123456789ABCDEFHJKLMNPRSTUVWXY";
/**
* Palauttaa mikä olisi hetun tarkistumerkki. Tuotava parametrinä
* laillista muotoa oleva hetu, josta mahdollisesti tarkistumerkki
* puuttuu.
* @param hetu tutkittava hetu
* @return hetun tarkistusmerkki
* @example
* <pre name="test">
* hetunTarkistusMerkki("121212-222") === 'N';
* hetunTarkistusMerkki("121212-222S") === 'N';
* hetunTarkistusMerkki("121212-222N") === 'N';
* hetunTarkistusMerkki("121212-231Y") === 'Y';
* hetunTarkistusMerkki("311212-2317") === '7';
* hetunTarkistusMerkki("311212-2317XY") === '7'; // vaikka on liikaa merkkejä
* hetunTarkistusMerkki("999999-9999XY") === 'F'; // vaikka on pvm väärin
* hetunTarkistusMerkki("12121A-222S") === 'N'; #THROWS NumberFormatException
* hetunTarkistusMerkki("12121A-22") === 'N'; #THROWS StringIndexOutOfBoundsException
* hetunTarkistusMerkki("121") === 'N'; #THROWS StringIndexOutOfBoundsException
* </pre>
*/
public static char hetunTarkistusMerkki(String hetu) {
String pvm = hetu.substring(0,6);
String yksilo = hetu.substring(7,10);
long luku = Long.parseLong(pvm+yksilo);
int jakojaannos = (int)(luku % 31L);
return TARKISTUSMERKIT.charAt(jakojaannos);
}
/**
* Arvotaan satunnainen kokonaisluku välille [ala,yla]
* @param ala arvonnan alaraja
* @param yla arvonnan yläraja
* @return satunnainen luku väliltä [ala,yla]
*/
public static int rand(int ala, int yla) {
double n = (yla-ala)*Math.random() + ala;
return (int)Math.round(n);
}
/**
* Arvotaan satunnainen henkilötunnus, joka täyttää hetun ehdot
* @return satunnainen laillinen henkilötunnus
*/
public static String arvoHetu() {
String apuhetu = String.format("%02d",rand(1,28)) +
String.format("%02d",rand(1,12)) +
String.format("%02d",rand(1,99)) + "-" +
String.format("%03d",rand(1,1000));
return apuhetu + hetunTarkistusMerkki(apuhetu);
}
}
package kanta;
/**
* Luokka henkilötunnuksen tarkistamiseksi
* @author vesal
* @version 9.1.2011
*
*/
public class HetuTarkistus {
/** Hetuun kelpaavat tarkistusmerkit järjestyksessä */
// 0123456789012345678901234567890
public static final String TARKISTUSMERKIT = "0123456789ABCDEFHJKLMNPRSTUVWXY";
/**
* Palauttaa mikä olisi hetun tarkistumerkki. Tuotava parametrinä
* laillista muotoa oleva hetu, josta mahdollisesti tarkistumerkki
* puuttuu.
* @param hetu tutkittava hetu
* @return hetun tarkistusmerkki
* @example
* <pre name="test">
* hetunTarkistusMerkki("121212-222") === 'N';
* hetunTarkistusMerkki("121212-222S") === 'N';
* hetunTarkistusMerkki("121212-222N") === 'N';
* hetunTarkistusMerkki("121212-231Y") === 'Y';
* hetunTarkistusMerkki("311212-2317") === '7';
* hetunTarkistusMerkki("311212-2317XY") === '7'; // vaikka on liikaa merkkejä
* hetunTarkistusMerkki("999999-9999XY") === 'F'; // vaikka on pvm väärin
* hetunTarkistusMerkki("12121A-222S") === 'N'; #THROWS NumberFormatException
* hetunTarkistusMerkki("12121A-22") === 'N'; #THROWS StringIndexOutOfBoundsException
* hetunTarkistusMerkki("121") === 'N'; #THROWS StringIndexOutOfBoundsException
* </pre>
*/
public static char hetunTarkistusMerkki(String hetu) {
String pvm = hetu.substring(0,6);
String yksilo = hetu.substring(7,10);
long luku = Long.parseLong(pvm+yksilo);
int jakojaannos = (int)(luku % 31L);
return TARKISTUSMERKIT.charAt(jakojaannos);
}
/**
* Arvotaan satunnainen kokonaisluku välille [ala,yla]
* @param ala arvonnan alaraja
* @param yla arvonnan yläraja
* @return satunnainen luku väliltä [ala,yla]
*/
public static int rand(int ala, int yla) {
double n = (yla-ala)*Math.random() + ala;
return (int)Math.round(n);
}
/**
* Arvotaan satunnainen henkilötunnus, joka täyttää hetun ehdot
* @return satunnainen laillinen henkilötunnus
*/
public static String arvoHetu() {
String apuhetu = String.format("%02d",rand(1,28)) +
String.format("%02d",rand(1,12)) +
String.format("%02d",rand(1,99)) + "-" +
String.format("%03d",rand(1,1000));
return apuhetu + hetunTarkistusMerkki(apuhetu);
}
}
package kerho;
import java.util.*;
/**
* Kerhon harrastukset, joka osaa mm. lisätä uuden harrastuksen
*
* @author Vesa Lappalainen
* @version 1.0, 22.02.2003
*/
public class Harrastukset implements Iterable<Harrastus> {
private String tiedostonNimi = "";
/** Taulukko harrastuksista */
private final Collection<Harrastus> alkiot = new ArrayList<Harrastus>();
/**
* Harrastusten alustaminen
*/
public Harrastukset() {
// toistaiseksi ei tarvitse tehdä mitään
}
/**
* Lisää uuden harrastuksen tietorakenteeseen. Ottaa harrastuksen omistukseensa.
* @param har lisättävä harrastus. Huom tietorakenne muuttuu omistajaksi
*/
public void lisaa(Harrastus har) {
alkiot.add(har);
}
/**
* Lukee jäsenistön tiedostosta.
* TODO Kesken.
* @param hakemisto tiedoston hakemisto
* @throws SailoException jos lukeminen epäonnistuu
*/
public void lueTiedostosta(String hakemisto) throws SailoException {
tiedostonNimi = hakemisto + ".har";
throw new SailoException("Ei osata vielä lukea tiedostoa " + tiedostonNimi);
}
/**
* Tallentaa jäsenistön tiedostoon.
* TODO Kesken.
* @throws SailoException jos talletus epäonnistuu
*/
public void talleta() throws SailoException {
throw new SailoException("Ei osata vielä tallettaa tiedostoa " + tiedostonNimi);
}
/**
* Palauttaa kerhon harrastusten lukumäärän
* @return harrastusten lukumäärä
*/
public int getLkm() {
return alkiot.size();
}
/**
* Iteraattori kaikkien harrastusten läpikäymiseen
* @return harrastusiteraattori
*
* @example
* <pre name="test">
* #PACKAGEIMPORT
* #import java.util.*;
*
* Harrastukset harrasteet = new Harrastukset();
* Harrastus pitsi21 = new Harrastus(2); harrasteet.lisaa(pitsi21);
* Harrastus pitsi11 = new Harrastus(1); harrasteet.lisaa(pitsi11);
* Harrastus pitsi22 = new Harrastus(2); harrasteet.lisaa(pitsi22);
* Harrastus pitsi12 = new Harrastus(1); harrasteet.lisaa(pitsi12);
* Harrastus pitsi23 = new Harrastus(2); harrasteet.lisaa(pitsi23);
*
* Iterator<Harrastus> i2=harrasteet.iterator();
* i2.next() === pitsi21;
* i2.next() === pitsi11;
* i2.next() === pitsi22;
* i2.next() === pitsi12;
* i2.next() === pitsi23;
* i2.next() === pitsi12; #THROWS NoSuchElementException
*
* int n = 0;
* int jnrot[] = {2,1,2,1,2};
*
* for ( Harrastus har:harrasteet ) {
* har.getJasenNro() === jnrot[n]; n++;
* }
*
* n === 5;
*
* </pre>
*/
@Override
public Iterator<Harrastus> iterator() {
return alkiot.iterator();
}
/**
* Haetaan kaikki jäsen harrastukset
* @param tunnusnro jäsenen tunnusnumero jolle harrastuksia haetaan
* @return tietorakenne jossa viiteet löydetteyihin harrastuksiin
* @example
* <pre name="test">
* #import java.util.*;
*
* Harrastukset harrasteet = new Harrastukset();
* Harrastus pitsi21 = new Harrastus(2); harrasteet.lisaa(pitsi21);
* Harrastus pitsi11 = new Harrastus(1); harrasteet.lisaa(pitsi11);
* Harrastus pitsi22 = new Harrastus(2); harrasteet.lisaa(pitsi22);
* Harrastus pitsi12 = new Harrastus(1); harrasteet.lisaa(pitsi12);
* Harrastus pitsi23 = new Harrastus(2); harrasteet.lisaa(pitsi23);
* Harrastus pitsi51 = new Harrastus(5); harrasteet.lisaa(pitsi51);
*
* List<Harrastus> loytyneet;
* loytyneet = harrasteet.annaHarrastukset(3);
* loytyneet.size() === 0;
* loytyneet = harrasteet.annaHarrastukset(1);
* loytyneet.size() === 2;
* loytyneet.get(0) == pitsi11 === true;
* loytyneet.get(1) == pitsi12 === true;
* loytyneet = harrasteet.annaHarrastukset(5);
* loytyneet.size() === 1;
* loytyneet.get(0) == pitsi51 === true;
* </pre>
*/
public List<Harrastus> annaHarrastukset(int tunnusnro) {
List<Harrastus> loydetyt = new ArrayList<Harrastus>();
for (Harrastus har : alkiot)
if (har.getJasenNro() == tunnusnro) loydetyt.add(har);
return loydetyt;
}
/**
* Testiohjelma harrastuksille
* @param args ei käytössä
*/
public static void main(String[] args) {
Harrastukset harrasteet = new Harrastukset();
Harrastus pitsi1 = new Harrastus();
pitsi1.vastaaPitsinNyplays(2);
Harrastus pitsi2 = new Harrastus();
pitsi2.vastaaPitsinNyplays(1);
Harrastus pitsi3 = new Harrastus();
pitsi3.vastaaPitsinNyplays(2);
Harrastus pitsi4 = new Harrastus();
pitsi4.vastaaPitsinNyplays(2);
harrasteet.lisaa(pitsi1);
harrasteet.lisaa(pitsi2);
harrasteet.lisaa(pitsi3);
harrasteet.lisaa(pitsi2);
harrasteet.lisaa(pitsi4);
System.out.println("============= Harrastukset testi =================");
List<Harrastus> harrastukset2 = harrasteet.annaHarrastukset(2);
for (Harrastus har : harrastukset2) {
System.out.print(har.getJasenNro() + " ");
har.tulosta(System.out);
}
}
}
package kerho;
import java.io.*;
import static kanta.HetuTarkistus.rand;
/**
* Harrastus joka osaa mm. itse huolehtia tunnus_nro:staan.
*
* @author Vesa Lappalainen
* @version 1.0, 22.02.2003
*/
public class Harrastus {
private int tunnusNro;
private int jasenNro;
private String ala;
private int aloitusvuosi;
private int tuntiaViikossa;
private static int seuraavaNro = 1;
/**
* Alustetaan harrastus. Toistaiseksi ei tarvitse tehdä mitään
*/
public Harrastus() {
// Vielä ei tarvita mitään
}
/**
* Alustetaan tietyn jäsenen harrastus.
* @param jasenNro jäsenen viitenumero
*/
public Harrastus(int jasenNro) {
this.jasenNro = jasenNro;
}
/**
* Apumetodi, jolla saadaan täytettyä testiarvot Harrastukselle.
* Aloitusvuosi arvotaan, jotta kahdella harrastuksella ei olisi
* samoja tietoja.
* @param nro viite henkilöön, jonka harrastuksesta on kyse
*/
public void vastaaPitsinNyplays(int nro) {
jasenNro = nro;
ala = "Pitsin nypläys";
aloitusvuosi = rand(1900, 2000);
tuntiaViikossa = rand(0, 60);
}
/**
* Tulostetaan harrastuksen tiedot
* @param out tietovirta johon tulostetaan
*/
public void tulosta(PrintStream out) {
out.println(ala + " " + aloitusvuosi + " " + tuntiaViikossa);
}
/**
* Tulostetaan henkilön tiedot
* @param os tietovirta johon tulostetaan
*/
public void tulosta(OutputStream os) {
tulosta(new PrintStream(os));
}
/**
* Antaa harrastukselle seuraavan rekisterinumeron.
* @return harrastuksen uusi tunnus_nro
* @example
* <pre name="test">
* Harrastus pitsi1 = new Harrastus();
* pitsi1.getTunnusNro() === 0;
* pitsi1.rekisteroi();
* Harrastus pitsi2 = new Harrastus();
* pitsi2.rekisteroi();
* int n1 = pitsi1.getTunnusNro();
* int n2 = pitsi2.getTunnusNro();
* n1 === n2-1;
* </pre>
*/
public int rekisteroi() {
tunnusNro = seuraavaNro;
seuraavaNro++;
return tunnusNro;
}
/**
* Palautetaan harrastuksen oma id
* @return harrastuksen id
*/
public int getTunnusNro() {
return tunnusNro;
}
/**
* Palautetaan mille jäsenelle harrastus kuuluu
* @return jäsenen id
*/
public int getJasenNro() {
return jasenNro;
}
/**
* Testiohjelma Harrastukselle.
* @param args ei käytössä
*/
public static void main(String[] args) {
Harrastus har = new Harrastus();
har.vastaaPitsinNyplays(2);
har.tulosta(System.out);
}
}
package kerho; package kerho;
import java.util.List;
/** /**
* Kerho-luokka, joka huolehtii jäsenistöstä. Pääosin kaikki metodit * Kerho-luokka, joka huolehtii jäsenistöstä. Pääosin kaikki metodit
...@@ -9,9 +10,11 @@ package kerho; ...@@ -9,9 +10,11 @@ package kerho;
* @version 1.0, 09.02.2003 * @version 1.0, 09.02.2003
* @version 1.1, 23.02.2003 * @version 1.1, 23.02.2003
* @version 1.2, 07.01.2008 / testit * @version 1.2, 07.01.2008 / testit
* @version 1.3, 03.03.2013 / Harrastukset
*/ */
public class Kerho { public class Kerho {
private final Jasenet jasenet = new Jasenet(); private final Jasenet jasenet = new Jasenet();
private final Harrastukset harrastukset = new Harrastukset();
/** /**
...@@ -62,6 +65,15 @@ public class Kerho { ...@@ -62,6 +65,15 @@ public class Kerho {
} }
/**
* Listään uusi harrastus kerhoon
* @param har lisättävä harrastus
*/
public void lisaa(Harrastus har) {
harrastukset.lisaa(har);
}
/** /**
* Palauttaa i:n jäsenen * Palauttaa i:n jäsenen
* @param i monesko jäsen palautetaan * @param i monesko jäsen palautetaan
...@@ -73,6 +85,42 @@ public class Kerho { ...@@ -73,6 +85,42 @@ public class Kerho {
} }
/**
* Haetaan kaikki jäsen harrastukset
* @param jasen jäsen jolle harrastuksia haetaan
* @return tietorakenne jossa viiteet löydetteyihin harrastuksiin
* @example
* <pre name="test">
* #import java.util.*;
*
* Kerho kerho = new Kerho();
* Jasen aku1 = new Jasen(), aku2 = new Jasen(), aku3 = new Jasen();
* aku1.rekisteroi(); aku2.rekisteroi(); aku3.rekisteroi();
* int id1 = aku1.getTunnusNro();
* int id2 = aku2.getTunnusNro();
* Harrastus pitsi11 = new Harrastus(id1); kerho.lisaa(pitsi11);
* Harrastus pitsi12 = new Harrastus(id1); kerho.lisaa(pitsi12);
* Harrastus pitsi21 = new Harrastus(id2); kerho.lisaa(pitsi21);
* Harrastus pitsi22 = new Harrastus(id2); kerho.lisaa(pitsi22);
* Harrastus pitsi23 = new Harrastus(id2); kerho.lisaa(pitsi23);
*
* List<Harrastus> loytyneet;
* loytyneet = kerho.annaHarrastukset(aku3);
* loytyneet.size() === 0;
* loytyneet = kerho.annaHarrastukset(aku1);
* loytyneet.size() === 2;
* loytyneet.get(0) == pitsi11 === true;
* loytyneet.get(1) == pitsi12 === true;
* loytyneet = kerho.annaHarrastukset(aku2);
* loytyneet.size() === 3;
* loytyneet.get(0) == pitsi21 === true;
* </pre>
*/
public List<Harrastus> annaHarrastukset(Jasen jasen) {
return harrastukset.annaHarrastukset(jasen.getTunnusNro());
}
/** /**
* Lukee kerhon tiedot tiedostosta * Lukee kerhon tiedot tiedostosta
* @param nimi jota käyteään lukemisessa * @param nimi jota käyteään lukemisessa
...@@ -80,6 +128,7 @@ public class Kerho { ...@@ -80,6 +128,7 @@ public class Kerho {
*/ */
public void lueTiedostosta(String nimi) throws SailoException { public void lueTiedostosta(String nimi) throws SailoException {
jasenet.lueTiedostosta(nimi); jasenet.lueTiedostosta(nimi);
harrastukset.lueTiedostosta(nimi);
} }
...@@ -89,6 +138,7 @@ public class Kerho { ...@@ -89,6 +138,7 @@ public class Kerho {
*/ */
public void talleta() throws SailoException { public void talleta() throws SailoException {
jasenet.talleta(); jasenet.talleta();
harrastukset.talleta();
// TODO: yritä tallettaa toinen vaikka toinen epäonnistuisi // TODO: yritä tallettaa toinen vaikka toinen epäonnistuisi
} }
...@@ -111,6 +161,13 @@ public class Kerho { ...@@ -111,6 +161,13 @@ public class Kerho {
kerho.lisaa(aku1); kerho.lisaa(aku1);
kerho.lisaa(aku2); kerho.lisaa(aku2);
int id1 = aku1.getTunnusNro();
int id2 = aku2.getTunnusNro();
Harrastus pitsi11 = new Harrastus(id1); pitsi11.vastaaPitsinNyplays(id1); kerho.lisaa(pitsi11);
Harrastus pitsi12 = new Harrastus(id1); pitsi12.vastaaPitsinNyplays(id1); kerho.lisaa(pitsi12);
Harrastus pitsi21 = new Harrastus(id2); pitsi21.vastaaPitsinNyplays(id2); kerho.lisaa(pitsi21);
Harrastus pitsi22 = new Harrastus(id2); pitsi22.vastaaPitsinNyplays(id2); kerho.lisaa(pitsi22);
Harrastus pitsi23 = new Harrastus(id2); pitsi23.vastaaPitsinNyplays(id2); kerho.lisaa(pitsi23);
System.out.println("============= Kerhon testi ================="); System.out.println("============= Kerhon testi =================");
...@@ -118,6 +175,9 @@ public class Kerho { ...@@ -118,6 +175,9 @@ public class Kerho {
Jasen jasen = kerho.annaJasen(i); Jasen jasen = kerho.annaJasen(i);
System.out.println("Jäsen paikassa: " + i); System.out.println("Jäsen paikassa: " + i);
jasen.tulosta(System.out); jasen.tulosta(System.out);
List<Harrastus> loytyneet = kerho.annaHarrastukset(jasen);
for (Harrastus harrastus : loytyneet)
harrastus.tulosta(System.out);
} }
} catch (SailoException ex) { } catch (SailoException ex) {
......
...@@ -14,6 +14,8 @@ import org.junit.runners.Suite.SuiteClasses; ...@@ -14,6 +14,8 @@ import org.junit.runners.Suite.SuiteClasses;
kanta.test.HetuTarkistusTest.class, kanta.test.HetuTarkistusTest.class,
kerho.test.JasenTest.class, kerho.test.JasenTest.class,
kerho.test.JasenetTest.class, kerho.test.JasenetTest.class,
kerho.test.HarrastusTest.class,
kerho.test.HarrastuksetTest.class,
kerho.test.KerhoTest.class kerho.test.KerhoTest.class
}) })
public class AllTests { public class AllTests {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment