Learning Profile for Assignment #1, And Question #2 Name: Mo Khan Student ID: 3431709 1. Problem Statement: Modify the following program to the specifications given below: * I. Add a new status `SingleParent` where the tax is computed as a SINGLE but with a further reduction of $5000 per child. * II. Add a new tax condition - if the income is greater than $249,999 for SINGLE, then add a tax of 25% on income amount above $150,000; if the income is greater than $349,999 for MARRIED, then add a tax of 35% on income amount above $200,000. * III. Unknown status - if the status doesn't belong to `SINGLE` or `MARRIED` or `SINGLE_PARENT`, then compute a 33% tax on the income. ```java import java.util.Scanner; public class TaxReturn { public TaxReturn(double anIncome, int aStatus) { income = anIncome; status = aStatus; } public double getTax() { double tax = 0; if (status == SINGLE) { if (income <= SINGLE_BRACKET1) tax = RATE1 * income; else if (income <= SINGLE_BRACKET2) tax = RATE1 * SINGLE_BRACKET1 + RATE2 * (income - SINGLE_BRACKET1); else tax = RATE1 * SINGLE_BRACKET1 + RATE2 * (SINGLE_BRACKET2 - SINGLE_BRACKET1) + RATE3 * (income - SINGLE_BRACKET2); } else { if (income <= MARRIED_BRACKET1) tax = RATE1 * income; else if (income <= MARRIED_BRACKET2) tax = RATE1 * MARRIED_BRACKET1 + RATE2 * (income - MARRIED_BRACKET1); else tax = RATE1 * MARRIED_BRACKET1 + RATE2 * (MARRIED_BRACKET2 - MARRIED_BRACKET1) + RATE3 * (income - MARRIED_BRACKET2); } return tax; } public static final int SINGLE = 1; public static final int MARRIED = 2; private static final double RATE1 = 0.15; private static final double RATE2 = 0.28; private static final double RATE3 = 0.31; private static final double SINGLE_BRACKET1 = 21450; private static final double SINGLE_BRACKET2 = 51900; private static final double MARRIED_BRACKET1 = 35800; private static final double MARRIED_BRACKET2 = 86500; private double income; private int status; public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("Please enter your income: "); double income = in.nextDouble(); System.out.print("Enter S (single) or M (married): "); String input = in.next(); int status = 0; if (input.equalsIgnoreCase("S")) status = TaxReturn.SINGLE; else if (input.equalsIgnoreCase("M")) status = TaxReturn.MARRIED; else { System.out.println("Bad input."); return; } TaxReturn aTaxReturn = new TaxReturn(income, status); System.out.println("The tax is " + aTaxReturn.getTax()); } } ``` 2. Description of the Code: I started by adding tests for the existing code. By adding test coverage for the existing code, this makes it possible to add new features without breaking old features. I chose to decrease the taxable income in the constructor if the person is single. 3. Errors and Warnings: ```bash モ mvn test [INFO] Scanning for projects... [INFO] [INFO] -------------------< ca.mokhan.comp268:assignment1 >-------------------- [INFO] Building assignment1 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- fmt-maven-plugin:2.8:format (default) @ assignment1 --- [INFO] Processed 48 files (0 reformatted). [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ assignment1 --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /Users/mokha/development/gh/comp-268/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ assignment1 --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! [INFO] Compiling 24 source files to /Users/mokha/development/gh/comp-268/target/classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ assignment1 --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /Users/mokha/development/gh/comp-268/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ assignment1 --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! [INFO] Compiling 24 source files to /Users/mokha/development/gh/comp-268/target/test-classes [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ assignment1 --- [INFO] Surefire report directory: /Users/mokha/development/gh/comp-268/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running ca.mokhan.comp268.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.007 sec Running ca.mokhan.test.CandidateTest Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.053 sec Running ca.mokhan.test.NumberTest Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.021 sec Running ca.mokhan.test.EmployeeSavingsTest Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 sec Running ca.mokhan.test.CartesianCoordinateSystemTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Running ca.mokhan.test.CommunicationTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Running ca.mokhan.test.TaxReturnTest Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec Running ca.mokhan.test.BanffMarathonRunnerTest Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec Running ca.mokhan.test.AddressBookTest Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Running ca.mokhan.test.TriangleTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Running ca.mokhan.test.BonusOnSavingsTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Running ca.mokhan.test.HailstoneSequenceTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Results : Tests run: 52, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.871 s [INFO] Finished at: 2019-05-13T20:07:42-06:00 [INFO] ------------------------------------------------------------------------ ``` 4. Sample Input and Output: Test cases are defined in `TaxReturnTest.java`. 5. Discussion: There is a lot of conditional logic in `getTax()`. I considered [Refactor conditional with polymorphism](https://refactoring.com/catalog/replaceConditionalWithPolymorphism.html) but decided not to make this change.