Skip to content
This repository has been archived by the owner on Jan 24, 2024. It is now read-only.

Commit

Permalink
Fixed menu and added sorts
Browse files Browse the repository at this point in the history
  • Loading branch information
DiogoSV7 committed Dec 28, 2023
2 parents e4e8736 + a36bdf4 commit 2bbab07
Show file tree
Hide file tree
Showing 13 changed files with 730 additions and 744 deletions.
6 changes: 6 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ add_executable(feup_aed2 main.cpp
include/Flight.h
src/Program.cpp
include/Program.h
src/FlightPath.cpp
include/FlightPath.h
src/utils.cpp
include/utils.h
)

add_subdirectory(docs)
Expand All @@ -47,6 +51,8 @@ add_executable(tests test/tests.cpp
include/Flight.h
src/Program.cpp
include/Program.h
src/FlightPath.cpp
include/FlightPath.h
)
target_link_libraries(
tests
Expand Down
31 changes: 17 additions & 14 deletions include/Dataset.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#include <unordered_set>
#include "City.h"
#include "FlightPath.h"

typedef Graph<AirportInfo, FlightInfo, AirportInfoHash> Network;
typedef VertexSet<AirportInfo, FlightInfo, AirportInfoHash> AirportSet;
Expand Down Expand Up @@ -36,20 +37,20 @@ class Dataset {
CityRef getCity(const std::string& name, const std::string& countryName) const;
AirportRef getAirport(const std::string& code) const;
AirlineRef getAirline(const std::string& code) const;
std::vector<AirlineRef> getAirlinesFromCountry(const Country& country);
std::vector<CityRef> getCitiesFromCountry(const Country& country);
std::vector<AirportRef> getAirportsFromCity(const City& city);
std::vector<CountryRef> getCountriesAirportFliesTo(const Airport& airport);
std::vector<CountryRef> getCountriesCityFliesTo(const City& city);
std::vector<Flight> searchFlightsFromAirport(std::string airPortCode);
float numberOfFlightsByCity();
float numberOfFlightsByAirline();
std::vector<AirportInfo> searchDestinationsFromAirport(std::string airPortCode);
std::vector<AirportRef> searchTopNAirPortsWithGreatestTraffic(int n);
std::vector<AirportRef> getReachableAirportsfromAirport(AirportRef airport, int x);
std::vector<CityRef> getReachableCitiesfromAirport(AirportRef airport, int x);
std::vector<CountryRef> getReachableCountriesfromAirport(AirportRef airport, int x);

std::vector<AirlineRef> getAirlinesFromCountry(const Country& country) const;
std::vector<CityRef> getCitiesFromCountry(const Country& country) const;
std::vector<CountryRef> getCountriesAirportFliesTo(const Airport& airport) const;
std::vector<CountryRef> getCountriesCityFliesTo(const City& city) const;
std::vector<Flight> searchFlightsFromAirport(std::string airportCode) const;
float numberOfFlightsByCity() const;
float numberOfFlightsByAirline() const;
std::vector<AirportRef> searchDestinationsFromAirport(const std::string& airportCode) const;
std::vector<AirportRef> searchTopNAirPortsWithGreatestTraffic(int n) const;
std::vector<AirportRef> getReachableAirportsfromAirport(AirportRef airport, int x) const;
std::vector<CityRef> getReachableCitiesfromAirport(AirportRef airport, int x) const;
std::vector<CountryRef> getReachableCountriesfromAirport(AirportRef airport, int x) const;
FlightPath getBestFlightPath(const AirportRef &src, const AirportRef &dest) const;
std::vector<FlightPath> getBestFlightPaths(const std::vector<AirportRef> &srcs, const std::vector<AirportRef> &dests) const;

private:
CountrySet countrySet_;
Expand All @@ -59,6 +60,8 @@ class Dataset {

CityRef getOrInsertCity(const std::string& name, const std::string& country);
CountryRef getOrInsertCountry(const std::string& name);

static double calculateDistance(double lat1, double lon1, double lat2, double lon2);
};


Expand Down
3 changes: 1 addition & 2 deletions include/Flight.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,13 @@ class AirportInfo;
class FlightInfo {
public:
explicit FlightInfo(AirlineRef airline, const AirportInfo& src, const AirportInfo& dest);
explicit FlightInfo(AirlineRef airline, double distance);
const AirlineRef &getAirline() const;
double getDistance() const;

private:
AirlineRef airline_;
double distance_;

static double calculateDistance(const AirportInfo& src, const AirportInfo& dest);
};

typedef Edge<AirportInfo, FlightInfo> Flight;
Expand Down
26 changes: 26 additions & 0 deletions include/FlightPath.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#ifndef FEUP_AED2_FLIGHTPATH_H
#define FEUP_AED2_FLIGHTPATH_H


#include <vector>
#include "Airport.h"

class FlightPath {
public:
FlightPath();

FlightPath(const std::vector<AirportRef> &airports, double distance);

const std::vector<AirportRef> &getAirports() const;
std::vector<AirportRef> &getAirports();
double getDistance() const;
void setDistance(double distance);
int getFlights() const;

private:
std::vector<AirportRef> airports_;
double distance_;
};


#endif //FEUP_AED2_FLIGHTPATH_H
13 changes: 13 additions & 0 deletions include/Graph.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ class Vertex {
void setNum(int num);
int getLow() const;
void setLow(int low);
VertexRef<VertexInfo, EdgeInfo> getParent();
void setParent(VertexRef<VertexInfo, EdgeInfo> parent);
const std::vector<Edge<VertexInfo, EdgeInfo>> &getAdj() const;
void addEdge(VertexRef<VertexInfo, EdgeInfo> dest, const EdgeInfo &info);

Expand All @@ -55,6 +57,7 @@ class Vertex {
int indegree_;
int num_;
int low_;
VertexRef<VertexInfo, EdgeInfo> parent_;
};


Expand Down Expand Up @@ -168,6 +171,16 @@ void Vertex<VertexInfo, EdgeInfo>::setLow(int low) {
low_ = low;
}

template<class VertexInfo, class EdgeInfo>
VertexRef<VertexInfo, EdgeInfo> Vertex<VertexInfo, EdgeInfo>::getParent() {
return parent_;
}

template<class VertexInfo, class EdgeInfo>
void Vertex<VertexInfo, EdgeInfo>::setParent(VertexRef<VertexInfo, EdgeInfo> parent) {
parent_ = parent;
}

template<class VertexInfo, class EdgeInfo>
const std::vector<Edge<VertexInfo, EdgeInfo>> &Vertex<VertexInfo, EdgeInfo>::getAdj() const {
return adj_;
Expand Down
53 changes: 31 additions & 22 deletions include/Program.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,22 @@ class Program {
public:
Program();

void launch();
void displayAllCountries();
void displayAllAirports();
void displayAllAirlines();
void displayAirlinesByCountry();
void displayCitiesByCountry();
void displayAirportsByCity();
void displayFlightsFromAirport();
void displayCountriesFlyingToAirport();
void displayCountriesFlyingToCity();
void launch() const;

private:
Dataset dataset_;
void displayMainMenu();
void searchMenu();
void statisticsMenu();
void sortAirportMenu();
void displayMainMenu() const;
void searchMenu() const;
void statisticsMenu() const;
void sortAirportsMenu() const;
void sortAirlinesMenu() const;
void sortAirports(std::vector<AirportRef>& airports, int sortOption) const;
void sortAirlines(std::vector<AirlineRef>& airlines, int sortOption) const;
void sortCountries(std::vector<CountryRef> countries) const;
void sortCities(std::vector<CityRef> cities) const;
void chooseBestFlight() const;
std::vector<AirportRef> chooseAirportsForBestFlight() const;
static void displayBestFlight(const std::vector<FlightPath> &paths);
static int receiveOption(int max);
CountryRef receiveCountry() const;
CityRef receiveCity() const;
Expand All @@ -41,15 +40,25 @@ class Program {
static void clearScreen();
static void leave();

void displayDestinationsFromAirport();
void displayDestinationsFromAirport() const;
void displayReachableDestinationsFromAirportInNStops() const;
void displayTopNAirportsWithGreatestTraffic() const;
void displayAirportsEssentialToNetworkCirculation() const;
void displayAllCountries() const;
void displayAllAirports() const;
void displayAllAirlines() const;
void displayAirlinesByCountry() const;
void displayCitiesByCountry() const;
void displayAirportsByCity() const;
void displayFlightsFromAirport() const;
void displayCountriesFlyingToAirport() const;
void displayCountriesFlyingToCity() const;

void displayReachableDestinationsFromAirportInNStops();

void displayMaximumTrip();

void displayTopNAirportsWithGreatestTraffic();

void displayAirportsEssentialToNetworkCirculation();
void displayCountries(const std::vector<CountryRef> &countries) const;
void displayCities(const std::vector<CityRef> &cities) const;
void displayAirlines(const std::vector<AirlineRef> &airlines) const;
void displayAirports(const std::vector<AirportRef> &airports) const;
void displayFlights(const std::vector<Flight> &flights) const;
};


Expand Down
18 changes: 18 additions & 0 deletions include/utils.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#ifndef FEUP_AED2_UTILS_H
#define FEUP_AED2_UTILS_H
#include <vector>
#include "Airline.h"

class utils;

void sortAirlinesByName(std::vector<AirlineRef>& airlines);
void sortAirlinesByCode(std::vector<AirlineRef>& airlines);
void sortAirlinesByCountry(std::vector<AirlineRef>& airlines);

void sortAirportsByName(std::vector<AirportRef>& airports);
void sortAirportsByCode(std::vector<AirportRef>& airports);
void sortAirportsByCountry(std::vector<AirportRef>& airports);
void sortAirportsByCity(std::vector<AirportRef>& airports);


#endif //FEUP_AED2_UTILS_H
Loading

0 comments on commit 2bbab07

Please sign in to comment.