/******************************************************************** * File: Chapter 11 Debug.cpp * * General Instructions: Complete each step before proceeding to the * next. * * Debugging Exercise 1 * * 1) Make your own data file like Troy 12, with the next person on the * next line and save it to a directory you create on your drive. * 2) Under the Project menu, select Add Existing Item and * add the input file you just placed on your drive to your * current project. Make sure your Solution Explorer window * is visible. If not, you can display it by selecting Solution * Explorer (or Ctrl+Alt+L). * 3) Open the input file by simply double clicking the name of the * file in your Solution Explorer. * 4) Build and execute the program. * 5) Update the file paths below to correctly represent the path you * created. * 6) Rebuild and execute the program. * 7) Examine the code and the output and notice the use of * parallel arrays. * 8) Add the output file created via the execution of * your program to your Project. Execute your program again * and notice how Visual Studio has rewritten your output file * and asks if you would like to reload the file (select Yes). * 9) Examine the contents of both the input and the output file. * 10) Fix all the problems in your code that exist in relation to * the output. Verify that your output is appropriate for your input file. * 11) Build and execute your code until you have all errors * removed and all the output is correct. * * Debugging Exercise 2 * * 1) Replace the double slashes (\\) in the input file open statement * with only a single slash * (i.e., inFile.open("C:\TEMP\Chap_11_data.txt"). * 2) Build your code, noticing the impact of the invalid path you * created in the previous step. * 3) Replace the backslashes as they were. * 4) Change both the input and output filenames so they are * invalid. * 5) Update the file related error messages within the code * to also provide the specific name of the file that is having a * problem. * 6) Rebuild and execute your program to verify that your messages * are correct. * 7) Correct the path names. * 8) Build and execute your code and carefully check your * output on both the console and in the output file. * ********************************************************************/ #include #include // For the files!!!! #include // For manipulators & formatting options #include #include using std::cin; using std::cout; using std::endl; using std::setw; using std::ios; using std::string; using std::ifstream; using std::ofstream; using namespace std; const int EMPLOYEES = 50; const int MAX = 50; int ReadData(ifstream& inFile, ofstream& outFile, int pick[], int drop[], int passCount[], float distance[], float fare[], float toll[], float costPMile[], int counter, int people, int totalRecords, int paid, float totalFare[]); void WriteOutputFile(ofstream& outFile, int totalRecords, int people, int pick[], int drop[], int passCount[], float distance[], float fare[], float toll[], float totalFare[], float costPMile[], int counter, float paid); void PrintTotalsAndSummary(ofstream& outFile, int totalRecords, int people, int pick[], int drop[], int passCount[], float distance[], float fare[], float toll[], float totalFare[], float costPMile[], int counter, float paid); int main() { int pick[EMPLOYEES]; int drop[MAX]; int passCount[EMPLOYEES]; float distance[MAX]; float fare[EMPLOYEES]; float toll[MAX]; float totalFare[MAX] = { 0 }; float costPMile[MAX] = { 0 }; int record_counter(0); int people(0); int counter = 0; float paid = 0; string filename; ifstream inFile; // Notice how this automatically opens the file ofstream outFile("out.txt"); cout << "Please enter the input file name including extension: " << endl; cin >> filename; inFile.open(filename); if (inFile.is_open()) { record_counter = ReadData(inFile, outFile, pick, drop, passCount, distance, fare, toll, costPMile, counter, people, record_counter, paid, totalFare); inFile.close(); if (outFile.is_open()) { PrintTotalsAndSummary(outFile, record_counter, people, pick, drop, passCount, distance, fare, toll, totalFare, costPMile, counter, paid); WriteOutputFile(outFile, record_counter, people, pick, drop, passCount, distance, fare, toll, totalFare, costPMile, counter, paid); outFile.close(); } else { cout << "Trouble Opening File"; cout << "\n\n\t\t ** About to EXIT NOW! ** "; } } else { cout << "Trouble Opening File"; cout << "\n\n\t\t ** About to EXIT NOW! ** "; } return 0; } int ReadData(ifstream& inFile, ofstream& outFile, int pick[], int drop[], int passCount[], float distance[], float fare[], float toll[], float costPMile[], int counter, int people, int totalRecords, int paid, float totalFare[]) { inFile >> pick[counter] >> drop[counter] >> passCount[counter] >> distance[counter] >> fare[counter] >> toll[counter]; // Priming Read while (!inFile.eof()) { cout << setiosflags(ios::left) << setw(15) << pick[counter] << setw(15) << drop[counter] << setw(15) << passCount[counter] << setw(15) << distance[counter] << setw(15) << fare[counter] << setw(15) << toll[counter]; if (distance[counter] == 0) { costPMile[counter] = 0; } else { costPMile[counter] = (toll[counter] + fare[counter]) / distance[counter]; } cout << setw(15) << costPMile[counter] << endl; counter++; inFile >> pick[counter] >> drop[counter] >> passCount[counter] >> distance[counter] >> fare[counter] >> toll[counter]; } return counter; } void WriteOutputFile(ofstream& outFile, int totalRecords, int people, int pick[], int drop[], int passCount[], float distance[], float fare[], float toll[], float totalFare[], float costPMile[], int counter, float paid) { outFile << " Here is the Output File" << endl; for (int r = 0; r < totalRecords; r++) { outFile << setiosflags(ios::left) << setw(15) << pick[r] << setw(15) << drop[r] << setw(15) << passCount[r] << setw(15) << distance[r] << setw(15) << fare[r] << setw(15) << toll[r] << setw(15) << costPMile[r] << endl; } } void PrintTotalsAndSummary(ofstream& outFile, int totalRecords, int people, int pick[], int drop[], int passCount[], float distance[], float fare[], float toll[], float totalFare[], float costPMile[], int count, float paid) { for (int i = 0; i < totalRecords; i++) { people += passCount[i]; float temp = fare[i] + toll[i]; paid += temp; totalFare[i] = temp; if (distance == 0) { costPMile[i] = 0; } else { costPMile[i] = totalFare[i] / distance[i]; // cout << costPMile[i]; } } // To screen cout << "\n\n\t** Total Records: " << totalRecords << " **\n" << "\n\n\t** People Transported: " << people << " **\n" << "\n\n\t** Total Cost: " << paid << " **\n" << "\t\t The End \n"; // To file outFile << "\n\n\t** Total Records: " << totalRecords << " **\n" << "\n\n\t** People Transported: " << people << " **\n" << "\n\n\t** Total Cost: " << paid << " **\n" << "\t\t The End \n"; }