Learning Profile for Assignment #1, And Question #2 Name: Mo Khan Student ID: 3431709 1. Problem Statement: Space Inc. will give a quarterly and annual bonus to its employees only if the savings of the quarter and/or the year are greater than or equal to quarterly minimum (monthly commitment x 3) and/or the annual minimum (monthly commitment x 12) amount, respectively. The quarterly bonus is 3% of eligible quarterly savings, and the annual bonus is 5% of annual savings if eligible. If the annual savings exceeds the committed amount by at least 25%, Space Inc. matches the additional savings (25% or above) as part of the annual bonus. I. An employee has committed to save $2000 per month. Her quarterly savings are as follows: * Q1 – $5000 * Q2 – $7000 * Q3 – $4000 * Q4 – $8000 II. Another employee has committed to save $3000 per month. His quarterly savings are as follows: * Q1 – $6000 * Q2 – $9000 * Q3 – $10000 * Q4 – $17000 Write a program to compute the total bonus amount earned by these two employees in the year. 2. Description of the Code: I created a class that implemented the interface described in the assignment. To calculate the bonus for the year I created a method called `quarterlyBonus` to calculate the bonus for each month. I also created a method called `annualBonus` to calculate the additional bonus for the annual target. Then I summed the quarterly bonuses with the annual bonus to calculate the final bonus amount. 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: [Provide some test cases with sample input and output of your program.] The test cases can be found in `BonusOnSavingsTest.java`. 5. Discussion: I manually calculated the expected bonuses to make sure that I understood the problem and how to calculate a result. Employee 1 Her quarterly savings are as follows: * Q1 – $5000 * Q2 – $7000 * Q3 – $4000 * Q4 – $8000 Quarterly minimum: $6,000 Annual minimum: $24,000 * Q1: Does not meet quarterly minimum. * Q2: Exceeds quarterly minimum. $7000 * 3% = $210 * Q3: Does not meet quarterly minimum * Q4: Exceeds quarterly minimum. $8000 * 3% = $240. * Y1: $24,000.00 meets the annual minimum. $24,000.00 * 5% = $1,200.00 Total bonus: 210 + 240 + 1200 = $1,650.00 Employee 2 * Q1 – $6000 * Q2 – $9000 * Q3 – $10000 * Q4 – $17000 Quarterly min: $9000.00 Annual min: $36,000.00 * Q1: does not meet quarterly min. * Q2: $9,000 * 3% = $270.00 * Q3: $10,000 * 3% = $300.00 * Q4: $17,000 * 3% = $510.00 * Y1: $42,000.00 saved. $42,000.00 * 5% = $2,100.00 42,000 - 36,000 = $6,000 * 25% = $1,500.00 Total: $270.00 + $300.00 + $510.00 + $2,100.00 + $1,500.00 $4,680.00 Then I started by writing tests to reproduce the expected results. Once I had a working test, I began to implment the code to make the test pass. After I got the tests passing I started to refactor the code by extracting methods.