From 68d9712063e9c33af43eed1decea0bc28ffad3ec Mon Sep 17 00:00:00 2001 From: aichinos <aichinos@jyu.fi> Date: Wed, 12 Mar 2025 10:26:18 +0200 Subject: [PATCH] nyt toString toimii --- mmkurssit/src/mmkurssit/Kurssi.java | 117 ++++++++++++++----- mmkurssit/src/mmkurssit/Kurssit.java | 60 +++++++++- mmkurssit/src/mmkurssit/test/KurssiTest.java | 21 +++- 3 files changed, 162 insertions(+), 36 deletions(-) diff --git a/mmkurssit/src/mmkurssit/Kurssi.java b/mmkurssit/src/mmkurssit/Kurssi.java index f7d94ae..51754fd 100644 --- a/mmkurssit/src/mmkurssit/Kurssi.java +++ b/mmkurssit/src/mmkurssit/Kurssi.java @@ -1,7 +1,9 @@ package mmkurssit; -import java.io.OutputStream; -import apumetodit.RandomNumero; +//import java.io.OutputStream; +//import apumetodit.RandomNumero; +import fi.jyu.mit.ohj2.Mjonot; + import java.io.PrintStream; /** @@ -31,12 +33,14 @@ public class Kurssi { /** + * TODO myöhemmin: ota käyttöön! + * * Tulostetaan kurssin tiedot * @param os teitovirta johon tulostetaan */ - public void tulosta(OutputStream os) { - //tulsota(new PrintStream(os)); - } + //public void tulosta(OutputStream os) { + // //tulsota(new PrintStream(os)); + //} /** @@ -52,7 +56,7 @@ public class Kurssi { /** - * Palauttaa kurssin tunnusnumeron. + * Palauttaa kurssin ID * @return kurssin tunnusnumero */ public int getID() { @@ -60,22 +64,6 @@ public class Kurssi { } - /** - * @return kurssin nimi - */ - public String getNimi() { - return this.nimi; - } - - - /** - * @return kurssin opettajan sukunimi + etunimi - */ - public String openNimet() { - return this.opeSukunimi + " " + this.opeEtunimi; - } - - /** * Antaa kurssille seuraavan tunnusnumeron * @example @@ -87,13 +75,40 @@ public class Kurssi { * ohjelmointi.rekisteroi(); * int n1 = saksa.getID(); * int n2 = ohjelmointi.getID(); - * n1 === 1; - * n2 === 2; + * n2 === n1+1; * </pre> */ public void rekisteroi() { - this.kurssiID = nextID; - nextID++; + //this.kurssiID = nextID; + //nextID++; + this.setID(nextID); + } + + + /** + * Asettaa kurssin ID ja samalla varmista, että + * seuraava numero on aina suurempi kuin tähän mennessä suurin. + * @param nro asetettava kurssi ID + */ + public void setID(int nro) { // TODO: ristiriita rekisteroi()-metodin kanssa?????? + this.kurssiID = nro; + if (this.kurssiID >= nextID) nextID = this.kurssiID+1; + } + + + /** + * @return kurssin nimi + */ + public String getNimi() { + return this.nimi; + } + + + /** + * @return kurssin opettajan sukunimi + etunimi + */ + public String openNimet() { + return this.opeSukunimi + " " + this.opeEtunimi; } @@ -102,13 +117,59 @@ public class Kurssi { * TODO: POISTA, kun kaikki toimii!! * */ - void tayta() { - this.nimi = "Esimerkkikurssi: " + RandomNumero.rand(1,100); + public void tayta() { + this.nimi = "Esimerkkikurssi"; //+ RandomNumero.rand(1,100); this.opeEtunimi = "Vesa"; this.opeSukunimi = "Kokko"; } + + /** + * Tilanne: 11.3. yritin luennon videon kanssa yritin tehdä + * tiedoston tallentaminen, lukeminen, Kurssi.toString() metodi, parse(), setID() + * --ei toimi. Ennen sitä testi oli ok. + * + * !!HUOM + * Tämä metodi tarvitsee parantaa, nyt ei ole hyvin käyttökelpoinen. + * toString-metodin testaamista varten tehty + * syötetään kurssi-oiliolle tiedot + * @param rivi tiedot string-muotona + */ + public void parse(String rivi) { + + StringBuilder tiedot = new StringBuilder(rivi); + setID(Mjonot.erota(tiedot, '|', getID())); + nimi = Mjonot.erota(tiedot, '|', nimi); + opeSukunimi = Mjonot.erota(tiedot, '|', opeSukunimi); + opeEtunimi = Mjonot.erota(tiedot, '|', opeEtunimi); + } + + + /** + * TODO ??? Testi ei mene läpi, Kurssi-olion alustaminen ei onnistu ???? + * + * Palauttaa kurssin tiedot Stringina, jonka voi tallentaa tiedostoon + * @return kurssin tiedot String-muotona + * @example + * <pre name="test"> + * Kurssi hollanti = new Kurssi(); + * hollanti.parse("1|Esimerkkikurssi|Kokko |Vesa"); + * hollanti.toString() === "1|Esimerkkikurssi|Kokko Vesa"; + * </pre> + */ + @Override + public String toString() { + + return ""+ + this.getID()+"|"+ + this.nimi+"|"+ + this.openNimet(); + + //TODO myöhemmin mieti: voisi olla suku + etu, kumpi olisi parempi muoto tallentaa jatkossa + } + + //MAIN======================================================== /** diff --git a/mmkurssit/src/mmkurssit/Kurssit.java b/mmkurssit/src/mmkurssit/Kurssit.java index cc30c47..117e30e 100644 --- a/mmkurssit/src/mmkurssit/Kurssit.java +++ b/mmkurssit/src/mmkurssit/Kurssit.java @@ -1,5 +1,12 @@ package mmkurssit; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FileInputStream; +import java.io.PrintStream; +import java.util.Scanner; + /** * Kopioi CRC-kortin tietoa tähän * @author aichinos @@ -10,15 +17,16 @@ public class Kurssit { private Kurssi[] kurssit; private int kpl = 0; + private static String tiedostonNimi = ""; - private static final int maxKpl = 5;//montako kurssia yhdelle taulukolle + private static final int MAX_KPL = 5;//montako kurssia yhdelle taulukolle /** * Alustetaan kurssit, johon säilytetään rekisteroiityjen kurssien viitteet */ public Kurssit() { - this.kurssit = new Kurssi[maxKpl]; + this.kurssit = new Kurssi[MAX_KPL]; } @@ -58,6 +66,54 @@ public class Kurssit { } + /** + * HUOM!! Tee loppuun asti!!! 12.3. + * Lukee kurssi-lista tiedostosta. + * @param hakemisto tiedoston hakemisto + * @throws SailoException jos lukeminen ei onnistu + */ + public void lueTiedostosta(String hakemisto) throws SailoException { + tiedostonNimi = hakemisto + "/kurssit.dat"; + + File ftied = new File(tiedostonNimi); + + try (Scanner fileIn = new Scanner(new FileInputStream(ftied))){ + while ( fileIn.hasNext() ) { + String s = fileIn.nextLine(); + if( s == null || "".equals(s) || s.charAt(0) == ';') { + continue; + } + Kurssi kurssi = new Kurssi(); + kurssi.parse(s);//parse pitää muokata!! + lisaa(kurssi); + } + } catch (FileNotFoundException e) { + throw new SailoException("Ei saa luettua tiedostoa" + tiedostonNimi); + } + } + + + /** + * Tallentaa kurssi-data tiedostoon. + * @param hakemisto mihin tallennetaan + * @throws SailoException jos tallennus ei onnistu + */ + public void tallenna(String hakemisto) throws SailoException{ + //TODO: hakemiston luominen tähän + File ftied = new File(hakemisto + "/kurssit.dat"); + try (PrintStream fileOut = new PrintStream(new FileOutputStream(ftied, true))){ + // true = uusi text appendoidaan vanhan tekstin perälle + for(int i=0; i<this.getKpl(); i++) { + Kurssi kurssi = this.anna(i); + fileOut.println(kurssi.toString()); + } + } catch (FileNotFoundException e) { + throw new SailoException("Tiedosto " + ftied.getAbsolutePath()); + } + + } + + /** * Palauttaa rekisteroityjen kurssien kpl * @return kurssien lukuäärä diff --git a/mmkurssit/src/mmkurssit/test/KurssiTest.java b/mmkurssit/src/mmkurssit/test/KurssiTest.java index 00ce85a..3fdea14 100644 --- a/mmkurssit/src/mmkurssit/test/KurssiTest.java +++ b/mmkurssit/src/mmkurssit/test/KurssiTest.java @@ -7,7 +7,7 @@ import mmkurssit.*; /** * Test class made by ComTest - * @version 2025.02.25 20:00:59 // Generated by ComTest + * @version 2025.03.12 10:15:28 // Generated by ComTest * */ @SuppressWarnings("all") @@ -16,17 +16,26 @@ public class KurssiTest { // Generated by ComTest BEGIN - /** testRekisteroi67 */ + /** testRekisteroi97 */ @Test - public void testRekisteroi67() { // Kurssi: 67 + public void testRekisteroi97() { // Kurssi: 97 Kurssi saksa = new Kurssi(); - assertEquals("From: Kurssi line: 69", 0, saksa.getID()); + assertEquals("From: Kurssi line: 99", 0, saksa.getID()); saksa.rekisteroi(); Kurssi ohjelmointi = new Kurssi(); ohjelmointi.rekisteroi(); int n1 = saksa.getID(); int n2 = ohjelmointi.getID(); - assertEquals("From: Kurssi line: 75", 1, n1); - assertEquals("From: Kurssi line: 76", 2, n2); + assertEquals("From: Kurssi line: 105", n1+1, n2); + } // Generated by ComTest END + + + // Generated by ComTest BEGIN + /** testToString156 */ + @Test + public void testToString156() { // Kurssi: 156 + Kurssi hollanti = new Kurssi(); + hollanti.parse("1|Esimerkkikurssi|Kokko |Vesa"); + assertEquals("From: Kurssi line: 159", "1|Esimerkkikurssi|Kokko Vesa", hollanti.toString()); } // Generated by ComTest END } \ No newline at end of file -- GitLab