From d97c8e898ad3b9a747f4b52e7c9b6ebcb1ff3a8a Mon Sep 17 00:00:00 2001 From: alama Date: Sat, 11 Jan 2025 17:48:00 +0100 Subject: [PATCH] =?UTF-8?q?Anpassung=20der=20Kosten,=20hinzuf=C3=BCgen=20d?= =?UTF-8?q?er=20Preise,=20optimierung=20der=20Anzeige,?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Restaurantverwaltung/src/Bestellsystem.java | 159 +++--- Restaurantverwaltung/src/Bestellungen.txt | 34 ++ Restaurantverwaltung/src/Dish.java | 13 +- .../src/FinancialManager.java | 94 +++- Restaurantverwaltung/src/Inventory.java | 231 ++++---- Restaurantverwaltung/src/Menu.java | 21 +- .../src/SystemController.java | 496 ++++++++++-------- Restaurantverwaltung/src/stock.txt | 8 +- Restaurantverwaltung/src/users.txt | 1 + 9 files changed, 594 insertions(+), 463 deletions(-) diff --git a/Restaurantverwaltung/src/Bestellsystem.java b/Restaurantverwaltung/src/Bestellsystem.java index 3645f60..f5eef5c 100644 --- a/Restaurantverwaltung/src/Bestellsystem.java +++ b/Restaurantverwaltung/src/Bestellsystem.java @@ -24,106 +24,79 @@ public class Bestellsystem { System.out.print("Bitte gib die Tischnummer ein: "); String tischNummer = scanner.nextLine(); Bestellung bestellung = new Bestellung(tischNummer); + while (true) { -// List Gerichte = new ArrayList<>(menu.getDishes()); -// try (BufferedReader reader = new BufferedReader(new FileReader(STOCK_FILE))) { -// String line; -// while ((line = reader.readLine()) != null) { -// String[] parts = line.split(","); -// -// String name = parts[0]; -// Integer count = Integer.parseInt(parts[1]); -// stock.put(name, count); -// -// } -// } catch (FileNotFoundException e) { -// System.out.println("Stockdatenbank nicht gefunden. Einträge müssen manuell erstellt werden"); -// -// } catch (IOException e) { -// System.out.println("Fehler beim Lesen der Benutzerdatenbank: " + e.getMessage()); -// } -// for (Dish gericht : Gerichte) { -// if (stock.containsKey(gericht.getName())) { -// if (stock.get(gericht.getName()) < ) -// } -// } - System.out.print("Bitte bestelle ein Gericht (oder 'fertig', um abzuschließen): "); - String gericht = scanner.nextLine(); - boolean istVerfuegbar = false; - if (gericht.equalsIgnoreCase("fertig")) { - speichereBestellung(bestellung); - System.out.println("Bestand wurde aktualisiert"); + // Gericht auswählen + System.out.print("Bitte bestelle ein Gericht (oder 'fertig', um abzuschließen): "); + String gericht = scanner.nextLine(); + boolean istVerfuegbar = false; + + // Wenn der Benutzer 'fertig' eingibt, wird die Bestellung gespeichert + if (gericht.equalsIgnoreCase("fertig")) { + speichereBestellung(bestellung); + System.out.println("Bestand wurde aktualisiert"); + break; + } + + // Überprüfen, ob das Gericht im Menü verfügbar ist + try { + for (Dish dish : menu.getDishes()) { + if (gericht.equalsIgnoreCase(dish.getName())) { + // Zutaten für das Gericht verwenden (Bestand aktualisieren) + SystemController.inventory.useIngredients(dish.getIngredients()); + bestellung.addGericht(gericht); // Gericht zur Bestellung hinzufügen + istVerfuegbar = true; + bestellungen.add(bestellung); // Bestellung zur Liste der Bestellungen hinzufügen + System.out.println("Bestellung wurde aktualisiert"); + System.out.println(bestellung.getBestellungDetails()); // Bestellungsdetails anzeigen + break; + } + } + } catch (Exception e) { + System.out.println("Fehler beim Hinzufügen des Gerichts zur Bestellung: " + e.getMessage()); + } + + // Wenn das Gericht nicht im Menü ist, eine Fehlermeldung anzeigen + if (!istVerfuegbar) { + System.out.println("Gericht ist nicht im Menü."); + } + } + } + + + public static void loescheBestellung() { + ladeUndZeigeBestellungen(); + + System.out.print("Gib die ID der zu löschenden Bestellung ein: "); + String id = scanner.nextLine(); + + Bestellung zuLoeschen = null; + + for (Bestellung bestellung : bestellungen) { + if (bestellung.getId().equals(id)) { + zuLoeschen = bestellung; break; } - try { for (Dish dish : menu.getDishes()) { - if (gericht.equalsIgnoreCase(dish.getName())) { - SystemController.inventory.useIngredients(dish.getIngredients()); - bestellung.addGericht(gericht); - istVerfuegbar = true; - bestellungen.add(bestellung); - System.out.println("Bestellung wurde aktualisiert"); - System.out.println(bestellung.getBestellungDetails()); - - } - // else { -// System.out.println("Ist nicht verfügbar"); -// } - }} catch (Exception e ) { - - } - if (istVerfuegbar == false) { - System.out.println("Gericht ist nicht im Menu"); - } - -// while (true) { -// System.out.print("Möchte der Kunde noch einen Zusatzwunsch für dieses Gericht? (ja/nein): "); -// String wunschAntwort = scanner.nextLine(); -// -// if (wunschAntwort.equalsIgnoreCase("ja")) { -// System.out.print("Bitte gib den Zusatzwunsch ein (z.B. 'keine Tomaten'): "); -// String zusatzWunsch = scanner.nextLine(); -// bestellung.addZusatzWunsch(zusatzWunsch); -// } else if (wunschAntwort.equalsIgnoreCase("nein")) { -// break; -// } -// } + } + if (zuLoeschen != null) { + bestellungen.remove(zuLoeschen); + aktualisiereDatei(); + System.out.println("Bestellung wurde gelöscht."); + } else { + System.out.println("Keine Bestellung mit der angegebenen ID gefunden."); } } - - public static void loescheBestellung() { - ladeUndZeigeBestellungen(); - System.out.print("Gib die ID der zu löschenden Bestellung ein: "); - String id = scanner.nextLine(); - - Bestellung zuLoeschen = null; - - for (Bestellung bestellung : bestellungen) { - if (bestellung.getId().equals(id)) { - zuLoeschen = bestellung; - break; - } - } - - if (zuLoeschen != null) { - bestellungen.remove(zuLoeschen); - aktualisiereDatei(); - System.out.println("Bestellung wurde gelöscht."); - } else { - System.out.println("Keine Bestellung mit der angegebenen ID gefunden."); - } - } - private static void aktualisiereDatei() { - try (FileWriter writer = new FileWriter(FILE_PATH, false)) { - for (Bestellung bestellung : bestellungen) { - writer.write(bestellung.toFileFormat()); - } - } catch (IOException e) { - System.out.println("Fehler beim Aktualisieren der Datei: " + e.getMessage()); - } - } - + private static void aktualisiereDatei() { + try (FileWriter writer = new FileWriter(FILE_PATH, false)) { + for (Bestellung bestellung : bestellungen) { + writer.write(bestellung.toFileFormat()); + } + } catch (IOException e) { + System.out.println("Fehler beim Aktualisieren der Datei: " + e.getMessage()); + } + } public static void speichereBestellung(Bestellung bestellung) { try { diff --git a/Restaurantverwaltung/src/Bestellungen.txt b/Restaurantverwaltung/src/Bestellungen.txt index 8fa5319..9109d75 100644 --- a/Restaurantverwaltung/src/Bestellungen.txt +++ b/Restaurantverwaltung/src/Bestellungen.txt @@ -12,3 +12,37 @@ Bestellte Gerichte: Zeit: 16:13 -------------------------- +ID: 657b07cf-3416-43a6-9477-8f057541caeb +Tisch Nummer: 01 +Bestellte Gerichte: + +Zeit: 17:13 +-------------------------- +ID: 13b6908f-6b5e-4ed5-9d83-a01913bf0608 +Tisch Nummer: Ramen +Bestellte Gerichte: + +Zeit: 17:25 +-------------------------- +ID: dbe203a2-da99-4420-8095-999f79d37eaa +Tisch Nummer: Cheeseburger +Bestellte Gerichte: + +Zeit: 17:28 +-------------------------- +ID: f72aa0bf-d739-4e72-9654-add74abc3cea +Tisch Nummer: 01 +Bestellte Gerichte: +- Cheeseburger +- Ramen +- Ramen + +Zeit: 17:33 +-------------------------- +ID: 8adf6247-e041-46fd-86ee-2773b2eb69fe +Tisch Nummer: 01 +Bestellte Gerichte: +- Cheeseburger + +Zeit: 17:42 +-------------------------- diff --git a/Restaurantverwaltung/src/Dish.java b/Restaurantverwaltung/src/Dish.java index 3e8f78d..973b0ea 100644 --- a/Restaurantverwaltung/src/Dish.java +++ b/Restaurantverwaltung/src/Dish.java @@ -1,11 +1,14 @@ -import java.util.*; +import java.util.Map; + class Dish { private String name; private Map ingredients; + private double price; // Preis für jedes Gericht - public Dish(String name, Map ingredients) { + public Dish(String name, Map ingredients, double price) { this.name = name; this.ingredients = ingredients; + this.price = price; } public String getName() { @@ -15,4 +18,8 @@ class Dish { public Map getIngredients() { return ingredients; } -} \ No newline at end of file + + public double getPrice() { + return price; + } +} diff --git a/Restaurantverwaltung/src/FinancialManager.java b/Restaurantverwaltung/src/FinancialManager.java index 755ce01..5232bfb 100644 --- a/Restaurantverwaltung/src/FinancialManager.java +++ b/Restaurantverwaltung/src/FinancialManager.java @@ -1,45 +1,91 @@ -class FinancialManager { - private double totalRevenue; // Gesamte Einnahmen - private double totalExpenses; // Gesamte Ausgaben +import java.time.LocalDate; +import java.util.HashMap; +import java.util.Map; - // Konstruktor - public FinancialManager() { - this.totalRevenue = 0.0; - this.totalExpenses = 0.0; - } +public class FinancialManager { + private double totalRevenue; + private double totalExpenses; + private double totalProfit; + private Map dailyRevenue = new HashMap<>(); + private Map weeklyRevenue = new HashMap<>(); + private Map monthlyRevenue = new HashMap<>(); + private Map dailyExpenses = new HashMap<>(); + private Map weeklyExpenses = new HashMap<>(); + private Map monthlyExpenses = new HashMap<>(); - // Einnahmen hinzufügen + // Methode zur Hinzufügung von Einnahmen public void addRevenue(double amount) { - totalRevenue += amount; - System.out.println("Einnahmen hinzugefügt: " + amount + " Euro."); + this.totalRevenue += amount; + LocalDate today = LocalDate.now(); + dailyRevenue.put(today, dailyRevenue.getOrDefault(today, 0.0) + amount); + + // Einnahmen für die Woche und den Monat aktualisieren + LocalDate startOfWeek = today.minusDays(today.getDayOfWeek().getValue() - 1); + weeklyRevenue.put(startOfWeek, weeklyRevenue.getOrDefault(startOfWeek, 0.0) + amount); + + LocalDate startOfMonth = today.withDayOfMonth(1); + monthlyRevenue.put(startOfMonth, monthlyRevenue.getOrDefault(startOfMonth, 0.0) + amount); } - // Ausgaben hinzufügen + // Methode zur Hinzufügung von Ausgaben public void addExpense(double amount) { - totalExpenses += amount; - System.out.println("Ausgabe hinzugefügt: " + amount + " Euro."); + this.totalExpenses += amount; + LocalDate today = LocalDate.now(); + dailyExpenses.put(today, dailyExpenses.getOrDefault(today, 0.0) + amount); + + // Ausgaben für die Woche und den Monat aktualisieren + LocalDate startOfWeek = today.minusDays(today.getDayOfWeek().getValue() - 1); + weeklyExpenses.put(startOfWeek, weeklyExpenses.getOrDefault(startOfWeek, 0.0) + amount); + + LocalDate startOfMonth = today.withDayOfMonth(1); + monthlyExpenses.put(startOfMonth, monthlyExpenses.getOrDefault(startOfMonth, 0.0) + amount); } - // Finanzbericht anzeigen (Einnahmen, Ausgaben und Netto-Gewinn) - public void showFinancialReport(String period) { - double netProfit = totalRevenue - totalExpenses; // Netto-Gewinn berechnen - System.out.println("Finanzbericht für die " + period + ":"); - System.out.println("Gesamte Einnahmen: " + totalRevenue + " Euro."); - System.out.println("Gesamte Ausgaben: " + totalExpenses + " Euro."); - System.out.println("Netto-Gewinn: " + netProfit + " Euro."); + // Methode zur Berechnung der Einnahmen für einen bestimmten Zeitraum + public double getRevenueForPeriod(String period) { + LocalDate today = LocalDate.now(); + switch (period.toLowerCase()) { + case "daily": + return dailyRevenue.getOrDefault(today, 0.0); + case "weekly": + LocalDate startOfWeek = today.minusDays(today.getDayOfWeek().getValue() - 1); + return weeklyRevenue.getOrDefault(startOfWeek, 0.0); + case "monthly": + LocalDate startOfMonth = today.withDayOfMonth(1); + return monthlyRevenue.getOrDefault(startOfMonth, 0.0); + default: + return 0.0; + } } - // Getter für Einnahmen + // Methode zur Berechnung der Ausgaben für einen bestimmten Zeitraum + public double getExpensesForPeriod(String period) { + LocalDate today = LocalDate.now(); + switch (period.toLowerCase()) { + case "daily": + return dailyExpenses.getOrDefault(today, 0.0); + case "weekly": + LocalDate startOfWeek = today.minusDays(today.getDayOfWeek().getValue() - 1); + return weeklyExpenses.getOrDefault(startOfWeek, 0.0); + case "monthly": + LocalDate startOfMonth = today.withDayOfMonth(1); + return monthlyExpenses.getOrDefault(startOfMonth, 0.0); + default: + return 0.0; + } + } + + // Getter für Gesamtumsatz public double getTotalRevenue() { return totalRevenue; } - // Getter für Ausgaben + // Getter für Gesamtausgaben public double getTotalExpenses() { return totalExpenses; } - // Getter für Netto-Gewinn + // Berechnung des Nettogewinns public double getNetProfit() { return totalRevenue - totalExpenses; } diff --git a/Restaurantverwaltung/src/Inventory.java b/Restaurantverwaltung/src/Inventory.java index ac91a1e..e00158b 100644 --- a/Restaurantverwaltung/src/Inventory.java +++ b/Restaurantverwaltung/src/Inventory.java @@ -2,123 +2,140 @@ import java.io.*; import java.util.*; public class Inventory { - private Map stock = new HashMap<>(); // Bestand der Zutaten - private final String STOCK_FILE = "src/stock.txt"; // Datei für den Bestand - // Lädt den Bestand aus der Datei - public void loadStockFromFile() { - stock.clear(); - try (BufferedReader reader = new BufferedReader(new FileReader(STOCK_FILE))) { - String line; - while ((line = reader.readLine()) != null) { - String[] parts = line.split(":"); - if (parts.length == 2) { - String ingredientName = parts[0]; - int quantity = Integer.parseInt(parts[1]); - stock.put(ingredientName, quantity); - } - } - } catch (FileNotFoundException e) { - System.out.println("Bestand-Datei nicht gefunden, neue Datei wird erstellt."); - } catch (IOException e) { - System.out.println("Fehler beim Laden des Bestands: " + e.getMessage()); - } - } + private Map stock = new HashMap<>(); + private FinancialManager financialManager; // Deklaration der Instanzvariable - // Speichert den aktuellen Bestand in die Datei - public void saveStockToFile() { - try (BufferedWriter writer = new BufferedWriter(new FileWriter(STOCK_FILE))) { - for (Map.Entry entry : stock.entrySet()) { - writer.write(entry.getKey() + ":" + entry.getValue()); - writer.newLine(); - } - } catch (IOException e) { - System.out.println("Fehler beim Speichern des Bestands: " + e.getMessage()); - } - } + public Inventory(FinancialManager financialManager) { + this.financialManager = financialManager; // Initialisierung des FinancialManagers im Konstruktor + } - // Zeigt den aktuellen Bestand an - public void viewStock() { - if (stock.isEmpty()) { - System.out.println("Der Bestand ist leer."); - } else { - System.out.println("\n--- Aktueller Bestand ---"); - for (Map.Entry entry : stock.entrySet()) { - System.out.println(entry.getKey() + ": " + entry.getValue() + " Stück"); - } - } - } + private final String STOCK_FILE = "src/stock.txt"; // Datei für den Bestand - // Bestellmenge verringern (z.B. beim Bestellen) - public void useIngredients(Map usedIngredients) { - for (Map.Entry entry : usedIngredients.entrySet()) { - String ingredientName = entry.getKey(); - int amountUsed = entry.getValue(); - if (stock.containsKey(ingredientName)) { - int currentStock = stock.get(ingredientName); - if (currentStock >= amountUsed) { - stock.put(ingredientName, currentStock - amountUsed); - } else { - System.out.println("Nicht genügend Bestand für " + ingredientName); - } - } else { - System.out.println("Zutat " + ingredientName + " existiert nicht im Bestand."); - } - } - } + // Lädt den Bestand aus der Datei + public void loadStockFromFile() { + stock.clear(); + try (BufferedReader reader = new BufferedReader(new FileReader(STOCK_FILE))) { + String line; + while ((line = reader.readLine()) != null) { + String[] parts = line.split(":"); + if (parts.length == 2) { + String ingredientName = parts[0]; + int quantity = Integer.parseInt(parts[1]); + stock.put(ingredientName, quantity); + } + } + } catch (FileNotFoundException e) { + System.out.println("Bestand-Datei nicht gefunden, neue Datei wird erstellt."); + } catch (IOException e) { + System.out.println("Fehler beim Laden des Bestands: " + e.getMessage()); + } + } - // Bestand erweitern und berechnen, ob Ausgaben hinzuzufügen sind - public void addIngredients(String ingredientName, int amount, FinancialManager financialManager) { - if (stock.containsKey(ingredientName)) { - stock.put(ingredientName, stock.get(ingredientName) + amount); - } else { - stock.put(ingredientName, amount); - } + // Speichert den aktuellen Bestand in die Datei + public void saveStockToFile() { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(STOCK_FILE))) { + for (Map.Entry entry : stock.entrySet()) { + writer.write(entry.getKey() + ":" + entry.getValue()); + writer.newLine(); + } + } catch (IOException e) { + System.out.println("Fehler beim Speichern des Bestands: " + e.getMessage()); + } + } - // Preis für den Einkauf von Zutaten (hier Beispielwerte für Salat und Tomaten) - double pricePerUnit = getPriceForIngredient(ingredientName); - double totalCost = pricePerUnit * amount; + // Zeigt den aktuellen Bestand an + public void viewStock() { + if (stock.isEmpty()) { + System.out.println("Der Bestand ist leer."); + } else { + System.out.println("\n--- Aktueller Bestand ---"); + for (Map.Entry entry : stock.entrySet()) { + System.out.println(entry.getKey() + ": " + entry.getValue() + " Stück"); + } + } + } - // Finanzmanager über die Ausgaben informieren - financialManager.addExpense(totalCost); - } + // Bestellmenge verringern (z.B. beim Bestellen) + public void useIngredients(Map usedIngredients) { + for (Map.Entry entry : usedIngredients.entrySet()) { + String ingredientName = entry.getKey(); + int amountUsed = entry.getValue(); + if (stock.containsKey(ingredientName)) { + int currentStock = stock.get(ingredientName); + if (currentStock >= amountUsed) { + stock.put(ingredientName, currentStock - amountUsed); + } else { + System.out.println("Nicht genügend Bestand für " + ingredientName); + } + } else { + System.out.println("Zutat " + ingredientName + " existiert nicht im Bestand."); + } + } + } - // Gibt den Preis für eine bestimmte Zutat zurück (Beispielpreise) - private double getPriceForIngredient(String ingredientName) { - switch (ingredientName.toLowerCase()) { - case "salat": - return 1.5; // Preis für Salat pro Einheit - case "tomaten": - return 0.8; // Preis für Tomaten pro Einheit - case "cheeseburger": - return 3.0; // Preis für Cheeseburger pro Einheit - default: - return 1.0; // Standardpreis pro Einheit - } - } - - // In der Inventory-Klasse: - public boolean showIngredientsAvailable(Map ingredients) { - for (Map.Entry entry : ingredients.entrySet()) { - String ingredientName = entry.getKey(); - int requiredAmount = entry.getValue(); + // Bestand erweitern und berechnen, ob Ausgaben hinzuzufügen sind + public void addIngredients(String productName, int amountToAdd, FinancialManager financialManager) { + double ingredientCost = 1.0; // Beispielhafter Preis für Zutaten (z.B. 1 Euro pro Stück) - if (!stock.containsKey(ingredientName) || stock.get(ingredientName) < requiredAmount) { - System.out.println("Nicht genügend Bestand für: " + ingredientName); - return false; // Wenn eine Zutat nicht genug vorhanden ist, gibt die Methode false zurück - } - } - return true; // Alle Zutaten sind verfügbar - } + // Addiere die Zutaten zum Bestand + stock.put(productName, stock.getOrDefault(productName, 0) + amountToAdd); + + // Berechne die Ausgaben für die Erweiterung des Bestands + double totalCost = ingredientCost * amountToAdd; + + // Gebe die Kosten in den Finanzen an + financialManager.addExpense(totalCost); + + System.out.println("Bestand für " + productName + " wurde um " + amountToAdd + " Stück erhöht."); + } + + // Gibt den Preis für eine bestimmte Zutat zurück (Beispielpreise) + private double getPriceForIngredient(String ingredientName) { + switch (ingredientName.toLowerCase()) { + case "salat": + return 1.5; // Preis für Salat pro Einheit + case "tomaten": + return 0.8; // Preis für Tomaten pro Einheit + case "cheeseburger": + return 3.0; // Preis für Cheeseburger pro Einheit + default: + return 1.0; // Standardpreis pro Einheit + } + } + + // In der Inventory-Klasse: + public boolean showIngredientsAvailable(Map ingredients) { + for (Map.Entry entry : ingredients.entrySet()) { + String ingredient = entry.getKey(); + int requiredAmount = entry.getValue(); + + // Überprüfe, ob der Lagerbestand ausreicht + if (!stock.containsKey(ingredient) || stock.get(ingredient) < requiredAmount) { + System.out.println("Nicht genügend Bestand für: " + ingredient); // Fehlermeldung + return false; + } + } + return true; + } - // Getter für den Bestand - public Map getStock() { - return stock; - } + public void overwriteStock(String productName, int newAmount) { + if (stock.containsKey(productName)) { + stock.put(productName, newAmount); + System.out.println("Der Bestand für " + productName + " wurde auf " + newAmount + " Stück geändert."); + } else { + System.out.println("Das Produkt " + productName + " existiert nicht im Bestand."); + } + } - // Setter für den Bestand - public void setStock(Map stock) { - this.stock = stock; - } + // Getter für den Bestand + public Map getStock() { + return stock; + } + + // Setter für den Bestand + public void setStock(Map stock) { + this.stock = stock; + } } diff --git a/Restaurantverwaltung/src/Menu.java b/Restaurantverwaltung/src/Menu.java index 5c734cf..78355b6 100644 --- a/Restaurantverwaltung/src/Menu.java +++ b/Restaurantverwaltung/src/Menu.java @@ -1,17 +1,18 @@ import java.util.*; -class Menu { - public List dishes = new ArrayList<>(); - public List availableDishes = new ArrayList<>(); +public class Menu { + public List dishes = new ArrayList<>(); + public List availableDishes = new ArrayList<>(); - public Menu() { - - dishes.add(new Dish("Cheeseburger", Map.of("Brot", 1, "Fleisch", 1, "Käse", 1))); - dishes.add(new Dish("Veggie-Burger", Map.of("Brot", 1, "Salat", 1, "Tomaten", 1))); - dishes.add(new Dish("Double Meat Burger", Map.of("Brot", 1, "Fleisch", 2))); - dishes.add(new Dish("Ramen", Map.of("Soße", 1, "Salat", 1, "Tomaten", 1, "Nudeln", 30))); - } + public Menu() { + + dishes.add(new Dish("Cheeseburger", Map.of("Brot", 1, "Fleisch", 1, "Käse", 1), 5.0)); + dishes.add(new Dish("Veggie-Burger", Map.of("Brot", 1, "Salat", 1, "Tomaten", 1), 4.0)); + dishes.add(new Dish("Double Meat Burger", Map.of("Brot", 1, "Fleisch", 2), 6.0)); + dishes.add(new Dish("Ramen", Map.of("Soße", 1, "Salat", 1, "Tomaten", 1, "Nudeln", 30), 7.0)); + } + public void displayMenu(Inventory inventory) { System.out.println("Verfügbares Menü:"); for (Dish dish : dishes) { diff --git a/Restaurantverwaltung/src/SystemController.java b/Restaurantverwaltung/src/SystemController.java index 641dbca..fc5cf74 100644 --- a/Restaurantverwaltung/src/SystemController.java +++ b/Restaurantverwaltung/src/SystemController.java @@ -1,251 +1,297 @@ -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.util.*; +import java.util.Scanner; +import java.util.Map; +import java.util.HashMap; +import java.util.List; +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 static Inventory inventory = new Inventory(); // Bestand - private Menu menu = new Menu(); // Menü - private FinancialManager financialManager = new FinancialManager(); // Finanzmanager +public class SystemController { + private Scanner scanner = new Scanner(System.in); + private Map 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(); // Instanziierung des FinancialManagers - public SystemController() { - loadUsersFromFile(); // Benutzer aus Datei laden - } + public SystemController() { + loadUsersFromFile(); + inventory = new Inventory(financialManager); // Übergabe des FinancialManagers an Inventory + } - public void startSystem() { - System.out.println("Willkommen im Restaurant Management System!"); - System.out.println("Bitte loggen Sie sich ein: "); + 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("Username ---------------> "); + String username = scanner.nextLine(); - System.out.print("Passwort ---------------> "); - String password = scanner.nextLine(); + System.out.print("Passwort ---------------> "); + String password = scanner.nextLine(); - User user = authenticate(username, password); - if (user != null) { - displayMainMenu(user); // Hauptmenü anzeigen - } else { - System.out.println("Ungültige Anmeldedaten."); - } - } + 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 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. Finanz- und Umsatzverwaltung"); - System.out.println("6. Beenden"); + public void displayMainMenu(User user) { + boolean running = true; + while (running) { + inventory.loadStockFromFile(); + System.out.println("\n--- Hauptmenü ---"); - System.out.print("Bitte wähle eine Option: "); - int choice = scanner.nextInt(); - scanner.nextLine(); // Eingabepuffer leeren + if (user.role == Role.SERVICE) { + System.out.println("1. Bestellung aufnehmen"); + System.out.println("2. Zurück"); + } else { + 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"); // Option zum Verwalten der Bestellungen hinzugefügt + System.out.println("5. Finanzbericht anzeigen"); + System.out.println("6. Beenden"); + } - switch (choice) { - case 1 -> manageInventory(); // Bestand verwalten - case 2 -> { - if (user.role == Role.MANAGER) { - createUser(); // Neuer Nutzer erstellen - } else { - System.out.println("Keine Rechte, um neue Nutzer zu erstellen."); - } - } - case 3 -> menu.displayMenu(inventory); // Menü anzeigen - case 4 -> manageOrders(); // Bestellungen verwalten - case 5 -> manageFinances(); // Finanz- und Umsatzverwaltung - case 6 -> { - running = false; - System.out.println("System wird beendet. Auf Wiedersehen!"); - } - default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); - } - } - } + System.out.print("Bitte wähle eine Option: "); + int choice = scanner.nextInt(); + scanner.nextLine(); // Eingabepuffer leeren - 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ü"); + switch (choice) { + case 1 -> { + if (user.role == Role.SERVICE) { + menu.displayMenu(inventory); + Bestellsystem.erstelleBestellung(); // Bestellung aufnehmen + updateFinancialReport(menu.getAvailableDishes()); // Finanzbericht aktualisieren + } else { + manageInventory(); + } + } + case 2 -> { + if (user.role != Role.SERVICE) { + createUser(); + } else { + running = false; // Zurück + } + } + case 3 -> { + if (user.role != Role.SERVICE) { + menu.displayMenu(inventory); // Menü anzeigen + } + } + case 4 -> manageOrders(); // Bestellungen verwalten aufrufen + case 5 -> displayFinancialReport(); // Finanzbericht anzeigen + case 6 -> running = false; // Beenden + default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); + } + } + } - System.out.print("Bitte wähle eine Option: "); - int choice = scanner.nextInt(); - scanner.nextLine(); // Eingabepuffer leeren + // Finanzbericht aktualisieren: + private void updateFinancialReport(List orderedDishes) { + double totalAmount = 0; - 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.useIngredients(Map.of(name, anzahl)); // Zutaten im Bestand verwenden - inventory.saveStockToFile(); // Bestand speichern - } 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); // Bestand erweitern und Ausgaben verbuchen - inventory.saveStockToFile(); // Bestand speichern - } 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."); - } - } - } + for (Dish dish : orderedDishes) { + totalAmount += dish.getPrice(); // Gesamtbetrag basierend auf den Preisen der bestellten Gerichte + } - 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ü"); + // Einnahmen im Finanzmanager hinzufügen + financialManager.addRevenue(totalAmount); - System.out.print("Bitte wähle eine Option: "); - int choice = scanner.nextInt(); - scanner.nextLine(); // Eingabepuffer leeren + System.out.println("Gesamtkosten der Bestellung: " + totalAmount + " €"); + } - switch (choice) { - case 1 -> { - menu.displayMenu(inventory); // Menü anzeigen - Bestellsystem.erstelleBestellung(); // Bestellung aufnehmen - } - case 2 -> Bestellsystem.ladeUndZeigeBestellungen(); // Alle Bestellungen anzeigen - case 3 -> Bestellsystem.loescheBestellung(); // Bestellungen löschen - case 4 -> managingOrders = false; - default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); - } - } - } - private void manageFinances() { - boolean managingFinances = true; - while (managingFinances) { - System.out.println("\n--- Finanz- und Umsatzverwaltung ---"); - System.out.println("1. Einnahmen und Ausgaben anzeigen"); - System.out.println("2. Umsatzübersicht (Täglich, Wöchentlich, Monatlich)"); - System.out.println("3. Zurück zum Hauptmenü"); + 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 + System.out.print("Bitte wähle eine Option: "); + int choice = scanner.nextInt(); + scanner.nextLine(); // Eingabepuffer leeren - switch (choice) { - case 1 -> financialManager.showFinancialReport("heute"); // Finanzbericht anzeigen - case 2 -> { - System.out.println("Bitte 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 (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 + } 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 in der Datenbank + } 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."); + } + } + } - switch (periodChoice) { - case 1 -> financialManager.showFinancialReport("täglich"); // Täglicher Bericht - case 2 -> financialManager.showFinancialReport("wöchentlich"); // Wöchentlicher Bericht - case 3 -> financialManager.showFinancialReport("monatlich"); // Monatlicher Bericht - default -> System.out.println("Ungültige Auswahl."); - } - } - case 3 -> managingFinances = 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ü"); - 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 | NullPointerException e) { - System.out.println("Fehler beim Erstellen eines Accounts. Überprüfen Sie Ihre Eingaben."); - } + System.out.print("Bitte wähle eine Option: "); + int choice = scanner.nextInt(); + scanner.nextLine(); // Eingabepuffer leeren - try { - User newUser = new User(username, password, role); - users.put(username, newUser); - saveUserToFile(newUser); - System.out.println("Nutzer erfolgreich erstellt."); - } catch (NullPointerException e) { - System.out.println("Fehler beim Erstellen des Nutzers."); - } - } + switch (choice) { + case 1 -> { + menu.displayMenu(inventory); // Menü anzeigen + Bestellsystem.erstelleBestellung(); // Bestellung aufnehmen + updateFinancialReport(menu.getAvailableDishes()); // Finanzbericht aktualisieren + } + case 2 -> { + Bestellsystem.ladeUndZeigeBestellungen(); // Bestellungen anzeigen + } + case 3 -> { + Bestellsystem.loescheBestellung(); // Bestellungen löschen + } + case 4 -> managingOrders = false; // Zurück zum Hauptmenü + default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); + } + } + } - 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 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 des Nutzers."); + } + } + + 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 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. 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 -> viewingReport = false; // Zurück zum Hauptmenü + default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); + } + } + } + - private void createDefaultManager() { - User defaultManager = new User("Dimitry", "1234", Role.MANAGER); - users.put("Dimitry", defaultManager); - saveUserToFile(defaultManager); - } } diff --git a/Restaurantverwaltung/src/stock.txt b/Restaurantverwaltung/src/stock.txt index 2f66960..d6250c7 100644 --- a/Restaurantverwaltung/src/stock.txt +++ b/Restaurantverwaltung/src/stock.txt @@ -1 +1,7 @@ -Salat:160 +Tomaten:100 +Salat:260 +Käse:100 +Brot:100 +Soße:100 +Fleisch:200 +Nudeln:150 diff --git a/Restaurantverwaltung/src/users.txt b/Restaurantverwaltung/src/users.txt index 21fb1f8..f2c583a 100644 --- a/Restaurantverwaltung/src/users.txt +++ b/Restaurantverwaltung/src/users.txt @@ -1,3 +1,4 @@ Dimitry:1234:MANAGER Abbas:1234:SERVICE Ananas Kopf:Bananenbieger:KITCHEN +Arim:1234:MANAGER