Bib1/Medien.java

162 lines
4.9 KiB
Java

// 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 {
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=1; // Aktuelle Anzahl an durchgeführten Verlängerungen
protected 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;
this.aktuelleVerlängerungen = 0; // Initialisierung ohne Verlängerungen
// Initialer Status: nicht ausgeliehen
}
// Getter-Methoden
public String getName() {
return name;
}
public int getId() {
return id;
}
// Implementierung der 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 void zurückgeben() {
istAusgeliehen = false;
}
// Unterklasse für Bücher
public static class Book extends Medien {
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 + ")";
}
}
// Unterklasse für DVDs
public static class Dvds extends Medien {
private String regisseur;
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
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 + ")";
}
}
// Unterklasse für CDs
public static class Cds extends Medien {
public Cds(String name, int id) {
super(name, id, 2, 0); // Frist für CDs ist 2 Wochen, keine Verlängerung möglich
}
@Override
public String toString() {
return "CD: " + name + " (ID: " + id + ")";
}
}
// Unterklasse für Brettspiele
public static class Brettspiel extends Medien {
public Brettspiel(String name, int id) {
super(name, id, 2, 0); // Frist für Brettspiele ist 2 Wochen, keine Verlängerung möglich
}
@Override
public String toString() {
return "Brettspiel: " + name + " (ID: " + id + ")";
}
}
// Unterklasse für Videospiele
public static class Videospiel extends Medien {
private String entwickler;
public Videospiel(String name, String entwickler, int id) {
super(name, id, 4, 1); // Frist für Videospiele ist 4 Wochen, einmal verlängerbar
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 + ")";
}
}
}