Verbesserung der Kohäsion und der Funktionalität durch Lambdas
parent
17a7d60487
commit
54bc0bf9f8
|
@ -1,4 +1,44 @@
|
|||
package Bibliothek;
|
||||
|
||||
public class Admin {
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class Admin extends User {
|
||||
|
||||
public Admin(String id, String name) {
|
||||
super(id, name);
|
||||
}
|
||||
|
||||
public void gebuehrenVerbuchen(Kunde kunde, double betrag) {
|
||||
if (kunde == null) {
|
||||
System.out.println("Kunde nicht gefunden.");
|
||||
return;
|
||||
}
|
||||
|
||||
Consumer<Double> verbuchen = b -> {
|
||||
if (b > kunde.getGebuehren()) {
|
||||
System.out.println("Zahlung von " + b + "€ ist höher als die offenen Gebühren (" + kunde.getGebuehren() + "€).");
|
||||
} else {
|
||||
kunde.gebuehrenErhoehen(-b); // Gebühren reduzieren
|
||||
System.out.println("Admin " + name + " hat eine Zahlung von " + b + "€ für Kunde '" + kunde.getName() + "' verbucht.");
|
||||
}
|
||||
};
|
||||
verbuchen.accept(betrag);
|
||||
}
|
||||
|
||||
public void ausgelieheneMedienAnzeigen(Kunde kunde) {
|
||||
if (kunde == null) {
|
||||
System.out.println("Kunde nicht gefunden.");
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("Ausgeliehene Medien von " + kunde.getName() + ":");
|
||||
kunde.getAusgelieheneMedien().forEach(medien ->
|
||||
System.out.println("- " + medien.getTitel() + " (Rückgabedatum: " + medien.getRueckgabedat() + ")")
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rolleAnzeigen() {
|
||||
System.out.println("Admin: " + name);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,67 @@
|
|||
package Bibliothek;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class Bibliotheksverwaltung {
|
||||
private Map<String, Medien> medienBestand;
|
||||
private Map<String, Kunde> kundenListe;
|
||||
private Map<String, Admin> adminListe;
|
||||
|
||||
public Bibliotheksverwaltung() {
|
||||
medienBestand = new HashMap<>();
|
||||
kundenListe = new HashMap<>();
|
||||
adminListe = new HashMap<>();
|
||||
}
|
||||
|
||||
public void medienHinzufuegen(Medien medien) {
|
||||
medienBestand.put(medien.getId(), medien);
|
||||
System.out.println("Medium hinzugefügt: " + medien.getTitel());
|
||||
}
|
||||
|
||||
public void alleMedienAnzeigen() {
|
||||
System.out.println("Medienbestand:");
|
||||
medienBestand.values().forEach(m ->
|
||||
System.out.println("- " + m.getDetails() +
|
||||
(m.verfuegbar() ? " [Verfügbar]" : " [Ausgeliehen]"))
|
||||
);
|
||||
}
|
||||
|
||||
public void medienDurchsuchen(String suchbegriff) {
|
||||
System.out.println("Suchergebnisse für '" + suchbegriff + "':");
|
||||
medienBestand.values().stream()
|
||||
.filter(m -> m.getTitel().toLowerCase().contains(suchbegriff.toLowerCase()))
|
||||
.forEach(m -> System.out.println("- " + m.getDetails()));
|
||||
}
|
||||
|
||||
public void medienFiltern(Predicate<Medien> kriterium) {
|
||||
System.out.println("Gefilterte Medien:");
|
||||
medienBestand.values().stream()
|
||||
.filter(kriterium)
|
||||
.forEach(m -> System.out.println("- " + m.getDetails()));
|
||||
}
|
||||
|
||||
public void medienAusleihen(String medienId, String kundenId) {
|
||||
Optional.ofNullable(medienBestand.get(medienId))
|
||||
.ifPresentOrElse(
|
||||
medien -> Optional.ofNullable(kundenListe.get(kundenId))
|
||||
.ifPresentOrElse(
|
||||
kunde -> kunde.medienAusleihen(medien),
|
||||
() -> System.out.println("Kunde nicht gefunden.")
|
||||
),
|
||||
() -> System.out.println("Medium nicht gefunden.")
|
||||
);
|
||||
}
|
||||
|
||||
public void medienZurueckgeben(String medienId, String kundenId) {
|
||||
Optional.ofNullable(medienBestand.get(medienId))
|
||||
.ifPresentOrElse(
|
||||
medien -> Optional.ofNullable(kundenListe.get(kundenId))
|
||||
.ifPresentOrElse(
|
||||
kunde -> kunde.medienZurueckgeben(medien),
|
||||
() -> System.out.println("Kunde nicht gefunden.")
|
||||
),
|
||||
() -> System.out.println("Medium nicht gefunden.")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package Bibliothek;
|
|||
|
||||
public class Brettspiel extends Medien {
|
||||
private int spieleranzahl;
|
||||
private int spieldauer; // in Minuten
|
||||
private int spieldauer;
|
||||
|
||||
public Brettspiel(String id, String titel, int erscheinungsjahr, int spieleranzahl, int spieldauer) {
|
||||
super(id, titel, erscheinungsjahr);
|
||||
|
@ -11,12 +11,17 @@ public class Brettspiel extends Medien {
|
|||
}
|
||||
|
||||
@Override
|
||||
public int getAusleihdauer() { return 3; } // 3 Wochen für Brettspiele
|
||||
public int getAusleihdauer() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxVerlaengerungen() { return 2; } // Brettspiele können 2-mal verlängert werden
|
||||
public int getMaxVerlaengerungen() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDetails() {
|
||||
return "Brettspiel: " + titel + ", Spieleranzahl: " + spieleranzahl + ", Spieldauer: " + spieldauer + " Minuten";
|
||||
return "Brettspiel: " + titel + " (" + erscheinungsjahr + "), Spieleranzahl: " + spieleranzahl + ", Spieldauer: " + spieldauer + " Minuten";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,12 +11,17 @@ public class Buch extends Medien {
|
|||
}
|
||||
|
||||
@Override
|
||||
public int getAusleihdauer() { return 4; } // 4 Wochen
|
||||
public int getAusleihdauer() {
|
||||
return 4;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxVerlaengerungen() { return 3; }
|
||||
public int getMaxVerlaengerungen() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDetails() {
|
||||
return "Buch: " + titel + " von " + autor + " (" + erscheinungsjahr + "), Seiten: " + seitenanzahl;
|
||||
return "Buch: " + titel + " von " + autor + " (" + erscheinungsjahr + "), " + seitenanzahl + " Seiten";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,21 +2,26 @@ package Bibliothek;
|
|||
|
||||
public class CD extends Medien {
|
||||
private String kuenstler;
|
||||
private int anzahlTitel;
|
||||
private int tracks;
|
||||
|
||||
public CD(String id, String titel, int erscheinungsjahr, String kuenstler, int anzahlTitel) {
|
||||
public CD(String id, String titel, int erscheinungsjahr, String kuenstler, int tracks) {
|
||||
super(id, titel, erscheinungsjahr);
|
||||
this.kuenstler = kuenstler;
|
||||
this.anzahlTitel = anzahlTitel;
|
||||
this.tracks = tracks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAusleihdauer() { return 2; } // 2 Wochen für CDs
|
||||
public int getAusleihdauer() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxVerlaengerungen() { return 2; } // CDs können maximal 2-mal verlängert werden
|
||||
public int getMaxVerlaengerungen() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDetails() {
|
||||
return "CD: " + titel + " von " + kuenstler + " (" + erscheinungsjahr + "), Titelanzahl: " + anzahlTitel;
|
||||
return "CD: " + titel + " von " + kuenstler + " (" + erscheinungsjahr + "), " + tracks + " Tracks";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package Bibliothek;
|
|||
|
||||
public class DVD extends Medien {
|
||||
private String regisseur;
|
||||
private int spieldauer; // Spieldauer in Minuten
|
||||
private int spieldauer;
|
||||
|
||||
public DVD(String id, String titel, int erscheinungsjahr, String regisseur, int spieldauer) {
|
||||
super(id, titel, erscheinungsjahr);
|
||||
|
@ -11,9 +11,14 @@ public class DVD extends Medien {
|
|||
}
|
||||
|
||||
@Override
|
||||
public int getAusleihdauer() { return 1; } // 1 Woche für DVDs
|
||||
public int getAusleihdauer() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxVerlaengerungen() { return 1; } // DVDs können nur einmal verlängert werden
|
||||
public int getMaxVerlaengerungen() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDetails() {
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
package Bibliothek;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class Kunde extends User {
|
||||
private boolean istStudent; // True, wenn Kunde ein Student ist
|
||||
private double gebuehren; // Offene Gebühren
|
||||
|
||||
public Kunde(String id, String name, boolean istStudent) {
|
||||
super(id, name);
|
||||
this.istStudent = istStudent;
|
||||
this.gebuehren = 0.0;
|
||||
}
|
||||
|
||||
public boolean istStudent() {
|
||||
return istStudent;
|
||||
}
|
||||
|
||||
public double getGebuehren() {
|
||||
return gebuehren;
|
||||
}
|
||||
|
||||
public void gebuehrenErhoehen(double betrag) {
|
||||
this.gebuehren += betrag;
|
||||
}
|
||||
|
||||
public void berechneGebuehren() {
|
||||
// Gebühren berechnen basierend auf verspäteter Rückgabe
|
||||
ausgelieheneMedien.forEach(medien -> {
|
||||
if (medien.getRueckgabedat().isBefore(java.time.LocalDate.now())) {
|
||||
int ueberfaelligeTage = java.time.Period.between(
|
||||
medien.getRueckgabedat(),
|
||||
java.time.LocalDate.now()
|
||||
).getDays();
|
||||
|
||||
double tagessatz = istStudent ? 0.5 : 1.0; // Studenten zahlen 50% weniger
|
||||
gebuehren += ueberfaelligeTage <= 7
|
||||
? ueberfaelligeTage * tagessatz
|
||||
: (7 * tagessatz) + ((ueberfaelligeTage - 7) * 2);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void medienVerlaengern(Medien medien, int aktuelleVerlaengerungen) {
|
||||
Consumer<Medien> verlaengerung = m -> {
|
||||
if (ausgelieheneMedien.contains(m) && m.verlaengern(aktuelleVerlaengerungen)) {
|
||||
System.out.println("Medium verlängert: " + m.getTitel());
|
||||
} else {
|
||||
System.out.println("Verlängerung nicht möglich.");
|
||||
}
|
||||
};
|
||||
verlaengerung.accept(medien);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rolleAnzeigen() {
|
||||
System.out.println("Kunde: " + name + (istStudent ? " (Student)" : " (Erwachsener)"));
|
||||
}
|
||||
}
|
|
@ -6,14 +6,13 @@ public abstract class Medien {
|
|||
protected String titel;
|
||||
protected String id;
|
||||
protected int erscheinungsjahr;
|
||||
protected boolean verfuegbar;
|
||||
protected boolean verfuegbar = true;
|
||||
protected LocalDate rueckgabedat;
|
||||
|
||||
public Medien(String titel, String id, int erscheinungsjahr) {
|
||||
this.titel = titel;
|
||||
this.id = id;
|
||||
this.erscheinungsjahr = erscheinungsjahr;
|
||||
this.verfuegbar = true;
|
||||
}
|
||||
public String getTitel() {
|
||||
return titel;
|
||||
|
@ -27,6 +26,14 @@ public abstract class Medien {
|
|||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public LocalDate getRueckgabedat() {
|
||||
return rueckgabedat;
|
||||
}
|
||||
|
||||
public boolean verfuegbar(){
|
||||
return verfuegbar;
|
||||
}
|
||||
public int getErscheinungsjahr() {
|
||||
return erscheinungsjahr;
|
||||
}
|
||||
|
@ -47,13 +54,22 @@ public abstract class Medien {
|
|||
}
|
||||
|
||||
public boolean verlaengern(int aktuelleVerlaengerungen) {
|
||||
if (aktuelleVerlaengerungen < getMaxVerlaengerungen()) {
|
||||
rueckgabedat = rueckgabedat.plusWeeks(getAusleihdauer());
|
||||
return true;
|
||||
if (verfuegbar) {
|
||||
System.out.println("Medium '" + titel + "' ist verfügbar und kann nicht verlängert werden.");
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
if (rueckgabedat == null) {
|
||||
System.out.println("Medium '" + titel + "' hat kein Rückgabedatum. Verlängerung nicht möglich.");
|
||||
return false;
|
||||
}
|
||||
if (aktuelleVerlaengerungen >= getMaxVerlaengerungen()) {
|
||||
System.out.println("Medium '" + titel + "' kann nicht weiter verlängert werden. Maximale Verlängerungen erreicht.");
|
||||
return false;
|
||||
}
|
||||
rueckgabedat = rueckgabedat.plusWeeks(getAusleihdauer());
|
||||
System.out.println("Medium '" + titel + "' wurde verlängert. Neues Rückgabedatum: " + rueckgabedat);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void zurueckgeben() {
|
||||
verfuegbar = true;
|
||||
rueckgabedat = null;
|
||||
|
|
|
@ -1,4 +1,50 @@
|
|||
package Bibliothek;
|
||||
|
||||
public class User {
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class User {
|
||||
protected String id;
|
||||
protected String name;
|
||||
protected List<Medien> ausgelieheneMedien;
|
||||
|
||||
public User(String id, String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.ausgelieheneMedien = new ArrayList<>();
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public List<Medien> getAusgelieheneMedien() {
|
||||
return ausgelieheneMedien;
|
||||
}
|
||||
|
||||
public void medienAusleihen(Medien medien) {
|
||||
if (medien.verfuegbar()) {
|
||||
medien.ausleihen();
|
||||
ausgelieheneMedien.add(medien);
|
||||
System.out.println(name + " hat '" + medien.getTitel() + "' ausgeliehen.");
|
||||
} else {
|
||||
System.out.println("'" + medien.getTitel() + "' ist nicht verfügbar.");
|
||||
}
|
||||
}
|
||||
|
||||
public void medienZurueckgeben(Medien medien) {
|
||||
if (ausgelieheneMedien.contains(medien)) {
|
||||
medien.zurueckgeben();
|
||||
ausgelieheneMedien.remove(medien);
|
||||
System.out.println(name + " hat '" + medien.getTitel() + "' zurückgegeben.");
|
||||
} else {
|
||||
System.out.println("'" + medien.getTitel() + "' wurde nicht von " + name + " ausgeliehen.");
|
||||
}
|
||||
}
|
||||
|
||||
public abstract void rolleAnzeigen();
|
||||
}
|
||||
|
|
|
@ -1,22 +1,27 @@
|
|||
package Bibliothek;
|
||||
|
||||
public class Videospiel extends Medien {
|
||||
private String plattform; // z.B. PC, PlayStation, Xbox
|
||||
private String genre;
|
||||
private String plattform;
|
||||
private String entwickler;
|
||||
|
||||
public Videospiel(String id, String titel, int erscheinungsjahr, String plattform, String genre) {
|
||||
public Videospiel(String id, String titel, int erscheinungsjahr, String plattform, String entwickler) {
|
||||
super(id, titel, erscheinungsjahr);
|
||||
this.plattform = plattform;
|
||||
this.genre = genre;
|
||||
this.entwickler = entwickler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAusleihdauer() { return 2; } // 2 Wochen für Videospiele
|
||||
public int getAusleihdauer() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxVerlaengerungen() { return 1; } // Videospiele können nur einmal verlängert werden
|
||||
public int getMaxVerlaengerungen() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDetails() {
|
||||
return "Videospiel: " + titel + " (" + plattform + ", Genre: " + genre + ", " + erscheinungsjahr + ")";
|
||||
return "Videospiel: " + titel + " (" + erscheinungsjahr + "), Plattform: " + plattform + ", Entwickler: " + entwickler;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue