diff --git a/Restaurantverwaltung/src/Bestellsystem.java b/Restaurantverwaltung/src/Bestellsystem.java index 3645f60..550a276 100644 --- a/Restaurantverwaltung/src/Bestellsystem.java +++ b/Restaurantverwaltung/src/Bestellsystem.java @@ -12,7 +12,6 @@ import java.util.List; import java.util.HashMap; public class Bestellsystem { - private static List bestellungen = new ArrayList<>(); private static Scanner scanner = new Scanner(System.in); private static Menu menu = new Menu(); @@ -24,106 +23,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"); + + 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"); + 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/Bestellung.java b/Restaurantverwaltung/src/Bestellung.java index 4804b06..9ad10a5 100644 --- a/Restaurantverwaltung/src/Bestellung.java +++ b/Restaurantverwaltung/src/Bestellung.java @@ -47,10 +47,11 @@ public class Bestellung { String[] parts = fileLine.split(";"); if (parts.length < 3) { - throw new IllegalArgumentException("Ungültiges Dateiformat: " + fileLine); + throw new IllegalArgumentException("Ungültiges Dateiformat: " + fileLine); } + String id = parts[0].trim(); String tischNummer = parts[1].trim(); @@ -74,4 +75,4 @@ public class Bestellung { } } -} +} \ No newline at end of file diff --git a/Restaurantverwaltung/src/Bestellungen.txt b/Restaurantverwaltung/src/Bestellungen.txt index 8fa5319..a8c7b22 100644 --- a/Restaurantverwaltung/src/Bestellungen.txt +++ b/Restaurantverwaltung/src/Bestellungen.txt @@ -12,3 +12,17 @@ Bestellte Gerichte: Zeit: 16:13 -------------------------- +ID: 004b2f19-5c8f-47bf-9a8d-38ee515f4526 +Tisch Nummer: 2 +Bestellte Gerichte: + +Zeit: 15:47 +-------------------------- +ID: 3aa58523-b89b-480f-a486-8348f4e3381d +Tisch Nummer: 1 +Bestellte Gerichte: +- Cheeseburger +- Double Meat Burger + +Zeit: 15:47 +-------------------------- diff --git a/Restaurantverwaltung/src/Dish.java b/Restaurantverwaltung/src/Dish.java index 3e8f78d..ded987f 100644 --- a/Restaurantverwaltung/src/Dish.java +++ b/Restaurantverwaltung/src/Dish.java @@ -1,13 +1,17 @@ -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() { return name; } @@ -15,4 +19,8 @@ class Dish { public Map getIngredients() { return ingredients; } + + public double getPrice() { + return price; + } } \ No newline at end of file diff --git a/Restaurantverwaltung/src/FinancialManager.java b/Restaurantverwaltung/src/FinancialManager.java index 8085e87..e7242ae 100644 --- a/Restaurantverwaltung/src/FinancialManager.java +++ b/Restaurantverwaltung/src/FinancialManager.java @@ -1,144 +1,115 @@ import java.io.*; -import java.text.SimpleDateFormat; -import java.util.*; +import java.time.LocalDate; +import java.util.HashMap; +import java.util.Map; -class FinancialManager { - private static final String TRANSACTION_FILE = "src/transactions.txt"; // Datei für Transaktionen (Einnahmen und Ausgaben) - private List transactions = new ArrayList<>(); +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<>(); - public FinancialManager() { - loadTransactionsFromFile(); - } + private final String FINANCIAL_REPORT_FILE = "src/financial_report.txt"; - public void recordTransaction(double amount, String description, boolean isIncome) { - Date date = new Date(); - Transaction transaction = new Transaction(amount, description, isIncome, date); - transactions.add(transaction); - saveTransactionToFile(transaction); - } + + public void addRevenue(double amount) { + this.totalRevenue += amount; + LocalDate today = LocalDate.now(); + dailyRevenue.put(today, dailyRevenue.getOrDefault(today, 0.0) + amount); - private void saveTransactionToFile(Transaction transaction) { - try (BufferedWriter writer = new BufferedWriter(new FileWriter(TRANSACTION_FILE, true))) { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String transactionLine = dateFormat.format(transaction.getDate()) + ";" + transaction.getAmount() + ";" + transaction.getDescription() + ";" + (transaction.isIncome() ? "Income" : "Expense"); - writer.write(transactionLine); - writer.newLine(); - } catch (IOException e) { - System.out.println("Fehler beim Speichern der Transaktion: " + e.getMessage()); - } - } + // 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); - private void loadTransactionsFromFile() { - try (BufferedReader reader = new BufferedReader(new FileReader(TRANSACTION_FILE))) { - String line; - while ((line = reader.readLine()) != null) { - String[] parts = line.split(";"); - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = dateFormat.parse(parts[0]); - double amount = Double.parseDouble(parts[1]); - String description = parts[2]; - boolean isIncome = "Income".equals(parts[3]); - transactions.add(new Transaction(amount, description, isIncome, date)); - } - } catch (IOException | java.text.ParseException e) { - System.out.println("Fehler beim Laden der Transaktionen: " + e.getMessage()); - } - } + LocalDate startOfMonth = today.withDayOfMonth(1); + monthlyRevenue.put(startOfMonth, monthlyRevenue.getOrDefault(startOfMonth, 0.0) + amount); - public void showFinancialReport(String period) { - double totalIncome = 0; - double totalExpense = 0; - Date startDate = null; - Date endDate = new Date(); + saveFinancialReport(); // Finanzdaten in die Datei speichern + } - switch (period.toLowerCase()) { - case "daily": - startDate = getStartOfDay(); - break; - case "weekly": - startDate = getStartOfWeek(); - break; - case "monthly": - startDate = getStartOfMonth(); - break; - default: - System.out.println("Ungültige Zeitraumoption!"); - return; - } + // Methode zur Hinzufügung von Ausgaben + public void addExpense(double amount) { + this.totalExpenses += amount; + LocalDate today = LocalDate.now(); + dailyExpenses.put(today, dailyExpenses.getOrDefault(today, 0.0) + amount); - // Berechnen der Einnahmen und Ausgaben im angegebenen Zeitraum - for (Transaction transaction : transactions) { - if (!transaction.getDate().before(startDate) && !transaction.getDate().after(endDate)) { - if (transaction.isIncome()) { - totalIncome += transaction.getAmount(); - } else { - totalExpense += transaction.getAmount(); - } - } - } + // 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); - System.out.println("\n--- Finanzbericht für " + period + " ---"); - System.out.println("Gesamte Einnahmen: " + totalIncome + " EUR"); - System.out.println("Gesamte Ausgaben: " + totalExpense + " EUR"); - System.out.println("Nettogewinn: " + (totalIncome - totalExpense) + " EUR"); - } + LocalDate startOfMonth = today.withDayOfMonth(1); + monthlyExpenses.put(startOfMonth, monthlyExpenses.getOrDefault(startOfMonth, 0.0) + amount); - private Date getStartOfDay() { - Calendar cal = Calendar.getInstance(); - cal.set(Calendar.HOUR_OF_DAY, 0); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - cal.set(Calendar.MILLISECOND, 0); - return cal.getTime(); - } + saveFinancialReport(); // Finanzdaten in einer txt Datei speichern + } - private Date getStartOfWeek() { - Calendar cal = Calendar.getInstance(); - cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); - cal.set(Calendar.HOUR_OF_DAY, 0); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - cal.set(Calendar.MILLISECOND, 0); - return cal.getTime(); - } + 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; + } + } - private Date getStartOfMonth() { - Calendar cal = Calendar.getInstance(); - cal.set(Calendar.DAY_OF_MONTH, 1); - cal.set(Calendar.HOUR_OF_DAY, 0); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - cal.set(Calendar.MILLISECOND, 0); - return cal.getTime(); - } -} + 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; + } + } -class Transaction { - private double amount; - private String description; - private boolean isIncome; - private Date date; + // Getter für Gesamtumsatz + public double getTotalRevenue() { + return totalRevenue; + } - public Transaction(double amount, String description, boolean isIncome, Date date) { - this.amount = amount; - this.description = description; - this.isIncome = isIncome; - this.date = date; - } + // Getter für Gesamtausgaben + public double getTotalExpenses() { + return totalExpenses; + } - public double getAmount() { - return amount; - } + // Berechnung des Nettogewinns + public double getNetProfit() { + return totalRevenue - totalExpenses; + } - public String getDescription() { - return description; - } - - public boolean isIncome() { - return isIncome; - } - - public Date getDate() { - return date; - } -} + // Methode zur Speicherung des Finanzberichts in einer Datei + private void saveFinancialReport() { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(FINANCIAL_REPORT_FILE, true))) { + writer.write("Datum: " + LocalDate.now()); + writer.newLine(); + writer.write("Gesamte Einnahmen: " + totalRevenue + " €"); + writer.newLine(); + writer.write("Gesamte Ausgaben: " + totalExpenses + " €"); + writer.newLine(); + writer.write("Nettogewinn: " + getNetProfit() + " €"); + writer.newLine(); + writer.write("-------------------------------------"); + writer.newLine(); + } catch (IOException e) { + System.out.println("Fehler beim Speichern des Finanzberichts: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/Restaurantverwaltung/src/Inventory.java b/Restaurantverwaltung/src/Inventory.java index ba6ff17..9225253 100644 --- a/Restaurantverwaltung/src/Inventory.java +++ b/Restaurantverwaltung/src/Inventory.java @@ -1,32 +1,37 @@ -import java.util.*; import java.io.*; +import java.util.*; -class Inventory { - private Map stock; - private final String STOCK_FILE = "src/stock.txt"; - - +public class Inventory { + + private Map stock = new HashMap<>(); + private FinancialManager financialManager; // Deklaration der Instanzvariable + + public Inventory(FinancialManager financialManager) { + this.financialManager = financialManager; // Initialisierung des FinancialManagers im Konstruktor + } + + private final String STOCK_FILE = "src/stock.txt"; // Datei für den Bestand public void loadStockFromFile() { - stock = new HashMap<>(); + stock.clear(); 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); - + if (parts.length == 2) { + String ingredientName = parts[0]; + int quantity = Integer.parseInt(parts[1]); + stock.put(ingredientName, quantity); + } } } catch (FileNotFoundException e) { - System.out.println("Stockdatenbank nicht gefunden. Einträge müssen manuell erstellt werden"); - + System.out.println("Bestand-Datei nicht gefunden, neue Datei wird erstellt."); } catch (IOException e) { - System.out.println("Fehler beim Lesen der Benutzerdatenbank: " + e.getMessage()); + System.out.println("Fehler beim Laden des Bestands: " + e.getMessage()); } } + // 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()) { @@ -34,96 +39,98 @@ class Inventory { writer.newLine(); } } catch (IOException e) { - System.out.println("Fehler beim Speichern der Datei: " + e.getMessage()); + System.out.println("Fehler beim Speichern des Bestands: " + e.getMessage()); } } - public Inventory() { - - } - + // Zeigt den aktuellen Bestand an public void viewStock() { - System.out.println("Aktueller Bestand:"); - for (Map.Entry entry : stock.entrySet()) { - System.out.println(entry.getKey() + ": " + entry.getValue()); + 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"); + } } } - + + 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."); + } + } + } + + 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) + + 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 amount = entry.getValue(); + int requiredAmount = entry.getValue(); - if (!stock.containsKey(ingredient) || stock.get(ingredient) < amount) { + // Ü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; } - public void useIngredients(Map ingredients) { - - for (Map.Entry entry : ingredients.entrySet()) { - stock.put(entry.getKey(), stock.get(entry.getKey()) - entry.getValue()); - saveStockToFile(); - } - - } - - // Neue Methode: Zutaten hinzufügen - public void addIngredients(String ingredient, int amount) { - if (amount <= 0) { - System.out.println("Ungültige Menge: " + amount); - return; - } - stock.put(ingredient, stock.getOrDefault(ingredient, 0) + amount); - System.out.println(amount + " " + ingredient + " hinzugefügt."); - } - - // Neue Methode: Zutaten entfernen - public void removeIngredient(String ingredient) { - if (stock.containsKey(ingredient)) { - stock.remove(ingredient); - System.out.println(ingredient + " wurde aus dem Lager entfernt."); + 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(ingredient + " ist nicht im Lager vorhanden."); + System.out.println("Das Produkt " + productName + " existiert nicht im Bestand."); } } - // Neue Methode: Gesamten Bestand prüfen - public int totalStock() { - int total = 0; - for (int amount : stock.values()) { - total += amount; - } - return total; + // Getter für den Bestand + public Map getStock() { + return stock; } - // Neue Methode: Warnungen bei niedrigem Bestand - public void lowStockWarning(int threshold) { - System.out.println("Warnung: Niedriger Bestand bei folgenden Zutaten:"); - for (Map.Entry entry : stock.entrySet()) { - if (entry.getValue() < threshold) { - System.out.println(entry.getKey() + ": " + entry.getValue()); - } - } - } - - - - // Neue Methode: Zutatenbestand überschreiben - public void overwriteStock(String ingredient, int amount) { - if (amount < 0) { - System.out.println("Ungültige Menge: " + amount); - return; - } - if (stock.containsKey(ingredient)) { - stock.put(ingredient, amount); - System.out.println(ingredient + " Bestand auf " + amount + " gesetzt."); - } else { - System.out.println(ingredient + " ist nicht im Lager vorhanden. Hinzufügen mit neuer Menge."); - stock.put(ingredient, amount); - } + // Setter für den Bestand + public void setStock(Map stock) { + this.stock = stock; } } \ No newline at end of file diff --git a/Restaurantverwaltung/src/Menu.java b/Restaurantverwaltung/src/Menu.java index 5c734cf..fcdc94b 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 07e76af..51856d4 100644 --- a/Restaurantverwaltung/src/SystemController.java +++ b/Restaurantverwaltung/src/SystemController.java @@ -2,466 +2,555 @@ import java.util.*; 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"; - public static Inventory inventory = new Inventory(); - private Menu menu = new Menu(); - private FinancialManager financialManager = new FinancialManager(); - private ReservationManager reservationManager = new ReservationManager(); - private List shifts = new ArrayList<>(); - private List absences = new ArrayList<>(); - private List 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"; + 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(); + private ReservationManager reservationManager = new ReservationManager(); + private List shifts = new ArrayList<>(); + private List absences = new ArrayList<>(); + private List 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(); - } + 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: "); + 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); - } 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; + } - 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 -> showFinancialReports(); - 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."); - } - } - } + 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 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 + } - 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."); - } - } - } + double totalAmount = 0; - 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); - } + // Berechnung des Gesamtbetrags für die bestellten Gerichte + for (Dish dish : orderedDishes) { + totalAmount += dish.getPrice(); // Gesamtbetrag basierend auf den Preisen der bestellten Gerichte + } - 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); - } + // Einnahmen im Finanzmanager hinzufügen + financialManager.addRevenue(totalAmount); - 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.println("Gesamtkosten der Bestellung: " + totalAmount + " €"); + } - System.out.print("Bitte wähle eine Option: "); - int choice = scanner.nextInt(); - scanner.nextLine(); // Eingabepuffer leeren + 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."); + } + } + } - 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 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 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 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); + } - System.out.print("Bitte wähle eine Option: "); - int choice = scanner.nextInt(); - scanner.nextLine(); // Eingabepuffer leeren + private void cancelReservation() { + System.out.print("Tischnummer der Reservierung: "); + int tableNumber = scanner.nextInt(); + reservationManager.cancelReservation(tableNumber); + } - 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 + 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 -> 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."); - } - } - } + System.out.print("Bitte wähle eine Option: "); + int choice = scanner.nextInt(); + scanner.nextLine(); // Eingabepuffer leeren - 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."); - } + 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."); + } + } + } - try { - User newUser = new User(username, password, role); - users.put(username, newUser); - saveUserToFile(newUser); + 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.println("Nutzer erfolgreich erstellt."); - } catch (NullPointerException c) { - System.out.println("Fehler beim Erstellen eines Accounts."); - } - } + System.out.print("Bitte wähle eine Option: "); + int choice = scanner.nextInt(); + scanner.nextLine(); // Eingabepuffer leeren - 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()); + 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."); + } + } + } - 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(); + 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 - 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(); + 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."); + } + } + } - 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, true))) { - 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 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."); + } - 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()); - } - } + try { + User newUser = new User(username, password, role); + users.put(username, newUser); + saveUserToFile(newUser); - private void createDefaultManager() { - User defaultManager = new User("Dimitry", "1234", Role.MANAGER); - users.put("Dimitry", defaultManager); - saveUserToFile(defaultManager); - } + System.out.println("Nutzer erfolgreich erstellt."); + } catch (NullPointerException c) { + System.out.println("Fehler beim Erstellen eines Accounts."); + } + } - 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"); + 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()); - int periodChoice = scanner.nextInt(); - scanner.nextLine(); // Eingabepuffer leeren + 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()); + } + } - switch (periodChoice) { - case 1 -> financialManager.showFinancialReport("daily"); - case 2 -> financialManager.showFinancialReport("weekly"); - case 3 -> financialManager.showFinancialReport("monthly"); - default -> System.out.println("Ungültige Auswahl."); - } - } + 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()); + } + } } diff --git a/Restaurantverwaltung/src/absences.txt b/Restaurantverwaltung/src/absences.txt index eba6423..5e1ea8e 100644 --- a/Restaurantverwaltung/src/absences.txt +++ b/Restaurantverwaltung/src/absences.txt @@ -5,3 +5,11 @@ Arim;22.02.2025;Krank Arim;22.02.2025;Krank Dimitry ;25.04.2025;Krankheit Abbas;26.03.2025;Krankheit +Arim;22.02.2025;Krank +Arim;22.02.2025;Krank +Dimitry ;25.04.2025;Krankheit +Arim;22.02.2025;Krank +Arim;22.02.2025;Krank +Dimitry ;25.04.2025;Krankheit +Abbas;26.03.2025;Krankheit +Ali;30.06.2025;Krank diff --git a/Restaurantverwaltung/src/financial_report.txt b/Restaurantverwaltung/src/financial_report.txt new file mode 100644 index 0000000..f0c5913 --- /dev/null +++ b/Restaurantverwaltung/src/financial_report.txt @@ -0,0 +1,5 @@ +Datum: 2025-01-12 +Gesamte Einnahmen: 0.0 € +Gesamte Ausgaben: 1545.0 € +Nettogewinn: -1545.0 € +------------------------------------- diff --git a/Restaurantverwaltung/src/stock.txt b/Restaurantverwaltung/src/stock.txt index 7c6ef85..571d575 100644 --- a/Restaurantverwaltung/src/stock.txt +++ b/Restaurantverwaltung/src/stock.txt @@ -1,8 +1,7 @@ -01,100 -Soße,49999996 -Ananasdasdas,5000 -Brot,1503 -Tomaten,503 -Käse,715 -Fleisch,93 -Salat,494 +Nudeln,150 +Soße,100 +Brot,100 +Tomaten,200 +Salat,260 +Käse,100 +Fleisch,200 \ No newline at end of file