281 lines
11 KiB
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.");
|
|
}
|
|
}
|
|
} |