Verlängerung korrigiert und auch mehr Kommentare eingefügt

development
Leon Maximilian Löhle 2024-11-19 11:17:05 +01:00
parent 9a4e99d73c
commit f587243209
19 changed files with 77 additions and 34 deletions

View File

@ -145,23 +145,32 @@ public class Bibliotheksverwaltung {
}
}
public void medienVerlaengern(String medienId, String kundenId, int aktuelleVerlaengerungen) {
/**
*Wenn ein Kunde ein von Ihm ausgeliehenes Medium verlängern möchte und das Medium verlängert werden kann
*wird das Medium um die erlaubte Zeit verlänegrt
* @param medienId
* @param kundenId
*/
public void medienVerlaengern(String medienId, String kundenId) {
Medien medien = medienBestand.get(medienId);
Kunde kunde = kundenListe.get(kundenId);
if (medien != null && kunde != null) {
boolean erfolg = kunde.medienVerlaengern(medien, aktuelleVerlaengerungen);
boolean erfolg = kunde.medienVerlaengern(medien);
if (erfolg) {
System.out.println("Medium erfolgreich verlängert: " + medien.getTitel());
} else {
System.out.println("Verlängerung nicht möglich: Maximale Anzahl erreicht.");
System.out.println("Verlängerung nicht möglich: Maximale Anzahl erreicht oder Medium ist nicht verlängerbar.");
}
} else {
System.out.println(medien == null ? "Medium nicht gefunden." : "Kunde nicht gefunden.");
}
}
/**
* Erlaubt es neue Medien hinzuzufügen mit ihrer Id und es wird überprüft ob die ID schon vorhanden ist
* @param medien
*/
public void medienHinzufuegen(Medien medien) {
String id = medien.getId().trim().toUpperCase(); // Normalisierung
if (medienBestand.containsKey(id)) {
@ -172,6 +181,12 @@ public class Bibliotheksverwaltung {
System.out.println("Medium hinzugefügt: " + medien.getTitel() + " (ID: " + id + ")");
}
/**
* Erlaubt es einem registrierten Kunden sich einzuloggen, wenn der Kunde bereits eingeloggt ist,
* wird eine Nachricht darüber zurückgegeben sowie auch wenn der Kunde noch nicht existiert
* @param kundenId
* @return
*/
public boolean loginKunde(String kundenId) {
if (eingeloggterBenutzer != null) {
System.out.println("Ein Benutzer ist bereits eingeloggt: " + eingeloggterBenutzer.getName());
@ -188,6 +203,11 @@ public class Bibliotheksverwaltung {
}
}
/**
* Erlaubt es einem Admin sich einzuloggen so wie es auch beim Kunden läuft
* @param adminId
* @return
*/
public boolean loginAdmin(String adminId) {
if (eingeloggterBenutzer != null) {
System.out.println("Ein Benutzer ist bereits eingeloggt: " + eingeloggterBenutzer.getName());
@ -204,6 +224,9 @@ public class Bibliotheksverwaltung {
}
}
/**
* loggt den Benutzer aus, sollte allerdings keiner eingeloggt sein wird eine Fehlermeldung ausgegeben
*/
public void logout() {
if (eingeloggterBenutzer != null) {
System.out.println("Benutzer " + eingeloggterBenutzer.getName() + " wurde ausgeloggt.");
@ -213,6 +236,13 @@ public class Bibliotheksverwaltung {
}
}
/**
* Erstellt einen neuen Kunden mit dem K oder S präfix sowie einer hochzählenden Nummer um erkenntlich zu machen
* ob ein Student oder ein normaler Kunde vorhanden ist
* @param name
* @param istStudent
* @return
*/
public Kunde registriereKunde(String name, boolean istStudent) {
String prefix = istStudent ? "S" : "K";
int maxId = kundenListe.keySet().stream()
@ -228,6 +258,9 @@ public class Bibliotheksverwaltung {
return neuerKunde;
}
/**
* Erlaubt es dem Kunden seine ausgeliehenen Medien anzusehen als auch ob überziehungskosten entstanden sind
*/
public void zeigeAusgelieheneMedien() {
if (!(eingeloggterBenutzer instanceof Kunde)) {
System.out.println("Nur eingeloggte Kunden können ausgeliehene Medien anzeigen.");
@ -249,11 +282,4 @@ public class Bibliotheksverwaltung {
}
}
public void pruefeUeberzogeneMedien() {
System.out.println("Überzogene Medien (Stand: " + aktuellesDatum + "):");
medienBestand.values().stream()
.filter(medien -> !medien.verfuegbar() && medien.istUeberzogen(aktuellesDatum))
.forEach(medien -> System.out.println("- " + medien.getDetails() + " (Rückgabedatum: " + medien.getRueckgabedat() + ")"));
}
}

View File

@ -12,12 +12,12 @@ public class Brettspiel extends Medien {
@Override
public int getAusleihdauer() {
return 3;
return 2;
}
@Override
public int getMaxVerlaengerungen() {
return 1;
return 0;
}
@Override

View File

@ -17,7 +17,7 @@ public class CD extends Medien {
@Override
public int getMaxVerlaengerungen() {
return 2;
return 0;
}
@Override

View File

@ -17,7 +17,7 @@ public class DVD extends Medien {
@Override
public int getMaxVerlaengerungen() {
return 1;
return 0;
}
@Override

View File

@ -38,10 +38,16 @@ public class Kunde extends User {
.sum();
}
public Medien sucheAusgeliehenesMedium(String medienId) {
return ausgelieheneMedien.stream()
.filter(medien -> medien.getId().equalsIgnoreCase(medienId))
.findFirst()
.orElse(null);
}
public boolean medienVerlaengern(Medien medien, int aktuelleVerlaengerungen) {
public boolean medienVerlaengern(Medien medien) {
Consumer<Medien> verlaengerung = m -> {
if (ausgelieheneMedien.contains(m) && m.verlaengern(aktuelleVerlaengerungen)) {
if (ausgelieheneMedien.contains(m) && m.verlaengern()) { // Kein Argument übergeben
System.out.println("Medium verlängert: " + m.getTitel());
} else {
System.out.println("Verlängerung nicht möglich.");
@ -50,4 +56,5 @@ public class Kunde extends User {
verlaengerung.accept(medien);
return false;
}
}

View File

@ -70,13 +70,21 @@ public abstract class Medien {
return verlaengerungen;
}
public boolean verlaengern(int aktuelleVerlaengerungen) {
if (aktuelleVerlaengerungen < getMaxVerlaengerungen()) {
public boolean verlaengern() {
if (getMaxVerlaengerungen() == 0) {
System.out.println("Dieses Medium kann nicht verlängert werden.");
return false;
}
if (verlaengerungen < getMaxVerlaengerungen()) {
verlaengerungen++;
rueckgabedat = rueckgabedat.plusWeeks(getAusleihdauer());
System.out.println("Das Medium wurde verlängert. Neues Rückgabedatum: " + rueckgabedat);
return true;
} else {
System.out.println("Maximale Verlängerungsanzahl erreicht.");
return false;
}
return false;
}
public void zurueckgeben() {

View File

@ -140,20 +140,22 @@ public class UI {
}
private void medienVerlaengern() {
if (!(verwaltung.getEingeloggterBenutzer() instanceof Kunde)) {
System.out.println("Bitte loggen Sie sich als Kunde ein, um Medien zu verlängern.");
return;
}
System.out.print("Medium-ID eingeben: ");
String medienId = scanner.nextLine();
System.out.print("Anzahl bisheriger Verlängerungen eingeben: ");
int verlaengerungen;
try {
verlaengerungen = Integer.parseInt(scanner.nextLine());
Kunde kunde = (Kunde) verwaltung.getEingeloggterBenutzer();
verwaltung.medienVerlaengern(medienId, kunde.getId(), verlaengerungen);
} catch (NumberFormatException e) {
System.out.println("Ungültige Eingabe für Verlängerungen. Bitte eine Zahl eingeben.");
if (!(verwaltung.getEingeloggterBenutzer() instanceof Kunde)) {
System.out.println("Nur Kunden können Medien verlängern.");
return;
}
Kunde kunde = (Kunde) verwaltung.getEingeloggterBenutzer();
Medien medien = kunde.sucheAusgeliehenesMedium(medienId); // Suche im Kundenbestand
if (medien == null) {
System.out.println("Medium wurde nicht gefunden oder gehört nicht zu diesem Kunden.");
return;
}
// Versuch, das Medium zu verlängern
if (!medien.verlaengern()) {
System.out.println("Die Verlängerung war nicht erfolgreich.");
}
}

View File

@ -12,12 +12,12 @@ public class Videospiel extends Medien {
@Override
public int getAusleihdauer() {
return 2;
return 4;
}
@Override
public int getMaxVerlaengerungen() {
return 2;
return 1;
}
@Override