Anpassung der Kosten, hinzufügen der Preise, optimierung der Anzeige,

master
alama 2025-01-11 17:48:00 +01:00
parent 8a28a35a6d
commit d97c8e898a
9 changed files with 594 additions and 463 deletions

View File

@ -24,106 +24,79 @@ public class Bestellsystem {
System.out.print("Bitte gib die Tischnummer ein: "); System.out.print("Bitte gib die Tischnummer ein: ");
String tischNummer = scanner.nextLine(); String tischNummer = scanner.nextLine();
Bestellung bestellung = new Bestellung(tischNummer); Bestellung bestellung = new Bestellung(tischNummer);
while (true) { while (true) {
// List<Dish> Gerichte = new ArrayList<>(menu.getDishes()); // Gericht auswählen
// try (BufferedReader reader = new BufferedReader(new FileReader(STOCK_FILE))) { System.out.print("Bitte bestelle ein Gericht (oder 'fertig', um abzuschließen): ");
// String line; String gericht = scanner.nextLine();
// while ((line = reader.readLine()) != null) { boolean istVerfuegbar = false;
// String[] parts = line.split(",");
// // Wenn der Benutzer 'fertig' eingibt, wird die Bestellung gespeichert
// String name = parts[0]; if (gericht.equalsIgnoreCase("fertig")) {
// Integer count = Integer.parseInt(parts[1]); speichereBestellung(bestellung);
// stock.put(name, count); System.out.println("Bestand wurde aktualisiert");
// break;
// } }
// } catch (FileNotFoundException e) {
// System.out.println("Stockdatenbank nicht gefunden. Einträge müssen manuell erstellt werden"); // Überprüfen, ob das Gericht im Menü verfügbar ist
// try {
// } catch (IOException e) { for (Dish dish : menu.getDishes()) {
// System.out.println("Fehler beim Lesen der Benutzerdatenbank: " + e.getMessage()); if (gericht.equalsIgnoreCase(dish.getName())) {
// } // Zutaten für das Gericht verwenden (Bestand aktualisieren)
// for (Dish gericht : Gerichte) { SystemController.inventory.useIngredients(dish.getIngredients());
// if (stock.containsKey(gericht.getName())) { bestellung.addGericht(gericht); // Gericht zur Bestellung hinzufügen
// if (stock.get(gericht.getName()) < ) istVerfuegbar = true;
// } bestellungen.add(bestellung); // Bestellung zur Liste der Bestellungen hinzufügen
// } System.out.println("Bestellung wurde aktualisiert");
System.out.print("Bitte bestelle ein Gericht (oder 'fertig', um abzuschließen): "); System.out.println(bestellung.getBestellungDetails()); // Bestellungsdetails anzeigen
String gericht = scanner.nextLine(); break;
boolean istVerfuegbar = false; }
if (gericht.equalsIgnoreCase("fertig")) { }
speichereBestellung(bestellung); } catch (Exception e) {
System.out.println("Bestand wurde aktualisiert"); 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; 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: "); private static void aktualisiereDatei() {
String id = scanner.nextLine(); try (FileWriter writer = new FileWriter(FILE_PATH, false)) {
for (Bestellung bestellung : bestellungen) {
Bestellung zuLoeschen = null; writer.write(bestellung.toFileFormat());
}
for (Bestellung bestellung : bestellungen) { } catch (IOException e) {
if (bestellung.getId().equals(id)) { System.out.println("Fehler beim Aktualisieren der Datei: " + e.getMessage());
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());
}
}
public static void speichereBestellung(Bestellung bestellung) { public static void speichereBestellung(Bestellung bestellung) {
try { try {

View File

@ -12,3 +12,37 @@ Bestellte Gerichte:
Zeit: 16:13 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
--------------------------

View File

@ -1,11 +1,14 @@
import java.util.*; import java.util.Map;
class Dish { class Dish {
private String name; private String name;
private Map<String, Integer> ingredients; private Map<String, Integer> ingredients;
private double price; // Preis für jedes Gericht
public Dish(String name, Map<String, Integer> ingredients) { public Dish(String name, Map<String, Integer> ingredients, double price) {
this.name = name; this.name = name;
this.ingredients = ingredients; this.ingredients = ingredients;
this.price = price;
} }
public String getName() { public String getName() {
@ -15,4 +18,8 @@ class Dish {
public Map<String, Integer> getIngredients() { public Map<String, Integer> getIngredients() {
return ingredients; return ingredients;
} }
}
public double getPrice() {
return price;
}
}

View File

@ -1,45 +1,91 @@
class FinancialManager { import java.time.LocalDate;
private double totalRevenue; // Gesamte Einnahmen import java.util.HashMap;
private double totalExpenses; // Gesamte Ausgaben import java.util.Map;
// Konstruktor public class FinancialManager {
public FinancialManager() { private double totalRevenue;
this.totalRevenue = 0.0; private double totalExpenses;
this.totalExpenses = 0.0; private double totalProfit;
} private Map<LocalDate, Double> dailyRevenue = new HashMap<>();
private Map<LocalDate, Double> weeklyRevenue = new HashMap<>();
private Map<LocalDate, Double> monthlyRevenue = new HashMap<>();
private Map<LocalDate, Double> dailyExpenses = new HashMap<>();
private Map<LocalDate, Double> weeklyExpenses = new HashMap<>();
private Map<LocalDate, Double> monthlyExpenses = new HashMap<>();
// Einnahmen hinzufügen // Methode zur Hinzufügung von Einnahmen
public void addRevenue(double amount) { public void addRevenue(double amount) {
totalRevenue += amount; this.totalRevenue += amount;
System.out.println("Einnahmen hinzugefügt: " + amount + " Euro."); 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) { public void addExpense(double amount) {
totalExpenses += amount; this.totalExpenses += amount;
System.out.println("Ausgabe hinzugefügt: " + amount + " Euro."); 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) // Methode zur Berechnung der Einnahmen für einen bestimmten Zeitraum
public void showFinancialReport(String period) { public double getRevenueForPeriod(String period) {
double netProfit = totalRevenue - totalExpenses; // Netto-Gewinn berechnen LocalDate today = LocalDate.now();
System.out.println("Finanzbericht für die " + period + ":"); switch (period.toLowerCase()) {
System.out.println("Gesamte Einnahmen: " + totalRevenue + " Euro."); case "daily":
System.out.println("Gesamte Ausgaben: " + totalExpenses + " Euro."); return dailyRevenue.getOrDefault(today, 0.0);
System.out.println("Netto-Gewinn: " + netProfit + " Euro."); 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() { public double getTotalRevenue() {
return totalRevenue; return totalRevenue;
} }
// Getter für Ausgaben // Getter für Gesamtausgaben
public double getTotalExpenses() { public double getTotalExpenses() {
return totalExpenses; return totalExpenses;
} }
// Getter für Netto-Gewinn // Berechnung des Nettogewinns
public double getNetProfit() { public double getNetProfit() {
return totalRevenue - totalExpenses; return totalRevenue - totalExpenses;
} }

View File

@ -2,123 +2,140 @@ import java.io.*;
import java.util.*; import java.util.*;
public class Inventory { public class Inventory {
private Map<String, Integer> 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 private Map<String, Integer> stock = new HashMap<>();
public void loadStockFromFile() { private FinancialManager financialManager; // Deklaration der Instanzvariable
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());
}
}
// Speichert den aktuellen Bestand in die Datei public Inventory(FinancialManager financialManager) {
public void saveStockToFile() { this.financialManager = financialManager; // Initialisierung des FinancialManagers im Konstruktor
try (BufferedWriter writer = new BufferedWriter(new FileWriter(STOCK_FILE))) { }
for (Map.Entry<String, Integer> entry : stock.entrySet()) {
writer.write(entry.getKey() + ":" + entry.getValue());
writer.newLine();
}
} catch (IOException e) {
System.out.println("Fehler beim Speichern des Bestands: " + e.getMessage());
}
}
// Zeigt den aktuellen Bestand an private final String STOCK_FILE = "src/stock.txt"; // Datei für den Bestand
public void viewStock() {
if (stock.isEmpty()) {
System.out.println("Der Bestand ist leer.");
} else {
System.out.println("\n--- Aktueller Bestand ---");
for (Map.Entry<String, Integer> entry : stock.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue() + " Stück");
}
}
}
// Bestellmenge verringern (z.B. beim Bestellen) // Lädt den Bestand aus der Datei
public void useIngredients(Map<String, Integer> usedIngredients) { public void loadStockFromFile() {
for (Map.Entry<String, Integer> entry : usedIngredients.entrySet()) { stock.clear();
String ingredientName = entry.getKey(); try (BufferedReader reader = new BufferedReader(new FileReader(STOCK_FILE))) {
int amountUsed = entry.getValue(); String line;
if (stock.containsKey(ingredientName)) { while ((line = reader.readLine()) != null) {
int currentStock = stock.get(ingredientName); String[] parts = line.split(":");
if (currentStock >= amountUsed) { if (parts.length == 2) {
stock.put(ingredientName, currentStock - amountUsed); String ingredientName = parts[0];
} else { int quantity = Integer.parseInt(parts[1]);
System.out.println("Nicht genügend Bestand für " + ingredientName); stock.put(ingredientName, quantity);
} }
} else { }
System.out.println("Zutat " + ingredientName + " existiert nicht im Bestand."); } 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 // Speichert den aktuellen Bestand in die Datei
public void addIngredients(String ingredientName, int amount, FinancialManager financialManager) { public void saveStockToFile() {
if (stock.containsKey(ingredientName)) { try (BufferedWriter writer = new BufferedWriter(new FileWriter(STOCK_FILE))) {
stock.put(ingredientName, stock.get(ingredientName) + amount); for (Map.Entry<String, Integer> entry : stock.entrySet()) {
} else { writer.write(entry.getKey() + ":" + entry.getValue());
stock.put(ingredientName, amount); 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) // Zeigt den aktuellen Bestand an
double pricePerUnit = getPriceForIngredient(ingredientName); public void viewStock() {
double totalCost = pricePerUnit * amount; if (stock.isEmpty()) {
System.out.println("Der Bestand ist leer.");
} else {
System.out.println("\n--- Aktueller Bestand ---");
for (Map.Entry<String, Integer> entry : stock.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue() + " Stück");
}
}
}
// Finanzmanager über die Ausgaben informieren // Bestellmenge verringern (z.B. beim Bestellen)
financialManager.addExpense(totalCost); public void useIngredients(Map<String, Integer> usedIngredients) {
} for (Map.Entry<String, Integer> 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) // Bestand erweitern und berechnen, ob Ausgaben hinzuzufügen sind
private double getPriceForIngredient(String ingredientName) { public void addIngredients(String productName, int amountToAdd, FinancialManager financialManager) {
switch (ingredientName.toLowerCase()) { double ingredientCost = 1.0; // Beispielhafter Preis für Zutaten (z.B. 1 Euro pro Stück)
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<String, Integer> ingredients) {
for (Map.Entry<String, Integer> entry : ingredients.entrySet()) {
String ingredientName = entry.getKey();
int requiredAmount = entry.getValue();
if (!stock.containsKey(ingredientName) || stock.get(ingredientName) < requiredAmount) { // Addiere die Zutaten zum Bestand
System.out.println("Nicht genügend Bestand für: " + ingredientName); stock.put(productName, stock.getOrDefault(productName, 0) + amountToAdd);
return false; // Wenn eine Zutat nicht genug vorhanden ist, gibt die Methode false zurück
} // Berechne die Ausgaben für die Erweiterung des Bestands
} double totalCost = ingredientCost * amountToAdd;
return true; // Alle Zutaten sind verfügbar
} // 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<String, Integer> ingredients) {
for (Map.Entry<String, Integer> 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 void overwriteStock(String productName, int newAmount) {
public Map<String, Integer> getStock() { if (stock.containsKey(productName)) {
return stock; 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 // Getter für den Bestand
public void setStock(Map<String, Integer> stock) { public Map<String, Integer> getStock() {
this.stock = stock; return stock;
} }
// Setter für den Bestand
public void setStock(Map<String, Integer> stock) {
this.stock = stock;
}
} }

View File

@ -1,17 +1,18 @@
import java.util.*; import java.util.*;
class Menu { public class Menu {
public List<Dish> dishes = new ArrayList<>(); public List<Dish> dishes = new ArrayList<>();
public List<Dish> availableDishes = new ArrayList<>(); public List<Dish> availableDishes = new ArrayList<>();
public Menu() { public Menu() {
dishes.add(new Dish("Cheeseburger", Map.of("Brot", 1, "Fleisch", 1, "Käse", 1))); 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))); 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))); 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))); dishes.add(new Dish("Ramen", Map.of("Soße", 1, "Salat", 1, "Tomaten", 1, "Nudeln", 30), 7.0));
} }
public void displayMenu(Inventory inventory) { public void displayMenu(Inventory inventory) {
System.out.println("Verfügbares Menü:"); System.out.println("Verfügbares Menü:");
for (Dish dish : dishes) { for (Dish dish : dishes) {

View File

@ -1,251 +1,297 @@
import java.io.BufferedReader; import java.util.Scanner;
import java.io.BufferedWriter; import java.util.Map;
import java.io.FileNotFoundException; import java.util.HashMap;
import java.io.FileReader; import java.util.List;
import java.io.FileWriter; import java.io.*;
import java.io.IOException;
import java.util.*;
class SystemController { public class SystemController {
private Scanner scanner = new Scanner(System.in); private Scanner scanner = new Scanner(System.in);
private Map<String, User> users = new HashMap<>(); private Map<String, User> users = new HashMap<>();
private final String USERS_FILE = "src/users.txt"; private final String USERS_FILE = "src/users.txt";
private static Inventory inventory = new Inventory(); // Bestand public static Inventory inventory;
private Menu menu = new Menu(); // Menü private Menu menu = new Menu();
private FinancialManager financialManager = new FinancialManager(); // Finanzmanager private FinancialManager financialManager = new FinancialManager(); // Instanziierung des FinancialManagers
public SystemController() { public SystemController() {
loadUsersFromFile(); // Benutzer aus Datei laden loadUsersFromFile();
} inventory = new Inventory(financialManager); // Übergabe des FinancialManagers an Inventory
}
public void startSystem() { public void startSystem() {
System.out.println("Willkommen im Restaurant Management System!"); System.out.println("Willkommen im Restaurant Management System!");
System.out.println("Bitte loggen Sie sich ein: "); System.out.println("Bitte loggen Sie sich ein: ");
System.out.print("Username ---------------> "); System.out.print("Username ---------------> ");
String username = scanner.nextLine(); String username = scanner.nextLine();
System.out.print("Passwort ---------------> "); System.out.print("Passwort ---------------> ");
String password = scanner.nextLine(); String password = scanner.nextLine();
User user = authenticate(username, password); User user = authenticate(username, password);
if (user != null) { if (user != null) {
displayMainMenu(user); // Hauptmenü anzeigen displayMainMenu(user);
} else { } else {
System.out.println("Ungültige Anmeldedaten."); System.out.println("Ungültige Anmeldedaten.");
} }
} }
private User authenticate(String username, String password) { private User authenticate(String username, String password) {
if (users.containsKey(username) && users.get(username).password.equals(password)) { if (users.containsKey(username) && users.get(username).password.equals(password)) {
return users.get(username); return users.get(username);
} }
return null; return null;
} }
private void displayMainMenu(User user) { public void displayMainMenu(User user) {
boolean running = true; boolean running = true;
while (running) { while (running) {
inventory.loadStockFromFile(); inventory.loadStockFromFile();
System.out.println("\n--- Hauptmenü ---"); 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");
System.out.print("Bitte wähle eine Option: "); if (user.role == Role.SERVICE) {
int choice = scanner.nextInt(); System.out.println("1. Bestellung aufnehmen");
scanner.nextLine(); // Eingabepuffer leeren 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) { System.out.print("Bitte wähle eine Option: ");
case 1 -> manageInventory(); // Bestand verwalten int choice = scanner.nextInt();
case 2 -> { scanner.nextLine(); // Eingabepuffer leeren
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.");
}
}
}
private void manageInventory() { switch (choice) {
boolean managingInventory = true; case 1 -> {
while (managingInventory) { if (user.role == Role.SERVICE) {
inventory.loadStockFromFile(); menu.displayMenu(inventory);
System.out.println("\n--- Bestand verwalten ---"); Bestellsystem.erstelleBestellung(); // Bestellung aufnehmen
System.out.println("1. Bestand ansehen"); updateFinancialReport(menu.getAvailableDishes()); // Finanzbericht aktualisieren
System.out.println("2. Bestand ändern"); } else {
System.out.println("3. Bestand erweitern"); manageInventory();
System.out.println("4. Zurück zum Hauptmenü"); }
}
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: "); // Finanzbericht aktualisieren:
int choice = scanner.nextInt(); private void updateFinancialReport(List<Dish> orderedDishes) {
scanner.nextLine(); // Eingabepuffer leeren double totalAmount = 0;
switch (choice) { for (Dish dish : orderedDishes) {
case 1 -> inventory.viewStock(); // Bestand ansehen totalAmount += dish.getPrice(); // Gesamtbetrag basierend auf den Preisen der bestellten Gerichte
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.");
}
}
}
private void manageOrders() { // Einnahmen im Finanzmanager hinzufügen
boolean managingOrders = true; financialManager.addRevenue(totalAmount);
while (managingOrders) {
System.out.println("\n--- Bestellungen verwalten ---");
System.out.println("1. Bestellung aufnehmen");
System.out.println("2. Alle Bestellungen anzeigen");
System.out.println("3. Bestellungen löschen");
System.out.println("4. Zurück zum Hauptmenü");
System.out.print("Bitte wähle eine Option: "); System.out.println("Gesamtkosten der Bestellung: " + totalAmount + " €");
int choice = scanner.nextInt(); }
scanner.nextLine(); // Eingabepuffer leeren
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() { private void manageInventory() {
boolean managingFinances = true; boolean managingInventory = true;
while (managingFinances) { while (managingInventory) {
System.out.println("\n--- Finanz- und Umsatzverwaltung ---"); inventory.loadStockFromFile();
System.out.println("1. Einnahmen und Ausgaben anzeigen"); System.out.println("\n--- Bestand verwalten ---");
System.out.println("2. Umsatzübersicht (Täglich, Wöchentlich, Monatlich)"); System.out.println("1. Bestand ansehen");
System.out.println("3. Zurück zum Hauptmenü"); 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: "); System.out.print("Bitte wähle eine Option: ");
int choice = scanner.nextInt(); int choice = scanner.nextInt();
scanner.nextLine(); // Eingabepuffer leeren scanner.nextLine(); // Eingabepuffer leeren
switch (choice) { switch (choice) {
case 1 -> financialManager.showFinancialReport("heute"); // Finanzbericht anzeigen case 1 -> {
case 2 -> { inventory.viewStock(); // Bestand ansehen
System.out.println("Bitte wählen Sie den Zeitraum:"); }
System.out.println("1. Täglich"); case 2 -> {
System.out.println("2. Wöchentlich"); System.out.println("Welchen Bestand möchten Sie ändern?");
System.out.println("3. Monatlich"); String name = scanner.nextLine();
int periodChoice = scanner.nextInt(); System.out.println("Neue Anzahl ---->");
scanner.nextLine(); // Eingabepuffer leeren 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 private void manageOrders() {
case 2 -> financialManager.showFinancialReport("wöchentlich"); // Wöchentlicher Bericht boolean managingOrders = true;
case 3 -> financialManager.showFinancialReport("monatlich"); // Monatlicher Bericht while (managingOrders) {
default -> System.out.println("Ungültige Auswahl."); System.out.println("\n--- Bestellungen verwalten ---");
} System.out.println("1. Bestellung aufnehmen");
} System.out.println("2. Alle Bestellungen anzeigen");
case 3 -> managingFinances = false; System.out.println("3. Bestellungen löschen");
default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); System.out.println("4. Zurück zum Hauptmenü");
}
}
}
private void createUser() { System.out.print("Bitte wähle eine Option: ");
String username = ""; int choice = scanner.nextInt();
String password = ""; scanner.nextLine(); // Eingabepuffer leeren
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.");
}
try { switch (choice) {
User newUser = new User(username, password, role); case 1 -> {
users.put(username, newUser); menu.displayMenu(inventory); // Menü anzeigen
saveUserToFile(newUser); Bestellsystem.erstelleBestellung(); // Bestellung aufnehmen
System.out.println("Nutzer erfolgreich erstellt."); updateFinancialReport(menu.getAvailableDishes()); // Finanzbericht aktualisieren
} catch (NullPointerException e) { }
System.out.println("Fehler beim Erstellen des Nutzers."); 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) { private void createUser() {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(USERS_FILE, true))) { String username = "";
writer.write(user.username + ":" + user.password + ":" + user.role.name()); String password = "";
writer.newLine(); Role role = null;
} catch (IOException e) { try {
System.out.println("Fehler beim Speichern des Nutzers: " + e.getMessage()); 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);
}
} }

View File

@ -1 +1,7 @@
Salat:160 Tomaten:100
Salat:260
Käse:100
Brot:100
Soße:100
Fleisch:200
Nudeln:150

View File

@ -1,3 +1,4 @@
Dimitry:1234:MANAGER Dimitry:1234:MANAGER
Abbas:1234:SERVICE Abbas:1234:SERVICE
Ananas Kopf:Bananenbieger:KITCHEN Ananas Kopf:Bananenbieger:KITCHEN
Arim:1234:MANAGER