Verbesserte SystemAusGaben,

verbesserte berechnungen,
ausfahrt und Schuldenspeicherung überarbeitet,
flow chart korrigiert;
KI Promts hinzugefügt
main
Leon Maximilian Löhle 2024-10-08 09:55:51 +02:00
parent 423e6e33b0
commit 7737315b18
8 changed files with 296 additions and 46 deletions

View File

@ -1,26 +1,35 @@
Benutzer startet Main Klasse
System gibt Willkommens Nachricht aus und bittet um eingabe ob einfahrt oder ausfahrt
Benutzer gibt ein ob man ein-, ausfährt, bezahlen oder beenden möchte
System nimmt entscheidung auf und startet anhand der Entscheidung entweder der Park/Ausfahrt oder den Bezahlvorgang oder beendet das Programm
Benutzer startet Main-Klasse:
Das Programm erstellt im Hintergrund ein Datumsformat und baut einen Parkplatz auf, um auf die Parkplatz-Klasse zugreifen zu können.
Das System gibt eine Willkommensnachricht aus und bittet um die Eingabe, ob Einfahrt oder Ausfahrt gewünscht ist.
Der Benutzer gibt ein, ob man ein- oder ausfahren, bezahlen oder das Programm beenden möchte.
Das System nimmt die Entscheidung auf und startet basierend auf der Entscheidung entweder den Park-/Ausfahrtvorgang, den Bezahlvorgang oder beendet das Programm.
1. Parkvorgang:
Das Programm bittet um eingabe des Kennzeichens und des Datums mit Uhrzeit
Benutzer gibt die geforderten Daten ein
Programm kreiert anhand der Daten ein neues Auto Objekt in der Parkhaus Klasse und speichert in einer Auto Liste um mehrere Autos managen zu können
Das Programm bittet um die Eingabe des Kennzeichens und des Datums mit Uhrzeit.
Der Benutzer gibt die geforderten Daten ein.
Das Programm sucht in der ArrayList der eingefahrenen und ausgefahrenen Autos nach dem Kennzeichen, um sicherzugehen, dass das Auto noch nicht eingefahren ist und ob es bereits einmal eingefahren war, um die Schulden zu übernehmen.
Wenn das Auto in den eingefahrenen Autos gefunden wird, gibt das System einen Fehler aus, da Autos nicht zwei Mal mit dem gleichen Kennzeichen eingefahren sein können.
Wenn das Auto in den ausgefahrenen Autos gefunden wird, werden die Schulden übernommen, und es wird eine Willkommensnachricht mit der Erklärung ausgegeben, dass die Schulden übernommen wurden.
Wenn das Auto nirgends vorhanden ist, wird ein neues Auto erstellt und eingefahren.
2. Ausfahrt:
Eingabe des Kennzeichens und Datums mit Uhrzeit vom Ausfahren
Preis berechnung im Hintergrund
Platz im Parkhaus wird wieder größer
nicht gezahlter Betrag wird zu den Schulden gespeichert
Das System fordert den Kunden auf, das Kennzeichen sowie die Uhrzeit einzugeben, zu der ausgefahren werden soll.
Nach der Eingabe des Kennzeichens und des Datums mit Uhrzeit für die Ausfahrt erfolgt die Preisberechnung im Hintergrund.
(Wenn die Dauer des Parkaufenthalts kürzer als 15 Minuten ist, gilt "Kiss and Ride", und es entstehen keine Kosten.)
Das Ergebnis der Parkkostenberechnung wird ausgegeben, gefolgt von einer Abschiedsnachricht mit der Ankündigung, dass Schulden hinzugefügt wurden, da nicht bezahlt wurde.
Der Platz im Parkhaus wird wieder freigegeben.
Das Auto wird in der Liste der ausgefahrenen Autos gespeichert, um beim nächsten Einfahren auf die Schulden zugreifen zu können.
3. Bezahlen und Ausfahren
Eingabe des Kennzeichens und Datums mit Uhrzeit vom Ausfahren
Preis berechnung im Hintergrund
Ausgabe des Preises
Kunde wird aufgefordert seine Kreditkartennummer einzugeben
Prüfziffer wird berechnet
Platz im Parkhaus wird größer, keine Schulden da gezahlt wird
3. Bezahlen und Ausfahren:
Das System fordert den Kunden auf, das Kennzeichen sowie die Uhrzeit einzugeben, zu der bezahlt werden soll.
Nach der Eingabe des Kennzeichens und des Datums mit Uhrzeit erfolgt die Preisberechnung im Hintergrund.
Der zu zahlende Betrag wird ausgegeben.
Der Kunde wird aufgefordert, seine Kreditkartennummer einzugeben.
Die Kreditkartennummer wird auf Plausibilität geprüft.
Wenn plausibel, werden die einzelnen Ziffern der Kreditkartennummer aufaddiert und die Quersumme gebildet.
Die Quersumme wird mit Modulo 10 geprüft, ob sie mit der letzten Ziffer der Kreditkartennummer übereinstimmt.
Wenn ja, werden die Schulden beglichen, das Auto fährt aus, und der Platz im Parkhaus wird wieder freigegeben.
Wenn nein, werden die Schulden nicht getilgt, und der Kunde wird erneut aufgefordert, das Kennzeichen und die Bezahlzeit einzugeben.
4. beenden:
Programm verabschiedet sich und wird beendet
4. Beenden:
Das Programm verabschiedet sich und wird beendet.

View File

@ -0,0 +1,97 @@
Ich:
java while schleife ist nicht immer true, wie kann ich eine andere Option anbieten. Beispiel: So lange die Eistüte nicht voll ist kann man hinzufügen, aber wenn die Eistüte voll ist soll man nur noch wegnehmen können
ChatGPT:
In deinem Beispiel möchtest du eine Schleife haben, die fortlaufend Eis in eine Eistüte füllt, solange sie nicht voll ist. Sobald die Eistüte voll ist, soll die Schleife nur noch das Entfernen von Eis erlauben. Du kannst dies mit einer Kombination aus einer `while`-Schleife und einer Bedingung realisieren, die entscheidet, ob du Eis hinzufügen oder wegnehmen kannst.
Hier ist eine einfache Möglichkeit, dies umzusetzen:
1. Verwende eine Schleife, um den aktuellen Zustand der Eistüte zu überprüfen.
2. Wenn die Eistüte voll ist, kann man nur noch Eis wegnehmen.
3. Wenn die Eistüte nicht voll ist, kann man Eis hinzufügen.
Ein Beispiel in Java:
```java
import java.util.Scanner;
public class Eisstand {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int maximaleKapazität = 5; // Maximale Anzahl der Eiskugeln, die die Tüte halten kann
int aktuelleKugeln = 0; // Aktuelle Anzahl der Eiskugeln in der Tüte
while (true) {
if (aktuelleKugeln < maximaleKapazität) {
System.out.println("Die Eistüte hat " + aktuelleKugeln + " Kugeln. Möchtest du eine Kugel hinzufügen? (ja/nein)");
String eingabe = scanner.nextLine();
if (eingabe.equalsIgnoreCase("ja")) {
aktuelleKugeln++;
System.out.println("Eine Kugel wurde hinzugefügt.");
} else {
System.out.println("Okay, keine Kugel hinzugefügt.");
}
} else {
System.out.println("Die Eistüte ist voll mit " + aktuelleKugeln + " Kugeln. Möchtest du eine Kugel wegnehmen? (ja/nein)");
String eingabe = scanner.nextLine();
if (eingabe.equalsIgnoreCase("ja")) {
aktuelleKugeln--;
System.out.println("Eine Kugel wurde weggenommen.");
} else {
System.out.println("Keine Kugel wurde weggenommen.");
}
}
}
}
}
```
### Erklärung:
- Solange die Anzahl der Kugeln in der Eistüte kleiner ist als die maximale Kapazität (`aktuelleKugeln < maximaleKapazität`), wird der Benutzer gefragt, ob er eine Kugel hinzufügen möchte.
- Sobald die maximale Kapazität erreicht ist, wird der Benutzer gefragt, ob er eine Kugel entfernen möchte, da die Eistüte voll ist.
Mit dieser Logik wird sichergestellt, dass du nur so lange Eis hinzufügen kannst, bis die Tüte voll ist, und danach nur noch Kugeln wegnehmen kannst.
Ich:
Meine Funktion greift in sich selbst zu und wenn eine maximale Zahl von 180 erreicht wurde soll nichts mehr einfahren können. Es wird ein Parkhaus erstellt welches am Anfang leer ist und es können autos ein oder aus fahren.
ChatGPT:
Um das Problem mit dem Parkhaus zu lösen, kannst du eine Methode verwenden, die den aktuellen Status (Anzahl der Autos) überwacht. Wenn die maximale Kapazität von 180 erreicht ist, darf kein weiteres Auto mehr einfahren, aber Autos können weiterhin ausfahren.
Hier ist eine Beispielimplementierung:
```java
public class Parkhaus {
private int aktuelleAutos = 0;
private final int maximaleKapazität = 180;
// Methode, um ein Auto einfahren zu lassen
public void autoEinfahren() {
if (aktuelleAutos < maximaleKapazität) {
aktuelleAutos++;
System.out.println("Ein Auto ist eingefahren. Aktuelle Anzahl Autos: " + aktuelleAutos);
} else {
System.out.println("Das Parkhaus ist voll! Kein Auto kann mehr einfahren.");
}
}
// Methode, um ein Auto ausfahren zu lassen
public void autoAusfahren() {
if (aktuelleAutos > 0) {
aktuelleAutos--;
System.out.println("Ein Auto ist ausgefahren. Aktuelle Anzahl Autos: " + aktuelleAutos);
} else {
System.out.println("Das Parkhaus ist leer! Kein Auto zum Ausfahren.");
}
}
}
```
### Erklärung:
- `aktuelleAutos` speichert die Anzahl der Autos im Parkhaus.
- Die Methode `autoEinfahren()` prüft, ob die Anzahl der Autos unter der maximalen Kapazität liegt. Wenn dies der Fall ist, wird ein Auto eingefahren, andernfalls wird eine Meldung ausgegeben, dass das Parkhaus voll ist.
- Die Methode `autoAusfahren()` lässt ein Auto ausfahren, wenn mindestens ein Auto im Parkhaus ist. Ansonsten wird eine Meldung angezeigt, dass das Parkhaus leer ist.
Du kannst diese Methoden dann in deinem Hauptprogramm oder in anderen Klassen verwenden, um das Ein- und Ausfahren der Autos zu steuern.

View File

@ -0,0 +1,53 @@
Ich:
Ich möchte in Java meine Systemzeit auslesen lassen und sie in einem String im Format DD.MM.YYYY HH:MM
ChatGPT:
Um die aktuelle Systemzeit in Java auszulesen und im gewünschten Format `DD.MM.YYYY HH:MM` darzustellen, kannst du die Klasse `SimpleDateFormat` oder, wenn du mit Java 8 oder höher arbeitest, die moderne `DateTimeFormatter`-API verwenden.
Hier ist ein Beispiel für beide Varianten:
### Variante 1: Mit `SimpleDateFormat`
```java
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// Aktuelle Systemzeit
Date now = new Date();
// Format festlegen
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm");
// In String umwandeln
String formattedDate = sdf.format(now);
// Ausgabe
System.out.println(formattedDate);
}
}
```
### Variante 2: Mit `DateTimeFormatter` (Java 8+)
```java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// Aktuelle Systemzeit
LocalDateTime now = LocalDateTime.now();
// Format festlegen
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
// In String umwandeln
String formattedDate = now.format(dtf);
// Ausgabe
System.out.println(formattedDate);
}
}
```
Beide Varianten liefern die aktuelle Systemzeit im Format `DD.MM.YYYY HH:MM`. Die moderne `DateTimeFormatter`-API wird bevorzugt, da sie thread-sicher ist und mehr Funktionalität bietet.

View File

@ -0,0 +1,95 @@
Ich:
Benutzer startet Main Klasse
Programm erstellt im Hintergrund ein Datums format und baut ein Parkplatz auf um auf die ParkplatzKlasse zugreifen zu können
System gibt Willkommens Nachricht aus und bittet um eingabe ob einfahrt oder ausfahrt
Benutzer gibt ein ob man ein-, ausfährt, bezahlen oder beenden möchte
System nimmt entscheidung auf und startet anhand der Entscheidung entweder der Park/Ausfahrt oder den Bezahlvorgang oder beendet das Programm
1. Parkvorgang:
Das Programm bittet um eingabe des Kennzeichens und des Datums mit Uhrzeit
Benutzer gibt die geforderten Daten ein
Programm sucht nach eingegebenen Kennzeichen in der ArrayList eingefahrene und ausgefahrene Autos nach dem Kennzeichen
um sicherzugehen, dass das Auto noch nicht eingefahen ist und ob es bereits mal eingefahren war um die Schulden zu übernehmen
Wenn auto gefunden in eingefahrenen ausgabe eines Fehlers, da Autos nicht zwei mal das gleiche Kennzeichen haben können, wenn auto in ausgefahrenen
0erden schulden übernommen und ausgabe einer willkommens nachricht mit erklärung, dass Schulden übernommen werden
Wenn Auto nirgends vorhanden wird neues Auto erstellt und eingefahren.
2. Ausfahrt:
System fordert den Kunden auf das Kennzeichen welches ausfahren soll sowie die Uhrzeit zu der ausgefahren werden soll
Eingabe des Kennzeichens und Datums mit Uhrzeit vom Ausfahren
Preis berechnung im Hintergrund (Wenn dauer des Parkaufenthalts kleiner als 15 minuten dann gilt Kiss and Ride und es entstehen keine Kosten)
Ausgabe Ergebnis Parkkostenberechnung und abschiedsnachricht mit ankündigung, dass Schulden da nicht bezahlt wurden hinzugefügt wurden
Platz im Parkhaus wird wieder größer
Auto wird in ausgefahrene Autos gespeichert um beim nächsten ausfahen auf die Schulden zugreifen zu können
3. Bezahlen und Ausfahren
System fordert den Kunden auf das Kennzeichen welches bezahlt werden soll sowie die Uhrzeit zu der bezahlt werden soll
Eingabe des Kennzeichens und Datums mit Uhrzeit vom bezahlen
Preis berechnung im Hintergrund
Ausgabe des Preises
Kunde wird aufgefordert seine Kreditkartennummer einzugeben
Kredtkartennummer wird auf plausiblität geprüft
Wenn plausible, werden die einzelnen Zahlen aus die letze Stelle der Kreditkartennummer aufeinander aufaddiert und die Quersumme gebildet
Quersumme mit modulo 10 geprüft ob dies die letzte Zahl auf der Kreditkarte bildet wenn
Ja:
Schulden beglichen, auto fährt aus, Platz im Parkhaus wird größer
Nein:
Schulden werden nicht getilgt, erneute Kennzeicheneingabe sowie bezahlzeit gefordert
4. beenden:
Programm verabschiedet sich und wird beendet
Korrigiere etwaiige rechtschreibfehler
ChatGPT:
Hier ist der korrigierte Text:
---
**Benutzer startet Main-Klasse:**
Das Programm erstellt im Hintergrund ein Datumsformat und baut einen Parkplatz auf, um auf die Parkplatz-Klasse zugreifen zu können.
Das System gibt eine Willkommensnachricht aus und bittet um die Eingabe, ob Einfahrt oder Ausfahrt gewünscht ist.
Der Benutzer gibt ein, ob man ein- oder ausfahren, bezahlen oder das Programm beenden möchte.
Das System nimmt die Entscheidung auf und startet basierend auf der Entscheidung entweder den Park-/Ausfahrtvorgang, den Bezahlvorgang oder beendet das Programm.
---
### 1. Parkvorgang:
Das Programm bittet um die Eingabe des Kennzeichens und des Datums mit Uhrzeit.
Der Benutzer gibt die geforderten Daten ein.
Das Programm sucht in der ArrayList der eingefahrenen und ausgefahrenen Autos nach dem Kennzeichen, um sicherzugehen, dass das Auto noch nicht eingefahren ist und ob es bereits einmal eingefahren war, um die Schulden zu übernehmen.
Wenn das Auto in den eingefahrenen Autos gefunden wird, gibt das System einen Fehler aus, da Autos nicht zwei Mal mit dem gleichen Kennzeichen eingefahren sein können.
Wenn das Auto in den ausgefahrenen Autos gefunden wird, werden die Schulden übernommen, und es wird eine Willkommensnachricht mit der Erklärung ausgegeben, dass die Schulden übernommen wurden.
Wenn das Auto nirgends vorhanden ist, wird ein neues Auto erstellt und eingefahren.
---
### 2. Ausfahrt:
Das System fordert den Kunden auf, das Kennzeichen sowie die Uhrzeit einzugeben, zu der ausgefahren werden soll.
Nach der Eingabe des Kennzeichens und des Datums mit Uhrzeit für die Ausfahrt erfolgt die Preisberechnung im Hintergrund.
(Wenn die Dauer des Parkaufenthalts kürzer als 15 Minuten ist, gilt "Kiss and Ride", und es entstehen keine Kosten.)
Das Ergebnis der Parkkostenberechnung wird ausgegeben, gefolgt von einer Abschiedsnachricht mit der Ankündigung, dass Schulden hinzugefügt wurden, da nicht bezahlt wurde.
Der Platz im Parkhaus wird wieder freigegeben.
Das Auto wird in der Liste der ausgefahrenen Autos gespeichert, um beim nächsten Einfahren auf die Schulden zugreifen zu können.
---
### 3. Bezahlen und Ausfahren:
Das System fordert den Kunden auf, das Kennzeichen sowie die Uhrzeit einzugeben, zu der bezahlt werden soll.
Nach der Eingabe des Kennzeichens und des Datums mit Uhrzeit erfolgt die Preisberechnung im Hintergrund.
Der zu zahlende Betrag wird ausgegeben.
Der Kunde wird aufgefordert, seine Kreditkartennummer einzugeben.
Die Kreditkartennummer wird auf Plausibilität geprüft.
Wenn plausibel, werden die einzelnen Ziffern der Kreditkartennummer aufaddiert und die Quersumme gebildet.
Die Quersumme wird mit Modulo 10 geprüft, ob sie mit der letzten Ziffer der Kreditkartennummer übereinstimmt.
Wenn **ja**, werden die Schulden beglichen, das Auto fährt aus, und der Platz im Parkhaus wird wieder freigegeben.
Wenn **nein**, werden die Schulden nicht getilgt, und der Kunde wird erneut aufgefordert, das Kennzeichen und die Bezahlzeit einzugeben.
---
### 4. Beenden:
Das Programm verabschiedet sich und wird beendet.
---
Alle Rechtschreibfehler wurden korrigiert, und der Ablauf bleibt wie von dir gewünscht erhalten.

View File

@ -47,6 +47,7 @@ public class Main {
}
Auto auto = new Auto(kennzeichenEinfahrt, einfahrtZeit);
parkhaus.addAuto(auto);
System.out.println("Im Parkhaus sind jetzt noch " + parkhaus.getPlatz() + " plätze frei");
break;
case 2:
@ -80,6 +81,7 @@ public class Main {
bezahltZeit = sdf.parse(bezahltEingabe);
System.out.println("Es wird die Bezahlzeit: " + sdf.format(bezahltZeit) + " verwendet");
}
System.out.println("Für die Dauer die Sie im Parkhaus standen, fallen Kosten in Höhe von " + parkhaus.berechneParkKosten(auto, bezahltZeit) + "€ an");
System.out.println("Bitte geben Sie die 16 Stellige Nummer Ihrer Visa Karte ein");
String kreditkartennummer = sc.nextLine();
parkhaus.bezahlen(kennzeichenBezahlt, bezahltZeit, kreditkartennummer);

View File

@ -54,27 +54,22 @@ public class Parkhaus {
}
public void addAuto(Auto auto) {
Auto vorhandenesAuto = autoFinden(auto.getKennzeichen());
if (vorhandenesAuto != null) {
System.out.println("Ein Auto mit diesem Kennzeichen ist bereits eingefahren.");
return;
}
Auto ausgefahrenesAuto = autoFinden(auto.getKennzeichen());
if (ausgefahrenesAuto != null) {
auto.setSchulden(ausgefahrenesAuto.getSchulden());
ausgefahrene.remove(ausgefahrenesAuto);
System.out.println("Das Auto hat noch Schulden von " + auto.getSchulden() + " €.");
}
if (platz <= 0) {
System.out.println("Das Parkhaus ist voll, Sie können nicht mehr einfahren!");
} else {
autos.add(auto);
platz -= 1;
System.out.println("Das Auto mit dem Kennzeichen " + auto.getKennzeichen() + " ist eingefahren.");
for (Auto ausgefahrenesAuto : ausgefahrene) {
if (ausgefahrenesAuto.getKennzeichen().equals(auto.getKennzeichen())) {
System.out.println("Auto mit dem Kennzeichen " + auto.getKennzeichen() + " fährt erneut ein. Übernommene Schulden: " + ausgefahrenesAuto.getSchulden() + "€");
ausgefahrene.remove(ausgefahrenesAuto);
ausgefahrenesAuto.setEinfahrtZeit(auto.getEinfahrtZeit());
autos.add(ausgefahrenesAuto);
platz -= 1;
return;
}
}
autos.add(auto);
platz -= 1;
System.out.println("Auto mit dem Kennzeichen " + auto.getKennzeichen() + " ist eingefahren.");
}
public Auto autoFinden(String kennzeichen) {
for (Auto auto : autos) {
if (auto.getKennzeichen().equals(kennzeichen)) {
@ -94,16 +89,10 @@ public class Parkhaus {
Auto auto = autoFinden(kennzeichen);
if (auto == null) {
System.out.println("Für dieses Kennzeichen ist leider kein Auto vorhanden.");
return; // Methode beenden, falls das Auto nicht gefunden wird
return;
}
double aktuelleKosten = berechneParkKosten(auto, bezahltZeit);
double gesamtSchulden = auto.getSchulden() + aktuelleKosten;
System.out.println("Für die Parkdauer fallen Kosten in Höhe von " + aktuelleKosten + " € an.");
System.out.println("Ihre Gesamtschulden betragen: " + gesamtSchulden + " €.");
System.out.println("Bitte geben Sie Ihre 16-stellige VISA-Kreditkartennummer ein:");
if (!istGueltigeVisaKarte(kreditkartennummer)) {
System.out.println("Ungültige Kreditkartennummer! Bitte versuchen Sie es erneut.");
return;
@ -111,6 +100,11 @@ public class Parkhaus {
System.out.println("Zahlung erfolgreich! Ihre Schulden wurden beglichen.");
auto.setSchulden(0);
System.out.println("Wir wünschen Ihnen noch einen schönen Tag und bis zum nächsten mal");
autos.remove(auto);
ausgefahrene.remove(auto);
platz +=1;
System.out.println("Nun sind im Parkhaus wieder " + platz + " Plätze frei");
}
private boolean istGueltigeVisaKarte(String kreditkartenNummer) {

Binary file not shown.