diff --git a/PR2Bib/src/domainBib/Bibliothek.java b/PR2Bib/src/domainBib/Bibliothek.java index 2627e33..fed544f 100644 --- a/PR2Bib/src/domainBib/Bibliothek.java +++ b/PR2Bib/src/domainBib/Bibliothek.java @@ -1,6 +1,10 @@ package domainBib; import java.awt.Component; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import javax.swing.JLabel; @@ -14,13 +18,14 @@ public class Bibliothek { static ArrayList videospielListe = new ArrayList<>(); static ArrayList kundenListe = new ArrayList<>(); static ArrayList katalog = new ArrayList<>(); + //static ArrayList zurzeitAusgeliehen = new ArrayList<>(); public static void makeEntries() { - Buch b1 = new Buch("Buch1", 2000, "Autor1", "01.01.2020", 10001); - Buch b2 = new Buch("Buch2", 2000, "Autor2", "01.01.2020", 10002); - Buch b3 = new Buch("Buch3", 2000, "Autor3", "01.01.2020", 10003); - Buch b4 = new Buch("Buch4", 2000, "Autor4", "01.01.2020", 10004); - Buch b5 = new Buch("Buch5", 2000, "Autor5", "01.01.2020", 10005); + Buch b1 = new Buch("Buch1", 2000, "Autor1", 10001); + Buch b2 = new Buch("Buch2", 2000, "Autor2",10002); + Buch b3 = new Buch("Buch3", 2000, "Autor3", 10003); + Buch b4 = new Buch("Buch4", 2000, "Autor4", 10004); + Buch b5 = new Buch("Buch5", 2000, "Autor5", 10005); bücherListe.add(b1); bücherListe.add(b2); bücherListe.add(b3); @@ -214,7 +219,7 @@ public class Bibliothek { return jlabelList; } - public static void ausleihe(int kennnummer, Kunde k) { + public static void ausleihe(int kennnummer, String datum, Kunde k) { for(Medium m: katalog) { if(m.getKennnummer() == kennnummer) { String text = m.getClass().toString(); @@ -223,26 +228,31 @@ public class Bibliothek { switch (substring) { case "Buch": Buch b = (Buch) m; + b.setAusleihDatum(datum); bücherListe.remove(b); k.addToList(b); break; case "DVD": DVD d = (DVD) m; + d.setAusleihDatum(datum); dvdListe.remove(d); k.addToList(d); break; case "CD": CD c = (CD) m; + c.setAusleihDatum(datum); cdListe.remove(c); k.addToList(c); break; case "Brettspiel": Brettspiel bs = (Brettspiel) m; + bs.setAusleihDatum(datum); brettspielListe.remove(bs); k.addToList(bs); break; case "Videospiel": Videospiel vs = (Videospiel) m; + vs.setAusleihDatum(datum); videospielListe.remove(vs); k.addToList(vs); break; @@ -254,7 +264,7 @@ public class Bibliothek { } } - public static void rückgabe(int kennnummer, Kunde k) { + public static void rückgabe(int kennnummer, String rückgabeDatum, Kunde k) { for(Medium m: katalog) { if(m.getKennnummer() == kennnummer) { String text = m.getClass().toString(); @@ -263,28 +273,48 @@ public class Bibliothek { switch (substring) { case "Buch": Buch b = (Buch) m; + double kostenBuch = berechneGebühren(b, kennnummer, rückgabeDatum); + String titelBuch = b.getTitel(); + if(kostenBuch!=0) {BibliothekGUI.zahlungsFenster(kostenBuch, titelBuch, kennnummer, k);} else { bücherListe.add(b); k.removeFromList(m); + } break; case "DVD": DVD d = (DVD) m; + double kostenDVD = berechneGebühren(d, kennnummer, rückgabeDatum); + String titelDVD = d.getTitel(); + if(kostenDVD!=0) {BibliothekGUI.zahlungsFenster(kostenDVD, titelDVD, kennnummer, k);} else { dvdListe.add(d); k.removeFromList(m); + } break; case "CD": CD c = (CD) m; + double kostenCD = berechneGebühren(c, kennnummer, rückgabeDatum); + String titelCD = c.getTitel(); + if(kostenCD!=0) {BibliothekGUI.zahlungsFenster(kostenCD, titelCD, kennnummer, k);} else { cdListe.add(c); k.removeFromList(m); + } break; case "Brettspiel": Brettspiel bs = (Brettspiel) m; + double kostenBS = berechneGebühren(bs, kennnummer, rückgabeDatum); + String titelBS = bs.getTitel(); + if(kostenBS!=0) {BibliothekGUI.zahlungsFenster(kostenBS, titelBS, kennnummer, k);} else { brettspielListe.add(bs); k.removeFromList(m); + } break; case "Videospiel": Videospiel vs = (Videospiel) m; + double kostenVS = berechneGebühren(vs, kennnummer, rückgabeDatum); + String titelVS = vs.getTitel(); + if(kostenVS!=0) {BibliothekGUI.zahlungsFenster(kostenVS, titelVS, kennnummer, k);} else { videospielListe.add(vs); k.removeFromList(m); + } break; default: break; @@ -294,6 +324,133 @@ public class Bibliothek { } } + private static double berechneGebühren(Buch b, int kennnummer, String rückgabeDatum) { + String ausleihDatum = b.getAusleihDatum(); + double tageAusgeliehen = findDifference(ausleihDatum, rückgabeDatum); + double kosten = 0; + if(tageAusgeliehen <= 28) { + return kosten = 0; + } + int dayCounter = 0; + while(tageAusgeliehen >= 29) { + if(dayCounter >=8) { + kosten += 2; + dayCounter++; + tageAusgeliehen--; + }else if (dayCounter <= 7){ + kosten += 1; + dayCounter++; + tageAusgeliehen--; + } + } + return kosten; + } + + private static double berechneGebühren(DVD d, int kennnummer, String rückgabeDatum) { + String ausleihDatum = d.getAusleihDatum(); + double tageAusgeliehen = findDifference(ausleihDatum, rückgabeDatum); + double kosten = 0; + if(tageAusgeliehen <= 7) { + return kosten = 0; + } + int dayCounter = 0; + while(tageAusgeliehen >= 8) { + if(dayCounter >=8) { + kosten += 2; + dayCounter++; + tageAusgeliehen--; + }else if (dayCounter <= 7){ + kosten += 1; + dayCounter++; + tageAusgeliehen--; + } + } + return kosten; + } + + private static double berechneGebühren(CD c, int kennnummer, String rückgabeDatum) { + String ausleihDatum = c.getAusleihDatum(); + double tageAusgeliehen = findDifference(ausleihDatum, rückgabeDatum); + double kosten = 0; + if(tageAusgeliehen <= 14) { + return kosten = 0; + } + int dayCounter = 0; + while(tageAusgeliehen >= 15) { + if(dayCounter >=8) { + kosten += 2; + dayCounter++; + tageAusgeliehen--; + }else if (dayCounter <= 7){ + kosten += 1; + dayCounter++; + tageAusgeliehen--; + } + } + return kosten; + } + + private static double berechneGebühren(Brettspiel bs, int kennnummer, String rückgabeDatum) { + String ausleihDatum = bs.getAusleihDatum(); + double tageAusgeliehen = findDifference(ausleihDatum, rückgabeDatum); + double kosten = 0; + if(tageAusgeliehen <= 14) { + return kosten = 0; + } + int dayCounter = 0; + while(tageAusgeliehen >= 15) { + if(dayCounter >=8) { + kosten += 2; + dayCounter++; + tageAusgeliehen--; + }else if (dayCounter <= 7){ + kosten += 1; + dayCounter++; + tageAusgeliehen--; + } + } + return kosten; + } + + private static double berechneGebühren(Videospiel vs, int kennnummer, String rückgabeDatum) { + String ausleihDatum = vs.getAusleihDatum(); + double tageAusgeliehen = findDifference(ausleihDatum, rückgabeDatum); + double kosten = 0; + if(tageAusgeliehen <= 28) { + return kosten = 0; + } + int dayCounter = 0; + while(tageAusgeliehen >= 29) { + if(dayCounter >=8) { + kosten += 2; + dayCounter++; + tageAusgeliehen--; + }else if (dayCounter <= 7){ + kosten += 1; + dayCounter++; + tageAusgeliehen--; + } + } + return kosten; + } + public static boolean zahlungRegistrieren(int zahlung, double kosten) { + if(kosten - zahlung <= 0) { + return true; + } else { + return false; + } + } + + + 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(differenzInTagen); + + return 0; + } + public static int bücherLänge() { return bücherListe.size(); } diff --git a/PR2Bib/src/domainBib/Medium.java b/PR2Bib/src/domainBib/Medium.java index 4e6e1c9..aba8c98 100644 --- a/PR2Bib/src/domainBib/Medium.java +++ b/PR2Bib/src/domainBib/Medium.java @@ -6,6 +6,8 @@ abstract class Medium { private String fälligkeitsDatum; private int kennnummer; private String autor; + private String ausleihDatum; + abstract public String getTitel(); abstract public int getJahr(); @@ -24,8 +26,9 @@ class Buch extends Medium{ private String autor; private String fälligkeitsDatum; private int kennnummer; + private String ausleihDatum; - public Buch(String titel, int erscheinungsjahr, String autor, String fälligkeitsDatum, int kennnummer) { + public Buch(String titel, int erscheinungsjahr, String autor, int kennnummer) { this.titel = titel; this.erscheinungsjahr = erscheinungsjahr; this.autor = autor; @@ -45,6 +48,14 @@ class Buch extends Medium{ return autor; } + public void setFälligkeitsDatum(String datum) { + this.fälligkeitsDatum = datum; + } + + public String getFälligkeitsDatum() { + return this.fälligkeitsDatum; + } + public String getDatum() { return fälligkeitsDatum; } @@ -52,6 +63,14 @@ class Buch extends Medium{ public int getKennnummer() { return kennnummer; } + + public void setAusleihDatum(String datum) { + this.ausleihDatum = datum; + } + + public String getAusleihDatum() { + return ausleihDatum; + } } class DVD extends Medium{ @@ -60,6 +79,7 @@ class DVD extends Medium{ private String fälligkeitsDatum; private int kennnummer; private String autor; + private String ausleihDatum; public DVD(String titel, int erscheinungsjahr, String fälligkeitsDatum, int kennnummer) { this.titel = titel; @@ -88,6 +108,20 @@ class DVD extends Medium{ public int getKennnummer() { return kennnummer; } + public void setFälligkeitsDatum(String datum) { + this.fälligkeitsDatum = datum; + } + + public String getFälligkeitsDatum() { + return this.fälligkeitsDatum; + } + public void setAusleihDatum(String datum) { + this.ausleihDatum = datum; + } + + public String getAusleihDatum() { + return ausleihDatum; + } } class CD extends Medium{ @@ -96,6 +130,7 @@ class CD extends Medium{ private String fälligkeitsDatum; private int kennnummer; private String autor; + private String ausleihDatum; public CD(String titel, int erscheinungsjahr, String fälligkeitsDatum, int kennnummer) { this.titel = titel; @@ -123,6 +158,20 @@ class CD extends Medium{ public int getKennnummer() { return kennnummer; } + public void setFälligkeitsDatum(String datum) { + this.fälligkeitsDatum = datum; + } + + public String getFälligkeitsDatum() { + return this.fälligkeitsDatum; + } + public void setAusleihDatum(String datum) { + this.ausleihDatum = datum; + } + + public String getAusleihDatum() { + return ausleihDatum; + } } class Brettspiel extends Medium{ @@ -131,7 +180,8 @@ class Brettspiel extends Medium{ private String fälligkeitsDatum; private int kennnummer; private String autor; - + private String ausleihDatum; + public Brettspiel(String titel, int erscheinungsjahr, String fälligkeitsDatum, int kennnummer) { this.titel = titel; this.erscheinungsjahr = erscheinungsjahr; @@ -159,6 +209,20 @@ class Brettspiel extends Medium{ public int getKennnummer() { return kennnummer; } + public void setFälligkeitsDatum(String datum) { + this.fälligkeitsDatum = datum; + } + + public String getFälligkeitsDatum() { + return this.fälligkeitsDatum; + } + public void setAusleihDatum(String datum) { + this.ausleihDatum = datum; + } + + public String getAusleihDatum() { + return ausleihDatum; + } } class Videospiel extends Medium{ @@ -167,7 +231,8 @@ class Videospiel extends Medium{ private String fälligkeitsDatum; private int kennnummer; private String autor; - + private String ausleihDatum; + public Videospiel(String titel, int erscheinungsjahr, String fälligkeitsDatum, int kennnummer) { this.titel = titel; this.erscheinungsjahr = erscheinungsjahr; @@ -195,4 +260,18 @@ class Videospiel extends Medium{ public int getKennnummer() { return kennnummer; } + public void setFälligkeitsDatum(String datum) { + this.fälligkeitsDatum = datum; + } + + public String getFälligkeitsDatum() { + return this.fälligkeitsDatum; + } + public void setAusleihDatum(String datum) { + this.ausleihDatum = datum; + } + + public String getAusleihDatum() { + return ausleihDatum; + } } \ No newline at end of file diff --git a/PR2Bib/src/guiBib/BibliothekGUI.java b/PR2Bib/src/guiBib/BibliothekGUI.java index 89ce2ae..6410328 100644 --- a/PR2Bib/src/guiBib/BibliothekGUI.java +++ b/PR2Bib/src/guiBib/BibliothekGUI.java @@ -1,5 +1,7 @@ package guiBib; + import domainBib.*; +import java.time.LocalDateTime; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; @@ -120,17 +122,24 @@ public class BibliothekGUI extends JFrame implements ActionListener{ private static void ausleihenMenü(Kunde k) { JPanel ausleihMenü = new JPanel(new BorderLayout()); + JPanel inputMenu = new JPanel(new GridLayout(4, 1, 10, 10)); JLabel text1 = new JLabel("Zu ausleihende Kennnummer des Mediums eingeben:"); - JTextField inputField = new JTextField(20); - ausleihMenü.add(text1, BorderLayout.NORTH); - ausleihMenü.add(inputField, BorderLayout.CENTER); + JTextField inputField1 = new JTextField(20); + JLabel text2 = new JLabel("Datum eingeben:"); + JTextField inputField2 = new JTextField(20); + inputMenu.add(text1); + inputMenu.add(inputField1); + inputMenu.add(text2); + inputMenu.add(inputField2); + ausleihMenü.add(inputMenu, BorderLayout.CENTER); JPanel buttonGrid = new JPanel(new GridLayout(2, 1, 10,10)); JButton b1 = new JButton("Abbrechen"); b1.addActionListener(e -> cl.show(mainPanel, "mediumPanel")); JButton b2 = new JButton("OK"); b2.addActionListener(e -> { - int kennnummer = Integer.parseInt(inputField.getText()); - Bibliothek.ausleihe(kennnummer, k); + int kennnummer = Integer.parseInt(inputField1.getText()); + String ausleihDatum = inputField2.getText().toString(); + Bibliothek.ausleihe(kennnummer, ausleihDatum, k); cl.show(mainPanel, "mediumPanel"); }); buttonGrid.add(b1); @@ -142,17 +151,24 @@ public class BibliothekGUI extends JFrame implements ActionListener{ private static void rückgabeMenü(Kunde k) { JPanel rückgabeMenü = new JPanel(new BorderLayout()); + JPanel inputMenu = new JPanel(new GridLayout(4,1,10,10)); JLabel text1 = new JLabel("Kennnummer des Mediums zur Rückgabe eingeben:"); - JTextField inputField = new JTextField(20); - rückgabeMenü.add(text1, BorderLayout.NORTH); - rückgabeMenü.add(inputField, BorderLayout.CENTER); + JTextField inputField1 = new JTextField(20); + JLabel text2 = new JLabel("Datum eingeben:"); + JTextField inputField2 = new JTextField(20); + inputMenu.add(text1); + inputMenu.add(inputField1); + inputMenu.add(text2); + inputMenu.add(inputField2); + rückgabeMenü.add(inputMenu, BorderLayout.CENTER);; JPanel buttonGrid = new JPanel(new GridLayout(2, 1, 10,10)); JButton b1 = new JButton("Abbrechen"); b1.addActionListener(e -> cl.show(mainPanel, "mediumPanel")); JButton b2 = new JButton("OK"); b2.addActionListener(e -> { - int kennnummer = Integer.parseInt(inputField.getText()); - Bibliothek.rückgabe(kennnummer, k); + int kennnummer = Integer.parseInt(inputField1.getText()); + String rückgabeDatum = inputField2.getText().toString(); + Bibliothek.rückgabe(kennnummer, rückgabeDatum, k); myBooks(k); }); buttonGrid.add(b1); @@ -253,5 +269,25 @@ public class BibliothekGUI extends JFrame implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { } + + public static void zahlungsFenster(double kosten, String titel, int kennnummer, Kunde k) { + JPanel zahlungPanel = new JPanel(new BorderLayout()); + JLabel text1 = new JLabel("Sie schulden für das Buch " + titel + " mit der Kennnummer " + kennnummer + " " + kosten + "€."); + zahlungPanel.add(text1, BorderLayout.NORTH); + JTextField inputField1 = new JTextField(20); + zahlungPanel.add(inputField1, BorderLayout.CENTER); + JButton b1 = new JButton("OK"); + zahlungPanel.add(b1, BorderLayout.NORTH); + b1.addActionListener(e -> { + int zahlung = Integer.parseInt(inputField1.getText()); + boolean zahlungErfolgreich = Bibliothek.zahlungRegistrieren(zahlung, kosten); + if(zahlungErfolgreich == true) { + + } else { + + } + }); + } + } \ No newline at end of file