fertige UI

Feature-LibraryService
elarturo 2024-11-18 23:06:02 +01:00
parent 4bf51626be
commit 450270be4a
1 changed files with 225 additions and 13 deletions

View File

@ -1,17 +1,229 @@
package UILayer; package UILayer;
public class LibraryUI { import java.time.LocalDate;
private LibraryService libraryService; 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<Medium> 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
}
}
} }