#include #include #include #include // For 13b #include // For 13d #include // For 13c and 13d #include // For 13d using namespace std; // 13a - 11.7 Exercises /* // #5 a: if (inFile.is_open()) b: for (int i = 0; i < RECORDS; i++) { used = i; for (int j = 0; j < DATA; j++) { getline(inFile, records[i][j], ' '); cout << records[i][j] << ' '; } if (inFile.eof()) break; } // Note: RECORDS is a constant that marks the maximum amount of records DATA is a constant that marks the number of entries per record c: inFile.close(); // #6 a: false b: true c: true d: true e: true */ // 13b - 11.9 Learn by Doing Exercises /* const int NUMS = 100; const int DIGIT = 12; void enter_nums(int[], int&); void sort_nums(int[], int); void median(int[], int); int main() { int data[NUMS]; int nums = 0; enter_nums(data, nums); sort_nums(data, nums); median(data, nums); } void enter_nums(int data[], int& nums) { char input[DIGIT]; char exit[DIGIT] = "exit"; int temp; cout << "Input numbers of at most 10 digits separated by a newline.\n" << "Enter \"Exit\" to exit\n\n"; for (int i = 0; i < NUMS; i++) { nums = i; cin.getline(input, DIGIT - 1, '\n'); _strlwr_s(input); if (strcmp(input, exit) == 0) { cout << "Exiting input\n\n"; return; } temp = atoi(input); data[i] = temp; } cout << "Max digits reached.\n" << "Exiting input\n\n"; return; } void sort_nums(int data[], int nums) { bool swapped; int temp; for (int i = 0; i < nums - 1; i++) { swapped = false; for (int j = 0; j < nums - 1; j++) { if (data[j] > data[j + 1]) { temp = data[j + 1]; data[j + 1] = data[j]; data[j] = temp; swapped = true; } } if (swapped == false) break; } } void median(int data[], int nums) { float med; int temp = nums; if (temp % 2 == 1) { temp--; temp /= 2; med = data[temp]; } else { temp /= 2; med = data[temp]; med += data[temp + 1]; med /= 2; } cout << "The median is " << med << endl; } */ // 13c - 11.13 Debugging Exercises /* // 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 // Just used the same paths as they followed what I was doing // 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. // Removed #includes and put them at top of file using namespace std; // consolodated all the std:: statements const int EMPLOYEES = 20; const int MAX = 21; int ReadData(ifstream& inFile, ofstream& outFile, char name[][MAX], int age[]); void WriteOutputFile(ofstream& outFile, char name[][MAX], int age[], int counter); void PrintTotalsAndSummary(ofstream& out, int totalRecords); int main() { char name[EMPLOYEES][MAX]; int age[EMPLOYEES]; int record_counter(0); ifstream inFile; // Notice how this automatically opens the file ofstream outFile("C:\\TEMP\\Chap_11_Report.txt"); inFile.open("C:\\TEMP\\Chap_11_data.txt"); if (inFile.is_open()) { record_counter = ReadData(inFile, outFile, name, age); inFile.close(); if (outFile.is_open()) { WriteOutputFile(outFile, name, age, record_counter); PrintTotalsAndSummary(outFile, record_counter); outFile.close(); } else { cout << "Trouble Opening File Chap_11_Report.txt"; // Changed added file name cout << "\n\n\t\t ** About to EXIT NOW! ** "; } } else { cout << "Trouble Opening File Chap_11_data.txt"; // Changed added file name cout << "\n\n\t\t ** About to EXIT NOW! ** "; } return 0; } int ReadData(ifstream& inFile, ofstream& outFile, char name[][MAX], int age[]) { int counter = 0; inFile >> name[counter] >> age[counter]; // Priming Read while (!inFile.eof()) { cout << setiosflags(ios::left) << setw(25) << name[counter] << resetiosflags(ios::left) << setw(4) << age[counter] << endl; counter++; inFile >> name[counter] >> age[counter]; } return counter; } void WriteOutputFile(ofstream& outFile, char name[][MAX], int age[], int counter) { outFile << " Here is the Output File" << endl; for (int r = 0; r < counter; r++) // Removed "=" so writing stops correctly { outFile << setiosflags(ios::left) << setw(25) << name[r] << setw(4) << resetiosflags(ios::left) << age[r] << endl; } } void PrintTotalsAndSummary(ofstream& outFile, int totalRecords) { // To screen cout << "\n\n\t** Total Records: " << totalRecords << " **\n" << "\t\t The End \n"; // To file outFile << "\n\n\t** Total Records: " << totalRecords << " **\n" << "\t\t The End \n"; } */ // 13d - 11.14 Programming Exercises #1 /* const int RECORDS = 20; const int DATA = 6; const int FORMAT = 9; void read_data(string[][DATA], int&); void format_data(string[][DATA], string[][FORMAT], int); void print_format(string[][FORMAT], int); int main() { string data[RECORDS][DATA]; // Input data string format[RECORDS][FORMAT]; // Output formatted int used = 0; // Number of entries read_data(data, used); format_data(data, format, used); print_format(format, used); return 0; } void read_data(string records[][DATA], int& used) { ifstream inFile; inFile.open("C:\\Temp\\Lab_8_data.txt"); if (inFile.is_open()) { for (int i = 0; i < RECORDS; i++) { used = i; for (int j = 0; j < DATA; j++) { getline(inFile, records[i][j], ' '); cout << records[i][j] << ' '; } if (inFile.eof()) break; } } inFile.close(); } void format_data(string data[][DATA], string format[][FORMAT], int used) { float wage, // Hourly wage from data t1, // Temp number for calculations t2; // Temp number for calculations int hrs; // Hours worked from data int hrs2; // Overtime worked double total; // Calcuated total pay for (int i = 0; i < used; i++) { stringstream temp0, // All temp strings to format numbers temp1, temp2, temp3; wage = 0; // Resetting each variable each loop and making sure the program doesn't forget it exists (That was a weird problem) t1 = 0; t2 = 0; hrs = 0; hrs2 = 0; total = 0; for (int j = 0; j < 5; j++) // For the first 4 columns format[i][j] = data[i][j]; // Copy from data wage = stof(data[i][3]); // Get wage from data hrs = stoi(data[i][4]); // Get hours from data temp1 << '$' << fixed << setprecision(2) << wage; // Format wage temp1 >> format[i][3]; // Return to format array if (hrs > 40) // If overtime worked { hrs2 = hrs - 40; // Calculate overtime hrs = 40; // Set regular hours to 40 } t1 = hrs * wage; // Temp1 = regular hours * wage temp2 << '$' << fixed << setprecision(2) << t1; // Format temp1 temp2 >> format[i][5]; // Return to format array t2 = hrs2 * wage * 1.5; // Temp2 = overtime hours * wage * time and a half pay temp3 << '$' << fixed << setprecision(2) << t2; // Format temp2 temp3 >> format[i][6]; // Return to format array if (data[i][DATA - 1] == "F") // If marked as full time { format[i][7] = "Full Time"; // Return to format array total -= 5; // Subtract union fees } else format[i][7] = "Part Time"; // Return to format array total += t1; // Add temp1 to total total += t2; // Add temp2 to total temp0 << '$' << fixed << setprecision(2) << total; // Format total temp0 >> format[i][8]; // Return to format array } } void print_format(string format[][FORMAT], int used) { ofstream outFile; outFile.open("C:\\Temp\\Lab_8_out.txt"); if (outFile.is_open()) { cout << "\n\n"; // Formatting // For some reason, the second row of data onwards takes up 1 less character than the first or titles, so I had to increase the setw for them cout << setw(12) << left << "First Name" << setw(12) << left << "Last Name" << setw(15) << left << "SSN" << setw(10) << left << "Wage" << setw(10) << left << "Hours" << setw(10) << left << "Reg Pay" << setw(10) << left << "Overtime" << setw(12) << left << "Employment" << "Total" << endl << endl;; cout << setw(12) << left << format[0][0] << setw(12) << left << format[0][1] << setw(15) << left << format[0][2] << setw(10) << left << format[0][3] << setw(10) << left << format[0][4] << setw(10) << left << format[0][5] << setw(10) << left << format[0][6] << setw(12) << left << format[0][7] << format[0][8] << endl; // Same thing but writing to the file outFile << setw(12) << left << "First Name" << setw(12) << left << "Last Name" << setw(15) << left << "SSN" << setw(10) << left << "Wage" << setw(10) << left << "Hours" << setw(10) << left << "Reg Pay" << setw(10) << left << "Overtime" << setw(12) << left << "Employment" << "Total" << endl << endl;; outFile << setw(12) << left << format[0][0] << setw(12) << left << format[0][1] << setw(15) << left << format[0][2] << setw(10) << left << format[0][3] << setw(10) << left << format[0][4] << setw(10) << left << format[0][5] << setw(10) << left << format[0][6] << setw(12) << left << format[0][7] << format[0][8] << endl; for (int i = 1; i < used; i++) { cout << setw(13) << left << format[i][0] << setw(12) << left << format[i][1] << setw(15) << left << format[i][2] << setw(10) << left << format[i][3] << setw(10) << left << format[i][4] << setw(10) << left << format[i][5] << setw(10) << left << format[i][6] << setw(12) << left << format[i][7] << format[i][8] << endl; // Same thing but writing to the file outFile << setw(13) << left << format[i][0] << setw(12) << left << format[i][1] << setw(15) << left << format[i][2] << setw(10) << left << format[i][3] << setw(10) << left << format[i][4] << setw(10) << left << format[i][5] << setw(10) << left << format[i][6] << setw(12) << left << format[i][7] << format[i][8] << endl; } } outFile.close(); } */