Feature-Admin #2
|
|
@ -2,7 +2,7 @@ package DomainLayer;
|
||||||
|
|
||||||
public class Admin extends User {
|
public class Admin extends User {
|
||||||
public Admin(String id, String name) {
|
public Admin(String id, String name) {
|
||||||
super(id, name, 0); // Admin hat keine Jahresgebühr
|
super(id, name, 0.0, "admin"); // Admin hat keine jährliche Gebühr, wird aber als "admin" gesetzt
|
||||||
}
|
}
|
||||||
|
|
||||||
// Admin-spezifische Funktionen
|
// Admin-spezifische Funktionen
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
package DomainLayer;
|
package DomainLayer;
|
||||||
|
|
||||||
public class Adult extends User {
|
public class Adult extends User {
|
||||||
private static final double REGULAR_FEE = 50.0; // Jahresgebühr für Erwachsene
|
private static final double REGULAR_FEE = 50.0; // Jahresgebühr für Erwachsene
|
||||||
|
|
||||||
public Adult(String id, String name) {
|
public Adult(String id, String name) {
|
||||||
super(id, name, REGULAR_FEE);
|
super(id, name, REGULAR_FEE, "user");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package DomainLayer;
|
package DomainLayer;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
|
|
||||||
public class BoardGame extends Medium {
|
public class BoardGame extends Medium {
|
||||||
public BoardGame(String id, String title, String releaseYear) {
|
public BoardGame(String id, String title, String releaseYear) {
|
||||||
|
|
@ -9,12 +8,12 @@ public class BoardGame extends Medium {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getBorrowPeriod() {
|
public int getBorrowPeriod() {
|
||||||
return 14; // 2 Wochen
|
return 14; // 1 Woche für DVDs
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRenewable() {
|
public boolean isRenewable() {
|
||||||
return false; // Keine Verlängerung möglich
|
return false; // Keine Verlängerung für DVDs
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -24,13 +23,6 @@ public class BoardGame extends Medium {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getAuthor() {
|
public String getAuthor() {
|
||||||
// TODO Auto-generated method stub
|
return null; // DVDs haben keinen Autor
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setBorrowDate(LocalDate currentDate) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,16 +1,14 @@
|
||||||
package DomainLayer;
|
package DomainLayer;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
|
|
||||||
public class Book extends Medium {
|
public class Book extends Medium {
|
||||||
private String author; // Nur Bücher haben einen Autor
|
private String author; // Nur Bücher haben einen Autor
|
||||||
|
|
||||||
|
// Konstruktor
|
||||||
public Book(String id, String title, String releaseYear, String author) {
|
public Book(String id, String title, String releaseYear, String author) {
|
||||||
super(id, title, releaseYear); // Aufruf des Konstruktors der Oberklasse Medium
|
super(id, title, releaseYear); // Aufruf des Konstruktors der Oberklasse Medium
|
||||||
this.author = author;
|
this.author = author;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implementierung von getAuthor() für Bücher
|
|
||||||
@Override
|
@Override
|
||||||
public String getAuthor() {
|
public String getAuthor() {
|
||||||
return this.author; // Gibt den Autor des Buches zurück
|
return this.author; // Gibt den Autor des Buches zurück
|
||||||
|
|
@ -18,22 +16,16 @@ public class Book extends Medium {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getBorrowPeriod() {
|
public int getBorrowPeriod() {
|
||||||
return 28; // 4 Wochen
|
return 28; // 4 Wochen für Bücher
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRenewable() {
|
public boolean isRenewable() {
|
||||||
return true; // Verlängerung möglich
|
return true; // Bücher können verlängert werden
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxRenewals() {
|
public int getMaxRenewals() {
|
||||||
return 3; // Bis zu 3 Mal verlängerbar
|
return 3; // Maximale 3 Verlängerungen für Bücher
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setBorrowDate(LocalDate currentDate) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,27 @@
|
||||||
package DomainLayer;
|
package DomainLayer;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
|
|
||||||
public class CD extends Medium {
|
public class CD extends Medium {
|
||||||
public CD(String id, String title, String releaseYear) {
|
public CD(String id, String title, String releaseYear) {
|
||||||
super(id, title, releaseYear);
|
super(id, title, releaseYear);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getBorrowPeriod() {
|
public int getBorrowPeriod() {
|
||||||
return 14; // 2 Wochen
|
return 14; // 1 Woche für DVDs
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRenewable() {
|
public boolean isRenewable() {
|
||||||
return false; // Keine Verlängerung möglich
|
return false; // Keine Verlängerung für DVDs
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxRenewals() {
|
public int getMaxRenewals() {
|
||||||
return 0; // Keine Verlängerung
|
return 0; // Keine Verlängerung
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getAuthor() {
|
public String getAuthor() {
|
||||||
// TODO Auto-generated method stub
|
return null; // DVDs haben keinen Autor
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setBorrowDate(LocalDate currentDate) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,36 +1,27 @@
|
||||||
package DomainLayer;
|
package DomainLayer;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
|
|
||||||
public class DVD extends Medium {
|
public class DVD extends Medium {
|
||||||
public DVD(String id, String title, String releaseYear) {
|
public DVD(String id, String title, String releaseYear) {
|
||||||
super(id, title, releaseYear);
|
super(id, title, releaseYear);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getBorrowPeriod() {
|
public int getBorrowPeriod() {
|
||||||
return 7; // 1 Woche
|
return 7; // 1 Woche für DVDs
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRenewable() {
|
public boolean isRenewable() {
|
||||||
return false; // Keine Verlängerung möglich
|
return false; // Keine Verlängerung für DVDs
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxRenewals() {
|
public int getMaxRenewals() {
|
||||||
return 0; // Keine Verlängerung
|
return 0; // Keine Verlängerung
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getAuthor() {
|
public String getAuthor() {
|
||||||
// TODO Auto-generated method stub
|
return null; // DVDs haben keinen Autor
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setBorrowDate(LocalDate currentDate) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
package DomainLayer;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
public interface Loanable {
|
||||||
|
int getBorrowPeriod(); // Gibt die Ausleihfrist in Tagen zurück
|
||||||
|
boolean isRenewable(); // Gibt an, ob das Medium verlängert werden kann
|
||||||
|
int getMaxRenewals(); // Gibt die maximale Anzahl an Verlängerungen zurück
|
||||||
|
void setBorrowDate(LocalDate borrowDate); // Setzt das Ausleihdatum
|
||||||
|
LocalDate getDueDate(); // Gibt das Fälligkeitsdatum zurück
|
||||||
|
}
|
||||||
|
|
@ -2,77 +2,79 @@ package DomainLayer;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
|
||||||
public abstract class Medium {
|
public abstract class Medium implements Loanable {
|
||||||
private String id;
|
private String id;
|
||||||
private String title;
|
private String title;
|
||||||
private String releaseYear;
|
private String releaseYear;
|
||||||
private boolean isBorrowed;
|
private boolean isBorrowed;
|
||||||
private LocalDate borrowDate;
|
private LocalDate borrowDate;
|
||||||
private LocalDate dueDate;
|
private LocalDate dueDate;
|
||||||
private int renewals;
|
|
||||||
|
|
||||||
public Medium(String id, String title, String releaseYear) {
|
// Konstruktor
|
||||||
this.id = id;
|
public Medium(String id, String title, String releaseYear) {
|
||||||
this.title = title;
|
this.id = id;
|
||||||
this.releaseYear = releaseYear;
|
this.title = title;
|
||||||
this.isBorrowed = false;
|
this.releaseYear = releaseYear;
|
||||||
this.renewals = 0;
|
}
|
||||||
}
|
|
||||||
|
private int renewals = 0; // Anzahl der bisherigen Verlängerungen
|
||||||
|
|
||||||
public String getId() {
|
// Getter und Setter für Verlängerungen
|
||||||
return id;
|
public int getRenewals() {
|
||||||
}
|
return renewals;
|
||||||
|
}
|
||||||
|
|
||||||
public String getTitle() {
|
public void increaseRenewals() {
|
||||||
return title;
|
renewals++;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getReleaseYear() {
|
public void resetRenewals() {
|
||||||
return releaseYear;
|
renewals = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isBorrowed() {
|
|
||||||
return isBorrowed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBorrowed(boolean borrowed) {
|
@Override
|
||||||
this.isBorrowed = borrowed;
|
public void setBorrowDate(LocalDate borrowDate) {
|
||||||
}
|
this.borrowDate = borrowDate;
|
||||||
|
this.dueDate = borrowDate != null ? borrowDate.plusDays(getBorrowPeriod()) : null; // Fälligkeitsdatum berechnen
|
||||||
|
}
|
||||||
|
|
||||||
public LocalDate getDueDate() {
|
|
||||||
return dueDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDueDate(LocalDate dueDate) {
|
@Override
|
||||||
this.dueDate = dueDate;
|
public LocalDate getDueDate() {
|
||||||
}
|
return dueDate;
|
||||||
|
}
|
||||||
|
|
||||||
public int getRenewals() {
|
public void setDueDate(LocalDate dueDate) {
|
||||||
return renewals;
|
this.dueDate = dueDate; // Erlaubt sowohl ein Datum als auch null
|
||||||
}
|
}
|
||||||
|
|
||||||
public void increaseRenewals() {
|
|
||||||
this.renewals++;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void resetRenewals() {
|
public boolean isBorrowed() {
|
||||||
this.renewals = 0;
|
return isBorrowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Abstrakte Methoden
|
public void setBorrowed(boolean borrowed) {
|
||||||
public abstract int getBorrowPeriod();
|
isBorrowed = borrowed;
|
||||||
public abstract boolean isRenewable();
|
}
|
||||||
public abstract int getMaxRenewals();
|
|
||||||
|
|
||||||
// Neue Methode für den Autor
|
public String getId() {
|
||||||
public abstract String getAuthor();
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
public LocalDate getBorrowDate() {
|
public String getTitle() {
|
||||||
return borrowDate;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getReleaseYear() {
|
||||||
|
return releaseYear;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Neue Methode für den Autor
|
||||||
|
public abstract String getAuthor();
|
||||||
|
|
||||||
|
public LocalDate getBorrowDate() {
|
||||||
|
return borrowDate;
|
||||||
|
}
|
||||||
|
|
||||||
public void setBorrowDate(LocalDate borrowDate) {
|
|
||||||
this.borrowDate = borrowDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
package DomainLayer;
|
package DomainLayer;
|
||||||
|
|
||||||
public class Student extends User {
|
public class Student extends User {
|
||||||
private static final double DISCOUNTED_FEE = 25.0; // Jahresgebühr für Schüler/Studenten
|
private static final double DISCOUNTED_FEE = 25.0; // Jahresgebühr für Schüler/Studenten
|
||||||
|
|
||||||
public Student(String id, String name) {
|
public Student(String id, String name) {
|
||||||
super(id, name, DISCOUNTED_FEE);
|
super(id, name, DISCOUNTED_FEE, "user"); // Rolle als "user" setzen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,61 +4,69 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public abstract class User {
|
public abstract class User {
|
||||||
private String id;
|
private String id;
|
||||||
private String name;
|
private String name;
|
||||||
private double outstandingFees; // Ausstehende Gebühren
|
private double annualFee; // Jahresgebühr
|
||||||
private List<Medium> borrowedMedia;
|
private double outstandingFees; // Ausstehende Gebühren
|
||||||
|
private List<Medium> borrowedMedia;
|
||||||
|
private String role; // "admin", "user", "student", "scholar"
|
||||||
|
|
||||||
public User(String id, String name, double annualFee) {
|
public User(String id, String name, double annualFee, String role) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.outstandingFees = 0.0;
|
this.annualFee = annualFee;
|
||||||
this.borrowedMedia = new ArrayList<>();
|
this.outstandingFees = 0.0;
|
||||||
}
|
this.borrowedMedia = new ArrayList<>();
|
||||||
|
this.role = role; // Setzt die Rolle des Benutzers
|
||||||
|
}
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getOutstandingFees() {
|
public double getAnnualFee() {
|
||||||
|
return annualFee;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addFee(double fee) {
|
||||||
|
this.outstandingFees += fee;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void payFees(double amount) {
|
||||||
|
if (amount > outstandingFees) {
|
||||||
|
System.out.println("Der Betrag übersteigt die ausstehenden Gebühren.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
outstandingFees -= amount;
|
||||||
|
System.out.println("Zahlung von " + amount + "€ erfolgreich. Verbleibende Gebühren: " + outstandingFees + "€.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Medium> getBorrowedMedia() {
|
||||||
|
return borrowedMedia;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void borrowMedium(Medium medium) {
|
||||||
|
borrowedMedia.add(medium);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void returnMedium(Medium medium) {
|
||||||
|
borrowedMedia.remove(medium);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRole() {
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Benutzer{" + "ID='" + id + '\'' + ", Name='" + name + '\'' + ", Jahresgebühr=" + annualFee
|
||||||
|
+ ", Ausstehende Gebühren=" + outstandingFees + '}';
|
||||||
|
}
|
||||||
|
public double getOutstandingFees() {
|
||||||
return outstandingFees;
|
return outstandingFees;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public void addFee(double fee) {
|
|
||||||
this.outstandingFees += fee;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void payFees(double amount) {
|
|
||||||
if (amount > outstandingFees) {
|
|
||||||
System.out.println("Der Betrag übersteigt die ausstehenden Gebühren.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
outstandingFees -= amount;
|
|
||||||
System.out.println("Zahlung von " + amount + "€ erfolgreich. Verbleibende Gebühren: " + outstandingFees + "€.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Medium> getBorrowedMedia() {
|
|
||||||
return borrowedMedia;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void borrowMedium(Medium medium) {
|
|
||||||
borrowedMedia.add(medium);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void returnMedium(Medium medium) {
|
|
||||||
borrowedMedia.remove(medium);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "Benutzer{" +
|
|
||||||
"ID='" + id + '\'' +
|
|
||||||
", Name='" + name + '\'' +
|
|
||||||
", Ausstehende Gebühren=" + outstandingFees +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,28 @@
|
||||||
package DomainLayer;
|
package DomainLayer;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
|
|
||||||
public class VideoGame extends Medium {
|
public class VideoGame extends Medium {
|
||||||
public VideoGame(String id, String title, String releaseYear) {
|
public VideoGame(String id, String title, String releaseYear) {
|
||||||
super(id, title, releaseYear);
|
super(id, title, releaseYear);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getBorrowPeriod() {
|
public int getBorrowPeriod() {
|
||||||
return 28; // 4 Wochen
|
return 28; // 1 Woche für DVDs
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRenewable() {
|
public boolean isRenewable() {
|
||||||
return true; // Verlängerung möglich
|
return true; // Keine Verlängerung für DVDs
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxRenewals() {
|
public int getMaxRenewals() {
|
||||||
return 1; // Bis zu 1 Mal verlängerbar
|
return 1; // Keine Verlängerung
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getAuthor() {
|
public String getAuthor() {
|
||||||
// TODO Auto-generated method stub
|
return null; // DVDs haben keinen Autor
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setBorrowDate(LocalDate currentDate) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -8,111 +8,142 @@ import DomainLayer.User;
|
||||||
public class BorrowService {
|
public class BorrowService {
|
||||||
private LocalDate currentDate = LocalDate.now();
|
private LocalDate currentDate = LocalDate.now();
|
||||||
private LibraryService libraryService;
|
private LibraryService libraryService;
|
||||||
|
|
||||||
|
// Getter für das aktuelle Datum
|
||||||
public LocalDate getCurrentDate() {
|
public LocalDate getCurrentDate() {
|
||||||
return currentDate;
|
return currentDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String showOutstandingFees(User user) {
|
||||||
|
// Stelle sicher, dass der Benutzer ausstehende Gebühren hat
|
||||||
|
if (user != null) {
|
||||||
|
return "Ausstehende Gebühren für " + user.getName() + ": " + user.getOutstandingFees() + "€.";
|
||||||
|
} else {
|
||||||
|
return "Benutzer nicht gefunden.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Beispielmethode, die jetzt mit einer initialisierten LibraryService-Instanz
|
||||||
|
// arbeitet
|
||||||
public void setCurrentDate(LocalDate newDate) {
|
public void setCurrentDate(LocalDate newDate) {
|
||||||
this.currentDate = newDate;
|
this.currentDate = newDate;
|
||||||
|
|
||||||
// Überprüfen, ob ausgeliehene Medien ein korrektes Ausleihdatum haben
|
// Stelle sicher, dass libraryService nicht null ist, bevor du darauf zugreifst
|
||||||
for (Medium medium : libraryService.getAllMedia()) {
|
if (libraryService != null) {
|
||||||
if (medium.isBorrowed() && medium.getBorrowDate() == null) {
|
for (Medium medium : libraryService.getAllMedia()) {
|
||||||
medium.setBorrowDate(newDate); // Setze das aktuelle Datum als Ausleihdatum
|
if (medium.isBorrowed() && medium.getBorrowDate() == null) {
|
||||||
System.out.println("Warnung: Ausleihdatum für Medium '" + medium.getTitle()
|
medium.setBorrowDate(newDate); // Setze das Ausleihdatum
|
||||||
+ "' war null und wurde auf " + newDate + " gesetzt.");
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("Datum erfolgreich geändert: " + this.currentDate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renewMedium(User user, Medium medium, LocalDate newBorrowDate) {
|
// Verlängern eines Mediums
|
||||||
|
public String renewMedium(User user, Medium medium, LocalDate newBorrowDate) {
|
||||||
|
// Überprüfen, ob das Medium ausgeliehen ist
|
||||||
if (!medium.isBorrowed()) {
|
if (!medium.isBorrowed()) {
|
||||||
System.out.println("Das Medium wurde nicht ausgeliehen und kann daher nicht verlängert werden.");
|
return "Das Medium wurde nicht ausgeliehen.";
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wenn das neue Ausleihdatum gesetzt ist, verwenden wir dieses Datum, ansonsten das aktuelle Datum
|
// Überprüfen, ob der Benutzer das Medium ausgeliehen hat
|
||||||
if (newBorrowDate != null) {
|
if (!user.getBorrowedMedia().contains(medium)) {
|
||||||
medium.setBorrowDate(newBorrowDate); // Ausleihdatum auf das neue Datum setzen
|
return "Dieses Medium wurde nicht von Ihnen ausgeliehen und kann daher nicht verlängert werden.";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wenn das Medium keine Verlängerung erlaubt, breche ab
|
// Überprüfen, ob das Medium verlängerbar ist
|
||||||
if (!medium.isRenewable()) {
|
if (!medium.isRenewable()) {
|
||||||
System.out.println("Das Medium kann nicht verlängert werden.");
|
return "Das Medium kann nicht verlängert werden.";
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wenn die maximale Anzahl an Verlängerungen erreicht wurde
|
// Überprüfen, ob die maximale Anzahl an Verlängerungen erreicht wurde
|
||||||
if (medium.getRenewals() >= medium.getMaxRenewals()) {
|
if (medium.getRenewals() >= medium.getMaxRenewals()) {
|
||||||
System.out.println("Maximale Anzahl an Verlängerungen erreicht.");
|
return "Die maximale Anzahl an Verlängerungen wurde bereits erreicht.";
|
||||||
return;
|
}
|
||||||
|
|
||||||
|
// Optional: Ausleihdatum aktualisieren
|
||||||
|
if (newBorrowDate != null) {
|
||||||
|
medium.setBorrowDate(newBorrowDate); // Setze das neue Ausleihdatum
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verlängerung durchführen
|
// Verlängerung durchführen
|
||||||
medium.increaseRenewals();
|
medium.increaseRenewals();
|
||||||
medium.setDueDate(medium.getDueDate().plusDays(medium.getBorrowPeriod())); // Rückgabedatum basierend auf der Leihfrist anpassen
|
medium.setDueDate(medium.getDueDate().plusDays(medium.getBorrowPeriod())); // Rückgabedatum basierend auf der Leihfrist verlängern
|
||||||
System.out.println("Verlängerung erfolgreich. Neue Rückgabefrist: " + medium.getDueDate());
|
|
||||||
|
return "Verlängerung erfolgreich. Neue Rückgabefrist: " + medium.getDueDate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void borrowMedium(User user, Medium medium) {
|
|
||||||
if (medium.isBorrowed()) {
|
|
||||||
System.out.println("Das Medium ist bereits ausgeliehen.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verwende das aktuelle Datum als Ausleihdatum
|
|
||||||
LocalDate borrowDate = currentDate;
|
|
||||||
|
|
||||||
medium.setBorrowed(true);
|
// Ausleihen eines Mediums
|
||||||
medium.setBorrowDate(borrowDate); // Setze das aktuelle Datum als Ausleihdatum
|
public String borrowMedium(User user, Medium medium) {
|
||||||
medium.setDueDate(borrowDate.plusDays(medium.getBorrowPeriod())); // Berechne Rückgabedatum
|
if (medium.isBorrowed()) {
|
||||||
user.borrowMedium(medium);
|
return "Das Medium ist bereits ausgeliehen.";
|
||||||
|
}
|
||||||
|
|
||||||
System.out.println("Ausleihe erfolgreich. "
|
LocalDate borrowDate = LocalDate.now(); // Setze das aktuelle Datum als Ausleihdatum
|
||||||
+ medium.getDueDate());
|
medium.setBorrowDate(borrowDate); // Setze das Ausleihdatum und berechne das Fälligkeitsdatum
|
||||||
|
|
||||||
|
user.borrowMedium(medium); // Füge das Medium zur Liste der ausgeliehenen Medien des Benutzers hinzu
|
||||||
|
medium.setBorrowed(true); // Markiere das Medium als ausgeliehen
|
||||||
|
|
||||||
|
return "Ausleihe erfolgreich. Fällig am: " + medium.getDueDate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void returnMedium(User user, Medium medium) {
|
|
||||||
if (!medium.isBorrowed()) {
|
|
||||||
System.out.println("Das Medium wurde nicht ausgeliehen.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Berechnung der Gebühren
|
|
||||||
LocalDate dueDate = medium.getDueDate();
|
|
||||||
if (dueDate != null && currentDate.isAfter(dueDate)) {
|
|
||||||
long overdueDays = java.time.temporal.ChronoUnit.DAYS.between(dueDate, currentDate);
|
|
||||||
double fee;
|
|
||||||
if (overdueDays > 7) {
|
|
||||||
fee = 7 * 1 + (overdueDays - 7) * 2;
|
|
||||||
} else {
|
|
||||||
fee = overdueDays * 1;
|
|
||||||
}
|
|
||||||
user.addFee(fee);
|
|
||||||
System.out.println("Überfällige Gebühr: " + fee + "€.");
|
|
||||||
}
|
|
||||||
|
|
||||||
medium.setBorrowed(false);
|
// Rückgabe eines Mediums
|
||||||
medium.resetRenewals();
|
public String returnMedium(User user, Medium medium) {
|
||||||
medium.setDueDate(null); // Rückgabedatum zurücksetzen, Ausleihdatum bleibt unverändert
|
// Überprüfen, ob das Medium ausgeliehen ist
|
||||||
user.returnMedium(medium);
|
if (!medium.isBorrowed()) {
|
||||||
|
return "Das Medium wurde nicht ausgeliehen.";
|
||||||
|
}
|
||||||
|
|
||||||
System.out.println("Rückgabe erfolgreich.");
|
// Überprüfen, ob der Benutzer das Medium ausgeliehen hat
|
||||||
System.out.println("Noch ausgeliehene Medien:");
|
if (!user.getBorrowedMedia().contains(medium)) {
|
||||||
for (Medium m : user.getBorrowedMedia()) {
|
return "Dieses Medium wurde nicht von Ihnen ausgeliehen und kann daher nicht zurückgegeben werden.";
|
||||||
System.out.println("- " + m.getTitle() + " (Fällig am: " + m.getDueDate() + ")");
|
}
|
||||||
}
|
|
||||||
|
StringBuilder result = new StringBuilder(); // StringBuilder für die Rückgabewerte
|
||||||
|
result.append("Zurückgegebenes Medium: ").append(medium.getTitle()).append("\n");
|
||||||
|
|
||||||
|
// Berechnung der Gebühren
|
||||||
|
LocalDate dueDate = medium.getDueDate();
|
||||||
|
if (dueDate != null && currentDate.isAfter(dueDate)) {
|
||||||
|
long overdueDays = java.time.temporal.ChronoUnit.DAYS.between(dueDate, currentDate);
|
||||||
|
double fee;
|
||||||
|
if (overdueDays > 7) {
|
||||||
|
fee = 7 * 1 + (overdueDays - 7) * 2;
|
||||||
|
} else {
|
||||||
|
fee = overdueDays * 1;
|
||||||
|
}
|
||||||
|
user.addFee(fee);
|
||||||
|
result.append("Überfällige Gebühr: ").append(fee).append("€.\n");
|
||||||
|
} else {
|
||||||
|
result.append("Keine Gebühren angefallen.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aktualisierung des Mediums und des Benutzers
|
||||||
|
medium.setBorrowed(false); // Medium ist nicht mehr ausgeliehen
|
||||||
|
medium.resetRenewals(); // Anzahl der Verlängerungen zurücksetzen
|
||||||
|
medium.setDueDate(null); // Fälligkeitsdatum entfernen
|
||||||
|
user.returnMedium(medium); // Entferne das Medium aus der Liste des Benutzers
|
||||||
|
|
||||||
|
// Anzeigen der verbleibenden ausgeliehenen Medien
|
||||||
|
if (user.getBorrowedMedia().isEmpty()) {
|
||||||
|
result.append("Keine weiteren Medien ausgeliehen.");
|
||||||
|
} else {
|
||||||
|
result.append("Noch ausgeliehene Medien:\n");
|
||||||
|
for (Medium m : user.getBorrowedMedia()) {
|
||||||
|
result.append("- ").append(m.getTitle()).append(" (Fällig am: ").append(m.getDueDate()).append(")\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showOutstandingFees(User user) {
|
|
||||||
System.out.println("Ausstehende Gebühren für " + user.getName() + ": " + user.getOutstandingFees() + "€.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void handleAdminPayment(User user, double amount) {
|
|
||||||
user.payFees(amount);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,31 +24,20 @@ public class LibraryService {
|
||||||
return admin;
|
return admin;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String displayCatalog() {
|
public List<String> displayCatalog() {
|
||||||
StringBuilder catalog = new StringBuilder(); // StringBuilder zum Sammeln der Katalogeinträge
|
List<String> catalog = new ArrayList<>();
|
||||||
catalog.append("Medienkatalog:\n");
|
|
||||||
|
|
||||||
// Iteriere durch alle Medien im Katalog
|
|
||||||
for (Medium medium : mediaList) {
|
for (Medium medium : mediaList) {
|
||||||
// Holen des Autors und Erscheinungsjahres
|
|
||||||
String author = medium.getAuthor();
|
|
||||||
String releaseYear = medium.getReleaseYear();
|
|
||||||
String status = medium.isBorrowed() ? "Ausgeliehen bis: " + medium.getDueDate() : "Verfügbar";
|
String status = medium.isBorrowed() ? "Ausgeliehen bis: " + medium.getDueDate() : "Verfügbar";
|
||||||
|
String author = medium.getAuthor() != null ? medium.getAuthor() : "-";
|
||||||
// Wenn das Medium ein Buch ist, zeigen wir den Autor an, andernfalls "-"
|
catalog.add("ID: " + medium.getId() +
|
||||||
String authorDisplay = (author != null) ? author : "-"; // Wenn author null ist, setze "-" als Platzhalter
|
", Titel: " + medium.getTitle() +
|
||||||
|
", Autor: " + author +
|
||||||
// Katalogeintrag als String zusammenbauen
|
", Status: " + status);
|
||||||
catalog.append("Titel: ").append(medium.getTitle())
|
|
||||||
.append(", Autor: ").append(authorDisplay)
|
|
||||||
.append(", Erscheinungsjahr: ").append(releaseYear)
|
|
||||||
.append(", Status: ").append(status)
|
|
||||||
.append("\n");
|
|
||||||
}
|
}
|
||||||
|
return catalog;
|
||||||
return catalog.toString(); // Gib den gesamten Katalog als String zurück
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<Medium> searchMedia(String query, boolean filterBorrowed, String mediaType) {
|
public List<Medium> searchMedia(String query, boolean filterBorrowed, String mediaType) {
|
||||||
return mediaList.stream().filter(medium -> medium.getTitle().toLowerCase().startsWith(query.toLowerCase())) // Filter
|
return mediaList.stream().filter(medium -> medium.getTitle().toLowerCase().startsWith(query.toLowerCase())) // Filter
|
||||||
// nach
|
// nach
|
||||||
|
|
|
||||||
|
|
@ -18,151 +18,246 @@ public class LibraryUI {
|
||||||
Scanner scanner = new Scanner(System.in);
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
System.out.println("\nAktuelles Datum: " + borrowService.getCurrentDate());
|
// Wenn der Benutzer nicht eingeloggt ist, zeige Anmeldeoptionen
|
||||||
System.out.println("1. Registrieren");
|
if (currentUser == null) {
|
||||||
System.out.println("2. Anmelden");
|
System.out.println("\nAktuelles Datum: " + borrowService.getCurrentDate());
|
||||||
System.out.println("3. Datum ändern");
|
System.out.println("1. Registrieren");
|
||||||
System.out.println("4. Katalog anzeigen");
|
System.out.println("2. Anmelden");
|
||||||
System.out.println("5. Medium ausleihen");
|
System.out.println("3. Katalog anzeigen");
|
||||||
System.out.println("6. Medium zurückgeben");
|
System.out.println("4. Beenden");
|
||||||
System.out.println("7. Medium verlängern");
|
|
||||||
System.out.println("8. Gebühren anzeigen");
|
|
||||||
System.out.println("9. Admin-Zahlung bearbeiten");
|
|
||||||
System.out.println("10. Medien durchsuchen");
|
|
||||||
System.out.println("11. Beenden");
|
|
||||||
|
|
||||||
int choice = scanner.nextInt();
|
int choice = scanner.nextInt();
|
||||||
switch (choice) {
|
scanner.nextLine(); // Puffer leeren
|
||||||
case 1 -> registerUser(scanner);
|
|
||||||
case 2 -> login(scanner);
|
switch (choice) {
|
||||||
case 3 -> changeDate(scanner);
|
case 1 -> registerUser(scanner); // Benutzerregistrierung
|
||||||
case 4 -> showCatalog();
|
case 2 -> login(scanner); // Benutzeranmeldung
|
||||||
case 5 -> borrowMedia(scanner);
|
case 3 -> showCatalog();
|
||||||
case 6 -> returnMedia(scanner);
|
case 4 -> {
|
||||||
case 7 -> renewMedia(scanner);
|
System.out.println("Programm beendet.");
|
||||||
case 8 -> showFees();
|
return;
|
||||||
case 9 -> processAdminPayment(scanner);
|
}
|
||||||
case 10 -> searchMedia(scanner);
|
default -> System.out.println("Ungültige Auswahl.");
|
||||||
case 11 -> {
|
}
|
||||||
System.out.println("Programm beendet.");
|
} else {
|
||||||
return;
|
// Wenn der Benutzer eingeloggt ist, zeige die entsprechenden Optionen
|
||||||
}
|
System.out.println("\nAktuelles Datum: " + borrowService.getCurrentDate());
|
||||||
default -> System.out.println("Ungültige Auswahl.");
|
|
||||||
|
// Menü für alle Benutzer (Admin und normaler Benutzer)
|
||||||
|
System.out.println("3. Datum ändern");
|
||||||
|
System.out.println("4. Katalog anzeigen");
|
||||||
|
System.out.println("5. Medium ausleihen");
|
||||||
|
System.out.println("6. Medium zurückgeben");
|
||||||
|
System.out.println("7. Medium verlängern");
|
||||||
|
System.out.println("8. Gebühren anzeigen");
|
||||||
|
System.out.println("9. Admin-Zahlung bearbeiten");
|
||||||
|
System.out.println("10. Medien durchsuchen");
|
||||||
|
System.out.println("11. Abmelden");
|
||||||
|
System.out.println("12. Beenden");
|
||||||
|
|
||||||
|
// Wenn der Benutzer ein Admin ist, gib nur die Admin-Optionen an
|
||||||
|
if (currentUser.getRole().equals("admin")) {
|
||||||
|
// Admin kann nur die Zahlungen bearbeiten
|
||||||
|
System.out.println("Admin hat nur Zugriff auf 'Admin-Zahlung bearbeiten'.");
|
||||||
|
}
|
||||||
|
|
||||||
|
int choice = scanner.nextInt();
|
||||||
|
scanner.nextLine(); // Puffer leeren
|
||||||
|
|
||||||
|
switch (choice) {
|
||||||
|
|
||||||
|
case 3 -> changeDate(scanner); // Datum ändern
|
||||||
|
|
||||||
|
case 4 -> {
|
||||||
|
if (currentUser.getRole().equals("admin")) {
|
||||||
|
System.out.println("Admins kann sich nicht den Katalog anzeigen lassen.");
|
||||||
|
} else {
|
||||||
|
showCatalog();// Medien ausleihen (nur für Benutzer)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
case 5 -> {
|
||||||
|
if (currentUser.getRole().equals("admin")) {
|
||||||
|
System.out.println("Admins können keine Medien ausleihen.");
|
||||||
|
} else {
|
||||||
|
borrowMedia(scanner); // Medien ausleihen (nur für Benutzer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 6 -> {
|
||||||
|
if (currentUser.getRole().equals("admin")) {
|
||||||
|
System.out.println("Admins können keine Medien zurückgeben.");
|
||||||
|
} else {
|
||||||
|
returnMedia(scanner); // Medien zurückgeben (nur für Benutzer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 7 -> {
|
||||||
|
if (currentUser.getRole().equals("admin")) {
|
||||||
|
System.out.println("Admins können die Leihfrist nicht verlängern.");
|
||||||
|
} else {
|
||||||
|
renewMedia(scanner); // Medien verlängern (nur für Benutzer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 8 -> {
|
||||||
|
if (currentUser.getRole().equals("admin")) {
|
||||||
|
System.out.println("Admins können keine Gebühren anzeigen.");
|
||||||
|
} else {
|
||||||
|
showOutstandingFees(scanner); // Gebühren anzeigen (nur für Benutzer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 9 -> {
|
||||||
|
if (currentUser.getRole().equals("admin")) {
|
||||||
|
processAdminPayment(scanner); // Admin-Zahlung bearbeiten
|
||||||
|
} else {
|
||||||
|
System.out.println("Zahlungen können nur von einem Admin bearbeitet werden.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 10 -> searchMedia(scanner); // Medien durchsuchen (auch für Benutzer)
|
||||||
|
case 11 -> logout(); // Abmelden
|
||||||
|
case 12 -> {
|
||||||
|
System.out.println("Programm beendet.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
default -> System.out.println("Ungültige Auswahl.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void logout() {
|
||||||
|
System.out.println("Sie haben sich erfolgreich abgemeldet.");
|
||||||
|
currentUser = null; // Setze den aktuellen Benutzer auf null
|
||||||
|
}
|
||||||
|
|
||||||
private void registerUser(Scanner scanner) {
|
private void registerUser(Scanner scanner) {
|
||||||
System.out.print("Geben Sie den Benutzertyp ein (1 = Erwachsener, 2 = Schüler/Student): ");
|
System.out.print("Geben Sie eine Benutzer-ID ein: ");
|
||||||
int userType = scanner.nextInt();
|
String userId = scanner.nextLine();
|
||||||
scanner.nextLine(); // Puffer leeren
|
|
||||||
System.out.print("Geben Sie den Namen des Benutzers ein: ");
|
|
||||||
String name = scanner.nextLine();
|
|
||||||
System.out.print("Geben Sie eine eindeutige Kartennummer ein: ");
|
|
||||||
String id = scanner.nextLine();
|
|
||||||
|
|
||||||
User newUser;
|
// Admin-ID '001' darf nicht für normale Benutzer verwendet werden
|
||||||
if (userType == 1) {
|
if (userId.equals("001")) {
|
||||||
newUser = new Adult(id, name);
|
System.out.println("Die ID '001' ist für den Admin reserviert und kann nicht verwendet werden.");
|
||||||
} else if (userType == 2) {
|
return;
|
||||||
newUser = new Student(id, name);
|
}
|
||||||
} else {
|
|
||||||
System.out.println("Ungültiger Benutzertyp.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
libraryService.addUser(newUser);
|
System.out.print("Geben Sie Ihren Namen ein: ");
|
||||||
System.out.println("Benutzer erfolgreich registriert: " + newUser);
|
String userName = scanner.nextLine();
|
||||||
|
|
||||||
|
System.out.println("Sind Sie ein Student/Schüler? (Ja/Nein): ");
|
||||||
|
String userType = scanner.nextLine().trim().toLowerCase();
|
||||||
|
|
||||||
|
User newUser;
|
||||||
|
if (userType.equals("ja")) {
|
||||||
|
newUser = new Student(userId, userName); // Student-Instanz erstellen
|
||||||
|
} else {
|
||||||
|
newUser = new Adult(userId, userName); // Erwachsene-Instanz erstellen
|
||||||
|
}
|
||||||
|
|
||||||
|
libraryService.addUser(newUser); // Benutzer zur Bibliothek hinzufügen
|
||||||
|
System.out.println("Benutzer erfolgreich registriert.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void login(Scanner scanner) {
|
private void login(Scanner scanner) {
|
||||||
System.out.print("Geben Sie Ihre Benutzer-ID ein: ");
|
System.out.print("Geben Sie Ihre Benutzer-ID ein: ");
|
||||||
String userId = scanner.next();
|
String userId = scanner.nextLine();
|
||||||
|
|
||||||
|
// Suche nach dem Benutzer in der Bibliothek
|
||||||
currentUser = libraryService.findUserById(userId);
|
currentUser = libraryService.findUserById(userId);
|
||||||
|
|
||||||
if (currentUser != null) {
|
if (currentUser != null) {
|
||||||
System.out.println("Willkommen, " + currentUser.getName() + "!");
|
System.out.println("Willkommen, " + currentUser.getName() + "!");
|
||||||
borrowService.showOutstandingFees(currentUser);
|
// Zeige die aktuellen ausstehenden Gebühren nach der Anmeldung an
|
||||||
|
System.out.println("Ihre ausstehenden Gebühren: " + currentUser.getOutstandingFees() + "€.");
|
||||||
} else {
|
} else {
|
||||||
System.out.println("Benutzer nicht gefunden. Bitte zuerst registrieren.");
|
System.out.println("Benutzer nicht gefunden.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeDate(Scanner scanner) {
|
private void changeDate(Scanner scanner) {
|
||||||
System.out.print("Geben Sie das neue Datum (YYYY-MM-DD) ein: ");
|
System.out.print("Geben Sie das neue Datum (YYYY-MM-DD) ein: ");
|
||||||
String newDateInput = scanner.next();
|
String newDateInput = scanner.nextLine(); // Verwenden von nextLine() um die Eingabe zu lesen
|
||||||
|
|
||||||
|
if (newDateInput.isEmpty()) {
|
||||||
|
System.out.println("Kein Datum eingegeben, es wird das heutige Datum verwendet.");
|
||||||
|
return; // Wenn keine Eingabe erfolgt, wird das heutige Datum verwendet
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
LocalDate newDate = LocalDate.parse(newDateInput);
|
LocalDate newDate = LocalDate.parse(newDateInput); // Versucht, das Datum zu parsen
|
||||||
borrowService.setCurrentDate(newDate); // Datum ändern und ggf. fehlende borrowDates setzen
|
borrowService.setCurrentDate(newDate); // Datum ändern und ggf. fehlende borrowDates setzen
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println("Ungültiges Datumformat. Bitte erneut versuchen.");
|
System.out.println(
|
||||||
|
"Ungültiges Datumformat. Bitte stellen Sie sicher, dass das Datum im Format YYYY-MM-DD eingegeben wird.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void borrowMedia(Scanner scanner) {
|
private void borrowMedia(Scanner scanner) {
|
||||||
if (currentUser == null) {
|
if (currentUser == null) {
|
||||||
System.out.println("Bitte melden Sie sich zuerst an.");
|
System.out.println("Bitte melden Sie sich zuerst an.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.print("Geben Sie die ID des Mediums ein, das Sie ausleihen möchten: ");
|
System.out.print("Geben Sie die ID des Mediums ein, das Sie ausleihen möchten: ");
|
||||||
String mediumId = scanner.next();
|
String mediumId = scanner.next();
|
||||||
Medium medium = libraryService.findMediumById(mediumId);
|
Medium medium = libraryService.findMediumById(mediumId);
|
||||||
|
|
||||||
if (medium != null) {
|
if (medium != null) {
|
||||||
borrowService.borrowMedium(currentUser, medium); // Heutiges Datum wird automatisch gesetzt
|
String result = borrowService.borrowMedium(currentUser, medium);
|
||||||
} else {
|
System.out.println(result); // Zeigt die Rückgabe der Service-Methode an
|
||||||
System.out.println("Medium nicht gefunden.");
|
} else {
|
||||||
}
|
System.out.println("Medium nicht gefunden.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void returnMedia(Scanner scanner) {
|
private void returnMedia(Scanner scanner) {
|
||||||
if (currentUser == null) {
|
if (currentUser == null) {
|
||||||
System.out.println("Bitte melden Sie sich zuerst an.");
|
System.out.println("Bitte melden Sie sich zuerst an.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.print("Geben Sie die ID des Mediums ein, das Sie zurückgeben möchten: ");
|
System.out.print("Geben Sie die ID des Mediums ein, das Sie zurückgeben möchten: ");
|
||||||
String mediumId = scanner.next();
|
String mediumId = scanner.nextLine();
|
||||||
Medium medium = libraryService.findMediumById(mediumId);
|
|
||||||
|
|
||||||
if (medium != null) {
|
Medium medium = libraryService.findMediumById(mediumId);
|
||||||
borrowService.returnMedium(currentUser, medium);
|
if (medium != null) {
|
||||||
} else {
|
String result = borrowService.returnMedium(currentUser, medium);
|
||||||
System.out.println("Medium nicht gefunden.");
|
System.out.println(result); // Zeigt die Rückgabeinformationen an
|
||||||
}
|
} else {
|
||||||
|
System.out.println("Medium nicht gefunden.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showFees() {
|
|
||||||
if (currentUser == null) {
|
|
||||||
System.out.println("Bitte melden Sie sich zuerst an.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
borrowService.showOutstandingFees(currentUser);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processAdminPayment(Scanner scanner) {
|
private void processAdminPayment(Scanner scanner) {
|
||||||
// Überprüfen, ob der aktuelle Benutzer der Admin ist
|
if (currentUser == null || !currentUser.getRole().equals("admin")) {
|
||||||
if (!(currentUser instanceof Admin)) {
|
System.out.println("Nur ein Admin kann Zahlungen bearbeiten.");
|
||||||
System.out.println("Nur der Admin kann Zahlungen bearbeiten.");
|
return;
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Admin-Prozess: Zahlung bearbeiten
|
System.out.print("Geben Sie die Benutzer-ID für die Zahlung ein: ");
|
||||||
Admin admin = (Admin) currentUser; // Casten des aktuellen Benutzers zu Admin
|
String userId = scanner.nextLine();
|
||||||
|
|
||||||
System.out.print("Geben Sie die Benutzer-ID ein, für den Sie die Zahlung bearbeiten möchten: ");
|
// Suchen des Benutzers
|
||||||
String userId = scanner.next();
|
User user = libraryService.findUserById(userId);
|
||||||
User user = libraryService.findUserById(userId);
|
if (user != null) {
|
||||||
|
System.out.println("Ausstehende Gebühren für " + user.getName() + ": " + user.getOutstandingFees() + "€.");
|
||||||
|
System.out.print("Geben Sie den zu zahlenden Betrag ein: ");
|
||||||
|
double paymentAmount = scanner.nextDouble();
|
||||||
|
scanner.nextLine(); // Puffer leeren
|
||||||
|
|
||||||
if (user == null) {
|
// Zahlung bearbeiten
|
||||||
System.out.println("Benutzer nicht gefunden.");
|
if (paymentAmount <= user.getOutstandingFees()) {
|
||||||
return;
|
user.payFees(paymentAmount);
|
||||||
}
|
System.out.println("Zahlung erfolgreich verarbeitet.");
|
||||||
|
} else {
|
||||||
System.out.print("Geben Sie den Zahlungsbetrag ein: ");
|
System.out.println("Der Betrag übersteigt die ausstehenden Gebühren.");
|
||||||
double amount = scanner.nextDouble();
|
}
|
||||||
admin.processPayment(user, amount); // Admin kann die Zahlung bearbeiten
|
} else {
|
||||||
|
System.out.println("Benutzer nicht gefunden.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void searchMedia(Scanner scanner) {
|
private void searchMedia(Scanner scanner) {
|
||||||
|
|
@ -190,40 +285,74 @@ public class LibraryUI {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renewMedia(Scanner scanner) {
|
private void renewMedia(Scanner scanner) {
|
||||||
if (currentUser == null) {
|
if (currentUser == null) {
|
||||||
System.out.println("Bitte melden Sie sich zuerst an.");
|
System.out.println("Bitte melden Sie sich zuerst an.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.print("Geben Sie die ID des Mediums ein, das Sie verlängern möchten: ");
|
System.out.print("Geben Sie die ID des Mediums ein, das Sie verlängern möchten: ");
|
||||||
String mediumId = scanner.next();
|
String mediumId = scanner.next();
|
||||||
Medium medium = libraryService.findMediumById(mediumId);
|
Medium medium = libraryService.findMediumById(mediumId);
|
||||||
|
|
||||||
if (medium != null) {
|
if (medium != null) {
|
||||||
System.out.print(
|
// Überprüfen, ob der Benutzer das Medium ausgeliehen hat
|
||||||
"Möchten Sie das Ausleihdatum ändern? (YYYY-MM-DD oder leer lassen, um es unverändert zu lassen): ");
|
if (!currentUser.getBorrowedMedia().contains(medium)) {
|
||||||
scanner.nextLine(); // Puffer leeren
|
System.out.println("Dieses Medium wurde nicht von Ihnen ausgeliehen und kann daher nicht verlängert werden.");
|
||||||
String inputDate = scanner.nextLine();
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
LocalDate newBorrowDate = null;
|
// Optional: Ausleihdatum ändern
|
||||||
if (!inputDate.isBlank()) {
|
System.out.print(
|
||||||
try {
|
"Möchten Sie das Ausleihdatum ändern? (YYYY-MM-DD oder leer lassen, um es unverändert zu lassen): ");
|
||||||
newBorrowDate = LocalDate.parse(inputDate); // Neues Ausleihdatum parsen
|
scanner.nextLine(); // Puffer leeren
|
||||||
} catch (Exception e) {
|
String inputDate = scanner.nextLine();
|
||||||
System.out.println("Ungültiges Datum. Das ursprüngliche Ausleihdatum bleibt bestehen.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Aufruf der renewMedium-Methode im BorrowService mit den Parametern
|
LocalDate newBorrowDate = null;
|
||||||
borrowService.renewMedium(currentUser, medium, newBorrowDate); // Hier übergeben wir currentUser, medium und
|
if (!inputDate.isBlank()) {
|
||||||
// newBorrowDate
|
try {
|
||||||
} else {
|
newBorrowDate = LocalDate.parse(inputDate);
|
||||||
System.out.println("Medium nicht gefunden.");
|
} catch (Exception e) {
|
||||||
}
|
System.out.println("Ungültiges Datum. Das ursprüngliche Ausleihdatum bleibt bestehen.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verlängerung durchführen und Ergebnis anzeigen
|
||||||
|
String result = borrowService.renewMedium(currentUser, medium, newBorrowDate);
|
||||||
|
System.out.println(result);
|
||||||
|
} else {
|
||||||
|
System.out.println("Medium nicht gefunden.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void showCatalog() {
|
private void showCatalog() {
|
||||||
libraryService.displayCatalog(); // Zeigt den gesamten Katalog mit Ausleihstatus an
|
List<String> catalog = libraryService.displayCatalog();
|
||||||
|
System.out.println("Katalog der Medien:");
|
||||||
|
for (String entry : catalog) {
|
||||||
|
System.out.println(entry); // Anzeige jedes Mediums
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void showOutstandingFees(Scanner scanner) {
|
||||||
|
if (currentUser == null) {
|
||||||
|
System.out.println("Bitte melden Sie sich zuerst an.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Zeige die ausstehenden Gebühren des Benutzers an
|
||||||
|
System.out.println("Ausstehende Gebühren für " + currentUser.getName() + ": " + currentUser.getOutstandingFees() + "€.");
|
||||||
|
|
||||||
|
// Zeige die ausgeliehenen Medien und deren Fälligkeitsdaten an
|
||||||
|
if (!currentUser.getBorrowedMedia().isEmpty()) {
|
||||||
|
System.out.println("Ausgeliehene Medien:");
|
||||||
|
for (Medium medium : currentUser.getBorrowedMedia()) {
|
||||||
|
System.out.println("- Titel: " + medium.getTitle() + ", Fällig am: " + medium.getDueDate());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
System.out.println("Keine ausgeliehenen Medien.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue