diff --git a/KIchatgpt/prompt5.txt b/KIchatgpt/prompt5.txt new file mode 100644 index 0000000..a83d06b --- /dev/null +++ b/KIchatgpt/prompt5.txt @@ -0,0 +1,120 @@ +ich: die methode berechneGebuehren soll so angepasst werden, somit die folgende Funktion dabei ist: Zwischen 20 und +6 Uhr kostet das Parken maximal 5 Euro. (Wenn ein Fahrzeug um 19:30 Uhr einfährt, tickt die Uhr 20:30, 21:30, 22:30, +23:30 und 0:30 Uhr nochmal hoch und dann wieder um 6:30 Uhr.). Das heißt aber nicht, dass ab 20 uhr man direkt 5 euro +bezahlenm muss, sondern nur wenn die Gebühren höher als 5 euro sind, in dieser Zeit muss man dann maximal 5 euro bezahlen. + hier meine methode dafür: + 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; + } + + KI: Um die Gebührenberechnung korrekt an die Regel "Zwischen 20 und 6 Uhr kostet das Parken maximal 5 Euro" anzupassen, + müssen wir zusätzlich die Parkzeiten in diesem Zeitfenster explizit überprüfen. Das bedeutet, dass in der Zeit von + 20:00 Uhr bis 6:00 Uhr die Gebühren, wenn sie höher als 5 Euro wären, auf 5 Euro begrenzt werden. + + Hier ist die angepasste Version deiner Methode, die diese Funktion berücksichtigt: + + import java.text.SimpleDateFormat; + import java.util.Calendar; + import java.util.Date; + + 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) { + return 0; // Kostenlos + } + + // Parkdauer nach den 15 Minuten + long parkdauerOhneFreiminuten = parkdauer - 15; + + // Tageslimit: Maximal 15 Euro pro Tag + if (parkdauerOhneFreiminuten >= 1440) { // 1440 Minuten = 24 Stunden + gebuehr = 1500; + return gebuehr; // Direkt zurück, da Tageslimit erreicht + } + + // 1 Euro pro angefangene Stunde + if (parkdauerOhneFreiminuten > 0) { + while (parkdauerOhneFreiminuten > 0) { + gebuehr += 100; // 1 Euro pro Stunde + parkdauerOhneFreiminuten -= 60; + } + } + + // Maximale Gebühren in der Nacht von 20 Uhr bis 6 Uhr + gebuehr = berechneNachttarif(kennzeichen, gebuehr, ausfahrt); + + // 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; + } + + private double berechneNachttarif(String kennzeichen, double gebuehr, Date ausfahrt) { + Calendar cal = Calendar.getInstance(); + cal.setTime(ausfahrt); + + // Bestimme die Einfahrtszeit des Fahrzeugs + Date einfahrt = findeEinfahrtZeit(kennzeichen); // Methode zum Finden der Einfahrtszeit + Calendar einfahrtsCal = Calendar.getInstance(); + einfahrtsCal.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 + } + } + + // Erhöhe die Zeit um eine Stunde, um jede Stunde zu prüfen + einfahrtsCal.add(Calendar.HOUR_OF_DAY, 1); + } + + return gebuehr; + } + + private Date findeEinfahrtZeit(String kennzeichen) { + for (PKW pkw : parkendePkws) { + if (pkw.getKennzeichen().equals(kennzeichen)) { + return pkw.getEinfahrt(); + } + } + return new Date(); // Falls kein PKW gefunden wurde, aktuelles Datum als Fallback + } diff --git a/QualifierTeil2/PKW.java b/QualifierTeil2/PKW.java index fae8434..e97d9dd 100644 --- a/QualifierTeil2/PKW.java +++ b/QualifierTeil2/PKW.java @@ -6,10 +6,12 @@ import java.util.Random; public class PKW { private String kennzeichen; + private Date einfahrt; double gebuehrenkonto; - public PKW() { - this.kennzeichen = "HD-MA 1967"; + public PKW(String kennzeichen) { + this.kennzeichen = kennzeichen; + this.einfahrt = new Date(); this.gebuehrenkonto = 0.0; } @@ -17,7 +19,13 @@ public class PKW { return kennzeichen; } + public void setKennzeichen(String kennzeichen) { + this.kennzeichen = kennzeichen; + } + public Date getEinfahrt() { + return einfahrt; + } public double getGebuehrenkonto() { return gebuehrenkonto; @@ -27,34 +35,6 @@ public class PKW { this.gebuehrenkonto += gebuehrenkonto; } - - public String generiereKennzeichen() { - Random random = new Random(); - - // 2 bis 3 Buchstaben für Stadt/Region - String stadtRegion = randomString(random, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", random.nextInt(2) + 2); - - // 1 bis 2 Buchstaben für Fahrzeugklasse - String fahrzeugKlasse = randomString(random, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", random.nextInt(2) + 1); - - // 1 bis 4 Ziffern für die Nummer - String nummer = randomString(random, "0123456789", random.nextInt(4) + 1); - - // Optional ein "E" für Elektrofahrzeuge - String elektro = random.nextBoolean() ? "E" : ""; - - // Zusammenfügen des Kennzeichens - return stadtRegion + "-" + fahrzeugKlasse + " " + nummer + elektro; - } - - // Hilfsmethode zur Erzeugung einer zufälligen Zeichenkette - private static String randomString(Random random, String zeichen, int laenge) { - StringBuilder sb = new StringBuilder(laenge); - for (int i = 0; i < laenge; i++) { - sb.append(zeichen.charAt(random.nextInt(zeichen.length()))); - } - return sb.toString(); - } } diff --git a/QualifierTeil2/Parkhaus.java b/QualifierTeil2/Parkhaus.java index a3c538b..446f7a2 100644 --- a/QualifierTeil2/Parkhaus.java +++ b/QualifierTeil2/Parkhaus.java @@ -19,10 +19,6 @@ public class Parkhaus { return parkendePkws; } - public static int randomAnzahlParkplätze() { - return (int) (Math.random() * 200) + 1; - } - // Methode zum Einfahren eines PKWs public void einfahren(String kennzeichen) { PKW existierenderPKW = null; @@ -40,42 +36,16 @@ public class Parkhaus { this.belegt++; } else { // Neuen PKW erstellen und Schulden übernehmen, falls vorhanden - PKW neuerPKW = new PKW(); + PKW neuerPKW = new PKW(kennzeichen); double schulden = sucheSchulden(kennzeichen); // Funktion, die die alten Schulden findet (falls vorhanden) neuerPKW.setGebuehrenkonto(schulden); // Vorherige Schulden hinzufügen parkendePkws.add(neuerPKW); this.kapazitaet--; this.belegt++; - System.out.println("Neuer PKW mit Kennzeichen " + kennzeichen + " eingefahren. Schulden: " + schulden + " Euro."); + System.out.println("Neuer PKW mit Kennzeichen " + kennzeichen + " eingefahren. Schulden: " + schulden + " Cent."); } - /*if (parkendePkws.size() < kapazitaet) { - parkendePkws.add(pkw); - this.kapazitaet--; - this.belegt++; - System.out.println("PKW mit Kennzeichen " + pkw.getKennzeichen() + " ist eingefahren."); - } else { - System.out.println("Parkhaus voll."); - }*/ - - } - - public double sucheSchulden(String kennzeichen) { - // Durchsuche die Liste oder Datenbank nach alten Schulden - // Beispiel: Wenn der PKW schon einmal ausgefahren ist, seine Schulden zurückgeben - for (PKW pkw : parkendePkws) { - if (pkw.getKennzeichen().equals(kennzeichen)) { - return pkw.getGebuehrenkonto(); // Alte Schulden finden - } - } - return 0.0; // Keine Schulden gefunden - } - - - // Methode zum Prüfen, ob das Parkhaus voll ist - public boolean istVoll() { - return parkendePkws.size() >= kapazitaet; } @@ -110,15 +80,20 @@ public class Parkhaus { if (pruefeKreditkarte(kreditkartenNummer)) { System.out.println("Zahlung erfolgreich. Sie dürfen ausfahren."); zuEntfernen.setGebuehrenkonto(0); // Gebühren auf 0 setzen - System.out.println("Gebührenkonto: " + zuEntfernen.getGebuehrenkonto()); + System.out.println("Bezahlte Summe: " + zuEntfernen.getGebuehrenkonto()); + // PKW aus der Liste entfernen + parkendePkws.remove(zuEntfernen); // Hier wird der PKW endgültig entfernt 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("Gebührenkonto: " + zuEntfernen.getGebuehrenkonto()); + System.out.println("Offenes Gebührenkonto: " + zuEntfernen.getGebuehrenkonto()); } } else { // Gebührenfrei (unter 15 Minuten oder andere Ausnahme) - System.out.println("PKW mit Kennzeichen " + kennzeichen + " darf gebührenfrei ausfahren.\n"); + Date ausfahrt = new Date(); + System.out.println("Parkdauer in Minuten: " + berechneParkdauer(kennzeichen, ausfahrt)); + System.out.println("Parkgebühren in Cent: " + zuEntfernen.getGebuehrenkonto()); + System.out.println("PKW mit Kennzeichen " + kennzeichen + " darf gebührenfrei ausfahren."); } // PKW aus der Liste entfernen und Kapazität aktualisieren @@ -134,33 +109,33 @@ public class Parkhaus { public long berechneParkdauer(String kennzeichen, Date ausfahrt) { - //long minDiff = 0; + long minDiff = 0; - /*for (PKW pkw : parkendePkws) { - if (pkw.getKennzeichen().equals(kennzeichen) && !pkw.hatBezahlt()) { - minDiff = (ausfahrt.getTime() - pkw.einfahrt.getTime()) / 60000; + for (PKW pkw : parkendePkws) { + if (pkw.getKennzeichen().equals(kennzeichen)) { + minDiff = (ausfahrt.getTime() - pkw.getEinfahrt().getTime()) / 60000; } } - return minDiff;*/ + return minDiff; //Debugging mit selbst ausgewählten Zeiten - var sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); + /*var sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); Date d1 = null; try { - d1 = sdf.parse("01.10.2024, 10:00"); + d1 = sdf.parse("01.10.2024, 20:00"); } catch (ParseException e) { throw new RuntimeException(e); } Date d2 = null; try { - d2 = sdf.parse("01.10.2024, 11:00"); + d2 = sdf.parse("02.10.2024, 02:00"); } catch (ParseException e) { throw new RuntimeException(e); } long minDiff = (d2.getTime() - d1.getTime()) / 60000; - return minDiff; + return minDiff;*/ } public double berechneGebuehren(String kennzeichen, Date ausfahrt) { @@ -180,7 +155,6 @@ public class Parkhaus { if (parkdauerOhneFreiminuten == 1440) { gebuehr = 1500; parkdauerOhneFreiminuten = 0; - } // 1 Euro pro angefangene Stunde @@ -191,6 +165,9 @@ public class Parkhaus { } } + // Maximale Gebühren in der Nacht von 20 Uhr bis 6 Uhr + gebuehr = berechneNachttarif(kennzeichen, gebuehr, ausfahrt); + // 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 @@ -218,6 +195,96 @@ public class Parkhaus { } return (sum % 10 == 0); } + + //-------------------------------Hilfsmethoden------------------------------------------- + + private static int randomAnzahlParkplätze() { + return (int) (Math.random() * 200) + 1; + } + + + private double sucheSchulden(String kennzeichen) { + // Durchsuche die Liste nach alten Schulden + // Beispiel: Wenn der PKW schon einmal ausgefahren ist, seine Schulden zurückgeben + for (PKW pkw : parkendePkws) { + if (pkw.getKennzeichen().equals(kennzeichen)) { + return pkw.getGebuehrenkonto(); // Alte Schulden finden + } + } + return 0.0; // Keine Schulden gefunden + } + + + // Methode zum Prüfen, ob das Parkhaus voll ist + public boolean istVoll() { + return parkendePkws.size() >= kapazitaet; + } + + private double berechneNachttarif(String kennzeichen, double gebuehr, Date ausfahrt) { + Calendar cal = Calendar.getInstance(); + cal.setTime(ausfahrt); + + // Bestimme die Einfahrtszeit des Fahrzeugs + Date einfahrt = findeEinfahrtZeit(kennzeichen); // Methode zum Finden der Einfahrtszeit + Calendar einfahrtsCal = Calendar.getInstance(); + einfahrtsCal.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 + } + } + + // Erhöhe die Zeit um eine Stunde, um jede Stunde zu prüfen + einfahrtsCal.add(Calendar.HOUR_OF_DAY, 1); + } + + return gebuehr; + } + + private Date findeEinfahrtZeit(String kennzeichen) { + for (PKW pkw : parkendePkws) { + if (pkw.getKennzeichen().equals(kennzeichen)) { + return pkw.getEinfahrt(); + } + } + return new Date(); // Falls kein PKW gefunden wurde, aktuelles Datum als Fallback + } + + + + public String generiereKennzeichen() { + Random random = new Random(); + + // 2 bis 3 Buchstaben für Stadt/Region + String stadtRegion = randomString(random, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", random.nextInt(2) + 2); + + // 1 bis 2 Buchstaben für Fahrzeugklasse + String fahrzeugKlasse = randomString(random, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", random.nextInt(2) + 1); + + // 1 bis 4 Ziffern für die Nummer + String nummer = randomString(random, "0123456789", random.nextInt(4) + 1); + + // Optional ein "E" für Elektrofahrzeuge + String elektro = random.nextBoolean() ? "E" : ""; + + // Zusammenfügen des Kennzeichens + return stadtRegion + "-" + fahrzeugKlasse + " " + nummer + elektro; + } + + + // Hilfsmethode zur Erzeugung einer zufälligen Zeichenkette + private static String randomString(Random random, String zeichen, int laenge) { + StringBuilder sb = new StringBuilder(laenge); + for (int i = 0; i < laenge; i++) { + sb.append(zeichen.charAt(random.nextInt(zeichen.length()))); + } + return sb.toString(); + } } diff --git a/QualifierTeil2/UI.java b/QualifierTeil2/UI.java index a7e2d74..2663a8b 100644 --- a/QualifierTeil2/UI.java +++ b/QualifierTeil2/UI.java @@ -12,11 +12,17 @@ public class UI { // Methode für die Einfahrt eines PKWs public void einfahrtPKW() { - System.out.println("Bitte geben Sie das Kennzeichen ein:"); + System.out.println("Bitte geben Sie das Kennzeichen ein (leer lassen, um ein Kennzeichen zu generieren):"); String kennzeichen = scan.nextLine(); + if (kennzeichen.isEmpty()) { + kennzeichen = parkhaus1.generiereKennzeichen(); + System.out.println("Generiertes Kennzeichen: " + kennzeichen); + } + System.out.println("Aktuell verfügbare Parkplätze: " + parkhaus1.kapazitaet); parkhaus1.einfahren(kennzeichen); System.out.println("weitere verfügbare Parkplätze: " + parkhaus1.kapazitaet); + var einfahrt = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); System.out.println("Einfahrt: " + einfahrt.format(new Date())); diff --git a/QualifierTeil2/visanummer.txt b/QualifierTeil2/visanummer.txt new file mode 100644 index 0000000..09e1533 --- /dev/null +++ b/QualifierTeil2/visanummer.txt @@ -0,0 +1,2 @@ +Gültige VISA-Nummer: +4539148803436467 \ No newline at end of file