From ce1659df06d23884cac15278a508684d5ad0b5ff Mon Sep 17 00:00:00 2001 From: "Ioana P." <3015825@stud.hs-mannheim.de> Date: Tue, 8 Oct 2024 15:34:02 +0200 Subject: [PATCH] Verbesserungen --- QualifierTeil2/Parkhaus.java | 105 ++++++++++++--------- QualifierTeil2/visanummer.txt | 2 - andereDateien/Testdaten.txt | 7 ++ {QualifierTeil2 => andereDateien}/flow.txt | 0 4 files changed, 66 insertions(+), 48 deletions(-) delete mode 100644 QualifierTeil2/visanummer.txt create mode 100644 andereDateien/Testdaten.txt rename {QualifierTeil2 => andereDateien}/flow.txt (100%) diff --git a/QualifierTeil2/Parkhaus.java b/QualifierTeil2/Parkhaus.java index 9a93be1..e92bee0 100644 --- a/QualifierTeil2/Parkhaus.java +++ b/QualifierTeil2/Parkhaus.java @@ -32,7 +32,7 @@ public class Parkhaus { // Falls angegebenen PKW sich schon im Parkhaus befindet oder schonmal da war und Schulden hat if (existierenderPKW != null) { - System.out.println("Der PKW mit dem Kennzeichen " + kennzeichen + " hat noch Schulden in Höhe von " + existierenderPKW.getGebuehrenkonto() + " Cent."); + System.out.println("Der PKW mit dem Kennzeichen " + kennzeichen + " hat noch Schulden in Höhe von " + (existierenderPKW.getGebuehrenkonto() /100) + " Euro."); this.kapazitaetVerfuegbar--; this.belegt++; } else { @@ -45,7 +45,6 @@ public class Parkhaus { this.belegt++; System.out.println("Neuer PKW mit Kennzeichen " + kennzeichen + " eingefahren. Schulden: " + schulden + " Cent."); } - } @@ -98,8 +97,12 @@ public class Parkhaus { // Falls Gebühren vorhanden sind if (gesamtGebuehren > 0) { - System.out.println("Parkdauer in Minuten: " + berechneParkdauer(kennzeichen, ausfahrtZeit)); - System.out.println("Parkgebühren in Cent: " + zuEntfernen.getGebuehrenkonto()); + // Umwandlung von Minuten in Stunden und Minuten + long parkdauerMinuten = berechneParkdauer(kennzeichen,ausfahrtZeit); + long parkdauerStunden = parkdauerMinuten / 60; + long parkdauerVerbleibendeMinuten = parkdauerMinuten % 60; + System.out.println("Parkdauer: " + parkdauerStunden + " Stunden und " + parkdauerVerbleibendeMinuten + " Minuten."); + System.out.println("Parkgebühren: " + (zuEntfernen.getGebuehrenkonto() / 100.0) + " Euro"); // Kreditkartenvalidierung vor Ausfahrt @@ -115,7 +118,7 @@ public class Parkhaus { System.out.println("PKW mit Kennzeichen " + kennzeichen + " hat die Gebühren bezahlt und darf rausfahren.\n"); } else { System.out.println("Ungültige Kreditkartennummer. Zahlung fehlgeschlagen."); - System.out.println("Offenes Gebührenkonto: " + zuEntfernen.getGebuehrenkonto()); + System.out.println("Offenes Gebührenkonto: " + (zuEntfernen.getGebuehrenkonto() / 100.0) + " Euro"); } } else { // Gebührenfrei (unter 15 Minuten oder andere Ausnahme) @@ -135,7 +138,6 @@ public class Parkhaus { } } - public long berechneParkdauer(String kennzeichen, Date ausfahrt) { long minDiff = 0; @@ -146,11 +148,10 @@ public class Parkhaus { // Parkdauer in Minuten berechnen (Differenz zwischen Ausfahrt und Einfahrt) - minDiff = ((ausfahrt.getTime() - einfahrt.getTime())+1) / 60000; + minDiff = ((ausfahrt.getTime() - einfahrt.getTime())) / 60000; break; } } - return minDiff; } @@ -160,23 +161,18 @@ public class Parkhaus { // Falls die Parkdauer 15 Minuten oder weniger beträgt, ist das Parken kostenlos if (parkdauer <= 15) { - parkdauer = 0; - gebuehr = 0; + return 0; //Parken ist kostenlos } // 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) { + // Gebühren für die restliche Zeit unter 24 Stunden, wenn vorhanden + if (parkdauerOhneFreiminuten > 0) { + // Berechnung der Gebühren für die restlichen Minuten nach den vollen Tagen while (parkdauerOhneFreiminuten > 0) { - gebuehr += 100; + gebuehr += 100; // 1 Euro pro angefangene Stunde parkdauerOhneFreiminuten -= 60; } } @@ -184,6 +180,11 @@ public class Parkhaus { // Maximale Gebühren in der Nacht von 20 Uhr bis 6 Uhr gebuehr = berechneNachttarif(kennzeichen, gebuehr, ausfahrt); + // Hier wird die Gebühr auf maximal 15 Euro (1500 Cent) für den Tag gedeckelt + if (gebuehr > 1500) { + gebuehr = 1500; // Maximal 15 Euro pro Tag + } + // 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 @@ -241,41 +242,53 @@ public class Parkhaus { // Methode zur Berechnung der Sonderregel für in der Nacht von 20 Uhr bis 6 Uhr private double berechneNachttarif(String kennzeichen, double gebuehr, Date ausfahrt) { - Calendar cal = Calendar.getInstance(); - cal.setTime(ausfahrt); - - //Debugging - /*SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); - Date einfahrtszeit = null; - try { - // Beispiel für manuelle Eingabe, kann angepasst werden - einfahrtszeit = sdf.parse("01.10.2024, 20:00"); - ausfahrt = sdf.parse("02.10.2024, 02:00"); - } catch (ParseException e) { - throw new RuntimeException(e); - }*/ + Calendar calAusfahrt = Calendar.getInstance(); + calAusfahrt.setTime(ausfahrt); // Bestimme die Einfahrtszeit des Fahrzeugs - Date einfahrt = findeEinfahrtZeit(kennzeichen); // Methode zum Finden der Einfahrtszeit - Calendar einfahrtsCal = Calendar.getInstance(); - einfahrtsCal.setTime(einfahrt); + Date einfahrt = findeEinfahrtZeit(kennzeichen); // Methode zum Finden der Einfahrtszeit + Calendar calEinfahrt = Calendar.getInstance(); + calEinfahrt.setTime(einfahrt); - // Prüfe, ob sich ein Teil der Parkdauer im Zeitraum von 20:00 bis 6:00 Uhr befindet - while (einfahrtsCal.before(cal)) { - int stunde = einfahrtsCal.get(Calendar.HOUR_OF_DAY); - if (stunde >= 20 || stunde < 6) { - // Die Gebühren für jede angefangene Stunde in diesem Zeitraum dürfen maximal 5 Euro sein - if (gebuehr > 500) { - gebuehr = 500; // Maximal 5 Euro während der Nachtzeit - } + // Definiere die Nachtgrenzen: 20:00 Uhr bis 6:00 Uhr + Calendar startNacht = Calendar.getInstance(); + startNacht.setTime(einfahrt); + startNacht.set(Calendar.HOUR_OF_DAY, 20); // Nacht beginnt um 20:00 Uhr + startNacht.set(Calendar.MINUTE, 0); + + Calendar endeNacht = Calendar.getInstance(); + endeNacht.setTime(einfahrt); + endeNacht.set(Calendar.HOUR_OF_DAY, 6); // Nacht endet um 06:00 Uhr + endeNacht.add(Calendar.DATE, 1); // Geht auf den nächsten Tag*/ + + /*// Schritt 1: Berechne Gebühren bis 20 Uhr + while (calEinfahrt.before(startNacht) && calEinfahrt.before(calAusfahrt)) { + // Jede angefangene Stunde bis 20:00 Uhr kostet 1 Euro + gebuehr += 100; + calEinfahrt.add(Calendar.HOUR_OF_DAY, 1); // Erhöhe um eine Stunde + }*/ + + // Schritt 2: Berechne Gebühren in der Nachtzeit + double nachtGebuehr = 0; + if (calAusfahrt.after(startNacht)) { + // Die Parkzeit überschreitet 20:00 Uhr und geht in die Nachtzeit + while (calEinfahrt.before(calAusfahrt) && (calEinfahrt.get(Calendar.HOUR_OF_DAY) >= 20 || calEinfahrt.get(Calendar.HOUR_OF_DAY) < 6)) { + nachtGebuehr += 100; // Jede Stunde in der Nacht kostet auch 1 Euro + calEinfahrt.add(Calendar.HOUR_OF_DAY, 1); } - - // Erhöhe die Zeit um eine Stunde, um jede Stunde zu prüfen - einfahrtsCal.add(Calendar.HOUR_OF_DAY, 1); } - return gebuehr; + + // Schritt 3: Deckele die Nachttarif-Gebühr auf maximal 5 Euro + if (nachtGebuehr > 500) { + nachtGebuehr = 500; // Maximal 5 Euro für die gesamte Nachtzeit + } + + // Addiere die Nachtgebühren zu den normalen Stunden + return gebuehr + nachtGebuehr; } + + // Methode zum Finden der Einfahrtszeit des PKWs nach Kennzeichen private Date findeEinfahrtZeit(String kennzeichen) { for (PKW pkw : parkendePkws) { diff --git a/QualifierTeil2/visanummer.txt b/QualifierTeil2/visanummer.txt deleted file mode 100644 index 09e1533..0000000 --- a/QualifierTeil2/visanummer.txt +++ /dev/null @@ -1,2 +0,0 @@ -Gültige VISA-Nummer: -4539148803436467 \ No newline at end of file diff --git a/andereDateien/Testdaten.txt b/andereDateien/Testdaten.txt new file mode 100644 index 0000000..8760c4d --- /dev/null +++ b/andereDateien/Testdaten.txt @@ -0,0 +1,7 @@ +Testdaten: + +Einfahrtszeit: 08.10.2024, 13:00 +Ausfahrtszeit: 09.10.2024, 13:00, 09.10.2024, 04:00 + +Gültige VISA-Nummer: +4539148803436467 \ No newline at end of file diff --git a/QualifierTeil2/flow.txt b/andereDateien/flow.txt similarity index 100% rename from QualifierTeil2/flow.txt rename to andereDateien/flow.txt