Sunday 18 September 2016

Chapter 10 Exercise 8, Introduction to Java Programming, Tenth Edition Y. Daniel LiangY.

10.8 (Financial: the Tax class) Programming Exercise 8.12 writes a program for computing taxes using arrays. Design a class named Tax to contain the follow- ing instance data fields:
 ■ int filingStatus: One of the four tax-filing statuses:
        0—single filer,
        1— married filing jointly or qualifying widow(er),
        2—married filing separately, and 3—head of household.
        Use the public static constants SINGLE_FILER (0),
        MARRIED_JOINTLY_OR_QUALIFYING_WIDOW(ER) (1),
        MARRIED_ SEPARATELY (2),
        HEAD_OF_HOUSEHOLD (3) to represent the statuses.
 ■ int[][] brackets: Stores the tax brackets for each filing status.
 ■ double[] rates: Stores the tax rates for each bracket.
 ■ double taxableIncome: Stores the taxable income.
 Provide the getter and setter methods for each data field and the getTax() method
 that returns the tax. Also provide a no-arg constructor and the
 constructorTax(filingStatus, brackets, rates, taxableIncome).
 Draw the UML diagram for the class and then implement the class.
 Write a test program that uses the Tax class to print the 2001 and 2009
 tax tables for taxable income from $50,000 to $60,000 with intervals of $1,000
 for all four statuses. The tax rates for the year 2009 were given in Table 3.2.
 The tax rates for 2001 are shown in Table 10.1.

public class Tax {

    public static final int SINGLE_FILER = 0;
    public static final int MARRIED_JOINTLY_OR_QUALIFYING_WIDOW= 1;
    public static final int MARRIED_SEPARATELY = 2;
    public static final int HEAD_OF_HOUSEHOLD = 3;

    private int filingStatus;
    private int[][] brackets;
    private double[] rates;
    private double taxableIncome;

    public Tax(int filingStatus, int[][] brackets, double[] rates, double taxableIncome) {
        this.filingStatus = filingStatus;
        this.brackets = brackets;
        this.rates = rates;
        this.taxableIncome = taxableIncome;

    }

    public int getFilingStatus() {
        return filingStatus;
    }

    public void setFilingStatus(int filingStatus) {
        this.filingStatus = filingStatus;
    }

    public int[][] getBrackets() {
        return brackets;
    }

    public void setBrackets(int[][] brackets) {
        this.brackets = brackets;
    }

    public double[] getRates() {
        return rates;
    }

    public void setRates(double[] rates) {
        this.rates = rates;
    }

    public double getTaxableIncome() {
        return taxableIncome;
    }

    public void setTaxableIncome(double taxableIncome) {
        this.taxableIncome = taxableIncome;
    }

    public double getTax() {
        double tax;
        if (taxableIncome <= brackets[filingStatus][0]) return Math.round(taxableIncome * rates[0]);

        tax = brackets[filingStatus][0] * rates[0];

        for (int i = 1; i < brackets[filingStatus].length; i++) {

            if (taxableIncome > brackets[filingStatus][i]) {
                tax += (brackets[filingStatus][i] - brackets[filingStatus][i - 1]) * rates[i];

            } else {
                return Math.round(tax + (taxableIncome - brackets[filingStatus][i - 1]) * rates[i]);
            }
        }
        return Math.round(tax + (taxableIncome - brackets[filingStatus][4]) * rates[5]);
    }

}

public class Exercise_08 {

    public static void main(String[] args){

        int[][] brackets = new int[][] {
        // stat 0 single
        {8350,33950, 82250, 171550, 372950},
        // stat 1 Married Filing Jointly
        {16700, 67900, 137050, 208850, 372950},
        // stat 2 Married Filing Separately
        {8350, 33950, 68525, 104425, 186475},
        // stat 3 Head of Household
        {11950, 45500, 117450, 190200, 372950}};

        double[] rates = new double[] { 0.10, 0.15,0.25,0.28,0.33,0.35 };

        String s1 = "Taxable Income";
        String s2 = "Single";
        String s3 = "Married Joint";
        String s4 = "Married Separate";
        String s5 = "Head of house";

        System.out.printf("%-20s%-12s%-4s%21s%16s\n", s1, s2, s3, s4, s5);
        for (int i = 50000; i <= 60000; i += 1000) {
            System.out.printf("%4d%19.0f%16.0f%16.0f%20.0f\n", i,
                    new Tax(Tax.SINGLE_FILER,brackets,rates,i).getTax(),
                    new Tax(Tax.MARRIED_JOINTLY_OR_QUALIFYING_WIDOW,brackets,rates,i).getTax(),
                    new Tax(Tax.MARRIED_SEPARATELY,brackets,rates,i).getTax(),
                    new Tax(Tax.HEAD_OF_HOUSEHOLD,brackets,rates,i).getTax()
            );


        }
    }
}

No comments :

Post a Comment