// This program produces a sales report for DLC, Inc. // This version of the program uses STL vectors instead of arrays. #include #include #include using namespace std; // Function prototypes void initVectors(vector &, vector &, vector &); void calcSales(vector, vector, vector &); void showOrder(vector, vector); void dualSort(vector &, vector &); void showTotals(vector, vector); int main() { vector id; // Product ID numbers vector units; // Units sold vector prices; // Product prices vector sales; // To hold product sales // Must provide an initialization routine. initVectors(id, units, prices); // Calculate each product's sales. calcSales(units, prices, sales); // Sort the elements in the sales array in descending // order and shuffle the ID numbers in the id array to // keep them in parallel. dualSort(id, sales); // Set the numeric output formatting. cout << fixed << showpoint << setprecision(2); // Display the products and sales amounts. showOrder(sales, id); // Display total units sold and total sales. showTotals(sales, units); return 0; } //****************************************************************** // Definition of initVectors. Accepts id, units, and prices * // vectors as reference arguments. This function initializes each * // vector to a set of starting values. * //****************************************************************** void initVectors(vector &id, vector &units, vector &prices) { // Initialize the id vector with the ID numbers // 914 through 922. for (int value = 914; value <= 922; value++) id.push_back(value); // Initialize the units vector with data. units.push_back(842); units.push_back(416); units.push_back(127); units.push_back(514); units.push_back(437); units.push_back(269); units.push_back(97); units.push_back(492); units.push_back(212); // Initialize the prices vector. prices.push_back(12.95); prices.push_back(14.95); prices.push_back(18.95); prices.push_back(16.95); prices.push_back(21.95); prices.push_back(31.95); prices.push_back(14.95); prices.push_back(14.95); prices.push_back(16.95); } //**************************************************************** // Definition of calcSales. Accepts units, prices, and sales * // vectors as arguments. The sales vector is passed into a * // reference parameter. This function calculates each product's * // sales by multiplying its units sold by each unit's price. The * // result is stored in the sales vector. * //**************************************************************** void calcSales(vector units, vector prices, vector &sales) { for (int index = 0; index < units.size(); index++) sales.push_back(units[index] * prices[index]); } //**************************************************************** // Definition of function dualSort. Accepts id and sales vectors * // as reference arguments. This function performs a descending * // order selection sort on the sales vector. The elements of the * // id vector are exchanged identically as those of the sales * // vector. * //**************************************************************** void dualSort(vector &id, vector &sales) { int startScan, maxIndex, tempid, size; double maxValue; size = id.size(); for (startScan = 0; startScan < (size - 1); startScan++) { maxIndex = startScan; maxValue = sales[startScan]; tempid = id[startScan]; for(int index = startScan + 1; index < size; index++) { if (sales[index] > maxValue) { maxValue = sales[index]; tempid = id[index]; maxIndex = index; } } sales[maxIndex] = sales[startScan]; id[maxIndex] = id[startScan]; sales[startScan] = maxValue; id[startScan] = tempid; } } //***************************************************************** // Definition of showOrder function. Accepts sales and id vectors * // as arguments. The function first displays a heading, then the * // sorted list of product numbers and sales. * //***************************************************************** void showOrder(vector sales, vector id) { cout << "Product Number\tSales\n"; cout << "----------------------------------\n"; for (int index = 0; index < id.size(); index++) { cout << id[index] << "\t\t$"; cout << setw(8) << sales[index] << endl; } cout << endl; } //******************************************************************* // Definition of showTotals function. Accepts sales and id vectors * // as arguments. The function first calculates the total units (of * // all products) sold and the total sales. It then displays these * // amounts. * //******************************************************************* void showTotals(vector sales, vector units) { int totalUnits = 0; double totalSales = 0.0; for (int index = 0; index < units.size(); index++) { totalUnits += units[index]; totalSales += sales[index]; } cout << "Total Units Sold: " << totalUnits << endl; cout << "Total Sales: $" << totalSales << endl; }