From 1b028fd1cf21fae60529d8fea4278aa72b7a285a Mon Sep 17 00:00:00 2001 From: 3009594 Date: Mon, 7 Oct 2024 23:42:44 +0200 Subject: [PATCH] =?UTF-8?q?Jtest=20f=C3=BCr=20Auto=20mit=20Schulden=20und?= =?UTF-8?q?=20nachuzahlung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Parkhaus/Fahrzeug.java | 18 +++++-- src/Parkhaus/JTest_AutoMitSchulden.java | 52 +++++++++++++++++++ src/Parkhaus/Parkhaus.java | 66 ++++++++++++++++++++----- src/Parkhaus/TextUI.java | 11 +++-- 4 files changed, 127 insertions(+), 20 deletions(-) create mode 100644 src/Parkhaus/JTest_AutoMitSchulden.java diff --git a/src/Parkhaus/Fahrzeug.java b/src/Parkhaus/Fahrzeug.java index e66665f..e0ad326 100644 --- a/src/Parkhaus/Fahrzeug.java +++ b/src/Parkhaus/Fahrzeug.java @@ -21,7 +21,15 @@ public class Fahrzeug { private double betrag; Fahrzeug() { - this(kennzeichenzufaelliggenerieren.kennzeichengenerieren(),new Date()); + this(kennzeichenzufaelliggenerieren.kennzeichengenerieren(), new Date()); + } + + Fahrzeug(String kennzeichen) { + this(kennzeichen, new Date()); + } + + Fahrzeug(Date einfahrt) { + this(kennzeichenzufaelliggenerieren.kennzeichengenerieren(), einfahrt); } Fahrzeug(String kennzeichen, Date einfahrt) { @@ -46,6 +54,10 @@ public class Fahrzeug { return einfahrt; } + public void setEinfahrt(Date einfahrt) { + this.einfahrt = einfahrt; + } + public Date getAusfahrt() { return ausfahrt; } @@ -67,7 +79,7 @@ public class Fahrzeug { } public void setBetrag(double betrag) { - this.betrag = betrag; + this.betrag += betrag; } public boolean IstVerschuldet() { @@ -77,7 +89,5 @@ public class Fahrzeug { public void setIstVerschuldet(boolean istVerschuldet) { this.istVerschuldet = istVerschuldet; } - - } diff --git a/src/Parkhaus/JTest_AutoMitSchulden.java b/src/Parkhaus/JTest_AutoMitSchulden.java new file mode 100644 index 0000000..5f7bfe9 --- /dev/null +++ b/src/Parkhaus/JTest_AutoMitSchulden.java @@ -0,0 +1,52 @@ +package Parkhaus; + +import static org.junit.jupiter.api.Assertions.*; + +import java.text.ParseException; +import java.text.SimpleDateFormat; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class JTest_AutoMitSchulden { + + private Parkhaus parkhaus; + private SimpleDateFormat sdf; + + @BeforeEach + void start() throws ParseException { + parkhaus = new Parkhaus(); + sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); + } + + + @Test + public void test_AutoMitSchulden() throws Exception { + + String kennzeichen = "MA-SH 4077"; + String einfahrt = "01.10.2024, 12:30"; + String ausfahrt = "01.10.2024, 13:00"; + + parkhaus.einfahren(kennzeichen, einfahrt); + parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt); + parkhaus.setVerschuldet(kennzeichen); + parkhaus.ausfahren(kennzeichen, ausfahrt); + + einfahrt = "01.10.2024, 13:30"; + ausfahrt = "01.10.2024, 14:00"; + parkhaus.einfahren(kennzeichen, einfahrt); + parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt); + parkhaus.setVerschuldet(kennzeichen); + parkhaus.ausfahren(kennzeichen, ausfahrt); + + einfahrt = "01.10.2024, 14:30"; + ausfahrt = "01.10.2024, 15:00"; + parkhaus.einfahren(kennzeichen, einfahrt); + parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt); + parkhaus.setBezahlt(kennzeichen); + parkhaus.ausfahren(kennzeichen, ausfahrt); + + + } + +} diff --git a/src/Parkhaus/Parkhaus.java b/src/Parkhaus/Parkhaus.java index e3210a1..6930b87 100644 --- a/src/Parkhaus/Parkhaus.java +++ b/src/Parkhaus/Parkhaus.java @@ -5,6 +5,8 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.HashSet; +import java.util.Set; /* Parkhaus klasse * - Extern klasse dient als System @@ -13,17 +15,17 @@ import java.util.Date; */ public class Parkhaus { private ArrayList fahrzeuge; - private ArrayList fahrzeugeMitSchulden; + private Set fahrzeugeMitSchulden; private int maxPlaetze; private SimpleDateFormat sdf; private Fahrzeug fahrzeug; private double betragAktuellesAuto; Parkhaus() { - fahrzeuge = new ArrayList<>(); - fahrzeugeMitSchulden = new ArrayList<>(); - maxPlaetze = 180; - sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); + this.fahrzeuge = new ArrayList<>(); + this.fahrzeugeMitSchulden = new HashSet<>(); + this.maxPlaetze = 180; + this.sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); } public String einfahren(String kennzeichen, String einfahrtzeit) throws ParseException { @@ -31,12 +33,14 @@ public class Parkhaus { if (kennzeichen.isEmpty() && einfahrtzeit.isEmpty()) fahrzeug = new Fahrzeug(); - + else if (kennzeichen.isEmpty()) + fahrzeug = new Fahrzeug(einfahrtzeit); + else if (einfahrtzeit.isEmpty()) + fahrzeug = new Fahrzeug(kennzeichen); else { einfahrt = sdf.parse(einfahrtzeit); fahrzeug = new Fahrzeug(kennzeichen, einfahrt); } - fahrzeuge.add(fahrzeug); // reduziere ich die Anzahl der verfügbare Parkplätze im Parkhaus @@ -70,8 +74,9 @@ public class Parkhaus { int maxTagBetrag = 15; betragAktuellesAuto = 0; - // Erstellung von Calendar-Objekten für Einfahrt und Ausfahrt + //gibt eine Kalenderinstanz zurück, die auf das aktuelle Datum und die Uhrzeit eingestellt ist Calendar calEinfahrt = Calendar.getInstance(); + calEinfahrt.setTime(einfahrt); Calendar calAusfahrt = Calendar.getInstance(); @@ -94,8 +99,11 @@ public class Parkhaus { } if (isEauto) betragAktuellesAuto -= rabattFuerEauto(betragAktuellesAuto); - + + betragAktuellesAuto += sendSchulden(kennzeichen); + fahrzeug.setBetrag(betragAktuellesAuto); + System.out.println("Betrag: " + fahrzeug.getBetrag()); return fahrzeug.getBetrag(); } @@ -120,22 +128,50 @@ public class Parkhaus { return false; } + + public String getkennzeichenAktuellesAuto() { + return this.fahrzeug.getKennzeichen(); + } public boolean setBezahlt(String kennzeichen) throws AutoNichtGefundenException { fahrzeug = findeFahrzeug(kennzeichen); fahrzeug.setBezahlt(true); fahrzeug.setIstVerschuldet(false); + if (fahrzeugeMitSchulden.contains(fahrzeug)) + fahrzeugeMitSchulden.remove(fahrzeug); + return fahrzeug.isBezahlt(); } public boolean setVerschuldet(String kennzeichen) throws AutoNichtGefundenException { + /* - Speichere das Auto, welches Schulden hat + * - Wenn das Auto nochmal Schuldne hat, + * lösche das alte Objekt und speichere das neue mit dem neuen Betrag + * + */ fahrzeug = findeFahrzeug(kennzeichen); - fahrzeug.setIstVerschuldet(true); - fahrzeug.setBezahlt(false); + fahrzeug.setIstVerschuldet(true); + fahrzeug.setBezahlt(false); + + Fahrzeug zuEntfernendesFahrzeug = null; + + for (Fahrzeug f : fahrzeugeMitSchulden) + if (f.getKennzeichen().equalsIgnoreCase(kennzeichen)) { + //Markiere das Auto, das wir löschen wollen + zuEntfernendesFahrzeug = f; + break; + } + + if (zuEntfernendesFahrzeug != null) { + fahrzeugeMitSchulden.remove(zuEntfernendesFahrzeug); + } + fahrzeugeMitSchulden.add(fahrzeug); + return fahrzeug.IstVerschuldet(); } + public boolean gebuerenNehmen(double betrag) { return betragAktuellesAuto == betrag; @@ -171,6 +207,14 @@ public class Parkhaus { return false; } + private double sendSchulden(String kennzeichen) { + for (Fahrzeug sc : fahrzeugeMitSchulden) + if (sc.getKennzeichen().equals(kennzeichen)) { + return sc.getBetrag(); + } + return 0.0; + } + public int getMaxPlaetze() { return maxPlaetze; } diff --git a/src/Parkhaus/TextUI.java b/src/Parkhaus/TextUI.java index 933db12..1e634e6 100644 --- a/src/Parkhaus/TextUI.java +++ b/src/Parkhaus/TextUI.java @@ -35,14 +35,15 @@ public class TextUI { switch (auswhal) { case "1": // Einfahren if (!system.checkParkplatze()) - System.out.println("Es gibt im Parkhaus keine genug Parkplätze"); + System.out.println("Es gibt im Parkhaus keine Parkplätze"); else { System.out.println("geben Sie bitte das Kennzeichen Ihres Autos ein (optional): "); + System.out.print("> "); kennzeichen = eingabe.nextLine(); if (system.checkSchulden(kennzeichen)) - System.out.println("Das Auto mit dem Kennzeichen: " + kennzeichen+ " ist im Parkhaus mit Schulden eingefahren!"); - System.out - .println("geben Sie nun bitte die Einfahrtszeit ein (oder lassen Sie das für das System):"); + System.out.println("Das Auto mit dem Kennzeichen: " + system.getkennzeichenAktuellesAuto() + " ist im Parkhaus mit Schulden eingefahren!"); + System.out.println("geben Sie nun bitte die Einfahrtszeit ein (oder lassen Sie das für das System):"); + System.out.print("> "); einfahrtzeit = eingabe.nextLine(); System.out.println(system.einfahren(kennzeichen, einfahrtzeit)); } @@ -96,7 +97,7 @@ public class TextUI { System.out.print(">"); ausfahrtzeit = eingabe.nextLine(); if (!system.ausfahren(kennzeichen, ausfahrtzeit)) - System.err.println("Das Auto mit dem Kennzeichen fährt ohne Zahlung aus"); + System.err.println("Das Auto mit dem Kennzeichen: " + system.getkennzeichenAktuellesAuto() + " fährt ohne Zahlung aus"); break; case "4": System.out.println("Das Programm wird beendet.");