From 450270be4a7d45c0377d0d55af0042c2bc114c43 Mon Sep 17 00:00:00 2001 From: elarturo Date: Mon, 18 Nov 2024 23:06:02 +0100 Subject: [PATCH] fertige UI --- .../src/UILayer/LibraryUI.java | 238 +++++++++++++++++- 1 file changed, 225 insertions(+), 13 deletions(-) diff --git a/Bibliotheksverwaltung/src/UILayer/LibraryUI.java b/Bibliotheksverwaltung/src/UILayer/LibraryUI.java index a9d46a5..e16a95d 100644 --- a/Bibliotheksverwaltung/src/UILayer/LibraryUI.java +++ b/Bibliotheksverwaltung/src/UILayer/LibraryUI.java @@ -1,17 +1,229 @@ package UILayer; -public class LibraryUI { - private LibraryService libraryService; +import java.time.LocalDate; +import java.util.List; +import java.util.Scanner; +import ServiceLayer.*; +import DomainLayer.*; + +public class LibraryUI { + private LibraryService libraryService = new LibraryService(); + private BorrowService borrowService = new BorrowService(); + private User currentUser; + + public void start() { + // Beispielmedien hinzufügen + libraryService.initializeMedia(); + + Scanner scanner = new Scanner(System.in); + + while (true) { + System.out.println("\nAktuelles Datum: " + borrowService.getCurrentDate()); + System.out.println("1. Registrieren"); + System.out.println("2. Anmelden"); + System.out.println("3. Datum ändern"); + System.out.println("4. Katalog anzeigen"); + System.out.println("5. Medium ausleihen"); + System.out.println("6. Medium zurückgeben"); + System.out.println("7. Medium verlängern"); + System.out.println("8. Gebühren anzeigen"); + System.out.println("9. Admin-Zahlung bearbeiten"); + System.out.println("10. Medien durchsuchen"); + System.out.println("11. Beenden"); + + int choice = scanner.nextInt(); + switch (choice) { + case 1 -> registerUser(scanner); + case 2 -> login(scanner); + case 3 -> changeDate(scanner); + case 4 -> showCatalog(); + case 5 -> borrowMedia(scanner); + case 6 -> returnMedia(scanner); + case 7 -> renewMedia(scanner); + case 8 -> showFees(); + case 9 -> processAdminPayment(scanner); + case 10 -> searchMedia(scanner); + case 11 -> { + System.out.println("Programm beendet."); + return; + } + default -> System.out.println("Ungültige Auswahl."); + } + } + } + + private void registerUser(Scanner scanner) { + System.out.print("Geben Sie den Benutzertyp ein (1 = Erwachsener, 2 = Schüler/Student): "); + int userType = scanner.nextInt(); + scanner.nextLine(); // Puffer leeren + System.out.print("Geben Sie den Namen des Benutzers ein: "); + String name = scanner.nextLine(); + System.out.print("Geben Sie eine eindeutige Kartennummer ein: "); + String id = scanner.nextLine(); + + User newUser; + if (userType == 1) { + newUser = new Adult(id, name); + } else if (userType == 2) { + newUser = new Student(id, name); + } else { + System.out.println("Ungültiger Benutzertyp."); + return; + } + + libraryService.addUser(newUser); + System.out.println("Benutzer erfolgreich registriert: " + newUser); + } + + private void login(Scanner scanner) { + System.out.print("Geben Sie Ihre Benutzer-ID ein: "); + String userId = scanner.next(); + currentUser = libraryService.findUserById(userId); + if (currentUser != null) { + System.out.println("Willkommen, " + currentUser.getName() + "!"); + borrowService.showOutstandingFees(currentUser); + } else { + System.out.println("Benutzer nicht gefunden. Bitte zuerst registrieren."); + } + } + + private void changeDate(Scanner scanner) { + System.out.print("Geben Sie das neue Datum (YYYY-MM-DD) ein: "); + String newDateInput = scanner.next(); + + try { + LocalDate newDate = LocalDate.parse(newDateInput); + borrowService.setCurrentDate(newDate); // Datum ändern und ggf. fehlende borrowDates setzen + } catch (Exception e) { + System.out.println("Ungültiges Datumformat. Bitte erneut versuchen."); + } + } + + private void borrowMedia(Scanner scanner) { + if (currentUser == null) { + System.out.println("Bitte melden Sie sich zuerst an."); + return; + } + + System.out.print("Geben Sie die ID des Mediums ein, das Sie ausleihen möchten: "); + String mediumId = scanner.next(); + Medium medium = libraryService.findMediumById(mediumId); + + if (medium != null) { + borrowService.borrowMedium(currentUser, medium); // Heutiges Datum wird automatisch gesetzt + } else { + System.out.println("Medium nicht gefunden."); + } + } + + private void returnMedia(Scanner scanner) { + if (currentUser == null) { + System.out.println("Bitte melden Sie sich zuerst an."); + return; + } + + System.out.print("Geben Sie die ID des Mediums ein, das Sie zurückgeben möchten: "); + String mediumId = scanner.next(); + Medium medium = libraryService.findMediumById(mediumId); + + if (medium != null) { + borrowService.returnMedium(currentUser, medium); + } else { + System.out.println("Medium nicht gefunden."); + } + } + + private void showFees() { + if (currentUser == null) { + System.out.println("Bitte melden Sie sich zuerst an."); + return; + } + borrowService.showOutstandingFees(currentUser); + } + + private void processAdminPayment(Scanner scanner) { + // Überprüfen, ob der aktuelle Benutzer der Admin ist + if (!(currentUser instanceof Admin)) { + System.out.println("Nur der Admin kann Zahlungen bearbeiten."); + return; + } + + // Admin-Prozess: Zahlung bearbeiten + Admin admin = (Admin) currentUser; // Casten des aktuellen Benutzers zu Admin + + System.out.print("Geben Sie die Benutzer-ID ein, für den Sie die Zahlung bearbeiten möchten: "); + String userId = scanner.next(); + User user = libraryService.findUserById(userId); + + if (user == null) { + System.out.println("Benutzer nicht gefunden."); + return; + } + + System.out.print("Geben Sie den Zahlungsbetrag ein: "); + double amount = scanner.nextDouble(); + admin.processPayment(user, amount); // Admin kann die Zahlung bearbeiten + } + + private void searchMedia(Scanner scanner) { + System.out.print("Geben Sie einen Teil des Titels ein: "); + String query = scanner.next(); + System.out.print("Möchten Sie nur nicht ausgeliehene Medien anzeigen? (ja/nein): "); + boolean filterBorrowed = scanner.next().equalsIgnoreCase("ja"); + + System.out.print("Möchten Sie nach Medienart filtern? (lassen Sie es leer, wenn nicht): "); + String mediaType = scanner.next().trim(); + + List searchResults = libraryService.searchMedia(query, filterBorrowed, mediaType); + + if (searchResults.isEmpty()) { + System.out.println("Keine Medien gefunden."); + } else { + System.out.println("Gefundene Medien:"); + for (Medium medium : searchResults) { + String author = medium.getAuthor() != null ? medium.getAuthor() : "-"; + String borrowedStatus = medium.isBorrowed() ? "Ausgeliehen bis: " + medium.getDueDate() : "Verfügbar"; + System.out.println("Titel: " + medium.getTitle() + ", Autor: " + author + ", Medienart: " + + medium.getClass().getSimpleName() + ", " + borrowedStatus); + } + } + } + + private void renewMedia(Scanner scanner) { + if (currentUser == null) { + System.out.println("Bitte melden Sie sich zuerst an."); + return; + } + + System.out.print("Geben Sie die ID des Mediums ein, das Sie verlängern möchten: "); + String mediumId = scanner.next(); + Medium medium = libraryService.findMediumById(mediumId); + + if (medium != null) { + System.out.print( + "Möchten Sie das Ausleihdatum ändern? (YYYY-MM-DD oder leer lassen, um es unverändert zu lassen): "); + scanner.nextLine(); // Puffer leeren + String inputDate = scanner.nextLine(); + + LocalDate newBorrowDate = null; + if (!inputDate.isBlank()) { + try { + newBorrowDate = LocalDate.parse(inputDate); // Neues Ausleihdatum parsen + } catch (Exception e) { + System.out.println("Ungültiges Datum. Das ursprüngliche Ausleihdatum bleibt bestehen."); + } + } + + // Aufruf der renewMedium-Methode im BorrowService mit den Parametern + borrowService.renewMedium(currentUser, medium, newBorrowDate); // Hier übergeben wir currentUser, medium und + // newBorrowDate + } else { + System.out.println("Medium nicht gefunden."); + } + } + + private void showCatalog() { + libraryService.displayCatalog(); // Zeigt den gesamten Katalog mit Ausleihstatus an + } - public void start() { - while (true) { - System.out.println("1. Anmelden"); - System.out.println("2. Medien durchsuchen"); - System.out.println("3. Medien ausleihen"); - System.out.println("4. Medien zurückgeben"); - System.out.println("5. Gebühren anzeigen"); - System.out.println("6. Beenden"); - // Eingabe lesen und Aktionen aufrufen - } - } }