Bib1/Ui.java

291 lines
11 KiB
Java
Raw Normal View History

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
2024-11-19 16:48:39 +01:00
import java.util.*;
public class Ui {
private final Scanner scanner = new Scanner(System.in);
private final Verwaltung verwaltung;
2024-11-19 16:48:39 +01:00
// Zeitversatz für Tests
private LocalDate aktuelleZeit = LocalDate.now();
public Ui(Verwaltung verwaltung) {
this.verwaltung = verwaltung;
}
void anmeldung() {
boolean running = true;
while (running) {
System.out.println("Willkommen! Bitte wählen Sie eine Option:");
System.out.println("1: Durchsuchen der Medien");
System.out.println("2: Ausleihen eines Gegenstandes");
System.out.println("3: Rückgabe eines Gegenstandes");
System.out.println("4: Ausgeliehene Gegenstände und Gebühren anzeigen");
System.out.println("5: Verlängern der Leihfrist");
System.out.println("6: Verbuchen von überfälligen Gebühren (Admin)");
System.out.println("7: Registrieren");
System.out.println("8: Anmelden");
2024-11-19 16:48:39 +01:00
System.out.println("9: Zeit verschieben (Testoption)");
System.out.println("0: Programm beenden");
int menue = scanner.nextInt();
scanner.nextLine(); // Leert den Puffer nach nextInt()
switch (menue) {
2024-11-19 16:48:39 +01:00
case 1 -> suchenNachMedien();
case 2 -> ausleihen();
case 3 -> rueckgabeDurchfuehren();
case 4 -> gebuehrenEinsehen();
case 5 -> verlaengern();
case 6 -> adminrechte();
2024-11-19 16:48:39 +01:00
case 7 -> registrieren();
case 8 -> anmelden();
case 9 -> zeitVerschieben();
case 0 -> {
System.out.println("Programm wird beendet. Auf Wiedersehen!");
running = false;
}
default -> System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut.");
}
}
}
private void suchenNachMedien() {
System.out.println("Bitte geben Sie stichwortartig an, wonach Sie suchen:");
String suchbegriff = scanner.nextLine();
List<Medien> gefundeneMedien = Verwaltung.durchsuchenMedien(verwaltung.mediensListe, suchbegriff);
if (gefundeneMedien.isEmpty()) {
System.out.println("Keine Medien gefunden.");
} else {
System.out.println("Gefundene Medien:");
for (Medien medien : gefundeneMedien) {
System.out.print(medien.getName());
if (medien.istAusgeliehen) {
Optional<Aausleihe> ausleiheOpt = verwaltung.ausliste.stream()
.filter(ausleihe -> ausleihe.getMedien().equals(medien))
.findFirst();
if (ausleiheOpt.isPresent()) {
Aausleihe ausleihe = ausleiheOpt.get();
2024-11-19 16:48:39 +01:00
LocalDate rueckgabedatum = ausleihe.getDate().plusWeeks(medien.frist);
System.out.println(" ist ausgeliehen. Rückgabedatum: " + rueckgabedatum);
}
} else {
System.out.println(" ist verfügbar.");
}
}
}
}
private void registrieren() {
System.out.print("Geben Sie Ihren Vornamen ein: ");
String name = scanner.nextLine();
System.out.print("Geben Sie Ihren Nachnamen ein: ");
String nachname = scanner.nextLine();
System.out.print("Für Student geben Sie 's' und für Erwachsener 'e' ein: ");
String artInput = scanner.nextLine();
int genkundennummer = verwaltung.generiereEindeutigeKundennummer();
Benutzer neuerBenutzer = Creator.factoryBenutzer(name, nachname, genkundennummer, artInput.toLowerCase());
if (neuerBenutzer != null) {
2024-11-19 16:48:39 +01:00
verwaltung.benutzerListe.add(neuerBenutzer);
System.out.println("Registrierung erfolgreich! Ihre Kundennummer lautet: " + genkundennummer);
} else {
System.out.println("Ungültige Art. Versuchen Sie es erneut.");
}
}
private Benutzer anmelden() {
System.out.print("Geben Sie Ihre Kundennummer zur Anmeldung ein: ");
int eingabeKundennummer = scanner.nextInt();
scanner.nextLine(); // Puffer leeren
Optional<Benutzer> benutzerOpt = verwaltung.benutzerListe.stream()
.filter(benutzer -> benutzer.getKundennummer() == eingabeKundennummer)
.findFirst();
if (benutzerOpt.isPresent()) {
System.out.println("Willkommen zurück, " + benutzerOpt.get().getName());
return benutzerOpt.get();
} else {
System.out.println("Kundennummer nicht gefunden.");
return null;
}
}
private void ausleihen() {
Benutzer benutzer = anmelden();
if (benutzer == null) {
System.out.println("Sie müssen sich zuerst anmelden.");
return;
}
System.out.print("Geben Sie die ID des gewünschten Mediums ein: ");
int id = scanner.nextInt();
scanner.nextLine(); // Puffer leeren
Optional<Medien> optionalMedien = verwaltung.mediensListe.stream()
.filter(medien -> medien.getId() == id)
.findFirst();
if (optionalMedien.isPresent()) {
Medien medien = optionalMedien.get();
if (!medien.istAusgeliehen()) {
2024-11-19 16:48:39 +01:00
verwaltung.addAL(medien, benutzer, aktuelleZeit, null);
System.out.println("Das Medium wurde erfolgreich ausgeliehen.");
} else {
System.out.println("Das Medium ist bereits ausgeliehen.");
}
} else {
System.out.println("Medium mit dieser ID nicht gefunden.");
}
}
private void rueckgabeDurchfuehren() {
Benutzer benutzer = anmelden();
if (benutzer == null) {
System.out.println("Sie müssen sich zuerst anmelden.");
return;
}
System.out.print("Geben Sie die ID des Mediums ein, das Sie zurückgeben möchten: ");
int id = scanner.nextInt();
scanner.nextLine(); // Puffer leeren
Optional<Medien> optionalMedien = verwaltung.mediensListe.stream()
.filter(medien -> medien.getId() == id)
.findFirst();
if (optionalMedien.isPresent()) {
2024-11-19 16:48:39 +01:00
verwaltung.rueckgabe(id, benutzer, aktuelleZeit);
System.out.println("Das Medium wurde erfolgreich zurückgegeben.");
} else {
System.out.println("Medium mit dieser ID nicht gefunden.");
}
}
private void verlaengern() {
Benutzer benutzer = anmelden();
if (benutzer == null) {
System.out.println("Sie müssen sich zuerst anmelden.");
return;
}
System.out.print("Geben Sie die ID des Mediums ein, das Sie verlängern möchten: ");
int id = scanner.nextInt();
scanner.nextLine(); // Puffer leeren
Optional<Medien> optionalMedien = verwaltung.mediensListe.stream()
.filter(medien -> medien.getId() == id)
.findFirst();
if (optionalMedien.isPresent()) {
verwaltung.verlängern(optionalMedien.get(), benutzer);
System.out.println("Das Medium wurde verlängert.");
} else {
System.out.println("Medium mit dieser ID nicht gefunden.");
}
}
private void adminrechte() {
System.out.print("Geben Sie den Admin-Benutzernamen ein: ");
String benutzername = scanner.nextLine();
System.out.print("Geben Sie das Admin-Passwort ein: ");
String passwort = scanner.nextLine();
if (benutzername.equals("admin") && passwort.equals("admin123")) {
System.out.println("Admin-Login erfolgreich.");
verbucheUeberfaelligeGebuehren();
} else {
System.out.println("Falsche Admin-Zugangsdaten.");
}
2024-11-19 16:48:39 +01:00
System.out.println("möchten sie zahlungen löschem geben sie benutzer id ein");
int id=scanner.nextInt();
}
private void verbucheUeberfaelligeGebuehren() {
System.out.println("Verbuchen überfälliger Gebühren:");
for (Aausleihe ausleihe : verwaltung.ausliste) {
Medien medien = ausleihe.getMedien();
Benutzer benutzer = ausleihe.getBenutzer();
2024-11-19 16:48:39 +01:00
LocalDate faelligkeitsdatum = ausleihe.getDate().plusDays(medien.frist);
2024-11-19 16:48:39 +01:00
if (aktuelleZeit.isAfter(faelligkeitsdatum)) {
long ueberfaelligeWochen = ChronoUnit.DAYS.between(faelligkeitsdatum, aktuelleZeit);
double gebuehr = ueberfaelligeWochen;
System.out.println("Benutzer: " + benutzer.getName() + ", Medium: " + medien.getName() +
", Überfällige Wochen: " + ueberfaelligeWochen + ", Gebühr: " + gebuehr + " EUR");
}
}
}
2024-11-19 16:48:39 +01:00
private void gebuehrenEinsehen() {
Benutzer benutzer = anmelden();
if (benutzer == null) {
System.out.println("Sie müssen sich zuerst anmelden.");
return;
}
System.out.println("Ihre ausstehenden Gebühren:");
List<Aausleihe> ausleihen = verwaltung.getAusleihenByBenutzer(benutzer);
if (ausleihen.isEmpty()) {
System.out.println("Sie haben keine ausgeliehenen Medien.");
return;
}
boolean hatAusgelieheneMedien = false;
for (Aausleihe ausleihe : ausleihen) {
Medien medien = ausleihe.getMedien();
// Prüfen, ob das Medium ausgeliehen ist
if (!medien.istAusgeliehen()) {
continue; // Überspringt Medien, die nicht ausgeliehen sind
}
hatAusgelieheneMedien = true; // Mindestens ein Medium ist ausgeliehen
LocalDate faelligkeitsdatum = ausleihe.getDate().plusWeeks(medien.frist);
double gebuehr = 0;
// Gebühren berechnen, wenn das Medium überfällig ist
if (aktuelleZeit.isAfter(faelligkeitsdatum)) {
long ueberfaelligeTage = ChronoUnit.DAYS.between(faelligkeitsdatum, aktuelleZeit);
gebuehr = ueberfaelligeTage * 2.0; // 2 EUR pro überfälligem Tag
}
// Details zum Medium ausgeben
System.out.println("Medium: " + medien.getName() +
", Fälligkeitsdatum: " + faelligkeitsdatum +
", Gebühr: " + gebuehr + " EUR");
}
if (!hatAusgelieheneMedien) {
System.out.println("Sie haben keine ausgeliehenen Medien.");
}
}
private void zeitVerschieben() {
System.out.println("Aktuelles Datum: " + aktuelleZeit);
System.out.print("Geben Sie das neue Datum im Format JJJJ-MM-TT ein: ");
String neuesDatum = scanner.nextLine();
try {
aktuelleZeit = LocalDate.parse(neuesDatum);
System.out.println("Die Zeit wurde erfolgreich auf " + aktuelleZeit + " geändert.");
} catch (Exception e) {
System.out.println("Ungültiges Datum. Bitte versuchen Sie es erneut.");
}
}
}