Check Visakarte klasse mit einem JTest

main
3009594 2024-10-04 23:59:07 +02:00
parent 1a3a3b7730
commit 2c607bedf0
7 changed files with 181 additions and 38 deletions

View File

@ -105,3 +105,19 @@ int hours = dateTime.getHour();
System.out.println(hours); // Ausgabe: 14 System.out.println(hours); // Ausgabe: 14
Fazit: Fazit:
Vermeide die Verwendung der veralteten getHours()-Methode und nutze entweder Calendar oder, noch besser, die java.time-API, die in Java 8 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.

View File

@ -13,17 +13,18 @@ import java.util.Date;
*/ */
public class Fahrzeug { public class Fahrzeug {
private final String kennzeichen; private String kennzeichen;
private Date einfahrt; private Date einfahrt;
private Date ausfahrt; private Date ausfahrt;
private boolean bezahlt; private boolean istBezahlt;
private boolean istVerschuldet;
private double betrag; private double betrag;
Fahrzeug() { Fahrzeug() {
this.kennzeichen = kennzeichenzufaelliggenerieren.kennzeichengenerieren(); this.kennzeichen = kennzeichenzufaelliggenerieren.kennzeichengenerieren();
this.einfahrt = new Date(); this.einfahrt = new Date();
this.betrag = 0.0; this.betrag = 0.0;
this.bezahlt = false;
} }
@ -31,7 +32,7 @@ public class Fahrzeug {
this.kennzeichen = kennzeichen; this.kennzeichen = kennzeichen;
this.einfahrt = einfahrt; this.einfahrt = einfahrt;
this.betrag = 0.0; this.betrag = 0.0;
this.bezahlt = false;
} }
public String getKennzeichen() { public String getKennzeichen() {
@ -57,11 +58,11 @@ public class Fahrzeug {
} }
public boolean isBezahlt() { public boolean isBezahlt() {
return bezahlt; return istBezahlt;
} }
public void setBezahlt(boolean bezahlt) { public void setBezahlt(boolean bezahlt) {
this.bezahlt = bezahlt; this.istBezahlt = bezahlt;
} }
public double getBetrag() { public double getBetrag() {
@ -72,4 +73,14 @@ public class Fahrzeug {
this.betrag = betrag; this.betrag = betrag;
} }
public boolean IstVerschuldet() {
return istVerschuldet;
}
public void setIstVerschuldet(boolean istVerschuldet) {
this.istVerschuldet = istVerschuldet;
}
} }

View File

@ -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));
}
}

View File

@ -5,9 +5,10 @@ import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
public class Main { public class Main {
public static void main(String[] args) throws ParseException, AutoNichtGefundenException { public static void main(String[] args) throws ParseException, AutoNichtGefundenException, Exception {
new TextUI(); new TextUI();
} }
} }

View File

@ -16,6 +16,7 @@ public class Parkhaus {
private ArrayList<Fahrzeug> fahrzeugeMitSchulden; private ArrayList<Fahrzeug> fahrzeugeMitSchulden;
private int maxPlaetze; private int maxPlaetze;
private SimpleDateFormat sdf; private SimpleDateFormat sdf;
private Fahrzeug fahrzeug;
Parkhaus() { Parkhaus() {
fahrzeuge = new ArrayList<>(); fahrzeuge = new ArrayList<>();
@ -26,7 +27,6 @@ public class Parkhaus {
public String einfahren(String kennzeichen, String einfahrtzeit) throws ParseException { public String einfahren(String kennzeichen, String einfahrtzeit) throws ParseException {
Date einfahrt; Date einfahrt;
Fahrzeug fahrzeug;
if (kennzeichen.isEmpty() && einfahrtzeit.isEmpty()) if (kennzeichen.isEmpty() && einfahrtzeit.isEmpty())
fahrzeug = new Fahrzeug(); fahrzeug = new Fahrzeug();
@ -43,10 +43,7 @@ public class Parkhaus {
+ fahrzeug.getEinfahrtFormatted() + " im Parkhaus eingefahren."; + 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()) if (kennzeichen.isEmpty())
throw new AutoNichtGefundenException("Sie müssen bitte das Kennzeichen Ihres Autos eingeben."); throw new AutoNichtGefundenException("Sie müssen bitte das Kennzeichen Ihres Autos eingeben.");
@ -54,7 +51,7 @@ public class Parkhaus {
if (kennzeichen.endsWith("E")) if (kennzeichen.endsWith("E"))
isEauto = true; isEauto = true;
Fahrzeug fahrzeug = findeFahrzeug(kennzeichen); fahrzeug = findeFahrzeug(kennzeichen);
Date einfahrt = fahrzeug.getEinfahrt(); Date einfahrt = fahrzeug.getEinfahrt();
Date ausfahrt; Date ausfahrt;
@ -99,10 +96,35 @@ public class Parkhaus {
return fahrzeug.getBetrag(); 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 { private Fahrzeug findeFahrzeug(String kennzeichen) throws AutoNichtGefundenException {
for (Fahrzeug auto : fahrzeuge) for (Fahrzeug auto : fahrzeuge)
@ -114,8 +136,8 @@ public class Parkhaus {
} }
public boolean checkParkplatze() { private double rabattFuerEauto(double betrag) {
return maxPlaetze > 0; return betrag * 0.2;
} }
public boolean checkSchulden(String kennzeichen) { public boolean checkSchulden(String kennzeichen) {
@ -126,6 +148,8 @@ public class Parkhaus {
return false; return false;
} }
// Getter methoden: // Getter methoden:
public ArrayList<Fahrzeug> getFahrzeuge() { public ArrayList<Fahrzeug> getFahrzeuge() {
return fahrzeuge; return fahrzeuge;

View File

@ -6,12 +6,12 @@ import java.util.Scanner;
public class TextUI { public class TextUI {
private Parkhaus system; private Parkhaus system;
TextUI() throws ParseException, AutoNichtGefundenException{ TextUI() throws ParseException, AutoNichtGefundenException, Exception{
system = new Parkhaus(); system = new Parkhaus();
startprogramm(); startprogramm();
} }
private void startprogramm() throws ParseException, AutoNichtGefundenException { private void startprogramm() throws Exception {
Scanner eingabe = new Scanner(System.in); Scanner eingabe = new Scanner(System.in);
boolean aktiv = true; boolean aktiv = true;
@ -21,15 +21,17 @@ public class TextUI {
System.out.println("Bitte Wählen Sie ein Option ein: "); System.out.println("Bitte Wählen Sie ein Option ein: ");
System.out.println("1.Einfahren"); System.out.println("1.Einfahren");
System.out.println("2.Parkgebühren berechnen lassen"); System.out.println("2.Parkgebühren berechnen lassen");
System.out.println("3. Parkgebühren bezahlen"); System.out.println("3.Ausfahren");
System.out.println("4.Ausfahren"); System.out.println("4.Beenden");
System.out.println("5. Beenden");
System.out.print("> "); System.out.print("> ");
String auswhal = eingabe.nextLine(); String auswhal = eingabe.nextLine();
String kennzeichen; String kennzeichen;
String einfahrtzeit; String einfahrtzeit;
String ausfahrtzeit; String ausfahrtzeit;
double betrag;
String visaKarteNummer;
switch (auswhal) { switch (auswhal) {
case "1": // Einfahren case "1": // Einfahren
if (!system.checkParkplatze()) if (!system.checkParkplatze())
@ -45,12 +47,38 @@ public class TextUI {
} }
break; break;
case "2": case "2": // Parkgebühren berechnen lassen
System.out.println("Geben Sie erneut das Kennzeichnes Ihres Autos an"); System.out.println("Geben Sie erneut das Kennzeichnes Ihres Autos an");
kennzeichen = eingabe.nextLine(); kennzeichen = eingabe.nextLine();
System.out.println("Geben Sie bitte die Ausfahrtzeit ein (oder lassen Sie das für das System)"); System.out.println("Geben Sie bitte die Ausfahrtzeit ein (oder lassen Sie das für das System)");
ausfahrtzeit = eingabe.nextLine(); 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; break;
case "3": case "3":
// TODO // TODO
@ -58,10 +86,6 @@ public class TextUI {
case "4": case "4":
// TODO // TODO
break; break;
case "5":
break;
default: default:
System.out.println("Das war leider keine gültige Eingabe"); System.out.println("Das war leider keine gültige Eingabe");

View File

@ -1,12 +1,34 @@
package Parkhaus; package Parkhaus;
public class Zahlung { public class Zahlung {
// Hier werde ich die Zalhungsprozess behandlen
public boolean checkVisaKarte(String visaNummer) { public static boolean checkVisaKarte(String visakarteNummer) throws Exception {
// TODO if (visakarteNummer.length() < 16)
throw new Exception("Die Nummer Ihre Visakart ist falsch");
return false; 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 (summe / 10) % 2 == 0;
} }
} }