Skip to content
GitLab
Explore
Sign in
Commits on Source (1)
Vaihe 7.3 - Harrastusten nayttaminen kunnolla
· fbc39155
Vesa Lappalainen
authored
Jan 06, 2020
fbc39155
Hide whitespace changes
Inline
Side-by-side
.project
View file @
fbc39155
...
...
@@ -10,8 +10,14 @@
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>
org.eclipse.xtext.ui.shared.xtextBuilder
</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>
org.eclipse.xtext.ui.shared.xtextNature
</nature>
<nature>
org.eclipse.jdt.core.javanature
</nature>
</natures>
</projectDescription>
kelmit/harrastukset.dat
View file @
fbc39155
...
...
@@ -8,3 +8,5 @@
8|4|Pitsin nypläys|1941|20
9|4|Pitsin nypläys|1908|19
10|4|Pitsin nypläys|1947|38
11|2|Pitsin nypläys|1984|46
12|2|Pitsin nypläys|1920|23
kerho.jar
View file @
fbc39155
No preview for this file type
src/fxKerho/KerhoGUIController.java
View file @
fbc39155
...
...
@@ -22,6 +22,7 @@ import javafx.fxml.FXML;
import
javafx.fxml.Initializable
;
import
javafx.scene.control.Label
;
import
javafx.scene.control.ScrollPane
;
import
javafx.scene.control.TableView
;
import
javafx.scene.control.TextArea
;
import
javafx.scene.control.TextField
;
import
javafx.scene.layout.GridPane
;
...
...
@@ -133,6 +134,7 @@ public class KerhoGUIController implements Initializable {
private
Jasen
jasenKohdalla
;
private
TextField
edits
[];
private
int
kentta
=
0
;
private
static
Harrastus
apuharrastus
=
new
Harrastus
();
/**
...
...
@@ -150,7 +152,20 @@ public class KerhoGUIController implements Initializable {
edit
.
setOnMouseClicked
(
e
->
{
if
(
e
.
getClickCount
()
>
1
)
muokkaa
(
getFieldId
(
e
.
getSource
(),
0
));
});
edit
.
focusedProperty
().
addListener
((
a
,
o
,
n
)
->
kentta
=
getFieldId
(
edit
,
kentta
));
}
// alustetaan harrastustaulukon otsikot
int
eka
=
apuharrastus
.
ekaKentta
();
int
lkm
=
apuharrastus
.
getKenttia
();
String
[]
headings
=
new
String
[
lkm
-
eka
];
for
(
int
i
=
0
,
k
=
eka
;
k
<
lkm
;
i
++,
k
++)
headings
[
i
]
=
apuharrastus
.
getKysymys
(
k
);
tableHarrastukset
.
initTable
(
headings
);
tableHarrastukset
.
setColumnResizePolicy
(
TableView
.
CONSTRAINED_RESIZE_POLICY
);
tableHarrastukset
.
setEditable
(
false
);
tableHarrastukset
.
setPlaceholder
(
new
Label
(
"Ei vielä harrastuksia"
));
// Tämä on vielä huono, ei automaattisesti muutu jos kenttiä muutetaan.
tableHarrastukset
.
setColumnSortOrderNumber
(
1
);
tableHarrastukset
.
setColumnSortOrderNumber
(
2
);
tableHarrastukset
.
setColumnWidth
(
1
,
60
);
}
...
...
@@ -305,8 +320,11 @@ public class KerhoGUIController implements Initializable {
private
void
naytaHarrastus
(
Harrastus
har
)
{
String
[]
rivi
=
har
.
toString
().
split
(
"\\|"
);
// TODO: huono ja tilapäinen ratkaisu
tableHarrastukset
.
add
(
har
,
rivi
[
2
],
rivi
[
3
],
rivi
[
4
]);
int
kenttia
=
har
.
getKenttia
();
String
[]
rivi
=
new
String
[
kenttia
-
har
.
ekaKentta
()];
for
(
int
i
=
0
,
k
=
har
.
ekaKentta
();
k
<
kenttia
;
i
++,
k
++)
rivi
[
i
]
=
har
.
anna
(
k
);
tableHarrastukset
.
add
(
har
,
rivi
);
}
...
...
src/fxKerho/kerho.css
View file @
fbc39155
.virhe
{
/* @SuppressWarning */
-fx-background-color
:
red
;
}
...
...
src/kerho/Harrastus.java
View file @
fbc39155
...
...
@@ -11,10 +11,10 @@ import static kanta.HetuTarkistus.rand;
* @author Vesa Lappalainen
* @version 1.0, 22.02.2003
*/
public
class
Harrastus
{
public
class
Harrastus
implements
Cloneable
{
private
int
tunnusNro
;
private
int
jasenNro
;
private
String
ala
;
private
String
ala
=
""
;
private
int
aloitusvuosi
;
private
int
tuntiaViikossa
;
...
...
@@ -38,6 +38,148 @@ public class Harrastus {
}
/**
* @return harrastukse kenttien lukumäärä
*/
public
int
getKenttia
()
{
return
5
;
}
/**
* @return ensimmäinen käyttäjän syötettävän kentän indeksi
*/
public
int
ekaKentta
()
{
return
2
;
}
/**
* @param k minkä kentän kysymys halutaan
* @return valitun kentän kysymysteksti
*/
public
String
getKysymys
(
int
k
)
{
switch
(
k
)
{
case
0
:
return
"id"
;
case
1
:
return
"jäsenId"
;
case
2
:
return
"ala"
;
case
3
:
return
"aloitusvuosi"
;
case
4
:
return
"h/vko"
;
default
:
return
"???"
;
}
}
/**
* @param k Minkä kentän sisältö halutaan
* @return valitun kentän sisältö
* @example
* <pre name="test">
* Harrastus har = new Harrastus();
* har.parse(" 2 | 10 | Kalastus | 1949 | 22 t ");
* har.anna(0) === "2";
* har.anna(1) === "10";
* har.anna(2) === "Kalastus";
* har.anna(3) === "1949";
* har.anna(4) === "22";
*
* </pre>
*/
public
String
anna
(
int
k
)
{
switch
(
k
)
{
case
0
:
return
""
+
tunnusNro
;
case
1
:
return
""
+
jasenNro
;
case
2
:
return
ala
;
case
3
:
return
""
+
aloitusvuosi
;
case
4
:
return
""
+
tuntiaViikossa
;
default
:
return
"???"
;
}
}
/**
* Asetetaan valitun kentän sisältö. Mikäli asettaminen onnistuu,
* palautetaan null, muutoin virheteksti.
* @param k minkä kentän sisältö asetetaan
* @param s asetettava sisältö merkkijonona
* @return null jos ok, muuten virheteksti
* @example
* <pre name="test">
* Harrastus har = new Harrastus();
* har.aseta(3,"kissa") === "Aloitusvuosi väärin jono = \"kissa\"";
* har.aseta(3,"1940") === null;
* har.aseta(4,"kissa") === "Viikkotunnit väärin jono = \"kissa\"";
* har.aseta(4,"20") === null;
*
* </pre>
*/
public
String
aseta
(
int
k
,
String
s
)
{
String
st
=
s
.
trim
();
StringBuffer
sb
=
new
StringBuffer
(
st
);
switch
(
k
)
{
case
0
:
setTunnusNro
(
Mjonot
.
erota
(
sb
,
'$'
,
getTunnusNro
()));
return
null
;
case
1
:
jasenNro
=
Mjonot
.
erota
(
sb
,
'$'
,
jasenNro
);
return
null
;
case
2
:
ala
=
st
;
return
null
;
case
3
:
try
{
aloitusvuosi
=
Mjonot
.
erotaEx
(
sb
,
'§'
,
aloitusvuosi
);
}
catch
(
NumberFormatException
ex
)
{
return
"Aloitusvuosi väärin "
+
ex
.
getMessage
();
}
return
null
;
case
4
:
try
{
tuntiaViikossa
=
Mjonot
.
erotaEx
(
sb
,
'§'
,
tuntiaViikossa
);
}
catch
(
NumberFormatException
ex
)
{
return
"Viikkotunnit väärin "
+
ex
.
getMessage
();
}
return
null
;
default
:
return
"Väärä kentän indeksi"
;
}
}
/**
* Tehdään identtinen klooni jäsenestä
* @return Object kloonattu jäsen
* @example
* <pre name="test">
* #THROWS CloneNotSupportedException
* Harrastus har = new Harrastus();
* har.parse(" 2 | 10 | Kalastus | 1949 | 22 t ");
* Harrastus kopio = har.clone();
* kopio.toString() === har.toString();
* har.parse(" 1 | 11 | Uinti | 1949 | 22 t ");
* kopio.toString().equals(har.toString()) === false;
* </pre>
*/
@Override
public
Harrastus
clone
()
throws
CloneNotSupportedException
{
return
(
Harrastus
)
super
.
clone
();
}
/**
* Apumetodi, jolla saadaan täytettyä testiarvot Harrastukselle.
* Aloitusvuosi arvotaan, jotta kahdella harrastuksella ei olisi
...
...
@@ -133,10 +275,17 @@ public class Harrastus {
*/
@Override
public
String
toString
()
{
return
""
+
getTunnusNro
()
+
"|"
+
jasenNro
+
"|"
+
ala
+
"|"
+
aloitusvuosi
+
"|"
+
tuntiaViikossa
;
}
StringBuffer
sb
=
new
StringBuffer
(
""
);
String
erotin
=
""
;
for
(
int
k
=
0
;
k
<
getKenttia
();
k
++)
{
sb
.
append
(
erotin
);
sb
.
append
(
anna
(
k
));
erotin
=
"|"
;
}
return
sb
.
toString
();
}
/**
* Selvitää harrastuksen tiedot | erotellusta merkkijonosta.
* Pitää huolen että seuraavaNro on suurempi kuin tuleva tunnusnro.
...
...
@@ -153,19 +302,16 @@ public class Harrastus {
* harrastus.parse(""+(n+20));
* harrastus.rekisteroi();
* harrastus.getTunnusNro() === n+20+1;
* harrastus.toString() === "" + (n+20+1) + "|10|
Kalastus
|1949|22";
* harrastus.toString() === "" + (n+20+1) + "|10||1949|22";
* </pre>
*/
public
void
parse
(
String
rivi
)
{
StringBuffer
sb
=
new
StringBuffer
(
rivi
);
setTunnusNro
(
Mjonot
.
erota
(
sb
,
'|'
,
getTunnusNro
()));
jasenNro
=
Mjonot
.
erota
(
sb
,
'|'
,
jasenNro
);
ala
=
Mjonot
.
erota
(
sb
,
'|'
,
ala
);
aloitusvuosi
=
Mjonot
.
erota
(
sb
,
'|'
,
aloitusvuosi
);
tuntiaViikossa
=
Mjonot
.
erota
(
sb
,
'|'
,
tuntiaViikossa
);
for
(
int
k
=
0
;
k
<
getKenttia
();
k
++)
aseta
(
k
,
Mjonot
.
erota
(
sb
,
'|'
));
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
obj
==
null
)
return
false
;
...
...
src/kerho/Kerho.java
View file @
fbc39155
...
...
@@ -13,7 +13,48 @@ import java.util.List;
* @version 1.1, 23.02.2003
* @version 1.2, 07.01.2008 / testit
* @version 1.3, 03.03.2013 / Harrastukset
*/
*
* Testien alustus
* @example
* <pre name="testJAVA">
* #import kerho.SailoException;
* private Kerho kerho;
* private Jasen aku1;
* private Jasen aku2;
* private int jid1;
* private int jid2;
* private Harrastus pitsi21;
* private Harrastus pitsi11;
* private Harrastus pitsi22;
* private Harrastus pitsi12;
* private Harrastus pitsi23;
*
* @SuppressWarnings("javadoc")
* public void alustaKerho() {
* kerho = new Kerho();
* aku1 = new Jasen(); aku1.vastaaAkuAnkka(); aku1.rekisteroi();
* aku2 = new Jasen(); aku2.vastaaAkuAnkka(); aku2.rekisteroi();
* jid1 = aku1.getTunnusNro();
* jid2 = aku2.getTunnusNro();
* pitsi21 = new Harrastus(jid2); pitsi21.vastaaPitsinNyplays(jid2);
* pitsi11 = new Harrastus(jid1); pitsi11.vastaaPitsinNyplays(jid1);
* pitsi22 = new Harrastus(jid2); pitsi22.vastaaPitsinNyplays(jid2);
* pitsi12 = new Harrastus(jid1); pitsi12.vastaaPitsinNyplays(jid1);
* pitsi23 = new Harrastus(jid2); pitsi23.vastaaPitsinNyplays(jid2);
* try {
* kerho.lisaa(aku1);
* kerho.lisaa(aku2);
* kerho.lisaa(pitsi21);
* kerho.lisaa(pitsi11);
* kerho.lisaa(pitsi22);
* kerho.lisaa(pitsi12);
* kerho.lisaa(pitsi23);
* } catch ( Exception e) {
* System.err.println(e.getMessage());
* }
* }
* </pre>
*/
public
class
Kerho
{
private
Jasenet
jasenet
=
new
Jasenet
();
private
Harrastukset
harrastukset
=
new
Harrastukset
();
...
...
@@ -35,18 +76,11 @@ public class Kerho {
* @throws SailoException jos lisäystä ei voida tehdä
* @example
* <pre name="test">
* #THROWS SailoException
* Kerho kerho = new Kerho();
* Jasen aku1 = new Jasen(), aku2 = new Jasen();
* kerho.lisaa(aku1);
* kerho.lisaa(aku2);
* kerho.lisaa(aku1);
* Collection<Jasen> loytyneet = kerho.etsi("",-1);
* Iterator<Jasen> it = loytyneet.iterator();
* it.next() === aku1;
* it.next() === aku2;
* it.next() === aku1;
* </pre>
* #THROWS SailoException
* alustaKerho();
* kerho.etsi("*",0).size() === 2;
* kerho.lisaa(aku1);
* kerho.etsi("*",0).size() === 3;
*/
public
void
lisaa
(
Jasen
jasen
)
throws
SailoException
{
jasenet
.
lisaa
(
jasen
);
...
...
@@ -59,6 +93,14 @@ public class Kerho {
* niin lisätään uutena jäsenenä.
* @param jasen lisätäävän jäsenen viite. Huom tietorakenne muuttuu omistajaksi
* @throws SailoException jos tietorakenne on jo täynnä
* @example
* <pre name="test">
* #THROWS SailoException
* alustaKerho();
* kerho.etsi("*",0).size() === 2;
* kerho.korvaaTaiLisaa(aku1);
* kerho.etsi("*",0).size() === 2;
* </pre>
*/
public
void
korvaaTaiLisaa
(
Jasen
jasen
)
throws
SailoException
{
jasenet
.
korvaaTaiLisaa
(
jasen
);
...
...
@@ -81,6 +123,12 @@ public class Kerho {
* @param k etsittävän kentän indeksi
* @return tietorakenteen löytyneistä jäsenistä
* @throws SailoException Jos jotakin menee väärin
* @example
* <pre name="test">
* #THROWS CloneNotSupportedException, SailoException
* alustaKerho();
* // TODO: tee testit kun etsi on korjattu
* </pre>
*/
public
Collection
<
Jasen
>
etsi
(
String
hakuehto
,
int
k
)
throws
SailoException
{
return
jasenet
.
etsi
(
hakuehto
,
k
);
...
...
@@ -97,16 +145,10 @@ public class Kerho {
* #THROWS SailoException
* #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);
* alustaKerho();
* Jasen aku3 = new Jasen();
* aku3.rekisteroi();
* kerho.lisaa(aku3);
*
* List<Harrastus> loytyneet;
* loytyneet = kerho.annaHarrastukset(aku3);
...
...
@@ -138,8 +180,7 @@ public class Kerho {
harrastukset
.
setTiedostonPerusNimi
(
hakemistonNimi
+
"harrastukset"
);
}
/**
* Lukee kerhon tiedot tiedostosta
* @param nimi jota käyteään lukemisessa
...
...
@@ -150,16 +191,6 @@ public class Kerho {
* #THROWS SailoException
* #import java.io.*;
* #import java.util.*;
*
* Kerho kerho = new Kerho();
*
* Jasen aku1 = new Jasen(); aku1.vastaaAkuAnkka(); aku1.rekisteroi();
* Jasen aku2 = new Jasen(); aku2.vastaaAkuAnkka(); aku2.rekisteroi();
* Harrastus pitsi21 = new Harrastus(); pitsi21.vastaaPitsinNyplays(aku2.getTunnusNro());
* Harrastus pitsi11 = new Harrastus(); pitsi11.vastaaPitsinNyplays(aku1.getTunnusNro());
* Harrastus pitsi22 = new Harrastus(); pitsi22.vastaaPitsinNyplays(aku2.getTunnusNro());
* Harrastus pitsi12 = new Harrastus(); pitsi12.vastaaPitsinNyplays(aku1.getTunnusNro());
* Harrastus pitsi23 = new Harrastus(); pitsi23.vastaaPitsinNyplays(aku2.getTunnusNro());
*
* String hakemisto = "testikelmit";
* File dir = new File(hakemisto);
...
...
@@ -168,15 +199,11 @@ public class Kerho {
* dir.mkdir();
* ftied.delete();
* fhtied.delete();
* kerho = new Kerho(); // tiedostoja ei ole, tulee poikkeus
* kerho.lueTiedostosta(hakemisto); #THROWS SailoException
* kerho.lisaa(aku1);
* kerho.lisaa(aku2);
* kerho.lisaa(pitsi21);
* kerho.lisaa(pitsi11);
* kerho.lisaa(pitsi22);
* kerho.lisaa(pitsi12);
* kerho.lisaa(pitsi23);
* kerho.tallenna();
* alustaKerho();
* kerho.setTiedosto(hakemisto); // nimi annettava koska uusi poisti sen
* kerho.tallenna();
* kerho = new Kerho();
* kerho.lueTiedostosta(hakemisto);
* Collection<Jasen> kaikki = kerho.etsi("",-1);
...
...
@@ -197,7 +224,7 @@ public class Kerho {
* ih.hasNext() === false;
* kerho.lisaa(aku2);
* kerho.lisaa(pitsi23);
* kerho.tallenna();
* kerho.tallenna();
// tekee molemmista .bak
* ftied.delete() === true;
* fhtied.delete() === true;
* File fbak = new File(hakemisto+"/nimet.bak");
...
...
src/test/AllTests.java
View file @
fbc39155
...
...
@@ -11,7 +11,6 @@ import org.junit.runners.Suite.SuiteClasses;
*/
@RunWith
(
Suite
.
class
)
@SuiteClasses
({
/*
kanta
.
test
.
HetuTarkistusTest
.
class
,
kanta
.
test
.
SisaltaaTarkistajaTest
.
class
,
kerho
.
test
.
JasenTest
.
class
,
...
...
@@ -19,7 +18,6 @@ import org.junit.runners.Suite.SuiteClasses;
kerho
.
test
.
HarrastusTest
.
class
,
kerho
.
test
.
HarrastuksetTest
.
class
,
kerho
.
test
.
KerhoTest
.
class
*/
})
public
class
AllTests
{
//
...
...