From 46aebf1a04501f1b07f9b126a35b7186680ef119 Mon Sep 17 00:00:00 2001 From: David Milivojevic <3015836@stud.hs-mannheim.de> Date: Mon, 7 Oct 2024 09:59:07 +0200 Subject: [PATCH] Dateien nach "/" hochladen --- PKW | 241 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Zahlen | 43 ++++++++++ main | 89 +++++++++++++++++++++ 3 files changed, 373 insertions(+) create mode 100644 PKW create mode 100644 Zahlen create mode 100644 main diff --git a/PKW b/PKW new file mode 100644 index 0000000..06cf413 --- /dev/null +++ b/PKW @@ -0,0 +1,241 @@ +package parkhaus; + +import java.io.*; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Scanner; + +public class PKW { + private String kennzeichen; + private int parkplaetze; + + public PKW(String kennzeichen, int parkplaetze) { + this.kennzeichen = kennzeichen; + this.parkplaetze = parkplaetze; + } + + public int getParkplaetze() { + return parkplaetze; + } + + public String getKennzeichen() { + return kennzeichen; + } + + public void Einfahrt(Date einfahrt) throws IOException { + File alte = new File(kennzeichen+".txt"); + if(alte.exists()) { + BufferedReader reader = new BufferedReader(new FileReader(alte)); + String line; + line = reader.readLine(); + reader.close(); + String[] autoData = line.split(","); + if (autoData[0].equals(kennzeichen)) { + if (autoData[2].isEmpty()&& !autoData[1].isEmpty()) { + System.err.println("Das Fahrzeug mit Kennzeichen " + kennzeichen + " ist bereits eingeparkt."); + return; + } + if(autoData[1].isEmpty()&& autoData[2].isEmpty()) { + System.err.println("Sie haben noch eine Zahlung offen."); + } + if(autoData[1].isEmpty()&& !autoData[2].isEmpty()) { + System.err.println("Da ist wohl ein Fehler unterlaufen."); + } + } //exisistiert keine Datei dann soll eine neue angelegt werden + if(!alte.exists()) { + BufferedWriter writer = new BufferedWriter(new FileWriter(kennzeichen+".txt", true)); + SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy,HH:mm"); + String einfahrtFormatted = dateFormat.format(einfahrt); + writer.write(kennzeichen + "," + einfahrtFormatted + ",false,0.0"); + writer.close(); + } + } + } + public void Update(Scanner scanner,double schulden) throws IOException { + File alte = new File(kennzeichen+".txt"); + File neue = new File(kennzeichen+".txt(1)"); + BufferedReader reader = new BufferedReader(new FileReader(alte)); + BufferedWriter writer = new BufferedWriter(new FileWriter(neue)); + SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy,HH:mm"); + System.out.print("Ausfahrt: "); + String ausfahrt=scanner.nextLine(); + String ausfahrtinString = sdf.format(ausfahrt); + String line; + if(alte.exists()) { + line = reader.readLine(); + String[] autoData = line.split(","); + + + line = kennzeichen + "," + autoData[1] + "," + ausfahrtinString + "," + autoData[3] + "," + schulden; + //kennzeichen einfahrt ausfahrt istbezahlt schulden + writer.write(line); + + + reader.close(); + writer.close(); + + }else { + System.err.println("Fahrzeug mit Kennzeichen " + kennzeichen + " wurde nicht gefunden."); + } + + // Datei überschreiben + alte.delete(); + neue.renameTo(alte); + } + + public long Parkzeit(Date einfahrt, Date ausfahrt) { + return (ausfahrt.getTime() - einfahrt.getTime()) / 1000; + } + + + + public Date Zeitformat(String datum) throws ParseException { + //aktuelles Datum ausgeben + if (datum.isEmpty()) { + return new Date(); + } + + // Falls der Benutzer ein Datum eingegeben hat, dieses formatieren und zurückgeben + SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy,HH:mm"); + try { + + Date formatiertesDatum=sdf.parse(datum); // Datum aus der Eingabe parsen + return formatiertesDatum; + } catch (ParseException e) { + System.err.println("Ungültiges Datumsformat. Das aktuelle Datum wird verwendet."); + return new Date(); + } + } + + + public void eingefahren() { + this.parkplaetze--; + } + public void ausgefahren(boolean istbezahlt) throws IOException { + File alte = new File(kennzeichen + ".txt"); + if(alte.exists()) { + alte.delete(); + this.parkplaetze++; + System.out.println("Haben Sie einen schönen Tag."); + } + } + public void ausfahrenohneZahlen() throws IOException { + File alte = new File(kennzeichen+".txt"); + File neue = new File(kennzeichen+".txt(1)"); + BufferedReader reader = new BufferedReader(new FileReader(alte)); + BufferedWriter writer = new BufferedWriter(new FileWriter(neue)); + String line; + if(alte.exists()) { + System.err.println("Sie haben noch nicht gezahlt."); + line = reader.readLine(); + String[] autoData = line.split(","); + + + line = kennzeichen + "," + ""+ "," +""+ "," + autoData[3] + "," + autoData[4]; + writer.write(line); + + + reader.close(); + writer.close(); + + }else { + System.err.println("Fahrzeug mit Kennzeichen " + kennzeichen + " wurde nicht gefunden."); + } + + // Datei überschreiben + alte.delete(); + neue.renameTo(alte); + } + + public double Schulden() throws ParseException, IOException { + File alte = new File(kennzeichen+".txt"); + SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy,HH:mm"); + if(alte.exists()) { + String line; + BufferedReader reader = new BufferedReader(new FileReader(alte)); + line = reader.readLine(); + reader.close(); + String[] autoData = line.split(","); + Date einfahrt=sdf.parse(autoData[1]); + Date ausfahrt=sdf.parse(autoData[2]); + long sekunden=Parkzeit(einfahrt,ausfahrt); + double alteschulden=Double.parseDouble(autoData[4]); + long minute=sekunden/60; + double stunde=minute/60; + boolean Eauto=kennzeichen.endsWith("E"); + if(minute<=15) { + return 0; + } + double gesamtgebuehr = 0.0; + long stundenBerechnet = 0; + while (stundenBerechnet < stunde) { + if (stunde >= 20 || stunde < 6) { + + gesamtgebuehr += 5; + break; + } else { + + gesamtgebuehr += 1; + } + + if (gesamtgebuehr > 15) { + gesamtgebuehr = 15; + break; + } + + stundenBerechnet++; + } + + + if (Eauto) { + gesamtgebuehr *= 0.8; + } + + return gesamtgebuehr+=alteschulden; + } + + else { + System.err.println("Datei existiert nicht"); + return -1; + } + } + public double Parksimulator(Date einfahrt, Date ausfahrt, boolean Eauto) { + long sekunden=Parkzeit(einfahrt,ausfahrt); + long stunde=(sekunden/60)/60; + long minute=sekunden/60; + if(minute<=15) { + return 0; + } + double gesamtgebuehr = 0.0; + long stundenBerechnet = 0; + while (stundenBerechnet < stunde) { + if (stunde >= 20 || stunde < 6) { + + gesamtgebuehr += 5; + break; + } else { + + gesamtgebuehr += 1; + } + + if (gesamtgebuehr > 15) { + gesamtgebuehr = 15; + break; + } + + stundenBerechnet++; + } + + + if (Eauto) { + gesamtgebuehr *= 0.8; + } + + return gesamtgebuehr; + } + } + + + + diff --git a/Zahlen b/Zahlen new file mode 100644 index 0000000..0b0c5f2 --- /dev/null +++ b/Zahlen @@ -0,0 +1,43 @@ +package parkhaus; + +public class Zahlen { +private String VISA; + public Zahlen(String VISA) { + this.VISA=VISA; + } + public String getVISA(){ + return VISA; + } + public int PZ() { + int pz=0; + int gewichtung=1; + int quersumme=0; + for(int i=16;i>=0;i-- ) { + char ch=VISA.charAt(i); + quersumme+=((int)ch)*gewichtung; + + if(gewichtung%2==0) { + gewichtung--; + }if(gewichtung%2!=0){ + gewichtung++; + } + } + pz=10-(quersumme%10); + return pz; + } + public boolean bezahlt() throws InterruptedException { + System.out.println("Legen Sie die Karte ein."); + System.out.println("."); + Thread.sleep(1000); + System.out.println(".."); + Thread.sleep(1000); + System.out.println("..."); + Thread.sleep(1000); + System.out.println("...."); + Thread.sleep(1000); + System.out.println("....."); + Thread.sleep(1000); + System.out.println("Kauf abgeschlossen Sie können die Karte nun entfernen."); + return true; + } +} diff --git a/main b/main new file mode 100644 index 0000000..fbf61c7 --- /dev/null +++ b/main @@ -0,0 +1,89 @@ +package parkhaus; +import java.io.IOException; +import java.text.ParseException; +import java.util.Date; +import java.util.Scanner; +public class ParkhausUI{ + public static void main(String[] args) throws ParseException, IOException, InterruptedException { + Scanner scanner=new Scanner(System.in); + boolean run=true; + while(run) { + System.out.println("Parkhaus"); + System.out.println("1. Einfahren."); + System.out.println("2. Ausfahren."); + System.out.println("3. Zahlen."); + System.out.println("4. Parksimulator."); + System.out.println("5. Beenden"); + int wahl=scanner.nextInt(); + scanner.nextLine(); + if(wahl<0 && wahl>5) { + System.err.println("Falsche Eingabe."); + } + System.out.println("Kennzeichen: "); + String kz=scanner.nextLine(); + System.out.println("Ihr Kennzeichen"+kz+" wurde eingescannt"); + PKW auto=new PKW(kz,180); + switch(wahl){ + case 1:{ + System.out.println("Einfahrt(dd,mm,yyyy HH:mm): "); + String einfahrt=scanner.nextLine(); + Date datum=auto.Zeitformat(einfahrt); + auto.Einfahrt(datum); + auto.eingefahren(); + break; + } + case 2:{ + double schulden=auto.Schulden(); + auto.Update(scanner, schulden); + break; + } + case 3:{ + double schulden=auto.Schulden(); + if(schulden !=-1 && schulden >0) { + System.out.println("Geben Sie Ihre Kartennummer ohne Leerzeichen ein"); + String kn=scanner.nextLine(); + if(kn.length()==16) { + Zahlen visa=new Zahlen(kn); + int pz=visa.PZ(); + System.out.println("Prüfziffer="+pz); + boolean istbezahlt=visa.bezahlt(); + auto.ausgefahren(istbezahlt); + }else { + System.err.println("Falsche Kreditkartennummer"); + } + }else { + System.err.println("Sie haben keine Schulden"); + auto.ausgefahren(true); + } + break; + } + case 4:{ + System.out.println("Parksimulator"); + System.out.println("Geben Sie Ein- und Ausfahrt ein."); + System.out.print("Einfahrt(dd,mm,yyyy HH:mm): "); + String einfahrt=scanner.nextLine(); + System.out.print("Ausfahrt(dd,mm,yyyy HH:mm): "); + String ausfahrt=scanner.nextLine(); + Date e=auto.Zeitformat(einfahrt); + Date a=auto.Zeitformat(ausfahrt); + System.err.println("Ist ihr auto ein E-Auto (j/n)"); + String jn=scanner.nextLine(); + boolean eauto; + if(jn.equals("j")) { + eauto=true; + }else { + eauto=false; + } + double gebuehr=auto.Parksimulator(e,a,eauto); + System.out.println("Ihre Gebühr beträgt "+gebuehr+"€"); + break; + } + case 5:{ + System.out.println("Programm beendet"); + run =false; + break; + } + } + } +} + } \ No newline at end of file