diff --git a/src/Parkhaus/JTest_ausfahren.java b/src/Parkhaus/JTest_ausfahren.java new file mode 100644 index 0000000..270e76d --- /dev/null +++ b/src/Parkhaus/JTest_ausfahren.java @@ -0,0 +1,39 @@ +package Parkhaus; + + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.text.ParseException; +import java.text.SimpleDateFormat; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +class JTest_ausfahren { + 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_ausfahren() throws Exception { + String kennzeichen = "MA-SH 4077"; + String einfahrt = "01.10.2024, 14:30"; + String ausfahrt = "01.10.2024, 15:30"; + parkhaus.einfahren(kennzeichen, einfahrt); + + parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt); + + + assertTrue(parkhaus.checkVisakarteNummer("9823192757222993")); + assertTrue(parkhaus.setBezahlt(kennzeichen)); + assertTrue(parkhaus.gebuerenNehmen(1)); + + } + +} diff --git a/src/Parkhaus/Parkhaus.java b/src/Parkhaus/Parkhaus.java index f28ac09..fa13f79 100644 --- a/src/Parkhaus/Parkhaus.java +++ b/src/Parkhaus/Parkhaus.java @@ -17,6 +17,7 @@ public class Parkhaus { private int maxPlaetze; private SimpleDateFormat sdf; private Fahrzeug fahrzeug; + private double betragAktuellesAuto; Parkhaus() { fahrzeuge = new ArrayList<>(); @@ -65,7 +66,7 @@ public class Parkhaus { int inStunden = (int) Math.ceil(inMinuten / 60.0); int maxNachtBetrag = 5; int maxTagBetrag = 15; - double betrag = 0; + betragAktuellesAuto = 0; // Erstellung von Calendar-Objekten für Einfahrt und Ausfahrt Calendar calEinfahrt = Calendar.getInstance(); @@ -78,39 +79,68 @@ public class Parkhaus { int ausfahrtStunde = calAusfahrt.get(Calendar.HOUR_OF_DAY); if (inMinuten <= 15) - betrag = 0; + betragAktuellesAuto = 0; else if ((einfahrtStunde < 6 || einfahrtStunde >= 20) || (ausfahrtStunde < 6 || ausfahrtStunde >= 20)) - betrag = (inStunden <= maxNachtBetrag) ? inStunden : maxNachtBetrag; + betragAktuellesAuto = (inStunden <= maxNachtBetrag) ? inStunden : maxNachtBetrag; else { - betrag = inStunden; - if (betrag > maxTagBetrag) { - betrag = maxTagBetrag; + betragAktuellesAuto = inStunden; + if (betragAktuellesAuto > maxTagBetrag) { + betragAktuellesAuto = maxTagBetrag; } } if (isEauto) - betrag -= rabattFuerEauto(betrag); + betragAktuellesAuto -= rabattFuerEauto(betragAktuellesAuto); - fahrzeug.setBetrag(betrag); + fahrzeug.setBetrag(betragAktuellesAuto); return fahrzeug.getBetrag(); } + + public boolean ausfahren(String kennzeichen, String ausfahrtzeit) throws AutoNichtGefundenException, ParseException { + if (kennzeichen.isEmpty()) + throw new AutoNichtGefundenException("Sie müssen bitte das Kennzeichen Ihres Autos eingeben."); + + fahrzeug = findeFahrzeug(kennzeichen); + Date ausfahrt; + if (ausfahrtzeit.isEmpty()) { + String aktuelleZeitString = sdf.format(new Date()); + ausfahrt = sdf.parse(aktuelleZeitString); + } else + ausfahrt = sdf.parse(ausfahrtzeit); + + if (fahrzeug.isBezahlt() == true || fahrzeug.IstVerschuldet() == true) { + fahrzeuge.remove(fahrzeug); + maxPlaetze++; + return true; + } + + + return false; + } - public void setBezahlt(String kennzeichen) throws AutoNichtGefundenException { + public boolean setBezahlt(String kennzeichen) throws AutoNichtGefundenException { fahrzeug = findeFahrzeug(kennzeichen); fahrzeug.setBezahlt(true); fahrzeug.setIstVerschuldet(false); + return true; } - public void setVerschuldet(String kennzeichen) throws AutoNichtGefundenException { + public boolean setVerschuldet(String kennzeichen) throws AutoNichtGefundenException { fahrzeug = findeFahrzeug(kennzeichen); fahrzeug.setIstVerschuldet(true); fahrzeug.setBezahlt(false); fahrzeugeMitSchulden.add(fahrzeug); + return true; + } + + public boolean gebuerenNehmen(double betrag) { + + return betragAktuellesAuto == betrag; } @@ -148,23 +178,10 @@ public class Parkhaus { return false; } - - - // Getter methoden: - public ArrayList getFahrzeuge() { - return fahrzeuge; - } - - public ArrayList getFahrzeugeMitSchulden() { - return fahrzeugeMitSchulden; - } - public int getMaxPlaetze() { return maxPlaetze; } - - public SimpleDateFormat getSdf() { - return sdf; - } - + + + } \ No newline at end of file diff --git a/src/Parkhaus/TextUI.java b/src/Parkhaus/TextUI.java index 893b3e4..682edeb 100644 --- a/src/Parkhaus/TextUI.java +++ b/src/Parkhaus/TextUI.java @@ -53,6 +53,7 @@ public class TextUI { System.out.println("Geben Sie bitte die Ausfahrtzeit ein (oder lassen Sie das für das System)"); ausfahrtzeit = eingabe.nextLine(); betrag = system.berechneParkgebuehren(kennzeichen, ausfahrtzeit); + System.out.println("Ihr Betrag ist: " + betrag + "€"); if (betrag > 0.0) { String zahlungsOptions; System.out.println("Bitte wählen Sie ein Option aus, was Sie mit dem Ihrem Betrag machen möchten: "); @@ -66,13 +67,19 @@ public class TextUI { System.out.print(">"); visaKarteNummer = eingabe.nextLine().trim(); // Also wenn die Visakarte korrekt ist, markiert das System das Auto mit dem Kennzeichen als Bezahlt - if (system.checkVisakarteNummer(visaKarteNummer)) - system.setBezahlt(kennzeichen); + if (system.checkVisakarteNummer(visaKarteNummer)) + if (system.gebuerenNehmen(betrag)) { + system.setBezahlt(kennzeichen); + System.out.println("Ihre Auszahlung war erfolgreich"); + System.out.println("Vielen Dank"); + } + break; case "2": // System markiert das Auto als verschuldet und speichert es dann im System system.setVerschuldet(kennzeichen); + System.out.println("Vielen Dank"); break; default: System.out.println("Das war leider keine gültige Eingabe"); @@ -80,8 +87,14 @@ public class TextUI { } break; - case "3": - // TODO + case "3": // Ausfahren + System.out.println("Um ausfahren zu können, sollen Sie das Kennzeichen Ihres Auto sowie die Ausfahrtzeit eingeben" ); + System.out.print(">"); + kennzeichen = eingabe.nextLine(); + System.out.println("Geben Sie nun die Ausfahrtzeit an: "); + System.out.print(">"); + ausfahrtzeit = eingabe.nextLine(); + system.ausfahren(kennzeichen, ausfahrtzeit); break; case "4": // TODO