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 0000000000000000000000000000000000000000..c3ec76d33b3bf331405cb4723bbbb9a4468fe5e8 --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java @@ -0,0 +1,46 @@ +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: " + kirjanNimi + "\n" + + "Kirjailija: " + kirjailijanNimi + "\n" + + "Julkaisuvuosi: " + julkaisuVuosi; + } +} 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 0000000000000000000000000000000000000000..ba5db5cb3018d1ee3848a11372cfc81ec9b1536b --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java @@ -0,0 +1,78 @@ +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) + { + this.kokoelmanOmistaja = kokoelmanOmistaja; + kirjaListaus = new ArrayList<>(); + } + + public String getKokoelmanOmistaja() { + return kokoelmanOmistaja; + } + + public void setKokoelmanOmistaja(String kokoelmanOmistaja) { + this.kokoelmanOmistaja = kokoelmanOmistaja; + } + + public ArrayList<Kirja> getKirjaListaus() { + return kirjaListaus; + } + + public void lisaaKirja(Kirja kirja) + { + kirjaListaus.add(kirja); + } + + public void tulostaKokoelma(PrintStream out) + { + if (kirjaListaus.isEmpty()) + { + out.println("Kokoelma tyhjä."); + return; + } + for (Kirja kirja : kirjaListaus) + { + out.println(kirja.toString()); + } + } + + public List<Kirja> etsiKirjat(String hakusana, KirjanTiedot kentta) throws IllegalArgumentException + { + if (hakusana == null || hakusana.isBlank() || kentta == null) + { + throw new IllegalArgumentException(); + } + List<Kirja> tulokset = new ArrayList<>(); + for (Kirja kirja : kirjaListaus) + { + if (kentta == KirjanTiedot.NIMI) { + if (kirja.getKirjanNimi().contains(hakusana)) + { + tulokset.add(kirja); + } + } + if (kentta == KirjanTiedot.KIRJAILIJA) { + if (kirja.getKirjailijanNimi().contains(hakusana)) + { + tulokset.add(kirja); + } + } + if (kentta == KirjanTiedot.JULKAISUVUOSI) { + if (("" + kirja.getJulkaisuVuosi()).contains(hakusana)) + { + tulokset.add(kirja); + } + } + } + return tulokset; + } +} 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 783d3d0cf21955651017c6638f3eb43bf992a6b9..c9467bc0ea4761eccbb92b1b6401f48de3456734 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,23 @@ 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) + { + Scanner lukija = new Scanner(System.in); + ArrayList<String> vastaukset = new ArrayList<>(); + for (String kysyttava : kysyttavat) + { + System.out.println(kysyttava); + String vastaus = lukija.nextLine(); + if (vastaus.equals(lopetusmerkki)) + { + return vastaukset; + } + vastaukset.add(vastaus); + System.out.println(); + } + return vastaukset; + } /* @@ -22,9 +33,30 @@ public class Main { * kommenttimerkit alla olevan rutiinin rungon ympäriltä. */ - /*public static KirjaKokoelma luoKokoelma(String lopetusmerkki) { - - }*/ + public static KirjaKokoelma luoKokoelma(String lopetusmerkki) + { + Scanner lukija = new Scanner(System.in); + System.out.print("Kokoelman omistaja: "); + String vastaus = lukija.nextLine(); + KirjaKokoelma kokoelma = new KirjaKokoelma(vastaus); + + while (true) + { + String[] kysymykset = {"Kirjan nimi: ", "Kirjailijan nimi: ", "Julkaisu vuosi: "}; + ArrayList<String> tiedot = kysyTietoja(kysymykset, lopetusmerkki); + if(tiedot.size() != 3) + { + break; + } + String kirjanNimi = tiedot.get(0); + String kirjailijanNimi = tiedot.get(1); + int julkaisuVuosi = Integer.valueOf(tiedot.get(2)); + + kokoelma.lisaaKirja(new Kirja(kirjanNimi, kirjailijanNimi, julkaisuVuosi)); + System.out.println("Kirja lisätty."); + } + return kokoelma; + } /** * Main class. @@ -35,16 +67,32 @@ 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 - + kokoelma.tulostaKokoelma(System.out); //Lopuksi hae jokin kirja kokoelmasta käyttäen tehtävän 7 rutiinia //Tulosta hakutulos. Sen voit tehdä suoraan main-metodissa. + Scanner lukija = new Scanner(System.in); + KirjanTiedot kentta; + //Valitaan mihin tietokenttään haku kohdistetaan, oletuksena nimi. + System.out.print("Etsi nimen(1), kirjailijan(2) tai julkaisuvuoden(3) perusteella: "); + String vastaus = lukija.nextLine(); + kentta = switch (vastaus) { + case "1" -> KirjanTiedot.NIMI; + case "2" -> KirjanTiedot.KIRJAILIJA; + case "3" -> KirjanTiedot.JULKAISUVUOSI; + default -> KirjanTiedot.NIMI; + }; + + System.out.print("Hakusana: "); + String hakusana = lukija.nextLine(); + System.out.println(kokoelma.etsiKirjat(hakusana, kentta)); + } }