diff --git a/Restaurantverwaltung/Reservations.txt b/Restaurantverwaltung/Reservations.txt new file mode 100644 index 0000000..9b02fcc --- /dev/null +++ b/Restaurantverwaltung/Reservations.txt @@ -0,0 +1,2 @@ +Ali,12.01.2025,20:00,2 +,,, diff --git a/Restaurantverwaltung/src/Bestellungen.txt b/Restaurantverwaltung/src/Bestellungen.txt index a8c7b22..1a3018e 100644 --- a/Restaurantverwaltung/src/Bestellungen.txt +++ b/Restaurantverwaltung/src/Bestellungen.txt @@ -1,28 +1,2 @@ -ID: aa9888b3-148a-4866-b404-7f9dc262153b -Tisch Nummer: 1 -Bestellte Gerichte: -- Cheeseburger - -Zeit: 20:00 --------------------------- -ID: 47856861-c7fc-4fb7-9366-174851fb1f46 -Tisch Nummer: 01 -Bestellte Gerichte: -- Cheeseburger - -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 --------------------------- +01,Dima,Cheeseburger, Ramen,2,100€ +02,Ali,Ramen,2 diff --git a/Restaurantverwaltung/src/Reservations.txt b/Restaurantverwaltung/src/Reservations.txt index d8dd0bf..e69de29 100644 --- a/Restaurantverwaltung/src/Reservations.txt +++ b/Restaurantverwaltung/src/Reservations.txt @@ -1,5 +0,0 @@ -1,Abbas,15:30 -1,Dimimtry,18:00 -1,Ariminho,20:00 -2,Ali und Arim,19:00 -1,Ilinho,13:30 diff --git a/Restaurantverwaltung/src/SystemController.java b/Restaurantverwaltung/src/SystemController.java index f75577d..1745f15 100644 --- a/Restaurantverwaltung/src/SystemController.java +++ b/Restaurantverwaltung/src/SystemController.java @@ -44,7 +44,7 @@ class SystemController { } } - private User authenticate(String username, String password) { + User authenticate(String username, String password) { if (users.containsKey(username) && users.get(username).password.equals(password)) { return users.get(username); } diff --git a/Restaurantverwaltung/src/employees.txt b/Restaurantverwaltung/src/employees.txt new file mode 100644 index 0000000..d8dbe3c --- /dev/null +++ b/Restaurantverwaltung/src/employees.txt @@ -0,0 +1 @@ +Ali,Küche,15.000€ diff --git a/Restaurantverwaltung/src/stock.txt b/Restaurantverwaltung/src/stock.txt index 571d575..1d56d53 100644 --- a/Restaurantverwaltung/src/stock.txt +++ b/Restaurantverwaltung/src/stock.txt @@ -1,7 +1,2 @@ -Nudeln,150 -Soße,100 -Brot,100 -Tomaten,200 -Salat,260 -Käse,100 -Fleisch,200 \ No newline at end of file +Brot,100,10 +Tomaten,1000,10 diff --git a/Restaurantverwaltung/src/userinterface/InventoryPanel.java b/Restaurantverwaltung/src/userinterface/InventoryPanel.java new file mode 100644 index 0000000..f7be0d6 --- /dev/null +++ b/Restaurantverwaltung/src/userinterface/InventoryPanel.java @@ -0,0 +1,92 @@ +package userinterface; + +import javax.swing.*; +import javax.swing.table.DefaultTableModel; +import java.awt.*; +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public class InventoryPanel extends JPanel { + private DefaultTableModel tableModel; + private JTable table; + private List stockItems; + private final String filePath = "src/stock.txt"; + + public InventoryPanel(JFrame frame, JPanel mainPanel) { + this.setLayout(new BorderLayout()); + JLabel label = new JLabel("Bestand verwalten", SwingConstants.CENTER); + label.setFont(new Font("Arial", Font.BOLD, 24)); + this.add(label, BorderLayout.NORTH); + + // Tabelle vorbereiten + String[] columns = {"Produkt", "Menge"}; + tableModel = new DefaultTableModel(columns, 0); + table = new JTable(tableModel); + loadStock(); + JScrollPane scrollPane = new JScrollPane(table); + this.add(scrollPane, BorderLayout.CENTER); + + // Steuerpanel unten + JPanel controlPanel = new JPanel(); + JButton refreshButton = new JButton("Aktualisieren"); + JButton backButton = new JButton("Zurück"); + controlPanel.add(refreshButton); + controlPanel.add(backButton); + this.add(controlPanel, BorderLayout.SOUTH); + + // ActionListener für Buttons + refreshButton.addActionListener(e -> loadStock()); + backButton.addActionListener(e -> switchPanel(frame, mainPanel)); + } + + private void switchPanel(JFrame frame, JPanel mainPanel) { + frame.getContentPane().removeAll(); + frame.add(mainPanel, BorderLayout.CENTER); + frame.revalidate(); + frame.repaint(); + } + + private void loadStock() { + stockItems = new ArrayList<>(); + tableModel.setRowCount(0); + try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { + String line; + while ((line = reader.readLine()) != null) { + if (!line.trim().isEmpty()) { + String[] data = line.split(","); + if (data.length >= 2) { + stockItems.add(data); + tableModel.addRow(data); + } + } + } + } catch (IOException e) { + JOptionPane.showMessageDialog(this, "Fehler beim Laden des Bestands!", "Fehler", JOptionPane.ERROR_MESSAGE); + } + } + + public void updateStock(String productName, int quantityUsed) { + for (String[] item : stockItems) { + if (item[0].equalsIgnoreCase(productName)) { + int currentQuantity = Integer.parseInt(item[1]); + item[1] = String.valueOf(currentQuantity - quantityUsed); + saveStock(); + loadStock(); + return; + } + } + JOptionPane.showMessageDialog(this, "Produkt nicht gefunden: " + productName, "Fehler", JOptionPane.WARNING_MESSAGE); + } + + private void saveStock() { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) { + for (String[] item : stockItems) { + writer.write(String.join(",", item)); + writer.newLine(); + } + } catch (IOException e) { + JOptionPane.showMessageDialog(this, "Fehler beim Speichern des Bestands!", "Fehler", JOptionPane.ERROR_MESSAGE); + } + } +} diff --git a/Restaurantverwaltung/src/userinterface/MainMenu.java b/Restaurantverwaltung/src/userinterface/MainMenu.java new file mode 100644 index 0000000..afbd9ea --- /dev/null +++ b/Restaurantverwaltung/src/userinterface/MainMenu.java @@ -0,0 +1,57 @@ +package userinterface; + +import javax.swing.*; +import javax.swing.table.DefaultTableModel; +import java.awt.*; +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public class MainMenu { + + public static void main(String[] args) { + JFrame frame = new JFrame("Restaurantverwaltungssystem"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setSize(800, 600); + frame.setLayout(new BorderLayout()); + + JLabel headerLabel = new JLabel("Restaurantverwaltungssystem", SwingConstants.CENTER); + headerLabel.setFont(new Font("Arial", Font.BOLD, 30)); + frame.add(headerLabel, BorderLayout.NORTH); + + JPanel mainPanel = new JPanel(); + mainPanel.setLayout(new GridLayout(2, 3, 20, 20)); + + JButton reservierungenButton = new JButton("Reservierungen verwalten"); + JButton lagerButton = new JButton("Lagerbestand verwalten"); + JButton bestellungenButton = new JButton("Bestellungen verwalten"); + JButton personalButton = new JButton("Personal verwalten"); + JButton finanzenButton = new JButton("Finanzen verwalten"); + JButton beendenButton = new JButton("Beenden"); + + mainPanel.add(reservierungenButton); + mainPanel.add(lagerButton); + mainPanel.add(bestellungenButton); + mainPanel.add(personalButton); + mainPanel.add(finanzenButton); + mainPanel.add(beendenButton); + + frame.add(mainPanel, BorderLayout.CENTER); + + reservierungenButton.addActionListener(e -> switchPanel(frame, mainPanel, new ReservationPanel(frame, mainPanel))); + lagerButton.addActionListener(e -> switchPanel(frame, mainPanel, new InventoryPanel(frame, mainPanel))); + bestellungenButton.addActionListener(e -> switchPanel(frame, mainPanel, new OrdersPanel(frame, mainPanel))); + personalButton.addActionListener(e -> JOptionPane.showMessageDialog(frame, "Personal verwalten: Noch nicht implementiert.")); + finanzenButton.addActionListener(e -> JOptionPane.showMessageDialog(frame, "Finanzen verwalten: Noch nicht implementiert.")); + beendenButton.addActionListener(e -> System.exit(0)); + + frame.setVisible(true); + } + + private static void switchPanel(JFrame frame, JPanel mainPanel, JPanel newPanel) { + frame.getContentPane().removeAll(); + frame.add(newPanel, BorderLayout.CENTER); + frame.revalidate(); + frame.repaint(); + } +} diff --git a/Restaurantverwaltung/src/userinterface/OrdersPanel.java b/Restaurantverwaltung/src/userinterface/OrdersPanel.java new file mode 100644 index 0000000..b682c7b --- /dev/null +++ b/Restaurantverwaltung/src/userinterface/OrdersPanel.java @@ -0,0 +1,153 @@ +package userinterface; +import javax.swing.*; +import javax.swing.table.DefaultTableModel; +import java.awt.*; +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public class OrdersPanel extends JPanel { + private DefaultTableModel tableModel; + private JTable table; + private List orders; + private final String filePath = "src/Bestellungen.txt"; + + public OrdersPanel(JFrame frame, JPanel mainPanel) { + this.setLayout(new BorderLayout()); + JLabel label = new JLabel("Bestellungen verwalten", SwingConstants.CENTER); + label.setFont(new Font("Arial", Font.BOLD, 24)); + this.add(label, BorderLayout.NORTH); + + // Tabelle vorbereiten + String[] columns = {"Bestell-ID", "Kunde", "Artikel", "Menge"}; + tableModel = new DefaultTableModel(columns, 0); + table = new JTable(tableModel); + loadOrders(); + JScrollPane scrollPane = new JScrollPane(table); + this.add(scrollPane, BorderLayout.CENTER); + + // Steuerpanel unten + JPanel controlPanel = new JPanel(); + JButton addButton = new JButton("Hinzufügen"); + JButton editButton = new JButton("Bearbeiten"); + JButton deleteButton = new JButton("Löschen"); + JButton backButton = new JButton("Zurück"); + controlPanel.add(addButton); + controlPanel.add(editButton); + controlPanel.add(deleteButton); + controlPanel.add(backButton); + this.add(controlPanel, BorderLayout.SOUTH); + + // ActionListener für Buttons + addButton.addActionListener(e -> addOrder()); + editButton.addActionListener(e -> editOrder()); + deleteButton.addActionListener(e -> deleteOrder()); + backButton.addActionListener(e -> switchPanel(frame, mainPanel)); + } + + private void switchPanel(JFrame frame, JPanel mainPanel) { + frame.getContentPane().removeAll(); + frame.add(mainPanel, BorderLayout.CENTER); + frame.revalidate(); + frame.repaint(); + } + + private void loadOrders() { + orders = new ArrayList<>(); + tableModel.setRowCount(0); + try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { + String line; + while ((line = reader.readLine()) != null) { + if (!line.trim().isEmpty()) { + String[] data = line.split(","); + if (data.length >= 4) { + orders.add(data); + tableModel.addRow(data); + } + } + } + } catch (IOException e) { + JOptionPane.showMessageDialog(this, "Fehler beim Laden der Bestellungen!", "Fehler", JOptionPane.ERROR_MESSAGE); + } + } + + private void saveOrders() { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) { + for (String[] order : orders) { + writer.write(String.join(",", order)); + writer.newLine(); + } + } catch (IOException e) { + JOptionPane.showMessageDialog(this, "Fehler beim Speichern der Bestellungen!", "Fehler", JOptionPane.ERROR_MESSAGE); + } + } + + private void addOrder() { + JTextField idField = new JTextField(); + JTextField customerField = new JTextField(); + JTextField itemField = new JTextField(); + JTextField quantityField = new JTextField(); + + Object[] fields = { + "Bestell-ID:", idField, + "Kunde:", customerField, + "Artikel:", itemField, + "Menge:", quantityField + }; + + int option = JOptionPane.showConfirmDialog(this, fields, "Bestellung hinzufügen", JOptionPane.OK_CANCEL_OPTION); + if (option == JOptionPane.OK_OPTION) { + String[] order = {idField.getText(), customerField.getText(), itemField.getText(), quantityField.getText()}; + orders.add(order); + tableModel.addRow(order); + saveOrders(); + } + } + + private void editOrder() { + int selectedRow = table.getSelectedRow(); + if (selectedRow == -1) { + JOptionPane.showMessageDialog(this, "Bitte wählen Sie eine Bestellung aus!", "Warnung", JOptionPane.WARNING_MESSAGE); + return; + } + + String[] order = orders.get(selectedRow); + + JTextField idField = new JTextField(order[0]); + JTextField customerField = new JTextField(order[1]); + JTextField itemField = new JTextField(order[2]); + JTextField quantityField = new JTextField(order[3]); + + Object[] fields = { + "Bestell-ID:", idField, + "Kunde:", customerField, + "Artikel:", itemField, + "Menge:", quantityField + }; + + int option = JOptionPane.showConfirmDialog(this, fields, "Bestellung bearbeiten", JOptionPane.OK_CANCEL_OPTION); + if (option == JOptionPane.OK_OPTION) { + String[] updatedOrder = {idField.getText(), customerField.getText(), itemField.getText(), quantityField.getText()}; + orders.set(selectedRow, updatedOrder); + tableModel.removeRow(selectedRow); + tableModel.insertRow(selectedRow, updatedOrder); + saveOrders(); + } + } + + private void deleteOrder() { + int selectedRow = table.getSelectedRow(); + if (selectedRow == -1) { + JOptionPane.showMessageDialog(this, "Bitte wählen Sie eine Bestellung aus!", "Warnung", JOptionPane.WARNING_MESSAGE); + return; + } + + int option = JOptionPane.showConfirmDialog(this, "Möchten Sie diese Bestellung wirklich löschen?", "Bestätigung", JOptionPane.YES_NO_OPTION); + if (option == JOptionPane.YES_OPTION) { + orders.remove(selectedRow); + tableModel.removeRow(selectedRow); + saveOrders(); + } + } +} + diff --git a/Restaurantverwaltung/src/userinterface/ReservationPanel.java b/Restaurantverwaltung/src/userinterface/ReservationPanel.java new file mode 100644 index 0000000..2889036 --- /dev/null +++ b/Restaurantverwaltung/src/userinterface/ReservationPanel.java @@ -0,0 +1,153 @@ +package userinterface; + +import javax.swing.*; +import javax.swing.table.DefaultTableModel; +import java.awt.*; +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public class ReservationPanel extends JPanel { + private DefaultTableModel tableModel; + private JTable table; + private List reservations; + private final String filePath = "src/Reservations.txt"; + + public ReservationPanel(JFrame frame, JPanel mainPanel) { + this.setLayout(new BorderLayout()); + JLabel label = new JLabel("Reservierungen verwalten", SwingConstants.CENTER); + label.setFont(new Font("Arial", Font.BOLD, 24)); + this.add(label, BorderLayout.NORTH); + + // Tabelle vorbereiten + String[] columns = {"Name", "Datum", "Zeit", "Personen"}; + tableModel = new DefaultTableModel(columns, 0); + table = new JTable(tableModel); + loadReservations(); + JScrollPane scrollPane = new JScrollPane(table); + this.add(scrollPane, BorderLayout.CENTER); + + // Steuerpanel unten + JPanel controlPanel = new JPanel(); + JButton addButton = new JButton("Hinzufügen"); + JButton editButton = new JButton("Bearbeiten"); + JButton deleteButton = new JButton("Stornieren"); + JButton backButton = new JButton("Zurück"); + controlPanel.add(addButton); + controlPanel.add(editButton); + controlPanel.add(deleteButton); + controlPanel.add(backButton); + this.add(controlPanel, BorderLayout.SOUTH); + + // ActionListener für Buttons + addButton.addActionListener(e -> addReservation()); + editButton.addActionListener(e -> editReservation()); + deleteButton.addActionListener(e -> deleteReservation()); + backButton.addActionListener(e -> switchPanel(frame, mainPanel)); + } + + private void switchPanel(JFrame frame, JPanel mainPanel) { + frame.getContentPane().removeAll(); + frame.add(mainPanel, BorderLayout.CENTER); + frame.revalidate(); + frame.repaint(); + } + + private void loadReservations() { + reservations = new ArrayList<>(); + tableModel.setRowCount(0); + try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { + String line; + while ((line = reader.readLine()) != null) { + if (!line.trim().isEmpty()) { + String[] data = line.split(","); + if (data.length >= 4) { + reservations.add(data); + tableModel.addRow(data); + } + } + } + } catch (IOException e) { + JOptionPane.showMessageDialog(this, "Fehler beim Laden der Reservierungen!", "Fehler", JOptionPane.ERROR_MESSAGE); + } + } + + private void saveReservations() { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) { + for (String[] reservation : reservations) { + writer.write(String.join(",", reservation)); + writer.newLine(); + } + } catch (IOException e) { + JOptionPane.showMessageDialog(this, "Fehler beim Speichern der Reservierungen!", "Fehler", JOptionPane.ERROR_MESSAGE); + } + } + + private void addReservation() { + JTextField nameField = new JTextField(); + JTextField dateField = new JTextField(); + JTextField timeField = new JTextField(); + JTextField peopleField = new JTextField(); + + Object[] fields = { + "Name:", nameField, + "Datum (YYYY-MM-DD):", dateField, + "Zeit (HH:MM):", timeField, + "Personen:", peopleField + }; + + int option = JOptionPane.showConfirmDialog(this, fields, "Reservierung hinzufügen", JOptionPane.OK_CANCEL_OPTION); + if (option == JOptionPane.OK_OPTION) { + String[] reservation = {nameField.getText(), dateField.getText(), timeField.getText(), peopleField.getText()}; + reservations.add(reservation); + tableModel.addRow(reservation); + saveReservations(); + } + } + + private void editReservation() { + int selectedRow = table.getSelectedRow(); + if (selectedRow == -1) { + JOptionPane.showMessageDialog(this, "Bitte wählen Sie eine Reservierung aus!", "Warnung", JOptionPane.WARNING_MESSAGE); + return; + } + + String[] reservation = reservations.get(selectedRow); + + JTextField nameField = new JTextField(reservation[0]); + JTextField dateField = new JTextField(reservation[1]); + JTextField timeField = new JTextField(reservation[2]); + JTextField peopleField = new JTextField(reservation[3]); + + Object[] fields = { + "Name:", nameField, + "Datum (YYYY-MM-DD):", dateField, + "Zeit (HH:MM):", timeField, + "Personen:", peopleField + }; + + int option = JOptionPane.showConfirmDialog(this, fields, "Reservierung bearbeiten", JOptionPane.OK_CANCEL_OPTION); + if (option == JOptionPane.OK_OPTION) { + String[] updatedReservation = {nameField.getText(), dateField.getText(), timeField.getText(), peopleField.getText()}; + reservations.set(selectedRow, updatedReservation); + tableModel.removeRow(selectedRow); + tableModel.insertRow(selectedRow, updatedReservation); + saveReservations(); + } + } + + private void deleteReservation() { + int selectedRow = table.getSelectedRow(); + if (selectedRow == -1) { + JOptionPane.showMessageDialog(this, "Bitte wählen Sie eine Reservierung aus!", "Warnung", JOptionPane.WARNING_MESSAGE); + return; + } + + int option = JOptionPane.showConfirmDialog(this, "Möchten Sie diese Reservierung wirklich stornieren?", "Bestätigung", JOptionPane.YES_NO_OPTION); + if (option == JOptionPane.YES_OPTION) { + reservations.remove(selectedRow); + tableModel.removeRow(selectedRow); + saveReservations(); + } + } +} diff --git a/Restaurantverwaltung/src/users.txt b/Restaurantverwaltung/src/users.txt index 8c52d00..f9d6d2d 100644 --- a/Restaurantverwaltung/src/users.txt +++ b/Restaurantverwaltung/src/users.txt @@ -1,4 +1,4 @@ -Dimitry:1234:MANAGER -Abbas:1234:MANAGER -Ananas Kopf:Bananenbieger:KITCHEN -Arim:1234:MANAGER +Dimitry:MANAGER:1234 +Abbas:MANAGER:1234 +Ananas Kopf:KITCHEN:1234 +Arim:MANAGER:1234