TaxCalculator.java
上传用户:yinzh02
上传日期:2021-05-28
资源大小:63k
文件大小:4k
源码类别:

家庭/个人应用

开发平台:

Java

  1. /*
  2.  * %W% %E% Rongzhi Liu
  3.  * 
  4.  * Copyright (c) 2008 Rongzhi-Liu SUN YAT-SEN UNIVERSITY. All Rights Reserved.
  5.  * 
  6.  * This software is to calculate personal tax.
  7.  * To make its use wider, the base of tax and the Tax Rate Table can be change
  8.  * is necessary.
  9.  */
  10. package personaltax;
  11. import myException.NegativeException;
  12. /**
  13.  * Class TaxCalculator calculate the personal tax with the infomation in TaxRateTable.
  14.  * 
  15.  * @version 1.0 09 March 2008
  16.  * @author Rongzhi-Liu
  17.  */
  18. public class TaxCalculator {
  19.     
  20.     /** The base of tax. */
  21.     private double base;
  22.     
  23.     /** TaxRateTable contains all the tax rate infomation. */
  24.     private TaxRateTable taxRateTable;
  25.     
  26.     /** Default constructor. Create the TaxCalculator with default base. */
  27.     public TaxCalculator(){
  28.         base = 1600;
  29.         taxRateTable = new TaxRateTable();
  30.     }
  31.     
  32.     /**
  33.      * Return taxRateTable.
  34.      * 
  35.      * @return Tax Rate Table. 
  36.      */
  37.     public TaxRateTable getTaxRateTable() {
  38.         return taxRateTable;
  39.     }
  40.     
  41.     /** 
  42.      * Rebuild the whole TaxRateTable, including the number of tax rank, starting money & rate.
  43.      * 
  44.      * @param n: the number of ranks.
  45.      * @param startAndRate: contains the infomation of each tax level(staring money & rate).
  46.      */
  47.     public void rebuildTaxRateTable(int n, double startAndRate[][]){
  48.         taxRateTable = new TaxRateTable(n, startAndRate);
  49.     }
  50.     
  51.     /** 
  52.      * Set the base of the tax.
  53.      * 
  54.      * @param b the new base.
  55.      */
  56.     public void setBase(double b) throws NegativeException{
  57.         
  58.         if(base < 0){
  59.             throw new NegativeException("Base");
  60.         }
  61.         base = b;
  62.     }
  63.     
  64.     /**
  65.      * Override toString()
  66.      * 
  67.      * @return fomated Calculator.
  68.      */
  69.     @Override
  70.     public String toString(){
  71.         String fomatedCalculator = "--------------------------------n";
  72.         fomatedCalculator += "Current Tax Base is : " + base + "n";
  73.         fomatedCalculator += "Current Tax Rate Table: n";
  74.         fomatedCalculator += taxRateTable;
  75.         fomatedCalculator += "--------------------------------n";
  76.         return fomatedCalculator;
  77.     }
  78.     
  79.      /** 
  80.      * Calculate the tax.
  81.      * 
  82.      * @param amountOfTax: Money that should be taxed.
  83.      * @return the tax.
  84.      */
  85.     public double calculate(double income) throws NegativeException{
  86.         
  87.         if(income < 0){
  88.             throw new NegativeException("Income");
  89.         }else if(income <= base){
  90.             return 0;            
  91.         }else{
  92.             return taxRateTable.calculate(income - base);
  93.         }
  94.     }
  95.     
  96.     public static void main(String[] args){
  97.       
  98.         try{
  99.             TaxCalculator t = new TaxCalculator();
  100.             System.out.println("Class TaxCalculator testing ......");
  101.             System.out.println("Current Tax Calculator:");
  102.             System.out.print(t);
  103.             System.out.println("Calculate(4300)......");
  104.             System.out.println("The tax is " + t.calculate(4300) + "nn");
  105.             System.out.println("setBase(1800)........");
  106.             t.setBase(1800);
  107.             System.out.println("Now the Tax Calculator:");
  108.             System.out.println(t);
  109.             System.out.println("n");
  110.             System.out.println("Calculate(4300)......");
  111.             System.out.println("The tax is " + t.calculate(4300));
  112.             
  113.             System.out.println("Calculate(0) = " + t.calculate(0));
  114.             System.out.println("Calculate(0.01) = " + t.calculate(0.01));
  115.             System.out.println("Calculate(1800) = " + t.calculate(1800) + "n");
  116.             
  117.             System.out.println("Error testing: Calculator(-10)...");
  118.             System.out.println("Calculate(-10) = " + t.calculate(-10));
  119.             
  120.         }catch(NegativeException e){
  121.             e.printStackTrace();
  122.         }        
  123.     }
  124. }