Fehler beim Finanzmanagment behoben

master
Aliuy 2025-01-12 15:51:55 +01:00
parent 4afcd67145
commit 2572fccf7d
11 changed files with 835 additions and 760 deletions

View File

@ -12,7 +12,6 @@ import java.util.List;
import java.util.HashMap; import java.util.HashMap;
public class Bestellsystem { public class Bestellsystem {
private static List<Bestellung> bestellungen = new ArrayList<>(); private static List<Bestellung> bestellungen = new ArrayList<>();
private static Scanner scanner = new Scanner(System.in); private static Scanner scanner = new Scanner(System.in);
private static Menu menu = new Menu(); private static Menu menu = new Menu();
@ -24,106 +23,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());
// 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(",");
//
// 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() { private static void aktualisiereDatei() {
ladeUndZeigeBestellungen(); try (FileWriter writer = new FileWriter(FILE_PATH, false)) {
for (Bestellung bestellung : bestellungen) {
System.out.print("Gib die ID der zu löschenden Bestellung ein: "); writer.write(bestellung.toFileFormat());
String id = scanner.nextLine(); }
} catch (IOException e) {
Bestellung zuLoeschen = null; System.out.println("Fehler beim Aktualisieren der Datei: " + e.getMessage());
}
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());
}
}
public static void speichereBestellung(Bestellung bestellung) { public static void speichereBestellung(Bestellung bestellung) {
try { try {

View File

@ -47,10 +47,11 @@ public class Bestellung {
String[] parts = fileLine.split(";"); String[] parts = fileLine.split(";");
if (parts.length < 3) { if (parts.length < 3) {
throw new IllegalArgumentException("Ungültiges Dateiformat: " + fileLine); throw new IllegalArgumentException("Ungültiges Dateiformat: " + fileLine);
} }
String id = parts[0].trim(); String id = parts[0].trim();
String tischNummer = parts[1].trim(); String tischNummer = parts[1].trim();

View File

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

View File

@ -1,13 +1,17 @@
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() {
return name; return name;
} }
@ -15,4 +19,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,144 +1,115 @@
import java.io.*; import java.io.*;
import java.text.SimpleDateFormat; import java.time.LocalDate;
import java.util.*; import java.util.HashMap;
import java.util.Map;
class FinancialManager { public class FinancialManager {
private static final String TRANSACTION_FILE = "src/transactions.txt"; // Datei für Transaktionen (Einnahmen und Ausgaben) private double totalRevenue;
private List<Transaction> transactions = new ArrayList<>(); private double totalExpenses;
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<>();
public FinancialManager() { private final String FINANCIAL_REPORT_FILE = "src/financial_report.txt";
loadTransactionsFromFile();
}
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);
}
private void saveTransactionToFile(Transaction transaction) { public void addRevenue(double amount) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(TRANSACTION_FILE, true))) { this.totalRevenue += amount;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); LocalDate today = LocalDate.now();
String transactionLine = dateFormat.format(transaction.getDate()) + ";" + transaction.getAmount() + ";" + transaction.getDescription() + ";" + (transaction.isIncome() ? "Income" : "Expense"); dailyRevenue.put(today, dailyRevenue.getOrDefault(today, 0.0) + amount);
writer.write(transactionLine);
writer.newLine();
} catch (IOException e) {
System.out.println("Fehler beim Speichern der Transaktion: " + e.getMessage());
}
}
private void loadTransactionsFromFile() { // Einnahmen für die Woche und den Monat aktualisieren
try (BufferedReader reader = new BufferedReader(new FileReader(TRANSACTION_FILE))) { LocalDate startOfWeek = today.minusDays(today.getDayOfWeek().getValue() - 1);
String line; weeklyRevenue.put(startOfWeek, weeklyRevenue.getOrDefault(startOfWeek, 0.0) + amount);
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());
}
}
public void showFinancialReport(String period) { LocalDate startOfMonth = today.withDayOfMonth(1);
double totalIncome = 0; monthlyRevenue.put(startOfMonth, monthlyRevenue.getOrDefault(startOfMonth, 0.0) + amount);
double totalExpense = 0;
Date startDate = null;
Date endDate = new Date();
switch (period.toLowerCase()) { saveFinancialReport(); // Finanzdaten in die Datei speichern
case "daily": }
startDate = getStartOfDay();
break;
case "weekly":
startDate = getStartOfWeek();
break;
case "monthly":
startDate = getStartOfMonth();
break;
default:
System.out.println("Ungültige Zeitraumoption!");
return;
}
// Berechnen der Einnahmen und Ausgaben im angegebenen Zeitraum // Methode zur Hinzufügung von Ausgaben
for (Transaction transaction : transactions) { public void addExpense(double amount) {
if (!transaction.getDate().before(startDate) && !transaction.getDate().after(endDate)) { this.totalExpenses += amount;
if (transaction.isIncome()) { LocalDate today = LocalDate.now();
totalIncome += transaction.getAmount(); dailyExpenses.put(today, dailyExpenses.getOrDefault(today, 0.0) + amount);
} else {
totalExpense += transaction.getAmount();
}
}
}
System.out.println("\n--- Finanzbericht für " + period + " ---"); // Ausgaben für die Woche und den Monat aktualisieren
System.out.println("Gesamte Einnahmen: " + totalIncome + " EUR"); LocalDate startOfWeek = today.minusDays(today.getDayOfWeek().getValue() - 1);
System.out.println("Gesamte Ausgaben: " + totalExpense + " EUR"); weeklyExpenses.put(startOfWeek, weeklyExpenses.getOrDefault(startOfWeek, 0.0) + amount);
System.out.println("Nettogewinn: " + (totalIncome - totalExpense) + " EUR");
}
private Date getStartOfDay() { LocalDate startOfMonth = today.withDayOfMonth(1);
Calendar cal = Calendar.getInstance(); monthlyExpenses.put(startOfMonth, monthlyExpenses.getOrDefault(startOfMonth, 0.0) + amount);
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();
}
private Date getStartOfWeek() { saveFinancialReport(); // Finanzdaten in einer txt Datei speichern
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();
}
private Date getStartOfMonth() { public double getRevenueForPeriod(String period) {
Calendar cal = Calendar.getInstance(); LocalDate today = LocalDate.now();
cal.set(Calendar.DAY_OF_MONTH, 1); switch (period.toLowerCase()) {
cal.set(Calendar.HOUR_OF_DAY, 0); case "daily":
cal.set(Calendar.MINUTE, 0); return dailyRevenue.getOrDefault(today, 0.0);
cal.set(Calendar.SECOND, 0); case "weekly":
cal.set(Calendar.MILLISECOND, 0); LocalDate startOfWeek = today.minusDays(today.getDayOfWeek().getValue() - 1);
return cal.getTime(); return weeklyRevenue.getOrDefault(startOfWeek, 0.0);
} case "monthly":
} LocalDate startOfMonth = today.withDayOfMonth(1);
return monthlyRevenue.getOrDefault(startOfMonth, 0.0);
class Transaction { default:
private double amount; return 0.0;
private String description; }
private boolean isIncome; }
private Date date;
public double getExpensesForPeriod(String period) {
public Transaction(double amount, String description, boolean isIncome, Date date) { LocalDate today = LocalDate.now();
this.amount = amount; switch (period.toLowerCase()) {
this.description = description; case "daily":
this.isIncome = isIncome; return dailyExpenses.getOrDefault(today, 0.0);
this.date = date; case "weekly":
} LocalDate startOfWeek = today.minusDays(today.getDayOfWeek().getValue() - 1);
return weeklyExpenses.getOrDefault(startOfWeek, 0.0);
public double getAmount() { case "monthly":
return amount; LocalDate startOfMonth = today.withDayOfMonth(1);
} return monthlyExpenses.getOrDefault(startOfMonth, 0.0);
default:
public String getDescription() { return 0.0;
return description; }
} }
public boolean isIncome() { // Getter für Gesamtumsatz
return isIncome; public double getTotalRevenue() {
} return totalRevenue;
}
public Date getDate() {
return date; // Getter für Gesamtausgaben
} public double getTotalExpenses() {
return totalExpenses;
}
// Berechnung des Nettogewinns
public double getNetProfit() {
return totalRevenue - totalExpenses;
}
// 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());
}
}
} }

View File

@ -1,32 +1,37 @@
import java.util.*;
import java.io.*; import java.io.*;
import java.util.*;
class Inventory { public class Inventory {
private Map<String, Integer> stock;
private final String STOCK_FILE = "src/stock.txt";
private Map<String, Integer> 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() { public void loadStockFromFile() {
stock = new HashMap<>(); stock.clear();
try (BufferedReader reader = new BufferedReader(new FileReader(STOCK_FILE))) { try (BufferedReader reader = new BufferedReader(new FileReader(STOCK_FILE))) {
String line; String line;
while ((line = reader.readLine()) != null) { while ((line = reader.readLine()) != null) {
String[] parts = line.split(","); String[] parts = line.split(",");
if (parts.length == 2) {
String name = parts[0]; String ingredientName = parts[0];
Integer count = Integer.parseInt(parts[1]); int quantity = Integer.parseInt(parts[1]);
stock.put(name, count); stock.put(ingredientName, quantity);
}
} }
} catch (FileNotFoundException e) { } 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) { } 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() { public void saveStockToFile() {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(STOCK_FILE))) { try (BufferedWriter writer = new BufferedWriter(new FileWriter(STOCK_FILE))) {
for (Map.Entry<String, Integer> entry : stock.entrySet()) { for (Map.Entry<String, Integer> entry : stock.entrySet()) {
@ -34,96 +39,98 @@ class Inventory {
writer.newLine(); writer.newLine();
} }
} catch (IOException e) { } 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() { public void viewStock() {
System.out.println("Aktueller Bestand:"); if (stock.isEmpty()) {
for (Map.Entry<String, Integer> entry : stock.entrySet()) { System.out.println("Der Bestand ist leer.");
System.out.println(entry.getKey() + ": " + entry.getValue()); } else {
System.out.println("\n--- Aktueller Bestand ---");
for (Map.Entry<String, Integer> entry : stock.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue() + " Stück");
}
} }
} }
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.");
}
}
}
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<String, Integer> ingredients) { public boolean showIngredientsAvailable(Map<String, Integer> ingredients) {
for (Map.Entry<String, Integer> entry : ingredients.entrySet()) { for (Map.Entry<String, Integer> entry : ingredients.entrySet()) {
String ingredient = entry.getKey(); 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 false;
} }
} }
return true; return true;
} }
public void useIngredients(Map<String, Integer> ingredients) { public void overwriteStock(String productName, int newAmount) {
if (stock.containsKey(productName)) {
for (Map.Entry<String, Integer> entry : ingredients.entrySet()) { stock.put(productName, newAmount);
stock.put(entry.getKey(), stock.get(entry.getKey()) - entry.getValue()); System.out.println("Der Bestand für " + productName + " wurde auf " + newAmount + " Stück geändert.");
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.");
} else { } 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 // Getter für den Bestand
public int totalStock() { public Map<String, Integer> getStock() {
int total = 0; return stock;
for (int amount : stock.values()) {
total += amount;
}
return total;
} }
// Neue Methode: Warnungen bei niedrigem Bestand // Setter für den Bestand
public void lowStockWarning(int threshold) { public void setStock(Map<String, Integer> stock) {
System.out.println("Warnung: Niedriger Bestand bei folgenden Zutaten:"); this.stock = stock;
for (Map.Entry<String, Integer> 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);
}
} }
} }

View File

@ -1,16 +1,17 @@
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), 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));
}
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 void displayMenu(Inventory inventory) { public void displayMenu(Inventory inventory) {
System.out.println("Verfügbares Menü:"); System.out.println("Verfügbares Menü:");

View File

@ -2,466 +2,555 @@ import java.util.*;
import java.io.*; import java.io.*;
class SystemController { 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";
public static Inventory inventory = new Inventory(); public static Inventory inventory;
private Menu menu = new Menu(); private Menu menu = new Menu();
private FinancialManager financialManager = new FinancialManager(); private FinancialManager financialManager = new FinancialManager();
private ReservationManager reservationManager = new ReservationManager(); private ReservationManager reservationManager = new ReservationManager();
private List<Shift> shifts = new ArrayList<>(); private List<Shift> shifts = new ArrayList<>();
private List<Absence> absences = new ArrayList<>(); private List<Absence> absences = new ArrayList<>();
private List<Feedback> feedbacks = new ArrayList<>(); private List<Feedback> feedbacks = new ArrayList<>();
private final String SHIFT_FILE = "src/shifts.txt"; private final String SHIFT_FILE = "src/shifts.txt";
private final String ABSENCE_FILE = "src/absences.txt"; private final String ABSENCE_FILE = "src/absences.txt";
private final String FEEDBACK_FILE = "src/feedback.txt"; private final String FEEDBACK_FILE = "src/feedback.txt";
public SystemController() { public SystemController() {
loadUsersFromFile(); loadUsersFromFile();
loadShiftsFromFile(); loadShiftsFromFile();
loadAbsencesFromFile(); loadAbsencesFromFile();
loadFeedbacksFromFile(); loadFeedbacksFromFile();
} inventory = new Inventory(financialManager);
}
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); 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;
} }
public void displayMainMenu(User user) { public void displayMainMenu(User user) {
boolean running = true; boolean running = true;
while (running) { while (running) {
System.out.println("\n--- Hauptmenü ---"); System.out.println("\n--- Hauptmenü ---");
System.out.println("1. Bestand verwalten"); System.out.println("1. Bestand verwalten");
System.out.println("2. Neuer Nutzer erstellen"); System.out.println("2. Neuer Nutzer erstellen");
System.out.println("3. Menü anzeigen"); System.out.println("3. Menü anzeigen");
System.out.println("4. Bestellungen verwalten"); System.out.println("4. Bestellungen verwalten");
System.out.println("5. Finanzbericht anzeigen"); System.out.println("5. Finanzbericht anzeigen");
System.out.println("6. Reservierungen verwalten"); System.out.println("6. Reservierungen verwalten");
System.out.println("7. Mitarbeiter verwalten"); System.out.println("7. Mitarbeiter verwalten");
System.out.println("8. Beenden"); System.out.println("8. Beenden");
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(); scanner.nextLine();
switch (choice) { switch (choice) {
case 1 -> manageInventory(); case 1 -> manageInventory();
case 2 -> { if (user.role == Role.MANAGER) { createUser(); } else { System.out.println("Keine Rechte, um neue Nutzer zu erstellen."); } } case 2 -> {
case 3 -> menu.displayMenu(inventory); if (user.role == Role.MANAGER) {
case 4 -> manageOrders(); createUser();
case 5 -> showFinancialReports(); } else {
case 6 -> manageReservations(user); System.out.println("Keine Rechte, um neue Nutzer zu erstellen.");
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."); 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 manageReservations(User user) { private void updateFinancialReport(List<Dish> orderedDishes) {
boolean managingReservations = true; // Prüfen, ob die Liste der bestellten Gerichte leer ist
while (managingReservations) { if (orderedDishes.isEmpty()) {
System.out.println("\n--- Reservierungen verwalten ---"); System.out.println("Keine Bestellung aufgegeben. Kein Preis berechnet.");
System.out.println("1. Reservierung erstellen"); return; // Wenn keine Gerichte bestellt wurden, wird der Vorgang abgebrochen
System.out.println("2. Reservierung bearbeiten"); }
System.out.println("3. Reservierung stornieren");
System.out.println("4. Reservierungen anzeigen");
System.out.println("5. Zurück zum Hauptmenü");
System.out.print("Bitte wähle eine Option: ");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 1 -> { if (user.role == Role.MANAGER || user.role == Role.SERVICE) { createReservation(); } else { System.out.println("Keine Rechte, um neue Reservierungen zu erstellen."); } }
case 2 -> { if (user.role == Role.MANAGER || user.role == Role.SERVICE) { editReservation(); } else { System.out.println("Keine Rechte, um Reservierungen zu bearbeiten."); } }
case 3 -> { if (user.role == Role.MANAGER || user.role == Role.SERVICE) { cancelReservation(); } else { System.out.println("Keine Rechte, um Reservierungen zu stornieren."); } }
case 4 -> reservationManager.displayTableOverview();
case 5 -> managingReservations = false;
default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut.");
}
}
}
private void createReservation() { double totalAmount = 0;
System.out.print("Tischnummer: ");
int tableNumber = scanner.nextInt();
scanner.nextLine();
System.out.print("Kundenname: ");
String customerName = scanner.nextLine();
reservationManager.createReservation(tableNumber, customerName);
}
private void editReservation() { // Berechnung des Gesamtbetrags für die bestellten Gerichte
System.out.print("Tischnummer der Reservierung: "); for (Dish dish : orderedDishes) {
int tableNumber = scanner.nextInt(); totalAmount += dish.getPrice(); // Gesamtbetrag basierend auf den Preisen der bestellten Gerichte
scanner.nextLine(); }
System.out.print("Neuer Kundenname: ");
String newCustomerName = scanner.nextLine();
reservationManager.editReservation(tableNumber, newCustomerName);
}
private void cancelReservation() { // Einnahmen im Finanzmanager hinzufügen
System.out.print("Tischnummer der Reservierung: "); financialManager.addRevenue(totalAmount);
int tableNumber = scanner.nextInt();
reservationManager.cancelReservation(tableNumber);
}
private void manageInventory() { System.out.println("Gesamtkosten der Bestellung: " + totalAmount + " €");
boolean managingInventory = true; }
while (managingInventory) {
inventory.loadStockFromFile();
System.out.println("\n--- Bestand verwalten ---");
System.out.println("1. Bestand ansehen");
System.out.println("2. Bestand ändern");
System.out.println("3. Bestand erweitern");
System.out.println("4. Zurück zum Hauptmenü");
System.out.print("Bitte wähle eine Option: "); private void manageReservations(User user) {
int choice = scanner.nextInt(); boolean managingReservations = true;
scanner.nextLine(); // Eingabepuffer leeren 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) { private void createReservation() {
case 1 -> inventory.viewStock(); // Bestand ansehen System.out.print("Tischnummer: ");
case 2 -> { int tableNumber = scanner.nextInt();
System.out.println("Welchen Bestand möchten Sie ändern?"); scanner.nextLine();
String name = scanner.nextLine(); System.out.print("Kundenname: ");
System.out.println("Neue Anzahl ---->"); String customerName = scanner.nextLine();
try { reservationManager.createReservation(tableNumber, customerName);
int anzahl = scanner.nextInt(); }
inventory.overwriteStock(name, anzahl); // Bestellungen im Speicher anzeigen
inventory.saveStockToFile(); // Echtzeitspeicherung der Daten
} catch (IllegalArgumentException e) {
System.out.println("Fehler! Überprüfen Sie Ihre Eingabe");
}
}
case 3 -> {
System.out.println("Bestand wird erweitert.....");
System.out.println("Name des Produkts: ");
String name = scanner.nextLine();
System.out.println("Anzahl :");
try {
int anzahl = scanner.nextInt();
inventory.addIngredients(name, anzahl); // Bestellungen im Speicher anzeigen
inventory.saveStockToFile(); // Echtzeitspeicherung der Daten
} catch (IllegalArgumentException e) {
System.out.println("Fehler! Überprüfen Sie Ihre Eingabe");
}
}
case 4 -> managingInventory = false;
default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut.");
}
}
}
private void manageOrders() { private void editReservation() {
boolean managingOrders = true; System.out.print("Tischnummer der Reservierung: ");
while (managingOrders) { int tableNumber = scanner.nextInt();
System.out.println("\n--- Bestellungen verwalten ---"); scanner.nextLine();
System.out.println("1. Bestellung aufnehmen"); System.out.print("Neuer Kundenname: ");
System.out.println("2. Alle Bestellungen anzeigen"); String newCustomerName = scanner.nextLine();
System.out.println("3. Bestellungen löschen"); reservationManager.editReservation(tableNumber, newCustomerName);
System.out.println("4. Zurück zum Hauptmenü"); }
System.out.print("Bitte wähle eine Option: "); private void cancelReservation() {
int choice = scanner.nextInt(); System.out.print("Tischnummer der Reservierung: ");
scanner.nextLine(); // Eingabepuffer leeren int tableNumber = scanner.nextInt();
reservationManager.cancelReservation(tableNumber);
}
switch (choice) { private void manageInventory() {
case 1 -> { boolean managingInventory = true;
menu.displayMenu(inventory); while (managingInventory) {
Bestellsystem.erstelleBestellung(); // Neue Bestellung erstellen inventory.loadStockFromFile();
} System.out.println("\n--- Bestand verwalten ---");
case 2 -> { System.out.println("1. Bestand ansehen");
Bestellsystem.ladeUndZeigeBestellungen(); // Bestellungen aus Datei anzeigen System.out.println("2. Bestand ändern");
} System.out.println("3. Bestand erweitern");
case 3 -> { System.out.println("4. Zurück zum Hauptmenü");
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) { System.out.print("Bitte wähle eine Option: ");
boolean managingEmployees = true; int choice = scanner.nextInt();
while (managingEmployees) { scanner.nextLine(); // Eingabepuffer leeren
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
switch (choice) { switch (choice) {
case 1 -> showShiftPlan(user.username); // Schichtplan für den eingeloggten Mitarbeiter anzeigen case 1 -> inventory.viewStock(); // Bestand ansehen
case 2 -> { case 2 -> {
if (user.role == Role.MANAGER) { System.out.println("Welchen Bestand möchten Sie ändern?");
createAbsence(user.username); // Abwesenheit für Mitarbeiter erstellen String name = scanner.nextLine();
} else { System.out.println("Neue Anzahl ---->");
System.out.println("Keine Rechte, um neue Nutzer zu erstellen."); try {
} int anzahl = scanner.nextInt();
} inventory.overwriteStock(name, anzahl); // Bestellungen im Speicher anzeigen
case 3 -> { inventory.saveStockToFile(); // Echtzeitspeicherung der Daten
if (user.role == Role.MANAGER) { } catch (IllegalArgumentException e) {
showAbsences(); // Abwesenheiten zeigen System.out.println("Fehler! Überprüfen Sie Ihre Eingabe");
} else { }
System.out.println("Keine Rechte, um neue Nutzer zu erstellen."); }
} case 3 -> {
} System.out.println("Bestand wird erweitert.....");
case 4 -> giveFeedback(); // Feedback geben System.out.println("Name des Produkts: ");
case 5 -> { String name = scanner.nextLine();
if (user.role == Role.MANAGER) { System.out.println("Anzahl :");
showFeedback(); // Feedbacks zeigen try {
} else { int anzahl = scanner.nextInt();
System.out.println("Keine Rechte, um neue Nutzer zu erstellen."); inventory.addIngredients(name, anzahl, financialManager); // Bestellungen im Speicher anzeigen
} inventory.saveStockToFile(); // Echtzeitspeicherung der Daten
} } catch (IllegalArgumentException e) {
case 6 -> managingEmployees = false; // Zurück zum Hauptmenü System.out.println("Fehler! Überprüfen Sie Ihre Eingabe");
default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); }
} }
} case 4 -> managingInventory = false;
} default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut.");
}
}
}
private void createUser() { private void manageOrders() {
String username = ""; boolean managingOrders = true;
String password = ""; while (managingOrders) {
Role role = null; System.out.println("\n--- Bestellungen verwalten ---");
try { System.out.println("1. Bestellung aufnehmen");
System.out.println("\n--- Neuen Nutzer erstellen ---"); System.out.println("2. Alle Bestellungen anzeigen");
System.out.print("Benutzername: "); System.out.println("3. Bestellungen löschen");
username = scanner.nextLine(); System.out.println("4. Zurück zum Hauptmenü");
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 { System.out.print("Bitte wähle eine Option: ");
User newUser = new User(username, password, role); int choice = scanner.nextInt();
users.put(username, newUser); scanner.nextLine(); // Eingabepuffer leeren
saveUserToFile(newUser);
System.out.println("Nutzer erfolgreich erstellt."); switch (choice) {
} catch (NullPointerException c) { case 1 -> {
System.out.println("Fehler beim Erstellen eines Accounts."); menu.displayMenu(inventory);
} Bestellsystem.erstelleBestellung(); // Neue Bestellung erstellen
} }
case 2 -> {
Bestellsystem.ladeUndZeigeBestellungen(); // Bestellungen aus Datei anzeigen
}
case 3 -> {
Bestellsystem.loescheBestellung(); // Bestellungen aus Datei löschen
}
case 4 -> managingOrders = false;
default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut.");
}
}
}
private void loadUsersFromFile() { public void manageEmployees(User user) {
try (BufferedReader reader = new BufferedReader(new FileReader(USERS_FILE))) { boolean managingEmployees = true;
String line; while (managingEmployees) {
while ((line = reader.readLine()) != null) { System.out.println("\n--- Mitarbeiter verwalten ---");
String[] parts = line.split(":"); System.out.println("1. Schichtplan anzeigen");
if (parts.length == 3) { System.out.println("2. Abwesenheit eintragen");
String username = parts[0]; System.out.println("3. Abwesenheit anzeigen");
String password = parts[1]; System.out.println("4. Feedback geben");
Role role = Role.valueOf(parts[2].toUpperCase()); 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
users.put(username, new User(username, password, role)); switch (choice) {
} case 1 -> showShiftPlan(user.username); // Schichtplan für den eingeloggten Mitarbeiter anzeigen
} case 2 -> {
} catch (FileNotFoundException e) { if (user.role == Role.MANAGER) {
System.out.println("Benutzerdatenbank nicht gefunden. Standard-Manager wird erstellt."); createAbsence(user.username); // Abwesenheit für Mitarbeiter erstellen
createDefaultManager(); } else {
} catch (IOException e) { System.out.println("Keine Rechte, um neue Nutzer zu erstellen.");
System.out.println("Fehler beim Lesen der Benutzerdatenbank: " + e.getMessage()); }
} }
} 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.");
}
}
}
private void loadShiftsFromFile() { private void createUser() {
try (BufferedReader reader = new BufferedReader(new FileReader("src/shifts.txt"))) { String username = "";
String line; String password = "";
while ((line = reader.readLine()) != null) { Role role = null;
String[] parts = line.split(";"); try {
String username = parts[0]; System.out.println("\n--- Neuen Nutzer erstellen ---");
String shiftDate = parts[1]; System.out.print("Benutzername: ");
String shiftTime = parts[2]; 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.");
}
// Erstelle neuen Shift-Objekt und füge es der Liste hinzu try {
Shift shift = new Shift(username, shiftDate, shiftTime); User newUser = new User(username, password, role);
shifts.add(shift); users.put(username, newUser);
} saveUserToFile(newUser);
} catch (IOException e) {
System.out.println("Fehler beim Laden der Schichtpläne: " + e.getMessage());
}
}
private void loadAbsencesFromFile() { System.out.println("Nutzer erfolgreich erstellt.");
try (BufferedReader reader = new BufferedReader(new FileReader("src/absences.txt"))) { } catch (NullPointerException c) {
String line; System.out.println("Fehler beim Erstellen eines Accounts.");
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 private void loadUsersFromFile() {
Absence absence = new Absence(username, date, reason); try (BufferedReader reader = new BufferedReader(new FileReader(USERS_FILE))) {
absences.add(absence); String line;
} while ((line = reader.readLine()) != null) {
} catch (IOException e) { String[] parts = line.split(":");
System.out.println("Fehler beim Laden der Abwesenheiten: " + e.getMessage()); if (parts.length == 3) {
} String username = parts[0];
} String password = parts[1];
Role role = Role.valueOf(parts[2].toUpperCase());
private void loadFeedbacksFromFile() { users.put(username, new User(username, password, role));
try (BufferedReader reader = new BufferedReader(new FileReader("src/feedback.txt"))) { }
String line; }
while ((line = reader.readLine()) != null) { } catch (FileNotFoundException e) {
String[] parts = line.split(";"); System.out.println("Benutzerdatenbank nicht gefunden. Standard-Manager wird erstellt.");
String username = parts[0]; createDefaultManager();
String feedback = parts[1]; } catch (IOException e) {
System.out.println("Fehler beim Lesen der Benutzerdatenbank: " + e.getMessage());
}
}
// Erstelle neues Feedback-Objekt und füge es der Liste hinzu private void loadShiftsFromFile() {
Feedback feedbackObj = new Feedback(username, feedback); try (BufferedReader reader = new BufferedReader(new FileReader("src/shifts.txt"))) {
feedbacks.add(feedbackObj); String line;
} while ((line = reader.readLine()) != null) {
} catch (IOException e) { String[] parts = line.split(";");
System.out.println("Fehler beim Laden der Feedbacks: " + e.getMessage()); String username = parts[0];
} String shiftDate = parts[1];
} String shiftTime = parts[2];
public void showShiftPlan(String username) { // Erstelle neuen Shift-Objekt und füge es der Liste hinzu
System.out.println("\n--- Dein Schichtplan ---"); Shift shift = new Shift(username, shiftDate, shiftTime);
for (Shift shift : shifts) { shifts.add(shift);
if (shift.getUsername().equals(username)) { }
System.out.println(shift); } catch (IOException e) {
} System.out.println("Fehler beim Laden der Schichtpläne: " + e.getMessage());
} }
} }
public void createAbsence(String username) { private void loadAbsencesFromFile() {
System.out.println("Gib Den Namen des Mitarbeiters ein:"); try (BufferedReader reader = new BufferedReader(new FileReader("src/absences.txt"))) {
String name = scanner.nextLine(); String line;
System.out.print("Gib das Datum der Abwesenheit ein: "); while ((line = reader.readLine()) != null) {
String date = scanner.nextLine(); String[] parts = line.split(";");
System.out.print("Gib den Grund der Abwesenheit ein: "); String username = parts[0];
String reason = scanner.nextLine(); String date = parts[1];
String reason = parts[2];
Absence absence = new Absence(name, date, reason); // Erstelle neues Absence-Objekt und füge es der Liste hinzu
absences.add(absence); Absence absence = new Absence(username, date, reason);
saveAbsencesToFile(); absences.add(absence);
System.out.println("Abwesenheit wurde erfolgreich eingetragen."); }
} } catch (IOException e) {
System.out.println("Fehler beim Laden der Abwesenheiten: " + e.getMessage());
}
}
public void saveShiftToFile(String shift) { private void loadFeedbacksFromFile() {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("src/shifts.txt", true))) { try (BufferedReader reader = new BufferedReader(new FileReader("src/feedback.txt"))) {
writer.write(shift); // Schicht als String speichern String line;
writer.newLine(); while ((line = reader.readLine()) != null) {
} catch (IOException e) { String[] parts = line.split(";");
System.out.println("Fehler beim Speichern der Schicht: " + e.getMessage()); String username = parts[0];
} String feedback = parts[1];
}
public void showAbsences() { // Erstelle neues Feedback-Objekt und füge es der Liste hinzu
System.out.println("\n--- Abwesenheiten ---"); Feedback feedbackObj = new Feedback(username, feedback);
for (Absence absence : absences) { feedbacks.add(feedbackObj);
System.out.println(absence); }
} } catch (IOException e) {
} System.out.println("Fehler beim Laden der Feedbacks: " + e.getMessage());
}
}
public void giveFeedback() { public void showShiftPlan(String username) {
System.out.print("Gib den Benutzernamen des Mitarbeiters ein: "); System.out.println("\n--- Dein Schichtplan ---");
String employeeUsername = scanner.nextLine(); for (Shift shift : shifts) {
System.out.print("Gib das Feedback ein: "); if (shift.getUsername().equals(username)) {
String feedbackText = scanner.nextLine(); System.out.println(shift);
}
}
}
Feedback feedback = new Feedback(employeeUsername, feedbackText); public void createAbsence(String username) {
feedbacks.add(feedback); System.out.println("Gib Den Namen des Mitarbeiters ein:");
saveFeedbackToFile(); String name = scanner.nextLine();
System.out.println("Feedback wurde erfolgreich gespeichert."); 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 showFeedback() { Absence absence = new Absence(name, date, reason);
if (feedbacks.isEmpty()) { absences.add(absence);
System.out.println("Keine Feedbacks vorhanden."); saveAbsencesToFile();
} else { System.out.println("Abwesenheit wurde erfolgreich eingetragen.");
System.out.println("\n--- Feedbacks ---"); }
for (Feedback feedback : feedbacks) {
System.out.println(feedback.toString());
}
}
}
private void saveAbsencesToFile() { public void saveShiftToFile(String shift) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(ABSENCE_FILE, true))) { try (BufferedWriter writer = new BufferedWriter(new FileWriter("src/shifts.txt", true))) {
for (Absence absence : absences) { writer.write(shift); // Schicht als String speichern
writer.write(absence.toFileFormat()); writer.newLine();
writer.newLine(); } catch (IOException e) {
} System.out.println("Fehler beim Speichern der Schicht: " + e.getMessage());
} catch (IOException e) { }
System.out.println("Fehler beim Speichern der Abwesenheiten: " + e.getMessage()); }
}
}
private void saveFeedbackToFile() { public void showAbsences() {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(FEEDBACK_FILE, false))) { System.out.println("\n--- Abwesenheiten ---");
for (Feedback feedback : feedbacks) { for (Absence absence : absences) {
writer.write(feedback.toFileFormat()); System.out.println(absence);
writer.newLine(); }
} }
} catch (IOException e) {
System.out.println("Fehler beim Speichern des Feedbacks: " + e.getMessage());
}
}
private void saveUserToFile(User user) { public void giveFeedback() {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(USERS_FILE, true))) { System.out.print("Gib den Benutzernamen des Mitarbeiters ein: ");
writer.write(user.username + ":" + user.password + ":" + user.role.name()); String employeeUsername = scanner.nextLine();
writer.newLine(); System.out.print("Gib das Feedback ein: ");
} catch (IOException e) { String feedbackText = scanner.nextLine();
System.out.println("Fehler beim Speichern des Nutzers: " + e.getMessage());
}
}
private void createDefaultManager() { Feedback feedback = new Feedback(employeeUsername, feedbackText);
User defaultManager = new User("Dimitry", "1234", Role.MANAGER); feedbacks.add(feedback);
users.put("Dimitry", defaultManager); saveFeedbackToFile();
saveUserToFile(defaultManager); System.out.println("Feedback wurde erfolgreich gespeichert.");
} }
private void showFinancialReports() { public void showFeedback() {
System.out.println("\n--- Finanzbericht ---"); if (feedbacks.isEmpty()) {
System.out.println("Wählen Sie den Zeitraum:"); System.out.println("Keine Feedbacks vorhanden.");
System.out.println("1. Täglich"); } else {
System.out.println("2. Wöchentlich"); System.out.println("\n--- Feedbacks ---");
System.out.println("3. Monatlich"); for (Feedback feedback : feedbacks) {
System.out.println(feedback.toString());
}
}
}
int periodChoice = scanner.nextInt(); private void saveAbsencesToFile() {
scanner.nextLine(); // Eingabepuffer leeren 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());
}
}
switch (periodChoice) { private void saveFeedbackToFile() {
case 1 -> financialManager.showFinancialReport("daily"); try (BufferedWriter writer = new BufferedWriter(new FileWriter(FEEDBACK_FILE, false))) {
case 2 -> financialManager.showFinancialReport("weekly"); for (Feedback feedback : feedbacks) {
case 3 -> financialManager.showFinancialReport("monthly"); writer.write(feedback.toFileFormat());
default -> System.out.println("Ungültige Auswahl."); 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());
}
}
} }

View File

@ -5,3 +5,11 @@ Arim;22.02.2025;Krank
Arim;22.02.2025;Krank Arim;22.02.2025;Krank
Dimitry ;25.04.2025;Krankheit Dimitry ;25.04.2025;Krankheit
Abbas;26.03.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

View File

@ -0,0 +1,5 @@
Datum: 2025-01-12
Gesamte Einnahmen: 0.0 €
Gesamte Ausgaben: 1545.0 €
Nettogewinn: -1545.0 €
-------------------------------------

View File

@ -1,8 +1,7 @@
01,100 Nudeln,150
Soße,49999996 Soße,100
Ananasdasdas,5000 Brot,100
Brot,1503 Tomaten,200
Tomaten,503 Salat,260
Käse,715 Käse,100
Fleisch,93 Fleisch,200
Salat,494