Kommentare wurden hinzugefügt

main
Leon Maximilian Löhle 2024-10-08 10:37:24 +02:00
parent 7737315b18
commit f95b975a8f
2 changed files with 94 additions and 2 deletions

View File

@ -9,6 +9,12 @@ public class Auto {
private boolean eAuto;
private double schulden;
/**
*
* @param kennzeichen
* @param einfahrtZeit
* Wird genutzt um ein Auto zu erstellen mit den aus der Main Klasse übergebenen Einfahrtszeit und dem Kennzeichen
*/
public Auto(String kennzeichen, Date einfahrtZeit) {
this.kennzeichen = kennzeichen;
this.einfahrtZeit = einfahrtZeit;
@ -69,6 +75,12 @@ public class Auto {
this.schulden += betrag;
}
/**
*Überprüft ob im eingegebenen Kennzeichen am Ende ein E oder e steht für E-Auto wenn
* das der Fall wird der Boolean E-Auto auf wahr gesetzt um so den
* Preis zu senken
*/
private boolean iseAuto() {
String letztesSymbol = kennzeichen.charAt(kennzeichen.length() - 1) + "";
return (letztesSymbol.equals("E") || letztesSymbol.equals("e"));

View File

@ -43,6 +43,15 @@ public class Parkhaus {
this.platz = platz;
}
/**
* Erstellt ein Parkhaus mit dem Studenpreis 1 Euro
* 180 maximalen Parkplätzen
* eine Nachtpauschale von 5 Euro
* Tagespauschale von 15 Euro
* eine Liste der ausgefahrenen Autos
* Liste mit geparkten Autos
*/
public Parkhaus() {
this.ausgefahrene = new ArrayList<Auto>();
this.preis = 1.0;
@ -53,6 +62,13 @@ public class Parkhaus {
this.autos = new ArrayList<Auto>();
}
/**
* Bekommt den Parameter Auto übergeben aus der Main Klasse von der auswahl einer Einfahrt aus der Main.
* Wenn das Auto mit dem eingegebnen Kennzeichen schon einmal eingefahren war, werden die Schulden aus der ausgefahrenen Liste gesammelt und angezeigt.
* Wenn Auto schon aktuell eingefahren ist, kann es nicht erneut einfahren da in Deutschland kein Kennzeichen zweimal an einem Auto verwendet werden kann.
* Wenn Auto weder eingefahren noch schon eingefahren war, wird ein neues Auto erstellt
*/
public void addAuto(Auto auto) {
for (Auto ausgefahrenesAuto : ausgefahrene) {
if (ausgefahrenesAuto.getKennzeichen().equals(auto.getKennzeichen())) {
@ -69,6 +85,13 @@ public class Parkhaus {
System.out.println("Auto mit dem Kennzeichen " + auto.getKennzeichen() + " ist eingefahren.");
}
/**
* @param kennzeichen
* @return
*
* Mit der eingabe eines Kennzeichens wird nach einem Auto gesucht. In der liste der eingefahrenen Autos als auch in der Liste
* der ausgefahrenen Autos
*/
public Auto autoFinden(String kennzeichen) {
for (Auto auto : autos) {
@ -84,6 +107,19 @@ public class Parkhaus {
return null;
}
/**
*
* @param kennzeichen
* @param bezahltZeit
* @param kreditkartennummer
*
* Es wird nach einem Auto gesucht und wenn dieses nicht gefunden wird, wird ein fehler ausgegeben.
* Wenn das Auto gefunden wurde, werden die einfahrtszeit mit der ausfahrtszeit verglichen, die Kosten für die Parkdauer berechnet und
* dem Kunden ausgegeben
* Der Kunde wird aufgefordert seine 16 stellige Visa Kartennummer einzugeben
* Dann wird die Kartennummer auf plausibilität geprüft
* Wenn die Zahlung funktioniert wird ein Platz im Parkhaus frei und die Schulden des Autos beglichen
*/
public void bezahlen(String kennzeichen, Date bezahltZeit, String kreditkartennummer) {
Auto auto = autoFinden(kennzeichen);
@ -107,6 +143,16 @@ public class Parkhaus {
System.out.println("Nun sind im Parkhaus wieder " + platz + " Plätze frei");
}
/**
*
* @param kreditkartenNummer
* @return
*
*Prüft ob eine Kreditkartennummer plausibel ist, also ob die Länge auch wirklich 16 zeichen sind und sie mit 4 beginnt
* Wenn ja wird der Prüfalgo durchlaufen
* Wenn nein wird ein fehler ausgeworfen
*/
private boolean istGueltigeVisaKarte(String kreditkartenNummer) {
if (kreditkartenNummer.length() != 16 || !kreditkartenNummer.startsWith("4")) {
return false;
@ -114,10 +160,20 @@ public class Parkhaus {
return algoPruf(kreditkartenNummer);
}
/**
*
* @param kartennummer
* @return
* Algo zum prüfen ob die Prüfziffer der Kreditkarte korrekt ist durch abwechselndes verdoppeln der Zahlen
* bis zur 15.ten stelle aufaddieren
* prüfziffer die es sein sollte wird berechnet
* berechnete Prüfziffer mit tatsächlicher Prüfziffer verglichen
*/
private boolean algoPruf(String kartennummer) {
int summe = 0;
boolean verdoppeln = false;
for (int i = kartennummer.length() - 1; i >= 0; i--) {
for (int i = kartennummer.length() - 2; i >= 0; i--) {
int ziffer = Character.getNumericValue(kartennummer.charAt(i));
if (verdoppeln) {
ziffer *= 2;
@ -128,9 +184,20 @@ public class Parkhaus {
summe += ziffer;
verdoppeln = !verdoppeln;
}
return summe % 10 == 0;
int berechnetePrufziffer = (10 - (summe % 10)) % 10;
int gegebenePrufziffer = Character.getNumericValue(kartennummer.charAt(kartennummer.length() - 1));
return berechnetePrufziffer == gegebenePrufziffer;
}
/**
*
* @param kennzeichen
* @param ausfahrtZeit
* Wird genutzt um auto ohne bezahlen ausfahren zu lassen
* Preis wird mit der ausfahrtzeit berechnet und werden auf schulden aufaddiert
* schulden werden dem Auto zugespeichert und auto fährt aus, wird in ausgefahrene Autos hinzugefügt um schulden speichern zu können
*/
public void ausfahrt(String kennzeichen, Date ausfahrtZeit) {
Auto auto = autoFinden(kennzeichen);
if (auto == null) {
@ -148,6 +215,19 @@ public class Parkhaus {
platz += 1;
}
/**
*
* @param auto
* @param ausfahrtZeit
* @return
*
* Um Parkkosten korrekt zu berechnen wird auf parkzeit <15 min geprüft um Kiss and Ride zu gewährleisten
* Parktage werden mit dem Tagespreis multipliziert und angefangene Stunden werden berücksichtigt und müssen bezahlt werden
* Kosten fangen erst nach 15 minuten für Kiss and Ride an
* Wenn die Einfahrtszeit nach 20 und vor 06 Uhr liegen kostet es nur 5 euro durch die maximale nachtpauschale
* Wenn es sich um ein E-Auto handelt kostet es 20% weniger zu parken
*/
public double berechneParkKosten(Auto auto, Date ausfahrtZeit) {
Date einfahrtZeit = auto.getEinfahrtZeit();
long parkMinuten = (ausfahrtZeit.getTime() - einfahrtZeit.getTime()) / 60000;