package backend.medium; // Interface für backend.medium.Medien, die ausgeliehen werden können interface Ausleihbar { int getMaxVerlängerungen(); // Gibt die maximale Anzahl an Verlängerungen zurück boolean kannVerlängern(); // Prüft, ob das Medium verlängerbar ist boolean verlängern(); // Verlängert das Medium, wenn möglich } // Abstrakte Basisklasse für alle backend.medium.Medien public abstract class Medien implements Ausleihbar { protected String name; protected int id; protected int frist; // Standard-Ausleihfrist in Wochen protected int maxVerlängerungen; // Maximale Anzahl an möglichen Verlängerungen protected int aktuelleVerlängerungen = 0; // Aktuelle Anzahl an durchgeführten Verlängerungen public boolean istAusgeliehen; // Status, ob das Medium ausgeliehen ist // Konstruktor public Medien(String name, int id, int frist, int maxVerlängerungen) { this.name = name; this.id = id; this.frist = frist; this.maxVerlängerungen = maxVerlängerungen; } // Getter-Methoden public String getName() { return name; } public int getId() { return id; } // Implementierung der backend.medium.Ausleihbar-Methoden @Override public int getMaxVerlängerungen() { return maxVerlängerungen; } @Override public boolean kannVerlängern() { return aktuelleVerlängerungen < maxVerlängerungen; } @Override public boolean verlängern() { if (kannVerlängern()) { aktuelleVerlängerungen++; return true; // Verlängerung erfolgreich } return false; // Keine Verlängerung mehr möglich } public boolean istAusgeliehen() { return istAusgeliehen; } public void ausleihen() { if (!istAusgeliehen) { istAusgeliehen = true; } else { System.out.println("Das Medium ist bereits ausgeliehen."); } } public int getAktuelleVerlängerungen() { return aktuelleVerlängerungen; } public void zurückgeben() { istAusgeliehen = false; } }