#include<iostream.h>

class Rectangle
{
	private:
		//Length and width of the rectangle object.
		float length, width;
	public:
		//constructor
		Rectangle(float l=0, float w=0);

		//methods to retrieve and modify private data.
		float GetLength(void) const;
		void PutLength(float l);
		float GetWidth(void) const;
		void PutWidth(float w);

		//compute and return rectangle measurements
		float Perimeter(void) const;
		float Area(void) const;
};

//constructor. Assign l to length and w to width.
Rectangle:: Rectangle(float l, float w) : length(l), width(w)
{}

//Return the length of the rectangle
float Rectangle:: GetLength (void) const
{
	return length;
}

//allow client to assign new value l to length of rectangle
void Rectangle::PutLength (float l)
{
	length=l;
}

//return the width of the rectangle
float Rectangle:: GetWidth (void) const
{
	return width;
}

//allow client to assign new value w to width of rectangle.
void Rectangle::PutWidth (float w)
{
	width=w;
}


//compute and return the perimeter of the rectangle.
float Rectangle:: Perimeter (void) const
{
	return 2.0*(length + width); //return rectangle perimeter
}

//compute and return the area of the rectangle.
float Rectangle:: Area (void) const	//return the area of the rectangle
{
	return length*width; 
}

void main(void)
{
	//cost of siding and molding are constants
	const float sidingCost=2.00, moldingCost=0.50;

	//initially, selections are not complete.
	int completedSelections=0;

//option from menu selected by user
char doorOption;

//length/width and door cost.
float glength, gwidth, doorCost;
//total cost includes door, siding, molding.
float totalCost;

cout<< "Enter the length and width of the garage: ";
cin >> glength >> gwidth;

//create garage object with user supplied dimensions.
//create door object with default dimenions.
Rectangle garage(glength, gwidth);
Rectangle door;

while(!completedSelections)
{
	cout << "Enter 1-4 or 'q' to quit" << endl << endl;
	cout << "Door 1 (12 by 8; $380)	"
	     << "Door 2 (12 by 10; $420)" << endl;
	cout << "Door 3 (16 by 8; $450)	"
	     << "Door 4 (16 by 10; $480)" << endl;
	cout << endl;

	cin>> doorOption;

	if (doorOption=='q')
		completedSelections=1;		//terminate loop
	else
	{
		switch (doorOption)
		{
			case '1': door.PutLength(12);	//12x8 ($380)
				  door.PutWidth(8);
				  doorCost=380;
				  break;
			
			case '2': door.PutLength(12);	//12x10 ($420)
				  door.PutWidth(10);
				  doorCost=420;
				  break;


			case '3': door.PutLength(16);	//16x8 ($450)
				  door.PutWidth(8);
				  doorCost=450;
				  break;


			case '4': door.PutLength(16);	//16x10 ($480)
				  door.PutWidth(10);
				  doorCost=480;
				  break;
			}
			totalCost=doorCost +
			moldingCost*(garage.Perimeter()+ door.Perimeter())
			+sidingCost*(garage.Area()-door.Area());
		cout << "Total cost of door, siding, and molding: $ "
		     <<totalCost << endl << endl;
		}
	}
}

/*
< Run of Program>

Enter the length and width of the garage: 20 12
Select the dor by number or 'q' to quit

	Door 1 (12 by 8; $380)	Door 2 (12 by 10; $420)
	Door 3 (16 by 8; $450)	Door 4 (16 by 10; $480)

q
*/