Erweiterung der Klassen und Funktionalitäten, u.a. Methode zur Überprüfung der Kreditkartennummer

devIoana
ioana 2024-10-05 11:50:56 +02:00
parent 1de5a38609
commit 413c10a2c0
3 changed files with 78 additions and 53 deletions

View File

@ -6,13 +6,15 @@ import java.util.Random;
public class PKW { public class PKW {
private String kennzeichen; private String kennzeichen;
Date einfahrt; Date einfahrt;
private boolean hatBezahlt; private boolean hatBezahlt;
double gebuehrenkonto;
public PKW() { public PKW() {
this.kennzeichen = generiereKennzeichen(); this.kennzeichen = generiereKennzeichen();
this.einfahrt = new Date(); this.einfahrt = new Date();
this.hatBezahlt = false; this.hatBezahlt = false;
this.gebuehrenkonto = 0;
} }
public String getKennzeichen() { public String getKennzeichen() {
@ -27,6 +29,14 @@ public class PKW {
return gebeAktuelleZeit(); return gebeAktuelleZeit();
} }
public double getGebuehrenkonto() {
return gebuehrenkonto;
}
public void setGebuehrenkonto(double gebuehrenkonto) {
this.gebuehrenkonto = gebuehrenkonto;
}
public boolean hatBezahlt() { public boolean hatBezahlt() {
return hatBezahlt; return hatBezahlt;
} }

View File

@ -1,4 +1,5 @@
package QualifierTeil2; package QualifierTeil2;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
@ -18,7 +19,7 @@ public class Parkhaus {
return parkendePkws; return parkendePkws;
} }
public static int randomAnzahlParkplätze(){ public static int randomAnzahlParkplätze() {
return (int) (Math.random() * 200) + 1; return (int) (Math.random() * 200) + 1;
} }
@ -52,10 +53,34 @@ public class Parkhaus {
} }
if (zuEntfernen != null) { if (zuEntfernen != null) {
parkendePkws.remove(zuEntfernen); // Berechnung der Gebühren
this.kapazitaet++; double gebuehren = berechneGebuehren(kennzeichen, new Date()); // Nimmt die aktuelle Zeit an
this.belegt--;
System.out.println("PKW mit Kennzeichen " + kennzeichen + " hat die Gebühren bezahlt und darf rausfahren."); if (gebuehren > 0) {
// Kreditkartenvalidierung vor Ausfahrt
Scanner scanner = new Scanner(System.in);
System.out.println("Bitte geben Sie Ihre 16-stellige VISA-Kreditkartennummer ein:");
String kreditkartenNummer = scanner.nextLine();
if (pruefeKreditkarte(kreditkartenNummer)) {
System.out.println("Zahlung erfolgreich. Sie dürfen ausfahren.");
zuEntfernen.setGebuehrenkonto(0); // Gebühren auf 0 setzen
parkendePkws.remove(zuEntfernen);
this.kapazitaet++;
this.belegt--;
System.out.println("PKW mit Kennzeichen " + kennzeichen + " hat die Gebühren bezahlt und darf rausfahren.");
} else {
System.out.println("Ungültige Kreditkartennummer. Zahlung fehlgeschlagen. Ausfahrt verweigert.");
zuEntfernen.setGebuehrenkonto(gebuehren);
System.out.println("Gebührenkonto: " + zuEntfernen.getGebuehrenkonto());
}
} else {
// Gebührenfrei (unter 15 Minuten oder andere Ausnahme)
parkendePkws.remove(zuEntfernen);
this.kapazitaet++;
this.belegt--;
System.out.println("PKW mit Kennzeichen " + kennzeichen + " darf gebührenfrei ausfahren.");
}
} else { } else {
System.out.println("Kein PKW mit diesem Kennzeichen gefunden."); System.out.println("Kein PKW mit diesem Kennzeichen gefunden.");
} }
@ -93,46 +118,45 @@ public class Parkhaus {
return minDiff; return minDiff;
} }
public double berechneGebuehren(String kennzeichen, Date ausfahrt){ public double berechneGebuehren(String kennzeichen, Date ausfahrt) {
long parkdauer = berechneParkdauer(kennzeichen, ausfahrt); long parkdauer = berechneParkdauer(kennzeichen, ausfahrt);
double gebuehr = 0; double gebuehr = 0;
// Falls die Parkdauer 15 Minuten oder weniger beträgt, ist das Parken kostenlos // Falls die Parkdauer 15 Minuten oder weniger beträgt, ist das Parken kostenlos
if (parkdauer <= 15) { if (parkdauer <= 15) {
parkdauer = 0; parkdauer = 0;
gebuehr =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;
} }
// 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;
}
// Methode zur Überprüfung der Kreditkartennummer mit dem Luhn-Algorithmus // Methode zur Überprüfung der Kreditkartennummer mit dem Luhn-Algorithmus
public boolean pruefeKreditkarte(String kreditkartenNummer) { public boolean pruefeKreditkarte(String kreditkartenNummer) {
if (kreditkartenNummer.length() != 16 || !kreditkartenNummer.startsWith("4")) { if (kreditkartenNummer.length() != 16 || !kreditkartenNummer.startsWith("4")) {
@ -155,7 +179,7 @@ public class Parkhaus {
return (sum % 10 == 0); return (sum % 10 == 0);
} }
} }

View File

@ -54,17 +54,8 @@ public class UI {
System.out.println("Parkdauer in Minuten: " + parkhaus1.berechneParkdauer(kennzeichen, ausfahrt)); System.out.println("Parkdauer in Minuten: " + parkhaus1.berechneParkdauer(kennzeichen, ausfahrt));
System.out.println("Parkgebühren in Cent: " + parkhaus1.berechneGebuehren(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: "); parkhaus1.ausfahren(kennzeichen);
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("Ungültige Kreditkartennummer. Zahlung fehlgeschlagen.");
}
} }