diff --git a/PR2Bib/src/domainBib/Bibliothek.java b/PR2Bib/src/domainBib/Bibliothek.java index 5ae8813..ef59426 100644 --- a/PR2Bib/src/domainBib/Bibliothek.java +++ b/PR2Bib/src/domainBib/Bibliothek.java @@ -75,15 +75,16 @@ public class Bibliothek { videospielListe.add(v4); videospielListe.add(v5); - //Benutzer bn1 = new Mitarbeiter(1); - Kunde bn2 = new Kunde(true, 2); - Kunde bn3 = new Kunde(true, 3); - Kunde bn4 = new Kunde(false, 4); - Kunde bn5 = new Kunde(false, 5); - kundenListe.add(bn2); - kundenListe.add(bn3); - kundenListe.add(bn4); - kundenListe.add(bn5); + Kunde k1 = new Kunde(true, 1); + Kunde k2 = new Kunde(true, 2); + Kunde k3 = new Kunde(false, 3); + Kunde k4 = new Kunde(false, 4); + Kunde k5 = new Kunde(false, 5); + kundenListe.add(k1); + kundenListe.add(k2); + kundenListe.add(k3); + kundenListe.add(k4); + kundenListe.add(k5); for(Buch b: bücherListe) { katalog.add(b); @@ -206,14 +207,16 @@ public class Bibliothek { + ", Autor: " + m.getAutor() + ", Jahr: " + m.getJahr() + ", Kennnummer: " + m.getKennnummer() - + ", ausgeliehen am: " + m.getAusleihdatum()); + + ", ausgeliehen am: " + m.getAusleihdatum() + + ", Verlängerungen: " + m.getVerlängerungen()); jlabelList.add(med); } if(m.getAutor() == null) { JLabel med = new JLabel("Titel: " + m.getTitel() + ", Jahr: " + m.getJahr() + ", Kennnummer: " +m.getKennnummer() - + ", ausgeliehen am: " + m.getAusleihdatum()); + + ", ausgeliehen am: " + m.getAusleihdatum() + + ", Verlängerungen: " + m.getVerlängerungen()); jlabelList.add(med); } } @@ -229,31 +232,31 @@ public class Bibliothek { switch (substring) { case "Buch": Buch b = (Buch) m; - b.setAusleihDatum(datum); + b.setAusleihdatum(datum); bücherListe.remove(b); k.addToList(b); break; case "DVD": DVD d = (DVD) m; - d.setAusleihDatum(datum); + d.setAusleihdatum(datum); dvdListe.remove(d); k.addToList(d); break; case "CD": CD c = (CD) m; - c.setAusleihDatum(datum); + c.setAusleihdatum(datum); cdListe.remove(c); k.addToList(c); break; case "Brettspiel": Brettspiel bs = (Brettspiel) m; - bs.setAusleihDatum(datum); + bs.setAusleihdatum(datum); brettspielListe.remove(bs); k.addToList(bs); break; case "Videospiel": Videospiel vs = (Videospiel) m; - vs.setAusleihDatum(datum); + vs.setAusleihdatum(datum); videospielListe.remove(vs); k.addToList(vs); break; @@ -282,6 +285,7 @@ public class Bibliothek { } else { bücherListe.add(b); k.removeFromList(m); + BibliothekGUI.noMoneyOwed(); } break; case "DVD": @@ -294,6 +298,7 @@ public class Bibliothek { } else { dvdListe.add(d); k.removeFromList(m); + BibliothekGUI.noMoneyOwed(); } break; case "CD": @@ -306,6 +311,7 @@ public class Bibliothek { } else { cdListe.add(c); k.removeFromList(m); + BibliothekGUI.noMoneyOwed(); } break; case "Brettspiel": @@ -318,6 +324,7 @@ public class Bibliothek { } else { brettspielListe.add(bs); k.removeFromList(m); + BibliothekGUI.noMoneyOwed(); } break; case "Videospiel": @@ -330,6 +337,7 @@ public class Bibliothek { } else { videospielListe.add(vs); k.removeFromList(m); + BibliothekGUI.noMoneyOwed(); } break; default: @@ -359,7 +367,6 @@ public class Bibliothek { tageAusgeliehen--; } } - System.out.println("Kosten: " + kosten); return kosten; } @@ -450,6 +457,7 @@ public class Bibliothek { } return kosten; } + public static boolean zahlungRegistrieren(int zahlung, double kosten) { boolean isTrue = false; if(kosten - zahlung <= 0) { @@ -460,14 +468,10 @@ public class Bibliothek { return isTrue; } - private static double findDifference(String ausleihDatum, String rückgabeDatum) { LocalDate ausgeliehenTag = LocalDate.parse(ausleihDatum, DateTimeFormatter.ofPattern("dd.MM.yyyy")); LocalDate rückgabeTag = LocalDate.parse(rückgabeDatum, DateTimeFormatter.ofPattern("dd.MM.yyyy")); double differenzInTagen = ChronoUnit.DAYS.between(ausgeliehenTag, rückgabeTag); - System.out.println(ausgeliehenTag); - System.out.println(rückgabeTag); - System.out.println("Tage: " + differenzInTagen); return differenzInTagen; } @@ -526,6 +530,44 @@ public class Bibliothek { public static void addCustomer(Kunde k) { kundenListe.add(k); } + + public static boolean verlängerungMöglich(int kennnummer, Kunde k) { + ArrayList ausgeliehenListe = k.returnAusgelieheneMedien(); + for(Medium m: ausgeliehenListe) { + if(m.getKennnummer() == kennnummer) { + if(m.getVerlängerungen() > 0) { + m.setVerlängerung(); + datumVerlängern(m, k); + return true; + } else { + return false; + } + } + } + return false; + } + + private static void datumVerlängern(Medium m, Kunde k) { + String text = m.getClass().toString(); + int lastDotIndex = text.lastIndexOf("."); + String substring = text.substring(lastDotIndex + 1); + String ausleihDatum = m.getAusleihdatum(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + LocalDate ausgeliehenTag = LocalDate.parse(ausleihDatum, formatter); + LocalDate neuerTag = ausgeliehenTag.plusDays(28); + String neuesAusleihDatum = neuerTag.format(formatter); + m.setAusleihdatum(neuesAusleihDatum); + } + + public static void changeOwedMenu2(String kennnummerStr, int amount) { + int kennnummer = Integer.parseInt(kennnummerStr); + for(Kunde k: kundenListe) { + if(k.getKennnummer() == kennnummer) { + k.setSchulden(amount); + } + } + } + } diff --git a/PR2Bib/src/domainBib/Medium.java b/PR2Bib/src/domainBib/Medium.java index 72b7f8e..4c3c162 100644 --- a/PR2Bib/src/domainBib/Medium.java +++ b/PR2Bib/src/domainBib/Medium.java @@ -7,12 +7,16 @@ abstract class Medium { private int kennnummer; private String autor; private String ausleihDatum; + private int verlängerungen; abstract public String getTitel(); abstract public int getJahr(); abstract public String getAusleihdatum(); + abstract public void setAusleihdatum(String a); abstract public int getKennnummer(); + abstract public int getVerlängerungen(); + abstract public void setVerlängerung(); public String getAutor(){ return null; } @@ -25,6 +29,7 @@ class Buch extends Medium{ private String fälligkeitsDatum; private int kennnummer; private String ausleihDatum; + private int verlängerungen; public Buch(String titel, int erscheinungsjahr, String autor, int kennnummer) { this.titel = titel; @@ -32,12 +37,18 @@ class Buch extends Medium{ this.autor = autor; this.fälligkeitsDatum = fälligkeitsDatum; this.kennnummer = kennnummer; + this.verlängerungen = 3; } public String getTitel() { return titel; } + public int getVerlängerungen() { + return verlängerungen; + } + + public int getJahr() { return erscheinungsjahr; } @@ -57,14 +68,18 @@ class Buch extends Medium{ public int getKennnummer() { return kennnummer; } - - public void setAusleihDatum(String datum) { - this.ausleihDatum = datum; - } public String getAusleihdatum() { return ausleihDatum; } + + public void setVerlängerung() { + verlängerungen--; + } + + public void setAusleihdatum(String datum) { + this.ausleihDatum = datum; + } } class DVD extends Medium{ @@ -74,6 +89,7 @@ class DVD extends Medium{ private int kennnummer; private String autor; private String ausleihDatum; + private int verlängerungen; public DVD(String titel, int erscheinungsjahr, String fälligkeitsDatum, int kennnummer) { this.titel = titel; @@ -81,6 +97,7 @@ class DVD extends Medium{ this.fälligkeitsDatum = fälligkeitsDatum; this.kennnummer = kennnummer; this.autor = null; + this.verlängerungen = 0; } public String getTitel() { @@ -91,6 +108,18 @@ class DVD extends Medium{ return erscheinungsjahr; } + public int getVerlängerungen() { + return verlängerungen; + } + + public void setAusleihdatum(String datum) { + this.ausleihDatum = datum; + } + + public void setVerlängerung() { + verlängerungen =- 1; + } + public String getAutor() { return null; } @@ -109,9 +138,6 @@ class DVD extends Medium{ public String getFälligkeitsDatum() { return this.fälligkeitsDatum; } - public void setAusleihDatum(String datum) { - this.ausleihDatum = datum; - } public String getAusleihdatum() { return ausleihDatum; @@ -125,6 +151,7 @@ class CD extends Medium{ private int kennnummer; private String autor; private String ausleihDatum; + private int verlängerungen; public CD(String titel, int erscheinungsjahr, String fälligkeitsDatum, int kennnummer) { this.titel = titel; @@ -132,6 +159,14 @@ class CD extends Medium{ this.fälligkeitsDatum = fälligkeitsDatum; this.kennnummer = kennnummer; this.autor = null; + this.verlängerungen = 0; + + } + public void setVerlängerung() { + verlängerungen =- 1; + } + public void setAusleihdatum(String datum) { + this.ausleihDatum = datum; } public String getTitel() { @@ -144,6 +179,9 @@ class CD extends Medium{ public String getAutor() { return null; } + public int getVerlängerungen() { + return verlängerungen; + } public String getDatum() { return fälligkeitsDatum; @@ -159,9 +197,6 @@ class CD extends Medium{ public String getFälligkeitsDatum() { return this.fälligkeitsDatum; } - public void setAusleihDatum(String datum) { - this.ausleihDatum = datum; - } public String getAusleihdatum() { return ausleihDatum; @@ -175,6 +210,7 @@ class Brettspiel extends Medium{ private int kennnummer; private String autor; private String ausleihDatum; + private int verlängerungen; public Brettspiel(String titel, int erscheinungsjahr, String fälligkeitsDatum, int kennnummer) { this.titel = titel; @@ -182,11 +218,15 @@ class Brettspiel extends Medium{ this.fälligkeitsDatum = fälligkeitsDatum; this.kennnummer = kennnummer; this.autor = null; + this.verlängerungen = 0; } public String getTitel() { return titel; } + public void setVerlängerung() { + verlängerungen =- 1; + } public int getJahr() { return erscheinungsjahr; @@ -199,7 +239,9 @@ class Brettspiel extends Medium{ public String getDatum() { return fälligkeitsDatum; } - + public int getVerlängerungen() { + return verlängerungen; + } public int getKennnummer() { return kennnummer; } @@ -210,7 +252,7 @@ class Brettspiel extends Medium{ public String getFälligkeitsDatum() { return this.fälligkeitsDatum; } - public void setAusleihDatum(String datum) { + public void setAusleihdatum(String datum) { this.ausleihDatum = datum; } @@ -226,6 +268,7 @@ class Videospiel extends Medium{ private int kennnummer; private String autor; private String ausleihDatum; + private int verlängerungen; public Videospiel(String titel, int erscheinungsjahr, String fälligkeitsDatum, int kennnummer) { this.titel = titel; @@ -233,15 +276,25 @@ class Videospiel extends Medium{ this.fälligkeitsDatum = fälligkeitsDatum; this.kennnummer = kennnummer; this.autor = null; + this.verlängerungen = 1; + } + public void setAusleihdatum(String datum) { + this.ausleihDatum = datum; } public String getTitel() { return titel; } + public void setVerlängerung() { + verlängerungen =- 1; + } public int getJahr() { return erscheinungsjahr; } + public int getVerlängerungen() { + return verlängerungen; + } public String getAutor() { return null; @@ -261,9 +314,6 @@ class Videospiel extends Medium{ public String getFälligkeitsDatum() { return this.fälligkeitsDatum; } - public void setAusleihDatum(String datum) { - this.ausleihDatum = datum; - } public String getAusleihdatum() { return ausleihDatum; diff --git a/PR2Bib/src/guiBib/BibliothekGUI.java b/PR2Bib/src/guiBib/BibliothekGUI.java index c2e8055..ba23c2e 100644 --- a/PR2Bib/src/guiBib/BibliothekGUI.java +++ b/PR2Bib/src/guiBib/BibliothekGUI.java @@ -54,7 +54,7 @@ public class BibliothekGUI extends JFrame implements ActionListener{ loginPanel.add(bp, BorderLayout.SOUTH); add(mainPanel); setVisible(true); - setSize(600, 600); + setSize(1200, 700); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainPanel.add(loginPanel, "loginPanel"); cl.show(mainPanel, "loginPanel"); @@ -88,16 +88,27 @@ public class BibliothekGUI extends JFrame implements ActionListener{ private void nutzerAnlegen() { JPanel registerMenu = new JPanel(new BorderLayout()); int newKennnummer = Bibliothek.getNewKennnummer(); + JPanel registerPanel = new JPanel(new GridLayout(3,1,10,10)); JLabel text0 = new JLabel("Ihre Kennnummmer wird " + newKennnummer + " sein."); + JLabel text1 = new JLabel("Die Mitgliedsgebühren betragen 10€ jährlich, für Studenten 5€."); JCheckBox studentOrNot = new JCheckBox("Sind Sie Student? Falls ja bitte anklicken."); - registerMenu.add(text0, BorderLayout.NORTH); - registerMenu.add(studentOrNot, BorderLayout.CENTER); + registerPanel.add(text0); + registerPanel.add(text1); + registerPanel.add(studentOrNot); + registerMenu.add(registerPanel, BorderLayout.CENTER); final boolean[] isStudent = {false}; studentOrNot.addActionListener(e -> isStudent[0] = studentOrNot.isSelected()); JPanel bg = new JPanel(new GridLayout(1,2,10,10)); JButton b2 = new JButton("OK"); b2.addActionListener(e -> { Kunde k = new Kunde(isStudent[0], newKennnummer); + if(isStudent[0] == true) { + int amount = 5; + k.setSchulden(amount); + } else { + int amount = 10; + k.setSchulden(amount); + } Bibliothek.addCustomer(k); cl.show(mainPanel, "loginPanel"); }); @@ -144,11 +155,48 @@ public class BibliothekGUI extends JFrame implements ActionListener{ } private static void changeOwedMenu() { - + JPanel changeOwedMenu = new JPanel(new BorderLayout()); + int i = Bibliothek.getUserListLength(); + JPanel userListPanel = new JPanel(new GridLayout(i+5, 2, 10, 10)); + JLabel text1 = new JLabel("Alle Nutzer:"); + changeOwedMenu.add(text1, BorderLayout.NORTH); + ArrayList jlabelList = Bibliothek.nutzerAuflisten(); + for(JLabel j: jlabelList) { + userListPanel.add(j); + } + JLabel text0 = new JLabel("Geben Sie die Kennnumer des Nutzers ein: "); + userListPanel.add(text0); + JTextField inputField1 = new JTextField(20); + userListPanel.add(inputField1); + JLabel text2 = new JLabel("Geben Sie die Menge ein:"); + userListPanel.add(text2); + JTextField inputField2 = new JTextField(20); + userListPanel.add(inputField2); + changeOwedMenu.add(userListPanel,BorderLayout.CENTER); + JPanel bg = new JPanel(new GridLayout(1,2,10,10)); + JButton b1 = new JButton("Abbrechen"); + b1.addActionListener(e -> cl.show(mainPanel, "adminMenu")); + JButton b2 = new JButton("OK"); + b2.addActionListener(e -> { + String kennnummer = inputField1.getText().toString(); + String amountStr = inputField2.getText().toString(); + int amount = Integer.parseInt(amountStr); + if(kennnummer == "") { + cl.show(mainPanel, "adminMenu"); + } else { + Bibliothek.changeOwedMenu2(kennnummer, amount); + cl.show(mainPanel, "adminMenu"); + } + }); + bg.add(b1); + bg.add(b2); + changeOwedMenu.add(bg, BorderLayout.SOUTH); + mainPanel.add(changeOwedMenu, "changeOwed"); + cl.show(mainPanel, "changeOwed"); } private static void openMainMenu(Kunde k) { - JPanel mediumPanel = new JPanel(new GridLayout(11, 1, 10, 10)); + JPanel mediumPanel = new JPanel(new GridLayout(12, 1, 10, 10)); JLabel text1 = new JLabel("Ihre Kennnnummer: " + k.getKennnummer()); mediumPanel.add(text1); JButton b1 = new JButton("Bücher"); @@ -167,10 +215,12 @@ public class BibliothekGUI extends JFrame implements ActionListener{ b7.addActionListener(e -> rückgabeMenü(k)); JButton b8 = new JButton("Meine Ausgeliehenen Medien"); b8.addActionListener(e -> myBooks(k)); - JButton b9 = new JButton("Meine Schulden abbezahlen"); - b9.addActionListener(e -> schuldenBegleichen(k)); - JButton b10 = new JButton("Ausloggen"); - b10.addActionListener(e -> cl.show(mainPanel, "loginPanel")); + JButton b9 = new JButton("Verlängern"); + b9.addActionListener(e -> verlängern(k)); + JButton b10 = new JButton("Meine Schulden abbezahlen"); + b10.addActionListener(e -> schuldenBegleichen(k)); + JButton b11 = new JButton("Ausloggen"); + b11.addActionListener(e -> cl.show(mainPanel, "loginPanel")); mediumPanel.add(b1); mediumPanel.add(b2); mediumPanel.add(b3); @@ -181,11 +231,88 @@ public class BibliothekGUI extends JFrame implements ActionListener{ mediumPanel.add(b8); mediumPanel.add(b9); mediumPanel.add(b10); + mediumPanel.add(b11); mainPanel.add(mediumPanel, "mediumPanel"); cl.show(mainPanel, "mediumPanel"); } + private static void verlängern(Kunde k) { + JPanel verlängerungPanel = new JPanel(new BorderLayout()); + JLabel text0 = new JLabel("Geben Sie die Kennnumer des Mediums ein, dessen Rückgabezeit sie verlängern möchten."); + JTextField inputField = new JTextField(20); + int i = k.ausgelieheneMedienLänge(); + JPanel info = new JPanel(new GridLayout(i+2, 1, 10, 10)); + JLabel text1 = new JLabel("Ihre Ausgeliehene Medien:"); + verlängerungPanel.add(text0, BorderLayout.NORTH); + ArrayList jlabelList = Bibliothek.ausgelieheneListe(k); + info.add(text1); + for(JLabel j: jlabelList) { + info.add(j, BorderLayout.CENTER); + } + info.add(inputField); + verlängerungPanel.add(info, BorderLayout.CENTER); + JPanel bg = new JPanel(new GridLayout(1,2,10,10)); + JButton b1 = new JButton("OK"); + b1.addActionListener(e -> { + if(i>0) { + int kennnummer = Integer.parseInt(inputField.getText()); + boolean verlängerungMöglich = Bibliothek.verlängerungMöglich(kennnummer, k); + if(verlängerungMöglich == true){ + verlängerung1(); + } else { + verlängerung2(); + } + } else { + cl.show(mainPanel, "mediumPanel"); + } + }); + JButton b2 = new JButton("Abbrechen"); + b2.addActionListener(e -> { + cl.show(mainPanel, "mediumPanel"); + }); + bg.add(b2); + bg.add(b1); + if(i == 0) { + verlängerungPanel.remove(inputField); + } + verlängerungPanel.add(bg, BorderLayout.SOUTH); + mainPanel.add(verlängerungPanel, "Verlängerung0"); + cl.show(mainPanel, "Verlängerung0"); + } + + private static void verlängerung1() { + JPanel v1 = new JPanel(new BorderLayout()); + JLabel text1 = new JLabel("Verlängerung erfolgreich."); + v1.add(text1, BorderLayout.CENTER); + JButton b = new JButton("OK"); + b.addActionListener(e -> { + cl.show(mainPanel, "mediumPanel"); + mainPanel.remove(v1); + mainPanel.revalidate(); + mainPanel.repaint(); + }); + v1.add(b, BorderLayout.SOUTH); + mainPanel.add(v1, "Verlängerung1"); + cl.show(mainPanel, "Verlängerung1"); + } + private static void verlängerung2() { + JPanel v2 = new JPanel(new BorderLayout()); + JLabel text1 = new JLabel("Verlängerung fehlgeschlagen."); + v2.add(text1, BorderLayout.CENTER); + JButton b = new JButton("OK"); + b.addActionListener(e -> { + cl.show(mainPanel, "mediumPanel"); + mainPanel.remove(v2); + mainPanel.revalidate(); + mainPanel.repaint(); + // mainPanel.remove(v2); + }); + v2.add(b, BorderLayout.SOUTH); + mainPanel.add(v2, "Verlängerung2"); + cl.show(mainPanel, "Verlängerung2"); + } + private static void schuldenBegleichen(Kunde k) { JPanel schuldenMenü = new JPanel(new BorderLayout()); double schulden = k.getSchulden(); @@ -204,7 +331,6 @@ public class BibliothekGUI extends JFrame implements ActionListener{ b1.addActionListener(e -> { int einzahlung = Integer.parseInt(inputField1.getText()); double newSchulden = schulden - einzahlung; - System.out.println("neue Schulden: "+ newSchulden); k.setSchulden(newSchulden); cl.show(mainPanel, "mediumPanel"); }); @@ -242,7 +368,6 @@ public class BibliothekGUI extends JFrame implements ActionListener{ b2.addActionListener(e -> { int kennnummer = Integer.parseInt(inputField1.getText()); String ausleihDatum = inputField2.getText().toString(); - System.out.println(ausleihDatum); Bibliothek.ausleihe(kennnummer, ausleihDatum, k); cl.show(mainPanel, "mediumPanel"); }); @@ -272,7 +397,6 @@ public class BibliothekGUI extends JFrame implements ActionListener{ b2.addActionListener(e -> { int kennnummer = Integer.parseInt(inputField1.getText()); String rückgabeDatum = inputField2.getText().toString(); - System.out.println(rückgabeDatum); Bibliothek.rückgabe(kennnummer, rückgabeDatum, k); }); buttonGrid.add(b1); @@ -428,7 +552,6 @@ public class BibliothekGUI extends JFrame implements ActionListener{ private static void zahlungStatus(String zahlungStr, double kosten, Kunde k) { int zahlung = Integer.parseInt(zahlungStr); - System.out.println("eingezahlt: " + zahlung); boolean zahlungErfolgreich = Bibliothek.zahlungRegistrieren(zahlung, kosten); JPanel zahlungStatusPanel = new JPanel(new BorderLayout()); JLabel text2 = new JLabel("Zahlungsstatus:"); @@ -452,5 +575,9 @@ public class BibliothekGUI extends JFrame implements ActionListener{ }); } + public static void noMoneyOwed() { + cl.show(mainPanel, "mediumPanel"); + } + } \ No newline at end of file