diff --git a/QualifierTeil2/PKW.java b/QualifierTeil2/PKW.java index d09c935..9ec206a 100644 --- a/QualifierTeil2/PKW.java +++ b/QualifierTeil2/PKW.java @@ -6,13 +6,15 @@ import java.util.Random; public class PKW { private String kennzeichen; - Date einfahrt; + Date einfahrt; private boolean hatBezahlt; + double gebuehrenkonto; public PKW() { this.kennzeichen = generiereKennzeichen(); this.einfahrt = new Date(); this.hatBezahlt = false; + this.gebuehrenkonto = 0; } public String getKennzeichen() { @@ -27,6 +29,14 @@ public class PKW { return gebeAktuelleZeit(); } + public double getGebuehrenkonto() { + return gebuehrenkonto; + } + + public void setGebuehrenkonto(double gebuehrenkonto) { + this.gebuehrenkonto = gebuehrenkonto; + } + public boolean hatBezahlt() { return hatBezahlt; } diff --git a/QualifierTeil2/Parkhaus.java b/QualifierTeil2/Parkhaus.java index c41eea2..0a22395 100644 --- a/QualifierTeil2/Parkhaus.java +++ b/QualifierTeil2/Parkhaus.java @@ -1,4 +1,5 @@ package QualifierTeil2; + import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -18,7 +19,7 @@ public class Parkhaus { return parkendePkws; } - public static int randomAnzahlParkplätze(){ + public static int randomAnzahlParkplätze() { return (int) (Math.random() * 200) + 1; } @@ -52,10 +53,34 @@ public class Parkhaus { } if (zuEntfernen != null) { - parkendePkws.remove(zuEntfernen); - this.kapazitaet++; - this.belegt--; - System.out.println("PKW mit Kennzeichen " + kennzeichen + " hat die Gebühren bezahlt und darf rausfahren."); + // Berechnung der Gebühren + double gebuehren = berechneGebuehren(kennzeichen, new Date()); // Nimmt die aktuelle Zeit an + + if (gebuehren > 0) { + // Kreditkartenvalidierung vor Ausfahrt + Scanner scanner = new Scanner(System.in); + System.out.println("Bitte geben Sie Ihre 16-stellige VISA-Kreditkartennummer ein:"); + String kreditkartenNummer = scanner.nextLine(); + + if (pruefeKreditkarte(kreditkartenNummer)) { + System.out.println("Zahlung erfolgreich. Sie dürfen ausfahren."); + zuEntfernen.setGebuehrenkonto(0); // Gebühren auf 0 setzen + parkendePkws.remove(zuEntfernen); + this.kapazitaet++; + this.belegt--; + System.out.println("PKW mit Kennzeichen " + kennzeichen + " hat die Gebühren bezahlt und darf rausfahren."); + } else { + System.out.println("Ungültige Kreditkartennummer. Zahlung fehlgeschlagen. Ausfahrt verweigert."); + zuEntfernen.setGebuehrenkonto(gebuehren); + System.out.println("Gebührenkonto: " + zuEntfernen.getGebuehrenkonto()); + } + } else { + // Gebührenfrei (unter 15 Minuten oder andere Ausnahme) + parkendePkws.remove(zuEntfernen); + this.kapazitaet++; + this.belegt--; + System.out.println("PKW mit Kennzeichen " + kennzeichen + " darf gebührenfrei ausfahren."); + } } else { System.out.println("Kein PKW mit diesem Kennzeichen gefunden."); } @@ -93,46 +118,45 @@ public class Parkhaus { return minDiff; } - public double berechneGebuehren(String kennzeichen, Date ausfahrt){ - long parkdauer = berechneParkdauer(kennzeichen, ausfahrt); - double gebuehr = 0; + public double berechneGebuehren(String kennzeichen, Date ausfahrt) { + long parkdauer = berechneParkdauer(kennzeichen, ausfahrt); + double gebuehr = 0; - // Falls die Parkdauer 15 Minuten oder weniger beträgt, ist das Parken kostenlos - if (parkdauer <= 15) { - parkdauer = 0; - gebuehr =0; - - } - - // Parkdauer nach den 15 Minuten - long parkdauerOhneFreiminuten = parkdauer - 15; - - // Tageslimit: Maximal 15 Euro pro Tag - if (parkdauerOhneFreiminuten == 1440){ - gebuehr = 1500; - parkdauerOhneFreiminuten = 0; - - } - - // 1 Euro pro angefangene Stunde - if (parkdauerOhneFreiminuten > 0 && parkdauerOhneFreiminuten < 1440 ){ - while(parkdauerOhneFreiminuten > 0){ - gebuehr += 100; - parkdauerOhneFreiminuten-=60; - } - } - - - - // Prüfe, ob es sich um ein E-Auto handelt (Kennzeichen endet mit "E") - if (kennzeichen.endsWith("E")) { - gebuehr *= 0.8; // 20% Rabatt für E-Autos - } - - return gebuehr; + // Falls die Parkdauer 15 Minuten oder weniger beträgt, ist das Parken kostenlos + if (parkdauer <= 15) { + parkdauer = 0; + gebuehr = 0; } + // Parkdauer nach den 15 Minuten + long parkdauerOhneFreiminuten = parkdauer - 15; + + // Tageslimit: Maximal 15 Euro pro Tag + if (parkdauerOhneFreiminuten == 1440) { + gebuehr = 1500; + parkdauerOhneFreiminuten = 0; + + } + + // 1 Euro pro angefangene Stunde + if (parkdauerOhneFreiminuten > 0 && parkdauerOhneFreiminuten < 1440) { + while (parkdauerOhneFreiminuten > 0) { + gebuehr += 100; + parkdauerOhneFreiminuten -= 60; + } + } + + + // Prüfe, ob es sich um ein E-Auto handelt (Kennzeichen endet mit "E") + if (kennzeichen.endsWith("E")) { + gebuehr *= 0.8; // 20% Rabatt für E-Autos + } + + return gebuehr; + + } + // Methode zur Überprüfung der Kreditkartennummer mit dem Luhn-Algorithmus public boolean pruefeKreditkarte(String kreditkartenNummer) { if (kreditkartenNummer.length() != 16 || !kreditkartenNummer.startsWith("4")) { @@ -155,7 +179,7 @@ public class Parkhaus { return (sum % 10 == 0); } - } +} diff --git a/QualifierTeil2/UI.java b/QualifierTeil2/UI.java index 9a32e72..e01bc4c 100644 --- a/QualifierTeil2/UI.java +++ b/QualifierTeil2/UI.java @@ -54,17 +54,8 @@ public class UI { System.out.println("Parkdauer in Minuten: " + parkhaus1.berechneParkdauer(kennzeichen, ausfahrt)); System.out.println("Parkgebühren in Cent: " + parkhaus1.berechneGebuehren(kennzeichen, ausfahrt)); - System.out.print("Bitte geben Sie Ihre 16-stellige VISA-Kreditkartennummer ein: "); - String kreditkartennummer = scan.nextLine(); + parkhaus1.ausfahren(kennzeichen); - // Prüfziffer der Kreditkarte validieren - if (parkhaus1.pruefeKreditkarte(kreditkartennummer)) { - System.out.println("Die Kreditkartennummer ist gültig."); - parkhaus1.ausfahren(kennzeichen); - } else { - System.out.println("Ungültige Kreditkartennummer. Zahlung fehlgeschlagen."); - - } }