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..d46bc6b3fb32fbf485d2976574654f920eb85506 --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java @@ -0,0 +1,40 @@ +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 void setKirjanNimi(String kirjanNimi) { + this.kirjanNimi = kirjanNimi; + } + + public String getKirjanNimi() { + return this.kirjanNimi; + } + + public void setKirjailijanNimi(String kirjailijanNimi) { + this.kirjailijanNimi = kirjailijanNimi; + } + + public String getKirjailijanNimi() { + return this.kirjailijanNimi; + } + + public void setJulkaisuVuosi(int julkaisuVuosi) { + this.julkaisuVuosi = julkaisuVuosi; + } + + public int getJulkaisuVuosi() { + return this.julkaisuVuosi; + } + + @Override + public String toString() { + return "Kirja: " + this.kirjanNimi + "\nKirjailija: " + this.kirjailijanNimi + "\nJulkaisuvuosi: " + this.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..059271e003ce9fa321ef4e2bb5201e96b0aaf11e --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java @@ -0,0 +1,73 @@ +package fi.utu.tech.ooj.exercise0; +import java.util.ArrayList; +import java.util.List; +import java.io.PrintStream; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +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 setKokoelmanOmistaja(String kokoelmanOmistaja) { + this.kokoelmanOmistaja = kokoelmanOmistaja; + } + + public String getKokoelmanOmistaja() { + return this.kokoelmanOmistaja; + } + + public void lisaaKirja(Kirja kirja) { + this.kirjaListaus.add(kirja); + } + + public ArrayList<Kirja> getKirjaListaus() { + return this.kirjaListaus; + } + + public void tulostaKokoelma(PrintStream out) { + if(this.kirjaListaus.isEmpty()) { + out.println("Kirjalistaus on tyhjä!\n"); + } else { + for(Kirja kirja : this.kirjaListaus) { + out.println(kirja + "\n"); + } + } + } + public List<Kirja> etsiKirjat(String hakusana, KirjanTiedot kentta) throws IllegalArgumentException { + if((hakusana == null) || (hakusana == "")) { + throw new IllegalArgumentException(); + } + Pattern pattern = Pattern.compile(hakusana); + String tieto; + Matcher matcher; + List<Kirja> kirjat = new ArrayList<>(); + for(Kirja kirja : this.kirjaListaus) { + switch(kentta) { + case NIMI: + tieto = kirja.getKirjanNimi(); + matcher = pattern.matcher(tieto); + break; + case KIRJAILIJA: + tieto = kirja.getKirjailijanNimi(); + matcher = pattern.matcher(tieto); + break; + default: + tieto = String.valueOf(kirja.getJulkaisuVuosi()); + matcher = pattern.matcher(String.valueOf(tieto)); + break; + } + if(tieto == null) { + throw new IllegalArgumentException(); + } + if(matcher.find()) { + kirjat.add(kirja); + } + } + return kirjat; + } +} diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java.orig b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java.orig new file mode 100644 index 0000000000000000000000000000000000000000..7ca8cc75713bcef574d5ac1ac333cb95e2ed716b --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java.orig @@ -0,0 +1,70 @@ +package fi.utu.tech.ooj.exercise0; +import java.util.ArrayList; +import java.util.List; +import java.io.PrintStream; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +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 setKokoelmanOmistaja(String kokoelmanOmistaja) { + this.kokoelmanOmistaja = kokoelmanOmistaja; + } + + public String getKokoelmanOmistaja() { + return this.kokoelmanOmistaja; + } + + public void lisaaKirja(Kirja kirja) { + this.kirjaListaus.add(kirja); + } + + public ArrayList<Kirja> getKirjaListaus() { + return this.kirjaListaus; + } + + public void tulostaKokoelma(PrintStream out) { + if(this.kirjaListaus.isEmpty()) { + out.println("Kirjalistaus on tyhjä!"); + } else { + for(Kirja kirja : this.kirjaListaus) { + out.print(kirja); + } + } + } + public List<Kirja> etsiKirjat(String hakusana, KirjanTiedot kentta) throws IllegalArgumentException { + if((hakusana == null) || (hakusana == "")) { + throw new IllegalArgumentException(); + } + Pattern pattern = Pattern.compile(hakusana); + String tieto; + Matcher matcher; + List<Kirja> kirjat = new ArrayList<>(); + for(Kirja kirja : this.kirjaListaus) { + switch (kentta) { + case NIMI: + tieto = kirja.getKirjanNimi(); + matcher = pattern.matcher(tieto); + case KIRJAILIJA: + tieto = kirja.getKirjailijanNimi(); + matcher = pattern.matcher(tieto); + case JULKAISUVUOSI: + tieto = String.valueOf(kirja.getJulkaisuVuosi()); + matcher = pattern.matcher(String.valueOf(tieto)); + } + if(tieto == null) { + throw new IllegalArgumentException(); + } + if(matcher.find()) { + kirjat.add(kirja); + } + } + return kirjat; + } +} 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 6a6422f2c2b63d1777eb2d42074eb08d6da56d3c..8b2ecdd12565b69fbe5efdbf9bce5d0a8ce179a0 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java +++ b/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java @@ -1,8 +1,8 @@ package fi.utu.tech.ooj.exercise0; /* - * Literaaliluokka, joka listaa kirjaa liittyvät tietokentät - */ + Literaaliluokka, joka listaa kirjaa liittyvät tietokentät +*/ public enum KirjanTiedot { NIMI, KIRJAILIJA, diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java.orig b/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java.orig new file mode 100644 index 0000000000000000000000000000000000000000..6a6422f2c2b63d1777eb2d42074eb08d6da56d3c --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java.orig @@ -0,0 +1,10 @@ +package fi.utu.tech.ooj.exercise0; + +/* + * Literaaliluokka, joka listaa kirjaa liittyvät tietokentät + */ +public enum KirjanTiedot { + 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 783d3d0cf21955651017c6638f3eb43bf992a6b9..8b6b172ec7d55c1f5c320a17bc61d285608d2a83 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise0/Main.java +++ b/src/main/java/fi/utu/tech/ooj/exercise0/Main.java @@ -1,7 +1,6 @@ package fi.utu.tech.ooj.exercise0; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Scanner; @@ -9,42 +8,114 @@ 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 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) { + ArrayList<String> vastaukset = new ArrayList<>(); + Scanner s = new Scanner(System.in); + for(String kysymys : kysyttavat) { + System.out.print("Anna " + kysymys + ": "); + String vastaus = s.nextLine(); + if(vastaus.equals(lopetusmerkki)) { + return vastaukset; + } + vastaukset.add(vastaus); + } + return vastaukset; + } /* - * 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) { - - }*/ + 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) { + ArrayList<String> kirjanTiedot = new ArrayList<>(); + ArrayList<Kirja> kirjat = new ArrayList<>(); + Scanner s = new Scanner(System.in); + int lukum = 0; + int vuosi; + System.out.println("Kyselyn voit lopettaa merkillä: " + lopetusmerkki); + System.out.print("Anna kirja kokoelman omistajan nimi: "); + String omistaja = s.nextLine(); + if(omistaja.equals(lopetusmerkki)) { + return new KirjaKokoelma("", new ArrayList<>()); + } + System.out.println("\nSeuraavaksi lisätään kokoelmaan kirjoja. Kirjojen lisäys loppuu kun annat merkin: " + lopetusmerkki + "\n"); + while(true) { + System.out.println(++lukum + ". kirja"); + kirjanTiedot = kysyTietoja(new String[] {"kirjan nimi", "kirjailijan nimi", "julkaisuvuosi"}, lopetusmerkki); + if(kirjanTiedot.size() == 3) { + try { + vuosi = Integer.valueOf(kirjanTiedot.get(2)); + } catch(IllegalArgumentException e) { + --lukum; + System.out.println("Julkaisuvuosi vuodessa saa olla vain kokonaislukuja.\n"); + continue; + } + kirjat.add(new Kirja(kirjanTiedot.get(0), kirjanTiedot.get(1), vuosi)); + System.out.println("Kirja lisätty!:"); + System.out.println(kirjat.get(kirjat.size() - 1).toString() + "\n"); + } else { + break; + } + } + System.out.println("Kokoelma luotu!\nKirjojen lukumäärä: " + (lukum - 1) + "\n"); + return new KirjaKokoelma(omistaja, kirjat); + } /** - * Main class. - * - * @param args Command line arguments - */ + Main class. + + @param args Command line arguments + */ public static void main(String[] args) { + final String lopetusmerkki = "LOPETA"; /* - * Testin jälkeen alla olevan rivin voi joko kommentoida tai poistaa. - */ - System.out.println("*** Harjoitustyöpohja käynnistyy ***"); - + Testin jälkeen alla olevan rivin voi joko kommentoida tai poistaa. + */ //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. - + System.out.println("*** Harjoitustyöpohja käynnistyy ***"); + Scanner s; + KirjanTiedot KirjanTieto; + KirjaKokoelma kirjaKokoelma = luoKokoelma(lopetusmerkki); + KirjaKokoelma loydettyKirjaKokoelma; + List<Kirja> loydetytKirjat = new ArrayList<>(); + kirjaKokoelma.tulostaKokoelma(System.out); + s = new Scanner(System.in); + while(true) { + System.out.println("Voit lopettaa hakumekanismin merkillä: " + lopetusmerkki); + System.out.println("Kentät:\nNIMI\nKIRJAILIJA\nJULKAISUVUOSI"); + System.out.print("Anna kenttä: "); + String kentta = s.nextLine(); + if(kentta.equals(lopetusmerkki)) { + break; + } + try { + KirjanTieto = KirjanTiedot.valueOf(kentta); + System.out.print("\nAnna regex: "); + String regex = s.nextLine(); + if(regex.equals(lopetusmerkki)) { + break; + } + loydetytKirjat = kirjaKokoelma.etsiKirjat(regex, KirjanTieto); + loydettyKirjaKokoelma = new KirjaKokoelma("EI_OMISTAJAA", new ArrayList<>(loydetytKirjat)); + if(loydettyKirjaKokoelma.getKirjaListaus().size() != 0) { + System.out.println("Löytyi tasan " + loydettyKirjaKokoelma.getKirjaListaus().size() + " kirjaa.\n"); + } + loydettyKirjaKokoelma.tulostaKokoelma(System.out); + } catch(IllegalArgumentException e) { + System.out.println("VÄÄRÄ KENTTÄ!\n"); + continue; + } + System.out.print("Aloitetaanpas alusta.\n"); + } + s.close(); + return; } } diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/Main.java.orig b/src/main/java/fi/utu/tech/ooj/exercise0/Main.java.orig new file mode 100644 index 0000000000000000000000000000000000000000..dc19b791a9f5a5805e0dd4a7234dff98b90a7746 --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise0/Main.java.orig @@ -0,0 +1,121 @@ +package fi.utu.tech.ooj.exercise0; + +import java.util.ArrayList; +import java.util.List; +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) { + ArrayList<String> vastaukset = new ArrayList<>(); + Scanner s = new Scanner(System.in); + for(String kysymys : kysyttavat) { + System.out.print("Anna " + kysymys + ": "); + String vastaus = s.nextLine(); + if(vastaus.equals(lopetusmerkki)) { + return vastaukset; + } + vastaukset.add(vastaus); + } + return vastaukset; + } + + + /* + 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) { + ArrayList<String> kirjanTiedot = new ArrayList<>(); + ArrayList<Kirja> kirjat = new ArrayList<>(); + Scanner s = new Scanner(System.in); + int lukum = 0; + int vuosi; + System.out.println("Kyselyn voit lopettaa merkillä: " + lopetusmerkki); + System.out.print("Anna kirja kokoelman omistajan nimi: "); + String omistaja = s.nextLine(); + if(omistaja.equals(lopetusmerkki)) { + return new KirjaKokoelma("", new ArrayList<>()); + } + System.out.println("\nSeuraavaksi lisätään kokoelmaan kirjoja. Kirjojen lisäys loppuu kun annat merkin: " + lopetusmerkki + "\n"); + while(true) { + System.out.println(++lukum + ". kirja"); + kirjanTiedot = kysyTietoja(new String[] {"kirjan nimi", "kirjailijan nimi", "julkaisuvuosi"}, lopetusmerkki); + if(kirjanTiedot.size() == 3) { + try { + vuosi = Integer.valueOf(kirjanTiedot.get(2)); + } catch(IllegalArgumentException e) { + System.out.println("VÄÄRÄ KENTTÄ!\n"); + continue; + } + kirjat.add(new Kirja(kirjanTiedot.get(0), kirjanTiedot.get(1), vuosi)); + System.out.println("Kirja lisätty!:"); + System.out.println(kirjat.get(kirjat.size() - 1).toString() + "\n"); + } else { + break; + } + } + System.out.println("Kokoelma luotu!\nKirjojen lukumäärä: " + (lukum - 1) + "\n"); + return new KirjaKokoelma(omistaja, kirjat); + } + + /** + Main class. + + @param args Command line arguments + */ + public static void main(String[] args) { + final String lopetusmerkki = "LOPETA"; + /* + Testin jälkeen alla olevan rivin voi joko kommentoida tai poistaa. + */ + //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. + System.out.println("*** Harjoitustyöpohja käynnistyy ***"); + Scanner s; + KirjanTiedot KirjanTieto; + KirjaKokoelma kirjaKokoelma = luoKokoelma(lopetusmerkki); + KirjaKokoelma loydettyKirjaKokoelma; + List<Kirja> loydetytKirjat = new ArrayList<>(); + kirjaKokoelma.tulostaKokoelma(System.out); + s = new Scanner(System.in); + while(true) { + System.out.println("Voit lopettaa hakumekanismin merkillä: " + lopetusmerkki); + System.out.println("Kentät:\nNIMI\nKIRJAILIJA\nJULKAISUVUOSI"); + System.out.print("Anna kenttä: "); + String kentta = s.nextLine(); + if(kentta.equals(lopetusmerkki)) { + break; + } + try { + KirjanTieto = KirjanTiedot.valueOf(kentta); + System.out.print("Anna regex: "); + String regex = s.nextLine(); + if(regex.equals(lopetusmerkki)) { + break; + } + loydetytKirjat = kirjaKokoelma.etsiKirjat(regex, KirjanTieto); + loydettyKirjaKokoelma = new KirjaKokoelma("EI_OMISTAJAA", new ArrayList<>(loydetytKirjat)); + if(loydettyKirjaKokoelma.getKirjaListaus().size() != 0) { + System.out.println("Löytyi tasan " + loydettyKirjaKokoelma.getKirjaListaus().size() + " kirjaa."); + } + loydettyKirjaKokoelma.tulostaKokoelma(System.out); + System.out.println(); + } catch(IllegalArgumentException e) { + System.out.println("VÄÄRÄ KENTTÄ!\n"); + continue; + } + System.out.print("Aloitetaanpas alusta.\n"); + } + s.close(); + return; + } +}