Basically, i'm working on some coursework which requires me to create a flight booking system that allows for up to two stops e.g. London to Paris to Barcelona to Hamburg. I managed to create a version where 1 stop works e.g. London to Paris to Barcelona but i cannot get this one to work. I have included my code below, whenever i call this function and pass it any two airports, it does not output anything. I appreciate the code below is lengthy but a lot of it is repetitive. I've also probably gone about programming this question the completely wrong way. If you have any better ideas on how to approach this, please do share.
Many thanks.
void searchAllFlights(string origin, string destination)
{
ifstream checkNumOfLines("flights.txt");
int numOfLines = 0;
for(string line; getline(checkNumOfLines, line);){
numOfLines++;
}
int lengthOfLines[10] = {0,0,0,0,0,0,0,0,0,0};
checkNumOfLines.clear();
checkNumOfLines.seekg(0, ios::beg);
int index = 0;
for(string line; getline(checkNumOfLines, line);){
lengthOfLines[index] = line.length();
index++;
}
int filePointers[11] = {0, lengthOfLines[0], lengthOfLines[0] + lengthOfLines[1], lengthOfLines[0] + lengthOfLines[1] + lengthOfLines[2],
lengthOfLines[0] + lengthOfLines[1] + lengthOfLines[2] + lengthOfLines[3], lengthOfLines[0] + lengthOfLines[1] + lengthOfLines[2] +
lengthOfLines[3] + lengthOfLines[4], lengthOfLines[0] + lengthOfLines[1] + lengthOfLines[2] +
lengthOfLines[3] + lengthOfLines[4] + lengthOfLines[5], lengthOfLines[0] + lengthOfLines[1] + lengthOfLines[2] +
lengthOfLines[3] + lengthOfLines[4] + lengthOfLines[5] + lengthOfLines[6], lengthOfLines[0] + lengthOfLines[1] + lengthOfLines[2] +
lengthOfLines[3] + lengthOfLines[4] + lengthOfLines[5] + lengthOfLines[6] + lengthOfLines[7], lengthOfLines[0] + lengthOfLines[1]
+ lengthOfLines[2] + lengthOfLines[3] + lengthOfLines[4] + lengthOfLines[5] + lengthOfLines[6] + lengthOfLines[7] + lengthOfLines[8],
lengthOfLines[0] + lengthOfLines[1] + lengthOfLines[2] + lengthOfLines[3] + lengthOfLines[4] + lengthOfLines[5] + lengthOfLines[6] +
lengthOfLines[7] + lengthOfLines[8] + lengthOfLines[9]};
ifstream flights("flights.txt");
startingDeparturePoint = origin;
endDestinationPoint = destination;
totalFlightsPrice = 0;
totalFlightDuration = 0;
string originFromFile;
string destFromFile;
string airline;
int price;;
int flightDuration;
cout << "No. |" << "Origin |" << "Destination |" << "Airline |" << "Price |" << "Duration |" << endl;
cout << "----------------------------------------------------------------------------------------" << endl;
matches = 0;
int currentLine = 0;
while(flights >> originFromFile >> destFromFile >> airline >> price >> flightDuration)
{
//flights.seekg(setfilepos, ios::beg);
int numberOfChars = originFromFile.length() + destFromFile.length() + airline.length();
if(originFromFile == startingDeparturePoint && destFromFile == endDestinationPoint)
{
matches++;
directFlight(originFromFile, destFromFile, airline, price, flightDuration);
}
else if(originFromFile != startingDeparturePoint && destFromFile == endDestinationPoint)
{
matches++;
string stopoverLast = originFromFile;
string airlineLast = airline;
int priceLast = price;
int flightDurationLast = flightDuration;
int currentIndex = firstOrigins.size() + 1;
secondOrigins[currentIndex] = stopoverLast;
secondDests[currentIndex] = destFromFile;
secondAirlines[currentIndex] = airlineLast;
secondPrices[currentIndex] = priceLast;
secondFlightDurations[currentIndex] = flightDurationLast;
ifstream flights2("flights.txt");
string originFromFile2;
string destFromFile2;
string airlineFromFile2;
int priceFromFile2;
int flightDurationFromFile2;
while(flights2 >> originFromFile2 >> destFromFile2 >> airlineFromFile2 >> priceFromFile2 >> flightDurationFromFile2){//1q
if(destFromFile2 == stopoverLast){
firstOrigins.push_back(originFromFile2);
firstDests.push_back(destFromFile2);
firstAirlines.push_back(airlineFromFile2);
firstPrices.push_back(priceFromFile2);
firstFlightDurations.push_back(flightDurationFromFile2);
if(originFromFile2 != startingDeparturePoint){
thirdOrigins[currentIndex] = secondOrigins[currentIndex];
thirdDests[currentIndex] = secondOrigins[currentIndex];
thirdAirlines[currentIndex] = secondOrigins[currentIndex];
thirdPrices[currentIndex] = secondPrices[currentIndex];
thirdFlightDurations[currentIndex] = secondFlightDurations[currentIndex];
secondOrigins[currentIndex] = firstOrigins[currentIndex];
secondDests[currentIndex] = firstOrigins[currentIndex];
secondAirlines[currentIndex] = firstOrigins[currentIndex];
secondPrices[currentIndex] = firstPrices[currentIndex];
secondFlightDurations[currentIndex] = firstFlightDurations[currentIndex];
ifstream flights3("flights.txt");
string originFromFile3;
string destFromFile3;
string airlineFromFile3;
int priceFromFile3;
int flightDurationFromFile3;
while(flights3 >> originFromFile3 >> destFromFile3 >> airlineFromFile3 >> priceFromFile3 >> flightDurationFromFile3){
if(originFromFile3 == startingDeparturePoint && destFromFile3 == secondOrigins[currentIndex]){
firstOrigins[currentIndex] = originFromFile3;
firstDests[currentIndex] = destFromFile3;
firstAirlines[currentIndex] = airlineFromFile3;
firstPrices[currentIndex] = priceFromFile3;
firstFlightDurations[currentIndex] = flightDurationFromFile3;
while(flights3 >> originFromFile3 >> destFromFile3 >> airlineFromFile3 >> priceFromFile3 >> flightDurationFromFile3){
if(originFromFile3 == startingDeparturePoint && destFromFile3 == secondOrigins[currentIndex]){
firstOrigins.push_back(firstOrigins[currentIndex]);
firstDests.push_back(firstDests[currentIndex]);
firstAirlines.push_back(firstAirlines[currentIndex]);
firstPrices.push_back(firstPrices[currentIndex]);
firstFlightDurations.push_back(firstFlightDurations[currentIndex]);
secondOrigins[currentIndex + 1] = secondOrigins[currentIndex];
secondDests[currentIndex + 1] = secondDests[currentIndex];
secondAirlines[currentIndex + 1] = secondAirlines[currentIndex];
secondPrices[currentIndex + 1] = secondPrices[currentIndex];
secondFlightDurations[currentIndex + 1] = secondFlightDurations[currentIndex];
thirdOrigins[currentIndex + 1] = originFromFile3;
thirdDests[currentIndex + 1] = destFromFile3;
thirdAirlines[currentIndex + 1] = airlineFromFile3;
thirdPrices[currentIndex + 1] = priceFromFile3;
thirdFlightDurations[currentIndex + 1] = flightDurationFromFile3;
}
}
}
}
}
else{
currentIndex++;
while(flights >> originFromFile >> destFromFile >> airline >> price >> flightDuration){
if(originFromFile != startingDeparturePoint && destFromFile == endDestinationPoint){
matches++;
stopoverLast = originFromFile;
airlineLast = airline;
priceLast = price;
flightDurationLast = flightDuration;
secondOrigins[currentIndex] = stopoverLast;
secondDests[currentIndex] = destFromFile;
secondAirlines[currentIndex] = airlineLast;
secondPrices[currentIndex] = priceLast;
secondFlightDurations[currentIndex] = flightDurationLast;
firstOrigins.push_back(originFromFile2);
firstDests.push_back(destFromFile2);
firstAirlines.push_back(airlineFromFile2);
firstPrices.push_back(priceFromFile2);
firstFlightDurations.push_back(flightDurationFromFile2);
while(flights2 >> originFromFile2 >> destFromFile2 >> airlineFromFile2 >> priceFromFile2 >> flightDurationFromFile2){
currentIndex++;
secondOrigins[currentIndex] = stopoverLast;
secondDests[currentIndex] = destFromFile;
secondAirlines[currentIndex] = airlineLast;
secondPrices[currentIndex] = priceLast;
secondFlightDurations[currentIndex] = flightDurationLast;
firstOrigins.push_back(originFromFile2);
firstDests.push_back(destFromFile2);
firstAirlines.push_back(airlineFromFile2);
firstPrices.push_back(priceFromFile2);
firstFlightDurations.push_back(flightDurationFromFile2);
}
}
}
}
}
}
}
break;
}
// loop over vectors and print out results, put in conditional statements to
//check if 2nd and 3rd flights exist, if they do add the "-----" after
for(int i = 0; i < firstOrigins.size(); i++){
int mins = firstFlightDurations[i];
int hours = 0;
while(mins >= 60){
hours++;
mins -= 60;
}
cout << "No. |" << "Origin |" << "Destination |" << "Airline |" << "Price |"
<< "Duration " << endl;
if(firstOrigins[i] != "-"){
cout << left << setw(4) << setfill(' ') << 1 << right << "|";
cout << left << setw(7) << setfill(' ') << firstOrigins[i] << right << "|";
cout << left << setw(12) << setfill(' ') << firstDests[i] << right << "|";
cout << left << setw(20) << setfill(' ') << firstAirlines[i] << right << "|";
cout << left << "\x9c" << setw(13) << setfill(' ') << left << firstPrices[i] << right << "|";
cout << left << hours << "hr(s) " << mins << "min(s)" << setw(11) << setfill(' ') << right << "|" << endl;
if(secondOrigins[i] != "-"){
int mins2 = secondFlightDurations[i];
int hours2 = 0;
while(mins2 >= 60){
hours2++;
mins2 -= 60;
}
totalFlightsPrice = firstPrices[i] + secondPrices[i];
totalFlightDuration = firstFlightDurations[i] + secondFlightDurations[i] + thirdFlightDurations[i];
cout << left << setw(4) << setfill(' ') << 1 << right << "|";
cout << left << setw(7) << setfill(' ') << secondOrigins[i] << right << "|";
cout << left << setw(12) << setfill(' ') << secondDests[i] << right << "|";
cout << left << setw(20) << setfill(' ') << secondAirlines[i] << right << "|";
cout << left << "\x9c" << setw(13) << setfill(' ') << left << secondPrices[i] << right << "|";
cout << left << hours2 << "hr(s) " << mins2 << "min(s)" << setw(11) << setfill(' ') << right << "|" << endl;
if(thirdOrigins[i] != "-"){
int mins3 = secondFlightDurations[i];
int hours3 = 0;
while(mins3 >= 60){
hours3++;
mins3 -= 60;
}
totalFlightsPrice = firstPrices[i] + secondPrices[i] + thirdPrices[i];
totalFlightDuration = firstFlightDurations[i] + secondFlightDurations[i] + thirdFlightDurations[i];
cout << left << setw(4) << setfill(' ') << 1 << right << "|";
cout << left << setw(7) << setfill(' ') << thirdOrigins[i] << right << "|";
cout << left << setw(12) << setfill(' ') << thirdDests[i] << right << "|";
cout << left << setw(20) << setfill(' ') << thirdAirlines[i] << right << "|";
cout << left << "\x9c" << setw(13) << setfill(' ') << left << thirdPrices[i] << right << "|";
cout << left << hours3 << "hr(s) " << mins3 << "min(s)" << setw(11) << setfill(' ') << right << "|" << endl;
int totalmins = totalFlightsPrice;
int totalhours = 0;
while(totalmins >= 60){
totalhours++;
totalmins -= 60;
}
cout << left << setw(4) << setfill(' ') << " " << right << "|";
cout << left << setw(7) << setfill(' ') << " " << right << "|";
cout << left << setw(12) << setfill(' ') << " " << right << "|";
cout << left << setw(20) << setfill(' ') << " " << right << "|";
cout << left << setw(13) << setfill(' ') << "Total = \x9c" << totalFlightsPrice << right << "|";
cout << left << setw(6) << setfill(' ') << totalhours << "hr(s) " << totalmins << "min(s)"
<< setw(11) << setfill(' ') << right << "|" << endl;
cout << "----------------------------------------------------------------------------------------" << endl;
}
else{
int totalmins = totalFlightDuration;
int totalhours = 0;
while(totalmins >= 60){
totalhours++;
totalmins -= 60;
}
cout << left << setw(4) << setfill(' ') << " " << right << "|";
cout << left << setw(7) << setfill(' ') << " " << right << "|";
cout << left << setw(12) << setfill(' ') << " " << right << "|";
cout << left << setw(20) << setfill(' ') << " " << right << "|";
cout << left << setw(13) << setfill(' ') << "Total = \x9c" << totalFlightsPrice << right << "|";
cout << left << setw(6) << setfill(' ') << totalhours << "hr(s) " << totalmins << "min(s)"
<< setw(11) << setfill(' ') << right << "|" << endl;
cout << "----------------------------------------------------------------------------------------" << endl;
}
}
else{
cout << "----------------------------------------------------------------------------------------" << endl;
}
}
else{
cout << "No possible flight paths between the airports inputted.";
}
currentLine++;
if(filePointers[currentLine] != filePointers[currentLine - 1]){
flights.clear();
flights.seekg(filePointers[currentLine],ios::beg);
}
}
EDIT: You can also ignore the checkNumOfLines file, and the filePointers and lengthOfLines arrays. I thought i had to reset the file pointer for it to print out correctly but nope. Just realised it does output one possible flight path which is if i input the very first origin and destination from the flight path i am reading in to the program.
Aucun commentaire:
Enregistrer un commentaire