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