package Bibliothek; import java.time.LocalDate; import java.util.Scanner; public class UI { private Bibliotheksverwaltung verwaltung; private Scanner scanner; public UI(Bibliotheksverwaltung verwaltung) { this.verwaltung = verwaltung; this.scanner = new Scanner(System.in); } public void start() { String auswahl; do { zeigeMenue(); auswahl = scanner.nextLine(); verarbeiteAuswahl(auswahl); } while (!auswahl.equals("0")); System.out.println("Programm beendet."); } private void zeigeMenue() { System.out.println("\n--- Bibliothekssystem ---"); System.out.println("1. Anmelden (Kunde)"); System.out.println("2. Anmelden (Admin)"); System.out.println("3. Abmelden"); System.out.println("4. Neuen Kunden registrieren"); System.out.println("5. Medien durchsuchen"); System.out.println("6. Medien anzeigen"); System.out.println("7. Medien ausleihen"); System.out.println("8. Medien zurückgeben"); System.out.println("9. Medien verlängern"); System.out.println("10. Gebühren anzeigen"); System.out.println("11. Gebühren verbuchen (Admin)"); System.out.println("12. Medien hinzufügen (Admin)"); System.out.println("13. Meine ausgeliehenen Medien anzeigen"); System.out.println("14. Datum einstellen"); System.out.println("0. Beenden"); System.out.print("Auswahl: "); } private void verarbeiteAuswahl(String auswahl) { switch (auswahl) { case "1" -> loginKunde(); case "2" -> loginAdmin(); case "3" -> logout(); case "4" -> kundeRegistrieren(); case "5" -> medienDurchsuchen(); case "6" -> alleMedienAnzeigen(); case "7" -> medienAusleihen(); case "8" -> medienZurueckgeben(); case "9" -> medienVerlaengern(); case "10" -> gebuehrenAnzeigen(); case "11" -> gebuehrenVerbuchen(); case "12" -> medienHinzufuegen(); case "13" -> ausgeliehenenMedienAnzeigen(); case "14" -> datumEinstellen(); case "0" -> System.out.println("Beende das Programm..."); default -> System.out.println("Ungültige Auswahl. Bitte erneut versuchen."); } } /* * Wartet auf die Eingabe der Kunden-Id, wenn diese existiert wird der User eingeloggt */ private void loginKunde() { System.out.print("Kunden-ID eingeben: "); String kundenId = scanner.nextLine(); if (verwaltung.loginKunde(kundenId)) { System.out.println("Erfolgreich als Kunde angemeldet."); } else { System.out.println("Anmeldung fehlgeschlagen."); } } /* * Wartet auf die Eingaben der Admin-ID, einloggen erfolgt gleich wie beim Kunden */ private void loginAdmin() { System.out.print("Admin-ID eingeben: "); String adminId = scanner.nextLine(); if (verwaltung.loginAdmin(adminId)) { System.out.println("Erfolgreich als Admin angemeldet."); } else { System.out.println("Anmeldung fehlgeschlagen."); } } private void logout() { verwaltung.logout(); } /* * Fragt den neuen Kunden nach seinem Namen als auch, ob es ein Student ist * Wenn der Kunde ein Student ist, dann wird die Kunden-ID mit einem S sonst einem K beginnend */ private void kundeRegistrieren() { System.out.print("Name eingeben: "); String name = scanner.nextLine(); System.out.print("Ist der Kunde ein Student? (ja/nein): "); String studentAntwort = scanner.nextLine().toLowerCase(); boolean istStudent = studentAntwort.equals("ja"); Kunde neuerKunde = verwaltung.registriereKunde(name, istStudent); } /* * Wartet auf die Einagbe des Kunden nach was gesucht werden soll * Nimmt dann den Suchbegriff und vergleicht den eingegebenen Begriff mit allem in Medien */ private void medienDurchsuchen() { System.out.print("Suchbegriff eingeben: "); String suchbegriff = scanner.nextLine(); var ergebnisse = verwaltung.sucheMedienNachTitel(suchbegriff); if (ergebnisse.isEmpty()) { System.out.println("Keine Medien gefunden."); } else { System.out.println("Suchergebnisse:"); ergebnisse.forEach(System.out::println); } } private void alleMedienAnzeigen() { verwaltung.alleMedienAnzeigen(); } private void medienAusleihen() { if (!(verwaltung.getEingeloggterBenutzer() instanceof Kunde)) { System.out.println("Bitte loggen Sie sich als Kunde ein, um Medien auszuleihen."); return; } System.out.print("Medium-ID eingeben: "); String medienId = scanner.nextLine().trim(); verwaltung.medienAusleihen(medienId); } private void medienZurueckgeben() { if (!(verwaltung.getEingeloggterBenutzer() instanceof Kunde)) { System.out.println("Bitte loggen Sie sich als Kunde ein, um Medien zurückzugeben."); return; } System.out.print("Medium-ID eingeben: "); String medienId = scanner.nextLine(); Kunde kunde = (Kunde) verwaltung.getEingeloggterBenutzer(); verwaltung.medienZurueckgeben(medienId, kunde.getId()); } private void medienVerlaengern() { System.out.print("Medium-ID eingeben: "); String medienId = scanner.nextLine(); if (!(verwaltung.getEingeloggterBenutzer() instanceof Kunde)) { System.out.println("Nur Kunden können Medien verlängern."); return; } Kunde kunde = (Kunde) verwaltung.getEingeloggterBenutzer(); Medien medien = kunde.sucheAusgeliehenesMedium(medienId); // Suche im Kundenbestand if (medien == null) { System.out.println("Medium wurde nicht gefunden oder gehört nicht zu diesem Kunden."); return; } if (!medien.verlaengern()) { System.out.println("Die Verlängerung war nicht erfolgreich."); } } private void gebuehrenAnzeigen() { if (!(verwaltung.getEingeloggterBenutzer() instanceof Kunde)) { System.out.println("Nur eingeloggte Kunden können ihre Gebühren anzeigen."); return; } Kunde kunde = (Kunde) verwaltung.getEingeloggterBenutzer(); System.out.println("Gesamtgebühren für " + kunde.getName() + ": " + kunde.getGebuehren() + " €"); } private void gebuehrenVerbuchen() { if (!(verwaltung.getEingeloggterBenutzer() instanceof Admin)) { System.out.println("Nur Admins können Gebühren verbuchen. Bitte als Admin einloggen."); return; } System.out.print("Kunden-ID eingeben: "); String kundenId = scanner.nextLine(); Kunde kunde = verwaltung.getKundenListe().get(kundenId); if (kunde == null) { System.out.println("Kunde nicht gefunden."); return; } System.out.print("Betrag eingeben: "); try { double betrag = Double.parseDouble(scanner.nextLine()); Admin admin = (Admin) verwaltung.getEingeloggterBenutzer(); admin.gebuehrenVerbuchen(kunde, betrag); System.out.println("Gebühren erfolgreich verbucht."); } catch (NumberFormatException e) { System.out.println("Ungültige Eingabe. Bitte einen gültigen Betrag eingeben."); } } private void medienHinzufuegen() { if (!(verwaltung.getEingeloggterBenutzer() instanceof Admin)) { System.out.println("Nur Admins können Medien hinzufügen. Bitte als Admin einloggen."); return; } System.out.print("Medienart (Buch, DVD, CD, Brettspiel, Videospiel) eingeben: "); String medienart = scanner.nextLine(); System.out.print("ID eingeben: "); String id = scanner.nextLine(); System.out.print("Titel eingeben: "); String titel = scanner.nextLine(); System.out.print("Erscheinungsjahr eingeben: "); int jahr; try { jahr = Integer.parseInt(scanner.nextLine()); Medien medien = null; switch (medienart.toLowerCase()) { case "buch": System.out.print("Autor eingeben: "); String autor = scanner.nextLine(); System.out.print("Seitenanzahl eingeben: "); int seiten = Integer.parseInt(scanner.nextLine()); medien = new Buch(id, titel, jahr, autor, seiten); break; case "dvd": System.out.print("Regisseur eingeben: "); String regisseur = scanner.nextLine(); System.out.print("Spieldauer (Minuten) eingeben: "); int spieldauerDVD = Integer.parseInt(scanner.nextLine()); medien = new DVD(id, titel, jahr, regisseur, spieldauerDVD); break; case "cd": System.out.print("Künstler eingeben: "); String kuenstler = scanner.nextLine(); System.out.print("Anzahl der Tracks eingeben: "); int tracks = Integer.parseInt(scanner.nextLine()); medien = new CD(id, titel, jahr, kuenstler, tracks); break; case "brettspiel": System.out.print("Spieleranzahl eingeben: "); int spieler = Integer.parseInt(scanner.nextLine()); System.out.print("Spieldauer (Minuten) eingeben: "); int spieldauerBrettspiel = Integer.parseInt(scanner.nextLine()); medien = new Brettspiel(id, titel, jahr, spieler, spieldauerBrettspiel); break; case "videospiel": System.out.print("Plattform eingeben: "); String plattform = scanner.nextLine(); System.out.print("Entwickler eingeben: "); String entwickler = scanner.nextLine(); medien = new Videospiel(id, titel, jahr, plattform, entwickler); break; default: System.out.println("Ungültige Medienart."); return; } verwaltung.medienHinzufuegen(medien); System.out.println("Medium erfolgreich hinzugefügt."); } catch (NumberFormatException e) { System.out.println("Ungültige Eingabe. Bitte eine Zahl eingeben."); } } private void ausgeliehenenMedienAnzeigen() { verwaltung.zeigeAusgelieheneMedien(); } private void datumEinstellen() { System.out.print("Neues Datum eingeben (YYYY-MM-DD): "); String eingabe = scanner.nextLine(); try { LocalDate neuesDatum = LocalDate.parse(eingabe); verwaltung.setAktuellesDatum(neuesDatum); } catch (Exception e) { System.out.println("Ungültiges Datum. Bitte im Format YYYY-MM-DD eingeben."); } } }