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; + } +}