2024-11-13 17:48:43 +01:00
|
|
|
// Interface für 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 Medien
|
|
|
|
public abstract class Medien implements Ausleihbar {
|
2024-11-08 16:21:34 +01:00
|
|
|
protected String name;
|
|
|
|
protected int id;
|
2024-11-13 17:48:43 +01:00
|
|
|
protected int frist; // Standard-Ausleihfrist in Wochen
|
|
|
|
protected int maxVerlängerungen; // Maximale Anzahl an möglichen Verlängerungen
|
2024-11-19 12:59:15 +01:00
|
|
|
protected int aktuelleVerlängerungen=1; // Aktuelle Anzahl an durchgeführten Verlängerungen
|
2024-11-13 17:48:43 +01:00
|
|
|
protected boolean istAusgeliehen; // Status, ob das Medium ausgeliehen ist
|
2024-11-08 16:21:34 +01:00
|
|
|
|
|
|
|
// Konstruktor
|
2024-11-13 17:48:43 +01:00
|
|
|
public Medien(String name, int id, int frist, int maxVerlängerungen) {
|
2024-11-08 16:21:34 +01:00
|
|
|
this.name = name;
|
|
|
|
this.id = id;
|
2024-11-13 17:48:43 +01:00
|
|
|
this.frist = frist;
|
|
|
|
this.maxVerlängerungen = maxVerlängerungen;
|
|
|
|
this.aktuelleVerlängerungen = 0; // Initialisierung ohne Verlängerungen
|
2024-11-19 12:59:15 +01:00
|
|
|
// Initialer Status: nicht ausgeliehen
|
2024-11-08 16:21:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Getter-Methoden
|
|
|
|
public String getName() {
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getId() {
|
|
|
|
return id;
|
|
|
|
}
|
|
|
|
|
2024-11-13 17:48:43 +01:00
|
|
|
// Implementierung der Ausleihbar-Methoden
|
|
|
|
@Override
|
|
|
|
public int getMaxVerlängerungen() {
|
|
|
|
return maxVerlängerungen;
|
2024-11-08 16:21:34 +01:00
|
|
|
}
|
|
|
|
|
2024-11-13 17:48:43 +01:00
|
|
|
@Override
|
|
|
|
public boolean kannVerlängern() {
|
|
|
|
return aktuelleVerlängerungen < maxVerlängerungen;
|
2024-11-08 16:21:34 +01:00
|
|
|
}
|
|
|
|
|
2024-11-13 17:48:43 +01:00
|
|
|
@Override
|
|
|
|
public boolean verlängern() {
|
|
|
|
if (kannVerlängern()) {
|
|
|
|
aktuelleVerlängerungen++;
|
|
|
|
return true; // Verlängerung erfolgreich
|
|
|
|
}
|
|
|
|
return false; // Keine Verlängerung mehr möglich
|
2024-11-08 16:21:34 +01:00
|
|
|
}
|
|
|
|
|
2024-11-13 17:48:43 +01:00
|
|
|
public boolean istAusgeliehen() {
|
|
|
|
return istAusgeliehen;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void ausleihen() {
|
|
|
|
if (!istAusgeliehen) {
|
|
|
|
istAusgeliehen = true;
|
|
|
|
} else {
|
|
|
|
System.out.println("Das Medium ist bereits ausgeliehen.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void zurückgeben() {
|
|
|
|
istAusgeliehen = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Unterklasse für Bücher
|
2024-11-19 18:01:56 +01:00
|
|
|
public static class Book extends Medien
|
|
|
|
{
|
2024-11-13 17:48:43 +01:00
|
|
|
private String autor;
|
|
|
|
private int erscheinungsjahr;
|
|
|
|
|
|
|
|
public Book(String name, String autor, int id, int erscheinungsjahr) {
|
|
|
|
super(name, id, 4, 3); // Frist für Bücher ist 4 Wochen, bis zu 3 Mal verlängerbar
|
|
|
|
this.autor = autor;
|
|
|
|
this.erscheinungsjahr = erscheinungsjahr;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Getter-Methoden für spezifische Eigenschaften von Büchern
|
|
|
|
public String getAutor() {
|
|
|
|
return autor;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getErscheinungsjahr() {
|
|
|
|
return erscheinungsjahr;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "Buch: " + name + " von " + autor + " (ID: " + id + ", Jahr: " + erscheinungsjahr + ")";
|
2024-11-08 16:21:34 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-13 17:48:43 +01:00
|
|
|
// Unterklasse für DVDs
|
2024-11-08 16:21:34 +01:00
|
|
|
public static class Dvds extends Medien {
|
2024-11-13 17:48:43 +01:00
|
|
|
private String regisseur;
|
|
|
|
|
|
|
|
public Dvds(String name, String regisseur, int id) {
|
2024-11-19 16:48:39 +01:00
|
|
|
super(name, id, 7, 0); // Frist für DVDs ist 1 Woche, keine Verlängerung möglich
|
2024-11-13 17:48:43 +01:00
|
|
|
this.regisseur = regisseur;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Getter-Methoden für spezifische Eigenschaften von DVDs
|
|
|
|
public String getRegisseur() {
|
|
|
|
return regisseur;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "DVD: " + name + " von " + regisseur + " (ID: " + id + ")";
|
2024-11-08 16:21:34 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-13 17:48:43 +01:00
|
|
|
// Unterklasse für CDs
|
2024-11-08 16:21:34 +01:00
|
|
|
public static class Cds extends Medien {
|
2024-11-13 17:48:43 +01:00
|
|
|
public Cds(String name, int id) {
|
2024-11-19 16:48:39 +01:00
|
|
|
super(name, id, 14, 0); // Frist für CDs ist 2 Wochen, keine Verlängerung möglich
|
2024-11-13 17:48:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "CD: " + name + " (ID: " + id + ")";
|
2024-11-08 16:21:34 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-13 17:48:43 +01:00
|
|
|
// Unterklasse für Brettspiele
|
2024-11-08 16:21:34 +01:00
|
|
|
public static class Brettspiel extends Medien {
|
2024-11-13 17:48:43 +01:00
|
|
|
public Brettspiel(String name, int id) {
|
2024-11-19 16:48:39 +01:00
|
|
|
super(name, id, 14, 0); // Frist für Brettspiele ist 2 Wochen, keine Verlängerung möglich
|
2024-11-13 17:48:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "Brettspiel: " + name + " (ID: " + id + ")";
|
2024-11-08 16:21:34 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-13 17:48:43 +01:00
|
|
|
// Unterklasse für Videospiele
|
2024-11-08 16:21:34 +01:00
|
|
|
public static class Videospiel extends Medien {
|
2024-11-13 17:48:43 +01:00
|
|
|
private String entwickler;
|
|
|
|
|
|
|
|
public Videospiel(String name, String entwickler, int id) {
|
2024-11-19 18:01:56 +01:00
|
|
|
super(name, id, 28 , 1); // Frist für Videospiele ist 4 Wochen, einmal verlängerbar
|
2024-11-13 17:48:43 +01:00
|
|
|
this.entwickler = entwickler;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Getter-Methoden für spezifische Eigenschaften von Videospielen
|
|
|
|
public String getEntwickler() {
|
|
|
|
return entwickler;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "Videospiel: " + name + " von " + entwickler + " (ID: " + id + ")";
|
2024-11-08 16:21:34 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|