Code:
//Put in Those SetW's
/**************************************************
** Daniel Lopez | November 3rd, 2006 **
** ------------------------------------------- **
**|||||||||||||| estate_comm.cpp |||||||||||||| **
***************************************************
** Input: choice, agent_id, yesno, prop_sell **
***************************************************
** Output: num_prop1 ,num_prop2 ,num_prop3, **
** prop_price_r, prop_price_c, prop_price_m **
** prop_price **
***************************************************
** Program Purpose: **
** The program's purpose is to implement **
** several functions that perform such duties **
** such as: printing a dashline, or the total of **
** of a commission, also functions are used to **
** validate data. **
**************************************************/
#include <iostream>
#include <iomanip>
using namespace std;
//Function Prototypes Declaration
/*-------------------------------------------------------------------------------*/
void DashLine(void); //Print Dashed Line
double CompComm(double, double); //Compute Commission
void PrintComm(double, double, double); //Print Maximum,Mininum,Average
int ValAgentId(int); //Validation Function: Agent ID
char ValPropType(char); //Validation Function: Property Type
double ValComm(double); //Validation Function: Commission = +
char ValYesNo(char); //Validation Function: Compute Another Commission?
/*-------------------------------------------------------------------------------*/
//CONSTANT DEFINE (PROPERTY_TYPE),
#define PROP_R 0.1 //10%
#define PROP_C 0.2 //20%
#define PROP_M 0.15 //15%
#define COMP_NAME "Pleasantville Estates"
#define DYWEEK "Friday"
#define NAME "Daniel Lopez Commission Computer"
#define AGENTLO 10000 //Lower Bounds
#define AGENTHI 100000 //Upper Bounds
#define NOTHING 0 //Nada
#define SIZE 50 //Array Size
//Program Body
int main ()
//Compute Commission Definition Function
{
char choice[SIZE], /*Switch Case R,C,M*/
yesno, /*Another Commission???*/
valid_choice; /**/
int agent_id[SIZE], /* Five Digit ID */
num_prop1, /*Quantity of Properties*/
num_prop2,
num_prop3;
int whileyesno;
double val_sell_pricee,
prop_price_r, /*Propety Selling Prices*/
prop_price_c,
prop_price_m,
prop_sell[SIZE], /*Propety Selling Price Total*/
comm_r, /*Commission Property Sales*/
comm_c,
comm_m;
//Update_1 Variables
double commission[SIZE]={0} ,
maximum, /*Commission Maximum, Mininum, Average*/
minimum,
average,
total, /*Commission[j] Accumilative Total*/
counter; /* double counter converted from int k*/
int j=0, /*For PreIncrement*/
k=0; /*Commission Tally*/
//Update_2 Variable - Sorting Arrays
double temp;
int row,
exm=1,
last;
//Initializing Variables
// commission[k]={0} Initalizes Each Element of the Array as 'zero'
num_prop1 = 0;
num_prop2 = 0;
num_prop3 = 0;
comm_r = 0;
comm_c = 0;
comm_m = 0;
total = 0.0;
//CONSTANT/Variable Declaration/Initalization
//Display Banner and Agent ID Request
cout << "------------------------" << NAME << "------------------------\n\n" ;
cout << COMP_NAME << " " << DYWEEK;
cout << "\n"
<< "\n-- Agent's Real Estate Sales Commission Report --";
cout << "\n----------------------------------------------------------";
cout << "\n\nDo you have a commission to compute? ( 1 - Yes // 0 - No ) >> ";
//Validate Yes Or No
cin >> yesno;
while ((yesno != '0' && yesno != '1')){
cout << "Yes or NO! ";
cin >> yesno;
}//endwhile
if (yesno == '1')
{
do
{
cout << "\n\nEnter Your Five Digit Agent ID#(_____): ";
//Validate Agent's ID
int xx=0;
cin >> agent_id[xx];
int valid;
valid =ValAgentId(agent_id[xx]);
if (valid==1)
cout << valid;
//endwhile
/*
---------------------------------------------------------------------
*/
// Property Category Display
cout << "\nProperty Types:"<<endl;
cout << "---------------\n";
cout << "\tR - Residential"<<endl
<< "\tC - Commercial"<<endl
<< "\tM - Multiunit Dwelling"<<endl;
//endDisplay
//Property Category Selection
cout << "\nChoice: ";
int zz=0;
cin >> choice[zz];
valid_choice =ValPropType(choice[zz]);
zz++;
cout << "\n\nEnter Selling Price:\t\t\t\t$ ";
//Validating Property Selling Price
int yy=0;
cin >> prop_sell[yy];
val_sell_pricee =ValComm(prop_sell[yy]);
prop_sell[yy]+= val_sell_pricee;
yy++;
//Request Selling Price, and Computing/Displaying Commission
switch (valid_choice)
{
case 'R':
case 'r':
prop_price_r = CompComm(val_sell_pricee, PROP_R); //Calculation
comm_r+= prop_price_r; //Residential Price Accumulator
num_prop1++; //Residential Number Accumulator
cout << "\n"<<"Sales Agent ( " <<agent_id[xx]<<" )"
<< "\n---------------------\n"
<< "Commission Made:\t\t\t\t$ "<< fixed << setprecision(2) << prop_price_r;
//Array Commission
commission[k]+= prop_price_r;
k++;
xx++;
break;
case 'C':
case 'c':
prop_price_c = CompComm(val_sell_pricee, PROP_C); //Calculation
comm_c+= prop_price_c; //Commercial Price Accumulator
num_prop2++; //Commercial Number Accumulator
cout << "\n"<<"Sales Agent ( " <<agent_id[xx]<<" )"
<< "\n---------------------\n"
<< "Commission Made:\t\t\t\t$ "<< fixed << setprecision(2) << prop_price_c;
//Array Commission
commission[k]+= prop_price_c;
k++;
xx++;
break;
case 'M':
case 'm':
prop_price_m = CompComm(val_sell_pricee, PROP_M); //Calculation
comm_m+= prop_price_m; //Mult Price Accumulator
num_prop3++; //Mult Number Accumulator
cout << "\n"<<"Sales Agent ( " <<agent_id[xx]<<" )"
<< "\n---------------------\n"
<< "Commission Made:\t\t\t\t$ "<< fixed << setprecision(2) << prop_price_m;
//Array Commission
commission[k]+= prop_price_m;
k++;
xx++;
break;
}
//end_switch
cout << "\n\nDo you have another commission to compute? ( 1 - Yes // 0 - No ) >> ";
cin >> yesno;
whileyesno =ValYesNo(yesno);
}
while (whileyesno=='1');
//End Big Ass While
cout << "\n\n********************* End of Run Report *********************\n\n";
//Display Running Report
// Display Total Tally
cout << " Total Number of Residential Commissions Computed: "<< setw(2)<<num_prop1<<endl;
cout << " Total Number of Commercial Commissions Computed: "<< setw(2)<<num_prop2<<endl;
cout << " Total Number of Multiunit Commissions Computed: "<< setw(2)<< num_prop3<<endl;
cout << " Total Number of ALL Commissions Computed: "<< setw(2)<<num_prop1 + num_prop2 + num_prop3<<endl;
//
DashLine();//DashLine Function
//Display Total Amount
cout << " Total Amount of Residential Commissions Computed: $"<< setw(10)<<comm_r<<endl;
cout << " Total Amount of Commercial Commissions Computed: $"<< setw(10)<<comm_c<<endl;
cout << " Total Amount of Multiunit Commissions Computed: $"<< setw(10)<< comm_m<<endl;
cout << " Total Amount of ALL Commissions Computed: $"<< setw(10)<<comm_r + comm_c + comm_m<<endl;
//Calculating Commission's Maximum, Minimum, Average
maximum = commission[0];
minimum = commission[0];
average = 0;
counter = k;
for (j=0 ; j < counter ; j++)
{
if (maximum < commission[j])
maximum = commission[j];//endif
if (minimum > commission[j])
minimum = commission[j];//endif
total += commission[j];
}//endfor
if (counter > 0){
average = total/counter;}
else{//when count == 0;
average = -1;}
DashLine();
PrintComm(maximum,minimum,average);
DashLine();
cout << " Commission Report" << endl;
DashLine();
do{
exm =0;
last= k-1;
for (row =0; row < last; row++)
{
if ( commission[row] > commission[row+1] )
{
temp = commission[row];
commission[row] = commission[row+1];
commission[row+1] = temp;
//Agent ID Sort
int temp_ai;
temp_ai = agent_id[row];
agent_id[row] = agent_id[row+1];
agent_id[row+1] = temp_ai;
double temp_ps;
temp_ps = prop_sell[row];
prop_sell[row] = prop_sell[row+1];
prop_sell[row+1] = temp_ps;
char temp_ch;
temp_ch = choice[row];
choice[row] = choice[row+1];
choice[row+1] = temp_ch;
exm=1;
}//endif
}//endfor
last--;
}while (( last > 0 ) && (exm==1));//enddo
for (j=0 ; j < counter ; j++){
cout
<<"agent id:" << agent_id[j]<<endl
<<"choice: "<< choice[j]<<endl
<<"prop_sell:" << prop_sell[j]<<endl
<<"commission: "<< commission[j]<<endl ;
}//endfor
}
return 0;
}
// Functions Definitions
/**********************************************************************************
** Function CallName: DashLine()
** Return Type: void, thus none.
** Input: None
** Output: "...----..."
** Purpose: To print a Dashed Line
**********************************************************************************/
void DashLine(void) {
cout << "\n\n --------------------------------------------------------\n\n\n";
}
/**********************************************************************************
** Function Call Name: CompComm()
** Return Type: double
** Input: double prop_sell, double PROP_RATE
** Output: Commission of Various Property Types
** Purpose: Multiply Selling Price * Constant of Propety Type
**********************************************************************************/
double CompComm(double price, double rate){
return (price * rate);
}
/**********************************************************************************
** Function Call Name: PrintComm()
** Return Type: double
** Input: double
** Output: Maximum, Mininum, Average
** Purpose: To Print Maximum, Mininum, Average
**********************************************************************************/
void PrintComm(double maximum, double minimum, double average){
cout << " Maximum Commission: $"<< fixed << setprecision(2) << setw(10) << maximum << endl;
cout << " Minimum Commission: $"<< fixed << setprecision(2) << setw(10) << minimum << endl;
cout << " Average Commission: $"<< fixed << setprecision(2) << setw(10) << average << endl;
}
/*********************************************************************************
** Function Call Name: ValAgentId()
** Return Type: int
** Input: none
** Output: Validation T/F
** Purpose: To validate AgentID Loop
*********************************************************************************/
int ValAgentId(int val_agent_id){
while (!(val_agent_id >= AGENTLO && val_agent_id < AGENTHI)){
cout << "Five Digits Please: ";
cin >> val_agent_id;
}
return val_agent_id;
}
/*********************************************************************************
** Function Call Name: ValPropType()
** Return Type: int
** Input: char
** Output: Validation T/F
** Purpose: To validate Property Type Loop
*********************************************************************************/
char ValPropType(char val_choice){
while (!( ((val_choice == 'R') || (val_choice == 'r')) || ((val_choice == 'C') || (val_choice == 'c')) || ((val_choice == 'M') || (val_choice == 'm')) ))
{
cout << "\nInvalid Property Type, Please Reenter: ";
cin >> val_choice;
}
return val_choice;
}
/*********************************************************************************
** Function Call Name: ValComm()
** Return Type: int
** Input: double
** Output: Validation T/F
** Purpose: To validate Commission Loop
*********************************************************************************/
double ValComm(double val_prop_sell){
while (val_prop_sell <= NOTHING)
{
cout << "\nInvalid Data, Reenter Please:\t\t\t$ ";
cin >> val_prop_sell;
}
return val_prop_sell;
}
/*********************************************************************************
** Function Call Name: ValYesNo()
** Return Type: int
** Input: char
** Output: Validation T/F
** Purpose: To validate YesNo Loop
*********************************************************************************/
char ValYesNo(char val_yesno){
while (!(( val_yesno == '1') || ( val_yesno == '0')))
{
cout << "Yes or NO!, Please Reenter: ";
cin >> val_yesno;
}//endwhile
return val_yesno;
}