From 1faa14fd5f43b7ef0445f2af6ba24160b1618f1a Mon Sep 17 00:00:00 2001 From: ioana Date: Sun, 17 Nov 2024 15:20:38 +0100 Subject: [PATCH] =?UTF-8?q?Verbesserungen,=20Berechnung=20der=20Geb=C3=BCh?= =?UTF-8?q?ren=20muss=20noch=20verbessert=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LibrarySystem/UI/BibTest.java | 10 +- LibrarySystem/UI/BibliothekTest.java | 6 - LibrarySystem/UI/UI.java | 104 ++++++----- LibrarySystem/domain/ausleihe/Ausleihe.java | 64 ------- LibrarySystem/domain/benutzern/Admin.java | 11 +- LibrarySystem/domain/benutzern/Benutzer.java | 142 ++++++--------- .../domain/benutzern/Erwachsener.java | 6 +- LibrarySystem/domain/benutzern/Student.java | 6 +- LibrarySystem/domain/medien/Ausleihbar.java | 5 +- LibrarySystem/domain/medien/Brettspiel.java | 17 +- LibrarySystem/domain/medien/Buch.java | 23 ++- LibrarySystem/domain/medien/CD.java | 16 +- LibrarySystem/domain/medien/DVD.java | 16 +- LibrarySystem/domain/medien/Medium.java | 86 +++++---- LibrarySystem/domain/medien/Videospiel.java | 22 ++- LibrarySystem/facade/BibliothekSystem.java | 165 +++++++++++++++--- 16 files changed, 383 insertions(+), 316 deletions(-) delete mode 100644 LibrarySystem/domain/ausleihe/Ausleihe.java diff --git a/LibrarySystem/UI/BibTest.java b/LibrarySystem/UI/BibTest.java index 5a65eff..0c62d36 100644 --- a/LibrarySystem/UI/BibTest.java +++ b/LibrarySystem/UI/BibTest.java @@ -1,4 +1,4 @@ -package LibrarySystem.UI; +/*package LibrarySystem.UI; import LibrarySystem.domain.benutzern.*; import LibrarySystem.domain.medien.*; @@ -22,8 +22,8 @@ public class BibTest { system.benutzerRegistrieren(student); // Medien erstellen - Medium buch = new Buch(123, "Java Programmieren", "BP", 2020,"Buch"); - Medium dvd = new DVD(456, "Der große Film", "JP",2018, "DVD"); + Medium buch = new Buch("123", "Java Programmieren", "BP", 2020,"Buch"); + Medium dvd = new DVD("456", "Der große Film", "JP",2018, "DVD"); // Datum setzen und Ausleihe simulieren system.datumAendern(LocalDate.of(2024, 11, 10)); @@ -34,7 +34,7 @@ public class BibTest { // Rückgabe simulieren system.datumAendern(LocalDate.of(2024, 12, 15)); // Datum ändern - student.rueckgabe(456, system.getAktuellesDatum()); + student.rueckgabe("456", system.getAktuellesDatum()); //Bezahlung der Gebühren simulieren system.zeigeGebuehren(erwachsener); @@ -55,4 +55,4 @@ public class BibTest { System.out.println("Jahresgebühr: " + admin.getJahresgebuehr() + " EUR"); } -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/LibrarySystem/UI/BibliothekTest.java b/LibrarySystem/UI/BibliothekTest.java index b677b7c..29bcc58 100644 --- a/LibrarySystem/UI/BibliothekTest.java +++ b/LibrarySystem/UI/BibliothekTest.java @@ -8,12 +8,6 @@ public class BibliothekTest { public static void main(String[] args) { BibliothekSystem system = new BibliothekSystem(); - // Beispiel: Benutzer und Admin hinzufügen - Benutzer student = new Student("Ana Misk", 21); - Admin admin = new Admin("Alisa Admin", 40); - system.benutzerRegistrieren(student); - system.benutzerRegistrieren(admin); - // UI starten UI ui = new UI(system); ui.starten(); diff --git a/LibrarySystem/UI/UI.java b/LibrarySystem/UI/UI.java index a94ed82..6655948 100644 --- a/LibrarySystem/UI/UI.java +++ b/LibrarySystem/UI/UI.java @@ -16,90 +16,86 @@ public class UI { public void starten() { while (true) { - System.out.println("Willkommen in der Bibliothek!"); + System.out.println("Willkommen in der Bibliothek!\n"); System.out.println("1. Anmelden"); System.out.println("2. Medien durchsuchen"); System.out.println("3. Ausleihen eines Mediums"); System.out.println("4. Rückgabe eines Mediums"); - System.out.println("5. Zeige ausgeliehene Gegenstände und Gebühren"); + System.out.println("5. Zeige ausgeliehene Medien und Gebühren"); System.out.println("6. Verlängern der Leihfrist"); System.out.println("7. Admin-Login (Überfällige Gebühren verbuchen)"); - System.out.println("0. Beenden"); + System.out.println("0. Beenden\n"); System.out.print("Bitte wählen Sie eine Option: "); int auswahl = scanner.nextInt(); scanner.nextLine(); switch (auswahl) { - case 1: - anmelden(); - break; - case 2: - durchsuchenMedien(); - break; - case 3: - ausleihenMedium(); - break; - case 4: - rueckgabeMedium(); - break; - case 5: - zeigeAusgelieheneMedienUndGebuehren(); - break; - case 6: - verlaengernLeihfrist(); - break; - case 7: - adminLogin(); - break; - case 0: + case 1 -> anmelden(); + case 2 -> durchsuchenMedien(); + case 3 -> ausleihenMedium(); + case 4 -> rueckgabeMedium(); + case 5 -> zeigeAusgelieheneMedienUndGebuehren(); + case 6 -> verlaengernLeihfrist(); + case 7 -> adminLogin(); + case 0 -> { System.out.println("Auf Wiedersehen!"); return; - default: - System.out.println("Ungültige Auswahl, bitte erneut versuchen."); + } + default -> System.out.println("Ungültige Auswahl, bitte erneut versuchen."); } } } - private void anmelden() { - System.out.print("Bitte geben Sie Ihre Kartennummer ein: "); - String kartennummer = scanner.nextLine(); - Benutzer benutzer = system.anmelden(kartennummer); - if (benutzer != null) { - System.out.println("Erfolgreich angemeldet als: " + benutzer.getName()); - } - } - - private void durchsuchenMedien() { - System.out.println("Durchsuchen der Medien: (bitte nur Titel und Medienart eingeben)"); - System.out.println("Titel: "); - String titel = scanner.nextLine(); - System.out.println("Medienart: "); - String medienart = scanner.nextLine(); - system.durchsuchenMedien(titel, medienart); - } - - private void ausleihenMedium() { - System.out.print("Bitte geben Sie die ID des Mediums ein, das Sie ausleihen möchten: "); - String mediumId = scanner.nextLine(); - // Beispiel: Medium finden und ausleihen - System.out.println("Medium mit ID " + mediumId + " ausgeliehen."); + //1. Anmelden + private void anmelden() { + System.out.print("Bitte geben Sie Ihre Kartennummer ein: "); + String kartennummer = scanner.nextLine(); + Benutzer benutzer = system.anmelden(kartennummer); + if (benutzer != null) { + System.out.println("Willkommen! Erfolgreich angemeldet als: " + benutzer.getName()); + } else { + System.out.println("Flasche Kartennummer. Bitte erneut versuchen!"); + } } + //2. Medien durchsuchen + private void durchsuchenMedien() { + System.out.println("Durchsuchen der Medien: (bitte nur Titel und Medienart eingeben)"); + System.out.println("Titel: "); + String titel = scanner.nextLine(); + System.out.println("Medienart: "); + String medienart = scanner.nextLine(); + system.durchsuchenMedien(titel, medienart); + } + + //3. Ausleihe eines Mediums + private void ausleihenMedium() { + System.out.println("Bitte melden Sie sich mit der Kartennummer ein: "); + String kartennummer = scanner.nextLine(); + System.out.print("Bitte geben Sie die ID des Mediums ein, das Sie ausleihen möchten: "); + String mediumID = scanner.nextLine(); + system.ausleiheMedium(kartennummer, mediumID); + } + + //4. Rückgabe eines Mediums private void rueckgabeMedium() { System.out.print("Bitte geben Sie die ID des Mediums ein, das Sie zurückgeben möchten: "); String mediumId = scanner.nextLine(); - // Beispiel: Medium zurückgeben - System.out.println("Medium mit ID " + mediumId + " zurückgegeben."); + system.rueckgabeMedium(mediumId); } + + //5. Zeige ausgeliehene Medien und Gebühren private void zeigeAusgelieheneMedienUndGebuehren() { System.out.print("Bitte geben Sie Ihre Kartennummer ein: "); String kartennummer = scanner.nextLine(); Benutzer benutzer = system.anmelden(kartennummer); if (benutzer != null) { - system.zeigeGebuehren(benutzer); + //system.zeigeGebuehren(benutzer); + benutzer.anzeigenAusleihen(); } } + //6. Verlängern der Leihfrist private void verlaengernLeihfrist() { System.out.print("Bitte geben Sie die ID des Mediums ein, dessen Leihfrist Sie verlängern möchten: "); String mediumId = scanner.nextLine(); @@ -107,6 +103,7 @@ public class UI { // Logik zur Verlängerung der Leihfrist hinzufügen } + //7. Admin-Login private void adminLogin() { System.out.print("Bitte geben Sie Ihre Admin-Kartennummer ein: "); String kartennummer = scanner.nextLine(); @@ -125,7 +122,6 @@ public class UI { } - } diff --git a/LibrarySystem/domain/ausleihe/Ausleihe.java b/LibrarySystem/domain/ausleihe/Ausleihe.java deleted file mode 100644 index e62d1b8..0000000 --- a/LibrarySystem/domain/ausleihe/Ausleihe.java +++ /dev/null @@ -1,64 +0,0 @@ -package LibrarySystem.domain.ausleihe; - -import LibrarySystem.domain.medien.*; - -import java.time.LocalDate; -import java.time.LocalTime; -import java.time.temporal.ChronoUnit; - -public class Ausleihe { - - private Medium medium; - private LocalDate ausleiheDatum; - private LocalDate rueckgabeFrist; - private boolean zurueckgegeben; - - public Ausleihe(Medium medium, LocalDate ausleiheDatum) { - this.medium = medium; - this.ausleiheDatum = ausleiheDatum; - this.rueckgabeFrist = ausleiheDatum.plusDays(medium.getAusleihdauer()); - this.zurueckgegeben = false; - } - - - // Methode zur Berechnung der Gebühren - public double berechneGebuehren(LocalDate aktuellesDatum) { - if (zurueckgegeben || aktuellesDatum.isBefore(rueckgabeFrist)) { - return 0.0; // Keine Gebühren, wenn noch rechtzeitig - } - - long ueberfaelligeTage = ChronoUnit.DAYS.between(rueckgabeFrist, aktuellesDatum); - double gebuehren = 0.0; - - if (ueberfaelligeTage <= 7) { - gebuehren = ueberfaelligeTage * 1.0; // 1€ pro Tag für die ersten 7 Tage - } else { - gebuehren = (7 * 1.0) + ((ueberfaelligeTage - 7) * 2.0); // 2€ pro Tag ab dem 8. Tag - } - - return gebuehren; - } - - public boolean isZurueckgegeben() { - return zurueckgegeben; - } - - public void setZurueckgegeben(boolean zurueckgegeben) { - this.zurueckgegeben = zurueckgegeben; - } - - public Medium getMedium() { - return medium; - } - - public LocalDate getRueckgabeFrist() { - return rueckgabeFrist; - } - - @Override - public String toString() { - return medium.getTitel() + " (Rückgabefrist: " + rueckgabeFrist + ")"; - } - - -} diff --git a/LibrarySystem/domain/benutzern/Admin.java b/LibrarySystem/domain/benutzern/Admin.java index ea3dab2..3b169c6 100644 --- a/LibrarySystem/domain/benutzern/Admin.java +++ b/LibrarySystem/domain/benutzern/Admin.java @@ -3,12 +3,10 @@ package LibrarySystem.domain.benutzern; import LibrarySystem.domain.medien.Medium; -import java.time.LocalDate; - public class Admin extends Benutzer { - public Admin(String name, int alter) { - super(name, alter, "A"); + public Admin(String kartennummer, String name, int alter) { + super(kartennummer,name, alter, "A"); } @Override @@ -32,10 +30,5 @@ public class Admin extends Benutzer { System.out.println("Keine offene Gebühren für " + benutzer.getName() + ".") ; } } - - @Override - public void ausleihen(Medium medium, LocalDate datum) { - System.out.println("Admins können keine Medien ausleihen."); - } } diff --git a/LibrarySystem/domain/benutzern/Benutzer.java b/LibrarySystem/domain/benutzern/Benutzer.java index f42c42e..0bcf057 100644 --- a/LibrarySystem/domain/benutzern/Benutzer.java +++ b/LibrarySystem/domain/benutzern/Benutzer.java @@ -1,23 +1,19 @@ package LibrarySystem.domain.benutzern; -import LibrarySystem.domain.ausleihe.*; import LibrarySystem.domain.medien.*; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; +import java.util.*; public abstract class Benutzer { private String kartennummer; private String name; private int alter; - private List ausleihen; + private List ausleihen; private double offeneGebuehren; private boolean gebuehrenBezahlt; - Benutzer(String name, int alter, String prefix) { - this.kartennummer = generiereKartennummer(prefix); + Benutzer(String kartennummer, String name, int alter, String prefix) { + this.kartennummer = prefix + kartennummer; this.name = name; this.alter = alter; this.ausleihen = new ArrayList<>(); @@ -25,98 +21,54 @@ public abstract class Benutzer { this.gebuehrenBezahlt = true; // Zu Beginn keine Gebühren offen } - public void aktualisiereGebuehren(LocalDate aktuellesDatum) { - if (gebuehrenBezahlt) return; // Keine Aktualisierung erforderlich, wenn bezahlt - - offeneGebuehren = 0.0; - for (Ausleihe ausleihe : ausleihen) { - offeneGebuehren += ausleihe.berechneGebuehren(aktuellesDatum); - } - } - - public void bezahleGebuehren() { - offeneGebuehren = 0.0; - gebuehrenBezahlt = true; - } - - public void ausleihen(Medium medium, LocalDate datum) { - Ausleihe neueAusleihe = new Ausleihe(medium, datum); - ausleihen.add(neueAusleihe); - System.out.println(name + " hat \"" + medium.getTitel() + "\" ausgeliehen. Rückgabefrist: " + neueAusleihe.getRueckgabeFrist()); - gebuehrenBezahlt = false; // Neue Ausleihe bedeutet potenziell offene Gebühren - } - - public void rueckgabe(int mediumId, LocalDate aktuellesDatum) { - Ausleihe zuRueckgeben = null; - - for (Ausleihe ausleihe : ausleihen) { - if (ausleihe.getMedium().getID() == mediumId) { - zuRueckgeben = ausleihe; - break; - } - } - - if (zuRueckgeben != null) { - ausleihen.remove(zuRueckgeben); - System.out.println("Das Medium \"" + zuRueckgeben.getMedium().getTitel() + "\" wurde zurückgegeben."); - if (aktuellesDatum.isAfter(zuRueckgeben.getRueckgabeFrist())) { - long ueberfaelligeTage = aktuellesDatum.toEpochDay() - zuRueckgeben.getRueckgabeFrist().toEpochDay(); - System.out.println("Achtung: Rückgabe verspätet! Überfällig um " + ueberfaelligeTage + " Tage."); - } - } else { - System.out.println("Kein Medium mit der ID \"" + mediumId + "\" gefunden."); - } - - // Noch ausgeliehene Medien anzeigen - System.out.println("Aktuell ausgeliehene Medien:"); - for (Ausleihe ausleihe : ausleihen) { - System.out.println(ausleihe); - } - } - - public void anzeigenAusleihen() { - System.out.println("Aktuell ausgeliehene Medien:"); - for (Ausleihe ausleihe : ausleihen) { - System.out.println(ausleihe); - } - } - - // Generiert eine eindeutige Kartennummer mit Präfix - private String generiereKartennummer(String prefix) { - return prefix + UUID.randomUUID().toString().substring(0, 8); - } + //Getter und Setter + public String getKartennummer() {return kartennummer;} + public void setkartennummer(String kartennummer) {this.kartennummer = kartennummer;} + public String getName() {return name;} + public void setName(String name) {this.name = name;} + public int getAlter() {return alter;} + public void setAlter(int alter) {this.alter = alter;} + public List getAusleihen() {return ausleihen;} // Abstrakte Methode für die Jahresgebühr public abstract double getJahresgebuehr(); - public String getKartennummer() { - return kartennummer; + //Methode fürs Ausleihen + public void ausleihen(Medium medium) { + if(!medium.istAusgeliehen()){ + ausleihen.add(medium); + medium.ausleihen(); + //System.out.println(name + " hat \"" + medium.getTitel() + "\" ausgeliehen. Rückgabefrist: " + medium.getRueckgabedatum()); + } else{ + System.out.println("Das Medium ist bereits ausgeliehen."); + } + //gebuehrenBezahlt = false; // Neue Ausleihe bedeutet potenziell offene Gebühren } - public void setkartennummer(String kartennummer) { - this.kartennummer = kartennummer; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; + //Methode für die Rückgabe + public void rueckgabe(Medium medium) { + if(ausleihen.contains(medium)){ + ausleihen.remove(medium); + medium.rueckgabeMedium(); + } + else{ + System.out.println("Dieses Medium von diesem Benutzer nicht ausgeliehen."); + } } - public int getAlter() { - return alter; + //Methode zum Anzeigen der Ausleihen eines Benutzers + public void anzeigenAusleihen() { + System.out.println("Aktuell ausgeliehene Medien von " + name + ":\n"); + for (Medium medium : ausleihen) { + System.out.println("- " + medium.getTitel() + " (Fällig am: " + medium.getRueckgabedatum() + ")\n"); + } } - public void setAlter(int alter) { - this.alter = alter; + public double setOffeneGebuehren(double gebuehren){ + return gebuehren+= gebuehren; } - public List getAusleihen() { - return ausleihen; - } public double getOffeneGebuehren() { return offeneGebuehren; @@ -126,6 +78,22 @@ public abstract class Benutzer { return gebuehrenBezahlt; } + /*public void aktualisiereGebuehren(Date aktuellesDatum) { + if (gebuehrenBezahlt) return; // Keine Aktualisierung erforderlich, wenn bezahlt + offeneGebuehren = 0.0; + for (Medium ausleihe : ausleihen) { + offeneGebuehren += ausleihe.berechneGebuehren(aktuellesDatum); + } + }*/ + + public void bezahleGebuehren() { + offeneGebuehren = 0.0; + gebuehrenBezahlt = true; + } + + + + @Override public String toString() { return "Name: " + name + ", Alter: " + alter + ", Kartennummer: " + kartennummer; diff --git a/LibrarySystem/domain/benutzern/Erwachsener.java b/LibrarySystem/domain/benutzern/Erwachsener.java index 07f25cb..63525fe 100644 --- a/LibrarySystem/domain/benutzern/Erwachsener.java +++ b/LibrarySystem/domain/benutzern/Erwachsener.java @@ -2,10 +2,10 @@ package LibrarySystem.domain.benutzern; public class Erwachsener extends Benutzer { - private static final double JAHRESGEBUEHR = 20.0; + private static final double JAHRESGEBUEHR = 50.0; - public Erwachsener(String name, int alter) { - super(name, alter, "E"); + public Erwachsener(String kartennummer,String name, int alter) { + super(kartennummer, name, alter, "E"); } @Override diff --git a/LibrarySystem/domain/benutzern/Student.java b/LibrarySystem/domain/benutzern/Student.java index 675a016..2015e12 100644 --- a/LibrarySystem/domain/benutzern/Student.java +++ b/LibrarySystem/domain/benutzern/Student.java @@ -2,10 +2,10 @@ package LibrarySystem.domain.benutzern; public class Student extends Benutzer { - private static final double JAHRESGEBUEHR_ERMAESSIGT = 10.0; + private static final double JAHRESGEBUEHR_ERMAESSIGT = 25.0; - public Student(String name, int alter) { - super(name, alter, "S"); + public Student(String kartennummer, String name, int alter) { + super(kartennummer, name, alter, "S"); } @Override diff --git a/LibrarySystem/domain/medien/Ausleihbar.java b/LibrarySystem/domain/medien/Ausleihbar.java index 7c2307d..c350fe0 100644 --- a/LibrarySystem/domain/medien/Ausleihbar.java +++ b/LibrarySystem/domain/medien/Ausleihbar.java @@ -1,6 +1,7 @@ package LibrarySystem.domain.medien; public interface Ausleihbar { - int getAusleihdauer(); - boolean getVerlaengerbar(); + void ausleihen(); + void rueckgabeMedium(); + boolean istOverdue(); } diff --git a/LibrarySystem/domain/medien/Brettspiel.java b/LibrarySystem/domain/medien/Brettspiel.java index 2c358e3..a6ac860 100644 --- a/LibrarySystem/domain/medien/Brettspiel.java +++ b/LibrarySystem/domain/medien/Brettspiel.java @@ -4,19 +4,24 @@ package LibrarySystem.domain.medien; public class Brettspiel extends Medium { private static final int AUSLEIHDAUER = 14; // 2 Wochen - public Brettspiel(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { + public Brettspiel(String ID, String titel, String autor, int erscheinungsjahr, String medienart) { super(ID, titel, autor, erscheinungsjahr, medienart); } - @Override - public boolean getVerlaengerbar() { - return false; - } - @Override public int getAusleihdauer() { return AUSLEIHDAUER; } + @Override + public boolean istVerlaengerbar() { + return false; //Keine Verlängerung + } + + @Override + public void verlaengern() { + System.out.println("Brettspiele können nicht verlängert werden."); + } + } diff --git a/LibrarySystem/domain/medien/Buch.java b/LibrarySystem/domain/medien/Buch.java index 279ddca..0b14b39 100644 --- a/LibrarySystem/domain/medien/Buch.java +++ b/LibrarySystem/domain/medien/Buch.java @@ -4,19 +4,32 @@ package LibrarySystem.domain.medien; public class Buch extends Medium { private static final int AUSLEIHDAUER = 28; //4 Wochen in Tagen + private int verlaengerungen = 3; - public Buch(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { + public Buch(String ID, String titel, String autor, int erscheinungsjahr, String medienart) { super(ID, titel, autor, erscheinungsjahr, medienart); } - @Override - public boolean getVerlaengerbar() { - return true; - } @Override public int getAusleihdauer() { return AUSLEIHDAUER; } + @Override + public boolean istVerlaengerbar() { + return verlaengerungen >0; + } + + @Override + public void verlaengern() { + if (istVerlaengerbar()) { + verlaengerungen--; + rechneRueckgabedatum(); //Verlängerung + } else{ + System.out.println("Keine Verlängerung mehr möglich."); + } + + } + } diff --git a/LibrarySystem/domain/medien/CD.java b/LibrarySystem/domain/medien/CD.java index f0f5f8d..90c332b 100644 --- a/LibrarySystem/domain/medien/CD.java +++ b/LibrarySystem/domain/medien/CD.java @@ -3,18 +3,24 @@ package LibrarySystem.domain.medien; public class CD extends Medium { public static final int AUSLEIHDAUER = 14; // 2 Wochen - public CD(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { + public CD(String ID, String titel, String autor, int erscheinungsjahr, String medienart) { super(ID, titel, autor, erscheinungsjahr, medienart); } - @Override - public boolean getVerlaengerbar() { - return false; - } @Override public int getAusleihdauer() { return AUSLEIHDAUER; } + @Override + public boolean istVerlaengerbar() { + return false; + } + + @Override + public void verlaengern() { + System.out.println("CDs können nicht verlängert werden."); + } + } diff --git a/LibrarySystem/domain/medien/DVD.java b/LibrarySystem/domain/medien/DVD.java index 58cd4e3..1edf16f 100644 --- a/LibrarySystem/domain/medien/DVD.java +++ b/LibrarySystem/domain/medien/DVD.java @@ -3,19 +3,25 @@ package LibrarySystem.domain.medien; public class DVD extends Medium { private static final int AUSLEIHDAUER = 7; // 1 Woche - public DVD(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { + public DVD(String ID, String titel, String autor, int erscheinungsjahr, String medienart) { super(ID, titel, autor, erscheinungsjahr, medienart); } - @Override - public boolean getVerlaengerbar() { - return false; - } @Override public int getAusleihdauer() { return AUSLEIHDAUER; } + @Override + public boolean istVerlaengerbar() { + return false; //Keine Verlängerung + } + + @Override + public void verlaengern() { + System.out.println("DVDs können nicht verlängert werden."); + } + } diff --git a/LibrarySystem/domain/medien/Medium.java b/LibrarySystem/domain/medien/Medium.java index a095b00..95c986e 100644 --- a/LibrarySystem/domain/medien/Medium.java +++ b/LibrarySystem/domain/medien/Medium.java @@ -1,78 +1,100 @@ package LibrarySystem.domain.medien; - public abstract class Medium implements Ausleihbar { - private int ID; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.Calendar; +import java.util.Date; + +public abstract class Medium implements Ausleihbar{ + private String ID; private String titel; private String autor; private int erscheinungsjahr; private String medienart; - private boolean istAusgeliehen; + private boolean ausgeliehen; + private Date rueckgabedatum; - public Medium(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { + public Medium(String ID, String titel, String autor, int erscheinungsjahr, String medienart) { this.ID = ID; this.titel = titel; this.autor = autor; this.erscheinungsjahr = erscheinungsjahr; this.medienart = medienart; - this.istAusgeliehen = false; + this.ausgeliehen = false; } - // Abstrakte Methoden: Jede Unterklasse definiert ihre Ausleihdauer und Verlängerbarkeit - public abstract boolean getVerlaengerbar(); - public abstract int getAusleihdauer(); - - public int getID() { + //Getter und Setter + public String getID() { return ID; } - - public void setID(int ID) { + public void setID(String ID) { this.ID = ID; } - public String getTitel() { return titel; } - public void setTitel(String titel) { this.titel = titel; } - public String getAutor() { return autor; } - public void setAutor(String autor) { this.autor = autor; } - public int getErscheinungsjahr() { return erscheinungsjahr; } - public void setErscheinungsjahr(int erscheinungsjahr) { this.erscheinungsjahr = erscheinungsjahr; } + public String getMedienart() {return medienart;} + public void setMedienart(String Medienart) {this.medienart = Medienart;} + public boolean istAusgeliehen() {return ausgeliehen;} + public void setAusgeliehen() {this.ausgeliehen = true;} + public void setRueckgabe(){this.ausgeliehen = false;} + public Date getRueckgabedatum(){return rueckgabedatum;} + public void setRueckgabedatum(Date rueckgabedatum){this.rueckgabedatum = rueckgabedatum;} - public String getMedienart() { - return medienart; - } - public void setMedienart(String Medienart) { - this.medienart = Medienart; - } + //Andere nützliche Methoden + public Date rechneRueckgabedatum(){ + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_YEAR, getAusleihdauer()); + this.rueckgabedatum = calendar.getTime(); + return rueckgabedatum; + } - public boolean istAusgeliehen() { - return istAusgeliehen; - } + //Abstrakte Methoden + public abstract int getAusleihdauer(); + public abstract boolean istVerlaengerbar(); + public abstract void verlaengern(); - public void setIstAusgeliehen(boolean istAusgeliehen) { - this.istAusgeliehen = istAusgeliehen; - } + @Override + public void ausleihen() { + if(!istAusgeliehen()){ + setAusgeliehen(); + rechneRueckgabedatum(); + } else{ + System.out.println("Medium ist bereits ausgeliehen."); + } + } - @Override + @Override + public void rueckgabeMedium() { + setRueckgabe(); + } + + @Override + public boolean istOverdue() { + return new Date().after(getRueckgabedatum()); + } + + + @Override public String toString() { return "ID: " + ID + ", Titel: " + titel + ", Autor: " + autor + ", Erscheinungsjahr: " + erscheinungsjahr; } - } +} diff --git a/LibrarySystem/domain/medien/Videospiel.java b/LibrarySystem/domain/medien/Videospiel.java index 2f2cf8e..2eb1fa0 100644 --- a/LibrarySystem/domain/medien/Videospiel.java +++ b/LibrarySystem/domain/medien/Videospiel.java @@ -2,19 +2,31 @@ package LibrarySystem.domain.medien; public class Videospiel extends Medium { private static final int AUSLEIHDAUER = 28; // 4 Wochen + private int verlaengerungen = 1; - public Videospiel(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { + public Videospiel(String ID, String titel, String autor, int erscheinungsjahr, String medienart) { super(ID, titel, autor, erscheinungsjahr, medienart); } - @Override - public boolean getVerlaengerbar() { - return true; - } @Override public int getAusleihdauer() { return AUSLEIHDAUER; } + @Override + public boolean istVerlaengerbar() { + return verlaengerungen>0; + } + + @Override + public void verlaengern() { + if (istVerlaengerbar()){ + verlaengerungen--; + rechneRueckgabedatum(); //Verlängerung + } else { + System.out.println("Keine Verlängerung mehr möglich"); + } + } + } diff --git a/LibrarySystem/facade/BibliothekSystem.java b/LibrarySystem/facade/BibliothekSystem.java index c03ee8d..7773595 100644 --- a/LibrarySystem/facade/BibliothekSystem.java +++ b/LibrarySystem/facade/BibliothekSystem.java @@ -1,56 +1,88 @@ package LibrarySystem.facade; +//Imports aus domain import LibrarySystem.domain.benutzern.*; import LibrarySystem.domain.medien.*; -import java.time.LocalDate; import java.util.ArrayList; -import java.util.HashMap; +import java.util.Date; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; public class BibliothekSystem { private List benutzerListe; - private LocalDate aktuellesDatum; + private Date aktuellesDatum; private List medienListe; public BibliothekSystem() { this.benutzerListe = new ArrayList<>(); - this.aktuellesDatum = LocalDate.now(); + this.aktuellesDatum = new Date(); this.medienListe = new ArrayList<>(); initialMedienHinzufuegen(); + initialBenutzerHinzufuegen(); } // Methode zum Hinzufügen von Medien private void initialMedienHinzufuegen() { // Beispiel-Medien hinzufügen - Buch buch1 = new Buch(123,"Java lernen", "Max Mustermann", 2020, "Buch"); - Buch buch2 = new Buch(234,"Java für Einsteiger", "Erika Musterfrau", 2014, "Buch"); - DVD dvd1 = new DVD(345,"Die Matrix", "Lana Wachowski", 2014, "DVD"); - CD cd1 = new CD(456,"Best of Mozart", "-", 1850, "CD"); - Brettspiel brettspiel1 = new Brettspiel(567,"Monopoly", "-",2010, "Brettspiel"); - Videospiel videospiel1 = new Videospiel(678,"Minecraft", "-", 2011, "Videospiel"); + Buch buch1 = new Buch("123","Java lernen", "Max Mustermann", 2020, "Buch"); + Buch buch2 = new Buch("234","Java für Einsteiger", "Erika Musterfrau", 2014, "Buch"); + Buch buch3 = new Buch("2345","Java für Einsteiger", "Erika Musterfrau", 2014, "Buch"); + DVD dvd1 = new DVD("345","Die Matrix", "Lana Wachowski", 2014, "DVD"); + DVD dvd2 = new DVD("543","Die Matrix", "Lana Wachowski", 2014, "DVD"); + CD cd1 = new CD("456","Best of Mozart", "-", 1850, "CD"); + CD cd2 = new CD("654","Christmas Carols", "-", 2000, "CD"); + Brettspiel brettspiel1 = new Brettspiel("567","Monopoly", "-",2010, "Brettspiel"); + Brettspiel brettspiel2 = new Brettspiel("765","Siedler von Catan", "-",2014, "Brettspiel"); + Videospiel videospiel1 = new Videospiel("678","Minecraft", "-", 2011, "Videospiel"); + Videospiel videospiel2 = new Videospiel("876","Call of Duty", "-", 2017, "Videospiel"); // Medien zur Bibliothek hinzufügen addMedium(buch1); addMedium(buch2); + addMedium(buch3); addMedium(dvd1); + addMedium(dvd2); addMedium(cd1); + addMedium(cd2); addMedium(brettspiel1); + addMedium(brettspiel2); addMedium(videospiel1); + addMedium(videospiel2); } + //Methode zum Hinzufügen von Medien in die Medienliste public void addMedium(Medium medium) { medienListe.add(medium); } + // Methode zum Hinzufügen von Benutzern und Admin + private void initialBenutzerHinzufuegen(){ + Benutzer student = new Student("1234567", "Ana Misk", 21); + Benutzer erwachsener = new Erwachsener("2345678","Paul Mark", 34); + Admin admin = new Admin("3456789", "Alisa Admin", 40); + benutzerRegistrieren(student); + benutzerRegistrieren(erwachsener); + benutzerRegistrieren(admin); + } + + //Methode zum Anmelden eines Benutzers + public Benutzer anmelden(String kartennummer) { + for (Benutzer benutzer : benutzerListe) { + if (benutzer.getKartennummer().equals(kartennummer)) { + return benutzer; + } + } + System.out.println("Benutzer nicht gefunden."); + return null; + } + // Durchsuchen der Medien nach einem Titel (Teilstring) und Filterung nach Eigenschaften public List durchsuchenMedien(String titelTeil, String medienart) { List medienliste = medienListe.stream() .filter(m -> m.getTitel().toLowerCase().contains(titelTeil.toLowerCase())) // Titel-Filter .filter(m -> medienart == null || m.getMedienart().equalsIgnoreCase(medienart)) // Medienart-Filter - //.filter(m -> istAusgeliehen == null || m.istAusgeliehen() == istAusgeliehen) // Ausleihstatus-Filter + //.filter(m -> ausgeliehen == null || m.istAusgeliehen() == istAusgeliehen) // Ausleihstatus-Filter .collect(Collectors.toList()); if(medienliste.isEmpty()) { @@ -62,12 +94,101 @@ public class BibliothekSystem { } - public void datumAendern(LocalDate neuesDatum) { + // Methode zum Ausleihen eines Mediums + public void ausleiheMedium(String kartennummer, String mediumID){ + Benutzer benutzer = anmelden(kartennummer); + Medium medium = findeMedium(mediumID); + if (benutzer != null && medium != null && !medium.istAusgeliehen()) { + benutzer.ausleihen(medium); + medium.setRueckgabedatum(medium.rechneRueckgabedatum()); + System.out.println(benutzer.getName() + " hat " + medium.getTitel() + " ausgeliehen."); + System.out.println("Rückgabedatum: " + medium.getRueckgabedatum()); + } else { + System.out.println("Ausleihe nicht möglich."); + } + } + + //Methode zum Rückgeben eines Mediums + public void rueckgabeMedium(String mediumID){ + Medium medium = findeMedium(mediumID); + Benutzer ausleiher = null; + if(medium == null) { + System.out.println("Medium mit der ID " + mediumID + " nicht gefunden."); + return; + } + if(!medium.istAusgeliehen()) { + System.out.println("Medium '"+medium.getTitel()+"' nicht gefunden."); + return; + } + + // Benutzer finden, der das Medium ausgeliehen hat + for(Benutzer benutzer : benutzerListe) { + if(benutzer.getAusleihen().contains(medium)){ + ausleiher = benutzer; + break; + } + } + + if(ausleiher == null) { + System.out.println("Kein Benutzer gefunden, der dieses Medium ausgeliehen hat."); + return; + } + + //Medium zurückgeben + try { + ausleiher.rueckgabe(medium); + System.out.println("Medium '"+medium.getTitel()+"' wurde erfolgreich zurückgegeben."); + + if(aktuellesDatum.after(medium.getRueckgabedatum())){ + long overdueTage = (aktuellesDatum.getTime() - medium.getRueckgabedatum().getTime()) / (1000 * 60 * 60 * 24); + System.out.println("überfällige Tagen: " + overdueTage); + double gebuehr = rechneOverdueGebuehren(overdueTage); + ausleiher.setOffeneGebuehren(gebuehr); + System.out.println("Überfällige Gebühren für " + ausleiher.getName() + gebuehr + " Eur."); + }else { + System.out.println("Keine überfällige Gebühren."); + } + + ausleiher.anzeigenAusleihen(); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } + + //Methode zum Verlängern eines Mediums + public void verlaengernMedium(String kartennummer,String mediumID){ + Benutzer benutzer = anmelden(kartennummer); + Medium medium = findeMedium(mediumID); + if (benutzer != null && medium != null && medium.istAusgeliehen()) { + medium.verlaengern(); + System.out.println("Leihfrist für '" + medium.getTitel() + "' verlängert."); + System.out.println("Neues Rückgabedatum: " + medium.getRueckgabedatum()); + } else { + System.out.println("Verlängerung nicht möglich."); + } + } + + //Methode zum Finden eines Benutzers + public Benutzer findeBenutzer(String kartennummer) { + return benutzerListe.get(Integer.parseInt(kartennummer)); + } + + //Methode zum Finden eines Mediums + public Medium findeMedium(String ID) { + return medienListe.stream() + .filter(m -> m.getID().equals(ID)) + .findFirst() + .orElse(null); + } + + + //Methode, um das Systemdatum zu setzen + public void setAktuellesDatum(Date neuesDatum) { this.aktuellesDatum = neuesDatum; System.out.println("Systemdatum geändert auf: " + aktuellesDatum); } - public LocalDate getAktuellesDatum() { + public Date getAktuellesDatum() { return aktuellesDatum; } @@ -76,7 +197,7 @@ public class BibliothekSystem { System.out.println("Benutzer registriert: " + benutzer); } - public void zeigeGebuehren(Benutzer benutzer) { + /*public void zeigeGebuehren(Benutzer benutzer) { benutzer.aktualisiereGebuehren(aktuellesDatum); if (benutzer.sindGebuehrenBezahlt()) { @@ -84,16 +205,10 @@ public class BibliothekSystem { } else { System.out.println("Aktuelle Gebühren für " + benutzer.getName() + ": " + benutzer.getOffeneGebuehren() + "€"); } + }*/ + + public double rechneOverdueGebuehren(long overdueTagen) { + return overdueTagen * 1; // 1 euro pro Tag } - public Benutzer anmelden(String kartennummer) { - for (Benutzer benutzer : benutzerListe) { - if (benutzer.getKartennummer().equals(kartennummer)) { - System.out.println("Willkommen, " + benutzer.getName() + "!"); - return benutzer; - } - } - System.out.println("Benutzer nicht gefunden."); - return null; - } }