Sample Solution to Lab #2
//////////////////////////////////////////////////////////////////////////////// // Student name: Some Student // Student ID: 123-45-6789 // Course: CS161 // Assignment: #2 // Due date: 7-15-97 // // Description: program2.cpp // This program calculates the total amount the customer // of a carpet store should be charged. The calculation // is based on the square yards purhased, cost per square // yard, labor cost, floor preparation, volume discounts, // and tax. The program takes input from the user and results // are output to the screen in table format. //////////////////////////////////////////////////////////////////////////////// #include <iostream.h> #include <iomanip.h>
const float TAX_RATE = 0.04f; // global tax rate
// Function declarations(prototypes) //////////////////////////////////////////////////////////////////////////////// // Function: doCustomer // This function processes a // customer using other functions // // Inputs: an integer representing the customer (value) // // Outputs: a float representing the customer charge (reference) // float doCustomer(int customer); //////////////////////////////////////////////////////////////////////////////// // Function: getData // This function prompts the user for data // and returns the user input to calling // function // Inputs: an integer representing the customer (value) // // Outputs: a float representing square yards purchased (reference) // a float representing cost per square yard (reference) // a float representing labor per square yard (reference) // a float representing floor prep cost (reference) // a float representing discount rate (reference) // void getData(int customer, int &sqr_yrds, float &cost_per_sqr_yrd, float &lbr_per_sqr_yrd, float &prep_cost, float &discount_rate); //////////////////////////////////////////////////////////////////////////////// // Function: calculateCosts // Calculates customer's costs based on the data input // by the user // // Inputs: a float representing square yards purchased (value) // a float representing cost per square yard (value) // a float representing labor per square yard (value) // a float representing floor preparation cost (value) // a float representing discount rate (value) // // Outputs: a float representing carpet cost (reference) // a float representing labor cost (reference) // a float representing total discount (reference) // a float representing total tax (reference) // a float representing total customer charge (reference) void calculateCosts(int sqr_yrds, float cost_per_sqr_yrd, float lbr_per_sqr_yrd, float prep_cost, float discount_rate, float &carpet_cost, float &labor_cost, float &discount, float &total_tax, float &customer_charge); //////////////////////////////////////////////////////////////////////////////// // Function: printResults // This function prints the results of each user // // Inputs: an integer representing the customer (value) // a float representing square yards // a float representing cost per square yard // a float representing labor per square yard // a float representing floor preparation cost // a float representing total carpet cost per customer // a float representing total labor cost per customer // a float representing total discount per customer // a float representing total tax per customer // a float representing total charge per customer void printResults(int customer, int sqr_yrds, float cost_per_sqr_yrd, float lbr_per_sqr_yrd, float prep_cost, float carpet_cost, float labor_cost, float discount, float total_tax, float customer_charge); void main(void) { float charge1, // Total charge per customer 1-4 charge2, charge3, charge4; float grandTotal; // Sum of all customers(1-4) total charge //Call function doCustomer for each of 4 customers and returns //total charge for each customer to charge# charge1 = doCustomer(1); charge2 = doCustomer(2); charge3 = doCustomer(3); charge4 = doCustomer(4); //Calculates grand total for all customers grandTotal = charge1 + charge2 + charge3 + charge4; //Outputs grand total to screen cout << setw(23) << "Total for all customers: " << setw(5) << "$" << setw(10) << grandTotal << endl; } //Function descriptions float doCustomer(int customer) { float charge; // Total charge for customer int sqr_yrds; // Square yards purchased float cost_per_sqr_yrd; // Cost per square yard float lbr_per_sqr_yrd; // Labor per square yard float prep_cost; // Floor preparation cost float discount_rate; // Discount rate applied to carpet cost float carpet_cost; // Total cost for carpet float labor_cost; // Total cost for labor float discount; // Total discount for customer float total_tax; // Total tax on purchase //Gets customer data from user getData(customer, sqr_yrds, cost_per_sqr_yrd, lbr_per_sqr_yrd, prep_cost, discount_rate); //Calculate the cost for the customer calculateCosts(sqr_yrds, cost_per_sqr_yrd, lbr_per_sqr_yrd, prep_cost, discount_rate, carpet_cost, labor_cost,discount, total_tax, charge); //Print the results of calculations for the customer printResults(customer, sqr_yrds, cost_per_sqr_yrd, lbr_per_sqr_yrd, prep_cost, carpet_cost, labor_cost, discount, total_tax, charge); //Return the calculated charge to calling function for grand totalcalc return charge; } void getData(int customer, int &sqr_yrds, float &cost_per_sqr_yrd, float &lbr_per_sqr_yrd, float &prep_cost, float &discount_rate) { //Inform user which customer to input data for cout << "Accepting data for customer " << customer << endl; //Prompt user for each data value and store in appropriate variable cout << setw(37) << "Input square yards purchased: "; cin >> sqr_yrds;
cout << setw(37) << "Input cost per square yard: "; cin >> cost_per_sqr_yrd;
cout << setw(37) << "Input labor cost per square yard: "; cin >> lbr_per_sqr_yrd;
cout << setw(37) << "Input floor preparation cost: "; cin >> prep_cost;
cout << setw(36) << "Input discount rate for transaction: "; cin >> discount_rate; //Provides spacing of output for readability cout << endl; } void calculateCosts(int sqr_yrds, float cost_per_sqr_yrd, float lbr_per_sqr_yrd, float prep_cost, float discount_rate, float &carpet_cost, float &labor_cost, float &discount, float &total_tax, float &customer_charge) { //Calculate carpet cost carpet_cost = sqr_yrds * cost_per_sqr_yrd; //Calculate labor cost labor_cost = sqr_yrds * lbr_per_sqr_yrd + prep_cost; //Calculate total discount discount = carpet_cost * discount_rate; //Calculate total tax on carpet NOTE: tax is on carpet cost afterdiscount total_tax = (carpet_cost - discount) * TAX_RATE; //Calculate total customer charge customer_charge = carpet_cost + labor_cost - discount + total_tax; } void printResults(int customer, int sqr_yrds, float cost_per_sqr_yrd, float lbr_per_sqr_yrd, float prep_cost, float carpet_cost, float labor_cost, float discount, float total_tax, float customer_charge) { //Prints results of user input and calculations cout << setw(30) << "Results for customer " << customer << endl; cout << setw(31) << "----------------------" << endl; //Sets floating point output as fixed-point mode cout.setf(ios::fixed, ios::floatfield); //Sets floating point output to always use decimal point cout.setf(ios::showpoint); //Sets the precision of floating point output to two decimal places cout << setprecision(2);
// output all input values and calculated values cout << setw(24) << "Square yards purchased:" << setw(6) << " " << setw(10) << sqr_yrds << endl;
cout << setw(24) << "Cost per square yard:" << setw(6) << "$" << setw(10) << cost_per_sqr_yrd << endl;
cout << setw(24) << "Labor per square yard:" << setw(6) << "$" << setw(10) << lbr_per_sqr_yrd << endl;
cout << setw(24) << "Floor preparation cost:" << setw(6) << "$" << setw(10) << prep_cost << endl;
cout << setw(24) << "Cost for carpet:" << setw(6) << "$" << setw(10) << carpet_cost << endl;
cout << setw(24) << "Cost for labor:" << setw(6) << "$" << setw(10) << labor_cost << endl;
cout << setw(24) << "Discount on carpet:" << setw(6) << "$" << setw(10) << discount << endl;
cout << setw(24) << "Tax on carpet:" << setw(6) << "$" << setw(10) << total_tax << endl;
cout << setw(24) << "Charge to customer:" << setw(6) << "$" << setw(10) << customer_charge << endl; //Prints a boundary between customers cout << "----------------------------------------" << endl; //Provides spacing of output for readability cout << endl; }