From 50cb027cbe7b6dbb317744ba37a704134bc1be4d Mon Sep 17 00:00:00 2001 From: PC Date: Sun, 12 Jan 2025 19:19:48 +0100 Subject: [PATCH] =?UTF-8?q?Reservierungen=20k=C3=B6nnen=20nun=20mit=20Uhrz?= =?UTF-8?q?eit=20gespeichert=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Restaurantverwaltung/src/Reservation.java | 40 ++++-- .../src/ReservationManager.java | 85 ++++++++---- Restaurantverwaltung/src/Reservations.txt | 7 +- .../src/SystemController.java | 124 ++++++++++-------- 4 files changed, 168 insertions(+), 88 deletions(-) diff --git a/Restaurantverwaltung/src/Reservation.java b/Restaurantverwaltung/src/Reservation.java index 108fa94..39203ed 100644 --- a/Restaurantverwaltung/src/Reservation.java +++ b/Restaurantverwaltung/src/Reservation.java @@ -1,29 +1,49 @@ -public class Reservation implements Comparable{ +import java.time.LocalTime; + +public class Reservation { private int tableNumber; private String customerName; + private LocalTime reservationTime; - public Reservation(int tableNumber, String customerName) { + public Reservation(int tableNumber, String customerName, LocalTime reservationTime) { this.tableNumber = tableNumber; this.customerName = customerName; + this.reservationTime = reservationTime; } public int getTableNumber() { return tableNumber; } - public void setTableNumber(int tableNumber) { - this.tableNumber = tableNumber; - } - public String getCustomerName() { return customerName; } - public void setCustomerName(String customerName) { - this.customerName = customerName; + public LocalTime getReservationTime() { + return reservationTime; } + + public void setCustomerName(String name) { + this.customerName = name; + } + @Override - public int compareTo(Reservation other) { - return Integer.compare(this.tableNumber, other.tableNumber); + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + + Reservation that = (Reservation) obj; + return tableNumber == that.tableNumber && + reservationTime.equals(that.reservationTime); + } + + @Override + public int hashCode() { + return tableNumber * 31 + reservationTime.hashCode(); + } + + @Override + public String toString() { + return "Table: " + tableNumber + ", Name: " + customerName + ", Time: " + reservationTime; } } diff --git a/Restaurantverwaltung/src/ReservationManager.java b/Restaurantverwaltung/src/ReservationManager.java index 4a09976..ad2e72f 100644 --- a/Restaurantverwaltung/src/ReservationManager.java +++ b/Restaurantverwaltung/src/ReservationManager.java @@ -1,44 +1,70 @@ import java.io.*; +import java.time.LocalTime; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class ReservationManager { private List reservations; - private final String filePath = "src/Reservations.txt"; + private final String filePath = "src/Reservations.txt"; public ReservationManager() { reservations = new ArrayList<>(); - loadReservations(); + loadReservations(); } - public void createReservation(int tableNumber, String customerName) { - Reservation reservation = new Reservation(tableNumber, customerName); - reservations.add(reservation); - saveReservations(); // Reservierungen nach jedem Erstellen speichern + public void createReservation(int tableNumber, String customerName, LocalTime reservationTime) { + if (isTableAvailable(tableNumber, reservationTime)) { + Reservation reservation = new Reservation(tableNumber, customerName, reservationTime); + reservations.add(reservation); + saveReservations(); + System.out.println("Reservierung erfolgreich: " + reservation); + } else { + System.out.println("Der Tisch " + tableNumber + " ist um " + reservationTime + " bereits reserviert."); + } } public void editReservation(int tableNumber, String newCustomerName) { for (Reservation reservation : reservations) { if (reservation.getTableNumber() == tableNumber) { reservation.setCustomerName(newCustomerName); - saveReservations(); // Reservierungen nach Bearbeitung speichern - break; + saveReservations(); + System.out.println("Reservierung aktualisiert: " + reservation); + return; } } + System.out.println("Keine Reservierung für Tisch " + tableNumber + " gefunden."); } - public void cancelReservation(int tableNumber) { - reservations.removeIf(reservation -> reservation.getTableNumber() == tableNumber); - saveReservations(); + public void cancelReservation(int tableNumber, LocalTime reservationTime) { + reservations.removeIf(reservation -> + reservation.getTableNumber() == tableNumber && + reservation.getReservationTime().equals(reservationTime)); + saveReservations(); + System.out.println("Reservierung für Tisch " + tableNumber + " um " + reservationTime + " wurde storniert."); } + private boolean isTableAvailable(int tableNumber, LocalTime reservationTime) { + for (Reservation reservation : reservations) { + if (reservation.getTableNumber() == tableNumber) { + LocalTime existingTime = reservation.getReservationTime(); + if (!reservationTime.isBefore(existingTime.minusMinutes(119)) && + !reservationTime.isAfter(existingTime.plusMinutes(119))) { + return false; + } + } + } + return true; + } + + private void saveReservations() { try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) { for (Reservation reservation : reservations) { - writer.write(reservation.getTableNumber() + "," + reservation.getCustomerName()); - writer.newLine(); + writer.write(reservation.getTableNumber() + "," + + reservation.getCustomerName() + "," + + reservation.getReservationTime()); + writer.newLine(); } } catch (IOException e) { e.printStackTrace(); @@ -50,13 +76,20 @@ public class ReservationManager { String line; while ((line = reader.readLine()) != null) { String[] data = line.split(","); + if (data.length < 3) { + System.out.println("Ungültiger Eintrag in der Datei: " + line); + continue; + } int tableNumber = Integer.parseInt(data[0]); String customerName = data[1]; - Reservation reservation = new Reservation(tableNumber, customerName); + LocalTime reservationTime = LocalTime.parse(data[2]); + Reservation reservation = new Reservation(tableNumber, customerName, reservationTime); reservations.add(reservation); } } catch (IOException e) { e.printStackTrace(); + } catch (Exception e) { + System.out.println("Fehler beim Laden von Reservierungen: " + e.getMessage()); } } @@ -65,13 +98,19 @@ public class ReservationManager { } public void displayTableOverview() { - if (reservations.isEmpty()) { - System.out.println("Keine Reservierungen vorhanden."); - } else { - Collections.sort(reservations); - for (Reservation reservation : reservations) { - System.out.println("Tischnummer: " + reservation.getTableNumber() + " | Kundenname: " + reservation.getCustomerName()); - } - } + if (reservations.isEmpty()) { + System.out.println("Keine Reservierungen vorhanden."); + } else { + reservations.sort((r1, r2) -> { + if (r1.getTableNumber() != r2.getTableNumber()) { + return Integer.compare(r1.getTableNumber(), r2.getTableNumber()); + } + return r1.getReservationTime().compareTo(r2.getReservationTime()); + }); + + for (Reservation reservation : reservations) { + System.out.println(reservation); + } + } } } diff --git a/Restaurantverwaltung/src/Reservations.txt b/Restaurantverwaltung/src/Reservations.txt index b87976d..d8dd0bf 100644 --- a/Restaurantverwaltung/src/Reservations.txt +++ b/Restaurantverwaltung/src/Reservations.txt @@ -1,2 +1,5 @@ -1,Dimimtry -2,Ali und Arim +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 51856d4..f75577d 100644 --- a/Restaurantverwaltung/src/SystemController.java +++ b/Restaurantverwaltung/src/SystemController.java @@ -1,5 +1,6 @@ import java.util.*; import java.io.*; +import java.time.LocalTime; class SystemController { private Scanner scanner = new Scanner(System.in); @@ -22,6 +23,7 @@ class SystemController { loadAbsencesFromFile(); loadFeedbacksFromFile(); inventory = new Inventory(financialManager); + inventory.loadStockFromFile(); } public void startSystem() { @@ -114,70 +116,86 @@ class SystemController { } private void manageReservations(User user) { - boolean managingReservations = true; - 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."); - } - } + boolean managingReservations = true; + 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."); + } + } } private void createReservation() { - System.out.print("Tischnummer: "); - int tableNumber = scanner.nextInt(); - scanner.nextLine(); - System.out.print("Kundenname: "); - String customerName = scanner.nextLine(); - reservationManager.createReservation(tableNumber, customerName); + System.out.print("Tischnummer: "); + int tableNumber = scanner.nextInt(); + scanner.nextLine(); + System.out.print("Kundenname: "); + String customerName = scanner.nextLine(); + System.out.print("Uhrzeit der Reservierung (HH:mm): "); + String timeInput = scanner.nextLine(); + try { + LocalTime reservationTime = LocalTime.parse(timeInput); + reservationManager.createReservation(tableNumber, customerName, reservationTime); + } catch (Exception e) { + System.out.println("Ungültiges Zeitformat. Bitte HH:mm verwenden."); + } } private void editReservation() { - System.out.print("Tischnummer der Reservierung: "); - int tableNumber = scanner.nextInt(); - scanner.nextLine(); - System.out.print("Neuer Kundenname: "); - String newCustomerName = scanner.nextLine(); - reservationManager.editReservation(tableNumber, newCustomerName); + System.out.print("Tischnummer der Reservierung: "); + int tableNumber = scanner.nextInt(); + scanner.nextLine(); + System.out.print("Neuer Kundenname: "); + String newCustomerName = scanner.nextLine(); + reservationManager.editReservation(tableNumber, newCustomerName); } private void cancelReservation() { - System.out.print("Tischnummer der Reservierung: "); - int tableNumber = scanner.nextInt(); - reservationManager.cancelReservation(tableNumber); + System.out.print("Tischnummer der Reservierung: "); + int tableNumber = scanner.nextInt(); + scanner.nextLine(); + System.out.print("Uhrzeit der Reservierung (HH:mm): "); + String timeInput = scanner.nextLine(); + try { + LocalTime reservationTime = LocalTime.parse(timeInput); + reservationManager.cancelReservation(tableNumber, reservationTime); + } catch (Exception e) { + System.out.println("Ungültiges Zeitformat. Bitte HH:mm verwenden."); + } } + private void manageInventory() { boolean managingInventory = true; while (managingInventory) {