From ecb2e6b32cddc12f10f073f3c8a74cc4198bc541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A4sp=C3=A4=20Vili=20Valtteri?= <vili.v.laspa@student.jyu.fi> Date: Sat, 29 Mar 2025 23:53:00 +0200 Subject: [PATCH] tulosten tallentaminen tiedostoon alku --- puntti/batman/tulokset.dat | 24 ++++++ puntti/src/puntti/Tulokset.java | 105 ++++++++++++++++++++++- puntti/src/puntti/Tulos.java | 55 ++++++++++++ puntti/src/puntti/test/TuloksetTest.java | 61 ++++++++++--- puntti/src/puntti/test/TulosTest.java | 36 ++++++-- 5 files changed, 265 insertions(+), 16 deletions(-) create mode 100644 puntti/batman/tulokset.dat diff --git a/puntti/batman/tulokset.dat b/puntti/batman/tulokset.dat new file mode 100644 index 0000000..783a484 --- /dev/null +++ b/puntti/batman/tulokset.dat @@ -0,0 +1,24 @@ +1|1|38|23.09.2015 +2|2|92|14.02.2014 +3|2|76|23.11.2003 +4|2|28|15.10.2001 +5|1|97|18.10.2011 +6|2|45|14.05.2007 +7|2|89|09.07.2022 +8|2|91|13.11.2019 +9|1|97|22.10.2021 +10|2|91|12.01.2012 +11|2|95|20.04.2020 +12|2|44|18.06.2005 +13|1|31|22.01.2004 +14|2|89|05.04.2022 +15|2|95|21.10.2001 +16|2|73|26.11.2021 +17|1|68|23.11.2004 +18|2|36|21.03.2006 +19|2|59|14.02.2013 +20|2|86|24.06.2025 +21|1|36|24.09.2020 +22|2|77|15.06.2009 +23|2|72|03.06.2021 +24|2|77|08.09.2009 diff --git a/puntti/src/puntti/Tulokset.java b/puntti/src/puntti/Tulokset.java index e41f673..ac739c8 100644 --- a/puntti/src/puntti/Tulokset.java +++ b/puntti/src/puntti/Tulokset.java @@ -1,8 +1,15 @@ package puntti; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.PrintStream; import java.util.ArrayList; import java.util.Collection; +import java.util.Iterator; import java.util.List; +import java.util.Scanner; /** * |------------------------------------------------------------------------| @@ -19,7 +26,7 @@ import java.util.List; * @version 11.3.2025 * */ -public class Tulokset { +public class Tulokset implements Iterable<Tulos>{ private Collection<Tulos> alkiot = new ArrayList<Tulos>(); @@ -74,8 +81,87 @@ public class Tulokset { } + @Override + public Iterator<Tulos> iterator() { + return alkiot.iterator(); + } + /** + * Lukee liikkeen tulokset tiedostosta + * @param hakemisto tiedoston hakemisto + * @throws SailoException jos lukeminen ei onnistu + * @example + * <pre name="test"> + * #THROWS SailoException + * #import java.io.File; + * Tulokset tuulokset = new Tulokset(); + * Tulos penkki1 = new Tulos(); penkki1.taytaPenkkiTulos(2); + * Tulos penkki2 = new Tulos(); penkki2.taytaPenkkiTulos(1); + * Tulos penkki3 = new Tulos(); penkki3.taytaPenkkiTulos(2); + * Tulos penkki4 = new Tulos(); penkki4.taytaPenkkiTulos(1); + * Tulos penkki5 = new Tulos(); penkki5.taytaPenkkiTulos(2); + * String kayttajaNimi = "testibatman"; + * File tiedosto = new File(kayttajaNimi + "/tulokset.dat"); + * tiedosto.delete(); + * tuulokset.lueTiedostosta(kayttajaNimi); #THROWS SailoException + * tuulokset.lisaa(penkki1); + * tuulokset.lisaa(penkki2); + * tuulokset.lisaa(penkki3); + * tuulokset.lisaa(penkki4); + * tuulokset.lisaa(penkki5); + * tuulokset.tallenna(kayttajaNimi); + * tuulokset = new Tulokset(); + * tuulokset.lueTiedostosta(kayttajaNimi); + * Iterator<Tulos> i = tuulokset.iterator(); + * i.next().toString() === penkki1.toString(); + * i.next().toString() === penkki2.toString(); + * i.next().toString() === penkki3.toString(); + * i.next().toString() === penkki4.toString(); + * i.next().toString() === penkki5.toString(); + * i.hasNext() === false; + * tuulokset.lisaa(penkki5); + * tuulokset.tallenna(kayttajaNimi); + * tiedosto.delete() === true; + * </pre> + */ + public void lueTiedostosta(String hakemisto) throws SailoException{ + String tiedNimi = hakemisto +"/tulokset.dat"; + File tiedosto = new File(tiedNimi); + + try (Scanner fi = new Scanner(new FileInputStream(tiedosto))){ + while(fi.hasNext()) { + String s = fi.nextLine().trim(); + if ("".equals(s) || s.charAt(0) == ';') continue; + Tulos tulos = new Tulos(); + tulos.parse(s); + lisaa(tulos); + } + }catch (FileNotFoundException e ) { + throw new SailoException("Ei saa luettua tiedostoa " + tiedNimi); + } + + } + + + + /** + * @param hakemisto mihin hakemistoon tehdään uusi tiedosto + * @throws SailoException jos tallentaminen ei onnistu + */ + public void tallenna(String hakemisto) throws SailoException { + File tiedosto = new File(hakemisto + "/tulokset.dat"); + try (PrintStream fo = new PrintStream(new FileOutputStream(tiedosto, false))){ + for (var tulo: alkiot) { + fo.println(tulo.toString()); + } + + }catch (FileNotFoundException e) { + + throw new SailoException("Tiedosto "+ tiedosto.getAbsolutePath() + " ei löydy"); + } + } + /** * Testiohjelma tulokset luokalle * @param args ei kaytossa @@ -83,14 +169,25 @@ public class Tulokset { public static void main(String[] args) { Tulokset tuulokset = new Tulokset(); + + try { + tuulokset.lueTiedostosta("batman"); + } catch (SailoException ex ) { + System.err.println(ex.getMessage()); + } + Tulos penkki1 = new Tulos(); penkki1.taytaPenkkiTulos(1); + penkki1.lisaaTulos(); Tulos penkki2 = new Tulos(); penkki2.taytaPenkkiTulos(2); + penkki2.lisaaTulos(); Tulos penkki3 = new Tulos(); penkki3.taytaPenkkiTulos(2); + penkki3.lisaaTulos(); Tulos penkki4 = new Tulos(); penkki4.taytaPenkkiTulos(2); + penkki4.lisaaTulos(); tuulokset.lisaa(penkki1); tuulokset.lisaa(penkki2); @@ -105,6 +202,12 @@ public class Tulokset { System.out.println(tulo.getLid() + " "); tulo.tulosta(System.out); } + + try { + tuulokset.tallenna("batman"); + } catch (SailoException e ) { + e.printStackTrace(); + } } diff --git a/puntti/src/puntti/Tulos.java b/puntti/src/puntti/Tulos.java index c3988fe..fe32077 100644 --- a/puntti/src/puntti/Tulos.java +++ b/puntti/src/puntti/Tulos.java @@ -2,6 +2,7 @@ package puntti; import java.io.PrintStream; +import fi.jyu.mit.ohj2.Mjonot; import testaus.ErilaisetArvonnat; /** @@ -119,6 +120,60 @@ public class Tulos { + /** + * Asettaa id ja varmistaa että + * seuraava numero on suurempi kuin tähän mennessä suurin. + * @param numero asetettava id + */ + private void setId(int numero) { + id = numero; + if (id >= seuraavaId) seuraavaId = id + 1; + } + + + /** + * erottelee tiedostosta luetulta rivitä tiedot + * @param rivi josta erotellaan liikkeen tuloksen tiedot + * @example + * <pre name="test"> + * Tulos tulos = new Tulos(); + * tulos.parse("2| 7 | 120 | 20.12.2025"); + * tulos.getLid() === 7; + * tulos.toString() === "2|7|120|20.12.2025"; + * + * tulos.lisaaTulos(); + * int n = tulos.getId(); + * tulos.parse(""+(n+20)); + * tulos.lisaaTulos(); + * tulos.getId() === n+20+1; + * + * </pre> + */ + public void parse(String rivi) { + var sb = new StringBuilder(rivi); + setId(Mjonot.erota(sb, '|', getId())); + lid = Mjonot.erota(sb, '|', lid); + tulos = Mjonot.erota(sb, '|', tulos); + paivamaara = Mjonot.erota(sb, '|', paivamaara); + } + + + + /** + * palauttaa liikkeen tiedot merkkijonona jonka voi tallentaa tiedostoon. + * @return tulos tolppaeroteltuna merkkijonona + * @example + * <pre name="test"> + * Tulos tulos = new Tulos(); + * tulos.parse("2| 7 | 120 | 20.12.2025"); + * tulos.toString() === "2|7|120|20.12.2025"; + * </pre> + */ + @Override + public String toString() { + return "" + getId() + "|" + getLid() + "|" + tulos + "|" + paivamaara; + + } /** * Testiohjelma Tulokselle diff --git a/puntti/src/puntti/test/TuloksetTest.java b/puntti/src/puntti/test/TuloksetTest.java index d763296..f2455e5 100644 --- a/puntti/src/puntti/test/TuloksetTest.java +++ b/puntti/src/puntti/test/TuloksetTest.java @@ -1,6 +1,7 @@ package puntti.test; // Generated by ComTest BEGIN import java.util.*; +import java.io.File; import static org.junit.Assert.*; import org.junit.*; import puntti.*; @@ -8,18 +9,17 @@ import puntti.*; /** * Test class made by ComTest - * @version 2025.03.12 14:08:50 // Generated by ComTest + * @version 2025.03.29 23:50:32 // Generated by ComTest * */ @SuppressWarnings("all") public class TuloksetTest { - // Generated by ComTest BEGIN - /** testAnnaTulokset46 */ + /** testAnnaTulokset53 */ @Test - public void testAnnaTulokset46() { // Tulokset: 46 + public void testAnnaTulokset53() { // Tulokset: 53 Tulokset tuulokset = new Tulokset(); Tulos penkki1 = new Tulos(2); tuulokset.lisaa(penkki1); Tulos penkki2 = new Tulos(1); tuulokset.lisaa(penkki2); @@ -29,13 +29,54 @@ public class TuloksetTest { Tulos penkki6 = new Tulos(4); tuulokset.lisaa(penkki6); List<Tulos> loytyneet; loytyneet = tuulokset.annaTulokset(3); - assertEquals("From: Tulokset line: 59", 0, loytyneet.size()); + assertEquals("From: Tulokset line: 66", 0, loytyneet.size()); loytyneet = tuulokset.annaTulokset(1); - assertEquals("From: Tulokset line: 61", 2, loytyneet.size()); - assertEquals("From: Tulokset line: 62", true, loytyneet.get(0) == penkki2); - assertEquals("From: Tulokset line: 63", true, loytyneet.get(1) == penkki4); + assertEquals("From: Tulokset line: 68", 2, loytyneet.size()); + assertEquals("From: Tulokset line: 69", true, loytyneet.get(0) == penkki2); + assertEquals("From: Tulokset line: 70", true, loytyneet.get(1) == penkki4); loytyneet = tuulokset.annaTulokset(4); - assertEquals("From: Tulokset line: 65", 1, loytyneet.size()); - assertEquals("From: Tulokset line: 66", true, loytyneet.get(0) == penkki6); + assertEquals("From: Tulokset line: 72", 1, loytyneet.size()); + assertEquals("From: Tulokset line: 73", true, loytyneet.get(0) == penkki6); + } // Generated by ComTest END + + + // Generated by ComTest BEGIN + /** + * testLueTiedostosta95 + * @throws SailoException when error + */ + @Test + public void testLueTiedostosta95() throws SailoException { // Tulokset: 95 + Tulokset tuulokset = new Tulokset(); + Tulos penkki1 = new Tulos(); penkki1.taytaPenkkiTulos(2); + Tulos penkki2 = new Tulos(); penkki2.taytaPenkkiTulos(1); + Tulos penkki3 = new Tulos(); penkki3.taytaPenkkiTulos(2); + Tulos penkki4 = new Tulos(); penkki4.taytaPenkkiTulos(1); + Tulos penkki5 = new Tulos(); penkki5.taytaPenkkiTulos(2); + String kayttajaNimi = "testibatman"; + File tiedosto = new File(kayttajaNimi + "/tulokset.dat"); + tiedosto.delete(); + try { + tuulokset.lueTiedostosta(kayttajaNimi); + fail("Tulokset: 107 Did not throw SailoException"); + } catch(SailoException _e_){ _e_.getMessage(); } + tuulokset.lisaa(penkki1); + tuulokset.lisaa(penkki2); + tuulokset.lisaa(penkki3); + tuulokset.lisaa(penkki4); + tuulokset.lisaa(penkki5); + tuulokset.tallenna(kayttajaNimi); + tuulokset = new Tulokset(); + tuulokset.lueTiedostosta(kayttajaNimi); + Iterator<Tulos> i = tuulokset.iterator(); + assertEquals("From: Tulokset line: 117", penkki1.toString(), i.next().toString()); + assertEquals("From: Tulokset line: 118", penkki2.toString(), i.next().toString()); + assertEquals("From: Tulokset line: 119", penkki3.toString(), i.next().toString()); + assertEquals("From: Tulokset line: 120", penkki4.toString(), i.next().toString()); + assertEquals("From: Tulokset line: 121", penkki5.toString(), i.next().toString()); + assertEquals("From: Tulokset line: 122", false, i.hasNext()); + tuulokset.lisaa(penkki5); + tuulokset.tallenna(kayttajaNimi); + assertEquals("From: Tulokset line: 125", true, tiedosto.delete()); } // Generated by ComTest END } \ No newline at end of file diff --git a/puntti/src/puntti/test/TulosTest.java b/puntti/src/puntti/test/TulosTest.java index 054afff..836b5f2 100644 --- a/puntti/src/puntti/test/TulosTest.java +++ b/puntti/src/puntti/test/TulosTest.java @@ -7,7 +7,7 @@ import puntti.*; /** * Test class made by ComTest - * @version 2025.03.12 12:08:14 // Generated by ComTest + * @version 2025.03.29 23:52:24 // Generated by ComTest * */ @SuppressWarnings("all") @@ -16,16 +16,42 @@ public class TulosTest { // Generated by ComTest BEGIN - /** testLisaaTulos82 */ + /** testLisaaTulos83 */ @Test - public void testLisaaTulos82() { // Tulos: 82 + public void testLisaaTulos83() { // Tulos: 83 Tulos penkki = new Tulos(); - assertEquals("From: Tulos line: 84", 0, penkki.getId()); + assertEquals("From: Tulos line: 85", 0, penkki.getId()); penkki.lisaaTulos(); Tulos penkki2 = new Tulos(); penkki2.lisaaTulos(); int n1 = penkki.getId(); int n2 = penkki2.getId(); - assertEquals("From: Tulos line: 90", n2-1, n1); + assertEquals("From: Tulos line: 91", n2-1, n1); + } // Generated by ComTest END + + + // Generated by ComTest BEGIN + /** testParse138 */ + @Test + public void testParse138() { // Tulos: 138 + Tulos tulos = new Tulos(); + tulos.parse("2| 7 | 120 | 20.12.2025"); + assertEquals("From: Tulos line: 141", 7, tulos.getLid()); + assertEquals("From: Tulos line: 142", "2|7|120|20.12.2025", tulos.toString()); + tulos.lisaaTulos(); + int n = tulos.getId(); + tulos.parse(""+(n+20)); + tulos.lisaaTulos(); + assertEquals("From: Tulos line: 148", n+20+1, tulos.getId()); + } // Generated by ComTest END + + + // Generated by ComTest BEGIN + /** testToString166 */ + @Test + public void testToString166() { // Tulos: 166 + Tulos tulos = new Tulos(); + tulos.parse("2| 7 | 120 | 20.12.2025"); + assertEquals("From: Tulos line: 169", "2|7|120|20.12.2025", tulos.toString()); } // Generated by ComTest END } \ No newline at end of file -- GitLab