import java.util.Scanner; import java.util.Map; import java.util.HashMap; import java.io.*; class SystemController { private Scanner scanner = new Scanner(System.in); private Map users = new HashMap<>(); private final String USERS_FILE = "src/users.txt"; private Inventory inventory = new Inventory(); private Menu menu = new Menu(); 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; } private void displayMainMenu(User user) { boolean running = true; while (running) { inventory.loadStockFromFile(); 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. Beenden"); System.out.print("Bitte wähle eine Option: "); int choice = scanner.nextInt(); scanner.nextLine(); // Eingabepuffer leeren 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(); // Übergibt an Bestellsystem case 5 -> { running = false; System.out.println("System wird beendet. Auf Wiedersehen!"); } default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); } } } 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 in der Datenbank, die für Daten für alle Nutzer zugänglich macht } catch (IllegalArgumentException e) { System.out.println("Fehler! Übeprü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 in der Datenbank, die für Daten für alle Nutzer zugänglich macht } catch (IllegalArgumentException e) { System.out.println("Fehler! Übeprü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 aus Datei anzeigen"); 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 -> { Bestellsystem.erstelleBestellung(); // Neue Bestellung erstellen } case 2 -> { Bestellsystem.zeigeAlleBestellungen(); // Bestellungen im Speicher anzeigen } case 3 -> { Bestellsystem.ladeUndZeigeBestellungen(); // Bestellungen aus Datei anzeigen } case 4 -> managingOrders = false; default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); } } } private void createUser() { System.out.println("\n--- Neuen Nutzer erstellen ---"); System.out.print("Benutzername: "); String username = scanner.nextLine(); System.out.print("Passwort: "); String password = scanner.nextLine(); System.out.print("Rolle (MANAGER, SERVICE, KITCHEN): "); Role role = Role.valueOf(scanner.nextLine().toUpperCase()); User newUser = new User(username, password, role); users.put(username, newUser); saveUserToFile(newUser); System.out.println("Nutzer erfolgreich erstellt."); } 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); } }