From 2c607bedf0f0b517e7c73e2102b5dd54a053a7b5 Mon Sep 17 00:00:00 2001 From: 3009594 Date: Fri, 4 Oct 2024 23:59:07 +0200 Subject: [PATCH] Check Visakarte klasse mit einem JTest --- src/ChatGPT.txt | 18 +++++++++- src/Parkhaus/Fahrzeug.java | 23 ++++++++---- src/Parkhaus/JTest_checkVisakarte.java | 45 +++++++++++++++++++++++ src/Parkhaus/Main.java | 3 +- src/Parkhaus/Parkhaus.java | 50 +++++++++++++++++++------- src/Parkhaus/TextUI.java | 48 ++++++++++++++++++------- src/Parkhaus/Zahlung.java | 32 ++++++++++++++--- 7 files changed, 181 insertions(+), 38 deletions(-) create mode 100644 src/Parkhaus/JTest_checkVisakarte.java diff --git a/src/ChatGPT.txt b/src/ChatGPT.txt index 0d62e8d..b497343 100644 --- a/src/ChatGPT.txt +++ b/src/ChatGPT.txt @@ -104,4 +104,20 @@ LocalDateTime dateTime = LocalDateTime.parse("01.10.2024, 14:00", formatter); int hours = dateTime.getHour(); System.out.println(hours); // Ausgabe: 14 Fazit: -Vermeide die Verwendung der veralteten getHours()-Methode und nutze entweder Calendar oder, noch besser, die java.time-API, die in Java 8 \ No newline at end of file +Vermeide die Verwendung der veralteten getHours()-Methode und nutze entweder Calendar oder, noch besser, die java.time-API, die in Java 8 +----------------------------------------------------------------------------------------------------------------------------------------------------- +Ich : erzeuge mir zwei muster viskartennummer die erste Nummer sollte richtig sein also / 10 teilbar + und die Zweite sollte falsch + + CahtGPT: + Hier sind zwei Muster für VISA-Kartennummern: + + Gültige VISA-Kartennummer: 9823 1927 5722 2993 (durch 10 teilbar) + Ungültige VISA-Kartennummer: 1462 8275 1074 2151 (nicht durch 10 teilbar) + Du kannst sie für Tests oder zur weiteren Verwendung einsetzen. ​​ + + + + + + diff --git a/src/Parkhaus/Fahrzeug.java b/src/Parkhaus/Fahrzeug.java index feaa217..712e2d6 100644 --- a/src/Parkhaus/Fahrzeug.java +++ b/src/Parkhaus/Fahrzeug.java @@ -13,17 +13,18 @@ import java.util.Date; */ public class Fahrzeug { - private final String kennzeichen; + private String kennzeichen; private Date einfahrt; private Date ausfahrt; - private boolean bezahlt; + private boolean istBezahlt; + private boolean istVerschuldet; private double betrag; Fahrzeug() { this.kennzeichen = kennzeichenzufaelliggenerieren.kennzeichengenerieren(); this.einfahrt = new Date(); this.betrag = 0.0; - this.bezahlt = false; + } @@ -31,7 +32,7 @@ public class Fahrzeug { this.kennzeichen = kennzeichen; this.einfahrt = einfahrt; this.betrag = 0.0; - this.bezahlt = false; + } public String getKennzeichen() { @@ -57,11 +58,11 @@ public class Fahrzeug { } public boolean isBezahlt() { - return bezahlt; + return istBezahlt; } public void setBezahlt(boolean bezahlt) { - this.bezahlt = bezahlt; + this.istBezahlt = bezahlt; } public double getBetrag() { @@ -72,4 +73,14 @@ public class Fahrzeug { this.betrag = betrag; } + public boolean IstVerschuldet() { + return istVerschuldet; + } + + public void setIstVerschuldet(boolean istVerschuldet) { + this.istVerschuldet = istVerschuldet; + } + + + } diff --git a/src/Parkhaus/JTest_checkVisakarte.java b/src/Parkhaus/JTest_checkVisakarte.java new file mode 100644 index 0000000..a40e725 --- /dev/null +++ b/src/Parkhaus/JTest_checkVisakarte.java @@ -0,0 +1,45 @@ +package Parkhaus; + +import static org.junit.jupiter.api.Assertions.*; + +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_checkVisakarte { + + 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_visakarteNummer() throws Exception{ + String kennzeichen = "MA-SH 4077"; + String einfahrt = "01.10.2024, 14:30"; + String ausfahrt = "01.10.2024, 14:50"; + parkhaus.einfahren(kennzeichen, einfahrt); + parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt); + + String GueltigeVISAKartennummer = "9823192757222993"; + // Gültige Nummer => True + assertTrue(parkhaus.checkVisakarteNummer(GueltigeVISAKartennummer)); + + // Ungültige Nummer => True (da der Test False testet) + String ungueltigeVISAKartennummer = "1462 8275 1074 2151"; + assertFalse(parkhaus.checkVisakarteNummer(ungueltigeVISAKartennummer)); + } + + + + + +} diff --git a/src/Parkhaus/Main.java b/src/Parkhaus/Main.java index 3fc5f8d..da21631 100644 --- a/src/Parkhaus/Main.java +++ b/src/Parkhaus/Main.java @@ -5,9 +5,10 @@ import java.text.SimpleDateFormat; import java.util.Date; public class Main { - public static void main(String[] args) throws ParseException, AutoNichtGefundenException { + public static void main(String[] args) throws ParseException, AutoNichtGefundenException, Exception { new TextUI(); + } } diff --git a/src/Parkhaus/Parkhaus.java b/src/Parkhaus/Parkhaus.java index a59358e..f28ac09 100644 --- a/src/Parkhaus/Parkhaus.java +++ b/src/Parkhaus/Parkhaus.java @@ -16,6 +16,7 @@ public class Parkhaus { private ArrayList fahrzeugeMitSchulden; private int maxPlaetze; private SimpleDateFormat sdf; + private Fahrzeug fahrzeug; Parkhaus() { fahrzeuge = new ArrayList<>(); @@ -26,7 +27,6 @@ public class Parkhaus { public String einfahren(String kennzeichen, String einfahrtzeit) throws ParseException { Date einfahrt; - Fahrzeug fahrzeug; if (kennzeichen.isEmpty() && einfahrtzeit.isEmpty()) fahrzeug = new Fahrzeug(); @@ -43,10 +43,7 @@ public class Parkhaus { + fahrzeug.getEinfahrtFormatted() + " im Parkhaus eingefahren."; } - - - public double berechneParkgebuehren(String kennzeichen, String ausfahrtzeit) - throws AutoNichtGefundenException, ParseException { + public double berechneParkgebuehren(String kennzeichen, String ausfahrtzeit) throws AutoNichtGefundenException, ParseException { if (kennzeichen.isEmpty()) throw new AutoNichtGefundenException("Sie müssen bitte das Kennzeichen Ihres Autos eingeben."); @@ -54,7 +51,7 @@ public class Parkhaus { if (kennzeichen.endsWith("E")) isEauto = true; - Fahrzeug fahrzeug = findeFahrzeug(kennzeichen); + fahrzeug = findeFahrzeug(kennzeichen); Date einfahrt = fahrzeug.getEinfahrt(); Date ausfahrt; @@ -99,10 +96,35 @@ public class Parkhaus { return fahrzeug.getBetrag(); } - private double rabattFuerEauto(double betrag) { - return betrag * 0.2; + + + public void setBezahlt(String kennzeichen) throws AutoNichtGefundenException { + fahrzeug = findeFahrzeug(kennzeichen); + fahrzeug.setBezahlt(true); + fahrzeug.setIstVerschuldet(false); } + + + public void setVerschuldet(String kennzeichen) throws AutoNichtGefundenException { + fahrzeug = findeFahrzeug(kennzeichen); + fahrzeug.setIstVerschuldet(true); + fahrzeug.setBezahlt(false); + fahrzeugeMitSchulden.add(fahrzeug); + } + + + public boolean checkVisakarteNummer(String visakarteNummer) throws Exception { + return Zahlung.checkVisaKarte(visakarteNummer); + } + + + public boolean checkParkplatze() { + return maxPlaetze > 0; + } + + + private Fahrzeug findeFahrzeug(String kennzeichen) throws AutoNichtGefundenException { for (Fahrzeug auto : fahrzeuge) @@ -112,12 +134,12 @@ public class Parkhaus { throw new AutoNichtGefundenException("Ihr Auto wurde nicht gefunden. Bitte wenden Sie sich an den Support"); } - - - public boolean checkParkplatze() { - return maxPlaetze > 0; - } + + private double rabattFuerEauto(double betrag) { + return betrag * 0.2; + } + public boolean checkSchulden(String kennzeichen) { for (Fahrzeug sc : fahrzeugeMitSchulden) if (sc.getKennzeichen().equals(kennzeichen)) @@ -126,6 +148,8 @@ public class Parkhaus { return false; } + + // Getter methoden: public ArrayList getFahrzeuge() { return fahrzeuge; diff --git a/src/Parkhaus/TextUI.java b/src/Parkhaus/TextUI.java index c719ad1..893b3e4 100644 --- a/src/Parkhaus/TextUI.java +++ b/src/Parkhaus/TextUI.java @@ -6,12 +6,12 @@ import java.util.Scanner; public class TextUI { private Parkhaus system; - TextUI() throws ParseException, AutoNichtGefundenException{ + TextUI() throws ParseException, AutoNichtGefundenException, Exception{ system = new Parkhaus(); startprogramm(); } - private void startprogramm() throws ParseException, AutoNichtGefundenException { + private void startprogramm() throws Exception { Scanner eingabe = new Scanner(System.in); boolean aktiv = true; @@ -20,16 +20,18 @@ public class TextUI { System.out.println(); System.out.println("Bitte Wählen Sie ein Option ein: "); System.out.println("1.Einfahren"); - System.out.println("2. Parkgebühren berechnen lassen"); - System.out.println("3. Parkgebühren bezahlen"); - System.out.println("4.Ausfahren"); - System.out.println("5. Beenden"); + System.out.println("2.Parkgebühren berechnen lassen"); + System.out.println("3.Ausfahren"); + System.out.println("4.Beenden"); System.out.print("> "); String auswhal = eingabe.nextLine(); String kennzeichen; String einfahrtzeit; String ausfahrtzeit; + double betrag; + String visaKarteNummer; + switch (auswhal) { case "1": // Einfahren if (!system.checkParkplatze()) @@ -45,12 +47,38 @@ public class TextUI { } break; - case "2": + case "2": // Parkgebühren berechnen lassen System.out.println("Geben Sie erneut das Kennzeichnes Ihres Autos an"); kennzeichen = eingabe.nextLine(); System.out.println("Geben Sie bitte die Ausfahrtzeit ein (oder lassen Sie das für das System)"); ausfahrtzeit = eingabe.nextLine(); - system.berechneParkgebuehren(kennzeichen, ausfahrtzeit); + betrag = system.berechneParkgebuehren(kennzeichen, ausfahrtzeit); + 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: "); + System.out.println("1.Sofort bezahlen"); + System.out.println("2.Betrag als Schulden hinterlassen"); + System.out.print(">"); + zahlungsOptions = eingabe.nextLine(); + switch(zahlungsOptions) { + case "1": + System.out.println("Geben Sie bitte Ihre 16-stellige Visa-karte Nummer ein: "); + 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); + break; + + case "2": + // System markiert das Auto als verschuldet und speichert es dann im System + system.setVerschuldet(kennzeichen); + break; + default: + System.out.println("Das war leider keine gültige Eingabe"); + } + + } break; case "3": // TODO @@ -58,10 +86,6 @@ public class TextUI { case "4": // TODO break; - - case "5": - break; - default: System.out.println("Das war leider keine gültige Eingabe"); diff --git a/src/Parkhaus/Zahlung.java b/src/Parkhaus/Zahlung.java index 4c1df96..1d392d3 100644 --- a/src/Parkhaus/Zahlung.java +++ b/src/Parkhaus/Zahlung.java @@ -1,12 +1,34 @@ package Parkhaus; public class Zahlung { - // Hier werde ich die Zalhungsprozess behandlen - - public boolean checkVisaKarte(String visaNummer) { - // TODO + + public static boolean checkVisaKarte(String visakarteNummer) throws Exception { + if (visakarteNummer.length() < 16) + throw new Exception("Die Nummer Ihre Visakart ist falsch"); + + char[] arr = visakarteNummer.toCharArray(); + + int index = 0; + int summe = 0; + // Umwandle jede charZiffer alse integer Ziffer + // Verdopple jede zweite Ziffer + for (int i = arr.length - 1; i >= 0; i--) { + arr[i] -= '0'; + + if (index == 0) + index++; + + else { + index--; + arr[i] *= 2; + // Wenn ziffer > 9, ziehe 9 einfach ab + if (arr[i] > 9) + arr[i] -= 9; + } + summe += arr[i]; + } - return false; + return (summe / 10) % 2 == 0; } }