Verbesserungen, Berechnung der Gebühren muss noch verbessert werden

devIoana
ioana 2024-11-17 15:20:38 +01:00
parent af98476a1a
commit 1faa14fd5f
16 changed files with 383 additions and 316 deletions

View File

@ -1,4 +1,4 @@
package LibrarySystem.UI; /*package LibrarySystem.UI;
import LibrarySystem.domain.benutzern.*; import LibrarySystem.domain.benutzern.*;
import LibrarySystem.domain.medien.*; import LibrarySystem.domain.medien.*;
@ -22,8 +22,8 @@ public class BibTest {
system.benutzerRegistrieren(student); system.benutzerRegistrieren(student);
// Medien erstellen // Medien erstellen
Medium buch = new Buch(123, "Java Programmieren", "BP", 2020,"Buch"); Medium buch = new Buch("123", "Java Programmieren", "BP", 2020,"Buch");
Medium dvd = new DVD(456, "Der große Film", "JP",2018, "DVD"); Medium dvd = new DVD("456", "Der große Film", "JP",2018, "DVD");
// Datum setzen und Ausleihe simulieren // Datum setzen und Ausleihe simulieren
system.datumAendern(LocalDate.of(2024, 11, 10)); system.datumAendern(LocalDate.of(2024, 11, 10));
@ -34,7 +34,7 @@ public class BibTest {
// Rückgabe simulieren // Rückgabe simulieren
system.datumAendern(LocalDate.of(2024, 12, 15)); // Datum ändern system.datumAendern(LocalDate.of(2024, 12, 15)); // Datum ändern
student.rueckgabe(456, system.getAktuellesDatum()); student.rueckgabe("456", system.getAktuellesDatum());
//Bezahlung der Gebühren simulieren //Bezahlung der Gebühren simulieren
system.zeigeGebuehren(erwachsener); system.zeigeGebuehren(erwachsener);
@ -55,4 +55,4 @@ public class BibTest {
System.out.println("Jahresgebühr: " + admin.getJahresgebuehr() + " EUR"); System.out.println("Jahresgebühr: " + admin.getJahresgebuehr() + " EUR");
} }
} }*/

View File

@ -8,12 +8,6 @@ public class BibliothekTest {
public static void main(String[] args) { public static void main(String[] args) {
BibliothekSystem system = new BibliothekSystem(); BibliothekSystem system = new BibliothekSystem();
// Beispiel: Benutzer und Admin hinzufügen
Benutzer student = new Student("Ana Misk", 21);
Admin admin = new Admin("Alisa Admin", 40);
system.benutzerRegistrieren(student);
system.benutzerRegistrieren(admin);
// UI starten // UI starten
UI ui = new UI(system); UI ui = new UI(system);
ui.starten(); ui.starten();

View File

@ -16,90 +16,86 @@ public class UI {
public void starten() { public void starten() {
while (true) { while (true) {
System.out.println("Willkommen in der Bibliothek!"); System.out.println("Willkommen in der Bibliothek!\n");
System.out.println("1. Anmelden"); System.out.println("1. Anmelden");
System.out.println("2. Medien durchsuchen"); System.out.println("2. Medien durchsuchen");
System.out.println("3. Ausleihen eines Mediums"); System.out.println("3. Ausleihen eines Mediums");
System.out.println("4. Rückgabe eines Mediums"); System.out.println("4. Rückgabe eines Mediums");
System.out.println("5. Zeige ausgeliehene Gegenstände und Gebühren"); System.out.println("5. Zeige ausgeliehene Medien und Gebühren");
System.out.println("6. Verlängern der Leihfrist"); System.out.println("6. Verlängern der Leihfrist");
System.out.println("7. Admin-Login (Überfällige Gebühren verbuchen)"); System.out.println("7. Admin-Login (Überfällige Gebühren verbuchen)");
System.out.println("0. Beenden"); System.out.println("0. Beenden\n");
System.out.print("Bitte wählen Sie eine Option: "); System.out.print("Bitte wählen Sie eine Option: ");
int auswahl = scanner.nextInt(); int auswahl = scanner.nextInt();
scanner.nextLine(); scanner.nextLine();
switch (auswahl) { switch (auswahl) {
case 1: case 1 -> anmelden();
anmelden(); case 2 -> durchsuchenMedien();
break; case 3 -> ausleihenMedium();
case 2: case 4 -> rueckgabeMedium();
durchsuchenMedien(); case 5 -> zeigeAusgelieheneMedienUndGebuehren();
break; case 6 -> verlaengernLeihfrist();
case 3: case 7 -> adminLogin();
ausleihenMedium(); case 0 -> {
break;
case 4:
rueckgabeMedium();
break;
case 5:
zeigeAusgelieheneMedienUndGebuehren();
break;
case 6:
verlaengernLeihfrist();
break;
case 7:
adminLogin();
break;
case 0:
System.out.println("Auf Wiedersehen!"); System.out.println("Auf Wiedersehen!");
return; return;
default: }
System.out.println("Ungültige Auswahl, bitte erneut versuchen."); default -> System.out.println("Ungültige Auswahl, bitte erneut versuchen.");
} }
} }
} }
private void anmelden() { //1. Anmelden
System.out.print("Bitte geben Sie Ihre Kartennummer ein: "); private void anmelden() {
String kartennummer = scanner.nextLine(); System.out.print("Bitte geben Sie Ihre Kartennummer ein: ");
Benutzer benutzer = system.anmelden(kartennummer); String kartennummer = scanner.nextLine();
if (benutzer != null) { Benutzer benutzer = system.anmelden(kartennummer);
System.out.println("Erfolgreich angemeldet als: " + benutzer.getName()); if (benutzer != null) {
} System.out.println("Willkommen! Erfolgreich angemeldet als: " + benutzer.getName());
} } else {
System.out.println("Flasche Kartennummer. Bitte erneut versuchen!");
private void durchsuchenMedien() { }
System.out.println("Durchsuchen der Medien: (bitte nur Titel und Medienart eingeben)");
System.out.println("Titel: ");
String titel = scanner.nextLine();
System.out.println("Medienart: ");
String medienart = scanner.nextLine();
system.durchsuchenMedien(titel, medienart);
}
private void ausleihenMedium() {
System.out.print("Bitte geben Sie die ID des Mediums ein, das Sie ausleihen möchten: ");
String mediumId = scanner.nextLine();
// Beispiel: Medium finden und ausleihen
System.out.println("Medium mit ID " + mediumId + " ausgeliehen.");
} }
//2. Medien durchsuchen
private void durchsuchenMedien() {
System.out.println("Durchsuchen der Medien: (bitte nur Titel und Medienart eingeben)");
System.out.println("Titel: ");
String titel = scanner.nextLine();
System.out.println("Medienart: ");
String medienart = scanner.nextLine();
system.durchsuchenMedien(titel, medienart);
}
//3. Ausleihe eines Mediums
private void ausleihenMedium() {
System.out.println("Bitte melden Sie sich mit der Kartennummer ein: ");
String kartennummer = scanner.nextLine();
System.out.print("Bitte geben Sie die ID des Mediums ein, das Sie ausleihen möchten: ");
String mediumID = scanner.nextLine();
system.ausleiheMedium(kartennummer, mediumID);
}
//4. Rückgabe eines Mediums
private void rueckgabeMedium() { private void rueckgabeMedium() {
System.out.print("Bitte geben Sie die ID des Mediums ein, das Sie zurückgeben möchten: "); System.out.print("Bitte geben Sie die ID des Mediums ein, das Sie zurückgeben möchten: ");
String mediumId = scanner.nextLine(); String mediumId = scanner.nextLine();
// Beispiel: Medium zurückgeben system.rueckgabeMedium(mediumId);
System.out.println("Medium mit ID " + mediumId + " zurückgegeben.");
} }
//5. Zeige ausgeliehene Medien und Gebühren
private void zeigeAusgelieheneMedienUndGebuehren() { private void zeigeAusgelieheneMedienUndGebuehren() {
System.out.print("Bitte geben Sie Ihre Kartennummer ein: "); System.out.print("Bitte geben Sie Ihre Kartennummer ein: ");
String kartennummer = scanner.nextLine(); String kartennummer = scanner.nextLine();
Benutzer benutzer = system.anmelden(kartennummer); Benutzer benutzer = system.anmelden(kartennummer);
if (benutzer != null) { if (benutzer != null) {
system.zeigeGebuehren(benutzer); //system.zeigeGebuehren(benutzer);
benutzer.anzeigenAusleihen();
} }
} }
//6. Verlängern der Leihfrist
private void verlaengernLeihfrist() { private void verlaengernLeihfrist() {
System.out.print("Bitte geben Sie die ID des Mediums ein, dessen Leihfrist Sie verlängern möchten: "); System.out.print("Bitte geben Sie die ID des Mediums ein, dessen Leihfrist Sie verlängern möchten: ");
String mediumId = scanner.nextLine(); String mediumId = scanner.nextLine();
@ -107,6 +103,7 @@ public class UI {
// Logik zur Verlängerung der Leihfrist hinzufügen // Logik zur Verlängerung der Leihfrist hinzufügen
} }
//7. Admin-Login
private void adminLogin() { private void adminLogin() {
System.out.print("Bitte geben Sie Ihre Admin-Kartennummer ein: "); System.out.print("Bitte geben Sie Ihre Admin-Kartennummer ein: ");
String kartennummer = scanner.nextLine(); String kartennummer = scanner.nextLine();
@ -125,7 +122,6 @@ public class UI {
} }
} }

View File

@ -1,64 +0,0 @@
package LibrarySystem.domain.ausleihe;
import LibrarySystem.domain.medien.*;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
public class Ausleihe {
private Medium medium;
private LocalDate ausleiheDatum;
private LocalDate rueckgabeFrist;
private boolean zurueckgegeben;
public Ausleihe(Medium medium, LocalDate ausleiheDatum) {
this.medium = medium;
this.ausleiheDatum = ausleiheDatum;
this.rueckgabeFrist = ausleiheDatum.plusDays(medium.getAusleihdauer());
this.zurueckgegeben = false;
}
// Methode zur Berechnung der Gebühren
public double berechneGebuehren(LocalDate aktuellesDatum) {
if (zurueckgegeben || aktuellesDatum.isBefore(rueckgabeFrist)) {
return 0.0; // Keine Gebühren, wenn noch rechtzeitig
}
long ueberfaelligeTage = ChronoUnit.DAYS.between(rueckgabeFrist, aktuellesDatum);
double gebuehren = 0.0;
if (ueberfaelligeTage <= 7) {
gebuehren = ueberfaelligeTage * 1.0; // 1€ pro Tag für die ersten 7 Tage
} else {
gebuehren = (7 * 1.0) + ((ueberfaelligeTage - 7) * 2.0); // 2€ pro Tag ab dem 8. Tag
}
return gebuehren;
}
public boolean isZurueckgegeben() {
return zurueckgegeben;
}
public void setZurueckgegeben(boolean zurueckgegeben) {
this.zurueckgegeben = zurueckgegeben;
}
public Medium getMedium() {
return medium;
}
public LocalDate getRueckgabeFrist() {
return rueckgabeFrist;
}
@Override
public String toString() {
return medium.getTitel() + " (Rückgabefrist: " + rueckgabeFrist + ")";
}
}

View File

@ -3,12 +3,10 @@ package LibrarySystem.domain.benutzern;
import LibrarySystem.domain.medien.Medium; import LibrarySystem.domain.medien.Medium;
import java.time.LocalDate;
public class Admin extends Benutzer { public class Admin extends Benutzer {
public Admin(String name, int alter) { public Admin(String kartennummer, String name, int alter) {
super(name, alter, "A"); super(kartennummer,name, alter, "A");
} }
@Override @Override
@ -32,10 +30,5 @@ public class Admin extends Benutzer {
System.out.println("Keine offene Gebühren für " + benutzer.getName() + ".") ; System.out.println("Keine offene Gebühren für " + benutzer.getName() + ".") ;
} }
} }
@Override
public void ausleihen(Medium medium, LocalDate datum) {
System.out.println("Admins können keine Medien ausleihen.");
}
} }

View File

@ -1,23 +1,19 @@
package LibrarySystem.domain.benutzern; package LibrarySystem.domain.benutzern;
import LibrarySystem.domain.ausleihe.*;
import LibrarySystem.domain.medien.*; import LibrarySystem.domain.medien.*;
import java.time.LocalDate; import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public abstract class Benutzer { public abstract class Benutzer {
private String kartennummer; private String kartennummer;
private String name; private String name;
private int alter; private int alter;
private List<Ausleihe> ausleihen; private List<Medium> ausleihen;
private double offeneGebuehren; private double offeneGebuehren;
private boolean gebuehrenBezahlt; private boolean gebuehrenBezahlt;
Benutzer(String name, int alter, String prefix) { Benutzer(String kartennummer, String name, int alter, String prefix) {
this.kartennummer = generiereKartennummer(prefix); this.kartennummer = prefix + kartennummer;
this.name = name; this.name = name;
this.alter = alter; this.alter = alter;
this.ausleihen = new ArrayList<>(); this.ausleihen = new ArrayList<>();
@ -25,98 +21,54 @@ public abstract class Benutzer {
this.gebuehrenBezahlt = true; // Zu Beginn keine Gebühren offen this.gebuehrenBezahlt = true; // Zu Beginn keine Gebühren offen
} }
public void aktualisiereGebuehren(LocalDate aktuellesDatum) { //Getter und Setter
if (gebuehrenBezahlt) return; // Keine Aktualisierung erforderlich, wenn bezahlt public String getKartennummer() {return kartennummer;}
public void setkartennummer(String kartennummer) {this.kartennummer = kartennummer;}
offeneGebuehren = 0.0; public String getName() {return name;}
for (Ausleihe ausleihe : ausleihen) { public void setName(String name) {this.name = name;}
offeneGebuehren += ausleihe.berechneGebuehren(aktuellesDatum); public int getAlter() {return alter;}
} public void setAlter(int alter) {this.alter = alter;}
} public List<Medium> getAusleihen() {return ausleihen;}
public void bezahleGebuehren() {
offeneGebuehren = 0.0;
gebuehrenBezahlt = true;
}
public void ausleihen(Medium medium, LocalDate datum) {
Ausleihe neueAusleihe = new Ausleihe(medium, datum);
ausleihen.add(neueAusleihe);
System.out.println(name + " hat \"" + medium.getTitel() + "\" ausgeliehen. Rückgabefrist: " + neueAusleihe.getRueckgabeFrist());
gebuehrenBezahlt = false; // Neue Ausleihe bedeutet potenziell offene Gebühren
}
public void rueckgabe(int mediumId, LocalDate aktuellesDatum) {
Ausleihe zuRueckgeben = null;
for (Ausleihe ausleihe : ausleihen) {
if (ausleihe.getMedium().getID() == mediumId) {
zuRueckgeben = ausleihe;
break;
}
}
if (zuRueckgeben != null) {
ausleihen.remove(zuRueckgeben);
System.out.println("Das Medium \"" + zuRueckgeben.getMedium().getTitel() + "\" wurde zurückgegeben.");
if (aktuellesDatum.isAfter(zuRueckgeben.getRueckgabeFrist())) {
long ueberfaelligeTage = aktuellesDatum.toEpochDay() - zuRueckgeben.getRueckgabeFrist().toEpochDay();
System.out.println("Achtung: Rückgabe verspätet! Überfällig um " + ueberfaelligeTage + " Tage.");
}
} else {
System.out.println("Kein Medium mit der ID \"" + mediumId + "\" gefunden.");
}
// Noch ausgeliehene Medien anzeigen
System.out.println("Aktuell ausgeliehene Medien:");
for (Ausleihe ausleihe : ausleihen) {
System.out.println(ausleihe);
}
}
public void anzeigenAusleihen() {
System.out.println("Aktuell ausgeliehene Medien:");
for (Ausleihe ausleihe : ausleihen) {
System.out.println(ausleihe);
}
}
// Generiert eine eindeutige Kartennummer mit Präfix
private String generiereKartennummer(String prefix) {
return prefix + UUID.randomUUID().toString().substring(0, 8);
}
// Abstrakte Methode für die Jahresgebühr // Abstrakte Methode für die Jahresgebühr
public abstract double getJahresgebuehr(); public abstract double getJahresgebuehr();
public String getKartennummer() { //Methode fürs Ausleihen
return kartennummer; public void ausleihen(Medium medium) {
if(!medium.istAusgeliehen()){
ausleihen.add(medium);
medium.ausleihen();
//System.out.println(name + " hat \"" + medium.getTitel() + "\" ausgeliehen. Rückgabefrist: " + medium.getRueckgabedatum());
} else{
System.out.println("Das Medium ist bereits ausgeliehen.");
}
//gebuehrenBezahlt = false; // Neue Ausleihe bedeutet potenziell offene Gebühren
} }
public void setkartennummer(String kartennummer) { //Methode für die Rückgabe
this.kartennummer = kartennummer; public void rueckgabe(Medium medium) {
} if(ausleihen.contains(medium)){
ausleihen.remove(medium);
public String getName() { medium.rueckgabeMedium();
return name; }
} else{
System.out.println("Dieses Medium von diesem Benutzer nicht ausgeliehen.");
public void setName(String name) { }
this.name = name;
} }
public int getAlter() { //Methode zum Anzeigen der Ausleihen eines Benutzers
return alter; public void anzeigenAusleihen() {
System.out.println("Aktuell ausgeliehene Medien von " + name + ":\n");
for (Medium medium : ausleihen) {
System.out.println("- " + medium.getTitel() + " (Fällig am: " + medium.getRueckgabedatum() + ")\n");
}
} }
public void setAlter(int alter) { public double setOffeneGebuehren(double gebuehren){
this.alter = alter; return gebuehren+= gebuehren;
} }
public List<Ausleihe> getAusleihen() {
return ausleihen;
}
public double getOffeneGebuehren() { public double getOffeneGebuehren() {
return offeneGebuehren; return offeneGebuehren;
@ -126,6 +78,22 @@ public abstract class Benutzer {
return gebuehrenBezahlt; return gebuehrenBezahlt;
} }
/*public void aktualisiereGebuehren(Date aktuellesDatum) {
if (gebuehrenBezahlt) return; // Keine Aktualisierung erforderlich, wenn bezahlt
offeneGebuehren = 0.0;
for (Medium ausleihe : ausleihen) {
offeneGebuehren += ausleihe.berechneGebuehren(aktuellesDatum);
}
}*/
public void bezahleGebuehren() {
offeneGebuehren = 0.0;
gebuehrenBezahlt = true;
}
@Override @Override
public String toString() { public String toString() {
return "Name: " + name + ", Alter: " + alter + ", Kartennummer: " + kartennummer; return "Name: " + name + ", Alter: " + alter + ", Kartennummer: " + kartennummer;

View File

@ -2,10 +2,10 @@ package LibrarySystem.domain.benutzern;
public class Erwachsener extends Benutzer { public class Erwachsener extends Benutzer {
private static final double JAHRESGEBUEHR = 20.0; private static final double JAHRESGEBUEHR = 50.0;
public Erwachsener(String name, int alter) { public Erwachsener(String kartennummer,String name, int alter) {
super(name, alter, "E"); super(kartennummer, name, alter, "E");
} }
@Override @Override

View File

@ -2,10 +2,10 @@ package LibrarySystem.domain.benutzern;
public class Student extends Benutzer { public class Student extends Benutzer {
private static final double JAHRESGEBUEHR_ERMAESSIGT = 10.0; private static final double JAHRESGEBUEHR_ERMAESSIGT = 25.0;
public Student(String name, int alter) { public Student(String kartennummer, String name, int alter) {
super(name, alter, "S"); super(kartennummer, name, alter, "S");
} }
@Override @Override

View File

@ -1,6 +1,7 @@
package LibrarySystem.domain.medien; package LibrarySystem.domain.medien;
public interface Ausleihbar { public interface Ausleihbar {
int getAusleihdauer(); void ausleihen();
boolean getVerlaengerbar(); void rueckgabeMedium();
boolean istOverdue();
} }

View File

@ -4,19 +4,24 @@ package LibrarySystem.domain.medien;
public class Brettspiel extends Medium { public class Brettspiel extends Medium {
private static final int AUSLEIHDAUER = 14; // 2 Wochen private static final int AUSLEIHDAUER = 14; // 2 Wochen
public Brettspiel(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { public Brettspiel(String ID, String titel, String autor, int erscheinungsjahr, String medienart) {
super(ID, titel, autor, erscheinungsjahr, medienart); super(ID, titel, autor, erscheinungsjahr, medienart);
} }
@Override
public boolean getVerlaengerbar() {
return false;
}
@Override @Override
public int getAusleihdauer() { public int getAusleihdauer() {
return AUSLEIHDAUER; return AUSLEIHDAUER;
} }
@Override
public boolean istVerlaengerbar() {
return false; //Keine Verlängerung
}
@Override
public void verlaengern() {
System.out.println("Brettspiele können nicht verlängert werden.");
}
} }

View File

@ -4,19 +4,32 @@ package LibrarySystem.domain.medien;
public class Buch extends Medium { public class Buch extends Medium {
private static final int AUSLEIHDAUER = 28; //4 Wochen in Tagen private static final int AUSLEIHDAUER = 28; //4 Wochen in Tagen
private int verlaengerungen = 3;
public Buch(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { public Buch(String ID, String titel, String autor, int erscheinungsjahr, String medienart) {
super(ID, titel, autor, erscheinungsjahr, medienart); super(ID, titel, autor, erscheinungsjahr, medienart);
} }
@Override
public boolean getVerlaengerbar() {
return true;
}
@Override @Override
public int getAusleihdauer() { public int getAusleihdauer() {
return AUSLEIHDAUER; return AUSLEIHDAUER;
} }
@Override
public boolean istVerlaengerbar() {
return verlaengerungen >0;
}
@Override
public void verlaengern() {
if (istVerlaengerbar()) {
verlaengerungen--;
rechneRueckgabedatum(); //Verlängerung
} else{
System.out.println("Keine Verlängerung mehr möglich.");
}
}
} }

View File

@ -3,18 +3,24 @@ package LibrarySystem.domain.medien;
public class CD extends Medium { public class CD extends Medium {
public static final int AUSLEIHDAUER = 14; // 2 Wochen public static final int AUSLEIHDAUER = 14; // 2 Wochen
public CD(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { public CD(String ID, String titel, String autor, int erscheinungsjahr, String medienart) {
super(ID, titel, autor, erscheinungsjahr, medienart); super(ID, titel, autor, erscheinungsjahr, medienart);
} }
@Override
public boolean getVerlaengerbar() {
return false;
}
@Override @Override
public int getAusleihdauer() { public int getAusleihdauer() {
return AUSLEIHDAUER; return AUSLEIHDAUER;
} }
@Override
public boolean istVerlaengerbar() {
return false;
}
@Override
public void verlaengern() {
System.out.println("CDs können nicht verlängert werden.");
}
} }

View File

@ -3,19 +3,25 @@ package LibrarySystem.domain.medien;
public class DVD extends Medium { public class DVD extends Medium {
private static final int AUSLEIHDAUER = 7; // 1 Woche private static final int AUSLEIHDAUER = 7; // 1 Woche
public DVD(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { public DVD(String ID, String titel, String autor, int erscheinungsjahr, String medienart) {
super(ID, titel, autor, erscheinungsjahr, medienart); super(ID, titel, autor, erscheinungsjahr, medienart);
} }
@Override
public boolean getVerlaengerbar() {
return false;
}
@Override @Override
public int getAusleihdauer() { public int getAusleihdauer() {
return AUSLEIHDAUER; return AUSLEIHDAUER;
} }
@Override
public boolean istVerlaengerbar() {
return false; //Keine Verlängerung
}
@Override
public void verlaengern() {
System.out.println("DVDs können nicht verlängert werden.");
}
} }

View File

@ -1,78 +1,100 @@
package LibrarySystem.domain.medien; package LibrarySystem.domain.medien;
public abstract class Medium implements Ausleihbar { import java.time.LocalDate;
private int ID; import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Date;
public abstract class Medium implements Ausleihbar{
private String ID;
private String titel; private String titel;
private String autor; private String autor;
private int erscheinungsjahr; private int erscheinungsjahr;
private String medienart; private String medienart;
private boolean istAusgeliehen; private boolean ausgeliehen;
private Date rueckgabedatum;
public Medium(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { public Medium(String ID, String titel, String autor, int erscheinungsjahr, String medienart) {
this.ID = ID; this.ID = ID;
this.titel = titel; this.titel = titel;
this.autor = autor; this.autor = autor;
this.erscheinungsjahr = erscheinungsjahr; this.erscheinungsjahr = erscheinungsjahr;
this.medienart = medienart; this.medienart = medienart;
this.istAusgeliehen = false; this.ausgeliehen = false;
} }
// Abstrakte Methoden: Jede Unterklasse definiert ihre Ausleihdauer und Verlängerbarkeit
public abstract boolean getVerlaengerbar();
public abstract int getAusleihdauer(); //Getter und Setter
public String getID() {
public int getID() {
return ID; return ID;
} }
public void setID(String ID) {
public void setID(int ID) {
this.ID = ID; this.ID = ID;
} }
public String getTitel() { public String getTitel() {
return titel; return titel;
} }
public void setTitel(String titel) { public void setTitel(String titel) {
this.titel = titel; this.titel = titel;
} }
public String getAutor() { public String getAutor() {
return autor; return autor;
} }
public void setAutor(String autor) { public void setAutor(String autor) {
this.autor = autor; this.autor = autor;
} }
public int getErscheinungsjahr() { public int getErscheinungsjahr() {
return erscheinungsjahr; return erscheinungsjahr;
} }
public void setErscheinungsjahr(int erscheinungsjahr) { public void setErscheinungsjahr(int erscheinungsjahr) {
this.erscheinungsjahr = erscheinungsjahr; this.erscheinungsjahr = erscheinungsjahr;
} }
public String getMedienart() {return medienart;}
public void setMedienart(String Medienart) {this.medienart = Medienart;}
public boolean istAusgeliehen() {return ausgeliehen;}
public void setAusgeliehen() {this.ausgeliehen = true;}
public void setRueckgabe(){this.ausgeliehen = false;}
public Date getRueckgabedatum(){return rueckgabedatum;}
public void setRueckgabedatum(Date rueckgabedatum){this.rueckgabedatum = rueckgabedatum;}
public String getMedienart() {
return medienart;
}
public void setMedienart(String Medienart) { //Andere nützliche Methoden
this.medienart = Medienart; public Date rechneRueckgabedatum(){
} Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, getAusleihdauer());
this.rueckgabedatum = calendar.getTime();
return rueckgabedatum;
}
public boolean istAusgeliehen() { //Abstrakte Methoden
return istAusgeliehen; public abstract int getAusleihdauer();
} public abstract boolean istVerlaengerbar();
public abstract void verlaengern();
public void setIstAusgeliehen(boolean istAusgeliehen) { @Override
this.istAusgeliehen = istAusgeliehen; public void ausleihen() {
} if(!istAusgeliehen()){
setAusgeliehen();
rechneRueckgabedatum();
} else{
System.out.println("Medium ist bereits ausgeliehen.");
}
}
@Override @Override
public void rueckgabeMedium() {
setRueckgabe();
}
@Override
public boolean istOverdue() {
return new Date().after(getRueckgabedatum());
}
@Override
public String toString() { public String toString() {
return "ID: " + ID + ", Titel: " + titel + ", Autor: " + autor + ", Erscheinungsjahr: " + erscheinungsjahr; return "ID: " + ID + ", Titel: " + titel + ", Autor: " + autor + ", Erscheinungsjahr: " + erscheinungsjahr;
} }
} }

View File

@ -2,19 +2,31 @@ package LibrarySystem.domain.medien;
public class Videospiel extends Medium { public class Videospiel extends Medium {
private static final int AUSLEIHDAUER = 28; // 4 Wochen private static final int AUSLEIHDAUER = 28; // 4 Wochen
private int verlaengerungen = 1;
public Videospiel(int ID, String titel, String autor, int erscheinungsjahr, String medienart) { public Videospiel(String ID, String titel, String autor, int erscheinungsjahr, String medienart) {
super(ID, titel, autor, erscheinungsjahr, medienart); super(ID, titel, autor, erscheinungsjahr, medienart);
} }
@Override
public boolean getVerlaengerbar() {
return true;
}
@Override @Override
public int getAusleihdauer() { public int getAusleihdauer() {
return AUSLEIHDAUER; return AUSLEIHDAUER;
} }
@Override
public boolean istVerlaengerbar() {
return verlaengerungen>0;
}
@Override
public void verlaengern() {
if (istVerlaengerbar()){
verlaengerungen--;
rechneRueckgabedatum(); //Verlängerung
} else {
System.out.println("Keine Verlängerung mehr möglich");
}
}
} }

View File

@ -1,56 +1,88 @@
package LibrarySystem.facade; package LibrarySystem.facade;
//Imports aus domain
import LibrarySystem.domain.benutzern.*; import LibrarySystem.domain.benutzern.*;
import LibrarySystem.domain.medien.*; import LibrarySystem.domain.medien.*;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class BibliothekSystem { public class BibliothekSystem {
private List<Benutzer> benutzerListe; private List<Benutzer> benutzerListe;
private LocalDate aktuellesDatum; private Date aktuellesDatum;
private List<Medium> medienListe; private List<Medium> medienListe;
public BibliothekSystem() { public BibliothekSystem() {
this.benutzerListe = new ArrayList<>(); this.benutzerListe = new ArrayList<>();
this.aktuellesDatum = LocalDate.now(); this.aktuellesDatum = new Date();
this.medienListe = new ArrayList<>(); this.medienListe = new ArrayList<>();
initialMedienHinzufuegen(); initialMedienHinzufuegen();
initialBenutzerHinzufuegen();
} }
// Methode zum Hinzufügen von Medien // Methode zum Hinzufügen von Medien
private void initialMedienHinzufuegen() { private void initialMedienHinzufuegen() {
// Beispiel-Medien hinzufügen // Beispiel-Medien hinzufügen
Buch buch1 = new Buch(123,"Java lernen", "Max Mustermann", 2020, "Buch"); Buch buch1 = new Buch("123","Java lernen", "Max Mustermann", 2020, "Buch");
Buch buch2 = new Buch(234,"Java für Einsteiger", "Erika Musterfrau", 2014, "Buch"); Buch buch2 = new Buch("234","Java für Einsteiger", "Erika Musterfrau", 2014, "Buch");
DVD dvd1 = new DVD(345,"Die Matrix", "Lana Wachowski", 2014, "DVD"); Buch buch3 = new Buch("2345","Java für Einsteiger", "Erika Musterfrau", 2014, "Buch");
CD cd1 = new CD(456,"Best of Mozart", "-", 1850, "CD"); DVD dvd1 = new DVD("345","Die Matrix", "Lana Wachowski", 2014, "DVD");
Brettspiel brettspiel1 = new Brettspiel(567,"Monopoly", "-",2010, "Brettspiel"); DVD dvd2 = new DVD("543","Die Matrix", "Lana Wachowski", 2014, "DVD");
Videospiel videospiel1 = new Videospiel(678,"Minecraft", "-", 2011, "Videospiel"); CD cd1 = new CD("456","Best of Mozart", "-", 1850, "CD");
CD cd2 = new CD("654","Christmas Carols", "-", 2000, "CD");
Brettspiel brettspiel1 = new Brettspiel("567","Monopoly", "-",2010, "Brettspiel");
Brettspiel brettspiel2 = new Brettspiel("765","Siedler von Catan", "-",2014, "Brettspiel");
Videospiel videospiel1 = new Videospiel("678","Minecraft", "-", 2011, "Videospiel");
Videospiel videospiel2 = new Videospiel("876","Call of Duty", "-", 2017, "Videospiel");
// Medien zur Bibliothek hinzufügen // Medien zur Bibliothek hinzufügen
addMedium(buch1); addMedium(buch1);
addMedium(buch2); addMedium(buch2);
addMedium(buch3);
addMedium(dvd1); addMedium(dvd1);
addMedium(dvd2);
addMedium(cd1); addMedium(cd1);
addMedium(cd2);
addMedium(brettspiel1); addMedium(brettspiel1);
addMedium(brettspiel2);
addMedium(videospiel1); addMedium(videospiel1);
addMedium(videospiel2);
} }
//Methode zum Hinzufügen von Medien in die Medienliste
public void addMedium(Medium medium) { public void addMedium(Medium medium) {
medienListe.add(medium); medienListe.add(medium);
} }
// Methode zum Hinzufügen von Benutzern und Admin
private void initialBenutzerHinzufuegen(){
Benutzer student = new Student("1234567", "Ana Misk", 21);
Benutzer erwachsener = new Erwachsener("2345678","Paul Mark", 34);
Admin admin = new Admin("3456789", "Alisa Admin", 40);
benutzerRegistrieren(student);
benutzerRegistrieren(erwachsener);
benutzerRegistrieren(admin);
}
//Methode zum Anmelden eines Benutzers
public Benutzer anmelden(String kartennummer) {
for (Benutzer benutzer : benutzerListe) {
if (benutzer.getKartennummer().equals(kartennummer)) {
return benutzer;
}
}
System.out.println("Benutzer nicht gefunden.");
return null;
}
// Durchsuchen der Medien nach einem Titel (Teilstring) und Filterung nach Eigenschaften // Durchsuchen der Medien nach einem Titel (Teilstring) und Filterung nach Eigenschaften
public List<Medium> durchsuchenMedien(String titelTeil, String medienart) { public List<Medium> durchsuchenMedien(String titelTeil, String medienart) {
List medienliste = medienListe.stream() List medienliste = medienListe.stream()
.filter(m -> m.getTitel().toLowerCase().contains(titelTeil.toLowerCase())) // Titel-Filter .filter(m -> m.getTitel().toLowerCase().contains(titelTeil.toLowerCase())) // Titel-Filter
.filter(m -> medienart == null || m.getMedienart().equalsIgnoreCase(medienart)) // Medienart-Filter .filter(m -> medienart == null || m.getMedienart().equalsIgnoreCase(medienart)) // Medienart-Filter
//.filter(m -> istAusgeliehen == null || m.istAusgeliehen() == istAusgeliehen) // Ausleihstatus-Filter //.filter(m -> ausgeliehen == null || m.istAusgeliehen() == istAusgeliehen) // Ausleihstatus-Filter
.collect(Collectors.toList()); .collect(Collectors.toList());
if(medienliste.isEmpty()) { if(medienliste.isEmpty()) {
@ -62,12 +94,101 @@ public class BibliothekSystem {
} }
public void datumAendern(LocalDate neuesDatum) { // Methode zum Ausleihen eines Mediums
public void ausleiheMedium(String kartennummer, String mediumID){
Benutzer benutzer = anmelden(kartennummer);
Medium medium = findeMedium(mediumID);
if (benutzer != null && medium != null && !medium.istAusgeliehen()) {
benutzer.ausleihen(medium);
medium.setRueckgabedatum(medium.rechneRueckgabedatum());
System.out.println(benutzer.getName() + " hat " + medium.getTitel() + " ausgeliehen.");
System.out.println("Rückgabedatum: " + medium.getRueckgabedatum());
} else {
System.out.println("Ausleihe nicht möglich.");
}
}
//Methode zum Rückgeben eines Mediums
public void rueckgabeMedium(String mediumID){
Medium medium = findeMedium(mediumID);
Benutzer ausleiher = null;
if(medium == null) {
System.out.println("Medium mit der ID " + mediumID + " nicht gefunden.");
return;
}
if(!medium.istAusgeliehen()) {
System.out.println("Medium '"+medium.getTitel()+"' nicht gefunden.");
return;
}
// Benutzer finden, der das Medium ausgeliehen hat
for(Benutzer benutzer : benutzerListe) {
if(benutzer.getAusleihen().contains(medium)){
ausleiher = benutzer;
break;
}
}
if(ausleiher == null) {
System.out.println("Kein Benutzer gefunden, der dieses Medium ausgeliehen hat.");
return;
}
//Medium zurückgeben
try {
ausleiher.rueckgabe(medium);
System.out.println("Medium '"+medium.getTitel()+"' wurde erfolgreich zurückgegeben.");
if(aktuellesDatum.after(medium.getRueckgabedatum())){
long overdueTage = (aktuellesDatum.getTime() - medium.getRueckgabedatum().getTime()) / (1000 * 60 * 60 * 24);
System.out.println("überfällige Tagen: " + overdueTage);
double gebuehr = rechneOverdueGebuehren(overdueTage);
ausleiher.setOffeneGebuehren(gebuehr);
System.out.println("Überfällige Gebühren für " + ausleiher.getName() + gebuehr + " Eur.");
}else {
System.out.println("Keine überfällige Gebühren.");
}
ausleiher.anzeigenAusleihen();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
//Methode zum Verlängern eines Mediums
public void verlaengernMedium(String kartennummer,String mediumID){
Benutzer benutzer = anmelden(kartennummer);
Medium medium = findeMedium(mediumID);
if (benutzer != null && medium != null && medium.istAusgeliehen()) {
medium.verlaengern();
System.out.println("Leihfrist für '" + medium.getTitel() + "' verlängert.");
System.out.println("Neues Rückgabedatum: " + medium.getRueckgabedatum());
} else {
System.out.println("Verlängerung nicht möglich.");
}
}
//Methode zum Finden eines Benutzers
public Benutzer findeBenutzer(String kartennummer) {
return benutzerListe.get(Integer.parseInt(kartennummer));
}
//Methode zum Finden eines Mediums
public Medium findeMedium(String ID) {
return medienListe.stream()
.filter(m -> m.getID().equals(ID))
.findFirst()
.orElse(null);
}
//Methode, um das Systemdatum zu setzen
public void setAktuellesDatum(Date neuesDatum) {
this.aktuellesDatum = neuesDatum; this.aktuellesDatum = neuesDatum;
System.out.println("Systemdatum geändert auf: " + aktuellesDatum); System.out.println("Systemdatum geändert auf: " + aktuellesDatum);
} }
public LocalDate getAktuellesDatum() { public Date getAktuellesDatum() {
return aktuellesDatum; return aktuellesDatum;
} }
@ -76,7 +197,7 @@ public class BibliothekSystem {
System.out.println("Benutzer registriert: " + benutzer); System.out.println("Benutzer registriert: " + benutzer);
} }
public void zeigeGebuehren(Benutzer benutzer) { /*public void zeigeGebuehren(Benutzer benutzer) {
benutzer.aktualisiereGebuehren(aktuellesDatum); benutzer.aktualisiereGebuehren(aktuellesDatum);
if (benutzer.sindGebuehrenBezahlt()) { if (benutzer.sindGebuehrenBezahlt()) {
@ -84,16 +205,10 @@ public class BibliothekSystem {
} else { } else {
System.out.println("Aktuelle Gebühren für " + benutzer.getName() + ": " + benutzer.getOffeneGebuehren() + "€"); System.out.println("Aktuelle Gebühren für " + benutzer.getName() + ": " + benutzer.getOffeneGebuehren() + "€");
} }
}*/
public double rechneOverdueGebuehren(long overdueTagen) {
return overdueTagen * 1; // 1 euro pro Tag
} }
public Benutzer anmelden(String kartennummer) {
for (Benutzer benutzer : benutzerListe) {
if (benutzer.getKartennummer().equals(kartennummer)) {
System.out.println("Willkommen, " + benutzer.getName() + "!");
return benutzer;
}
}
System.out.println("Benutzer nicht gefunden.");
return null;
}
} }