From a0e53bef201f409192a00dc8a956364147da18dc Mon Sep 17 00:00:00 2001 From: alama Date: Sat, 11 Jan 2025 16:16:57 +0100 Subject: [PATCH] =?UTF-8?q?Hinzuf=C3=BCgen=20einer=20Finanzverwaltung=20un?= =?UTF-8?q?d=20Hinzuf=C3=BCgen=20einer=20neuer=20Option=20Finanzverwaltung?= =?UTF-8?q?=20beim=20Systemcontroller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Restaurantverwaltung/src/Bestellungen.txt | 7 + .../src/FinancialManager.java | 144 ++++++ .../src/SystemController.java | 417 +++++++++--------- Restaurantverwaltung/src/stock.txt | 7 +- 4 files changed, 363 insertions(+), 212 deletions(-) create mode 100644 Restaurantverwaltung/src/FinancialManager.java diff --git a/Restaurantverwaltung/src/Bestellungen.txt b/Restaurantverwaltung/src/Bestellungen.txt index 5924320..8fa5319 100644 --- a/Restaurantverwaltung/src/Bestellungen.txt +++ b/Restaurantverwaltung/src/Bestellungen.txt @@ -5,3 +5,10 @@ Bestellte Gerichte: Zeit: 20:00 -------------------------- +ID: 47856861-c7fc-4fb7-9366-174851fb1f46 +Tisch Nummer: 01 +Bestellte Gerichte: +- Cheeseburger + +Zeit: 16:13 +-------------------------- diff --git a/Restaurantverwaltung/src/FinancialManager.java b/Restaurantverwaltung/src/FinancialManager.java new file mode 100644 index 0000000..8085e87 --- /dev/null +++ b/Restaurantverwaltung/src/FinancialManager.java @@ -0,0 +1,144 @@ +import java.io.*; +import java.text.SimpleDateFormat; +import java.util.*; + +class FinancialManager { + private static final String TRANSACTION_FILE = "src/transactions.txt"; // Datei für Transaktionen (Einnahmen und Ausgaben) + private List transactions = new ArrayList<>(); + + public FinancialManager() { + 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) { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(TRANSACTION_FILE, true))) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String transactionLine = dateFormat.format(transaction.getDate()) + ";" + transaction.getAmount() + ";" + transaction.getDescription() + ";" + (transaction.isIncome() ? "Income" : "Expense"); + writer.write(transactionLine); + writer.newLine(); + } catch (IOException e) { + System.out.println("Fehler beim Speichern der Transaktion: " + e.getMessage()); + } + } + + private void loadTransactionsFromFile() { + try (BufferedReader reader = new BufferedReader(new FileReader(TRANSACTION_FILE))) { + String line; + while ((line = reader.readLine()) != null) { + String[] parts = line.split(";"); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = dateFormat.parse(parts[0]); + double amount = Double.parseDouble(parts[1]); + String description = parts[2]; + boolean isIncome = "Income".equals(parts[3]); + transactions.add(new Transaction(amount, description, isIncome, date)); + } + } catch (IOException | java.text.ParseException e) { + System.out.println("Fehler beim Laden der Transaktionen: " + e.getMessage()); + } + } + + public void showFinancialReport(String period) { + double totalIncome = 0; + double totalExpense = 0; + Date startDate = null; + Date endDate = new Date(); + + switch (period.toLowerCase()) { + case "daily": + startDate = getStartOfDay(); + break; + case "weekly": + startDate = getStartOfWeek(); + break; + case "monthly": + startDate = getStartOfMonth(); + break; + default: + System.out.println("Ungültige Zeitraumoption!"); + return; + } + + // Berechnen der Einnahmen und Ausgaben im angegebenen Zeitraum + for (Transaction transaction : transactions) { + if (!transaction.getDate().before(startDate) && !transaction.getDate().after(endDate)) { + if (transaction.isIncome()) { + totalIncome += transaction.getAmount(); + } else { + totalExpense += transaction.getAmount(); + } + } + } + + System.out.println("\n--- Finanzbericht für " + period + " ---"); + System.out.println("Gesamte Einnahmen: " + totalIncome + " EUR"); + System.out.println("Gesamte Ausgaben: " + totalExpense + " EUR"); + System.out.println("Nettogewinn: " + (totalIncome - totalExpense) + " EUR"); + } + + private Date getStartOfDay() { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + return cal.getTime(); + } + + private Date getStartOfWeek() { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + return cal.getTime(); + } + + private Date getStartOfMonth() { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.DAY_OF_MONTH, 1); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + return cal.getTime(); + } +} + +class Transaction { + private double amount; + private String description; + private boolean isIncome; + private Date date; + + public Transaction(double amount, String description, boolean isIncome, Date date) { + this.amount = amount; + this.description = description; + this.isIncome = isIncome; + this.date = date; + } + + public double getAmount() { + return amount; + } + + public String getDescription() { + return description; + } + + public boolean isIncome() { + return isIncome; + } + + public Date getDate() { + return date; + } +} diff --git a/Restaurantverwaltung/src/SystemController.java b/Restaurantverwaltung/src/SystemController.java index 3b4dda0..84ab99f 100644 --- a/Restaurantverwaltung/src/SystemController.java +++ b/Restaurantverwaltung/src/SystemController.java @@ -1,238 +1,237 @@ -import java.util.Scanner; -import java.util.Map; -import java.util.HashMap; +import java.util.*; import java.io.*; class SystemController { - private Scanner scanner = new Scanner(System.in); - private Map users = new HashMap<>(); - private final String USERS_FILE = "src/users.txt"; - public static Inventory inventory = new Inventory(); - private Menu menu = new Menu(); + private Scanner scanner = new Scanner(System.in); + private Map users = new HashMap<>(); + private final String USERS_FILE = "src/users.txt"; + public static Inventory inventory = new Inventory(); + private Menu menu = new Menu(); + private FinancialManager financialManager = new FinancialManager(); - public SystemController() { - loadUsersFromFile(); + public SystemController() { + loadUsersFromFile(); + } - } + public void startSystem() { + System.out.println("Willkommen im Restaurant Management System!"); + System.out.println("Bitte loggen Sie sich ein: "); - public void startSystem() { - System.out.println("Willkommen im Restaurant Management System!"); - System.out.println("Bitte loggen Sie sich ein: "); + System.out.print("Username ---------------> "); + String username = scanner.nextLine(); - System.out.print("Username ---------------> "); - String username = scanner.nextLine(); + System.out.print("Passwort ---------------> "); + String password = scanner.nextLine(); - System.out.print("Passwort ---------------> "); - String password = scanner.nextLine(); + User user = authenticate(username, password); + if (user != null) { + displayMainMenu(user); + } else { + System.out.println("Ungültige Anmeldedaten."); + } + } - User user = authenticate(username, password); - if (user != null) { - displayMainMenu(user); - } else { - System.out.println("Ungültige Anmeldedaten."); - } - } + private User authenticate(String username, String password) { + if (users.containsKey(username) && users.get(username).password.equals(password)) { + return users.get(username); + } + return null; + } - private User authenticate(String username, String password) { - if (users.containsKey(username) && users.get(username).password.equals(password)) { - return users.get(username); - } - return null; - } + private void displayMainMenu(User user) { + boolean running = true; + while (running) { + inventory.loadStockFromFile(); + System.out.println("\n--- Hauptmenü ---"); + System.out.println("1. Bestand verwalten"); + System.out.println("2. Neuer Nutzer erstellen"); + System.out.println("3. Menü anzeigen"); + System.out.println("4. Bestellungen verwalten"); + System.out.println("5. Finanzbericht anzeigen"); + System.out.println("6. Beenden"); - private void displayMainMenu(User user) { - boolean running = true; - while (running) { - inventory.loadStockFromFile(); - System.out.println("\n--- Hauptmenü ---"); - System.out.println("1. Bestand verwalten"); - System.out.println("2. Neuer Nutzer erstellen"); - System.out.println("3. Menü anzeigen"); - System.out.println("4. Bestellungen verwalten"); - System.out.println("5. Beenden"); + System.out.print("Bitte wähle eine Option: "); + int choice = scanner.nextInt(); + scanner.nextLine(); // Eingabepuffer leeren - System.out.print("Bitte wähle eine Option: "); - int choice = scanner.nextInt(); - scanner.nextLine(); // Eingabepuffer leeren + switch (choice) { + case 1 -> manageInventory(); + case 2 -> { + if (user.role == Role.MANAGER) { + createUser(); + } else { + System.out.println("Keine Rechte, um neue Nutzer zu erstellen."); + } + } + case 3 -> menu.displayMenu(inventory); + case 4 -> manageOrders(); // Übergibt an Bestellsystem + case 5 -> showFinancialReports(); // Anzeige der Finanzberichte + case 6 -> { + running = false; + System.out.println("System wird beendet. Auf Wiedersehen!"); + } + default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); + } + } + } - switch (choice) { - case 1 -> manageInventory(); - case 2 -> { - if (user.role == Role.MANAGER) { - createUser(); - } else { - System.out.println("Keine Rechte, um neue Nutzer zu erstellen."); - } - } - case 3 -> menu.displayMenu(inventory); - case 4 -> manageOrders(); // Übergibt an Bestellsystem - case 5 -> { - running = false; - System.out.println("System wird beendet. Auf Wiedersehen!"); - } - default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); - } - } - } + private void manageInventory() { + boolean managingInventory = true; + while (managingInventory) { + inventory.loadStockFromFile(); + System.out.println("\n--- Bestand verwalten ---"); + System.out.println("1. Bestand ansehen"); + System.out.println("2. Bestand ändern"); + System.out.println("3. Bestand erweitern"); + System.out.println("4. Zurück zum Hauptmenü"); - private void manageInventory() { - boolean managingInventory = true; - while (managingInventory) { - inventory.loadStockFromFile(); - System.out.println("\n--- Bestand verwalten ---"); - System.out.println("1. Bestand ansehen"); - System.out.println("2. Bestand ändern"); - System.out.println("3. Bestand erweitern"); - System.out.println("4. Zurück zum Hauptmenü"); + System.out.print("Bitte wähle eine Option: "); + int choice = scanner.nextInt(); + scanner.nextLine(); // Eingabepuffer leeren - System.out.print("Bitte wähle eine Option: "); - int choice = scanner.nextInt(); - scanner.nextLine(); // Eingabepuffer leeren + switch (choice) { + case 1 -> inventory.viewStock(); // Bestand ansehen + case 2 -> { + System.out.println("Welchen Bestand möchten Sie ändern?"); + String name = scanner.nextLine(); + System.out.println("Neue Anzahl ---->"); + try { + int anzahl = scanner.nextInt(); + inventory.overwriteStock(name, anzahl); // Bestellungen im Speicher anzeigen + inventory.saveStockToFile(); // Echtzeitspeicherung der Daten + } catch (IllegalArgumentException e) { + System.out.println("Fehler! Überprüfen Sie Ihre Eingabe"); + } + } + case 3 -> { + System.out.println("Bestand wird erweitert....."); + System.out.println("Name des Produkts: "); + String name = scanner.nextLine(); + System.out.println("Anzahl :"); + try { + int anzahl = scanner.nextInt(); + inventory.addIngredients(name, anzahl); // Bestellungen im Speicher anzeigen + inventory.saveStockToFile(); // Echtzeitspeicherung der Daten + } catch (IllegalArgumentException e) { + System.out.println("Fehler! Überprüfen Sie Ihre Eingabe"); + } + } + case 4 -> managingInventory = false; + default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); + } + } + } - switch (choice) { - case 1 -> { - inventory.viewStock(); // Bestand ansehen - } - case 2 -> { - System.out.println("Welchen Bestand möchten sie ändern?"); - String name = scanner.nextLine(); - System.out.println("Neue Anzahl ---->"); - try { - int anzahl = scanner.nextInt(); - inventory.overwriteStock(name, anzahl); // Bestellungen im Speicher anzeigen - inventory.saveStockToFile(); // Echtzeitspeicherung der Daten in der Datenbank, die für Daten für - // alle Nutzer zugänglich macht - } catch (IllegalArgumentException e) { - System.out.println("Fehler! Übeprüfen Sie ihre Eingabe"); - } + private void manageOrders() { + boolean managingOrders = true; + while (managingOrders) { + System.out.println("\n--- Bestellungen verwalten ---"); + System.out.println("1. Bestellung aufnehmen"); + System.out.println("2. Alle Bestellungen anzeigen"); + System.out.println("3. Bestellungen löschen"); + System.out.println("4. Zurück zum Hauptmenü"); - } - case 3 -> { - System.out.println("Bestand wird erweitert....."); - System.out.println("Name des Produkts: "); - String name = scanner.nextLine(); - System.out.println("Anzahl :"); - try { - int anzahl = scanner.nextInt(); - inventory.addIngredients(name, anzahl); // Bestellungen im Speicher anzeigen - inventory.saveStockToFile(); // Echtzeitspeicherung der Daten in der Datenbank, die für Daten für - // alle Nutzer zugänglich macht - } catch (IllegalArgumentException e) { - System.out.println("Fehler! Übeprüfen Sie ihre Eingabe"); - } - } - case 4 -> managingInventory = false; - default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); - } - } - } + System.out.print("Bitte wähle eine Option: "); + int choice = scanner.nextInt(); + scanner.nextLine(); // Eingabepuffer leeren - private void manageOrders() { - boolean managingOrders = true; - while (managingOrders) { - System.out.println("\n--- Bestellungen verwalten ---"); - System.out.println("1. Bestellung aufnehmen"); - System.out.println("2. Alle Bestellungen anzeigen"); - System.out.println("3. Bestellungen löschen"); - System.out.println("4. Zurück zum Hauptmenü"); + switch (choice) { + case 1 -> { + menu.displayMenu(inventory); + Bestellsystem.erstelleBestellung(); // Neue Bestellung erstellen + } + case 2 -> { + Bestellsystem.ladeUndZeigeBestellungen(); // Bestellungen aus Datei anzeigen + } + case 3 -> { + Bestellsystem.loescheBestellung(); // Bestellungen aus Datei löschen + } + case 4 -> managingOrders = false; + default -> System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); + } + } + } - System.out.print("Bitte wähle eine Option: "); - int choice = scanner.nextInt(); - scanner.nextLine(); // Eingabepuffer leeren + private void createUser() { + String username = ""; + String password = ""; + Role role = null; + try { + System.out.println("\n--- Neuen Nutzer erstellen ---"); + System.out.print("Benutzername: "); + username = scanner.nextLine(); + System.out.print("Passwort: "); + password = scanner.nextLine(); + System.out.print("Rolle (MANAGER, SERVICE, KITCHEN): "); + role = Role.valueOf(scanner.nextLine().toUpperCase()); + } catch (IllegalArgumentException d) { + System.out.println("Fehler beim Erstellen eines Accounts. Überprüfen Sie Ihre Eingaben."); + } catch (NullPointerException c) { + System.out.println("Fehler beim Erstellen eines Accounts. Überprüfen Sie Ihre Eingaben."); + } - switch (choice) { - case 1 -> { - menu.displayMenu(inventory); - Bestellsystem.erstelleBestellung(); // Neue Bestellung erstellen + try { + User newUser = new User(username, password, role); + users.put(username, newUser); + saveUserToFile(newUser); - } - 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."); - } - } - } + System.out.println("Nutzer erfolgreich erstellt."); + } catch (NullPointerException c) { + System.out.println("Fehler beim Erstellen eines Accounts."); + } + } - private void createUser() { - String username = ""; - String password = ""; - Role role = null; - try { - System.out.println("\n--- Neuen Nutzer erstellen ---"); - System.out.print("Benutzername: "); - username = scanner.nextLine(); - System.out.print("Passwort: "); - password = scanner.nextLine(); - System.out.print("Rolle (MANAGER, SERVICE, KITCHEN): "); - role = Role.valueOf(scanner.nextLine().toUpperCase()); - } catch (IllegalArgumentException d) { - System.out.println("Fehler beim Erstellen eines Accounts. Überprüfen sie Ihre Eingaben"); - } catch (NullPointerException c) { - System.out.println("Fehler beim Erstellen eines Accounts. Überprüfen sie Ihre Eingaben"); - } + private void 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()); - try { - User newUser = new User(username, password, role); - users.put(username, newUser); - saveUserToFile(newUser); + 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()); + } + } - System.out.println("Nutzer erfolgreich erstellt."); - } catch (NullPointerException c) { - - } - } + 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 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()); + private void createDefaultManager() { + User defaultManager = new User("Dimitry", "1234", Role.MANAGER); + users.put("Dimitry", defaultManager); + saveUserToFile(defaultManager); + } - 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 showFinancialReports() { + System.out.println("\n--- Finanzbericht ---"); + System.out.println("Wählen Sie den Zeitraum:"); + System.out.println("1. Täglich"); + System.out.println("2. Wöchentlich"); + System.out.println("3. Monatlich"); - private void 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); - } + int periodChoice = scanner.nextInt(); + scanner.nextLine(); // Eingabepuffer leeren + switch (periodChoice) { + case 1 -> financialManager.showFinancialReport("daily"); + case 2 -> financialManager.showFinancialReport("weekly"); + case 3 -> financialManager.showFinancialReport("monthly"); + default -> System.out.println("Ungültige Auswahl."); + } + } } - - -// -//Wenn ihr weitere Menü-möglichkeiten hinzufügt, sollt ihr { -//if (user.role == Role.MANAGER) { -// createUser(); -//} else { -// System.out.println("Keine Rechte, um neue Nutzer zu erstellen."); -//} -//bei switch case machen, damit es die Rollen richtig funktionieren - -//alle menü-interaktionen sollen wie manageInventory() methode gemacht werden, damit es übersichtlicher bleibt (Ali/Braucht Admin rechte, Abbas/Braucht ADmin rechte eure 2 Funktinonen) \ No newline at end of file diff --git a/Restaurantverwaltung/src/stock.txt b/Restaurantverwaltung/src/stock.txt index a25cd74..7c6ef85 100644 --- a/Restaurantverwaltung/src/stock.txt +++ b/Restaurantverwaltung/src/stock.txt @@ -1,7 +1,8 @@ +01,100 Soße,49999996 Ananasdasdas,5000 -Brot,1504 +Brot,1503 Tomaten,503 -Käse,716 -Fleisch,94 +Käse,715 +Fleisch,93 Salat,494