SE2-Restaurantverwaltung/Restaurantverwaltung/src/SystemController.java

276 lines
12 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 = new Inventory();
private Menu menu = new Menu();
private FinancialManager financialManager = new FinancialManager();
private ReservationManager reservationManager = new ReservationManager();
public SystemController() {
loadUsersFromFile();
}
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. 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 -> showFinancialReports();
case 6 -> manageReservations(user);
case 7 -> { running = false; System.out.println("System wird beendet. Auf Wiedersehen!"); }
default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut.");
}
}
}
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); // 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.");
}
}
}
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 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 showFinancialReports() {
System.out.println("\n--- Finanzbericht ---");
System.out.println("Wählen Sie den Zeitraum:");
System.out.println("1. Täglich");
System.out.println("2. Wöchentlich");
System.out.println("3. Monatlich");
int periodChoice = scanner.nextInt();
scanner.nextLine(); // Eingabepuffer leeren
switch (periodChoice) {
case 1 -> financialManager.showFinancialReport("daily");
case 2 -> financialManager.showFinancialReport("weekly");
case 3 -> financialManager.showFinancialReport("monthly");
default -> System.out.println("Ungültige Auswahl.");
}
}
}