From 79e54197f45109c5cfcff20333d52279b2cca2db Mon Sep 17 00:00:00 2001 From: Oiva Mickelsson <oomick@utu.fi> Date: Tue, 28 Mar 2023 14:43:52 +0300 Subject: [PATCH] =?UTF-8?q?Toteutettiin=20tehv=C3=A4nannot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/fi/utu/tech/ooj/exercise0/Kirja.java | 41 +++++++++++ .../utu/tech/ooj/exercise0/KirjaKokoelma.java | 68 +++++++++++++++++++ .../java/fi/utu/tech/ooj/exercise0/Main.java | 60 ++++++++++++---- 3 files changed, 155 insertions(+), 14 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..598fba0 --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java @@ -0,0 +1,41 @@ +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; + } + + public String getKirjanNimi() { + return kirjanNimi; + } + + public void setKirjanNimi(String kirjanNimi) { + this.kirjanNimi = kirjanNimi; + } + + public String getKirjailijanNimi() { + return kirjailijanNimi; + } + + public void setKirjailijanNimi(String kirjailijanNimi) { + this.kirjailijanNimi = kirjailijanNimi; + } + + public int getJulkaisuVuosi() { + return julkaisuVuosi; + } + + public void setJulkaisuVuosi(int julkaisuVuosi) { + this.julkaisuVuosi = julkaisuVuosi; + } + @Override + public String toString() { + return "Kirja: " + getKirjanNimi() + "\nKirjailija: " + getKirjailijanNimi() + "\nJulkaisuvuosi: " + getJulkaisuVuosi() + "\n"; + } +} 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..ee12a08 --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java @@ -0,0 +1,68 @@ +package fi.utu.tech.ooj.exercise0; + + +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; + +public class KirjaKokoelma { + private String kokoelmanOmistaja; + private ArrayList<Kirja> kirjaListaus; + + public KirjaKokoelma(String kokoelmanOmistaja, ArrayList<Kirja> kirjaListaus) { + this.kokoelmanOmistaja = kokoelmanOmistaja; + this.kirjaListaus = kirjaListaus; + + } + + public void tulostaKokoelma(PrintStream out) { + if (getKirjaListaus().size() == 0) { + out.println("Kokoelma on tyhjä."); + } else { + StringBuilder kirjat = new StringBuilder(); + for (Kirja kirja : getKirjaListaus()) { + kirjat.append(kirja.toString()); + } + out.println(kirjat); + } + } + public List<Kirja> etsiKirjat(String hakusana, KirjanTiedot kentta) throws IllegalArgumentException { + if (kentta == null || hakusana == null || hakusana.length() == 0) { + throw new IllegalArgumentException("Tarkista, että olet kirjoittanut hakusanan ja valinnut kentän kirjanTiedot-luokasta!"); + } + List<Kirja> kirjat = new ArrayList<>(); + for (Kirja kirja : getKirjaListaus()) { + switch (kentta) { + case NIMI: + if (kirja.getKirjanNimi().contains(hakusana)) { + kirjat.add(kirja); + } + case KIRJAILIJA: + if (kirja.getKirjailijanNimi().contains(hakusana)) { + kirjat.add(kirja); + } + case JULKAISUVUOSI: + if (String.valueOf(kirja.getJulkaisuVuosi()).contains(hakusana)) { + kirjat.add(kirja); + } + } + } + return kirjat; + } + + public void lisaaKirja(Kirja kirja) { + kirjaListaus.add(kirja); + } + + public String getKokoelmanOmistaja() { + return kokoelmanOmistaja; + } + + public void setKokoelmanOmistaja(String kokoelmanOmistaja) { + this.kokoelmanOmistaja = kokoelmanOmistaja; + } + + public ArrayList<Kirja> getKirjaListaus() { + return kirjaListaus; + } +} 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..a22c690 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise0/Main.java +++ b/src/main/java/fi/utu/tech/ooj/exercise0/Main.java @@ -1,9 +1,6 @@ package fi.utu.tech.ooj.exercise0; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; +import java.util.*; public class Main { @@ -12,9 +9,20 @@ 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) { - - }*/ + public static ArrayList<String> kysyTietoja(String[] kysyttavat, String lopetusmerkki) { + ArrayList<String> vastaukset = new ArrayList<>(); + Scanner lukija = new Scanner(System.in); + for (String kysyttava : kysyttavat) { + System.out.print(kysyttava + ": "); + String vastaus = lukija.nextLine(); + if (vastaus.equals(lopetusmerkki)) { + return null; + } else { + vastaukset.add(vastaus); + } + } + return vastaukset; + } /* @@ -22,9 +30,29 @@ public class Main { * kommenttimerkit alla olevan rutiinin rungon ympäriltä. */ - /*public static KirjaKokoelma luoKokoelma(String lopetusmerkki) { - }*/ + public static KirjaKokoelma luoKokoelma(String lopetusmerkki) { + try { + KirjaKokoelma kokoelma = new KirjaKokoelma(kysyTietoja(new String[]{"Kokoelman omistaja"}, lopetusmerkki).toString(), new ArrayList<>()); + while (true) { + ArrayList<String> vastaukset = kysyTietoja(new String[]{"kirjan nimi", "kirjailijan nimi", "julkaisuvuosi"}, lopetusmerkki); + do { + if (vastaukset == null) { + return kokoelma; + } + try { + kokoelma.lisaaKirja(new Kirja(vastaukset.get(0), vastaukset.get(1), Integer.valueOf(vastaukset.get(2)))); + break; + } catch (NumberFormatException e) { + System.out.println("Varmista, että kirjoitit vuoden kokonaislukuina!"); + vastaukset.set(2, kysyTietoja(new String[]{"Julkaisuvuosi"}, lopetusmerkki).get(0)); + } + } while (true); + } + } catch (NullPointerException e) { + return new KirjaKokoelma(null, new ArrayList<>()); + } + } /** * Main class. @@ -35,16 +63,20 @@ public class Main { /* * Testin jälkeen alla olevan rivin voi joko kommentoida tai poistaa. */ - System.out.println("*** Harjoitustyöpohja käynnistyy ***"); + //System.out.println("*** Harjoitustyöpohja käynnistyy ***"); //Luo ensin uusi KirjaKokoelma olio, Käytä tehtävän 5 rutiinia - + KirjaKokoelma kokoelma = luoKokoelma("lopeta"); //Sen jälkeen tulosta kokoelma näyttöön käyttämällä tehtävän 6 rutiinia - - + System.out.println("Kirjakokoelmasi:"); + kokoelma.tulostaKokoelma(System.out); //Lopuksi hae jokin kirja kokoelmasta käyttäen tehtävän 7 rutiinia + List<Kirja> haku = kokoelma.etsiKirjat("1915", KirjanTiedot.JULKAISUVUOSI); //Tulosta hakutulos. Sen voit tehdä suoraan main-metodissa. - + System.out.println("Hakutulos:"); + for (Kirja kirja : haku) { + System.out.println(kirja); + } } } -- GitLab