首页 > 试题广场 >

(财务:税款类 Tax ) 编程练习题 8.12 使用数组编

[问答题]
(财务:税款类 Tax ) 编程练习题 8.12 使用数组编写一个计算税款的程序。设计一个名为 Tax 的 类,该类包含下面的实例数据域。
 •int filingStatus (四种纳税人状态之一):0— 单身纳税人、1— 已婚共缴纳税人或合 法寡妇、2— 已婚单缴纳税人、3— 家庭纳税人。使用公共静态常量 SINGLE_FILER(0)、 MARRIED_]0INTLY_0R_QUALIFYING_WID0W(ER)(1)、MARRIED_SEPARATELY(2) 和 HEAD_ 0F_H0USEH0LD(3) 表示这些状态。
 • int[][] brackets:存储每种纳税人的纳税等级。
 • doublet] rates:存储每种纳税等级的税率。
 • double taxablelncome:存储可征税收入。 给每个数据域提供 get 和 set 方法,并提供返回税款的 getTaxO 方法。
该类还提供一个无参 构造方法和构造方法 Tax(filingStatus,brackets,rates,taxablelncome)。
 画出该类的 UML 图并实现这个类。编写一个测试程序,使用 Tax 类对所给四种纳税人打 印 200丨年和 2009 年的税款表,可征税收人范围在 50 000 美元和 60 000 美元之间,间隔区间为 1000 美元。2009 年的税率参见表 3-2, 200丨年的税率参见表 10-1。
// 您细品

public class TestTax {
	public static void main(String[] args) {
		double[] rates = {0.15, 0.275, 0.305, 0.355, 0.391}; 
		int[][] brackets = {
			{27050, 65550, 136750, 297305}, // 单身
			{45200, 109250, 166500, 297350}, // 已婚共或
			{22600, 54625, 83250, 148676},  // 已婚单
			{36250, 93650, 151650, 297350} // 家庭
		};
		printForm(2001);
		double taxableIncome = 50000;
		printTax(taxableIncome, rates, brackets);
		System.out.println();
		double[] rates1 = {0.1, 0.15, 0.25, 0.28, 0.33, 0.35};
		int[][] brackets1 = {
			{8350, 33950, 82250, 171550, 372950},
			{16700, 67900, 137050, 208850, 372950},
			{8350, 33950, 68525, 104425, 186475},
			{11950, 45500, 117450, 190200, 372950}
		};
		printForm(2009);
		printTax(taxableIncome, rates1, brackets1);
	}
	public static void printForm(int year) {
		System.out.println("                   " + year + "年美国个人所得税税款表($50000-$60000)");
		System.out.println("-------------------------------------------------------------------------------");
		System.out.println("可征税收入  单身纳税人  已婚共缴纳税人或丧偶人士  已婚单缴纳税人     家庭纳税人");
		System.out.println("-------------------------------------------------------------------------------");
	}
	public static void printTax(double taxableIncome, double[] rates, int[][] brackets) {
		for (int j = 0; j < 11; j++) {
			double a = taxableIncome + 1000 * j;
			System.out.print("$");
			System.out.printf("%-11.2f%s", a, "$");
			for (int i = 0; i < 4; i++) {
				Tax tax = new Tax(i, brackets, rates, taxableIncome + 1000 * j);
				if (i == 3) {
					System.out.printf("%-8.2f\n", tax.getTax());
				}
				else {
					System.out.printf("%-18.2f%s", tax.getTax(), "$");
				}
			}
			System.out.println("-------------------------------------------------------------------------------");
		}
	}
}
class Tax {
	private int filingStatus;
	private int[][] brackets;
	private double[] rates;
	private double taxableIncome;
	public static final int SINGLE_FILET = 0;
	public static final int MARRIED_JOINTLY_OR_QUALIFYING = 1;
	public static final int MARRIED_SEPARATELY = 2;
	public static final int HEAD_OF_HOUSEHOLD = 3;
	Tax() {
	}
	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 int[][] getBrackets() {
		return brackets;
	}
	public double[] getRates() {
		return rates;
	}
	public double getTaxableIncome() {
		return taxableIncome;
	}
	public void setFilingStatus(int filingStatus) {
		 this.filingStatus = filingStatus;
	}
	public void setBrackets(int[][] brackets) {
		this.brackets = brackets;
	}
	public void setRates(double[] rates) {
		this.rates = rates;
	}
	public void setTaxableIncome(double taxableIncome) {
		this.taxableIncome = taxableIncome;
	}
	public double getTax() {      // 返回税收
		double tax = brackets[filingStatus][0] * rates[0];
		for (int i = 0; i < rates.length - 1; i++) {
			if (brackets[filingStatus][i] >= taxableIncome) {
				if (i == 0) {
					tax = taxableIncome * rates[0];
				}
				else {
					for (int j = 1; j < i; j++) {
						tax = tax + (brackets[filingStatus][j] - brackets[filingStatus][j -1]) * rates[j];
					}
					tax = tax + (taxableIncome - brackets[filingStatus][i - 1]) * rates[i];
				}
				break;
			}
			if (i == rates.length - 2) {
				for (int j = 1; j <= i; j++) {
					tax = tax + (brackets[filingStatus][j] - brackets[filingStatus][j -1]) * rates[j];
				}
				tax = tax + (taxableIncome - brackets[filingStatus][i]) * rates[i + 1];
			}
		}
		return tax;
	}
}

发表于 2020-03-03 15:30:38 回复(0)