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;
@ -11,16 +12,12 @@ public class Reiseplanung {
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) {
@ -30,21 +27,21 @@ public class Reiseplanung {
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() {
@ -52,25 +49,13 @@ public class Reiseplanung {
} }
@Override
public String toString() { 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; 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 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);
// }
public double getDauerPKW() { public double getDauerPKW() {
return dauerPKW; return dauerPKW;
} }

View File

@ -4,28 +4,40 @@ 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) { public ReiseFassade(User user) {
this.kurztripEmpfehlung = new KurztripEmpfehlung();
alleOrte = ladeAlleOrte(); 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<>();
@ -55,83 +67,78 @@ 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) { public Ort[] sucheOrt(String suchbegriff) {
List<Ort> trefferliste = new ArrayList<>(); Set<Ort> trefferSet = new HashSet<>();
// String ausgabe = " ";
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]);
}
//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) { public String anzeigeTrefferliste(Ort[] trefferliste) {
String ausgabe = " "; StringBuilder ausgabe = new StringBuilder();
int i = 1; int i = 1;
for(Ort o : trefferliste) {
ausgabe = ausgabe + i + o.getName() + " Entfernung: " + new Reiseplanung(user, o).getEntfernung() + "\n"; for (Ort o : trefferliste) {
i++; double entfernung = new Reiseplanung(user, o).getEntfernung();
} ausgabe.append(i).append(". ").append(o.getName()).append(" (Entfernung: ")
return ausgabe; .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();
@ -151,13 +158,12 @@ private KurztripEmpfehlung kurztripEmpfehlung;
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) { public List<Ort> zufallsortePKW(int minEntfernung) {
return kurztripEmpfehlung.zufallsortePKW(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,55 +130,86 @@ 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"); private void sucheOrt() {
String input = scanner.nextLine(); System.out.print("Geben Sie den Namen des Ortes ein: ");
if(input == "beenden") { String ortName = scanner.nextLine();
return;
} // Search for the location
int eingabe = Integer.parseInt(input); Ort[] treffer = reiseFacade.sucheOrt(ortName);
reiseFacade.ortAnzeige(eingabe, trefferliste);
/* if (treffer.length == 0) {
* List<Ort> treffer = reiseFacade.sucheOrt(ortName); if (treffer.isEmpty()) { System.out.println("Keine Treffer gefunden.");
* System.out.println("Keine Treffer gefunden."); } else { } else {
* System.out.println("Trefferliste:"); for (Ort ort : treffer) { System.out.println("Trefferliste:");
* System.out.println(ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")"); String for (int i = 0; i < treffer.length; i++) {
* wetter = user.zeigeWettervorhersageHeimatstandort(); Reiseplanung reiseplanung = new Reiseplanung(user, treffer[i]);
* System.out.println("Aktuelles Wetter in " + System.out.println((i + 1) + ". " + treffer[i].getName() + " (PLZ: " + treffer[i].getPLZ() +
* user.getHeimatstandort().getOrtName() + ": " + wetter); } } "), 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() { 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: ");
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.println(reiseFacade.getReiseplanung(user, zielort)); // Lade alle Orte, um den Ort mit den GPS-Koordinaten zu erhalten
/* List<Ort> alleOrte = reiseFacade.ladeAlleOrte();
* Reiseplanung reise = reiseFacade.planeReise(startort, zielort); Ort zielort = null;
* System.out.println("Reiseplanung:"); System.out.println("Entfernung: " + for (Ort ort : alleOrte) {
* reise.getEntfernung() + " km"); System.out.println("Reisedauer PKW: " + if (ort.getPLZ() == zielPlz && ort.getName().equalsIgnoreCase(zielOrtName)) {
* reise.getDauerPKW() + " Stunden"); System.out.println("Reisedauer Fahrrad: " zielort = ort;
* + reise.getDauerFahrrad() + " Stunden"); break;
* 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() { private void kurztripEmpfehlen() {
if (user != null && user.getHeimatstandort() != null) { if (user != null && user.getHeimatstandort() != null) {
System.out.println("Empfehlung basiert auf Heimatort: " + user.getHeimatstandort().getName()); System.out.println("Empfehlung basiert auf Heimatort: " + user.getHeimatstandort().getName());
@ -186,40 +219,56 @@ 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) {
new UserInterface(); new UserInterface();

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.Before;
import org.junit.Test; import org.junit.Test;
public class ReiseplanungTest { public class ReiseplanungTest {
Auto auto = new Auto("Brummi", 167.6); private Auto auto;
Ort ort = new Ort(1067, "Dresden", 13.7210676148814, 51.0600336463379); private Ort startOrt;
User user = new User("Karl", "hallo", ort, auto, 30, 15); private Ort zielOrt;
Ort ziel = new Ort(1705, "Freital", 13.6382950999229, 50.9981963286759); private User user;
Reiseplanung reise = new Reiseplanung(user,ziel); 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 @Test
public void testBerechneEntfernung() { 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);
}
double result = reise.berechneEntfernung(ort, ziel); @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);
}
assertEquals(14.2125, result, 0.0); @Test
} public void testBerechneCO2Ausstoß() {
double entfernung = 73.8;
double result = reiseplanung.berechneCO2Ausstoß(auto);
assertEquals(12368.88, result, 0.01);
}
@Test @Test
public void testBerechneDauer() { public void testGetEntfernung() {
double entfernung = 136.5; assertEquals(14.2125, reiseplanung.getEntfernung(), 0.1);
double geschwindigkeit = 70; }
double result = reise.berechneDauer(entfernung, geschwindigkeit); @Test
public void testGetDauerPKW() {
double geschwindigkeit = user.getDurchschnittsgeschwindigkeitPKW();
double erwarteteDauer = 14.2125 / geschwindigkeit;
assertEquals(erwarteteDauer, reiseplanung.getDauerPKW(), 0.1);
}
assertEquals(1.95, result, 0.0); @Test
} public void testGetDauerFahrrad() {
double geschwindigkeit = user.getDurchschnittsgeschwindigkeitFahrrad();
double erwarteteDauer = 14.2125 / geschwindigkeit;
assertEquals(erwarteteDauer, reiseplanung.getDauerFahrrad(), 0.1);
}
public void testBerechneCO2Ausstoß() { @Test
double entfernung = 73.8; public void testGetCO2Ausstoß() {
double erwarteterCO2Ausstoß = 14.2125 * auto.getCO2AusstossProKm();
assertEquals(erwarteterCO2Ausstoß, reiseplanung.getCO2Ausstoß(), 0.1);
}
double result = reise.berechneCO2Ausstoß(entfernung, auto); @Test
public void testToString() {
assertEquals(12368.88, result, 0.0); 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