## Overview

For this assignment, you will generate a UML class diagram for a class and implement it.

## Assignment

### House and BuildingCostEstimator classes

Study the following program. It makes use of a `BuildingCostEstimator` class. You will need to implement the `BuildingCostEstimator` class so that the program functions properly.

```/*
* Course: CS-1011-011
* Fall 2021
* Lab 6 - Simple Class
* Name: Sean Jones
* Created: 09/27/16
* Modified: 10/12/21
*/
package FIXME;
import java.util.Scanner;
/**
* Makes use of the BuildingCostEstimator class to estimate the
* cost of building two houses based on the user's desires.
*
* @author Dr. Chris Taylor and Prof. Sean Jones
* @version 2021.10.12
*/
public class House {
private static final int SIMILAR_THRESHOLD = 8;
private static final int DIFFERENT_THRESHOLD = 25;
private static final int TO_PERCENT = 100;

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
BuildingCostEstimator estimator1 = getBuildingCostEstimator(in);
BuildingCostEstimator estimator2 = getBuildingCostEstimator(in);
double cost1 = estimator1.costToBuild();
double cost2 = estimator2.costToBuild();
double percentDifference = TO_PERCENT * 2 * Math.abs(cost1-cost2)/(cost1+cost2);
String costDeltaDescription = "\nYou are comparing two houses that ";
if(percentDifference < SIMILAR_THRESHOLD) {
costDeltaDescription += "cost a similar amount.";
} else if(percentDifference > DIFFERENT_THRESHOLD) {
costDeltaDescription += "cost wildly different amounts.";
} else {
costDeltaDescription += "have significant cost differences.";
}
if(estimator1.costToBuild()>=estimator2.costToBuild()) {
System.out.println("\nThe first house is more expensive...\n");
displayDetails(estimator1);
System.out.println("\nThe second house is less expensive...\n");
displayDetails(estimator2);
} else {
System.out.println("\nThe second house is more expensive...\n");
displayDetails(estimator2);
System.out.println("\nThe first house is less expensive...\n");
displayDetails(estimator1);
}
}

/**
* Display characteristics and cost of the house
* @param estimator The building cost estimator object to display
*/
private static void displayDetails(BuildingCostEstimator estimator) {
System.out.print("The cost of building this house with ");
System.out.format("%d full baths, %d half baths,\n",
estimator.getNumFullBaths(),
estimator.getNumHalfBaths());
System.out.format("%d bedrooms, %d windows,\n",
estimator.getNumBedrooms(),
estimator.getNumWindows());
System.out.format("with a %.1f car garage and taking ",
estimator.getNumGarages());
System.out.format("up %d square feet\n",
estimator.getSquareFeet());
System.out.format("will take \$%,.2f to build.\n",
estimator.costToBuild());
}

/**
* Gathers information about the user's desires and creates and returns a
* building cost estimator object.
* @param in The scanner used to obtain user input
* @return a building cost estimator that is consistent with the user's responses
*/
private static BuildingCostEstimator getBuildingCostEstimator(Scanner in) {
BuildingCostEstimator estimator = new BuildingCostEstimator();
+ "cost of building a house.");
System.out.print("Enter the total number of square feet: ");
String line = in.nextLine();
int sqFeet = Integer.parseInt(line);
estimator.setSquareFeet(sqFeet);
System.out.print("Enter the number of full bathrooms: ");
int numFullBaths = Integer.parseInt(in.nextLine());
estimator.setNumFullBaths(numFullBaths);
System.out.print("Enter the number of half bathrooms: ");
line = in.nextLine();
estimator.setNumHalfBaths(Integer.parseInt(line));
System.out.print("Enter the number of bedrooms: ");
int numBeds = Integer.parseInt(in.nextLine());
estimator.setNumBedrooms(numBeds);
System.out.print("Enter the number of windows: ");
estimator.setNumWindows(Integer.parseInt(in.nextLine()));
System.out.print("Enter the number of garage spaces (e.g., 2.5): ");
line = in.nextLine();
estimator.setNumGarages(Double.parseDouble(line));
while(estimator.getNumGarages()<2.0) {
System.out.println("We are in Wisconsin.");
System.out.println("Perhaps you should reconsider the number of garage stalls.");
System.out.print("Enter the number of garage spaces (e.g., 2.5): ");
estimator.setNumGarages(Double.parseDouble(in.nextLine()));
}
return estimator;
}
}
```

The cost of the home should be based on the following calculation:

• Base cost per square foot of the house: \$135
• Add \$20,000 for each full bathroom
• Add \$7,000 for each half bathroom
• Add \$3,000 for each bedroom
• Add \$1000 for each window
• Add \$8,000 for each garage stall

### UML Diagram

You must generate a UML class diagram for the `BuildingCostEstimator` class.

## Acknowledgement

This laboratory assignment was developed by Dr. Chris Taylor.

See your professor's instructions for details on submission guidelines and due dates.