main
Zabih Mansuri 2024-11-19 16:48:39 +01:00
parent 23967f0262
commit 148328772e
8 changed files with 90 additions and 106 deletions

View File

@ -1,4 +1,4 @@
class Benutzer { abstract class Benutzer {
private String name; private String name;
private String nachname; private String nachname;
private int kundennummer; private int kundennummer;

View File

@ -15,7 +15,7 @@ public class Main {
verwaltung.mediensListe.add(creator.factoryMedien("Minecraft", "Mojang", 9, "videospiel", 0)); verwaltung.mediensListe.add(creator.factoryMedien("Minecraft", "Mojang", 9, "videospiel", 0));
verwaltung.mediensListe.add(creator.factoryMedien("The Witcher 3", "CD Projekt", 10, "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 ui = new Ui(verwaltung);
ui.anmeldung(); ui.anmeldung();
} }

View File

@ -100,7 +100,7 @@ public abstract class Medien implements Ausleihbar {
private String regisseur; private String regisseur;
public Dvds(String name, String regisseur, int id) { 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; this.regisseur = regisseur;
} }
@ -118,7 +118,7 @@ public abstract class Medien implements Ausleihbar {
// Unterklasse für CDs // Unterklasse für CDs
public static class Cds extends Medien { public static class Cds extends Medien {
public Cds(String name, int id) { 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 @Override
@ -130,7 +130,7 @@ public abstract class Medien implements Ausleihbar {
// Unterklasse für Brettspiele // Unterklasse für Brettspiele
public static class Brettspiel extends Medien { public static class Brettspiel extends Medien {
public Brettspiel(String name, int id) { 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 @Override
@ -144,7 +144,7 @@ public abstract class Medien implements Ausleihbar {
private String entwickler; private String entwickler;
public Videospiel(String name, String entwickler, int id) { 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; this.entwickler = entwickler;
} }

175
Ui.java
View File

@ -1,12 +1,14 @@
import java.time.LocalDate; import java.time.LocalDate;
import java.util.*;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*;
public class Ui { public class Ui {
private final Scanner scanner = new Scanner(System.in); private final Scanner scanner = new Scanner(System.in);
private final Verwaltung verwaltung; private final Verwaltung verwaltung;
// Konstruktor, der eine Verwaltung-Instanz annimmt // Zeitversatz für Tests
private LocalDate aktuelleZeit = LocalDate.now();
public Ui(Verwaltung verwaltung) { public Ui(Verwaltung verwaltung) {
this.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("6: Verbuchen von überfälligen Gebühren (Admin)");
System.out.println("7: Registrieren"); System.out.println("7: Registrieren");
System.out.println("8: Anmelden"); System.out.println("8: Anmelden");
System.out.println("9: Zeit verschieben (Testoption)");
System.out.println("0: Programm beenden"); System.out.println("0: Programm beenden");
int menue = scanner.nextInt(); int menue = scanner.nextInt();
scanner.nextLine(); // Leert den Puffer nach nextInt() scanner.nextLine(); // Leert den Puffer nach nextInt()
switch (menue) { switch (menue) {
case 1 -> suchenNachMedien(); // Keine Anmeldung erforderlich case 1 -> suchenNachMedien();
case 2 -> ausleihen(); case 2 -> ausleihen();
case 3 -> rueckgabeDurchfuehren(); case 3 -> rueckgabeDurchfuehren();
case 4 -> gebuehrenEinsehen(); case 4 -> gebuehrenEinsehen();
case 5 -> verlaengern(); case 5 -> verlaengern();
case 6 -> adminrechte(); case 6 -> adminrechte();
case 7 -> registrieren(); // Registrieren case 7 -> registrieren();
case 8 -> anmelden(); // Anmelden case 8 -> anmelden();
case 9 -> zeitVerschieben();
case 0 -> { case 0 -> {
System.out.println("Programm wird beendet. Auf Wiedersehen!"); System.out.println("Programm wird beendet. Auf Wiedersehen!");
running = false; running = false;
@ -60,29 +64,22 @@ public class Ui {
System.out.print(medien.getName()); System.out.print(medien.getName());
if (medien.istAusgeliehen) { if (medien.istAusgeliehen) {
// Wenn das Medium ausgeliehen ist, gibt es das Rückgabedatum an
Optional<Aausleihe> ausleiheOpt = verwaltung.ausliste.stream() Optional<Aausleihe> ausleiheOpt = verwaltung.ausliste.stream()
.filter(ausleihe -> ausleihe.getMedien().equals(medien)) .filter(ausleihe -> ausleihe.getMedien().equals(medien))
.findFirst(); .findFirst();
if (ausleiheOpt.isPresent()) { if (ausleiheOpt.isPresent()) {
Aausleihe ausleihe = ausleiheOpt.get(); 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); System.out.println(" ist ausgeliehen. Rückgabedatum: " + rueckgabedatum);
} }
} else { } else {
System.out.println(" ist verfügbar."); 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() { private void registrieren() {
System.out.print("Geben Sie Ihren Vornamen ein: "); System.out.print("Geben Sie Ihren Vornamen ein: ");
String name = scanner.nextLine(); 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: "); System.out.print("Für Student geben Sie 's' und für Erwachsener 'e' ein: ");
String artInput = scanner.nextLine(); String artInput = scanner.nextLine();
// Generiere eine neue, eindeutige Kundennummer
int genkundennummer = verwaltung.generiereEindeutigeKundennummer(); int genkundennummer = verwaltung.generiereEindeutigeKundennummer();
// Erstelle einen neuen Benutzer
Benutzer neuerBenutzer = Creator.factoryBenutzer(name, nachname, genkundennummer, artInput.toLowerCase()); Benutzer neuerBenutzer = Creator.factoryBenutzer(name, nachname, genkundennummer, artInput.toLowerCase());
if (neuerBenutzer != null) { 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); System.out.println("Registrierung erfolgreich! Ihre Kundennummer lautet: " + genkundennummer);
} else { } else {
System.out.println("Ungültige Art. Versuchen Sie es erneut."); System.out.println("Ungültige Art. Versuchen Sie es erneut.");
} }
} }
// Anmeldemethode
private Benutzer anmelden() { private Benutzer anmelden() {
System.out.print("Geben Sie Ihre Kundennummer zur Anmeldung ein: "); System.out.print("Geben Sie Ihre Kundennummer zur Anmeldung ein: ");
int eingabeKundennummer = scanner.nextInt(); int eingabeKundennummer = scanner.nextInt();
@ -126,7 +119,6 @@ public class Ui {
} }
} }
// Ausleihen eines Mediums
private void ausleihen() { private void ausleihen() {
Benutzer benutzer = anmelden(); Benutzer benutzer = anmelden();
if (benutzer == null) { if (benutzer == null) {
@ -145,8 +137,7 @@ public class Ui {
if (optionalMedien.isPresent()) { if (optionalMedien.isPresent()) {
Medien medien = optionalMedien.get(); Medien medien = optionalMedien.get();
if (!medien.istAusgeliehen()) { if (!medien.istAusgeliehen()) {
LocalDate heute = LocalDate.now(); verwaltung.addAL(medien, benutzer, aktuelleZeit, null);
verwaltung.addAL(medien, benutzer, heute, null);
System.out.println("Das Medium wurde erfolgreich ausgeliehen."); System.out.println("Das Medium wurde erfolgreich ausgeliehen.");
} else { } else {
System.out.println("Das Medium ist bereits ausgeliehen."); System.out.println("Das Medium ist bereits ausgeliehen.");
@ -156,7 +147,6 @@ public class Ui {
} }
} }
// Rückgabe eines Mediums
private void rueckgabeDurchfuehren() { private void rueckgabeDurchfuehren() {
Benutzer benutzer = anmelden(); Benutzer benutzer = anmelden();
if (benutzer == null) { if (benutzer == null) {
@ -173,34 +163,7 @@ public class Ui {
.findFirst(); .findFirst();
if (optionalMedien.isPresent()) { if (optionalMedien.isPresent()) {
Medien medien = optionalMedien.get(); verwaltung.rueckgabe(id, benutzer, aktuelleZeit);
// 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);
System.out.println("Das Medium wurde erfolgreich zurückgegeben."); System.out.println("Das Medium wurde erfolgreich zurückgegeben.");
} else { } else {
System.out.println("Medium mit dieser ID nicht gefunden."); 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<Aausleihe> 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() { private void verlaengern() {
Benutzer benutzer = anmelden(); Benutzer benutzer = anmelden();
if (benutzer == null) { if (benutzer == null) {
@ -282,24 +206,85 @@ public class Ui {
} else { } else {
System.out.println("Falsche Admin-Zugangsdaten."); 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() { private void verbucheUeberfaelligeGebuehren() {
System.out.println("Verbuchen überfälliger Gebühren:"); System.out.println("Verbuchen überfälliger Gebühren:");
LocalDate heute = LocalDate.now();
for (Aausleihe ausleihe : verwaltung.ausliste) { for (Aausleihe ausleihe : verwaltung.ausliste) {
Medien medien = ausleihe.getMedien(); Medien medien = ausleihe.getMedien();
Benutzer benutzer = ausleihe.getBenutzer(); Benutzer benutzer = ausleihe.getBenutzer();
LocalDate faelligkeitsdatum = ausleihe.getDate().plusWeeks(medien.frist); LocalDate faelligkeitsdatum = ausleihe.getDate().plusDays(medien.frist);
if (heute.isAfter(faelligkeitsdatum)) { if (aktuelleZeit.isAfter(faelligkeitsdatum)) {
long ueberfaelligeWochen = ChronoUnit.WEEKS.between(faelligkeitsdatum, heute); long ueberfaelligeWochen = ChronoUnit.DAYS.between(faelligkeitsdatum, aktuelleZeit);
double gebuehr = ueberfaelligeWochen * 2.0; // Beispiel: 2 EUR pro Woche überfällig double gebuehr = ueberfaelligeWochen;
System.out.println("Benutzer: " + benutzer.getName() + ", Medium: " + medien.getName() + System.out.println("Benutzer: " + benutzer.getName() + ", Medium: " + medien.getName() +
", Überfällige Wochen: " + ueberfaelligeWochen + ", Gebühr: " + gebuehr + " EUR"); ", Ü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<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.");
}
}
} }

View File

@ -89,15 +89,15 @@ public class Verwaltung {
// Methode zum Entfernen einer Ausleihe und Berechnung der Dauer // Methode zum Entfernen einer Ausleihe und Berechnung der Dauer
void remov(Medien medien, Benutzer benutzer) { void remov(Benutzer benutzer) {
Aausleihe zuEntfernen = null; Aausleihe zuEntfernen = null;
// Durchsuchen der Liste nach der passenden Ausleihe // Durchsuchen der Liste nach der passenden Ausleihe
for (Aausleihe aausleihe : ausliste) { for (Aausleihe aausleihe : ausliste) {
// Überprüfen, ob das Medium und der Benutzer übereinstimmen // Ü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 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 break; // Schleife abbrechen, wenn die passende Ausleihe gefunden wurde
} }
} }
@ -138,7 +138,6 @@ public class Verwaltung {
// Wenn das Medium und der Benutzer übereinstimmen // Wenn das Medium und der Benutzer übereinstimmen
ausleihe.setRueckgabeDatum(rueckgabeDatum); // Setze das Rückgabedatum ausleihe.setRueckgabeDatum(rueckgabeDatum); // Setze das Rückgabedatum
ausleihe.getMedien().istAusgeliehen = false; // Markiere das Medium als zurückgegeben 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 return; // Methode verlassen, Rückgabe abgeschlossen
} }
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.