diff --git a/Ohj2HT/src/Luokat/Kalenteri.java b/Ohj2HT/src/Luokat/Kalenteri.java index ac0cf8f531bc11ba78f09912b771b3afc1074f61..2e833a684b117aa4da595954069f410024179b94 100644 --- a/Ohj2HT/src/Luokat/Kalenteri.java +++ b/Ohj2HT/src/Luokat/Kalenteri.java @@ -111,6 +111,7 @@ public class Kalenteri { paivitaTulkit(); getKalaLaskuri().kasvata(getLajiTulkki().getIdFromValue(s.getLaji())); getVieheLaskuri().kasvata(getVieheTulkki().getIdFromValue(s.getViehe().tyyppi())); + this.saaliit.lisaa(s); } getReissut().lisaaListaan(r); diff --git a/Ohj2HT/src/Luokat/Reissu.java b/Ohj2HT/src/Luokat/Reissu.java index dc0346084cdaaff887ee797a32a607e3d0f3eb89..58651c4fae2b09e04ebd2638b6ce7c57b84380db 100644 --- a/Ohj2HT/src/Luokat/Reissu.java +++ b/Ohj2HT/src/Luokat/Reissu.java @@ -32,6 +32,12 @@ public class Reissu { this.saaliit = saaliit; this.poistetaanko = false; } + public void asetaKentat(LocalDate Pvm, String sijainti, String keli) { + this.Pvm = Pvm; + this.sijainti = sijainti; + this.keli = keli; + } + /** * get metodit palauttavat halutun asian halutussa muodossa * @@ -176,7 +182,7 @@ public class Reissu { int tagi = Integer.parseInt(t[0]); this.reissunTag = tagi; if (reissunTag > SeuraavanReissunTag) { - this.reissunTag = SeuraavanReissunTag +1; + SeuraavanReissunTag = this.reissunTag + 1; } else { SeuraavanReissunTag++; diff --git a/Ohj2HT/src/Luokat/Saaliit.java b/Ohj2HT/src/Luokat/Saaliit.java index 29034946995d25b9dec86632f485cb39c4b63cf6..ace228d90c49635d8f013ec25b73470b16b8375a 100644 --- a/Ohj2HT/src/Luokat/Saaliit.java +++ b/Ohj2HT/src/Luokat/Saaliit.java @@ -1,16 +1,13 @@ package Luokat; -import fi.jyu.mit.fxgui.Dialogs; - import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class Saaliit { private Saalis[] saaliit; private int koko; private int index = 0; - + private List<Integer> poistettavatId = new ArrayList<>(); /** * muodostaja tyjhään taulukkoon @@ -99,12 +96,18 @@ public class Saaliit { saaliit.lisaa(s3); } - public void poista(int saaliinId) { + public void merkkaaPoistettavaksi(int saaliinId) { int poistettava = binHaku(saaliinId); if (poistettava == -1) { return; } - saaliit[poistettava] = null; + poistettavatId.add(poistettava); + } + + public void poista() { + for (int i : poistettavatId) { + saaliit[i] = null; + } } public int binHaku(int key) { @@ -124,4 +127,12 @@ public class Saaliit { } return -1; } + + public boolean loytyyko(Saalis saalis) { + int indeksi = binHaku(saalis.getSaaliinId()); + if (indeksi == -1) { + return false; + } + return true; + } } diff --git a/Ohj2HT/src/Luokat/SaaliitJaReissu.java b/Ohj2HT/src/Luokat/SaaliitJaReissu.java new file mode 100644 index 0000000000000000000000000000000000000000..df4da9cdf4fd3dea2fc7a43eea64427bd2bec3da --- /dev/null +++ b/Ohj2HT/src/Luokat/SaaliitJaReissu.java @@ -0,0 +1,4 @@ +package Luokat; + +public record SaaliitJaReissu(Saaliit saaliit, Reissu reissu) { +} diff --git a/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java b/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java index bab86739766334a77b7dfb4570d4d06e94465e6f..dfa68e27180cede6139d3e564dfa55a22616a532 100644 --- a/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java +++ b/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java @@ -11,7 +11,6 @@ import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Label; import javafx.scene.control.TextField; -import javafx.scene.input.KeyEvent; import java.awt.Desktop; import java.io.IOException; @@ -155,13 +154,10 @@ public class KalenteriGUIController implements Initializable { return; } } - if ( reissumaara.get() - aluksi > 0){ - if (kalenteri.tallennaTietyt()) { + if (kalenteri.tallennaTietyt()) { Dialogs.showMessageDialog("Tallennus onnistui!"); aluksi = reissumaara.get(); - } } - } @@ -192,13 +188,11 @@ public class KalenteriGUIController implements Initializable { if (reissunNimi == null || reissunNimi.trim().isEmpty()) return; Reissu valittuReissu = this.reissutLista.getSelectedObject(); - + int saaliitLkm = valittuReissu.getSaaliit().size(); ModalController.showModal( KalenteriMain.class.getResource("/fxReissu/ReissuGUIView.fxml"), - "Reissu " + this.reissutLista.getSelectedText(),null, valittuReissu); + "Reissu " + this.reissutLista.getSelectedText(),null, new SaaliitJaReissu(kalenteri.getSaaliit(),valittuReissu)); - - // Poistaminen if (valittuReissu.getpoistetaanko()) { onkoPoistettu = true; @@ -207,8 +201,9 @@ public class KalenteriGUIController implements Initializable { for (Saalis s: valittuReissu.getSaaliit()){ kalenteri.getKalaLaskuri().vahenna(kalenteri.getLajiTulkki().getIdFromValue(s.getLaji())); kalenteri.getVieheLaskuri().vahenna(kalenteri.getVieheTulkki().getIdFromValue(s.getViehe().tyyppi())); - kalenteri.getSaaliit().poista(s.getSaaliinId()); + kalenteri.getSaaliit().merkkaaPoistettavaksi(s.getSaaliinId()); } + kalenteri.getSaaliit().poista(); kalenteri.getReissut().removeReissu(); System.out.println("Jälkeen " + kalenteri.getReissut().getReissut().size()); List<Reissu> r = kalenteri.getReissut().getReissut(); @@ -219,7 +214,13 @@ public class KalenteriGUIController implements Initializable { kirjoitaReissut(); tekstienPaivitys(); } - + return; + } + if (saaliitLkm < valittuReissu.getSaaliit().size()) { + for (int i = saaliitLkm; i < valittuReissu.getSaaliit().size(); i++) { + kalenteri.getKalaLaskuri().kasvata(kalenteri.getLajiTulkki().getIdFromValue(valittuReissu.getSaaliit().get(i).getLaji())); + } + tekstienPaivitys(); } diff --git a/Ohj2HT/src/fxLisaaReissu/LisaaReissuGUIController.java b/Ohj2HT/src/fxLisaaReissu/LisaaReissuGUIController.java index 617a821c4422bf22db31eed8690ad28a260d909f..d80953c5d01b2aeafdb49630a4aeb78b1274ab2b 100644 --- a/Ohj2HT/src/fxLisaaReissu/LisaaReissuGUIController.java +++ b/Ohj2HT/src/fxLisaaReissu/LisaaReissuGUIController.java @@ -75,9 +75,7 @@ public class LisaaReissuGUIController implements Initializable, ModalControllerI ModalController.showModal(KalenteriMain.class.getResource("/fxKaljoja/KalojaGUIView.fxml"), "Lisää saalis",null,saaliit); - for (Saalis saalis : saaliit) { - kale.getSaaliit().lisaa(saalis); - } + liitaKaloja(); } diff --git a/Ohj2HT/src/fxReissu/ReissuGUIController.java b/Ohj2HT/src/fxReissu/ReissuGUIController.java index e8aa77f25a5c300834b124e56e72430aee595df3..177b6c6081984878eb8121d308059eaf457c8032 100644 --- a/Ohj2HT/src/fxReissu/ReissuGUIController.java +++ b/Ohj2HT/src/fxReissu/ReissuGUIController.java @@ -4,6 +4,8 @@ import java.time.LocalDate; import java.util.List; import Luokat.Reissu; +import Luokat.Saaliit; +import Luokat.SaaliitJaReissu; import Luokat.Saalis; import fi.jyu.mit.fxgui.Dialogs; import fi.jyu.mit.fxgui.ModalController; @@ -21,10 +23,10 @@ import javafx.scene.control.TextField; * @version 29.1.2025 * Controller tietyn reissun näyttämisikkunaa varten */ -public class ReissuGUIController implements ModalControllerInterface<Reissu> { +public class ReissuGUIController implements ModalControllerInterface<SaaliitJaReissu> { private String label; private Reissu r; - + private Saaliit s; @FXML private Label reissuLabel; @@ -44,34 +46,63 @@ public class ReissuGUIController implements ModalControllerInterface<Reissu> { + @FXML public void handleLisaa() { + lisaaSaaliita(); + } + + @FXML + public void handleJatka() { + jatka(); + ModalController.closeStage(jatkaNappi); + } + + private void jatka() { + LocalDate date = Reissu.sToDate(ReissuPvm.getText()); + if (date == null) { + Dialogs.showMessageDialog("Virheellinen päivämäärämuoto: " + ReissuPvm.getText() + "\nSyötä muodossa pp-kk-vvvv."); + return; + } + String uusPvm = ReissuPvm.getText(); + r.asetaKentat(Reissu.sToDate(uusPvm), ReissuSijainti.getText(), ReissuKeli.getText()); + for (Saalis saalis : r.getSaaliit()) { + if (!s.loytyyko(saalis)) { + s.lisaa(saalis); + saalis.setReissunTagi(r.getTag()); + } + } + + } + + @FXML + void handlePoista() { + r.poistetaan(); + + ModalController.closeStage(ReissuSijainti); + } + @Override - public Reissu getResult() { + public SaaliitJaReissu getResult() { String pvm = ReissuPvm.getText(); - - return new Reissu(Reissu.sToDate(pvm),ReissuSijainti.getText(), ReissuKeli.getText(), List.of(), false); + return new SaaliitJaReissu(s,r); } @Override - public void setDefault(Reissu reissu) { - if (reissu == null) return; - - this.r = reissu; - - ReissuPvm.appendText(reissu.getPvmString()); - ReissuKeli.appendText(reissu.getKeli()); - ReissuSijainti.appendText(reissu.getSijainti()); - + public void setDefault(SaaliitJaReissu sr) { + if (sr == null) return; + + this.r = sr.reissu(); + this.s = sr.saaliit(); + ReissuPvm.appendText(r.getPvmString()); + ReissuKeli.appendText(r.getKeli()); + ReissuSijainti.appendText(r.getSijainti()); + ReissunSaalis.clear(); - for(Saalis s : reissu.getSaaliit()){ + for(Saalis s : r.getSaaliit()){ Platform.runLater(()->{ReissunSaalis.appendText( "Sait " + s.getLaji() + " " + s.getKoko()+ ", vieheellä " + s.getViehe().vari()+ " " + s.getViehe().tyyppi());ReissunSaalis.appendText("\n");}); } } - @FXML public void handleLisaa() { - lisaaSaaliita(); - } - private void lisaaSaaliita() { LocalDate date = Reissu.sToDate(ReissuPvm.getText()); if (date == null) { @@ -96,21 +127,12 @@ public class ReissuGUIController implements ModalControllerInterface<Reissu> { @FXML public void initialize() { - + } @Override public void handleShown() { } - @FXML - void handleJatka() { - ModalController.closeStage(jatkaNappi); - } - @FXML - void handlePoista() { - r.poistetaan(); - - ModalController.closeStage(ReissuSijainti); - } + } \ No newline at end of file diff --git a/Ohj2HT/src/fxReissu/ReissuGUIView.fxml b/Ohj2HT/src/fxReissu/ReissuGUIView.fxml index d2386a8bf55b4d79465fdbc5f2a0e4c9265cfdb8..75d46f204b13f736ebdaa08b1f8e5ac6711995ee 100644 --- a/Ohj2HT/src/fxReissu/ReissuGUIView.fxml +++ b/Ohj2HT/src/fxReissu/ReissuGUIView.fxml @@ -25,17 +25,17 @@ <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> </rowConstraints> <children> - <TextField fx:id="ReissuPvm" editable="false" promptText="Syötä pvm" GridPane.columnIndex="1"> + <TextField fx:id="ReissuPvm" promptText="Syötä pvm" GridPane.columnIndex="1"> <GridPane.margin> <Insets right="5.0" /> </GridPane.margin> </TextField> - <TextField fx:id="ReissuSijainti" editable="false" promptText="Syötä sijainti" GridPane.columnIndex="1" GridPane.rowIndex="1"> + <TextField fx:id="ReissuSijainti" promptText="Syötä sijainti" GridPane.columnIndex="1" GridPane.rowIndex="1"> <GridPane.margin> <Insets right="5.0" /> </GridPane.margin> </TextField> - <TextField fx:id="ReissuKeli" editable="false" promptText="Syötä keli" GridPane.columnIndex="1" GridPane.rowIndex="2"> + <TextField fx:id="ReissuKeli" promptText="Syötä keli" GridPane.columnIndex="1" GridPane.rowIndex="2"> <GridPane.margin> <Insets right="5.0" /> </GridPane.margin> diff --git a/kalaLaskuri.dat b/kalaLaskuri.dat index 0be46e80c22e9d9b071247619529bc36592e1595..7449d4e51ad4d9cacea7b7afe0285ea96f6e7ad8 100644 --- a/kalaLaskuri.dat +++ b/kalaLaskuri.dat @@ -1,6 +1,6 @@ -1|2 +1|3 2|2 3|1 4|1 5|1 -6|0 +6|1 diff --git a/reissut.dat b/reissut.dat index 03715b05fe873521a5ca9dc5b5e11e85c3641ab3..d51a09f74f81a68dada4091fe19caee4a9d761e5 100644 --- a/reissut.dat +++ b/reissut.dat @@ -1,5 +1,5 @@ 1|17.11.2025|Vuontee|aurinkoinen 2|16.11.2025|Tikkakoski|sateinen -3|11.05.2025|Laukaa|aurinkoinen -5|19.03.2025|Rovaniemi|Aurinkoinen -7|12.03.2024|Laukaa|Pilvinen +3|18.05.2025|Laukaa|aurinkoinen +7|30.03.2025|Rovaniemi|aurinkoinen +6|12.03.2024|Laukaa|Pilvinen diff --git a/saaliit.dat b/saaliit.dat index 1c6ca5c50e3815a1e1772717cd5773f2fef5d6d3..9c94054d2ff30934c5f02d1ea0612fa0b632dc42 100644 --- a/saaliit.dat +++ b/saaliit.dat @@ -2,8 +2,8 @@ 3|2|1|2|1|hopea 4|4|1|3|1|vihreä 6|2|1|1|1|hopea -7|5|1|5|1|kupari 8|3|2|6|1|hopeinen -9|1|2|7|1|sininen -10|3|3|7|2|keltainen 11|1|3|1|3|sininen +12|6|2|7|2|sininen +13|5|1|3|1|sininen +14|1|3|6|2|punainen diff --git a/vieheLaskuri.dat b/vieheLaskuri.dat index 6d7f15d982010b7689b01b205fc7b9976d375fe6..edf95a18857b2e60d3d3dd14559a7d4f145a61ce 100644 --- a/vieheLaskuri.dat +++ b/vieheLaskuri.dat @@ -1,3 +1,3 @@ -1|5 -2|1 +1|4 +2|2 3|1