diff --git a/Benutzer.java b/Benutzer.java index 8ca44e4..b48fbf0 100644 --- a/Benutzer.java +++ b/Benutzer.java @@ -1,4 +1,4 @@ -class Benutzer { +abstract class Benutzer { private String name; private String nachname; private int kundennummer; @@ -7,7 +7,7 @@ class Benutzer { private double gebuehren; // Aktuelle ausstehende Gebühren des Benutzers // Konstruktor - public Benutzer(String name, String nachname, int kundennummer, String art) { + public Benutzer(String name, String nachname, int kundennummer, String art) { this.name = name; this.nachname = nachname; this.kundennummer = kundennummer; diff --git a/Main.java b/Main.java index 2cb7082..99ca5a4 100644 --- a/Main.java +++ b/Main.java @@ -15,7 +15,7 @@ public class Main { verwaltung.mediensListe.add(creator.factoryMedien("Minecraft", "Mojang", 9, "videospiel", 0)); verwaltung.mediensListe.add(creator.factoryMedien("The Witcher 3", "CD Projekt", 10, "videospiel", 0)); - // Ui mit der Verwaltung-Instanz initialisieren + // Ui mit der Verwaltung-Instanz initialisieren7 Ui ui = new Ui(verwaltung); ui.anmeldung(); } diff --git a/Medien.java b/Medien.java index 5b9f1d0..4899c6e 100644 --- a/Medien.java +++ b/Medien.java @@ -100,7 +100,7 @@ public abstract class Medien implements Ausleihbar { private String regisseur; public Dvds(String name, String regisseur, int id) { - super(name, id, 1, 0); // Frist für DVDs ist 1 Woche, keine Verlängerung möglich + super(name, id, 7, 0); // Frist für DVDs ist 1 Woche, keine Verlängerung möglich this.regisseur = regisseur; } @@ -118,7 +118,7 @@ public abstract class Medien implements Ausleihbar { // Unterklasse für CDs public static class Cds extends Medien { public Cds(String name, int id) { - super(name, id, 2, 0); // Frist für CDs ist 2 Wochen, keine Verlängerung möglich + super(name, id, 14, 0); // Frist für CDs ist 2 Wochen, keine Verlängerung möglich } @Override @@ -130,7 +130,7 @@ public abstract class Medien implements Ausleihbar { // Unterklasse für Brettspiele public static class Brettspiel extends Medien { public Brettspiel(String name, int id) { - super(name, id, 2, 0); // Frist für Brettspiele ist 2 Wochen, keine Verlängerung möglich + super(name, id, 14, 0); // Frist für Brettspiele ist 2 Wochen, keine Verlängerung möglich } @Override @@ -144,7 +144,7 @@ public abstract class Medien implements Ausleihbar { private String entwickler; public Videospiel(String name, String entwickler, int id) { - super(name, id, 4, 1); // Frist für Videospiele ist 4 Wochen, einmal verlängerbar + super(name, id, 28, 1); // Frist für Videospiele ist 4 Wochen, einmal verlängerbar this.entwickler = entwickler; } diff --git a/Ui.java b/Ui.java index 58ff9ad..d24bba4 100644 --- a/Ui.java +++ b/Ui.java @@ -1,12 +1,14 @@ import java.time.LocalDate; -import java.util.*; import java.time.temporal.ChronoUnit; +import java.util.*; public class Ui { private final Scanner scanner = new Scanner(System.in); private final Verwaltung verwaltung; - // Konstruktor, der eine Verwaltung-Instanz annimmt + // Zeitversatz für Tests + private LocalDate aktuelleZeit = LocalDate.now(); + public Ui(Verwaltung verwaltung) { this.verwaltung = verwaltung; } @@ -23,20 +25,22 @@ public class Ui { System.out.println("6: Verbuchen von überfälligen Gebühren (Admin)"); System.out.println("7: Registrieren"); System.out.println("8: Anmelden"); + 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) { - case 1 -> suchenNachMedien(); // Keine Anmeldung erforderlich + case 1 -> suchenNachMedien(); case 2 -> ausleihen(); case 3 -> rueckgabeDurchfuehren(); case 4 -> gebuehrenEinsehen(); case 5 -> verlaengern(); case 6 -> adminrechte(); - case 7 -> registrieren(); // Registrieren - case 8 -> anmelden(); // Anmelden + case 7 -> registrieren(); + case 8 -> anmelden(); + case 9 -> zeitVerschieben(); case 0 -> { System.out.println("Programm wird beendet. Auf Wiedersehen!"); running = false; @@ -60,29 +64,22 @@ public class Ui { System.out.print(medien.getName()); if (medien.istAusgeliehen) { - // Wenn das Medium ausgeliehen ist, gibt es das Rückgabedatum an Optional ausleiheOpt = verwaltung.ausliste.stream() .filter(ausleihe -> ausleihe.getMedien().equals(medien)) .findFirst(); if (ausleiheOpt.isPresent()) { Aausleihe ausleihe = ausleiheOpt.get(); - LocalDate rueckgabedatum = ausleihe.getDate().plusWeeks(medien.frist); // Berechnet das Rückgabedatum + LocalDate rueckgabedatum = ausleihe.getDate().plusWeeks(medien.frist); System.out.println(" ist ausgeliehen. Rückgabedatum: " + rueckgabedatum); } } else { System.out.println(" ist verfügbar."); } - - // Hier können noch weitere Details zum Medium ausgegeben werden, falls erforderlich - System.out.println("Typ: " + medien.getClass().getSimpleName()); // Zeigt den Typ des Mediums an - // Weitere Details wie Autor, Jahr, etc. je nach Medium-Typ könnten hier hinzugefügt werden } } } - - // Registrierungsmethode private void registrieren() { System.out.print("Geben Sie Ihren Vornamen ein: "); String name = scanner.nextLine(); @@ -93,21 +90,17 @@ public class Ui { System.out.print("Für Student geben Sie 's' und für Erwachsener 'e' ein: "); String artInput = scanner.nextLine(); - // Generiere eine neue, eindeutige Kundennummer int genkundennummer = verwaltung.generiereEindeutigeKundennummer(); - - // Erstelle einen neuen Benutzer Benutzer neuerBenutzer = Creator.factoryBenutzer(name, nachname, genkundennummer, artInput.toLowerCase()); if (neuerBenutzer != null) { - verwaltung.benutzerListe.add(neuerBenutzer); // Benutzer zur Verwaltungsliste hinzufügen + verwaltung.benutzerListe.add(neuerBenutzer); System.out.println("Registrierung erfolgreich! Ihre Kundennummer lautet: " + genkundennummer); } else { System.out.println("Ungültige Art. Versuchen Sie es erneut."); } } - // Anmeldemethode private Benutzer anmelden() { System.out.print("Geben Sie Ihre Kundennummer zur Anmeldung ein: "); int eingabeKundennummer = scanner.nextInt(); @@ -126,7 +119,6 @@ public class Ui { } } - // Ausleihen eines Mediums private void ausleihen() { Benutzer benutzer = anmelden(); if (benutzer == null) { @@ -145,8 +137,7 @@ public class Ui { if (optionalMedien.isPresent()) { Medien medien = optionalMedien.get(); if (!medien.istAusgeliehen()) { - LocalDate heute = LocalDate.now(); - verwaltung.addAL(medien, benutzer, heute, null); + verwaltung.addAL(medien, benutzer, aktuelleZeit, null); System.out.println("Das Medium wurde erfolgreich ausgeliehen."); } else { System.out.println("Das Medium ist bereits ausgeliehen."); @@ -156,7 +147,6 @@ public class Ui { } } - // Rückgabe eines Mediums private void rueckgabeDurchfuehren() { Benutzer benutzer = anmelden(); if (benutzer == null) { @@ -173,34 +163,7 @@ public class Ui { .findFirst(); if (optionalMedien.isPresent()) { - Medien medien = optionalMedien.get(); - - // Benutzer nach einem Rückgabedatum fragen - System.out.println("Aktuelles Rückgabedatum: " + LocalDate.now()); - System.out.print("Möchten Sie das Rückgabedatum ändern? (ja/nein): "); - String antwort = scanner.nextLine(); - - LocalDate rueckgabedatum; - if (antwort.equalsIgnoreCase("ja")) { - // Benutzer nach einem neuen Rückgabedatum fragen - System.out.print("Geben Sie das Rückgabedatum im Format JJJJ-MM-TT ein: "); - String datumInput = scanner.nextLine(); - - // Versuch, das Datum zu parsen - try { - rueckgabedatum = LocalDate.parse(datumInput); - System.out.println("Das Rückgabedatum wurde auf " + rueckgabedatum + " gesetzt."); - } catch (Exception e) { - System.out.println("Ungültiges Datum. Rückgabe wird mit dem heutigen Datum durchgeführt."); - rueckgabedatum = LocalDate.now(); // Standard auf das heutige Datum - } - } else { - // Standardmäßig wird das heutige Datum verwendet - rueckgabedatum = LocalDate.now(); - } - - // Rückgabe durchführen - verwaltung.rueckgabe(id, benutzer, rueckgabedatum); + verwaltung.rueckgabe(id, benutzer, aktuelleZeit); System.out.println("Das Medium wurde erfolgreich zurückgegeben."); } else { System.out.println("Medium mit dieser ID nicht gefunden."); @@ -208,45 +171,6 @@ public class Ui { } - 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:"); - - // Liste der ausgeliehenen Medien des Benutzers - List ausleihen = verwaltung.getAusleihenByBenutzer(benutzer); - - if (ausleihen.isEmpty()) { - System.out.println("Sie haben keine ausgeliehenen Medien."); - return; - } - - // Aktuelles Datum - LocalDate heute = LocalDate.now(); - - // Durchlaufe alle ausgeliehenen Medien und berechne mögliche Gebühren - for (Aausleihe ausleihe : ausleihen) { - Medien medien = ausleihe.getMedien(); - LocalDate faelligkeitsdatum = ausleihe.getDate().plusWeeks(medien.frist); // Annahme: `frist` gibt die Leihfrist in Wochen an - - double gebuehr = 0; - if (heute.isAfter(faelligkeitsdatum)) { - long ueberfaelligeWochen = ChronoUnit.WEEKS.between(faelligkeitsdatum, heute); - gebuehr = ueberfaelligeWochen * 2.0; // Beispiel: 2 EUR pro überfälliger Woche - } - - // Gebühr und Fälligkeitsdatum ausgeben - System.out.println("Medium: " + medien.getName() + - ", Fälligkeitsdatum: " + faelligkeitsdatum + - ", Überfällige Wochen: " + (heute.isAfter(faelligkeitsdatum) ? ChronoUnit.WEEKS.between(faelligkeitsdatum, heute) : 0) + - ", Gebühr: " + gebuehr + " EUR"); - } - } - private void verlaengern() { Benutzer benutzer = anmelden(); if (benutzer == null) { @@ -282,24 +206,85 @@ public class Ui { } else { System.out.println("Falsche Admin-Zugangsdaten."); } + 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:"); - LocalDate heute = LocalDate.now(); - for (Aausleihe ausleihe : verwaltung.ausliste) { Medien medien = ausleihe.getMedien(); Benutzer benutzer = ausleihe.getBenutzer(); - LocalDate faelligkeitsdatum = ausleihe.getDate().plusWeeks(medien.frist); + LocalDate faelligkeitsdatum = ausleihe.getDate().plusDays(medien.frist); - if (heute.isAfter(faelligkeitsdatum)) { - long ueberfaelligeWochen = ChronoUnit.WEEKS.between(faelligkeitsdatum, heute); - double gebuehr = ueberfaelligeWochen * 2.0; // Beispiel: 2 EUR pro Woche überfällig + 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"); } } } + 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 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."); + } + } } diff --git a/Verwaltung.java b/Verwaltung.java index 7b2195f..ee277d7 100644 --- a/Verwaltung.java +++ b/Verwaltung.java @@ -89,15 +89,15 @@ public class Verwaltung { // Methode zum Entfernen einer Ausleihe und Berechnung der Dauer - void remov(Medien medien, Benutzer benutzer) { + void remov(Benutzer benutzer) { Aausleihe zuEntfernen = null; // Durchsuchen der Liste nach der passenden Ausleihe for (Aausleihe aausleihe : ausliste) { // Überprüfen, ob das Medium und der Benutzer übereinstimmen - if (aausleihe.getMedien().equals(medien) && aausleihe.getBenutzer().equals(benutzer)) { + if (aausleihe.getBenutzer().equals(benutzer)) { zuEntfernen = aausleihe; // Markieren des zu entfernenden Eintrags - medien.istAusgeliehen = false; // Markiere das Medium als nicht mehr ausgeliehen + aausleihe.getMedien().istAusgeliehen = false; // Markiere das Medium als nicht mehr ausgeliehen break; // Schleife abbrechen, wenn die passende Ausleihe gefunden wurde } } @@ -138,7 +138,6 @@ public class Verwaltung { // Wenn das Medium und der Benutzer übereinstimmen ausleihe.setRueckgabeDatum(rueckgabeDatum); // Setze das Rückgabedatum ausleihe.getMedien().istAusgeliehen = false; // Markiere das Medium als zurückgegeben - System.out.println("Das Medium wurde erfolgreich zurückgegeben."); return; // Methode verlassen, Rückgabe abgeschlossen } } diff --git a/out/production/Bib1/Benutzer.class b/out/production/Bib1/Benutzer.class index bcbc549..88c5899 100644 Binary files a/out/production/Bib1/Benutzer.class and b/out/production/Bib1/Benutzer.class differ diff --git a/out/production/Bib1/Ui.class b/out/production/Bib1/Ui.class index ba2546b..523d948 100644 Binary files a/out/production/Bib1/Ui.class and b/out/production/Bib1/Ui.class differ diff --git a/out/production/Bib1/Verwaltung.class b/out/production/Bib1/Verwaltung.class index 0f737fb..56285be 100644 Binary files a/out/production/Bib1/Verwaltung.class and b/out/production/Bib1/Verwaltung.class differ