From 1de5a38609b67e2cee312c1a27715fe57f822f00 Mon Sep 17 00:00:00 2001 From: ioana Date: Sat, 5 Oct 2024 11:38:30 +0200 Subject: [PATCH] =?UTF-8?q?Erweiterung=20der=20Klassen=20und=20Funktionali?= =?UTF-8?q?t=C3=A4ten,=20.txt=20Dateien=20zu=20den=20prompt4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- QualifierTeil2/Main.java | 19 ++++------- QualifierTeil2/Parkhaus.java | 65 +++++++++++++++++++++++++++--------- QualifierTeil2/UI.java | 30 ++++++++--------- QualifierTeil2/prompt4.txt | 41 +++++++++++++++++++++++ 4 files changed, 112 insertions(+), 43 deletions(-) create mode 100644 QualifierTeil2/prompt4.txt diff --git a/QualifierTeil2/Main.java b/QualifierTeil2/Main.java index ea1f81d..52ae852 100644 --- a/QualifierTeil2/Main.java +++ b/QualifierTeil2/Main.java @@ -13,7 +13,6 @@ public class Main{ UI ui = new UI(); Scanner scanner = new Scanner(System.in); - PKW pkw1 = new PKW(); System.out.println("Willkommen im Parkhaus BYE am Hauptbahnhof!\n"); @@ -22,10 +21,9 @@ public class Main{ System.out.println("Wählen Sie eine Option:"); System.out.println("1. PKW einfahren"); System.out.println("2. Mehrere PKWs einfahren"); - System.out.println("3. Parkgebühren berechnen"); - System.out.println("4. Parkgbühren bezahlen und ausfahren"); - System.out.println("5. Verfügbare Parkplätze anzeigen"); - System.out.println("6. Beenden."); + System.out.println("3. Parkgbühren bezahlen und ausfahren"); + System.out.println("4. Verfügbare Parkplätze anzeigen"); + System.out.println("5. Beenden"); int option = scanner.nextInt(); scanner.nextLine(); // Consume newline @@ -41,20 +39,17 @@ public class Main{ break; case 3: - //kommt gleich - break; - - case 4: - System.out.println("Geben Sie das Kennzeichen des ausfahrenden PKWs ein: "); ui.ausfahrtPKW(); break; - case 5: + case 4: ui.zeigeVerfügbarePlätze(); break; - case 6: + + case 5: System.out.println("Programm beendet."); return; + default: System.out.println("Ungültige Auswahl."); diff --git a/QualifierTeil2/Parkhaus.java b/QualifierTeil2/Parkhaus.java index ce864fd..c41eea2 100644 --- a/QualifierTeil2/Parkhaus.java +++ b/QualifierTeil2/Parkhaus.java @@ -1,4 +1,6 @@ package QualifierTeil2; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.*; public class Parkhaus { @@ -48,6 +50,7 @@ public class Parkhaus { break; } } + if (zuEntfernen != null) { parkendePkws.remove(zuEntfernen); this.kapazitaet++; @@ -60,58 +63,67 @@ public class Parkhaus { public long berechneParkdauer(String kennzeichen, Date ausfahrt) { - long minDiff = 0; + //long minDiff = 0; - for (PKW pkw : parkendePkws) { + /*for (PKW pkw : parkendePkws) { if (pkw.getKennzeichen().equals(kennzeichen) && !pkw.hatBezahlt()) { minDiff = (ausfahrt.getTime() - pkw.einfahrt.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, 9:45"); + d1 = sdf.parse("01.10.2024, 10:00"); } catch (ParseException e) { throw new RuntimeException(e); } Date d2 = null; try { - d2 = sdf.parse("02.10.2024, 9:45"); + d2 = sdf.parse("01.10.2024, 11:00"); } catch (ParseException e) { throw new RuntimeException(e); } long minDiff = (d2.getTime() - d1.getTime()) / 60000; - return minDiff;*/ + return minDiff; } - public long berechneGebuehren(String kennzeichen, Date ausfahrt){ - long parkdauer = berechneParkdauer(kennzeichen, ausfahrt);; - long 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) { - gebuehr = 0; parkdauer = 0; + gebuehr =0; + } - if (parkdauer == 1440){ + // Parkdauer nach den 15 Minuten + long parkdauerOhneFreiminuten = parkdauer - 15; + + // Tageslimit: Maximal 15 Euro pro Tag + if (parkdauerOhneFreiminuten == 1440){ gebuehr = 1500; - parkdauer = 0; + parkdauerOhneFreiminuten = 0; + } - if (parkdauer > 0 && parkdauer < 1440 ){ - while(parkdauer > 0){ + // 1 Euro pro angefangene Stunde + if (parkdauerOhneFreiminuten > 0 && parkdauerOhneFreiminuten < 1440 ){ + while(parkdauerOhneFreiminuten > 0){ gebuehr += 100; - parkdauer-=60; + 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 @@ -121,6 +133,27 @@ public class Parkhaus { } + // Methode zur Überprüfung der Kreditkartennummer mit dem Luhn-Algorithmus + public boolean pruefeKreditkarte(String kreditkartenNummer) { + if (kreditkartenNummer.length() != 16 || !kreditkartenNummer.startsWith("4")) { + return false; // Ungültige Karte + } + + int sum = 0; + boolean alternate = false; + for (int i = kreditkartenNummer.length() - 1; i >= 0; i--) { + int n = Integer.parseInt(kreditkartenNummer.substring(i, i + 1)); + if (alternate) { + n *= 2; + if (n > 9) { + n = (n % 10) + 1; + } + } + sum += n; + alternate = !alternate; + } + return (sum % 10 == 0); + } } diff --git a/QualifierTeil2/UI.java b/QualifierTeil2/UI.java index 27d350c..9a32e72 100644 --- a/QualifierTeil2/UI.java +++ b/QualifierTeil2/UI.java @@ -18,12 +18,12 @@ public class UI { System.out.println("Einfahrt: " + pkw.getEinfahrtAlsString()); //Debugging - // System.out.println("Verfügbar nach einfahrt: " + parkhaus1.kapazität); // System.out.println("belegt: " + parkhaus1.belegt); // System.out.println("Liste pkws: " + parkhaus1.getParkendePkws()); } public void mehrereEinfahrten(){ + while (true) { if (parkhaus1.istVoll()) { System.out.println("Das Parkhaus ist voll. Keine weiteren Einfahrten möglich."); @@ -39,7 +39,6 @@ public class UI { // PKW einfahren einfahrtPKW(); } - } // Methode zum Anzeigen der verfügbaren Plätze @@ -47,25 +46,26 @@ public class UI { System.out.println("Verfügbare Plätze: " + parkhaus1.kapazitaet); } - - public void ausfahrtPKW(){ - - String kennzeichen = scan.nextLine().toUpperCase(); - parkhaus1.ausfahren(kennzeichen); - - /* + public void ausfahrtPKW(){ Date ausfahrt = new Date(); - if (kennzeichen.equals(pkw.getKennzeichen())){ - //System.out.println("Ihr Kennzeichen: " + kennzeichen); - System.out.println("Parkdauer in Minuten: " + parkhaus1.berechneParkdauer(kennzeichen, ausfahrt)); - System.out.println("Parkgebühren in Cent: " + parkhaus1.berechneGebuehren(kennzeichen, ausfahrt)); + System.out.println("Geben Sie das Kennzeichen des ausfahrenden PKWs ein: "); + String kennzeichen = scan.nextLine().toUpperCase(); + 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(); + + // Prüfziffer der Kreditkarte validieren + if (parkhaus1.pruefeKreditkarte(kreditkartennummer)) { + System.out.println("Die Kreditkartennummer ist gültig."); + parkhaus1.ausfahren(kennzeichen); } else { - System.out.println("Das eingegebene Kennzeichen existiert nicht, bitte erneut eingeben: "); + System.out.println("Ungültige Kreditkartennummer. Zahlung fehlgeschlagen."); + } - scan.close();*/ } diff --git a/QualifierTeil2/prompt4.txt b/QualifierTeil2/prompt4.txt new file mode 100644 index 0000000..3fdf68a --- /dev/null +++ b/QualifierTeil2/prompt4.txt @@ -0,0 +1,41 @@ +ich: schreibe eine methode zur Validierung einer 16-stellige Visa Kreditkartennummer nach Luhn-Algorithmus +KI: Hier ist eine Lösung, um die Methode zur Eingabe und Überprüfung der 16-stelligen Kreditkartennummer basierend auf +dem Luhn-Algorithmus in deiner Parkhaus-Software zu implementieren: + + // Methode zur Überprüfung der 16-stelligen VISA-Kreditkartennummer + public static boolean pruefeKreditkartenNummer(String kreditkartenNummer) { + if (kreditkartenNummer.length() != 16 || !kreditkartenNummer.matches("\\d+")) { + return false; // Überprüft, ob die Nummer 16-stellig ist und nur Ziffern enthält + } + + int sum = 0; + boolean alternate = false; + + // Luhn-Algorithmus von rechts nach links anwenden + for (int i = kreditkartenNummer.length() - 1; i >= 0; i--) { + int n = Integer.parseInt(kreditkartenNummer.substring(i, i + 1)); + if (alternate) { + n *= 2; + if (n > 9) { + n -= 9; // Wenn das Ergebnis größer als 9 ist, subtrahiere 9 + } + } + sum += n; + alternate = !alternate; + } + + // Wenn die Summe durch 10 teilbar ist, ist die Kreditkartennummer gültig + return (sum % 10 == 0); + } + + public static void main(String[] args) { + // Beispiel für eine gültige 16-stellige VISA-Kreditkartennummer + String kreditkartenNummer = "4539148803436467"; + + if (pruefeKreditkartenNummer(kreditkartenNummer)) { + System.out.println("Die Kreditkartennummer ist gültig."); + } else { + System.out.println("Die Kreditkartennummer ist ungültig."); + } + } +