Junit Test für die Einfahren Methode, Gebühren berechnen methode,
Code-Verbesserungen, Use Case für das Parkhausmain
parent
1bfd8bed19
commit
9cc877e0e9
|
@ -0,0 +1,41 @@
|
||||||
|
Frage 1:
|
||||||
|
Ich: erkläre mir mit einfachen Wörtern, wie man die Prüfziffer einer 16stellige VISA-Karten überprüft?
|
||||||
|
|
||||||
|
ChatGPT: Um die Prüfziffer einer 16-stelligen VISA-Karte zu überprüfen, verwendet man den sogenannten Luhn-Algorithmus. Hier ist eine einfache Schritt-für-Schritt-Erklärung, wie das funktioniert:
|
||||||
|
|
||||||
|
Zahlen von rechts nach links durchgehen: Schreibe die 16-stellige Kartennummer auf und beginne mit der letzten Ziffer (die ganz rechts steht).
|
||||||
|
|
||||||
|
Jede zweite Ziffer verdoppeln: Beginne bei der zweitletzten Ziffer und verdopple jede zweite Zahl. Wenn das Ergebnis des Verdoppelns zweistellig ist (z. B. 7 × 2 = 14), addiere die beiden Ziffern zusammen (also 1 + 4 = 5).
|
||||||
|
|
||||||
|
Alle Ziffern addieren: Nachdem du die Verdopplungen und die Additionen gemacht hast, zähle alle Ziffern zusammen (die verdoppelten und die unveränderten).
|
||||||
|
|
||||||
|
Durch 10 teilen: Wenn die Summe der Ziffern durch 10 teilbar ist (also ohne Rest), ist die Kartennummer gültig. Wenn nicht, ist sie ungültig.
|
||||||
|
|
||||||
|
Beispiel:
|
||||||
|
|
||||||
|
Kartennummer: 4532 7084 1234 5678
|
||||||
|
|
||||||
|
Verdopple jede zweite Ziffer (von rechts aus gesehen):
|
||||||
|
|
||||||
|
8 bleibt 8
|
||||||
|
7 wird zu 14 (1 + 4 = 5)
|
||||||
|
6 bleibt 6
|
||||||
|
5 wird zu 10 (1 + 0 = 1)
|
||||||
|
usw.
|
||||||
|
Addiere die Ziffern zusammen: Summe = 70
|
||||||
|
|
||||||
|
Da 70 durch 10 teilbar ist, ist die Kartennummer gültig.
|
||||||
|
|
||||||
|
Das ist der Grundprozess zur Überprüfung der Prüfziffer.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------------------------------------------
|
||||||
|
Frage 2:
|
||||||
|
Ich: was macht die methode mathe.Ceil() einfach?
|
||||||
|
ChatGPT:Die Methode Math.ceil() ist eine Funktion aus der Java-Bibliothek, die eine Zahl aufrundet. Sie gibt den kleinsten ganzzahligen Wert zurück, der größer oder gleich der eingegebenen Zahl ist.
|
||||||
|
Funktionsweise von Math.ceil():
|
||||||
|
Wenn die Zahl bereits ganzzahlig ist, bleibt sie unverändert.
|
||||||
|
Wenn die Zahl einen Nachkommateil hat, wird sie zur nächsten vollen Zahl aufgerundet.
|
||||||
|
Beispiel:
|
||||||
|
Math.ceil(2.1); // Ausgabe: 3.0
|
||||||
|
Math.ceil(3.7); // Ausgabe: 4.0
|
||||||
|
Math.ceil(1.01); // Ausgabe: 2.0
|
Binary file not shown.
|
@ -0,0 +1,9 @@
|
||||||
|
package Parkhaus;
|
||||||
|
|
||||||
|
public class AutoNichtGefundenException extends Exception {
|
||||||
|
|
||||||
|
AutoNichtGefundenException(String autoNichtGefunden){
|
||||||
|
super(autoNichtGefunden);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -3,51 +3,73 @@ package Parkhaus;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
/* Jedes Fahrzeug hat ihr eigene:
|
||||||
|
* - Kennzeichen
|
||||||
|
* - Einfahrtzeit sowie Ausfahrtzeit
|
||||||
|
* - Betrag
|
||||||
|
*
|
||||||
|
* - Ich gehe davon aus, dass das Fahrzeug automatisch als nicht bezahlt gilt, wenn es in das Parkhaus einfährt.
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class Fahrzeug {
|
public class Fahrzeug {
|
||||||
|
|
||||||
|
|
||||||
private String kennzeichen;
|
private final String kennzeichen;
|
||||||
private Date einfahrt;
|
private final Date einfahrt;
|
||||||
private Date ausfahrt;
|
private Date ausfahrt;
|
||||||
private boolean bezahlt;
|
private boolean bezahlt;
|
||||||
|
private int betrag;
|
||||||
|
|
||||||
|
Fahrzeug() {
|
||||||
Fahrzeug() {
|
this.kennzeichen = kennzeichenzufaelliggenerieren.kennzeichengenerieren();
|
||||||
this.kennzeichen = kennzeichenzufaelliggenerieren.kennzeichenzufaelliggenerieren();
|
|
||||||
this.einfahrt = new Date();
|
this.einfahrt = new Date();
|
||||||
|
this.betrag = 0;
|
||||||
|
this.bezahlt = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Fahrzeug(String kennzeichen, Date einfahrt) {
|
Fahrzeug(String kennzeichen, Date einfahrt) {
|
||||||
|
|
||||||
this.kennzeichen = kennzeichen;
|
this.kennzeichen = kennzeichen;
|
||||||
this.einfahrt = einfahrt;
|
this.einfahrt = einfahrt;
|
||||||
|
this.betrag = 0;
|
||||||
|
this.bezahlt = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getKennzeichen() {
|
|
||||||
return kennzeichen;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public String getKennzeichen() {
|
||||||
|
return kennzeichen;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Diese Methode hilft mir, die Zeit in der Console formatted auszugeben
|
||||||
public String getEinfahrtFormatted() {
|
public String getEinfahrtFormatted() {
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||||
return sdf.format(einfahrt);
|
return sdf.format(einfahrt);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getAusfahrt() {
|
public Date getEinfahrt() {
|
||||||
return ausfahrt;
|
return einfahrt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAusfahrt(Date ausfahrt) {
|
public Date getAusfahrt() {
|
||||||
this.ausfahrt = ausfahrt;
|
return ausfahrt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isBezahlt() {
|
public void setAusfahrt(Date ausfahrt) {
|
||||||
return bezahlt;
|
this.ausfahrt = ausfahrt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBezahlt(boolean bezahlt) {
|
public boolean isBezahlt() {
|
||||||
this.bezahlt = bezahlt;
|
return bezahlt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setBezahlt(boolean bezahlt) {
|
||||||
|
this.bezahlt = bezahlt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBetrag() {
|
||||||
|
return betrag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBetrag(int betrag) {
|
||||||
|
this.betrag = betrag;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
package Parkhaus;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import org.junit.jupiter.api.*;
|
||||||
|
import java.text.ParseException;
|
||||||
|
|
||||||
|
class JTest_Einfahren {
|
||||||
|
private Parkhaus parkhaus;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void start() {
|
||||||
|
parkhaus = new Parkhaus();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEinfahrenOhneEingabe() throws ParseException {
|
||||||
|
|
||||||
|
parkhaus.einfahrenextern("", "");
|
||||||
|
assertEquals(179, parkhaus.getMaxPlaetze());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEinfahrenMitEingabe() throws ParseException {
|
||||||
|
String kennzeichen = "MA-SH 4077";
|
||||||
|
String einfahrtzeit = "01.10.2024, 14:30";
|
||||||
|
|
||||||
|
String test = parkhaus.einfahrenextern(kennzeichen, einfahrtzeit);
|
||||||
|
assertTrue(test.contains(kennzeichen));
|
||||||
|
assertTrue(test.contains(einfahrtzeit));
|
||||||
|
assertEquals(179, parkhaus.getMaxPlaetze());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,80 +11,122 @@ import java.util.Date;
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Parkhaus {
|
public class Parkhaus {
|
||||||
|
|
||||||
private ArrayList<Fahrzeug> fahrzeuge;
|
private ArrayList<Fahrzeug> fahrzeuge;
|
||||||
private ArrayList<Fahrzeug> fahrzeugeMitSchuldern;
|
private ArrayList<Fahrzeug> fahrzeugeMitSchulden;
|
||||||
private static int maxPlaetze;
|
private int maxPlaetze;
|
||||||
private SimpleDateFormat sdf;
|
private SimpleDateFormat sdf;
|
||||||
|
|
||||||
|
Parkhaus() {
|
||||||
Parkhaus(){
|
|
||||||
fahrzeuge = new ArrayList<>();
|
fahrzeuge = new ArrayList<>();
|
||||||
fahrzeugeMitSchuldern = new ArrayList<>();
|
fahrzeugeMitSchulden = new ArrayList<>();
|
||||||
maxPlaetze = 180;
|
maxPlaetze = 180;
|
||||||
sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||||
}
|
}
|
||||||
|
|
||||||
private String einfahrenIntern(String kennzeichen, String einfahrtzeit) throws ParseException {
|
private String einfahrenIntern(String kennzeichen, String einfahrtzeit) throws ParseException {
|
||||||
Date einfahrt;
|
Date einfahrt;
|
||||||
Fahrzeug fahrzeug;
|
Fahrzeug fahrzeug;
|
||||||
if (kennzeichen.isEmpty() && einfahrtzeit.isEmpty())
|
if (kennzeichen.isEmpty() && einfahrtzeit.isEmpty())
|
||||||
fahrzeug = new Fahrzeug();
|
fahrzeug = new Fahrzeug();
|
||||||
|
|
||||||
else {
|
else {
|
||||||
einfahrt = sdf.parse(einfahrtzeit);
|
einfahrt = sdf.parse(einfahrtzeit);
|
||||||
fahrzeug = new Fahrzeug(kennzeichen, einfahrt);
|
fahrzeug = new Fahrzeug(kennzeichen, einfahrt);
|
||||||
}
|
}
|
||||||
|
|
||||||
fahrzeuge.add(fahrzeug);
|
fahrzeuge.add(fahrzeug);
|
||||||
|
|
||||||
|
// reduziere ich die Anzahl der verfügbare Parkplätze im Parkhaus
|
||||||
maxPlaetze--;
|
maxPlaetze--;
|
||||||
return "Das Fahrzeug mit dem Kennzeichen: " + fahrzeug.getKennzeichen() + "\n" + "wurde um: "
|
return "Das Fahrzeug mit dem Kennzeichen: " + fahrzeug.getKennzeichen() + "\n" + "wurde um: "
|
||||||
+ fahrzeug.getEinfahrtFormatted() + " im Parkhaus eingefahren.";
|
+ fahrzeug.getEinfahrtFormatted() + " im Parkhaus eingefahren.";
|
||||||
}
|
}
|
||||||
|
|
||||||
public String einfahrenextern(String kennzeichen, String einfahrtzeit) throws ParseException {
|
public String einfahrenextern(String kennzeichen, String einfahrtzeit) throws ParseException {
|
||||||
if(!checkParkplatze())
|
|
||||||
return "Das Parkhaus ist voll";
|
return einfahrenIntern(kennzeichen, einfahrtzeit);
|
||||||
|
|
||||||
return einfahrenIntern(kennzeichen,einfahrtzeit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int berechneParkgebuehrenIntern(String kennzeichen, String ausfahrtzeit)throws AutoNichtGefundenException, ParseException {
|
||||||
|
Fahrzeug fahrzeug = findeFahrzeug(kennzeichen);
|
||||||
|
Date ausfahrt = sdf.parse(ausfahrtzeit);
|
||||||
|
Date einfahrt = fahrzeug.getEinfahrt();
|
||||||
|
|
||||||
|
long inMinuten = ((ausfahrt.getTime() - einfahrt.getTime()) / 1000 / 60);
|
||||||
|
int inStunden = (int) Math.ceil(inMinuten / 60); // Z.b = 6 Stunden
|
||||||
|
int maxNachtBetrag = 5;
|
||||||
|
int maxTagBetrag = 15;
|
||||||
|
int betrag;
|
||||||
|
|
||||||
|
if (inMinuten <= 15)
|
||||||
|
betrag = 0;
|
||||||
|
|
||||||
|
|
||||||
|
// zwische 20 Uhr und 6 Uhr max 5€
|
||||||
|
else if (einfahrt.getHours() >= 20 || einfahrt.getHours() < 6 || ausfahrt.getHours() >= 20|| ausfahrt.getHours() < 6)
|
||||||
|
betrag = Math.min(inStunden, maxNachtBetrag);
|
||||||
|
|
||||||
|
else {
|
||||||
|
betrag = inStunden;
|
||||||
|
|
||||||
|
if (betrag > maxTagBetrag)
|
||||||
|
betrag = maxTagBetrag;
|
||||||
|
}
|
||||||
|
|
||||||
|
fahrzeug.setBetrag(betrag);
|
||||||
|
return fahrzeug.getBetrag();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public int berechneParkgebuehrenExtern(String kennzeichen, String ausfahrtzeit) throws AutoNichtGefundenException, ParseException {
|
||||||
|
int betrag = berechneParkgebuehrenIntern(kennzeichen, ausfahrtzeit);
|
||||||
|
return betrag;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public boolean checkParkplatze() {
|
public boolean checkParkplatze() {
|
||||||
if (maxPlaetze <= 0)
|
return maxPlaetze > 0;
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean checkSchulden(String kennzeichen) {
|
private boolean checkSchulden(String kennzeichen) {
|
||||||
for (Fahrzeug sc: fahrzeugeMitSchuldern)
|
for (Fahrzeug sc : fahrzeugeMitSchulden)
|
||||||
if (sc.getKennzeichen().equals(kennzeichen))
|
if (sc.getKennzeichen().equals(kennzeichen))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean checkSchuldenExtern(String kennzeichen) {
|
public boolean checkSchuldenExtern(String kennzeichen) {
|
||||||
return checkSchulden(kennzeichen);
|
return checkSchulden(kennzeichen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Fahrzeug findeFahrzeug(String kennzeichen) throws AutoNichtGefundenException {
|
||||||
|
|
||||||
|
for (Fahrzeug auto : fahrzeuge)
|
||||||
|
if (auto.getKennzeichen().equals(kennzeichen))
|
||||||
|
return auto;
|
||||||
|
|
||||||
|
throw new AutoNichtGefundenException("Ihre Auto wurde nicht gefunden \n melden Sie sich bitte an die Support");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getter methoden:
|
||||||
public ArrayList<Fahrzeug> getFahrzeuge() {
|
public ArrayList<Fahrzeug> getFahrzeuge() {
|
||||||
return fahrzeuge;
|
return fahrzeuge;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<Fahrzeug> getFahrzeugeMitSchuldern() {
|
public ArrayList<Fahrzeug> getFahrzeugeMitSchulden() {
|
||||||
return fahrzeugeMitSchuldern;
|
return fahrzeugeMitSchulden;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getMaxPlaetze() {
|
public int getMaxPlaetze() {
|
||||||
return maxPlaetze;
|
return maxPlaetze;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SimpleDateFormat getSdf() {
|
public SimpleDateFormat getSdf() {
|
||||||
return sdf;
|
return sdf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -8,19 +8,16 @@ import java.util.Random;
|
||||||
* - Diese Klasse hat nur die Aufgabe, zufällige Kennzeichen zu generieren
|
* - Diese Klasse hat nur die Aufgabe, zufällige Kennzeichen zu generieren
|
||||||
* - immer wenn diese Klasse ein zufälliges Kennzeichen generiert,
|
* - immer wenn diese Klasse ein zufälliges Kennzeichen generiert,
|
||||||
* - speichere ich das,damit es nicht für mehrere Autos dasselbe Kennzeichen generiert.
|
* - speichere ich das,damit es nicht für mehrere Autos dasselbe Kennzeichen generiert.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
public class kennzeichenzufaelliggenerieren {
|
public class kennzeichenzufaelliggenerieren {
|
||||||
|
private static final ArrayList<String> speichereEindutigeNummern = new ArrayList<>();
|
||||||
private static ArrayList<String> speichereEindutigeNummern = new ArrayList<>();
|
private static final String[] ersteZweiZeichen = { "MA", "HD", "KA", "FF", "ROK", "BW", "HH", "B", "D" };
|
||||||
private static String[] ersteZweiZeichen = { "MA", "HD", "KA", "FF", "ROK", "BW", "HH", "B", "D" };
|
private static final String[] zweiteZweizeichen = { "ME", "SH", "DF", "KC", "FT", "GH", "OM", "KL", "CV" };
|
||||||
private static String[] zweiteZweizeichen = { "ME", "SH", "DF", "KC", "FT", "GH", "OM", "KL", "CV" };
|
|
||||||
private static String eindutigeZahlen = "";
|
private static String eindutigeZahlen = "";
|
||||||
private static Random random = new Random();
|
private static Random random = new Random();
|
||||||
|
|
||||||
public static String kennzeichenzufaelliggenerieren() {
|
public static String kennzeichengenerieren() {
|
||||||
String zufaelligeKennzeichen = "";
|
String zufaelligeKennzeichen;
|
||||||
|
|
||||||
zufaelligeKennzeichen = ersteZweiZeichen[random.nextInt(ersteZweiZeichen.length)];
|
zufaelligeKennzeichen = ersteZweiZeichen[random.nextInt(ersteZweiZeichen.length)];
|
||||||
zufaelligeKennzeichen += "-" + zweiteZweizeichen[random.nextInt(zweiteZweizeichen.length)] + " ";
|
zufaelligeKennzeichen += "-" + zweiteZweizeichen[random.nextInt(zweiteZweizeichen.length)] + " ";
|
||||||
|
@ -54,4 +51,4 @@ public class kennzeichenzufaelliggenerieren {
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -5,4 +5,5 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
module Parkhaus {
|
module Parkhaus {
|
||||||
|
requires org.junit.jupiter.api;
|
||||||
}
|
}
|
Loading…
Reference in New Issue