From 5270166070324c39386d282a8fbb13f874a3e279 Mon Sep 17 00:00:00 2001 From: ioana Date: Fri, 4 Oct 2024 19:52:44 +0200 Subject: [PATCH] =?UTF-8?q?Erweiterung=20und=20Bearbeitung=20des=20Projekt?= =?UTF-8?q?s=20Parkhaus,=20u.a.=20Parkdauer=20und=20Parkgeb=C3=BChren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- QualifierTeil2/Main.java | 19 ++++++++- QualifierTeil2/PKW.java | 24 +++++++++-- QualifierTeil2/Parkhaus.java | 82 ++++++++++++++++++++++++++++++------ QualifierTeil2/UI.java | 52 ++++++++++++++++------- QualifierTeil2/prompt1.txt | 49 +++++++++++++++++++++ 5 files changed, 191 insertions(+), 35 deletions(-) create mode 100644 QualifierTeil2/prompt1.txt diff --git a/QualifierTeil2/Main.java b/QualifierTeil2/Main.java index 684b522..956f1f2 100644 --- a/QualifierTeil2/Main.java +++ b/QualifierTeil2/Main.java @@ -3,14 +3,29 @@ import java.text.ParseException; import java.util.Random; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Scanner; public class Main extends UI { public static void main(String[] args) { - einfahrtPKW(); - ausfahrtPKW(); + UI ui = new UI(); + Scanner scanner = new Scanner(System.in); + + ui.einfahrtPKW(); + + System.out.println("Möchten Sie die Parkgebühren bezahlen und ausfahren?"); + switch (scanner.nextLine()) { + case "ja": + ui.ausfahrtPKW(); + break; + case "Abbruch": + System.out.println("Vorgang abgebrochen."); + break; + default: + System.out.println("Ungültige Eingabe."); + } } diff --git a/QualifierTeil2/PKW.java b/QualifierTeil2/PKW.java index bec265f..2728703 100644 --- a/QualifierTeil2/PKW.java +++ b/QualifierTeil2/PKW.java @@ -5,22 +5,38 @@ import java.util.Date; import java.util.Random; public class PKW { - String kennzeichen; - String einfahrt; + private String kennzeichen; + Date einfahrt; + //String ausfahrt; + private boolean hatBezahlt; public PKW() { this.kennzeichen = generiereKennzeichen(); - this.einfahrt = gebeAktuelleZeit(); + this.einfahrt = new Date(); + //this.ausfahrt = gebeAktuelleZeit(); + this.hatBezahlt = false; } public String getKennzeichen() { return kennzeichen; } - public String getEinfahrt() { + public Date getEinfahrt() { return einfahrt; } + public String getEinfahrtAlsString(){ + return gebeAktuelleZeit(); + } + + public boolean hatBezahlt() { + return hatBezahlt; + } + + public void setBezahlt(boolean bezahlt) { + this.hatBezahlt = bezahlt; + } + public String gebeAktuelleZeit(){ var sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); return sdf.format(new Date()); diff --git a/QualifierTeil2/Parkhaus.java b/QualifierTeil2/Parkhaus.java index d8e8af6..f1ad0e1 100644 --- a/QualifierTeil2/Parkhaus.java +++ b/QualifierTeil2/Parkhaus.java @@ -1,31 +1,51 @@ package QualifierTeil2; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class Parkhaus { - Map parkendePkws; + private List parkendePkws; int kapazität; int belegt; - long parkdauer; double parkgebühren; public Parkhaus() { - this.parkendePkws = new HashMap<>(); + this.parkendePkws = new ArrayList<>(); this.kapazität = randomAnzahlParkplätze(); this.belegt = 0; - this.parkdauer = berechneParkdauer(); - this.parkgebühren = berechneParkgebuehr(); + this.parkgebühren = 0; + } + + public List getParkendePkws() { + return parkendePkws; } public static int randomAnzahlParkplätze(){ return (int) (Math.random() * 200) + 1; } + public void einfahren(PKW pkw) { + if (parkendePkws.size() < kapazität) { + parkendePkws.add(pkw); + this.kapazität--; + this.belegt++; + } else { + System.out.println("Parkhaus voll."); + + } + } + + + public long berechneParkdauer(String kennzeichen, Date ausfahrt) { + /*long minDiff = 0; + + for (PKW pkw : parkendePkws) { + if (pkw.getKennzeichen().equals(kennzeichen) && !pkw.hatBezahlt()) { + minDiff = (ausfahrt.getTime() - pkw.einfahrt.getTime()) / 60000; + } + } + return minDiff;*/ - public static long berechneParkdauer(){ var sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); Date d1 = null; @@ -36,7 +56,7 @@ public class Parkhaus { } Date d2 = null; try { - d2 = sdf.parse("01.10.2024, 11:45"); + d2 = sdf.parse("02.10.2024, 9:45"); } catch (ParseException e) { throw new RuntimeException(e); } @@ -46,8 +66,42 @@ public class Parkhaus { return minDiff; } - public int berechneParkgebuehr(){ - long pd = this.parkdauer; + public long berechneGebühren(String kennzeichen, Date ausfahrt){ + long parkdauer = berechneParkdauer(kennzeichen, ausfahrt);; + long gebuehr = 0; + + // Falls die Parkdauer 15 Minuten oder weniger beträgt, ist das Parken kostenlos + if (parkdauer <= 15) { + gebuehr = 0; + parkdauer = 0; + } + + if (parkdauer == 1440){ + gebuehr = 1500; + parkdauer = 0; + } + + if (parkdauer > 0 && parkdauer < 1440 ){ + while(parkdauer > 0){ + gebuehr += 100; + parkdauer-=60; + } + } + + // Prüfe, ob es sich um ein E-Auto handelt (Kennzeichen endet mit "E") + if (kennzeichen.endsWith("E")) { + gebuehr *= 0.8; // 20% Rabatt für E-Autos + } + + return gebuehr; + + } + + + } + + /*public int berechneParkgebuehr(){ + long pd = this.berechneParkdauer(); int gebuehr = 0; if (pd == 1440){ @@ -68,7 +122,7 @@ public class Parkhaus { } } return gebuehr; - } -} + }*/ + diff --git a/QualifierTeil2/UI.java b/QualifierTeil2/UI.java index 35f31b7..1f2cabd 100644 --- a/QualifierTeil2/UI.java +++ b/QualifierTeil2/UI.java @@ -1,31 +1,53 @@ package QualifierTeil2; +import java.util.Date; +import java.util.Scanner; + public class UI { - static Parkhaus parkhaus1 = new Parkhaus(); - static PKW pkw1 = new PKW(); + private Parkhaus parkhaus1 = new Parkhaus(); + private PKW pkw1 = new PKW(); + private Scanner scan = new Scanner(System.in); - public static void einfahrtPKW() { - System.out.println("Willkommen im Parkhaus BYE am Hauptbahnhof!"); - if(parkhaus1.belegt < parkhaus1.kapazität){ + public void einfahrtPKW() { + + System.out.println("Willkommen im Parkhaus BYE am Hauptbahnhof!\n"); + System.out.println("Verfügbare Parkplätze: " + parkhaus1.kapazität); - parkhaus1.parkendePkws.put(pkw1.getKennzeichen(), pkw1); - parkhaus1.belegt++; + parkhaus1.einfahren(pkw1); System.out.println("Kennzeichen " + pkw1.getKennzeichen() + " wurde erfasst."); - System.out.println("Einfahrt: " + pkw1.getEinfahrt()); - System.out.println("Schranke öffnet sich."); - } else{ - System.out.println("Parkhaus ist voll!"); + System.out.println("Einfahrt: " + pkw1.getEinfahrtAlsString()); + System.out.println("Schranke öffnet sich.\n"); + + //Debugging + // System.out.println("Verfügbar nach einfahrt: " + parkhaus1.kapazität); + // System.out.println("belegt: " + parkhaus1.belegt); + // System.out.println("Liste pkws: " + parkhaus1.getParkendePkws()); + } + + + public void ausfahrtPKW(){ + + System.out.println("Bezahlung der Parkgebühren\n"); + System.out.println("Geben Sie Ihr Kennzeichen ein: "); + String kennzeichen = scan.nextLine().toUpperCase(); + Date ausfahrt = new Date(); + if (kennzeichen.equals(pkw1.getKennzeichen())){ + //System.out.println("Ihr Kennzeichen: " + kennzeichen); + + System.out.println("Parkdauer in Minuten: " + parkhaus1.berechneParkdauer(kennzeichen, ausfahrt)); + System.out.println("Parkgebühren in Cent: " + parkhaus1.berechneGebühren(kennzeichen, ausfahrt)); + + } else { + System.out.println("Das eingegebene Kennzeichen existiert nicht, bitte erneut eingeben: "); } - } - public static void ausfahrtPKW(){ - System.out.println("Parkdauer in Minuten: " + parkhaus1.parkdauer); - System.out.println("Parkgebühren in Cent: " + parkhaus1.parkgebühren); + + } } diff --git a/QualifierTeil2/prompt1.txt b/QualifierTeil2/prompt1.txt new file mode 100644 index 0000000..33fa59b --- /dev/null +++ b/QualifierTeil2/prompt1.txt @@ -0,0 +1,49 @@ +ich: erstelle eine methode, die ein kennzeichen generieren soll in java, indem die random Methode verwendet wird +antwort: Hier ist eine Java-Methode, die ein Kennzeichen gemäß den von dir angegebenen Regeln generiert: +Anforderungen: +2 bis 3 Buchstaben für die Stadt/Region. +1 bis 2 Buchstaben für die Fahrzeugklasse. +1 bis 4 Ziffern. +Optional ein "E" am Ende für Elektrofahrzeuge. + + +import java.util.Random; + +public class KennzeichenGenerator { + + // Methode zum Generieren des Kennzeichens + public static String kennzeichenGenerieren() { + Random random = new Random(); + + // 2 bis 3 Buchstaben für Stadt/Region + String stadtRegion = randomString(random, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", random.nextInt(2) + 2); + + // 1 bis 2 Buchstaben für Fahrzeugklasse + String fahrzeugKlasse = randomString(random, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", random.nextInt(2) + 1); + + // 1 bis 4 Ziffern für die Nummer + String nummer = randomString(random, "0123456789", random.nextInt(4) + 1); + + // Optional ein "E" für Elektrofahrzeuge + String elektro = random.nextBoolean() ? "E" : ""; + + // Zusammenfügen des Kennzeichens + return stadtRegion + "-" + fahrzeugKlasse + " " + nummer + elektro; + } + + // Hilfsmethode zur Erzeugung einer zufälligen Zeichenkette + private static String randomString(Random random, String zeichen, int laenge) { + StringBuilder sb = new StringBuilder(laenge); + for (int i = 0; i < laenge; i++) { + sb.append(zeichen.charAt(random.nextInt(zeichen.length()))); + } + return sb.toString(); + } + + // Hauptmethode zum Testen + public static void main(String[] args) { + // Generiere und gib ein zufälliges Kennzeichen aus + String kennzeichen = kennzeichenGenerieren(); + System.out.println("Generiertes Kennzeichen: " + kennzeichen); + } +}