PR2-Testat-Bibliotheksverwa.../Biblio/src/Bibliothek/UI.java

281 lines
11 KiB
Java

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.");
}
}
}