From 8de55385638df1cb82b1ce8c512b5a96b56329b2 Mon Sep 17 00:00:00 2001 From: danai Date: Tue, 18 Jun 2024 02:20:52 +0200 Subject: [PATCH] =?UTF-8?q?Vollst=C3=A4ndige=20Implementierung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/domain/KurztripEmpfehlung.java | 102 +++++----- TravelBuddyApp/src/main/java/domain/Ort.java | 10 + .../src/main/java/domain/Reiseplanung.java | 83 ++++----- .../src/main/java/fassade/ReiseFassade.java | 174 +++++++++--------- .../src/main/java/fassade/UserFassade.java | 1 + .../src/main/java/ui/UserInterface.java | 153 +++++++++------ .../test/java/domain/ReiseplanungTest.java | 120 ++++++++---- .../src/test/java/domainTest/UserTest.java | 2 +- TravelBuddyApp/users.txt | 3 + 9 files changed, 368 insertions(+), 280 deletions(-) diff --git a/TravelBuddyApp/src/main/java/domain/KurztripEmpfehlung.java b/TravelBuddyApp/src/main/java/domain/KurztripEmpfehlung.java index 8c9738e..748f14c 100644 --- a/TravelBuddyApp/src/main/java/domain/KurztripEmpfehlung.java +++ b/TravelBuddyApp/src/main/java/domain/KurztripEmpfehlung.java @@ -1,17 +1,19 @@ package domain; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random; public class KurztripEmpfehlung { - User user; private List alleOrte; private Ort heimatort; - public KurztripEmpfehlung(User user) { - + public KurztripEmpfehlung() { + this.alleOrte = ladeAlleOrte(); this.heimatort = null; } @@ -30,8 +32,7 @@ public class KurztripEmpfehlung { } for (Ort ort : alleOrte) { - Reiseplanung reise = new Reiseplanung(user, ort); - double entfernung = reise.berechneEntfernung(heimatort, ort); + double entfernung = berechneEntfernung(heimatort, ort); if (entfernung <= maxEntfernung) { gefilterteOrte.add(ort); } @@ -42,7 +43,7 @@ public class KurztripEmpfehlung { return gefilterteOrte; } - return zufallsorteAuswaehlen(gefilterteOrte, Math.min(3, gefilterteOrte.size())); + return zufallsorteAuswaehlen(gefilterteOrte, 3); } @@ -56,8 +57,7 @@ public class KurztripEmpfehlung { } for (Ort ort : alleOrte) { - Reiseplanung reise = new Reiseplanung(user, ort); - double entfernung = reise.berechneEntfernung(heimatort, ort); + double entfernung = berechneEntfernung(heimatort, ort); if (entfernung >= minEntfernung) { gefilterteOrte.add(ort); } @@ -68,7 +68,7 @@ public class KurztripEmpfehlung { return gefilterteOrte; } - return zufallsorteAuswaehlen(gefilterteOrte, Math.min(3, gefilterteOrte.size())); + return zufallsorteAuswaehlen(gefilterteOrte, 3); } private List zufallsorteAuswaehlen(List orte, int anzahl) { @@ -90,55 +90,49 @@ public class KurztripEmpfehlung { return zufallsorte; } -// public double berechneEntfernung(Ort standort, Ort zielort) { -// double b1 = Math.toRadians(standort.getBreitengrad()); -// double b2 = Math.toRadians(zielort.getBreitengrad()); -// double l1 = Math.toRadians(standort.getLängengrad()); -// double l2 = Math.toRadians(zielort.getLängengrad()); -// -// double deltaL = l2 - l1; -// double cosDeltaL = Math.cos(deltaL); -// double acosArgument = Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * cosDeltaL; -// -// acosArgument = Math.max(-1.0, Math.min(1.0, acosArgument)); -// -// double entfernung = 6378.388 * Math.acos(acosArgument); -// -// return entfernung; -// } + public double berechneEntfernung(Ort standort, Ort zielort) { + + double b1 = Math.toRadians(standort.getBreitengrad()); + double b2 = Math.toRadians(zielort.getBreitengrad()); + double l1 = Math.toRadians(standort.getLängengrad()); + double l2 = Math.toRadians(zielort.getLängengrad()); + + double entfernung = (6378.388 + * Math.acos(Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * Math.cos(l2 - l1))) * 1.25; + + return entfernung; + } -// private List ladeAlleOrte() { -// List alleOrte = new ArrayList<>(); -// -// String csvFile = "src/main/resources/PLZ.csv"; -// String line; -// try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) { -// while ((line = br.readLine()) != null) { -// line = line.replaceAll("\\s+", ""); -// String[] data = line.split(";"); -// int plz = Integer.parseInt(data[0].replaceAll("\"", "")); -// String ortName = data[1].replaceAll("\"", ""); -// double breitengrad = Double.parseDouble(data[2].replaceAll("\"", "")); -// double laengengrad = Double.parseDouble(data[3].replaceAll("\"", "")); -// Ort ort = new Ort(plz, ortName); -// ort.breitengrad = breitengrad; -// ort.längengrad = laengengrad; -// alleOrte.add(ort); -// } -// } catch (IOException e) { -// System.err.println("Fehler beim Lesen der Datei: " + e.getMessage()); -// e.printStackTrace(); -// } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) { -// System.err.println("Fehlerhaftes Datenformat in der CSV-Datei: " + e.getMessage()); -// e.printStackTrace(); -// } -// -// return alleOrte; -// } + private List ladeAlleOrte() { + List alleOrte = new ArrayList<>(); - public Ort getHeimatort() { + String csvFile = "src/main/resources/PLZ.csv"; + String line; + try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) { + while ((line = br.readLine()) != null) { + line = line.replaceAll("\\s+", ""); + String[] data = line.split(";"); + int plz = Integer.parseInt(data[0].replaceAll("\"", "")); + String ortName = data[1].replaceAll("\"", ""); + double breitengrad = Double.parseDouble(data[2].replaceAll("\"", "")); + double laengengrad = Double.parseDouble(data[3].replaceAll("\"", "")); + Ort ort = new Ort(plz, ortName, breitengrad, laengengrad); + alleOrte.add(ort); + } + } catch (IOException e) { + System.err.println("Fehler beim Lesen der Datei: " + e.getMessage()); + e.printStackTrace(); + } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) { + System.err.println("Fehlerhaftes Datenformat in der CSV-Datei: " + e.getMessage()); + e.printStackTrace(); + } + + return alleOrte; + } + + public Object getHeimatort() { return heimatort; } } diff --git a/TravelBuddyApp/src/main/java/domain/Ort.java b/TravelBuddyApp/src/main/java/domain/Ort.java index 4e3d1c8..50f3669 100644 --- a/TravelBuddyApp/src/main/java/domain/Ort.java +++ b/TravelBuddyApp/src/main/java/domain/Ort.java @@ -15,6 +15,16 @@ public class Ort { this.name = name; } + public Ort(int plz, String name, double breitengrad, double längengrad) { + this.plz = plz; + this.name = name; + this.breitengrad = breitengrad; + this.längengrad = längengrad; + } + + + + public String getAktuellesWetter() { try { return WetterService.getAktuellesWetter(name); diff --git a/TravelBuddyApp/src/main/java/domain/Reiseplanung.java b/TravelBuddyApp/src/main/java/domain/Reiseplanung.java index 3a47b2c..49a4560 100644 --- a/TravelBuddyApp/src/main/java/domain/Reiseplanung.java +++ b/TravelBuddyApp/src/main/java/domain/Reiseplanung.java @@ -1,6 +1,7 @@ package domain; import java.lang.Math; + public class Reiseplanung { private Ort standort; @@ -8,68 +9,52 @@ public class Reiseplanung { private double entfernung; private double dauerPKW; private double dauerFahrrad; - private double co2AusstoßPKW; - + private double co2AusstoßPKW; + public Reiseplanung(User user, Ort zielort) { - + this.standort = user.getHeimatstandort(); this.zielort = zielort; - - Auto auto = user.getAuto(); - standort = user.getHeimatstandort(); - berechneEntfernung(this.standort, this.zielort); - dauerPKW = berechneDauer(user.getDurchschnittsgeschwindigkeitPKW()); - dauerFahrrad = berechneDauer(user.getDurchschnittsgeschwindigkeitFahrrad()); - berechneCO2Ausstoß(this.entfernung, auto); - + this.entfernung = berechneEntfernung(standort, zielort); + this.dauerPKW = berechneDauer(user.getDurchschnittsgeschwindigkeitPKW()); + this.dauerFahrrad = berechneDauer(user.getDurchschnittsgeschwindigkeitFahrrad()); + this.co2AusstoßPKW = berechneCO2Ausstoß(user.getAuto()); } - + public double berechneEntfernung(Ort standort, Ort zielort) { - - double b1 = Math.toRadians(standort.getBreitengrad()); + + double b1 = Math.toRadians(standort.getBreitengrad()); double b2 = Math.toRadians(zielort.getBreitengrad()); double l1 = Math.toRadians(standort.getLängengrad()); double l2 = Math.toRadians(zielort.getLängengrad()); - - entfernung = (6378.388 * Math.acos(Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * Math.cos(l2 - l1))) * 1.25; - + + entfernung = (6378.388 + * Math.acos(Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * Math.cos(l2 - l1))) * 1.25; + return entfernung; } - - //berechnet die ungefähre Dauer zum gewählten Ort + + // berechnet die ungefähre Dauer zum gewählten Ort public double berechneDauer(double geschwindigkeit) { - return entfernung/geschwindigkeit; - + return entfernung / geschwindigkeit; + } - - //berechnet ungefähren CO2 Ausstoß des Autos für eine Strecke - public double berechneCO2Ausstoß(double entfernung, Auto auto) { - co2AusstoßPKW = entfernung * auto.getCO2AusstossProKm(); - return co2AusstoßPKW; + + // berechnet ungefähren CO2 Ausstoß des Autos für eine Strecke + public double berechneCO2Ausstoß(Auto auto) { + return entfernung * auto.getCO2AusstossProKm(); } - + public double getEntfernung() { return entfernung; - - } - - public String toString() { - return "Von " + standort + " Nach " + zielort + "\nEntfernung: " + entfernung + "\nReisedauer mit dem PKW: " + dauerPKW + "\nReiserdauer mit dem Fahrrad: " + dauerFahrrad + "\nCO2-Ausstoß durch PKW: " + co2AusstoßPKW; - } -// public Reiseplanung(Ort standort, Ort zielort, double durchschnittsgeschwindigkeitPKW, -// double durchschnittsgeschwindigkeitFahrrad, double co2AusstossProKmPKW) { -// this.standort = standort; -// this.zielort = zielort; -// this.entfernung = berechneEntfernung(standort, zielort); -// this.dauerPKW = entfernung / durchschnittsgeschwindigkeitPKW; -// this.dauerFahrrad = entfernung / durchschnittsgeschwindigkeitFahrrad; -// this.co2AusstoßPKW = entfernung * co2AusstossProKmPKW; -// } - -// public String berechneReiseDauer(double durchschnittsgeschwindigkeit) { -// double dauer = entfernung / durchschnittsgeschwindigkeit; -// return String.format("Die Reise dauert ca. %.2f Stunden.", dauer); -// } + } + + @Override + public String toString() { + return String.format( + "Von %s nach %s\nEntfernung: %.1f km\nReisedauer mit dem PKW: %.1f Stunden\nReisedauer mit dem Fahrrad: %.1f Stunden\nCO2-Ausstoß durch PKW: %.1f kg", + standort.getName(), zielort.getName(), entfernung, dauerPKW, dauerFahrrad, co2AusstoßPKW); + } public double getDauerPKW() { return dauerPKW; @@ -78,8 +63,8 @@ public class Reiseplanung { public double getDauerFahrrad() { return dauerFahrrad; } - + public double getCO2Ausstoß() { return co2AusstoßPKW; - } + } } diff --git a/TravelBuddyApp/src/main/java/fassade/ReiseFassade.java b/TravelBuddyApp/src/main/java/fassade/ReiseFassade.java index 1213633..1b204e1 100644 --- a/TravelBuddyApp/src/main/java/fassade/ReiseFassade.java +++ b/TravelBuddyApp/src/main/java/fassade/ReiseFassade.java @@ -1,31 +1,43 @@ package fassade; - + import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; +import java.util.HashSet; + import domain.Ort; import domain.Reiseplanung; import domain.User; +import domain.WetterService; + import java.util.List; +import java.util.Set; + import domain.KurztripEmpfehlung; public class ReiseFassade { - -private Reiseplanung reiseplanung; -private KurztripEmpfehlung kurztripEmpfehlung; + private Reiseplanung reiseplanung; + private KurztripEmpfehlung kurztripEmpfehlung; User user; List alleOrte; - - - public ReiseFassade(User user) { - - alleOrte = ladeAlleOrte(); - + public ReiseFassade(User user) { + + this.kurztripEmpfehlung = new KurztripEmpfehlung(); + alleOrte = ladeAlleOrte(); + } + + public void setHeimatortFromUser(User user) { + Ort heimatort = user.getHeimatstandort(); + this.kurztripEmpfehlung.setHeimatort(heimatort); + } + + + public List ladeAlleOrte() { List alleOrte = new ArrayList<>(); @@ -54,84 +66,79 @@ private KurztripEmpfehlung kurztripEmpfehlung; return alleOrte; } - -// //lädt Datei aus rescources ein und speichert Orte in HashSet ab -// private void orteLaden() throws FileNotFoundException { -// -// //UserInterface.class.getClass().getResourceAsStream("resources/PLZ.csv"); -// Scanner sc = new Scanner(new File("resources/PLZ.csv")); -// -// int zähler = 0; -// while (sc.hasNextLine()) { -// String ort = sc.nextLine(); -// -// String[] spalten = ort.split(";"); -// -// orte.add(new Ort(Integer.parseInt(spalten[0]), spalten[1], Double.parseDouble(spalten[2]), Double.parseDouble(spalten[3]))); -// -// zähler++; -// } -// -// System.out.println(zähler + "Orte geladen."); -// } - - //gibt Trefferliste passend zum Suchbegriff zurück - public Ort[] sucheOrt(String suchbegriff) { - List trefferliste = new ArrayList<>(); -// String ausgabe = " "; - - //gibt alle Orte zurück - if(suchbegriff.equals("alle")) - trefferliste = alleOrte; - else - //läuft über set orte - for(Ort o : alleOrte) { - //fügt ort zur Trefferliste hinzu wenn der Suchbegriff im Namen ist und weniger als 8 Orte bereits drauf stehen - if(o.getName().contains(suchbegriff) && trefferliste.size()<8) - trefferliste.add(o); - } -// -// for(Ort o : trefferliste) { -// ausgabe = ausgabe + o.getName() + " Entfernung: " + new Reiseplanung(user, o).getEntfernung() + "\n"; -// } - - return trefferliste.toArray(new Ort[0]); - } - - public String anzeigeTrefferliste(Ort[] trefferliste) { - String ausgabe = " "; - int i = 1; - for(Ort o : trefferliste) { - ausgabe = ausgabe + i + o.getName() + " Entfernung: " + new Reiseplanung(user, o).getEntfernung() + "\n"; - i++; - } - return ausgabe; - } + + + public Ort[] sucheOrt(String suchbegriff) { + Set trefferSet = new HashSet<>(); + + if (suchbegriff.equalsIgnoreCase("alle")) { + trefferSet.addAll(alleOrte); + } else { + for (Ort o : alleOrte) { + if (o.getName().contains(suchbegriff) && trefferSet.size() < 8) { + trefferSet.add(o); + } + } + } + + return trefferSet.toArray(new Ort[0]); + } + + + + + public String anzeigeTrefferliste(Ort[] trefferliste) { + StringBuilder ausgabe = new StringBuilder(); + int i = 1; + + for (Ort o : trefferliste) { + double entfernung = new Reiseplanung(user, o).getEntfernung(); + ausgabe.append(i).append(". ").append(o.getName()).append(" (Entfernung: ") + .append(entfernung).append(" km)\n"); + String wettervorhersage = getWettervorhersage(o.getName()); + ausgabe.append(wettervorhersage).append("\n"); + i++; + } + + return ausgabe.toString(); + } + + public String ortAnzeige(int index, Ort[] trefferliste) { String anzeige = " "; - anzeige = trefferliste[index-1].getName() + trefferliste[index-1].getPLZ() + trefferliste[index-1].getWettervorhersage(); + anzeige = trefferliste[index - 1].getName() + trefferliste[index - 1].getPLZ() + + trefferliste[index - 1].getWettervorhersage(); return anzeige; } - /*public Reiseplanung planeReise(Ort startort, Ort zielort) { - Reiseplanung reiseplanung = new Reiseplanung(startort, zielort); - reiseplanung.berechneEntfernung(); - reiseplanung.berechneReisedauerPKW(); - reiseplanung.berechneReisedauerFahrrad(); - reiseplanung.berechneCo2Ausstoss(); - return reiseplanung; - }*/ + + + public String getReiseplanung(User user, Ort ziel) { reiseplanung = new Reiseplanung(user, ziel); return reiseplanung.toString(); } - - public void setHeimatortFromUser(User user) { - kurztripEmpfehlung.setHeimatort(user.getHeimatstandort()); + + + + public String getAktuellesWetter(String ortName) { + try { + return WetterService.getAktuellesWetter(ortName); + } catch (IOException | InterruptedException e) { + return "Fehler beim Abrufen des Wetters: " + e.getMessage(); + } } - - + + + public String getWettervorhersage(String ortName) { + try { + return WetterService.getWettervorhersage(ortName); + } catch (IOException | InterruptedException e) { + return "Fehler beim Abrufen des Wetters: " + e.getMessage(); + } + } + public double berechneEntfernung() { return reiseplanung.getEntfernung(); @@ -150,14 +157,13 @@ private KurztripEmpfehlung kurztripEmpfehlung; public double berechneCO2AusstossPKW() { return reiseplanung.getCO2Ausstoß(); } - public List zufallsorteFahrrad(int maxEntfernung) { - return kurztripEmpfehlung.zufallsorteFahrrad(maxEntfernung); - } + return kurztripEmpfehlung.zufallsorteFahrrad(maxEntfernung); + } + + public List zufallsortePKW(int minEntfernung) { + return kurztripEmpfehlung.zufallsortePKW(minEntfernung); + } - public List zufallsortePKW(int minEntfernung) { - return kurztripEmpfehlung.zufallsortePKW(minEntfernung); - } - } diff --git a/TravelBuddyApp/src/main/java/fassade/UserFassade.java b/TravelBuddyApp/src/main/java/fassade/UserFassade.java index 31a3e39..012c547 100644 --- a/TravelBuddyApp/src/main/java/fassade/UserFassade.java +++ b/TravelBuddyApp/src/main/java/fassade/UserFassade.java @@ -6,6 +6,7 @@ import domain.Auto; public class UserFassade { + public User registrieren(String username, String password, int plz, String ortName, String autoName, double co2AusstossProKm, double durchschnittsgeschwindigkeitPKW, double durchschnittsgeschwindigkeitFahrrad) { diff --git a/TravelBuddyApp/src/main/java/ui/UserInterface.java b/TravelBuddyApp/src/main/java/ui/UserInterface.java index aa7c34f..11a0290 100644 --- a/TravelBuddyApp/src/main/java/ui/UserInterface.java +++ b/TravelBuddyApp/src/main/java/ui/UserInterface.java @@ -3,7 +3,9 @@ package ui; import java.util.List; import java.util.Scanner; +import domain.KurztripEmpfehlung; import domain.Ort; +import domain.Reiseplanung; import domain.User; import fassade.ReiseFassade; import fassade.UserFassade; @@ -128,54 +130,85 @@ public class UserInterface { } } + + private void sucheOrt() { - System.out.print("Geben Sie den Namen des Ortes ein: "); - String ortName = scanner.nextLine(); -// reiseFacade.sucheOrt(ortName); - Ort[] trefferliste = reiseFacade.sucheOrt(ortName); - System.out.println(reiseFacade.anzeigeTrefferliste(trefferliste)); - - System.out.println("Wählen Sie einen Ort aus: "); - System.out.println("Geben Sie ´beenden` ein, um zu beenden"); - String input = scanner.nextLine(); - if(input == "beenden") { - return; - } - int eingabe = Integer.parseInt(input); - reiseFacade.ortAnzeige(eingabe, trefferliste); - /* - * List treffer = reiseFacade.sucheOrt(ortName); if (treffer.isEmpty()) { - * System.out.println("Keine Treffer gefunden."); } else { - * System.out.println("Trefferliste:"); for (Ort ort : treffer) { - * System.out.println(ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")"); String - * wetter = user.zeigeWettervorhersageHeimatstandort(); - * System.out.println("Aktuelles Wetter in " + - * user.getHeimatstandort().getOrtName() + ": " + wetter); } } - */ - } + System.out.print("Geben Sie den Namen des Ortes ein: "); + String ortName = scanner.nextLine(); + + // Search for the location + Ort[] treffer = reiseFacade.sucheOrt(ortName); + + if (treffer.length == 0) { + System.out.println("Keine Treffer gefunden."); + } else { + System.out.println("Trefferliste:"); + for (int i = 0; i < treffer.length; i++) { + Reiseplanung reiseplanung = new Reiseplanung(user, treffer[i]); + System.out.println((i + 1) + ". " + treffer[i].getName() + " (PLZ: " + treffer[i].getPLZ() + + "), Entfernung: " + reiseplanung.getEntfernung() + " km"); + + String wettervorhersage = reiseFacade.getWettervorhersage(treffer[i].getName()); + System.out.println(wettervorhersage); + } + + // Display the current weather at the user's home location + String wetter = reiseFacade.getAktuellesWetter(user.getHeimatstandort().getName()); + System.out.println("Aktuelles Wetter in " + user.getHeimatstandort().getName() + ": " + wetter); + + // Choose a location from the list + System.out.println("Wählen Sie einen Ort aus: "); + System.out.println("Geben Sie 'beenden' ein, um zu beenden"); + String input = scanner.nextLine(); + + if (input.equalsIgnoreCase("beenden")) { + return; + } + + try { + int eingabe = Integer.parseInt(input); + if (eingabe < 1 || eingabe > treffer.length) { + System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut."); + } else { + reiseFacade.ortAnzeige(eingabe - 1, treffer); + } + } catch (NumberFormatException e) { + System.out.println("Ungültige Eingabe. Bitte geben Sie eine Zahl ein."); + } + } + } + + + + + + private void planeReise() { -// System.out.print("Geben Sie Ihre Start-PLZ ein: "); -// int startPlz = Integer.parseInt(scanner.nextLine()); -// System.out.print("Geben Sie Ihren Startort ein: "); -// String startOrtName = scanner.nextLine(); -// Ort startort = new Ort(startPlz, startOrtName); - System.out.print("Geben Sie die Ziel-PLZ ein: "); - int zielPlz = Integer.parseInt(scanner.nextLine()); - System.out.print("Geben Sie den Zielort ein: "); - String zielOrtName = scanner.nextLine(); - Ort zielort = new Ort(zielPlz, zielOrtName); + System.out.print("Geben Sie die Ziel-PLZ ein: "); + int zielPlz = Integer.parseInt(scanner.nextLine()); + System.out.print("Geben Sie den Zielort ein: "); + String zielOrtName = scanner.nextLine(); + + // Lade alle Orte, um den Ort mit den GPS-Koordinaten zu erhalten + List alleOrte = reiseFacade.ladeAlleOrte(); + Ort zielort = null; + for (Ort ort : alleOrte) { + if (ort.getPLZ() == zielPlz && ort.getName().equalsIgnoreCase(zielOrtName)) { + zielort = ort; + break; + } + } - System.out.println(reiseFacade.getReiseplanung(user, zielort)); - /* - * Reiseplanung reise = reiseFacade.planeReise(startort, zielort); - * System.out.println("Reiseplanung:"); System.out.println("Entfernung: " + - * reise.getEntfernung() + " km"); System.out.println("Reisedauer PKW: " + - * reise.getDauerPKW() + " Stunden"); System.out.println("Reisedauer Fahrrad: " - * + reise.getDauerFahrrad() + " Stunden"); - * System.out.println("CO2-Ausstoß PKW: " + reise.berechneCO2Ausstoss() + " g"); - */ + if (zielort != null) { + System.out.println(reiseFacade.getReiseplanung(user, zielort)); + } else { + System.out.println("Der Zielort wurde nicht gefunden."); + } } + + + private void kurztripEmpfehlen() { if (user != null && user.getHeimatstandort() != null) { @@ -186,38 +219,54 @@ public class UserInterface { System.out.print("Wählen Sie ein Transportmittel (Fahrrad/Auto): "); String transportmittel = scanner.nextLine().trim().toLowerCase(); + List empfohleneOrte = null; switch (transportmittel) { case "fahrrad": - List fahrradOrte = reiseFacade.zufallsorteFahrrad(10000); - if (fahrradOrte.isEmpty()) { + empfohleneOrte = reiseFacade.zufallsorteFahrrad(10000); + //List fahrradOrte = reiseFacade.zufallsorteFahrrad(10000); + /*if (fahrradOrte.isEmpty()) { System.out.println("Keine Orte innerhalb von 100 km gefunden."); } else { System.out.println("Folgende Orte wurden für einen Fahrrad-Kurztrip empfohlen:"); for (Ort ort : fahrradOrte) { - System.out.println("- " + ort.getName() + " (PLZ: " + ort.getPLZ() + ")"); + System.out.println("- " + ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")"); } - } + }*/ break; case "auto": - List autoOrte = reiseFacade.zufallsortePKW(150); - if (autoOrte.isEmpty()) { + empfohleneOrte = reiseFacade.zufallsortePKW(150); + //List autoOrte = reiseFacade.zufallsortePKW(150); + /*if (autoOrte.isEmpty()) { System.out.println("Keine Orte mindestens 150 km entfernt gefunden."); } else { System.out.println("Folgende Orte wurden für einen Auto-Kurztrip empfohlen:"); for (Ort ort : autoOrte) { - System.out.println("- " + ort.getName() + " (PLZ: " + ort.getPLZ() + ")"); + System.out.println("- " + ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")"); } - } + }*/ break; default: System.out.println("Ungültige Option. Bitte wählen Sie entweder 'Fahrrad' oder 'Auto'."); break; } + + + if (!empfohleneOrte.isEmpty()) { + System.out.println("Empfohlene Orte:"); + KurztripEmpfehlung kurztripEmpfehlung = new KurztripEmpfehlung(); + for (Ort ort : empfohleneOrte) { + double entfernung = kurztripEmpfehlung.berechneEntfernung(user.getHeimatstandort(), ort); + System.out.printf("- %s (PLZ: %d, Entfernung: %.1f km)%n", ort.getName(), ort.getPLZ(), entfernung); + } + } else { + System.out.println("Keine Orte gefunden."); + } + + } else { System.out.println("Bitte zuerst einloggen und Heimatort angeben!"); } } - public static void main(String[] args) { diff --git a/TravelBuddyApp/src/test/java/domain/ReiseplanungTest.java b/TravelBuddyApp/src/test/java/domain/ReiseplanungTest.java index 3a693ae..bdef7a9 100644 --- a/TravelBuddyApp/src/test/java/domain/ReiseplanungTest.java +++ b/TravelBuddyApp/src/test/java/domain/ReiseplanungTest.java @@ -1,40 +1,80 @@ -package domain; - -import static org.junit.Assert.assertEquals; -import org.junit.Test; - -public class ReiseplanungTest { - - Auto auto = new Auto("Brummi", 167.6); - Ort ort = new Ort(1067, "Dresden", 13.7210676148814, 51.0600336463379); - User user = new User("Karl", "hallo", ort, auto, 30, 15); - Ort ziel = new Ort(1705, "Freital", 13.6382950999229, 50.9981963286759); - Reiseplanung reise = new Reiseplanung(user,ziel); - - - @Test - public void testBerechneEntfernung() { - - double result = reise.berechneEntfernung(ort, ziel); - - assertEquals(14.2125, result, 0.0); - } - - @Test - public void testBerechneDauer() { - double entfernung = 136.5; - double geschwindigkeit = 70; - - double result = reise.berechneDauer(entfernung, geschwindigkeit); - - assertEquals(1.95, result, 0.0); - } - - public void testBerechneCO2Ausstoß() { - double entfernung = 73.8; - - double result = reise.berechneCO2Ausstoß(entfernung, auto); - - assertEquals(12368.88, result, 0.0); - } -} +package domain; + +import static org.junit.Assert.assertEquals; +import org.junit.Before; +import org.junit.Test; + +public class ReiseplanungTest { + + private Auto auto; + private Ort startOrt; + private Ort zielOrt; + private User user; + private Reiseplanung reiseplanung; + + @Before + public void setUp() { + auto = new Auto("Brummi", 167.6); // CO2-Ausstoß in g/km + startOrt = new Ort(1067, "Dresden", 13.7210676148814, 51.0600336463379); + user = new User("Karl", "hallo", startOrt, auto, 70, 15); // Durchschnittsgeschwindigkeit PKW und Fahrrad + zielOrt = new Ort(1705, "Freital", 13.6382950999229, 50.9981963286759); + reiseplanung = new Reiseplanung(user, zielOrt); + } + + @Test + public void testBerechneEntfernung() { + double result = reiseplanung.berechneEntfernung(startOrt, zielOrt); + // This value needs to be verified and adjusted if necessary + assertEquals(14.2125, result, 0.1); + } + + @Test + public void testBerechneDauer() { + double entfernung = 136.5; + double geschwindigkeit = 70; // Durchschnittsgeschwindigkeit in km/h + double result = reiseplanung.berechneDauer(geschwindigkeit); + assertEquals(1.95, result, 0.01); + } + + @Test + public void testBerechneCO2Ausstoß() { + double entfernung = 73.8; + double result = reiseplanung.berechneCO2Ausstoß(auto); + assertEquals(12368.88, result, 0.01); + } + + @Test + public void testGetEntfernung() { + assertEquals(14.2125, reiseplanung.getEntfernung(), 0.1); + } + + @Test + public void testGetDauerPKW() { + double geschwindigkeit = user.getDurchschnittsgeschwindigkeitPKW(); + double erwarteteDauer = 14.2125 / geschwindigkeit; + assertEquals(erwarteteDauer, reiseplanung.getDauerPKW(), 0.1); + } + + @Test + public void testGetDauerFahrrad() { + double geschwindigkeit = user.getDurchschnittsgeschwindigkeitFahrrad(); + double erwarteteDauer = 14.2125 / geschwindigkeit; + assertEquals(erwarteteDauer, reiseplanung.getDauerFahrrad(), 0.1); + } + + @Test + public void testGetCO2Ausstoß() { + double erwarteterCO2Ausstoß = 14.2125 * auto.getCO2AusstossProKm(); + assertEquals(erwarteterCO2Ausstoß, reiseplanung.getCO2Ausstoß(), 0.1); + } + + @Test + public void testToString() { + String expected = "Von " + startOrt.getName() + " Nach " + zielOrt.getName() + + "\nEntfernung: " + reiseplanung.getEntfernung() + + "\nReisedauer mit dem PKW: " + reiseplanung.getDauerPKW() + + "\nReisedauer mit dem Fahrrad: " + reiseplanung.getDauerFahrrad() + + "\nCO2-Ausstoß durch PKW: " + reiseplanung.getCO2Ausstoß(); + assertEquals(expected, reiseplanung.toString()); + } +} diff --git a/TravelBuddyApp/src/test/java/domainTest/UserTest.java b/TravelBuddyApp/src/test/java/domainTest/UserTest.java index 0ce4dcf..e03a9fd 100644 --- a/TravelBuddyApp/src/test/java/domainTest/UserTest.java +++ b/TravelBuddyApp/src/test/java/domainTest/UserTest.java @@ -64,7 +64,7 @@ public class UserTest { assertTrue(testUser.einloggen()); // Überprüfe, ob die Userdaten korrekt gesetzt wurden - assertEquals("Teststadt", testUser.getHeimatstandort().getOrtName()); + assertEquals("Teststadt", testUser.getHeimatstandort().getName()); assertEquals("Testauto", testUser.getAuto().getName()); assertEquals(0.12, testUser.getAuto().getCO2AusstossProKm(), 0.001); // Delta für Genauigkeit assertEquals(80.0, testUser.getDurchschnittsgeschwindigkeitPKW(), 0.001); // Delta für Genauigkeit diff --git a/TravelBuddyApp/users.txt b/TravelBuddyApp/users.txt index 4d31b76..b84e21a 100644 --- a/TravelBuddyApp/users.txt +++ b/TravelBuddyApp/users.txt @@ -1,3 +1,6 @@ dana,a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3,67105,Schifferstadt,audi,123.0,60.0,30.0 max,a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3,555,berlin,audi,12.0,23.0,34.0 tina,a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3,1328,Dresden,audi,12.0,34.0,56.0 +anna,0ffe1abd1a08215353c233d6e009613e95eec4253832a761af28ff37ac5a150c,76829,Landau,mazda,120.0,70.0,30.0 +anna,0ffe1abd1a08215353c233d6e009613e95eec4253832a761af28ff37ac5a150c,76829,Landau,mazda,120.0,90.0,30.0 +mike,0ffe1abd1a08215353c233d6e009613e95eec4253832a761af28ff37ac5a150c,80331,Münnchen,VW Golf,120.0,60.0,20.0