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;
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<Ort> 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<Ort> zufallsorteAuswaehlen(List<Ort> 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<Ort> ladeAlleOrte() {
// 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;
// }
private List<Ort> ladeAlleOrte() {
List<Ort> 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;
}
}

View File

@ -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);

View File

@ -1,6 +1,7 @@
package domain;
import java.lang.Math;
public class Reiseplanung {
private Ort standort;
@ -11,16 +12,12 @@ public class Reiseplanung {
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) {
@ -30,21 +27,21 @@ public class Reiseplanung {
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() {
@ -52,25 +49,13 @@ public class Reiseplanung {
}
@Override
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() {
return dauerPKW;
}

View File

@ -4,28 +4,40 @@ 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<Ort> alleOrte;
public ReiseFassade(User user) {
alleOrte = ladeAlleOrte();
this.kurztripEmpfehlung = new KurztripEmpfehlung();
alleOrte = ladeAlleOrte();
}
public void setHeimatortFromUser(User user) {
Ort heimatort = user.getHeimatstandort();
this.kurztripEmpfehlung.setHeimatort(heimatort);
}
public List<Ort> ladeAlleOrte() {
List<Ort> alleOrte = new ArrayList<>();
@ -55,83 +67,78 @@ 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<Ort> trefferliste = new ArrayList<>();
// String ausgabe = " ";
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]);
}
//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;
}
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();
@ -151,13 +158,12 @@ private KurztripEmpfehlung kurztripEmpfehlung;
return reiseplanung.getCO2Ausstoß();
}
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 User registrieren(String username, String password, int plz, String ortName, String autoName,
double co2AusstossProKm, double durchschnittsgeschwindigkeitPKW,
double durchschnittsgeschwindigkeitFahrrad) {

View File

@ -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,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");
String input = scanner.nextLine();
if(input == "beenden") {
return;
}
int eingabe = Integer.parseInt(input);
reiseFacade.ortAnzeige(eingabe, trefferliste);
/*
* List<Ort> 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); } }
*/
}
private void sucheOrt() {
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();
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");
*/
// Lade alle Orte, um den Ort mit den GPS-Koordinaten zu erhalten
List<Ort> alleOrte = reiseFacade.ladeAlleOrte();
Ort zielort = null;
for (Ort ort : alleOrte) {
if (ort.getPLZ() == zielPlz && ort.getName().equalsIgnoreCase(zielOrtName)) {
zielort = ort;
break;
}
}
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) {
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): ");
String transportmittel = scanner.nextLine().trim().toLowerCase();
List<Ort> empfohleneOrte = null;
switch (transportmittel) {
case "fahrrad":
List<Ort> fahrradOrte = reiseFacade.zufallsorteFahrrad(10000);
if (fahrradOrte.isEmpty()) {
empfohleneOrte = reiseFacade.zufallsorteFahrrad(10000);
//List<Ort> 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<Ort> autoOrte = reiseFacade.zufallsortePKW(150);
if (autoOrte.isEmpty()) {
empfohleneOrte = reiseFacade.zufallsortePKW(150);
//List<Ort> 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) {
new UserInterface();

View File

@ -1,40 +1,80 @@
package domain;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
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);
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() {
@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);
}
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
public void testBerechneDauer() {
double entfernung = 136.5;
double geschwindigkeit = 70;
@Test
public void testGetEntfernung() {
assertEquals(14.2125, reiseplanung.getEntfernung(), 0.1);
}
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ß() {
double entfernung = 73.8;
@Test
public void testGetCO2Ausstoß() {
double erwarteterCO2Ausstoß = 14.2125 * auto.getCO2AusstossProKm();
assertEquals(erwarteterCO2Ausstoß, reiseplanung.getCO2Ausstoß(), 0.1);
}
double result = reise.berechneCO2Ausstoß(entfernung, auto);
assertEquals(12368.88, result, 0.0);
}
@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());
// Ü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

View File

@ -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