557 lines
19 KiB
Java
557 lines
19 KiB
Java
import java.util.*;
|
|
import java.io.*;
|
|
|
|
class SystemController {
|
|
private Scanner scanner = new Scanner(System.in);
|
|
private Map<String, User> users = new HashMap<>();
|
|
private final String USERS_FILE = "src/users.txt";
|
|
public static Inventory inventory;
|
|
private Menu menu = new Menu();
|
|
private FinancialManager financialManager = new FinancialManager();
|
|
private ReservationManager reservationManager = new ReservationManager();
|
|
private List<Shift> shifts = new ArrayList<>();
|
|
private List<Absence> absences = new ArrayList<>();
|
|
private List<Feedback> feedbacks = new ArrayList<>();
|
|
private final String SHIFT_FILE = "src/shifts.txt";
|
|
private final String ABSENCE_FILE = "src/absences.txt";
|
|
private final String FEEDBACK_FILE = "src/feedback.txt";
|
|
|
|
public SystemController() {
|
|
loadUsersFromFile();
|
|
loadShiftsFromFile();
|
|
loadAbsencesFromFile();
|
|
loadFeedbacksFromFile();
|
|
inventory = new Inventory(financialManager);
|
|
}
|
|
|
|
public void startSystem() {
|
|
System.out.println("Willkommen im Restaurant Management System!");
|
|
System.out.println("Bitte loggen Sie sich ein: ");
|
|
|
|
System.out.print("Username ---------------> ");
|
|
String username = scanner.nextLine();
|
|
|
|
System.out.print("Passwort ---------------> ");
|
|
String password = scanner.nextLine();
|
|
|
|
User user = authenticate(username, password);
|
|
if (user != null) {
|
|
displayMainMenu(user);
|
|
} else {
|
|
System.out.println("Ungültige Anmeldedaten.");
|
|
}
|
|
}
|
|
|
|
private User authenticate(String username, String password) {
|
|
if (users.containsKey(username) && users.get(username).password.equals(password)) {
|
|
return users.get(username);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public void displayMainMenu(User user) {
|
|
boolean running = true;
|
|
while (running) {
|
|
System.out.println("\n--- Hauptmenü ---");
|
|
System.out.println("1. Bestand verwalten");
|
|
System.out.println("2. Neuer Nutzer erstellen");
|
|
System.out.println("3. Menü anzeigen");
|
|
System.out.println("4. Bestellungen verwalten");
|
|
System.out.println("5. Finanzbericht anzeigen");
|
|
System.out.println("6. Reservierungen verwalten");
|
|
System.out.println("7. Mitarbeiter verwalten");
|
|
System.out.println("8. Beenden");
|
|
System.out.print("Bitte wähle eine Option: ");
|
|
int choice = scanner.nextInt();
|
|
scanner.nextLine();
|
|
switch (choice) {
|
|
case 1 -> manageInventory();
|
|
case 2 -> {
|
|
if (user.role == Role.MANAGER) {
|
|
createUser();
|
|
} else {
|
|
System.out.println("Keine Rechte, um neue Nutzer zu erstellen.");
|
|
}
|
|
}
|
|
case 3 -> menu.displayMenu(inventory);
|
|
case 4 -> manageOrders();
|
|
case 5 -> {
|
|
if (user.role == Role.MANAGER) {
|
|
displayFinancialReport();
|
|
} else {
|
|
System.out.println("Keine Rechte, um neue Nutzer zu erstellen.");
|
|
}
|
|
}
|
|
case 6 -> manageReservations(user);
|
|
case 7 -> manageEmployees(user);
|
|
case 8 -> {
|
|
running = false;
|
|
System.out.println("System wird beendet. Auf Wiedersehen!");
|
|
}
|
|
default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut.");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void updateFinancialReport(List<Dish> orderedDishes) {
|
|
// Prüfen, ob die Liste der bestellten Gerichte leer ist
|
|
if (orderedDishes.isEmpty()) {
|
|
System.out.println("Keine Bestellung aufgegeben. Kein Preis berechnet.");
|
|
return; // Wenn keine Gerichte bestellt wurden, wird der Vorgang abgebrochen
|
|
}
|
|
|
|
double totalAmount = 0;
|
|
|
|
// Berechnung des Gesamtbetrags für die bestellten Gerichte
|
|
for (Dish dish : orderedDishes) {
|
|
totalAmount += dish.getPrice(); // Gesamtbetrag basierend auf den Preisen der bestellten Gerichte
|
|
}
|
|
|
|
// Einnahmen im Finanzmanager hinzufügen
|
|
financialManager.addRevenue(totalAmount);
|
|
|
|
System.out.println("Gesamtkosten der Bestellung: " + totalAmount + " €");
|
|
}
|
|
|
|
private void manageReservations(User user) {
|
|
boolean managingReservations = true;
|
|
while (managingReservations) {
|
|
System.out.println("\n--- Reservierungen verwalten ---");
|
|
System.out.println("1. Reservierung erstellen");
|
|
System.out.println("2. Reservierung bearbeiten");
|
|
System.out.println("3. Reservierung stornieren");
|
|
System.out.println("4. Reservierungen anzeigen");
|
|
System.out.println("5. Zurück zum Hauptmenü");
|
|
System.out.print("Bitte wähle eine Option: ");
|
|
int choice = scanner.nextInt();
|
|
scanner.nextLine();
|
|
switch (choice) {
|
|
case 1 -> {
|
|
if (user.role == Role.MANAGER || user.role == Role.SERVICE) {
|
|
createReservation();
|
|
} else {
|
|
System.out.println("Keine Rechte, um neue Reservierungen zu erstellen.");
|
|
}
|
|
}
|
|
case 2 -> {
|
|
if (user.role == Role.MANAGER || user.role == Role.SERVICE) {
|
|
editReservation();
|
|
} else {
|
|
System.out.println("Keine Rechte, um Reservierungen zu bearbeiten.");
|
|
}
|
|
}
|
|
case 3 -> {
|
|
if (user.role == Role.MANAGER || user.role == Role.SERVICE) {
|
|
cancelReservation();
|
|
} else {
|
|
System.out.println("Keine Rechte, um Reservierungen zu stornieren.");
|
|
}
|
|
}
|
|
case 4 -> reservationManager.displayTableOverview();
|
|
case 5 -> managingReservations = false;
|
|
default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut.");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void createReservation() {
|
|
System.out.print("Tischnummer: ");
|
|
int tableNumber = scanner.nextInt();
|
|
scanner.nextLine();
|
|
System.out.print("Kundenname: ");
|
|
String customerName = scanner.nextLine();
|
|
reservationManager.createReservation(tableNumber, customerName);
|
|
}
|
|
|
|
private void editReservation() {
|
|
System.out.print("Tischnummer der Reservierung: ");
|
|
int tableNumber = scanner.nextInt();
|
|
scanner.nextLine();
|
|
System.out.print("Neuer Kundenname: ");
|
|
String newCustomerName = scanner.nextLine();
|
|
reservationManager.editReservation(tableNumber, newCustomerName);
|
|
}
|
|
|
|
private void cancelReservation() {
|
|
System.out.print("Tischnummer der Reservierung: ");
|
|
int tableNumber = scanner.nextInt();
|
|
reservationManager.cancelReservation(tableNumber);
|
|
}
|
|
|
|
private void manageInventory() {
|
|
boolean managingInventory = true;
|
|
while (managingInventory) {
|
|
inventory.loadStockFromFile();
|
|
System.out.println("\n--- Bestand verwalten ---");
|
|
System.out.println("1. Bestand ansehen");
|
|
System.out.println("2. Bestand ändern");
|
|
System.out.println("3. Bestand erweitern");
|
|
System.out.println("4. Zurück zum Hauptmenü");
|
|
|
|
System.out.print("Bitte wähle eine Option: ");
|
|
int choice = scanner.nextInt();
|
|
scanner.nextLine(); // Eingabepuffer leeren
|
|
|
|
switch (choice) {
|
|
case 1 -> inventory.viewStock(); // Bestand ansehen
|
|
case 2 -> {
|
|
System.out.println("Welchen Bestand möchten Sie ändern?");
|
|
String name = scanner.nextLine();
|
|
System.out.println("Neue Anzahl ---->");
|
|
try {
|
|
int anzahl = scanner.nextInt();
|
|
inventory.overwriteStock(name, anzahl); // Bestellungen im Speicher anzeigen
|
|
inventory.saveStockToFile(); // Echtzeitspeicherung der Daten
|
|
} catch (IllegalArgumentException e) {
|
|
System.out.println("Fehler! Überprüfen Sie Ihre Eingabe");
|
|
}
|
|
}
|
|
case 3 -> {
|
|
System.out.println("Bestand wird erweitert.....");
|
|
System.out.println("Name des Produkts: ");
|
|
String name = scanner.nextLine();
|
|
System.out.println("Anzahl :");
|
|
try {
|
|
int anzahl = scanner.nextInt();
|
|
inventory.addIngredients(name, anzahl, financialManager); // Bestellungen im Speicher anzeigen
|
|
inventory.saveStockToFile(); // Echtzeitspeicherung der Daten
|
|
} catch (IllegalArgumentException e) {
|
|
System.out.println("Fehler! Überprüfen Sie Ihre Eingabe");
|
|
}
|
|
}
|
|
case 4 -> managingInventory = false;
|
|
default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut.");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void manageOrders() {
|
|
boolean managingOrders = true;
|
|
while (managingOrders) {
|
|
System.out.println("\n--- Bestellungen verwalten ---");
|
|
System.out.println("1. Bestellung aufnehmen");
|
|
System.out.println("2. Alle Bestellungen anzeigen");
|
|
System.out.println("3. Bestellungen löschen");
|
|
System.out.println("4. Zurück zum Hauptmenü");
|
|
|
|
System.out.print("Bitte wähle eine Option: ");
|
|
int choice = scanner.nextInt();
|
|
scanner.nextLine(); // Eingabepuffer leeren
|
|
|
|
switch (choice) {
|
|
case 1 -> {
|
|
menu.displayMenu(inventory);
|
|
Bestellsystem.erstelleBestellung(); // Neue Bestellung erstellen
|
|
}
|
|
case 2 -> {
|
|
Bestellsystem.ladeUndZeigeBestellungen(); // Bestellungen aus Datei anzeigen
|
|
}
|
|
case 3 -> {
|
|
Bestellsystem.loescheBestellung(); // Bestellungen aus Datei löschen
|
|
}
|
|
case 4 -> managingOrders = false;
|
|
default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut.");
|
|
}
|
|
}
|
|
}
|
|
|
|
public void manageEmployees(User user) {
|
|
boolean managingEmployees = true;
|
|
while (managingEmployees) {
|
|
System.out.println("\n--- Mitarbeiter verwalten ---");
|
|
System.out.println("1. Schichtplan anzeigen");
|
|
System.out.println("2. Abwesenheit eintragen");
|
|
System.out.println("3. Abwesenheit anzeigen");
|
|
System.out.println("4. Feedback geben");
|
|
System.out.println("5. Feedback anzeigen");
|
|
System.out.println("6. Zurück zum Hauptmenü");
|
|
System.out.print("Bitte wähle eine Option: ");
|
|
int choice = scanner.nextInt();
|
|
scanner.nextLine(); // Eingabepuffer leeren
|
|
|
|
switch (choice) {
|
|
case 1 -> showShiftPlan(user.username); // Schichtplan für den eingeloggten Mitarbeiter anzeigen
|
|
case 2 -> {
|
|
if (user.role == Role.MANAGER) {
|
|
createAbsence(user.username); // Abwesenheit für Mitarbeiter erstellen
|
|
} else {
|
|
System.out.println("Keine Rechte, um neue Nutzer zu erstellen.");
|
|
}
|
|
}
|
|
case 3 -> {
|
|
if (user.role == Role.MANAGER) {
|
|
showAbsences(); // Abwesenheiten zeigen
|
|
} else {
|
|
System.out.println("Keine Rechte, um neue Nutzer zu erstellen.");
|
|
}
|
|
}
|
|
case 4 -> giveFeedback(); // Feedback geben
|
|
case 5 -> {
|
|
if (user.role == Role.MANAGER) {
|
|
showFeedback(); // Feedbacks zeigen
|
|
} else {
|
|
System.out.println("Keine Rechte, um neue Nutzer zu erstellen.");
|
|
}
|
|
}
|
|
case 6 -> managingEmployees = false; // Zurück zum Hauptmenü
|
|
default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut.");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void createUser() {
|
|
String username = "";
|
|
String password = "";
|
|
Role role = null;
|
|
try {
|
|
System.out.println("\n--- Neuen Nutzer erstellen ---");
|
|
System.out.print("Benutzername: ");
|
|
username = scanner.nextLine();
|
|
System.out.print("Passwort: ");
|
|
password = scanner.nextLine();
|
|
System.out.print("Rolle (MANAGER, SERVICE, KITCHEN): ");
|
|
role = Role.valueOf(scanner.nextLine().toUpperCase());
|
|
} catch (IllegalArgumentException d) {
|
|
System.out.println("Fehler beim Erstellen eines Accounts. Überprüfen Sie Ihre Eingaben.");
|
|
} catch (NullPointerException c) {
|
|
System.out.println("Fehler beim Erstellen eines Accounts. Überprüfen Sie Ihre Eingaben.");
|
|
}
|
|
|
|
try {
|
|
User newUser = new User(username, password, role);
|
|
users.put(username, newUser);
|
|
saveUserToFile(newUser);
|
|
|
|
System.out.println("Nutzer erfolgreich erstellt.");
|
|
} catch (NullPointerException c) {
|
|
System.out.println("Fehler beim Erstellen eines Accounts.");
|
|
}
|
|
}
|
|
|
|
private void loadUsersFromFile() {
|
|
try (BufferedReader reader = new BufferedReader(new FileReader(USERS_FILE))) {
|
|
String line;
|
|
while ((line = reader.readLine()) != null) {
|
|
String[] parts = line.split(":");
|
|
if (parts.length == 3) {
|
|
String username = parts[0];
|
|
String password = parts[1];
|
|
Role role = Role.valueOf(parts[2].toUpperCase());
|
|
|
|
users.put(username, new User(username, password, role));
|
|
}
|
|
}
|
|
} catch (FileNotFoundException e) {
|
|
System.out.println("Benutzerdatenbank nicht gefunden. Standard-Manager wird erstellt.");
|
|
createDefaultManager();
|
|
} catch (IOException e) {
|
|
System.out.println("Fehler beim Lesen der Benutzerdatenbank: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
private void loadShiftsFromFile() {
|
|
try (BufferedReader reader = new BufferedReader(new FileReader("src/shifts.txt"))) {
|
|
String line;
|
|
while ((line = reader.readLine()) != null) {
|
|
String[] parts = line.split(";");
|
|
String username = parts[0];
|
|
String shiftDate = parts[1];
|
|
String shiftTime = parts[2];
|
|
|
|
// Erstelle neuen Shift-Objekt und füge es der Liste hinzu
|
|
Shift shift = new Shift(username, shiftDate, shiftTime);
|
|
shifts.add(shift);
|
|
}
|
|
} catch (IOException e) {
|
|
System.out.println("Fehler beim Laden der Schichtpläne: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
private void loadAbsencesFromFile() {
|
|
try (BufferedReader reader = new BufferedReader(new FileReader("src/absences.txt"))) {
|
|
String line;
|
|
while ((line = reader.readLine()) != null) {
|
|
String[] parts = line.split(";");
|
|
String username = parts[0];
|
|
String date = parts[1];
|
|
String reason = parts[2];
|
|
|
|
// Erstelle neues Absence-Objekt und füge es der Liste hinzu
|
|
Absence absence = new Absence(username, date, reason);
|
|
absences.add(absence);
|
|
}
|
|
} catch (IOException e) {
|
|
System.out.println("Fehler beim Laden der Abwesenheiten: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
private void loadFeedbacksFromFile() {
|
|
try (BufferedReader reader = new BufferedReader(new FileReader("src/feedback.txt"))) {
|
|
String line;
|
|
while ((line = reader.readLine()) != null) {
|
|
String[] parts = line.split(";");
|
|
String username = parts[0];
|
|
String feedback = parts[1];
|
|
|
|
// Erstelle neues Feedback-Objekt und füge es der Liste hinzu
|
|
Feedback feedbackObj = new Feedback(username, feedback);
|
|
feedbacks.add(feedbackObj);
|
|
}
|
|
} catch (IOException e) {
|
|
System.out.println("Fehler beim Laden der Feedbacks: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
public void showShiftPlan(String username) {
|
|
System.out.println("\n--- Dein Schichtplan ---");
|
|
for (Shift shift : shifts) {
|
|
if (shift.getUsername().equals(username)) {
|
|
System.out.println(shift);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void createAbsence(String username) {
|
|
System.out.println("Gib Den Namen des Mitarbeiters ein:");
|
|
String name = scanner.nextLine();
|
|
System.out.print("Gib das Datum der Abwesenheit ein: ");
|
|
String date = scanner.nextLine();
|
|
System.out.print("Gib den Grund der Abwesenheit ein: ");
|
|
String reason = scanner.nextLine();
|
|
|
|
Absence absence = new Absence(name, date, reason);
|
|
absences.add(absence);
|
|
saveAbsencesToFile();
|
|
System.out.println("Abwesenheit wurde erfolgreich eingetragen.");
|
|
}
|
|
|
|
public void saveShiftToFile(String shift) {
|
|
try (BufferedWriter writer = new BufferedWriter(new FileWriter("src/shifts.txt", true))) {
|
|
writer.write(shift); // Schicht als String speichern
|
|
writer.newLine();
|
|
} catch (IOException e) {
|
|
System.out.println("Fehler beim Speichern der Schicht: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
public void showAbsences() {
|
|
System.out.println("\n--- Abwesenheiten ---");
|
|
for (Absence absence : absences) {
|
|
System.out.println(absence);
|
|
}
|
|
}
|
|
|
|
public void giveFeedback() {
|
|
System.out.print("Gib den Benutzernamen des Mitarbeiters ein: ");
|
|
String employeeUsername = scanner.nextLine();
|
|
System.out.print("Gib das Feedback ein: ");
|
|
String feedbackText = scanner.nextLine();
|
|
|
|
Feedback feedback = new Feedback(employeeUsername, feedbackText);
|
|
feedbacks.add(feedback);
|
|
saveFeedbackToFile();
|
|
System.out.println("Feedback wurde erfolgreich gespeichert.");
|
|
}
|
|
|
|
public void showFeedback() {
|
|
if (feedbacks.isEmpty()) {
|
|
System.out.println("Keine Feedbacks vorhanden.");
|
|
} else {
|
|
System.out.println("\n--- Feedbacks ---");
|
|
for (Feedback feedback : feedbacks) {
|
|
System.out.println(feedback.toString());
|
|
}
|
|
}
|
|
}
|
|
|
|
private void saveAbsencesToFile() {
|
|
try (BufferedWriter writer = new BufferedWriter(new FileWriter(ABSENCE_FILE, false))) {
|
|
for (Absence absence : absences) {
|
|
writer.write(absence.toFileFormat());
|
|
writer.newLine();
|
|
}
|
|
} catch (IOException e) {
|
|
System.out.println("Fehler beim Speichern der Abwesenheiten: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
private void saveFeedbackToFile() {
|
|
try (BufferedWriter writer = new BufferedWriter(new FileWriter(FEEDBACK_FILE, false))) {
|
|
for (Feedback feedback : feedbacks) {
|
|
writer.write(feedback.toFileFormat());
|
|
writer.newLine();
|
|
}
|
|
} catch (IOException e) {
|
|
System.out.println("Fehler beim Speichern des Feedbacks: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
private void saveUserToFile(User user) {
|
|
try (BufferedWriter writer = new BufferedWriter(new FileWriter(USERS_FILE, true))) {
|
|
writer.write(user.username + ":" + user.password + ":" + user.role.name());
|
|
writer.newLine();
|
|
} catch (IOException e) {
|
|
System.out.println("Fehler beim Speichern des Nutzers: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
private void createDefaultManager() {
|
|
User defaultManager = new User("Dimitry", "1234", Role.MANAGER);
|
|
users.put("Dimitry", defaultManager);
|
|
saveUserToFile(defaultManager);
|
|
}
|
|
|
|
private void displayFinancialReport() {
|
|
boolean viewingReport = true;
|
|
while (viewingReport) {
|
|
System.out.println("\n--- Finanzbericht ---");
|
|
System.out.println("1. Tägliche Einnahmen anzeigen");
|
|
System.out.println("2. Wöchentliche Einnahmen anzeigen");
|
|
System.out.println("3. Monatliche Einnahmen anzeigen");
|
|
System.out.println("4. Gesamte Einnahmen anzeigen");
|
|
System.out.println("5. Finanzbericht aus Datei anzeigen");
|
|
System.out.println("6. Zurück zum Hauptmenü");
|
|
|
|
System.out.print("Bitte wähle eine Option: ");
|
|
int choice = scanner.nextInt();
|
|
scanner.nextLine(); // Eingabepuffer leeren
|
|
|
|
switch (choice) {
|
|
case 1 -> {
|
|
double dailyRevenue = financialManager.getRevenueForPeriod("daily");
|
|
System.out.println("Tägliche Einnahmen: " + dailyRevenue + " €");
|
|
}
|
|
case 2 -> {
|
|
double weeklyRevenue = financialManager.getRevenueForPeriod("weekly");
|
|
System.out.println("Wöchentliche Einnahmen: " + weeklyRevenue + " €");
|
|
}
|
|
case 3 -> {
|
|
double monthlyRevenue = financialManager.getRevenueForPeriod("monthly");
|
|
System.out.println("Monatliche Einnahmen: " + monthlyRevenue + " €");
|
|
}
|
|
case 4 -> {
|
|
double totalRevenue = financialManager.getTotalRevenue();
|
|
System.out.println("Gesamte Einnahmen: " + totalRevenue + " €");
|
|
}
|
|
case 5 -> {
|
|
displayFinancialReportFromFile(); // Finanzbericht aus Datei anzeigen
|
|
}
|
|
case 6 -> viewingReport = false; // Zurück zum Hauptmenü
|
|
default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut.");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void displayFinancialReportFromFile() {
|
|
try (BufferedReader reader = new BufferedReader(new FileReader("src/financial_report.txt"))) {
|
|
String line;
|
|
System.out.println("\n--- Finanzbericht aus Datei ---");
|
|
while ((line = reader.readLine()) != null) {
|
|
System.out.println(line); // Jede Zeile des Berichts anzeigen
|
|
}
|
|
} catch (IOException e) {
|
|
System.out.println("Fehler beim Lesen des Finanzberichts aus der Datei: " + e.getMessage());
|
|
}
|
|
}
|
|
}
|