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 0000000..31feb5b Binary files /dev/null and b/src/Parkhaus als use case.pdf differ 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