Vollständige Implementierung

main
danai 2024-06-18 02:20:52 +02:00
parent a00963768f
commit 8de5538563
9 changed files with 368 additions and 280 deletions

View File

@ -1,17 +1,19 @@
package domain; package domain;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
public class KurztripEmpfehlung { public class KurztripEmpfehlung {
User user;
private List<Ort> alleOrte; private List<Ort> alleOrte;
private Ort heimatort; private Ort heimatort;
public KurztripEmpfehlung(User user) { public KurztripEmpfehlung() {
this.alleOrte = ladeAlleOrte();
this.heimatort = null; this.heimatort = null;
} }
@ -30,8 +32,7 @@ public class KurztripEmpfehlung {
} }
for (Ort ort : alleOrte) { for (Ort ort : alleOrte) {
Reiseplanung reise = new Reiseplanung(user, ort); double entfernung = berechneEntfernung(heimatort, ort);
double entfernung = reise.berechneEntfernung(heimatort, ort);
if (entfernung <= maxEntfernung) { if (entfernung <= maxEntfernung) {
gefilterteOrte.add(ort); gefilterteOrte.add(ort);
} }
@ -42,7 +43,7 @@ public class KurztripEmpfehlung {
return gefilterteOrte; 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) { for (Ort ort : alleOrte) {
Reiseplanung reise = new Reiseplanung(user, ort); double entfernung = berechneEntfernung(heimatort, ort);
double entfernung = reise.berechneEntfernung(heimatort, ort);
if (entfernung >= minEntfernung) { if (entfernung >= minEntfernung) {
gefilterteOrte.add(ort); gefilterteOrte.add(ort);
} }
@ -68,7 +68,7 @@ public class KurztripEmpfehlung {
return gefilterteOrte; return gefilterteOrte;
} }
return zufallsorteAuswaehlen(gefilterteOrte, Math.min(3, gefilterteOrte.size())); return zufallsorteAuswaehlen(gefilterteOrte, 3);
} }
private List<Ort> zufallsorteAuswaehlen(List<Ort> orte, int anzahl) { private List<Ort> zufallsorteAuswaehlen(List<Ort> orte, int anzahl) {
@ -90,55 +90,49 @@ public class KurztripEmpfehlung {
return zufallsorte; return zufallsorte;
} }
// public double berechneEntfernung(Ort standort, Ort zielort) { public double berechneEntfernung(Ort standort, Ort zielort) {
// double b1 = Math.toRadians(standort.getBreitengrad());
// double b2 = Math.toRadians(zielort.getBreitengrad()); double b1 = Math.toRadians(standort.getBreitengrad());
// double l1 = Math.toRadians(standort.getLängengrad()); double b2 = Math.toRadians(zielort.getBreitengrad());
// double l2 = Math.toRadians(zielort.getLängengrad()); double l1 = Math.toRadians(standort.getLängengrad());
// double l2 = Math.toRadians(zielort.getLängengrad());
// double deltaL = l2 - l1;
// double cosDeltaL = Math.cos(deltaL); double entfernung = (6378.388
// double acosArgument = Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * cosDeltaL; * Math.acos(Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * Math.cos(l2 - l1))) * 1.25;
//
// acosArgument = Math.max(-1.0, Math.min(1.0, acosArgument)); return entfernung;
// }
// double entfernung = 6378.388 * Math.acos(acosArgument);
//
// return entfernung;
// }
// private List<Ort> ladeAlleOrte() { private List<Ort> ladeAlleOrte() {
// List<Ort> alleOrte = new ArrayList<>(); List<Ort> 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;
// }
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; return heimatort;
} }
} }

View File

@ -15,6 +15,16 @@ public class Ort {
this.name = name; 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() { public String getAktuellesWetter() {
try { try {
return WetterService.getAktuellesWetter(name); return WetterService.getAktuellesWetter(name);

View File

@ -1,6 +1,7 @@
package domain; package domain;
import java.lang.Math; import java.lang.Math;
public class Reiseplanung { public class Reiseplanung {
private Ort standort; private Ort standort;
@ -8,68 +9,52 @@ public class Reiseplanung {
private double entfernung; private double entfernung;
private double dauerPKW; private double dauerPKW;
private double dauerFahrrad; private double dauerFahrrad;
private double co2AusstoßPKW; private double co2AusstoßPKW;
public Reiseplanung(User user, Ort zielort) { public Reiseplanung(User user, Ort zielort) {
this.standort = user.getHeimatstandort();
this.zielort = zielort; this.zielort = zielort;
this.entfernung = berechneEntfernung(standort, zielort);
Auto auto = user.getAuto(); this.dauerPKW = berechneDauer(user.getDurchschnittsgeschwindigkeitPKW());
standort = user.getHeimatstandort(); this.dauerFahrrad = berechneDauer(user.getDurchschnittsgeschwindigkeitFahrrad());
berechneEntfernung(this.standort, this.zielort); this.co2AusstoßPKW = berechneCO2Ausstoß(user.getAuto());
dauerPKW = berechneDauer(user.getDurchschnittsgeschwindigkeitPKW());
dauerFahrrad = berechneDauer(user.getDurchschnittsgeschwindigkeitFahrrad());
berechneCO2Ausstoß(this.entfernung, auto);
} }
public double berechneEntfernung(Ort standort, Ort zielort) { 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 b2 = Math.toRadians(zielort.getBreitengrad());
double l1 = Math.toRadians(standort.getLängengrad()); double l1 = Math.toRadians(standort.getLängengrad());
double l2 = Math.toRadians(zielort.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; 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) { public double berechneDauer(double geschwindigkeit) {
return entfernung/geschwindigkeit; return entfernung / geschwindigkeit;
} }
//berechnet ungefähren CO2 Ausstoß des Autos für eine Strecke // berechnet ungefähren CO2 Ausstoß des Autos für eine Strecke
public double berechneCO2Ausstoß(double entfernung, Auto auto) { public double berechneCO2Ausstoß(Auto auto) {
co2AusstoßPKW = entfernung * auto.getCO2AusstossProKm(); return entfernung * auto.getCO2AusstossProKm();
return co2AusstoßPKW;
} }
public double getEntfernung() { public double getEntfernung() {
return entfernung; 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; @Override
// this.zielort = zielort; public String toString() {
// this.entfernung = berechneEntfernung(standort, zielort); return String.format(
// this.dauerPKW = entfernung / durchschnittsgeschwindigkeitPKW; "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",
// this.dauerFahrrad = entfernung / durchschnittsgeschwindigkeitFahrrad; standort.getName(), zielort.getName(), entfernung, dauerPKW, dauerFahrrad, co2AusstoßPKW);
// this.co2AusstoßPKW = entfernung * co2AusstossProKmPKW; }
// }
// public String berechneReiseDauer(double durchschnittsgeschwindigkeit) {
// double dauer = entfernung / durchschnittsgeschwindigkeit;
// return String.format("Die Reise dauert ca. %.2f Stunden.", dauer);
// }
public double getDauerPKW() { public double getDauerPKW() {
return dauerPKW; return dauerPKW;
@ -78,8 +63,8 @@ public class Reiseplanung {
public double getDauerFahrrad() { public double getDauerFahrrad() {
return dauerFahrrad; return dauerFahrrad;
} }
public double getCO2Ausstoß() { public double getCO2Ausstoß() {
return co2AusstoßPKW; return co2AusstoßPKW;
} }
} }

View File

@ -1,31 +1,43 @@
package fassade; package fassade;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import domain.Ort; import domain.Ort;
import domain.Reiseplanung; import domain.Reiseplanung;
import domain.User; import domain.User;
import domain.WetterService;
import java.util.List; import java.util.List;
import java.util.Set;
import domain.KurztripEmpfehlung; import domain.KurztripEmpfehlung;
public class ReiseFassade { public class ReiseFassade {
private Reiseplanung reiseplanung;
private Reiseplanung reiseplanung; private KurztripEmpfehlung kurztripEmpfehlung;
private KurztripEmpfehlung kurztripEmpfehlung;
User user; User user;
List<Ort> alleOrte; List<Ort> 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<Ort> ladeAlleOrte() { public List<Ort> ladeAlleOrte() {
List<Ort> alleOrte = new ArrayList<>(); List<Ort> alleOrte = new ArrayList<>();
@ -54,84 +66,79 @@ private KurztripEmpfehlung kurztripEmpfehlung;
return alleOrte; 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<Ort> 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<Ort> 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) { public String ortAnzeige(int index, Ort[] trefferliste) {
String anzeige = " "; 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; 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) { public String getReiseplanung(User user, Ort ziel) {
reiseplanung = new Reiseplanung(user, ziel); reiseplanung = new Reiseplanung(user, ziel);
return reiseplanung.toString(); 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() { public double berechneEntfernung() {
return reiseplanung.getEntfernung(); return reiseplanung.getEntfernung();
@ -150,14 +157,13 @@ private KurztripEmpfehlung kurztripEmpfehlung;
public double berechneCO2AusstossPKW() { public double berechneCO2AusstossPKW() {
return reiseplanung.getCO2Ausstoß(); return reiseplanung.getCO2Ausstoß();
} }
public List<Ort> zufallsorteFahrrad(int maxEntfernung) { public List<Ort> zufallsorteFahrrad(int maxEntfernung) {
return kurztripEmpfehlung.zufallsorteFahrrad(maxEntfernung); return kurztripEmpfehlung.zufallsorteFahrrad(maxEntfernung);
} }
public List<Ort> zufallsortePKW(int minEntfernung) {
return kurztripEmpfehlung.zufallsortePKW(minEntfernung);
}
public List<Ort> zufallsortePKW(int minEntfernung) {
return kurztripEmpfehlung.zufallsortePKW(minEntfernung);
}
} }

View File

@ -6,6 +6,7 @@ import domain.Auto;
public class UserFassade { public class UserFassade {
public User registrieren(String username, String password, int plz, String ortName, String autoName, public User registrieren(String username, String password, int plz, String ortName, String autoName,
double co2AusstossProKm, double durchschnittsgeschwindigkeitPKW, double co2AusstossProKm, double durchschnittsgeschwindigkeitPKW,
double durchschnittsgeschwindigkeitFahrrad) { double durchschnittsgeschwindigkeitFahrrad) {

View File

@ -3,7 +3,9 @@ package ui;
import java.util.List; import java.util.List;
import java.util.Scanner; import java.util.Scanner;
import domain.KurztripEmpfehlung;
import domain.Ort; import domain.Ort;
import domain.Reiseplanung;
import domain.User; import domain.User;
import fassade.ReiseFassade; import fassade.ReiseFassade;
import fassade.UserFassade; import fassade.UserFassade;
@ -128,54 +130,85 @@ public class UserInterface {
} }
} }
private void sucheOrt() { private void sucheOrt() {
System.out.print("Geben Sie den Namen des Ortes ein: "); System.out.print("Geben Sie den Namen des Ortes ein: ");
String ortName = scanner.nextLine(); String ortName = scanner.nextLine();
// reiseFacade.sucheOrt(ortName);
Ort[] trefferliste = reiseFacade.sucheOrt(ortName); // Search for the location
System.out.println(reiseFacade.anzeigeTrefferliste(trefferliste)); Ort[] treffer = reiseFacade.sucheOrt(ortName);
System.out.println("Wählen Sie einen Ort aus: "); if (treffer.length == 0) {
System.out.println("Geben Sie ´beenden` ein, um zu beenden"); System.out.println("Keine Treffer gefunden.");
String input = scanner.nextLine(); } else {
if(input == "beenden") { System.out.println("Trefferliste:");
return; for (int i = 0; i < treffer.length; i++) {
} Reiseplanung reiseplanung = new Reiseplanung(user, treffer[i]);
int eingabe = Integer.parseInt(input); System.out.println((i + 1) + ". " + treffer[i].getName() + " (PLZ: " + treffer[i].getPLZ() +
reiseFacade.ortAnzeige(eingabe, trefferliste); "), Entfernung: " + reiseplanung.getEntfernung() + " km");
/*
* List<Ort> treffer = reiseFacade.sucheOrt(ortName); if (treffer.isEmpty()) { String wettervorhersage = reiseFacade.getWettervorhersage(treffer[i].getName());
* System.out.println("Keine Treffer gefunden."); } else { System.out.println(wettervorhersage);
* System.out.println("Trefferliste:"); for (Ort ort : treffer) { }
* System.out.println(ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")"); String
* wetter = user.zeigeWettervorhersageHeimatstandort(); // Display the current weather at the user's home location
* System.out.println("Aktuelles Wetter in " + String wetter = reiseFacade.getAktuellesWetter(user.getHeimatstandort().getName());
* user.getHeimatstandort().getOrtName() + ": " + wetter); } } 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() { private void planeReise() {
// System.out.print("Geben Sie Ihre Start-PLZ ein: "); System.out.print("Geben Sie die Ziel-PLZ ein: ");
// int startPlz = Integer.parseInt(scanner.nextLine()); int zielPlz = Integer.parseInt(scanner.nextLine());
// System.out.print("Geben Sie Ihren Startort ein: "); System.out.print("Geben Sie den Zielort ein: ");
// String startOrtName = scanner.nextLine(); String zielOrtName = scanner.nextLine();
// Ort startort = new Ort(startPlz, startOrtName);
System.out.print("Geben Sie die Ziel-PLZ ein: "); // Lade alle Orte, um den Ort mit den GPS-Koordinaten zu erhalten
int zielPlz = Integer.parseInt(scanner.nextLine()); List<Ort> alleOrte = reiseFacade.ladeAlleOrte();
System.out.print("Geben Sie den Zielort ein: "); Ort zielort = null;
String zielOrtName = scanner.nextLine(); for (Ort ort : alleOrte) {
Ort zielort = new Ort(zielPlz, zielOrtName); if (ort.getPLZ() == zielPlz && ort.getName().equalsIgnoreCase(zielOrtName)) {
zielort = ort;
break;
}
}
System.out.println(reiseFacade.getReiseplanung(user, zielort)); if (zielort != null) {
/* System.out.println(reiseFacade.getReiseplanung(user, zielort));
* Reiseplanung reise = reiseFacade.planeReise(startort, zielort); } else {
* System.out.println("Reiseplanung:"); System.out.println("Entfernung: " + System.out.println("Der Zielort wurde nicht gefunden.");
* 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");
*/
} }
private void kurztripEmpfehlen() { private void kurztripEmpfehlen() {
if (user != null && user.getHeimatstandort() != null) { if (user != null && user.getHeimatstandort() != null) {
@ -186,38 +219,54 @@ public class UserInterface {
System.out.print("Wählen Sie ein Transportmittel (Fahrrad/Auto): "); System.out.print("Wählen Sie ein Transportmittel (Fahrrad/Auto): ");
String transportmittel = scanner.nextLine().trim().toLowerCase(); String transportmittel = scanner.nextLine().trim().toLowerCase();
List<Ort> empfohleneOrte = null;
switch (transportmittel) { switch (transportmittel) {
case "fahrrad": case "fahrrad":
List<Ort> fahrradOrte = reiseFacade.zufallsorteFahrrad(10000); empfohleneOrte = reiseFacade.zufallsorteFahrrad(10000);
if (fahrradOrte.isEmpty()) { //List<Ort> fahrradOrte = reiseFacade.zufallsorteFahrrad(10000);
/*if (fahrradOrte.isEmpty()) {
System.out.println("Keine Orte innerhalb von 100 km gefunden."); System.out.println("Keine Orte innerhalb von 100 km gefunden.");
} else { } else {
System.out.println("Folgende Orte wurden für einen Fahrrad-Kurztrip empfohlen:"); System.out.println("Folgende Orte wurden für einen Fahrrad-Kurztrip empfohlen:");
for (Ort ort : fahrradOrte) { for (Ort ort : fahrradOrte) {
System.out.println("- " + ort.getName() + " (PLZ: " + ort.getPLZ() + ")"); System.out.println("- " + ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")");
} }
} }*/
break; break;
case "auto": case "auto":
List<Ort> autoOrte = reiseFacade.zufallsortePKW(150); empfohleneOrte = reiseFacade.zufallsortePKW(150);
if (autoOrte.isEmpty()) { //List<Ort> autoOrte = reiseFacade.zufallsortePKW(150);
/*if (autoOrte.isEmpty()) {
System.out.println("Keine Orte mindestens 150 km entfernt gefunden."); System.out.println("Keine Orte mindestens 150 km entfernt gefunden.");
} else { } else {
System.out.println("Folgende Orte wurden für einen Auto-Kurztrip empfohlen:"); System.out.println("Folgende Orte wurden für einen Auto-Kurztrip empfohlen:");
for (Ort ort : autoOrte) { for (Ort ort : autoOrte) {
System.out.println("- " + ort.getName() + " (PLZ: " + ort.getPLZ() + ")"); System.out.println("- " + ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")");
} }
} }*/
break; break;
default: default:
System.out.println("Ungültige Option. Bitte wählen Sie entweder 'Fahrrad' oder 'Auto'."); System.out.println("Ungültige Option. Bitte wählen Sie entweder 'Fahrrad' oder 'Auto'.");
break; 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 { } else {
System.out.println("Bitte zuerst einloggen und Heimatort angeben!"); System.out.println("Bitte zuerst einloggen und Heimatort angeben!");
} }
} }
public static void main(String[] args) { public static void main(String[] args) {

View File

@ -1,40 +1,80 @@
package domain; package domain;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import org.junit.Test; import org.junit.Before;
import org.junit.Test;
public class ReiseplanungTest {
public class ReiseplanungTest {
Auto auto = new Auto("Brummi", 167.6);
Ort ort = new Ort(1067, "Dresden", 13.7210676148814, 51.0600336463379); private Auto auto;
User user = new User("Karl", "hallo", ort, auto, 30, 15); private Ort startOrt;
Ort ziel = new Ort(1705, "Freital", 13.6382950999229, 50.9981963286759); private Ort zielOrt;
Reiseplanung reise = new Reiseplanung(user,ziel); private User user;
private Reiseplanung reiseplanung;
@Test @Before
public void testBerechneEntfernung() { public void setUp() {
auto = new Auto("Brummi", 167.6); // CO2-Ausstoß in g/km
double result = reise.berechneEntfernung(ort, ziel); startOrt = new Ort(1067, "Dresden", 13.7210676148814, 51.0600336463379);
user = new User("Karl", "hallo", startOrt, auto, 70, 15); // Durchschnittsgeschwindigkeit PKW und Fahrrad
assertEquals(14.2125, result, 0.0); zielOrt = new Ort(1705, "Freital", 13.6382950999229, 50.9981963286759);
} reiseplanung = new Reiseplanung(user, zielOrt);
}
@Test
public void testBerechneDauer() { @Test
double entfernung = 136.5; public void testBerechneEntfernung() {
double geschwindigkeit = 70; double result = reiseplanung.berechneEntfernung(startOrt, zielOrt);
// This value needs to be verified and adjusted if necessary
double result = reise.berechneDauer(entfernung, geschwindigkeit); assertEquals(14.2125, result, 0.1);
}
assertEquals(1.95, result, 0.0);
} @Test
public void testBerechneDauer() {
public void testBerechneCO2Ausstoß() { double entfernung = 136.5;
double entfernung = 73.8; double geschwindigkeit = 70; // Durchschnittsgeschwindigkeit in km/h
double result = reiseplanung.berechneDauer(geschwindigkeit);
double result = reise.berechneCO2Ausstoß(entfernung, auto); assertEquals(1.95, result, 0.01);
}
assertEquals(12368.88, result, 0.0);
} @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());
}
}

View File

@ -64,7 +64,7 @@ public class UserTest {
assertTrue(testUser.einloggen()); assertTrue(testUser.einloggen());
// Überprüfe, ob die Userdaten korrekt gesetzt wurden // Überprüfe, ob die Userdaten korrekt gesetzt wurden
assertEquals("Teststadt", testUser.getHeimatstandort().getOrtName()); assertEquals("Teststadt", testUser.getHeimatstandort().getName());
assertEquals("Testauto", testUser.getAuto().getName()); assertEquals("Testauto", testUser.getAuto().getName());
assertEquals(0.12, testUser.getAuto().getCO2AusstossProKm(), 0.001); // Delta für Genauigkeit assertEquals(0.12, testUser.getAuto().getCO2AusstossProKm(), 0.001); // Delta für Genauigkeit
assertEquals(80.0, testUser.getDurchschnittsgeschwindigkeitPKW(), 0.001); // Delta für Genauigkeit assertEquals(80.0, testUser.getDurchschnittsgeschwindigkeitPKW(), 0.001); // Delta für Genauigkeit

View File

@ -1,3 +1,6 @@
dana,a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3,67105,Schifferstadt,audi,123.0,60.0,30.0 dana,a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3,67105,Schifferstadt,audi,123.0,60.0,30.0
max,a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3,555,berlin,audi,12.0,23.0,34.0 max,a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3,555,berlin,audi,12.0,23.0,34.0
tina,a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3,1328,Dresden,audi,12.0,34.0,56.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