// Elaine Torrez                          CS1A                         Chapter 6, P.369, #3
// *****************************************************************************************
// *                                    WINNING DIVISION                                    *
// *--------------------------------------------------------------------------------------- *
// * This program determines which of a company's four divisions (Northeast, Southeast,     *
// * Northwest, and Southwest) had the greatest quarterly sales.                            *
// * It uses two functions:                                                                 *
// *    getSales()   – asks for a division’s sales and validates input                      *
// *    findHighest()– determines and displays which division had the highest sales         *
// *--------------------------------------------------------------------------------------- *
// * INPUT                                                                                  *
// *   Northeast  : quarterly sales for Northeast division (>= 0)                           *
// *   Southeast  : quarterly sales for Southeast division (>= 0)                           *
// *   Northwest  : quarterly sales for Northwest division (>= 0)                           *
// *   Southwest  : quarterly sales for Southwest division (>= 0)                           *
// *--------------------------------------------------------------------------------------- *
// * OUTPUT                                                                                 *
// *   Name of the highest-grossing division and its sales amount                            *
// *****************************************************************************************
 
#include <iostream>
#include <iomanip>
#include <string>
#include <limits>     // for input validation
using namespace std;
 
// ---------------- Function Prototypes ----------------
double getSales(string divisionName);
void findHighest(double northeast, double southeast, double northwest, double southwest);
 
// ---------------------- MAIN -------------------------
int main()
{
    double northeast, southeast, northwest, southwest;
 
    cout << fixed << setprecision(2);
 
    // Get sales for each division
    northeast = getSales("Northeast");
    southeast = getSales("Southeast");
    northwest = getSales("Northwest");
    southwest = getSales("Southwest");
 
    // Determine and display highest
    findHighest(northeast, southeast, northwest, southwest);
 
    return 0;
}
 
// ---------------- Function Definitions ----------------
 
// Function to get a division’s sales
double getSales(string divisionName)
{
    double sales;
    cout << "Enter the quarterly sales for the " << divisionName << " division: $";
    cin >> sales;
 
    // Input validation
    while (cin.fail() || sales < 0.0)
    {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "ERROR: Sales amount must be 0 or greater. Re-enter for " 
             << divisionName << ": $";
        cin >> sales;
    }
 
    return sales;
}
 
// Function to find and display which division had the highest sales
void findHighest(double northeast, double southeast, double northwest, double southwest)
{
    double highest = northeast;
    string division = "Northeast";
 
    if (southeast > highest)
    {
        highest = southeast;
        division = "Southeast";
    }
    if (northwest > highest)
    {
        highest = northwest;
        division = "Northwest";
    }
    if (southwest > highest)
    {
        highest = southwest;
        division = "Southwest";
    }
 
    cout << "\nThe highest-grossing division is the " << division << " division.\n";
    cout << "Sales amount: $" << highest << endl;
}