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..0c62d36 --- /dev/null +++ b/LibrarySystem/UI/BibTest.java @@ -0,0 +1,58 @@ +/*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", 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,"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)); + 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()); + + //Bezahlung der Gebühren simulieren + system.zeigeGebuehren(erwachsener); + admin.bestaetigeGebuehrenzahlung(erwachsener); + system.zeigeGebuehren(erwachsener); + + // Medien eines Benutzers 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/UI/BibliothekTest.java b/LibrarySystem/UI/BibliothekTest.java new file mode 100644 index 0000000..29bcc58 --- /dev/null +++ b/LibrarySystem/UI/BibliothekTest.java @@ -0,0 +1,15 @@ +package LibrarySystem.UI; + +import LibrarySystem.domain.benutzern.*; +import LibrarySystem.facade.BibliothekSystem; + +public class BibliothekTest { + + public static void main(String[] args) { + BibliothekSystem system = new BibliothekSystem(); + + // 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..8597f06 --- /dev/null +++ b/LibrarySystem/UI/UI.java @@ -0,0 +1,128 @@ +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!\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 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\n"); + System.out.print("Bitte wählen Sie eine Option: "); + int auswahl = scanner.nextInt(); + scanner.nextLine(); + + switch (auswahl) { + 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."); + } + } + } + + //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(); + 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.zeigeGebuehrenkonto(kartennummer); + 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(); + System.out.println("Leihfrist für Medium mit ID " + mediumId + " verlängert."); + // 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(); + 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/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/Medium.java b/LibrarySystem/domain/Medium.java deleted file mode 100644 index 44c7560..0000000 --- a/LibrarySystem/domain/Medium.java +++ /dev/null @@ -1,53 +0,0 @@ -package LibrarySystem.domain; - - abstract class Medium { - private String ID; - private String titel; - private String autor; - private int erscheinungsjahr; - - public Medium(String ID, String titel, String autor, int erscheinungsjahr) { - this.ID = ID; - this.titel = titel; - this.autor = autor; - this.erscheinungsjahr = erscheinungsjahr; - } - - - public String getID() { - return 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; - } - - @Override - public String toString() { - return "ID: " + ID + ", Titel: " + titel + ", Autor: " + autor + ", Erscheinungsjahr: " + erscheinungsjahr; - } - } 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/benutzern/Admin.java b/LibrarySystem/domain/benutzern/Admin.java new file mode 100644 index 0000000..3b169c6 --- /dev/null +++ b/LibrarySystem/domain/benutzern/Admin.java @@ -0,0 +1,34 @@ +package LibrarySystem.domain.benutzern; + + +import LibrarySystem.domain.medien.Medium; + +public class Admin extends Benutzer { + + public Admin(String kartennummer, String name, int alter) { + super(kartennummer,name, 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.getName() + " wurden erfolgreich bezahlt."); + } else { + 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 new file mode 100644 index 0000000..9d8843b --- /dev/null +++ b/LibrarySystem/domain/benutzern/Benutzer.java @@ -0,0 +1,96 @@ +package LibrarySystem.domain.benutzern; + +import LibrarySystem.domain.medien.*; + +import java.util.*; + +public abstract class Benutzer { + private String kartennummer; + private String name; + private int alter; + private List ausleihen; + private double offeneGebuehren; + + Benutzer(String kartennummer, String name, int alter, String prefix) { + this.kartennummer = prefix + kartennummer; + this.name = name; + this.alter = alter; + this.ausleihen = new ArrayList<>(); + this.offeneGebuehren = 0.0; + } + + //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;} + public double getOffeneGebuehren() {return offeneGebuehren;} + + + // Abstrakte Methode für die Jahresgebühr + public abstract double getJahresgebuehr(); + + //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 + } + + //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."); + } + } + + + //Methode zum Anzeigen der Ausleihen eines Benutzers + public void anzeigenAusleihen() { + 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 addiereZuOffeneGebuehren(double gebuehren){ + return this.offeneGebuehren+= gebuehren; + } + + + /*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; + } + + + + + @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 new file mode 100644 index 0000000..63525fe --- /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 = 50.0; + + public Erwachsener(String kartennummer,String name, int alter) { + super(kartennummer, name, 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..2015e12 --- /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 = 25.0; + + public Student(String kartennummer, String name, int alter) { + super(kartennummer, name, 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..c350fe0 --- /dev/null +++ b/LibrarySystem/domain/medien/Ausleihbar.java @@ -0,0 +1,7 @@ +package LibrarySystem.domain.medien; + +public interface Ausleihbar { + void ausleihen(); + void rueckgabeMedium(); + boolean istOverdue(); +} diff --git a/LibrarySystem/domain/medien/Brettspiel.java b/LibrarySystem/domain/medien/Brettspiel.java new file mode 100644 index 0000000..a6ac860 --- /dev/null +++ b/LibrarySystem/domain/medien/Brettspiel.java @@ -0,0 +1,27 @@ +package LibrarySystem.domain.medien; + + +public class Brettspiel extends Medium { + private static final int AUSLEIHDAUER = 14; // 2 Wochen + + public Brettspiel(String ID, String titel, String autor, int erscheinungsjahr, String medienart) { + super(ID, titel, autor, erscheinungsjahr, medienart); + } + + + @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 new file mode 100644 index 0000000..0b14b39 --- /dev/null +++ b/LibrarySystem/domain/medien/Buch.java @@ -0,0 +1,35 @@ +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(String ID, String titel, String autor, int erscheinungsjahr, String medienart) { + super(ID, titel, autor, erscheinungsjahr, medienart); + } + + + @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 new file mode 100644 index 0000000..90c332b --- /dev/null +++ b/LibrarySystem/domain/medien/CD.java @@ -0,0 +1,26 @@ +package LibrarySystem.domain.medien; + +public class CD extends Medium { + public static final int AUSLEIHDAUER = 14; // 2 Wochen + + public CD(String ID, String titel, String autor, int erscheinungsjahr, String medienart) { + super(ID, titel, autor, erscheinungsjahr, medienart); + } + + + @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 new file mode 100644 index 0000000..1edf16f --- /dev/null +++ b/LibrarySystem/domain/medien/DVD.java @@ -0,0 +1,27 @@ +package LibrarySystem.domain.medien; + +public class DVD extends Medium { + private static final int AUSLEIHDAUER = 7; // 1 Woche + + public DVD(String ID, String titel, String autor, int erscheinungsjahr, String medienart) { + super(ID, titel, autor, erscheinungsjahr, medienart); + } + + + @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 new file mode 100644 index 0000000..95c986e --- /dev/null +++ b/LibrarySystem/domain/medien/Medium.java @@ -0,0 +1,100 @@ +package LibrarySystem.domain.medien; + +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 ausgeliehen; + private Date rueckgabedatum; + + 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.ausgeliehen = false; + } + + + //Getter und Setter + public String getID() { + return 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;} + + + //Andere nützliche Methoden + public Date rechneRueckgabedatum(){ + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_YEAR, getAusleihdauer()); + this.rueckgabedatum = calendar.getTime(); + return rueckgabedatum; + } + + //Abstrakte Methoden + public abstract int getAusleihdauer(); + public abstract boolean istVerlaengerbar(); + public abstract void verlaengern(); + + @Override + public void ausleihen() { + if(!istAusgeliehen()){ + setAusgeliehen(); + rechneRueckgabedatum(); + } else{ + System.out.println("Medium ist bereits ausgeliehen."); + } + } + + @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 new file mode 100644 index 0000000..2eb1fa0 --- /dev/null +++ b/LibrarySystem/domain/medien/Videospiel.java @@ -0,0 +1,32 @@ +package LibrarySystem.domain.medien; + +public class Videospiel extends Medium { + private static final int AUSLEIHDAUER = 28; // 4 Wochen + private int verlaengerungen = 1; + + public Videospiel(String ID, String titel, String autor, int erscheinungsjahr, String medienart) { + super(ID, titel, autor, erscheinungsjahr, medienart); + } + + + @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 new file mode 100644 index 0000000..650482b --- /dev/null +++ b/LibrarySystem/facade/BibliothekSystem.java @@ -0,0 +1,237 @@ +package LibrarySystem.facade; + +//Imports aus domain +import LibrarySystem.domain.benutzern.*; +import LibrarySystem.domain.medien.*; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +public class BibliothekSystem { + private List benutzerListe; + private Date aktuellesDatum; + private List medienListe; + + public BibliothekSystem() { + this.benutzerListe = new ArrayList<>(); + 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"); + 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 -> ausgeliehen == null || m.istAusgeliehen() == istAusgeliehen) // Ausleihstatus-Filter + .collect(Collectors.toList()); + + if(medienliste.isEmpty()) { + System.out.println("Keine passende Medien gefunden."); + return null; + } else { + return medienliste; + } + + } + + // 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.addiereZuOffeneGebuehren(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 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); + 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 Date 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.getName() + " sind bezahlt."); + } else { + System.out.println("Aktuelle Gebühren für " + benutzer.getName() + ": " + benutzer.getOffeneGebuehren() + "€"); + } + }*/ + + public double rechneOverdueGebuehren(long overdueTagen) { + 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 + } + +}