Hinzufügen einer Finanzverwaltung und Hinzufügen einer neuer Option

Finanzverwaltung beim Systemcontroller
master
alama 2025-01-11 16:16:57 +01:00
parent b9b3783831
commit a0e53bef20
4 changed files with 363 additions and 212 deletions

View File

@ -5,3 +5,10 @@ Bestellte Gerichte:
Zeit: 20:00 Zeit: 20:00
-------------------------- --------------------------
ID: 47856861-c7fc-4fb7-9366-174851fb1f46
Tisch Nummer: 01
Bestellte Gerichte:
- Cheeseburger
Zeit: 16:13
--------------------------

View File

@ -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<Transaction> 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;
}
}

View File

@ -1,238 +1,237 @@
import java.util.Scanner; import java.util.*;
import java.util.Map;
import java.util.HashMap;
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 = new Inventory();
private Menu menu = new Menu(); private Menu menu = new Menu();
private FinancialManager financialManager = new FinancialManager();
public SystemController() { public SystemController() {
loadUsersFromFile(); 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.print("Username ---------------> ");
System.out.println("Willkommen im Restaurant Management System!"); String username = scanner.nextLine();
System.out.println("Bitte loggen Sie sich ein: ");
System.out.print("Username ---------------> "); System.out.print("Passwort ---------------> ");
String username = scanner.nextLine(); String password = scanner.nextLine();
System.out.print("Passwort ---------------> "); User user = authenticate(username, password);
String password = scanner.nextLine(); if (user != null) {
displayMainMenu(user);
} else {
System.out.println("Ungültige Anmeldedaten.");
}
}
User user = authenticate(username, password); private User authenticate(String username, String password) {
if (user != null) { if (users.containsKey(username) && users.get(username).password.equals(password)) {
displayMainMenu(user); return users.get(username);
} else { }
System.out.println("Ungültige Anmeldedaten."); return null;
} }
}
private User authenticate(String username, String password) { private void displayMainMenu(User user) {
if (users.containsKey(username) && users.get(username).password.equals(password)) { boolean running = true;
return users.get(username); while (running) {
} inventory.loadStockFromFile();
return null; 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) { System.out.print("Bitte wähle eine Option: ");
boolean running = true; int choice = scanner.nextInt();
while (running) { scanner.nextLine(); // Eingabepuffer leeren
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: "); switch (choice) {
int choice = scanner.nextInt(); case 1 -> manageInventory();
scanner.nextLine(); // Eingabepuffer leeren 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) { private void manageInventory() {
case 1 -> manageInventory(); boolean managingInventory = true;
case 2 -> { while (managingInventory) {
if (user.role == Role.MANAGER) { inventory.loadStockFromFile();
createUser(); System.out.println("\n--- Bestand verwalten ---");
} else { System.out.println("1. Bestand ansehen");
System.out.println("Keine Rechte, um neue Nutzer zu erstellen."); System.out.println("2. Bestand ändern");
} System.out.println("3. Bestand erweitern");
} System.out.println("4. Zurück zum Hauptmenü");
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() { System.out.print("Bitte wähle eine Option: ");
boolean managingInventory = true; int choice = scanner.nextInt();
while (managingInventory) { scanner.nextLine(); // Eingabepuffer leeren
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: "); switch (choice) {
int choice = scanner.nextInt(); case 1 -> inventory.viewStock(); // Bestand ansehen
scanner.nextLine(); // Eingabepuffer leeren 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) { private void manageOrders() {
case 1 -> { boolean managingOrders = true;
inventory.viewStock(); // Bestand ansehen while (managingOrders) {
} System.out.println("\n--- Bestellungen verwalten ---");
case 2 -> { System.out.println("1. Bestellung aufnehmen");
System.out.println("Welchen Bestand möchten sie ändern?"); System.out.println("2. Alle Bestellungen anzeigen");
String name = scanner.nextLine(); System.out.println("3. Bestellungen löschen");
System.out.println("Neue Anzahl ---->"); System.out.println("4. Zurück zum Hauptmenü");
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");
}
} System.out.print("Bitte wähle eine Option: ");
case 3 -> { int choice = scanner.nextInt();
System.out.println("Bestand wird erweitert....."); scanner.nextLine(); // Eingabepuffer leeren
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.");
}
}
}
private void manageOrders() { switch (choice) {
boolean managingOrders = true; case 1 -> {
while (managingOrders) { menu.displayMenu(inventory);
System.out.println("\n--- Bestellungen verwalten ---"); Bestellsystem.erstelleBestellung(); // Neue Bestellung erstellen
System.out.println("1. Bestellung aufnehmen"); }
System.out.println("2. Alle Bestellungen anzeigen"); case 2 -> {
System.out.println("3. Bestellungen löschen"); Bestellsystem.ladeUndZeigeBestellungen(); // Bestellungen aus Datei anzeigen
System.out.println("4. Zurück zum Hauptmenü"); }
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: "); private void createUser() {
int choice = scanner.nextInt(); String username = "";
scanner.nextLine(); // Eingabepuffer leeren 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) { try {
case 1 -> { User newUser = new User(username, password, role);
menu.displayMenu(inventory); users.put(username, newUser);
Bestellsystem.erstelleBestellung(); // Neue Bestellung erstellen saveUserToFile(newUser);
} System.out.println("Nutzer erfolgreich erstellt.");
case 2 -> { } catch (NullPointerException c) {
Bestellsystem.ladeUndZeigeBestellungen(); // Bestellungen aus Datei anzeigen System.out.println("Fehler beim Erstellen eines Accounts.");
} }
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 createUser() { private void loadUsersFromFile() {
String username = ""; try (BufferedReader reader = new BufferedReader(new FileReader(USERS_FILE))) {
String password = ""; String line;
Role role = null; while ((line = reader.readLine()) != null) {
try { String[] parts = line.split(":");
System.out.println("\n--- Neuen Nutzer erstellen ---"); if (parts.length == 3) {
System.out.print("Benutzername: "); String username = parts[0];
username = scanner.nextLine(); String password = parts[1];
System.out.print("Passwort: "); Role role = Role.valueOf(parts[2].toUpperCase());
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 { users.put(username, new User(username, password, role));
User newUser = new User(username, password, role); }
users.put(username, newUser); }
saveUserToFile(newUser); } 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."); private void saveUserToFile(User user) {
} catch (NullPointerException c) { 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() { private void createDefaultManager() {
try (BufferedReader reader = new BufferedReader(new FileReader(USERS_FILE))) { User defaultManager = new User("Dimitry", "1234", Role.MANAGER);
String line; users.put("Dimitry", defaultManager);
while ((line = reader.readLine()) != null) { saveUserToFile(defaultManager);
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)); private void showFinancialReports() {
} System.out.println("\n--- Finanzbericht ---");
} System.out.println("Wählen Sie den Zeitraum:");
} catch (FileNotFoundException e) { System.out.println("1. Täglich");
System.out.println("Benutzerdatenbank nicht gefunden. Standard-Manager wird erstellt."); System.out.println("2. Wöchentlich");
createDefaultManager(); System.out.println("3. Monatlich");
} catch (IOException e) {
System.out.println("Fehler beim Lesen der Benutzerdatenbank: " + e.getMessage());
}
}
private void saveUserToFile(User user) { int periodChoice = scanner.nextInt();
try (BufferedWriter writer = new BufferedWriter(new FileWriter(USERS_FILE, true))) { scanner.nextLine(); // Eingabepuffer leeren
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);
}
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)

View File

@ -1,7 +1,8 @@
01,100
Soße,49999996 Soße,49999996
Ananasdasdas,5000 Ananasdasdas,5000
Brot,1504 Brot,1503
Tomaten,503 Tomaten,503
Käse,716 Käse,715
Fleisch,94 Fleisch,93
Salat,494 Salat,494