From 2b1857e535476da261512977f2123ae9f11a28e7 Mon Sep 17 00:00:00 2001 From: Sasa Jalander <sasa.jalander@gmail.com> Date: Sat, 1 Apr 2023 21:27:49 +0300 Subject: [PATCH] =?UTF-8?q?Teht=C3=A4v=C3=A4t=20tehty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/fi/utu/tech/ooj/exercise0/Kirja.java | 43 +++++++ .../utu/tech/ooj/exercise0/KirjaKokoelma.java | 80 ++++++++++++ .../utu/tech/ooj/exercise0/KirjanTiedot.java | 6 +- .../java/fi/utu/tech/ooj/exercise0/Main.java | 117 ++++++++++++------ 4 files changed, 204 insertions(+), 42 deletions(-) create mode 100644 src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java create mode 100644 src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java b/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java new file mode 100644 index 0000000..61b5d0d --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java @@ -0,0 +1,43 @@ +package fi.utu.tech.ooj.exercise0; + +public class Kirja { + private String kirjanNimi; + private String kirjailijanNimi; + private int julkaisuVuosi; + + public Kirja(String kirjanNimi, String kirjailijanNimi, int julkaisuVuosi) { + this.kirjanNimi = kirjanNimi; + this.kirjailijanNimi = kirjailijanNimi; + this.julkaisuVuosi = julkaisuVuosi; + } + + @Override + public String toString() { + return "Kirja: " + kirjanNimi + "\nKirjailija: " + kirjailijanNimi + + "\nJulkaisuvuosi: " + julkaisuVuosi; + } + + String getKirjanNimi() { + return this.kirjanNimi; + } + + String getKirjailijanNimi() { + return this.kirjailijanNimi; + } + + int getJulkaisuVuosi() { + return this.julkaisuVuosi; + } + + void setKirjanNimi(String uusiKirjanNimi) { + this.kirjanNimi = uusiKirjanNimi; + } + + void setKirjailijanNimi(String uusiKirjailijanNimi) { + this.kirjailijanNimi = uusiKirjailijanNimi; + } + + void setJulkaisuVuosi(int uusiJulkaisuVuosi) { + this.julkaisuVuosi = uusiJulkaisuVuosi; + } +} diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java new file mode 100644 index 0000000..b4cfa07 --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java @@ -0,0 +1,80 @@ +package fi.utu.tech.ooj.exercise0; + +import java.util.List; +import java.util.ArrayList; +import java.io.PrintStream; + +public class KirjaKokoelma { + private String kokoelmanOmistaja; + private ArrayList<Kirja> kirjaListaus; + + KirjaKokoelma(String kokoelmanOmistaja) { + this.kokoelmanOmistaja = kokoelmanOmistaja; + this.kirjaListaus = new ArrayList<Kirja>(); + } + + String getKokoelmanOmistaja() { + return this.kokoelmanOmistaja; + } + + ArrayList<Kirja> getKirjaListaus() { + return this.kirjaListaus; + } + + void setKokoelmanOmistaja(String uusiKokoelmanOmistaja) { + this.kokoelmanOmistaja = uusiKokoelmanOmistaja; + } + + void lisaaKirja(Kirja uusiKirja) { + kirjaListaus.add(uusiKirja); + } + + public void tulostaKokoelma(PrintStream out) { + if (kirjaListaus.size() < 1) { + out.println("Kokoelma on tyhjä"); + + } else { + for (Kirja elem : kirjaListaus) { + out.println(elem.toString()); + } + } + } + + public List<Kirja> etsiKirjat(String hakusana, KirjanTiedot kentta) throws IllegalArgumentException { + List<Kirja> out = new ArrayList<Kirja>(); + hakusana = hakusana.toUpperCase(); + + if ((hakusana == "") | (hakusana == null)) { + throw new IllegalArgumentException(); + } + + if (kentta.equals(KirjanTiedot.JULKAISUVUOSI)) { + for (Kirja elem : kirjaListaus) { + + String vuosi = "" + elem.getJulkaisuVuosi(); + if (vuosi.contains(hakusana)) { + out.add(elem); + } + } + + } else if (kentta.equals(KirjanTiedot.KIRJAILIJA)) { + for (Kirja elem : kirjaListaus) { + if (elem.getKirjailijanNimi().toUpperCase().contains(hakusana)) { + out.add(elem); + } + } + + } else if (kentta.equals(KirjanTiedot.NIMI)) { + for (Kirja elem : kirjaListaus) { + if (elem.getKirjanNimi().toUpperCase().contains(hakusana)) { + out.add(elem); + } + } + + } else { + throw new IllegalArgumentException(); + } + + return out; + } +} diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java b/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java index 6a6422f..26daa13 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java +++ b/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java @@ -4,7 +4,7 @@ package fi.utu.tech.ooj.exercise0; * Literaaliluokka, joka listaa kirjaa liittyvät tietokentät */ public enum KirjanTiedot { - NIMI, - KIRJAILIJA, - JULKAISUVUOSI + NIMI, + KIRJAILIJA, + JULKAISUVUOSI } diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/Main.java b/src/main/java/fi/utu/tech/ooj/exercise0/Main.java index 783d3d0..bea4d3a 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise0/Main.java +++ b/src/main/java/fi/utu/tech/ooj/exercise0/Main.java @@ -8,43 +8,82 @@ import java.util.Scanner; public class Main { - /* - * Kirjoita tähän tehtävän 4 ratkaisu. Rutiinin signatuuria ei saa muuttaa. Aloita tehtävä poistamalla - * kommenttimerkit alla olevan rutiinin rungon ympäriltä. - */ - /*public static ArrayList<String> kysyTietoja(String[] kysyttavat, String lopetusmerkki) { - - }*/ - - - /* - * Kirjoita tähän tehtävän 5 ratkaisu. Rutiinin signatuuria ei saa muuttaa. Aloita tehtävä poistamalla - * kommenttimerkit alla olevan rutiinin rungon ympäriltä. - */ - - /*public static KirjaKokoelma luoKokoelma(String lopetusmerkki) { - - }*/ - - /** - * Main class. - * - * @param args Command line arguments - */ - public static void main(String[] args) { - /* - * Testin jälkeen alla olevan rivin voi joko kommentoida tai poistaa. - */ - System.out.println("*** Harjoitustyöpohja käynnistyy ***"); - - //Luo ensin uusi KirjaKokoelma olio, Käytä tehtävän 5 rutiinia - - - //Sen jälkeen tulosta kokoelma näyttöön käyttämällä tehtävän 6 rutiinia - - - //Lopuksi hae jokin kirja kokoelmasta käyttäen tehtävän 7 rutiinia - //Tulosta hakutulos. Sen voit tehdä suoraan main-metodissa. - - } + public static ArrayList<String> kysyTietoja(String[] kysyttavat, String lopetusmerkki) { + + ArrayList<String> out = new ArrayList<String>(); + String input; + Scanner scan = new Scanner(System.in); + + for (String kysymys : kysyttavat) { + System.out.print(kysymys + ": "); + input = scan.nextLine(); + + if (input.equals(lopetusmerkki)) { + break; + + } else { + out.add(input); + } + } + + /* Scannerin sulkeminen sulkee myös System.in ja ohjelma heittää erroria + * kun sitä yritetään avata uudestaan. Jätetään sulkematta sitten... + */ + // scan.close(); + return out; + } + + + public static KirjaKokoelma luoKokoelma(String lopetusmerkki) { + + KirjaKokoelma out = new KirjaKokoelma("tuntematon"); + String[] enumTiedot = new String[3]; + ArrayList<String> input = new ArrayList<String>(); + + int i = 0; + for (KirjanTiedot tieto : KirjanTiedot.values()) { + enumTiedot[i] = "" + tieto; + i++; + } + + while(true) { + input.clear(); + input = kysyTietoja(enumTiedot, lopetusmerkki); + + if (input.size() < 3) { + return out; + + } else { + out.lisaaKirja(new Kirja(input.get(0), input.get(1), Integer.parseInt(input.get(2)))); + } + } + } + + /* + * Main class. + * + * @param args Command line arguments + */ + public static void main(String[] args) { + /* + * Testin jälkeen alla olevan rivin voi joko kommentoida tai poistaa. + */ + System.out.println("*** Harjoitustyöpohja käynnistyy ***"); + + // Luo ensin uusi KirjaKokoelma olio, Käytä tehtävän 5 rutiinia + KirjaKokoelma kokoelma = luoKokoelma("lopetus"); + + // Sen jälkeen tulosta kokoelma näyttöön käyttämällä tehtävän 6 rutiinia + System.out.println("\nKerätty kokoelma:"); + kokoelma.tulostaKokoelma(System.out); + + // Lopuksi hae jokin kirja kokoelmasta käyttäen tehtävän 7 rutiinia + List<Kirja> hakutulokset = kokoelma.etsiKirjat("sas", KirjanTiedot.KIRJAILIJA); + + // Tulosta hakutulos. Sen voit tehdä suoraan main-metodissa. + System.out.println("\nHakutulokset:"); + for (Kirja elem : hakutulokset) { + System.out.println(elem.toString()); + } + } } -- GitLab