From af98476a1ace80d6d8604c2140e61ea24ab00ed1 Mon Sep 17 00:00:00 2001 From: ioana Date: Sat, 16 Nov 2024 15:54:37 +0100 Subject: [PATCH] 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; } }