/* Jacob Wilson cst116 Lab 3 11/28/2022 */ ///////////////////////////// Pre Compiler Directives ///////////////////////////// #include //For printing to the screen #include //For the files #include //For manipulators & formatting options using std::cin; //Allows use of cin using std::cout; //Allows use of cout using std::endl; //Allows end line using std::setw; //Allows set width using std::ios; //Allows input/output stream commands using std::ifstream; //Allows input file stream using std::ofstream; //Allows output file stream const int MAX = 50; //Adds a constant int of 50, for the maximum number of records ///////////////////////////// Function Definitions ///////////////////////////// int ReadData(ifstream& inFile, ofstream& outFile, int pick[], int drop[], int psgr[], float dist[], float fare[], float toll[]); //Defines function that reads data from the input file void WriteOutputFile(ofstream& outFile, int pick[], int drop[], int psgr[], float dist[], float fare[], float toll[], int counter); //Defines function that prints the data from input to output file void PrintTotalsAndSummary(ofstream& out, int totalRecords, int psgr[], int num_psgr, float fare[], float toll[], float total_fare); //Defines function that prints total records to screen and output file int NumPsgr(int psgr[], int num_psgr, int totalRecords); //Defines function that calculates the number of passengers total float TotalPaid(float fare[], float toll[], float total_fare, int totalRecords); //Defines function that calculates the total paid ///////////////////////////// Main Function ///////////////////////////// int main() { int pick[MAX]; //Defines int array for pick up int drop[MAX]; //Defines int array for drop off int psgr[MAX]; //Defines int array for passengers float dist[MAX]; //Defines float array for distance float fare[MAX]; //Defines float array for fare float toll[MAX]; //Defines float array for toll int record_counter(0); //Defines an int that tracks the number of records taken int num_psgr = 0; //Defines variable for number of passengers float total_fare = 0.0; //Defines variable for the total fare ifstream inFile; //Adds an infile to be used later ofstream outFile; //Adds an outfile to be used later outFile.open("C:\\TEMP1\\lab3_Report.txt"); //Opens the designated output file char file = 'a'; //sets variable to change input file cout << "Please choose a file to open. Press 's' for small.txt, or press 'l' for large.txt: "; //Prompts user for input file choice cin >> file; //Reads in users choice for input file cout << endl; //Prints new line switch (file) { //switch statement for variable file case 's': //case when user inputs s for small inFile.open("C:\\TEMP1\\small.txt"); //open small.txt break; //end case case 'l': //case when user inputs l for large inFile.open("C:\\TEMP1\\large.txt"); //open large.txt break; //end case } if (inFile.is_open()) //If the infile is open { record_counter = ReadData(inFile, outFile, pick, drop, psgr, dist, fare, toll); //Do the ReadData function and set it as new variable record_counter inFile.close(); //Close the input file if (outFile.is_open()) //If the output file is open { WriteOutputFile(outFile, pick, drop, psgr, dist, fare, toll, record_counter); //Do the WriteOutptFile function PrintTotalsAndSummary(outFile, record_counter, psgr, num_psgr, fare, toll, total_fare); //Do the PrintTotalsAndSummary function outFile.close(); //Close the output file } else //Otherwise, do this { cout << "Trouble Opening Output File"; //Print text cout << "\n\n\t\t ** About to EXIT NOW! ** "; //Print text } } else //Otherwise, do this { cout << "Trouble Opening Input File"; //Print text cout << "\n\n\t\t ** About to EXIT NOW! ** "; //Print text } return 0; //Return empty value and end stream } ///////////////////////////// Read Data from Input File Function ///////////////////////////// int ReadData(ifstream& inFile, ofstream& outFile, int pick[], int drop[], int psgr[], float dist[], float fare[], float toll[]) { int counter = 0; //Set variable counter inFile >> pick[counter] >> drop[counter] >> psgr[counter] >> dist[counter] >> fare[counter] >> toll[counter]; //Priming Read cout << setiosflags(ios::left) << setw(5) << "Pick" << resetiosflags(ios::left) << setw(10) << "Drop" << resetiosflags(ios::left) << setw(12) << "Psgr." << resetiosflags(ios::left) << setw(14) << "Dist." << resetiosflags(ios::left) << setw(14) << "Fare" << resetiosflags(ios::left) << setw(14) << "Toll" << "\n\n"; //Print headers to the screen while (!inFile.eof()) //While not the end of the in file { float total_fare = fare[counter] + toll[counter]; //Defines float total_fare float cost_per_mile = fare[counter] / dist[counter]; //Defines float cost_per_mile cout << setiosflags(ios::left) << setw(5) << pick[counter] << resetiosflags(ios::left) << setw(10) << drop[counter] << resetiosflags(ios::left) << setw(12) << psgr[counter] << resetiosflags(ios::left) << setw(14) << dist[counter] << resetiosflags(ios::left) << setw(14) << fare[counter] << resetiosflags(ios::left) << setw(14) << toll[counter] << endl; //Print infile data as a table cout << "Total fare: " << total_fare << "\n"; //Prints total_fare to the screen if (dist[counter] != 0) { //If distance is not 0 cout << "Cost per mile: " << cost_per_mile << "\n\n"; //Print cost per mile } else { //Otherwise cout << "Cost per mile: 0\n"; //Print the cost per mile as 0 } counter++; //Add 1 to counter inFile >> pick[counter] >> drop[counter] >> psgr[counter] >> dist[counter] >> fare[counter] >> toll[counter]; //Sets all of the arrays values to the new counter value } return counter; //Return variable counter } ///////////////////////////// Write Output File Function ///////////////////////////// void WriteOutputFile(ofstream& outFile, int pick[], int drop[], int psgr[], float dist[], float fare[], float toll[], int counter) { outFile << " Here is the Output File" << endl; //Print text to the out file outFile << setiosflags(ios::left) << setw(5) << "Pick" << resetiosflags(ios::left) << setw(10) << "Drop" << resetiosflags(ios::left) << setw(12) << "Psgr." << resetiosflags(ios::left) << setw(14) << "Dist." << resetiosflags(ios::left) << setw(14) << "Fare" << resetiosflags(ios::left) << setw(14) << "Toll" << "\n\n"; //Print headers to the out file for (int r = 0; r <= counter - 1; r++) //Loop while there is still data in the input file { float total_fare = fare[r] + toll[r]; //Adds variable total_fare float cost_per_mile = fare[r] / dist[r]; //Define float for cost per mile outFile << setiosflags(ios::left) << setw(5) << pick[r] << resetiosflags(ios::left) << setw(10) << drop[r] << resetiosflags(ios::left) << setw(12) << psgr[r] << resetiosflags(ios::left) << setw(14) << dist[r] << resetiosflags(ios::left) << setw(14) << fare[r] << resetiosflags(ios::left) << setw(14) << toll[r] << endl; //Print in file data as a table in the out file outFile << "Total fare: " << total_fare << "\n"; //Prints total_fare to the out file if (dist[r] != 0) { //If the value of array dist is not 0 outFile << "Cost per mile: " << cost_per_mile << "\n\n"; //Print cost per mile to out file } else { //Otherwise outFile << "Cost per mile: 0\n\n"; //Print cost per mile as 0 (can't divide by 0) } } } ///////////////////////////// People Transported Function ///////////////////////////// int NumPsgr(int psgr[], int num_psgr, int totalRecords) { for (int i = 0; i < totalRecords; i++) //Do for the number of records { num_psgr += psgr[i]; //Take number of passengers and add the value in psgr array } return num_psgr; //Return number of passengers } ///////////////////////////// Total Paid Function ///////////////////////////// float TotalPaid(float fare[], float toll[], float total_fare, int totalRecords) { for (int j = 0; j < totalRecords; j++) //Do for the number of records { total_fare = total_fare + (fare[j] + toll[j]); //Take number of passengers and add the value in psgr array } return total_fare; //Return number of passengers } ///////////////////////////// Print Totals and Summary Function ///////////////////////////// void PrintTotalsAndSummary(ofstream& outFile, int totalRecords, int psgr[], int num_psgr, float fare[], float toll[], float total_fare) { // To screen cout << "\n\t** People Transported: " << NumPsgr(psgr, num_psgr, totalRecords) << " **"; //Prints the total people transported to the screen cout << "\n\t** Total Paid: " << TotalPaid(fare, toll, total_fare, totalRecords) << " **"; //Prints the total paid (all fares and tolls) to the screen cout << "\n\t** Average Cost Per Person: " << TotalPaid(fare, toll, total_fare, totalRecords) / NumPsgr(psgr, num_psgr, totalRecords) << " **\n" << "\t\t The End \n"; //Prints the average cost per person to the screen // To file outFile << "\n\t** People Transported: " << NumPsgr(psgr, num_psgr, totalRecords) << " **"; //Prints the total people transported to the out file outFile << "\n\t** Total Paid: " << TotalPaid(fare, toll, total_fare, totalRecords) << " **"; //Prints the total paid (all fares and tolls) to the out file outFile << "\n\t** Average Cost Per Person: " << TotalPaid(fare, toll, total_fare, totalRecords) / NumPsgr(psgr, num_psgr, totalRecords) << " **\n" << "\t\t The End \n"; //Prints the average cost per person to the out file }