From 9cc877e0e9609905143eb0e59db4302593817558 Mon Sep 17 00:00:00 2001 From: 3009594 Date: Fri, 4 Oct 2024 15:18:26 +0200 Subject: [PATCH] =?UTF-8?q?Junit=20Test=20f=C3=BCr=20die=20Einfahren=20Met?= =?UTF-8?q?hode,=20Geb=C3=BChren=20berechnen=20methode,=20Code-Verbesserun?= =?UTF-8?q?gen,=20Use=20Case=20f=C3=BCr=20das=20Parkhaus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ChatGPT.txt | 41 +++++++ src/Parkhaus als use case.pdf | Bin 0 -> 37264 bytes src/Parkhaus/AutoNichtGefundenException.java | 9 ++ src/Parkhaus/Fahrzeug.java | 76 ++++++++----- src/Parkhaus/JTest_Einfahren.java | 33 ++++++ src/Parkhaus/Parkhaus.java | 104 ++++++++++++------ .../kennzeichenzufaelliggenerieren.java | 15 +-- src/module-info.java | 1 + 8 files changed, 212 insertions(+), 67 deletions(-) create mode 100644 src/Parkhaus als use case.pdf create mode 100644 src/Parkhaus/AutoNichtGefundenException.java create mode 100644 src/Parkhaus/JTest_Einfahren.java diff --git a/src/ChatGPT.txt b/src/ChatGPT.txt index e69de29..2d35108 100644 --- a/src/ChatGPT.txt +++ b/src/ChatGPT.txt @@ -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 \ No newline at end of file diff --git a/src/Parkhaus als use case.pdf b/src/Parkhaus als use case.pdf new file mode 100644 index 0000000000000000000000000000000000000000..31feb5b719ed0c09b3fa5f609fec552c6b8366cc GIT binary patch literal 37264 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 C?z(vZ literal 0 HcmV?d00001 diff --git a/src/Parkhaus/AutoNichtGefundenException.java b/src/Parkhaus/AutoNichtGefundenException.java new file mode 100644 index 0000000..15600ef --- /dev/null +++ b/src/Parkhaus/AutoNichtGefundenException.java @@ -0,0 +1,9 @@ +package Parkhaus; + +public class AutoNichtGefundenException extends Exception { + + AutoNichtGefundenException(String autoNichtGefunden){ + super(autoNichtGefunden); + } + +} diff --git a/src/Parkhaus/Fahrzeug.java b/src/Parkhaus/Fahrzeug.java index 3a6ab5c..524ff82 100644 --- a/src/Parkhaus/Fahrzeug.java +++ b/src/Parkhaus/Fahrzeug.java @@ -3,51 +3,73 @@ package Parkhaus; import java.text.SimpleDateFormat; 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 { - - private String kennzeichen; - private Date einfahrt; - private Date ausfahrt; - private boolean bezahlt; + private final String kennzeichen; + private final Date einfahrt; + private Date ausfahrt; + private boolean bezahlt; + private int betrag; - - Fahrzeug() { - this.kennzeichen = kennzeichenzufaelliggenerieren.kennzeichenzufaelliggenerieren(); + Fahrzeug() { + this.kennzeichen = kennzeichenzufaelliggenerieren.kennzeichengenerieren(); this.einfahrt = new Date(); + this.betrag = 0; + this.bezahlt = false; } - Fahrzeug(String kennzeichen, Date einfahrt) { - + Fahrzeug(String kennzeichen, Date einfahrt) { this.kennzeichen = kennzeichen; 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() { SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); return sdf.format(einfahrt); } - public Date getAusfahrt() { - return ausfahrt; - } + public Date getEinfahrt() { + return einfahrt; + } - public void setAusfahrt(Date ausfahrt) { - this.ausfahrt = ausfahrt; - } + public Date getAusfahrt() { + return ausfahrt; + } - public boolean isBezahlt() { - return bezahlt; - } + public void setAusfahrt(Date ausfahrt) { + this.ausfahrt = ausfahrt; + } - public void setBezahlt(boolean bezahlt) { - this.bezahlt = bezahlt; - } - + public boolean isBezahlt() { + return bezahlt; + } + + public void setBezahlt(boolean bezahlt) { + this.bezahlt = bezahlt; + } + + public int getBetrag() { + return betrag; + } + + public void setBetrag(int betrag) { + this.betrag = betrag; + } } diff --git a/src/Parkhaus/JTest_Einfahren.java b/src/Parkhaus/JTest_Einfahren.java new file mode 100644 index 0000000..ca5d089 --- /dev/null +++ b/src/Parkhaus/JTest_Einfahren.java @@ -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()); + + } +} \ No newline at end of file diff --git a/src/Parkhaus/Parkhaus.java b/src/Parkhaus/Parkhaus.java index d922bb4..162d629 100644 --- a/src/Parkhaus/Parkhaus.java +++ b/src/Parkhaus/Parkhaus.java @@ -11,80 +11,122 @@ import java.util.Date; * */ public class Parkhaus { - private ArrayList fahrzeuge; - private ArrayList fahrzeugeMitSchuldern; - private static int maxPlaetze; - private SimpleDateFormat sdf; + private ArrayList fahrzeugeMitSchulden; + private int maxPlaetze; + private SimpleDateFormat sdf; - - Parkhaus(){ + Parkhaus() { fahrzeuge = new ArrayList<>(); - fahrzeugeMitSchuldern = new ArrayList<>(); + fahrzeugeMitSchulden = new ArrayList<>(); 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 { Date einfahrt; Fahrzeug fahrzeug; if (kennzeichen.isEmpty() && einfahrtzeit.isEmpty()) fahrzeug = new Fahrzeug(); + else { einfahrt = sdf.parse(einfahrtzeit); fahrzeug = new Fahrzeug(kennzeichen, einfahrt); } - + fahrzeuge.add(fahrzeug); + + // reduziere ich die Anzahl der verfügbare Parkplätze im Parkhaus maxPlaetze--; return "Das Fahrzeug mit dem Kennzeichen: " + fahrzeug.getKennzeichen() + "\n" + "wurde um: " + fahrzeug.getEinfahrtFormatted() + " im Parkhaus eingefahren."; } + 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() { - if (maxPlaetze <= 0) - return false; - - return true; + return maxPlaetze > 0; } - - + private boolean checkSchulden(String kennzeichen) { - for (Fahrzeug sc: fahrzeugeMitSchuldern) + for (Fahrzeug sc : fahrzeugeMitSchulden) if (sc.getKennzeichen().equals(kennzeichen)) - return true; - + return true; + return false; } - + public boolean checkSchuldenExtern(String 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 getFahrzeuge() { return fahrzeuge; } - public ArrayList getFahrzeugeMitSchuldern() { - return fahrzeugeMitSchuldern; + public ArrayList getFahrzeugeMitSchulden() { + return fahrzeugeMitSchulden; } - public static int getMaxPlaetze() { + public int getMaxPlaetze() { return maxPlaetze; } public SimpleDateFormat getSdf() { return sdf; } - - -} +} \ No newline at end of file diff --git a/src/Parkhaus/kennzeichenzufaelliggenerieren.java b/src/Parkhaus/kennzeichenzufaelliggenerieren.java index ebad2d4..a9d57fe 100644 --- a/src/Parkhaus/kennzeichenzufaelliggenerieren.java +++ b/src/Parkhaus/kennzeichenzufaelliggenerieren.java @@ -8,19 +8,16 @@ import java.util.Random; * - Diese Klasse hat nur die Aufgabe, zufällige Kennzeichen zu generieren * - immer wenn diese Klasse ein zufälliges Kennzeichen generiert, * - speichere ich das,damit es nicht für mehrere Autos dasselbe Kennzeichen generiert. - - */ public class kennzeichenzufaelliggenerieren { - - private static ArrayList speichereEindutigeNummern = new ArrayList<>(); - private static String[] ersteZweiZeichen = { "MA", "HD", "KA", "FF", "ROK", "BW", "HH", "B", "D" }; - private static String[] zweiteZweizeichen = { "ME", "SH", "DF", "KC", "FT", "GH", "OM", "KL", "CV" }; + private static final ArrayList speichereEindutigeNummern = new ArrayList<>(); + private static final 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 eindutigeZahlen = ""; private static Random random = new Random(); - public static String kennzeichenzufaelliggenerieren() { - String zufaelligeKennzeichen = ""; + public static String kennzeichengenerieren() { + String zufaelligeKennzeichen; zufaelligeKennzeichen = ersteZweiZeichen[random.nextInt(ersteZweiZeichen.length)]; zufaelligeKennzeichen += "-" + zweiteZweizeichen[random.nextInt(zweiteZweizeichen.length)] + " "; @@ -54,4 +51,4 @@ public class kennzeichenzufaelliggenerieren { return true; } -} +} \ No newline at end of file diff --git a/src/module-info.java b/src/module-info.java index 75ad570..b6162e3 100644 --- a/src/module-info.java +++ b/src/module-info.java @@ -5,4 +5,5 @@ * */ module Parkhaus { + requires org.junit.jupiter.api; } \ No newline at end of file