TUI vergrößert

pull/2/head
elarturo 2024-11-19 10:10:00 +01:00
parent 6bfc94ad33
commit 300dbcd830
1 changed files with 259 additions and 130 deletions

View File

@ -18,151 +18,246 @@ public class LibraryUI {
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");
// Wenn der Benutzer nicht eingeloggt ist, zeige Anmeldeoptionen
if (currentUser == null) {
System.out.println("\nAktuelles Datum: " + borrowService.getCurrentDate());
System.out.println("1. Registrieren");
System.out.println("2. Anmelden");
System.out.println("3. Katalog anzeigen");
System.out.println("4. 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.");
int choice = scanner.nextInt();
scanner.nextLine(); // Puffer leeren
switch (choice) {
case 1 -> registerUser(scanner); // Benutzerregistrierung
case 2 -> login(scanner); // Benutzeranmeldung
case 3 -> showCatalog();
case 4 -> {
System.out.println("Programm beendet.");
return;
}
default -> System.out.println("Ungültige Auswahl.");
}
} else {
// Wenn der Benutzer eingeloggt ist, zeige die entsprechenden Optionen
System.out.println("\nAktuelles Datum: " + borrowService.getCurrentDate());
// Menü für alle Benutzer (Admin und normaler Benutzer)
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. Abmelden");
System.out.println("12. Beenden");
// Wenn der Benutzer ein Admin ist, gib nur die Admin-Optionen an
if (currentUser.getRole().equals("admin")) {
// Admin kann nur die Zahlungen bearbeiten
System.out.println("Admin hat nur Zugriff auf 'Admin-Zahlung bearbeiten'.");
}
int choice = scanner.nextInt();
scanner.nextLine(); // Puffer leeren
switch (choice) {
case 3 -> changeDate(scanner); // Datum ändern
case 4 -> {
if (currentUser.getRole().equals("admin")) {
System.out.println("Admins kann sich nicht den Katalog anzeigen lassen.");
} else {
showCatalog();// Medien ausleihen (nur für Benutzer)
}
}
case 5 -> {
if (currentUser.getRole().equals("admin")) {
System.out.println("Admins können keine Medien ausleihen.");
} else {
borrowMedia(scanner); // Medien ausleihen (nur für Benutzer)
}
}
case 6 -> {
if (currentUser.getRole().equals("admin")) {
System.out.println("Admins können keine Medien zurückgeben.");
} else {
returnMedia(scanner); // Medien zurückgeben (nur für Benutzer)
}
}
case 7 -> {
if (currentUser.getRole().equals("admin")) {
System.out.println("Admins können die Leihfrist nicht verlängern.");
} else {
renewMedia(scanner); // Medien verlängern (nur für Benutzer)
}
}
case 8 -> {
if (currentUser.getRole().equals("admin")) {
System.out.println("Admins können keine Gebühren anzeigen.");
} else {
showOutstandingFees(scanner); // Gebühren anzeigen (nur für Benutzer)
}
}
case 9 -> {
if (currentUser.getRole().equals("admin")) {
processAdminPayment(scanner); // Admin-Zahlung bearbeiten
} else {
System.out.println("Zahlungen können nur von einem Admin bearbeitet werden.");
}
}
case 10 -> searchMedia(scanner); // Medien durchsuchen (auch für Benutzer)
case 11 -> logout(); // Abmelden
case 12 -> {
System.out.println("Programm beendet.");
return;
}
default -> System.out.println("Ungültige Auswahl.");
}
}
}
}
private void logout() {
System.out.println("Sie haben sich erfolgreich abgemeldet.");
currentUser = null; // Setze den aktuellen Benutzer auf null
}
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();
System.out.print("Geben Sie eine Benutzer-ID ein: ");
String userId = 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;
}
// Admin-ID '001' darf nicht für normale Benutzer verwendet werden
if (userId.equals("001")) {
System.out.println("Die ID '001' ist für den Admin reserviert und kann nicht verwendet werden.");
return;
}
libraryService.addUser(newUser);
System.out.println("Benutzer erfolgreich registriert: " + newUser);
System.out.print("Geben Sie Ihren Namen ein: ");
String userName = scanner.nextLine();
System.out.println("Sind Sie ein Student/Schüler? (Ja/Nein): ");
String userType = scanner.nextLine().trim().toLowerCase();
User newUser;
if (userType.equals("ja")) {
newUser = new Student(userId, userName); // Student-Instanz erstellen
} else {
newUser = new Adult(userId, userName); // Erwachsene-Instanz erstellen
}
libraryService.addUser(newUser); // Benutzer zur Bibliothek hinzufügen
System.out.println("Benutzer erfolgreich registriert.");
}
private void login(Scanner scanner) {
System.out.print("Geben Sie Ihre Benutzer-ID ein: ");
String userId = scanner.next();
String userId = scanner.nextLine();
// Suche nach dem Benutzer in der Bibliothek
currentUser = libraryService.findUserById(userId);
if (currentUser != null) {
System.out.println("Willkommen, " + currentUser.getName() + "!");
borrowService.showOutstandingFees(currentUser);
// Zeige die aktuellen ausstehenden Gebühren nach der Anmeldung an
System.out.println("Ihre ausstehenden Gebühren: " + currentUser.getOutstandingFees() + "€.");
} else {
System.out.println("Benutzer nicht gefunden. Bitte zuerst registrieren.");
System.out.println("Benutzer nicht gefunden.");
}
}
private void changeDate(Scanner scanner) {
System.out.print("Geben Sie das neue Datum (YYYY-MM-DD) ein: ");
String newDateInput = scanner.next();
String newDateInput = scanner.nextLine(); // Verwenden von nextLine() um die Eingabe zu lesen
if (newDateInput.isEmpty()) {
System.out.println("Kein Datum eingegeben, es wird das heutige Datum verwendet.");
return; // Wenn keine Eingabe erfolgt, wird das heutige Datum verwendet
}
try {
LocalDate newDate = LocalDate.parse(newDateInput);
LocalDate newDate = LocalDate.parse(newDateInput); // Versucht, das Datum zu parsen
borrowService.setCurrentDate(newDate); // Datum ändern und ggf. fehlende borrowDates setzen
} catch (Exception e) {
System.out.println("Ungültiges Datumformat. Bitte erneut versuchen.");
System.out.println(
"Ungültiges Datumformat. Bitte stellen Sie sicher, dass das Datum im Format YYYY-MM-DD eingegeben wird.");
}
}
private void borrowMedia(Scanner scanner) {
if (currentUser == null) {
System.out.println("Bitte melden Sie sich zuerst an.");
return;
}
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);
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.");
}
if (medium != null) {
String result = borrowService.borrowMedium(currentUser, medium);
System.out.println(result); // Zeigt die Rückgabe der Service-Methode an
} 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;
}
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);
System.out.print("Geben Sie die ID des Mediums ein, das Sie zurückgeben möchten: ");
String mediumId = scanner.nextLine();
if (medium != null) {
borrowService.returnMedium(currentUser, medium);
} else {
System.out.println("Medium nicht gefunden.");
}
Medium medium = libraryService.findMediumById(mediumId);
if (medium != null) {
String result = borrowService.returnMedium(currentUser, medium);
System.out.println(result); // Zeigt die Rückgabeinformationen an
} 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;
}
if (currentUser == null || !currentUser.getRole().equals("admin")) {
System.out.println("Nur ein 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 für die Zahlung ein: ");
String userId = scanner.nextLine();
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);
// Suchen des Benutzers
User user = libraryService.findUserById(userId);
if (user != null) {
System.out.println("Ausstehende Gebühren für " + user.getName() + ": " + user.getOutstandingFees() + "€.");
System.out.print("Geben Sie den zu zahlenden Betrag ein: ");
double paymentAmount = scanner.nextDouble();
scanner.nextLine(); // Puffer leeren
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
// Zahlung bearbeiten
if (paymentAmount <= user.getOutstandingFees()) {
user.payFees(paymentAmount);
System.out.println("Zahlung erfolgreich verarbeitet.");
} else {
System.out.println("Der Betrag übersteigt die ausstehenden Gebühren.");
}
} else {
System.out.println("Benutzer nicht gefunden.");
}
}
private void searchMedia(Scanner scanner) {
@ -190,40 +285,74 @@ public class LibraryUI {
}
private void renewMedia(Scanner scanner) {
if (currentUser == null) {
System.out.println("Bitte melden Sie sich zuerst an.");
return;
}
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);
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();
if (medium != null) {
// Überprüfen, ob der Benutzer das Medium ausgeliehen hat
if (!currentUser.getBorrowedMedia().contains(medium)) {
System.out.println("Dieses Medium wurde nicht von Ihnen ausgeliehen und kann daher nicht verlängert werden.");
return;
}
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.");
}
}
// Optional: Ausleihdatum ändern
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();
// 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.");
}
LocalDate newBorrowDate = null;
if (!inputDate.isBlank()) {
try {
newBorrowDate = LocalDate.parse(inputDate);
} catch (Exception e) {
System.out.println("Ungültiges Datum. Das ursprüngliche Ausleihdatum bleibt bestehen.");
}
}
// Verlängerung durchführen und Ergebnis anzeigen
String result = borrowService.renewMedium(currentUser, medium, newBorrowDate);
System.out.println(result);
} else {
System.out.println("Medium nicht gefunden.");
}
}
private void showCatalog() {
libraryService.displayCatalog(); // Zeigt den gesamten Katalog mit Ausleihstatus an
List<String> catalog = libraryService.displayCatalog();
System.out.println("Katalog der Medien:");
for (String entry : catalog) {
System.out.println(entry); // Anzeige jedes Mediums
}
}
private void showOutstandingFees(Scanner scanner) {
if (currentUser == null) {
System.out.println("Bitte melden Sie sich zuerst an.");
return;
}
// Zeige die ausstehenden Gebühren des Benutzers an
System.out.println("Ausstehende Gebühren für " + currentUser.getName() + ": " + currentUser.getOutstandingFees() + "€.");
// Zeige die ausgeliehenen Medien und deren Fälligkeitsdaten an
if (!currentUser.getBorrowedMedia().isEmpty()) {
System.out.println("Ausgeliehene Medien:");
for (Medium medium : currentUser.getBorrowedMedia()) {
System.out.println("- Titel: " + medium.getTitle() + ", Fällig am: " + medium.getDueDate());
}
} else {
System.out.println("Keine ausgeliehenen Medien.");
}
}
}