diff --git a/Qualifier Parkhaus/src/Auto.java b/Qualifier Parkhaus/src/Auto.java index 73fed43..e732670 100644 --- a/Qualifier Parkhaus/src/Auto.java +++ b/Qualifier Parkhaus/src/Auto.java @@ -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")); diff --git a/Qualifier Parkhaus/src/Parkhaus.java b/Qualifier Parkhaus/src/Parkhaus.java index 4567268..033194b 100644 --- a/Qualifier Parkhaus/src/Parkhaus.java +++ b/Qualifier Parkhaus/src/Parkhaus.java @@ -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(); this.preis = 1.0; @@ -53,6 +62,13 @@ public class Parkhaus { this.autos = new ArrayList(); } + /** + * 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;