From a851d8796f539889fa316368f44f9fffa9792668 Mon Sep 17 00:00:00 2001 From: ioana Date: Sat, 16 Nov 2024 14:09:03 +0100 Subject: [PATCH 1/5] Aufgaben 1-5, BibTest muss noch mit der login-Funktion ausprobiert werden, todo: Aufgaben 6,7,8 --- LibrarySystem/Main.java | 4 - LibrarySystem/UI/BibTest.java | 56 +++++++ LibrarySystem/domain/Ausleihbar.java | 6 - LibrarySystem/domain/Brettspiel.java | 19 --- LibrarySystem/domain/Buch.java | 20 --- LibrarySystem/domain/CD.java | 19 --- LibrarySystem/domain/DVD.java | 19 --- LibrarySystem/domain/Videospiel.java | 20 --- LibrarySystem/domain/ausleihe/Ausleihe.java | 64 ++++++++ LibrarySystem/domain/benutzern/Admin.java | 41 +++++ LibrarySystem/domain/benutzern/Benutzer.java | 142 ++++++++++++++++++ .../domain/benutzern/Erwachsener.java | 15 ++ LibrarySystem/domain/benutzern/Student.java | 15 ++ LibrarySystem/domain/medien/Ausleihbar.java | 6 + LibrarySystem/domain/medien/Brettspiel.java | 22 +++ LibrarySystem/domain/medien/Buch.java | 22 +++ LibrarySystem/domain/medien/CD.java | 20 +++ LibrarySystem/domain/medien/DVD.java | 21 +++ LibrarySystem/domain/{ => medien}/Medium.java | 16 +- LibrarySystem/domain/medien/Videospiel.java | 20 +++ LibrarySystem/facade/BibliothekSystem.java | 54 +++++++ 21 files changed, 508 insertions(+), 113 deletions(-) delete mode 100644 LibrarySystem/Main.java create mode 100644 LibrarySystem/UI/BibTest.java delete mode 100644 LibrarySystem/domain/Ausleihbar.java delete mode 100644 LibrarySystem/domain/Brettspiel.java delete mode 100644 LibrarySystem/domain/Buch.java delete mode 100644 LibrarySystem/domain/CD.java delete mode 100644 LibrarySystem/domain/DVD.java delete mode 100644 LibrarySystem/domain/Videospiel.java create mode 100644 LibrarySystem/domain/ausleihe/Ausleihe.java create mode 100644 LibrarySystem/domain/benutzern/Admin.java create mode 100644 LibrarySystem/domain/benutzern/Benutzer.java create mode 100644 LibrarySystem/domain/benutzern/Erwachsener.java create mode 100644 LibrarySystem/domain/benutzern/Student.java create mode 100644 LibrarySystem/domain/medien/Ausleihbar.java create mode 100644 LibrarySystem/domain/medien/Brettspiel.java create mode 100644 LibrarySystem/domain/medien/Buch.java create mode 100644 LibrarySystem/domain/medien/CD.java create mode 100644 LibrarySystem/domain/medien/DVD.java rename LibrarySystem/domain/{ => medien}/Medium.java (68%) create mode 100644 LibrarySystem/domain/medien/Videospiel.java create mode 100644 LibrarySystem/facade/BibliothekSystem.java diff --git a/LibrarySystem/Main.java b/LibrarySystem/Main.java deleted file mode 100644 index 27fc07d..0000000 --- a/LibrarySystem/Main.java +++ /dev/null @@ -1,4 +0,0 @@ -package LibrarySystem; - -public class Main { -} diff --git a/LibrarySystem/UI/BibTest.java b/LibrarySystem/UI/BibTest.java new file mode 100644 index 0000000..0832625 --- /dev/null +++ b/LibrarySystem/UI/BibTest.java @@ -0,0 +1,56 @@ +package LibrarySystem.UI; + +import LibrarySystem.domain.benutzern.*; +import LibrarySystem.domain.medien.*; +import LibrarySystem.facade.*; + +import java.time.LocalDate; + +// Testklasse zum Erstellen und Verwalten von Benutzern +public class BibTest { + public static void main(String[] args) { + + // Bibliothekssystem initialisieren + BibliothekSystem system = new BibliothekSystem(); + + // Benutzer erstellen + Benutzer erwachsener = new Erwachsener("Max" , "Mustermann", 35); + Benutzer student = new Student("Anna", "Beispiel", 21); + Admin admin = new Admin("Lisa", "Admin", 40); + + system.benutzerRegistrieren(erwachsener); + system.benutzerRegistrieren(student); + + // Medien erstellen + Medium buch = new Buch(123, "Java Programmieren", "BP", 2020); + Medium dvd = new DVD(456, "Der große Film", "JP",2018); + + // Datum setzen und Ausleihe simulieren + system.datumAendern(LocalDate.of(2024, 11, 10)); + erwachsener.ausleihen(buch, system.getAktuellesDatum()); + student.ausleihen(dvd, system.getAktuellesDatum()); + system.zeigeGebuehren(erwachsener); + + + // Rückgabe simulieren + system.datumAendern(LocalDate.of(2024, 12, 15)); // Datum ändern + student.rueckgabe(456, system.getAktuellesDatum()); + system.zeigeGebuehren(erwachsener); + admin.bestaetigeGebuehrenzahlung(erwachsener); + system.zeigeGebuehren(erwachsener); + + // Medien anzeigen + erwachsener.anzeigenAusleihen(); + + // Benutzerinformationen anzeigen + System.out.println(erwachsener); + System.out.println("Jahresgebühr: " + erwachsener.getJahresgebuehr() + " EUR"); + + System.out.println(student); + System.out.println("Jahresgebühr: " + student.getJahresgebuehr() + " EUR"); + + System.out.println(admin); + System.out.println("Jahresgebühr: " + admin.getJahresgebuehr() + " EUR"); + + } +} \ No newline at end of file diff --git a/LibrarySystem/domain/Ausleihbar.java b/LibrarySystem/domain/Ausleihbar.java deleted file mode 100644 index 2ec4229..0000000 --- a/LibrarySystem/domain/Ausleihbar.java +++ /dev/null @@ -1,6 +0,0 @@ -package LibrarySystem.domain; - -public interface Ausleihbar { - int ausleihdauer(); - boolean verlängerbar(); -} diff --git a/LibrarySystem/domain/Brettspiel.java b/LibrarySystem/domain/Brettspiel.java deleted file mode 100644 index ab8c97f..0000000 --- a/LibrarySystem/domain/Brettspiel.java +++ /dev/null @@ -1,19 +0,0 @@ -package LibrarySystem.domain; - -public class Brettspiel extends Medium implements Ausleihbar { - private static final int AUSLEIHDAUER = 14; // 2 Wochen - - public Brettspiel(String ID, String titel, String autor, int erscheinungsjahr) { - super(ID, titel, autor, erscheinungsjahr); - } - - @Override - public int ausleihdauer() { - return AUSLEIHDAUER; - } - - @Override - public boolean verlängerbar() { - return false; - } -} diff --git a/LibrarySystem/domain/Buch.java b/LibrarySystem/domain/Buch.java deleted file mode 100644 index 9ed6e4b..0000000 --- a/LibrarySystem/domain/Buch.java +++ /dev/null @@ -1,20 +0,0 @@ -package LibrarySystem.domain; - - - class Buch extends Medium implements Ausleihbar { - private static final int AUSLEIHDAUER = 28; //4 Wochen in Tagen - - public Buch(String ID, String titel, String autor, int erscheinungsjahr) { - super(ID, titel, autor, erscheinungsjahr); - } - - @Override - public int ausleihdauer() { - return AUSLEIHDAUER; - } - - @Override - public boolean verlängerbar() { - return true; - } -} diff --git a/LibrarySystem/domain/CD.java b/LibrarySystem/domain/CD.java deleted file mode 100644 index c645312..0000000 --- a/LibrarySystem/domain/CD.java +++ /dev/null @@ -1,19 +0,0 @@ -package LibrarySystem.domain; - -public class CD extends Medium implements Ausleihbar { - public static final int AUSLEIHDAUER = 14; // 2 Wochen - - public CD(String ID, String titel, String autor, int erscheinungsjahr) { - super(ID, titel, autor, erscheinungsjahr); - } - - @Override - public int ausleihdauer() { - return AUSLEIHDAUER; - } - - @Override - public boolean verlängerbar() { - return false; - } -} diff --git a/LibrarySystem/domain/DVD.java b/LibrarySystem/domain/DVD.java deleted file mode 100644 index 5ecdd9c..0000000 --- a/LibrarySystem/domain/DVD.java +++ /dev/null @@ -1,19 +0,0 @@ -package LibrarySystem.domain; - -public class DVD extends Medium implements Ausleihbar { - private static final int AUSLEIHDAUER = 7; // 1 Woche - - public DVD(String ID, String titel, String autor, int erscheinungsjahr) { - super(ID, titel, autor, erscheinungsjahr); - } - - @Override - public int ausleihdauer() { - return AUSLEIHDAUER; - } - - @Override - public boolean verlängerbar() { - return false; - } -} diff --git a/LibrarySystem/domain/Videospiel.java b/LibrarySystem/domain/Videospiel.java deleted file mode 100644 index 5eb7972..0000000 --- a/LibrarySystem/domain/Videospiel.java +++ /dev/null @@ -1,20 +0,0 @@ -package LibrarySystem.domain; - -public class Videospiel extends Medium implements Ausleihbar { - private static final int AUSLEIHDAUER = 28; // 4 Wochen - - public Videospiel(String ID, String titel, String autor, int erscheinungsjahr) { - super(ID, titel, autor, erscheinungsjahr); - } - - - @Override - public int ausleihdauer() { - return AUSLEIHDAUER; - } - - @Override - public boolean verlängerbar() { - return true; - } -} diff --git a/LibrarySystem/domain/ausleihe/Ausleihe.java b/LibrarySystem/domain/ausleihe/Ausleihe.java new file mode 100644 index 0000000..e62d1b8 --- /dev/null +++ b/LibrarySystem/domain/ausleihe/Ausleihe.java @@ -0,0 +1,64 @@ +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 new file mode 100644 index 0000000..5dd5051 --- /dev/null +++ b/LibrarySystem/domain/benutzern/Admin.java @@ -0,0 +1,41 @@ +package LibrarySystem.domain.benutzern; + + +import LibrarySystem.domain.medien.Medium; + +import java.time.LocalDate; + +public class Admin extends Benutzer { + + public Admin(String vorname, String nachname, int alter) { + super(vorname, nachname, alter, "A"); + } + + @Override + public double getJahresgebuehr() { + return 0; + } + + // Admin-spezifische Methoden: Benutzerübersicht anzeigen + public void anzeigenBenutzer(Benutzer[] benutzerListe) { + System.out.println("\nBenutzerübersicht:"); + for (Benutzer b : benutzerListe) { + System.out.println(b); + } + } + + public void bestaetigeGebuehrenzahlung(Benutzer benutzer) { + if(benutzer.getOffeneGebuehren() > 0) { + benutzer.bezahleGebuehren(); + System.out.println("Gebühren von " + benutzer.getVorname() + " " + benutzer.getNachname() + " wurden erfolgreich bezahlt."); + } else { + System.out.println("Keine offene Gebühren für " + benutzer.getVorname() + " " + benutzer.getNachname() + ".") ; + } + } + + @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 new file mode 100644 index 0000000..5aba833 --- /dev/null +++ b/LibrarySystem/domain/benutzern/Benutzer.java @@ -0,0 +1,142 @@ +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; + +public abstract class Benutzer { + private String kartennummer; + private String vorname; + private String nachname; + private int alter; + private List ausleihen; + private double offeneGebuehren; + private boolean gebuehrenBezahlt; + + Benutzer(String vorname, String nachname, int alter, String prefix) { + this.kartennummer = generiereKartennummer(prefix); + this.vorname = vorname; + this.nachname = nachname; + this.alter = alter; + this.ausleihen = new ArrayList<>(); + this.offeneGebuehren = 0.0; + 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(vorname + " " + nachname + " 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); + } + + // Abstrakte Methode für die Jahresgebühr + public abstract double getJahresgebuehr(); + + public String getKartennummer() { + return kartennummer; + } + + public void setkartennummer(String kartennummer) { + this.kartennummer = kartennummer; + } + + public String getVorname() { + return vorname; + } + + public void setVorname(String vorname) { + this.vorname = vorname; + } + + public String getNachname() { + return nachname; + } + + public void setNachname(String nachname) { + this.nachname = nachname; + } + + public int getAlter() { + return alter; + } + + public void setAlter(int alter) { + this.alter = alter; + } + + public List getAusleihen() { + return ausleihen; + } + + public double getOffeneGebuehren() { + return offeneGebuehren; + } + + public boolean sindGebuehrenBezahlt() { + return gebuehrenBezahlt; + } + + @Override + public String toString() { + return "Vorame: " + vorname + ", Nachname: " + nachname + ", Alter: " + alter + ", Kartennummer: " + kartennummer; + } +} diff --git a/LibrarySystem/domain/benutzern/Erwachsener.java b/LibrarySystem/domain/benutzern/Erwachsener.java new file mode 100644 index 0000000..04a897d --- /dev/null +++ b/LibrarySystem/domain/benutzern/Erwachsener.java @@ -0,0 +1,15 @@ +package LibrarySystem.domain.benutzern; + + public class Erwachsener extends Benutzer { + + private static final double JAHRESGEBUEHR = 20.0; + + public Erwachsener(String vorname, String nachname, int alter) { + super(vorname, nachname, alter, "E"); + } + + @Override + public double getJahresgebuehr() { + return JAHRESGEBUEHR; + } +} diff --git a/LibrarySystem/domain/benutzern/Student.java b/LibrarySystem/domain/benutzern/Student.java new file mode 100644 index 0000000..1d9bc17 --- /dev/null +++ b/LibrarySystem/domain/benutzern/Student.java @@ -0,0 +1,15 @@ +package LibrarySystem.domain.benutzern; + + public class Student extends Benutzer { + + private static final double JAHRESGEBUEHR_ERMAESSIGT = 10.0; + + public Student(String vorname, String nachname, int alter) { + super(vorname, nachname, alter, "S"); + } + + @Override + public double getJahresgebuehr() { + return JAHRESGEBUEHR_ERMAESSIGT; + } +} diff --git a/LibrarySystem/domain/medien/Ausleihbar.java b/LibrarySystem/domain/medien/Ausleihbar.java new file mode 100644 index 0000000..7c2307d --- /dev/null +++ b/LibrarySystem/domain/medien/Ausleihbar.java @@ -0,0 +1,6 @@ +package LibrarySystem.domain.medien; + +public interface Ausleihbar { + int getAusleihdauer(); + boolean getVerlaengerbar(); +} diff --git a/LibrarySystem/domain/medien/Brettspiel.java b/LibrarySystem/domain/medien/Brettspiel.java new file mode 100644 index 0000000..eb2df79 --- /dev/null +++ b/LibrarySystem/domain/medien/Brettspiel.java @@ -0,0 +1,22 @@ +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) { + super(ID, titel, autor, erscheinungsjahr); + } + + @Override + public boolean getVerlaengerbar() { + return false; + } + + + @Override + public int getAusleihdauer() { + return AUSLEIHDAUER; + } + +} diff --git a/LibrarySystem/domain/medien/Buch.java b/LibrarySystem/domain/medien/Buch.java new file mode 100644 index 0000000..8951cd9 --- /dev/null +++ b/LibrarySystem/domain/medien/Buch.java @@ -0,0 +1,22 @@ +package LibrarySystem.domain.medien; + + + +public class Buch extends Medium { + private static final int AUSLEIHDAUER = 28; //4 Wochen in Tagen + + public Buch(int ID, String titel, String autor, int erscheinungsjahr) { + super(ID, titel, autor, erscheinungsjahr); + } + + @Override + public boolean getVerlaengerbar() { + return true; + } + + @Override + public int getAusleihdauer() { + return AUSLEIHDAUER; + } + +} diff --git a/LibrarySystem/domain/medien/CD.java b/LibrarySystem/domain/medien/CD.java new file mode 100644 index 0000000..4c79714 --- /dev/null +++ b/LibrarySystem/domain/medien/CD.java @@ -0,0 +1,20 @@ +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) { + super(ID, titel, autor, erscheinungsjahr); + } + + @Override + public boolean getVerlaengerbar() { + return false; + } + + @Override + public int getAusleihdauer() { + return AUSLEIHDAUER; + } + +} diff --git a/LibrarySystem/domain/medien/DVD.java b/LibrarySystem/domain/medien/DVD.java new file mode 100644 index 0000000..bead19b --- /dev/null +++ b/LibrarySystem/domain/medien/DVD.java @@ -0,0 +1,21 @@ +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) { + super(ID, titel, autor, erscheinungsjahr); + } + + @Override + public boolean getVerlaengerbar() { + return false; + } + + @Override + public int getAusleihdauer() { + return AUSLEIHDAUER; + } + + +} diff --git a/LibrarySystem/domain/Medium.java b/LibrarySystem/domain/medien/Medium.java similarity index 68% rename from LibrarySystem/domain/Medium.java rename to LibrarySystem/domain/medien/Medium.java index 44c7560..a3a1630 100644 --- a/LibrarySystem/domain/Medium.java +++ b/LibrarySystem/domain/medien/Medium.java @@ -1,24 +1,28 @@ -package LibrarySystem.domain; +package LibrarySystem.domain.medien; - abstract class Medium { - private String ID; + public abstract class Medium implements Ausleihbar { + private int ID; private String titel; private String autor; private int erscheinungsjahr; - public Medium(String ID, String titel, String autor, int erscheinungsjahr) { + public Medium(int ID, String titel, String autor, int erscheinungsjahr) { this.ID = ID; this.titel = titel; this.autor = autor; this.erscheinungsjahr = erscheinungsjahr; } + // Abstrakte Methoden: Jede Unterklasse definiert ihre Ausleihdauer und Verlängerbarkeit + public abstract boolean getVerlaengerbar(); - public String getID() { + public abstract int getAusleihdauer(); + + public int getID() { return ID; } - public void setID(String ID) { + public void setID(int ID) { this.ID = ID; } diff --git a/LibrarySystem/domain/medien/Videospiel.java b/LibrarySystem/domain/medien/Videospiel.java new file mode 100644 index 0000000..3b51fd8 --- /dev/null +++ b/LibrarySystem/domain/medien/Videospiel.java @@ -0,0 +1,20 @@ +package LibrarySystem.domain.medien; + +public class Videospiel extends Medium { + private static final int AUSLEIHDAUER = 28; // 4 Wochen + + public Videospiel(int ID, String titel, String autor, int erscheinungsjahr) { + super(ID, titel, autor, erscheinungsjahr); + } + + @Override + public boolean getVerlaengerbar() { + return true; + } + + @Override + public int getAusleihdauer() { + return AUSLEIHDAUER; + } + +} diff --git a/LibrarySystem/facade/BibliothekSystem.java b/LibrarySystem/facade/BibliothekSystem.java new file mode 100644 index 0000000..f4eefcd --- /dev/null +++ b/LibrarySystem/facade/BibliothekSystem.java @@ -0,0 +1,54 @@ +package LibrarySystem.facade; + +import LibrarySystem.domain.benutzern.*; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class BibliothekSystem { + private List benutzerListe; + private LocalDate aktuellesDatum; + + public BibliothekSystem() { + this.benutzerListe = new ArrayList<>(); + this.aktuellesDatum = LocalDate.now(); + } + + public void datumAendern(LocalDate neuesDatum) { + this.aktuellesDatum = neuesDatum; + System.out.println("Systemdatum geändert auf: " + aktuellesDatum); + } + + public LocalDate getAktuellesDatum() { + return aktuellesDatum; + } + + public void benutzerRegistrieren(Benutzer benutzer) { + benutzerListe.add(benutzer); + System.out.println("Benutzer registriert: " + benutzer); + } + + public void zeigeGebuehren(Benutzer benutzer) { + benutzer.aktualisiereGebuehren(aktuellesDatum); + + if (benutzer.sindGebuehrenBezahlt()) { + System.out.println("Alle Gebühren von " + benutzer.getVorname() + " " + benutzer.getNachname() + " sind bezahlt."); + } else { + System.out.println("Aktuelle Gebühren für " + benutzer.getVorname() + " " + benutzer.getNachname() + ": " + benutzer.getOffeneGebuehren() + "€"); + } + } + + public Benutzer anmelden(String kartennummer) { + for (Benutzer benutzer : benutzerListe) { + if (benutzer.getKartennummer().equals(kartennummer)) { + System.out.println("Willkommen, " + benutzer.getVorname() + " " + benutzer.getNachname() + "!"); + return benutzer; + } + } + System.out.println("Benutzer nicht gefunden."); + return null; + } +} From af98476a1ace80d6d8604c2140e61ea24ab00ed1 Mon Sep 17 00:00:00 2001 From: ioana Date: Sat, 16 Nov 2024 15:54:37 +0100 Subject: [PATCH 2/5] Alle Aufgaben erledigt, Verbesserungen folgen --- LibrarySystem/UI/BibTest.java | 14 +- LibrarySystem/UI/BibliothekTest.java | 21 +++ LibrarySystem/UI/UI.java | 132 ++++++++++++++++++ LibrarySystem/domain/benutzern/Admin.java | 8 +- LibrarySystem/domain/benutzern/Benutzer.java | 27 ++-- .../domain/benutzern/Erwachsener.java | 4 +- LibrarySystem/domain/benutzern/Student.java | 4 +- LibrarySystem/domain/medien/Brettspiel.java | 4 +- LibrarySystem/domain/medien/Buch.java | 4 +- LibrarySystem/domain/medien/CD.java | 4 +- LibrarySystem/domain/medien/DVD.java | 4 +- LibrarySystem/domain/medien/Medium.java | 23 ++- LibrarySystem/domain/medien/Videospiel.java | 4 +- LibrarySystem/facade/BibliothekSystem.java | 51 ++++++- 14 files changed, 258 insertions(+), 46 deletions(-) create mode 100644 LibrarySystem/UI/BibliothekTest.java create mode 100644 LibrarySystem/UI/UI.java diff --git a/LibrarySystem/UI/BibTest.java b/LibrarySystem/UI/BibTest.java index 0832625..5a65eff 100644 --- a/LibrarySystem/UI/BibTest.java +++ b/LibrarySystem/UI/BibTest.java @@ -14,16 +14,16 @@ public class BibTest { BibliothekSystem system = new BibliothekSystem(); // Benutzer erstellen - Benutzer erwachsener = new Erwachsener("Max" , "Mustermann", 35); - Benutzer student = new Student("Anna", "Beispiel", 21); - Admin admin = new Admin("Lisa", "Admin", 40); + Benutzer erwachsener = new Erwachsener("Max", 35); + Benutzer student = new Student("Anna", 21); + Admin admin = new Admin("Lisa Admin", 40); system.benutzerRegistrieren(erwachsener); system.benutzerRegistrieren(student); // Medien erstellen - Medium buch = new Buch(123, "Java Programmieren", "BP", 2020); - Medium dvd = new DVD(456, "Der große Film", "JP",2018); + 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)); @@ -35,11 +35,13 @@ public class BibTest { // Rückgabe simulieren system.datumAendern(LocalDate.of(2024, 12, 15)); // Datum ändern student.rueckgabe(456, system.getAktuellesDatum()); + + //Bezahlung der Gebühren simulieren system.zeigeGebuehren(erwachsener); admin.bestaetigeGebuehrenzahlung(erwachsener); system.zeigeGebuehren(erwachsener); - // Medien anzeigen + // Medien eines Benutzers anzeigen erwachsener.anzeigenAusleihen(); // Benutzerinformationen anzeigen diff --git a/LibrarySystem/UI/BibliothekTest.java b/LibrarySystem/UI/BibliothekTest.java new file mode 100644 index 0000000..b677b7c --- /dev/null +++ b/LibrarySystem/UI/BibliothekTest.java @@ -0,0 +1,21 @@ +package LibrarySystem.UI; + +import LibrarySystem.domain.benutzern.*; +import LibrarySystem.facade.BibliothekSystem; + +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 new file mode 100644 index 0000000..a94ed82 --- /dev/null +++ b/LibrarySystem/UI/UI.java @@ -0,0 +1,132 @@ +package LibrarySystem.UI; + +import LibrarySystem.domain.benutzern.*; +import LibrarySystem.facade.BibliothekSystem; + +import java.util.Scanner; + +public class UI { + private BibliothekSystem system; + private Scanner scanner; + + public UI(BibliothekSystem system) { + this.system = system; + this.scanner = new Scanner(System.in); + } + + public void starten() { + while (true) { + System.out.println("Willkommen in der Bibliothek!"); + 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("6. Verlängern der Leihfrist"); + System.out.println("7. Admin-Login (Überfällige Gebühren verbuchen)"); + System.out.println("0. Beenden"); + 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: + System.out.println("Auf Wiedersehen!"); + return; + 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."); + } + + 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."); + } + 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); + } + } + + 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(); + System.out.println("Leihfrist für Medium mit ID " + mediumId + " verlängert."); + // Logik zur Verlängerung der Leihfrist hinzufügen + } + + private void adminLogin() { + System.out.print("Bitte geben Sie Ihre Admin-Kartennummer ein: "); + String kartennummer = scanner.nextLine(); + Benutzer admin = system.anmelden(kartennummer); + if (admin instanceof Admin) { + System.out.println("Admin erfolgreich eingeloggt."); + System.out.print("Bitte geben Sie die Kartennummer des Benutzers ein, dessen Gebühren Sie verbuchen möchten: "); + String benutzerKartennummer = scanner.nextLine(); + Benutzer benutzer = system.anmelden(benutzerKartennummer); + if (benutzer != null) { + ((Admin) admin).bestaetigeGebuehrenzahlung(benutzer); + } + } else { + System.out.println("Ungültige Admin-Kartennummer."); + } + } + + + +} + + + diff --git a/LibrarySystem/domain/benutzern/Admin.java b/LibrarySystem/domain/benutzern/Admin.java index 5dd5051..ea3dab2 100644 --- a/LibrarySystem/domain/benutzern/Admin.java +++ b/LibrarySystem/domain/benutzern/Admin.java @@ -7,8 +7,8 @@ import java.time.LocalDate; public class Admin extends Benutzer { - public Admin(String vorname, String nachname, int alter) { - super(vorname, nachname, alter, "A"); + public Admin(String name, int alter) { + super(name, alter, "A"); } @Override @@ -27,9 +27,9 @@ public class Admin extends Benutzer { public void bestaetigeGebuehrenzahlung(Benutzer benutzer) { if(benutzer.getOffeneGebuehren() > 0) { benutzer.bezahleGebuehren(); - System.out.println("Gebühren von " + benutzer.getVorname() + " " + benutzer.getNachname() + " wurden erfolgreich bezahlt."); + System.out.println("Gebühren von " + benutzer.getName() + " wurden erfolgreich bezahlt."); } else { - System.out.println("Keine offene Gebühren für " + benutzer.getVorname() + " " + benutzer.getNachname() + ".") ; + System.out.println("Keine offene Gebühren für " + benutzer.getName() + ".") ; } } diff --git a/LibrarySystem/domain/benutzern/Benutzer.java b/LibrarySystem/domain/benutzern/Benutzer.java index 5aba833..f42c42e 100644 --- a/LibrarySystem/domain/benutzern/Benutzer.java +++ b/LibrarySystem/domain/benutzern/Benutzer.java @@ -10,17 +10,15 @@ import java.util.UUID; public abstract class Benutzer { private String kartennummer; - private String vorname; - private String nachname; + private String name; private int alter; private List ausleihen; private double offeneGebuehren; private boolean gebuehrenBezahlt; - Benutzer(String vorname, String nachname, int alter, String prefix) { + Benutzer(String name, int alter, String prefix) { this.kartennummer = generiereKartennummer(prefix); - this.vorname = vorname; - this.nachname = nachname; + this.name = name; this.alter = alter; this.ausleihen = new ArrayList<>(); this.offeneGebuehren = 0.0; @@ -44,7 +42,7 @@ public abstract class Benutzer { public void ausleihen(Medium medium, LocalDate datum) { Ausleihe neueAusleihe = new Ausleihe(medium, datum); ausleihen.add(neueAusleihe); - System.out.println(vorname + " " + nachname + " hat \"" + medium.getTitel() + "\" ausgeliehen. Rückgabefrist: " + neueAusleihe.getRueckgabeFrist()); + System.out.println(name + " hat \"" + medium.getTitel() + "\" ausgeliehen. Rückgabefrist: " + neueAusleihe.getRueckgabeFrist()); gebuehrenBezahlt = false; // Neue Ausleihe bedeutet potenziell offene Gebühren } @@ -99,21 +97,14 @@ public abstract class Benutzer { this.kartennummer = kartennummer; } - public String getVorname() { - return vorname; + public String getName() { + return name; } - public void setVorname(String vorname) { - this.vorname = vorname; + public void setName(String name) { + this.name = name; } - public String getNachname() { - return nachname; - } - - public void setNachname(String nachname) { - this.nachname = nachname; - } public int getAlter() { return alter; @@ -137,6 +128,6 @@ public abstract class Benutzer { @Override public String toString() { - return "Vorame: " + vorname + ", Nachname: " + nachname + ", Alter: " + alter + ", Kartennummer: " + kartennummer; + return "Name: " + name + ", Alter: " + alter + ", Kartennummer: " + kartennummer; } } diff --git a/LibrarySystem/domain/benutzern/Erwachsener.java b/LibrarySystem/domain/benutzern/Erwachsener.java index 04a897d..07f25cb 100644 --- a/LibrarySystem/domain/benutzern/Erwachsener.java +++ b/LibrarySystem/domain/benutzern/Erwachsener.java @@ -4,8 +4,8 @@ package LibrarySystem.domain.benutzern; private static final double JAHRESGEBUEHR = 20.0; - public Erwachsener(String vorname, String nachname, int alter) { - super(vorname, nachname, alter, "E"); + public Erwachsener(String name, int alter) { + super(name, alter, "E"); } @Override diff --git a/LibrarySystem/domain/benutzern/Student.java b/LibrarySystem/domain/benutzern/Student.java index 1d9bc17..675a016 100644 --- a/LibrarySystem/domain/benutzern/Student.java +++ b/LibrarySystem/domain/benutzern/Student.java @@ -4,8 +4,8 @@ package LibrarySystem.domain.benutzern; private static final double JAHRESGEBUEHR_ERMAESSIGT = 10.0; - public Student(String vorname, String nachname, int alter) { - super(vorname, nachname, alter, "S"); + public Student(String name, int alter) { + super(name, alter, "S"); } @Override diff --git a/LibrarySystem/domain/medien/Brettspiel.java b/LibrarySystem/domain/medien/Brettspiel.java index eb2df79..2c358e3 100644 --- a/LibrarySystem/domain/medien/Brettspiel.java +++ b/LibrarySystem/domain/medien/Brettspiel.java @@ -4,8 +4,8 @@ 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) { - super(ID, titel, autor, erscheinungsjahr); + public Brettspiel(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { + super(ID, titel, autor, erscheinungsjahr, medienart); } @Override diff --git a/LibrarySystem/domain/medien/Buch.java b/LibrarySystem/domain/medien/Buch.java index 8951cd9..279ddca 100644 --- a/LibrarySystem/domain/medien/Buch.java +++ b/LibrarySystem/domain/medien/Buch.java @@ -5,8 +5,8 @@ package LibrarySystem.domain.medien; public class Buch extends Medium { private static final int AUSLEIHDAUER = 28; //4 Wochen in Tagen - public Buch(int ID, String titel, String autor, int erscheinungsjahr) { - super(ID, titel, autor, erscheinungsjahr); + public Buch(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { + super(ID, titel, autor, erscheinungsjahr, medienart); } @Override diff --git a/LibrarySystem/domain/medien/CD.java b/LibrarySystem/domain/medien/CD.java index 4c79714..f0f5f8d 100644 --- a/LibrarySystem/domain/medien/CD.java +++ b/LibrarySystem/domain/medien/CD.java @@ -3,8 +3,8 @@ 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) { - super(ID, titel, autor, erscheinungsjahr); + public CD(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { + super(ID, titel, autor, erscheinungsjahr, medienart); } @Override diff --git a/LibrarySystem/domain/medien/DVD.java b/LibrarySystem/domain/medien/DVD.java index bead19b..58cd4e3 100644 --- a/LibrarySystem/domain/medien/DVD.java +++ b/LibrarySystem/domain/medien/DVD.java @@ -3,8 +3,8 @@ 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) { - super(ID, titel, autor, erscheinungsjahr); + public DVD(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { + super(ID, titel, autor, erscheinungsjahr, medienart); } @Override diff --git a/LibrarySystem/domain/medien/Medium.java b/LibrarySystem/domain/medien/Medium.java index a3a1630..a095b00 100644 --- a/LibrarySystem/domain/medien/Medium.java +++ b/LibrarySystem/domain/medien/Medium.java @@ -5,12 +5,16 @@ package LibrarySystem.domain.medien; private String titel; private String autor; private int erscheinungsjahr; + private String medienart; + private boolean istAusgeliehen; - public Medium(int ID, String titel, String autor, int erscheinungsjahr) { + public Medium(int 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; } // Abstrakte Methoden: Jede Unterklasse definiert ihre Ausleihdauer und Verlängerbarkeit @@ -50,8 +54,25 @@ package LibrarySystem.domain.medien; this.erscheinungsjahr = erscheinungsjahr; } + public String getMedienart() { + return medienart; + } + + public void setMedienart(String Medienart) { + this.medienart = Medienart; + } + + public boolean istAusgeliehen() { + return istAusgeliehen; + } + + public void setIstAusgeliehen(boolean istAusgeliehen) { + this.istAusgeliehen = istAusgeliehen; + } + @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 3b51fd8..2f2cf8e 100644 --- a/LibrarySystem/domain/medien/Videospiel.java +++ b/LibrarySystem/domain/medien/Videospiel.java @@ -3,8 +3,8 @@ package LibrarySystem.domain.medien; public class Videospiel extends Medium { private static final int AUSLEIHDAUER = 28; // 4 Wochen - public Videospiel(int ID, String titel, String autor, int erscheinungsjahr) { - super(ID, titel, autor, erscheinungsjahr); + public Videospiel(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { + super(ID, titel, autor, erscheinungsjahr, medienart); } @Override diff --git a/LibrarySystem/facade/BibliothekSystem.java b/LibrarySystem/facade/BibliothekSystem.java index f4eefcd..c03ee8d 100644 --- a/LibrarySystem/facade/BibliothekSystem.java +++ b/LibrarySystem/facade/BibliothekSystem.java @@ -1,20 +1,65 @@ package LibrarySystem.facade; import LibrarySystem.domain.benutzern.*; +import LibrarySystem.domain.medien.*; import java.time.LocalDate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public class BibliothekSystem { private List benutzerListe; private LocalDate aktuellesDatum; + private List medienListe; public BibliothekSystem() { this.benutzerListe = new ArrayList<>(); this.aktuellesDatum = LocalDate.now(); + this.medienListe = new ArrayList<>(); + initialMedienHinzufuegen(); + } + + // 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"); + + // Medien zur Bibliothek hinzufügen + addMedium(buch1); + addMedium(buch2); + addMedium(dvd1); + addMedium(cd1); + addMedium(brettspiel1); + addMedium(videospiel1); + } + + public void addMedium(Medium medium) { + medienListe.add(medium); + } + + // 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 + .collect(Collectors.toList()); + + if(medienliste.isEmpty()) { + System.out.println("Keine passende Medien gefunden."); + return null; + } else { + return medienliste; + } + } public void datumAendern(LocalDate neuesDatum) { @@ -35,16 +80,16 @@ public class BibliothekSystem { benutzer.aktualisiereGebuehren(aktuellesDatum); if (benutzer.sindGebuehrenBezahlt()) { - System.out.println("Alle Gebühren von " + benutzer.getVorname() + " " + benutzer.getNachname() + " sind bezahlt."); + System.out.println("Alle Gebühren von " + benutzer.getName() + " sind bezahlt."); } else { - System.out.println("Aktuelle Gebühren für " + benutzer.getVorname() + " " + benutzer.getNachname() + ": " + benutzer.getOffeneGebuehren() + "€"); + System.out.println("Aktuelle Gebühren für " + benutzer.getName() + ": " + benutzer.getOffeneGebuehren() + "€"); } } public Benutzer anmelden(String kartennummer) { for (Benutzer benutzer : benutzerListe) { if (benutzer.getKartennummer().equals(kartennummer)) { - System.out.println("Willkommen, " + benutzer.getVorname() + " " + benutzer.getNachname() + "!"); + System.out.println("Willkommen, " + benutzer.getName() + "!"); return benutzer; } } From 1faa14fd5f43b7ef0445f2af6ba24160b1618f1a Mon Sep 17 00:00:00 2001 From: ioana Date: Sun, 17 Nov 2024 15:20:38 +0100 Subject: [PATCH 3/5] =?UTF-8?q?Verbesserungen,=20Berechnung=20der=20Geb?= =?UTF-8?q?=C3=BChren=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; - } } From 32bba7e3f9953577fb55c3f6cfcee99b9215b387 Mon Sep 17 00:00:00 2001 From: ioana Date: Sun, 17 Nov 2024 16:10:26 +0100 Subject: [PATCH 4/5] =?UTF-8?q?Anzeige=20der=20Geb=C3=BChrenkonto,=20Berec?= =?UTF-8?q?hnung=20der=20Geb=C3=BChren=20muss=20noch=20verbessert=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LibrarySystem/UI/UI.java | 2 +- LibrarySystem/domain/benutzern/Benutzer.java | 27 ++++++++------------ LibrarySystem/facade/BibliothekSystem.java | 27 ++++++++++++++++++-- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/LibrarySystem/UI/UI.java b/LibrarySystem/UI/UI.java index 6655948..8597f06 100644 --- a/LibrarySystem/UI/UI.java +++ b/LibrarySystem/UI/UI.java @@ -90,7 +90,7 @@ public class UI { String kartennummer = scanner.nextLine(); Benutzer benutzer = system.anmelden(kartennummer); if (benutzer != null) { - //system.zeigeGebuehren(benutzer); + system.zeigeGebuehrenkonto(kartennummer); benutzer.anzeigenAusleihen(); } } diff --git a/LibrarySystem/domain/benutzern/Benutzer.java b/LibrarySystem/domain/benutzern/Benutzer.java index 0bcf057..9d8843b 100644 --- a/LibrarySystem/domain/benutzern/Benutzer.java +++ b/LibrarySystem/domain/benutzern/Benutzer.java @@ -10,7 +10,6 @@ public abstract class Benutzer { private int alter; private List ausleihen; private double offeneGebuehren; - private boolean gebuehrenBezahlt; Benutzer(String kartennummer, String name, int alter, String prefix) { this.kartennummer = prefix + kartennummer; @@ -18,7 +17,6 @@ public abstract class Benutzer { this.alter = alter; this.ausleihen = new ArrayList<>(); this.offeneGebuehren = 0.0; - this.gebuehrenBezahlt = true; // Zu Beginn keine Gebühren offen } //Getter und Setter @@ -29,6 +27,8 @@ public abstract class Benutzer { public int getAlter() {return alter;} public void setAlter(int alter) {this.alter = alter;} public List getAusleihen() {return ausleihen;} + public double getOffeneGebuehren() {return offeneGebuehren;} + // Abstrakte Methode für die Jahresgebühr public abstract double getJahresgebuehr(); @@ -59,25 +59,21 @@ public abstract class Benutzer { //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"); + if(ausleihen.isEmpty()){ + System.out.println("Keine ausgeliehenen Medien."); + }else { + 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 double setOffeneGebuehren(double gebuehren){ - return gebuehren+= gebuehren; + public double addiereZuOffeneGebuehren(double gebuehren){ + return this.offeneGebuehren+= gebuehren; } - public double getOffeneGebuehren() { - return offeneGebuehren; - } - - public boolean sindGebuehrenBezahlt() { - return gebuehrenBezahlt; - } - /*public void aktualisiereGebuehren(Date aktuellesDatum) { if (gebuehrenBezahlt) return; // Keine Aktualisierung erforderlich, wenn bezahlt offeneGebuehren = 0.0; @@ -88,7 +84,6 @@ public abstract class Benutzer { public void bezahleGebuehren() { offeneGebuehren = 0.0; - gebuehrenBezahlt = true; } diff --git a/LibrarySystem/facade/BibliothekSystem.java b/LibrarySystem/facade/BibliothekSystem.java index 7773595..650482b 100644 --- a/LibrarySystem/facade/BibliothekSystem.java +++ b/LibrarySystem/facade/BibliothekSystem.java @@ -143,7 +143,7 @@ public class BibliothekSystem { 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); + ausleiher.addiereZuOffeneGebuehren(gebuehr); System.out.println("Überfällige Gebühren für " + ausleiher.getName() + gebuehr + " Eur."); }else { System.out.println("Keine überfällige Gebühren."); @@ -155,6 +155,23 @@ public class BibliothekSystem { } } + //Methode zum Anzeigen des Gebührenkontos + public void zeigeGebuehrenkonto(String kartennummer){ + Benutzer benutzer = anmelden(kartennummer); + if (benutzer == null) { + System.out.println("Kein Benutzer gefunden."); + return; + } + + double gebuehren = benutzer.getOffeneGebuehren(); + if (gebuehren>0){ + System.out.println("Offene Gebühren für " + benutzer.getName() + ": " + gebuehren + " Eur."); + } else { + System.out.println("Keine offene Gebühren für "+ benutzer.getName()); + } + + } + //Methode zum Verlängern eines Mediums public void verlaengernMedium(String kartennummer,String mediumID){ Benutzer benutzer = anmelden(kartennummer); @@ -208,7 +225,13 @@ public class BibliothekSystem { }*/ public double rechneOverdueGebuehren(long overdueTagen) { - return overdueTagen * 1; // 1 euro pro Tag + if (overdueTagen <= 0){ + return 0; + } + if (overdueTagen <= 7){ + return overdueTagen * 1.0; //1 euro pro Tag für die ersten 7 Tage + } + return (7*1.0) + ((overdueTagen - 7) * 2.0); // 2 euro pro Tag ab dem 8. Tag } } From 8e49f7a0ed1e6063670f6cec5b09aa994775bccb Mon Sep 17 00:00:00 2001 From: ioana Date: Sun, 17 Nov 2024 16:11:42 +0100 Subject: [PATCH 5/5] =?UTF-8?q?Anzeige=20der=20Geb=C3=BChrenkonto,=20Berec?= =?UTF-8?q?hnung=20der=20Geb=C3=BChren=20muss=20noch=20verbessert=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .idea/.gitignore diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml