这是一个使用 Java Swing 开发的个人所得税计算模拟器,模拟了官方个税 APP 的核心功能,包括综合所得年度汇算计算、税率表查询、专项扣除项目设置及税务计算结果展示。
一、项目简介
项目特点:
- 100% 纯 Java 实现,无第三方依赖
- 完整 GUI 界面,支持用户交互
- 详细的代码注释
- 遵循 2023 年最新个税政策
二、核心代码实现
- 主程序入口
package com.tax.calculator;
import javax.swing.*;
/**
* 个人所得税计算模拟器 - 主程序
* @author TaxDeveloper
* @version 1.0
*/
public class PersonalIncomeTaxApp {
public static void main(String[] args) {
// 使用 SwingUtilities 确保线程安全
SwingUtilities.invokeLater(() -> {
try {
// 设置系统外观
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// 创建并显示主窗口
TaxCalculatorFrame frame = new TaxCalculatorFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
System.out.println("个人所得税计算模拟器启动成功!");
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null,
"程序启动失败:" + e.getMessage(),
"错误",
JOptionPane.ERROR_MESSAGE);
}
});
}
}
- 个税计算核心类
package com.tax.calculator;
import java.math.BigDecimal;
java.math.RoundingMode;
java.util.HashMap;
java.util.Map;
{
TaxBracket[] TAX_BRACKETS = {
(, , , ),
(, , , ),
(, , , ),
(, , , ),
(, , , ),
(, , , ),
(, Double.MAX_VALUE, , )
};
Map<String, BigDecimal> SPECIAL_DEDUCTIONS = <>();
{
SPECIAL_DEDUCTIONS.put(, ());
SPECIAL_DEDUCTIONS.put(, ());
SPECIAL_DEDUCTIONS.put(, ());
SPECIAL_DEDUCTIONS.put(, ());
SPECIAL_DEDUCTIONS.put(, ());
SPECIAL_DEDUCTIONS.put(, ());
SPECIAL_DEDUCTIONS.put(, ());
SPECIAL_DEDUCTIONS.put(, ());
SPECIAL_DEDUCTIONS.put(, ());
SPECIAL_DEDUCTIONS.put(, ());
}
TaxResult {
;
BigDecimal.valueOf(annualIncome);
BigDecimal.valueOf(specialDeductions);
BigDecimal.valueOf(additionalDeductions);
BigDecimal.valueOf(BASIC_DEDUCTION);
income
.subtract(special)
.subtract(additional)
.subtract(basic)
.max(BigDecimal.ZERO);
findTaxBracket(taxableIncome.doubleValue());
taxableIncome
.multiply(BigDecimal.valueOf(bracket.getRate()))
.subtract(BigDecimal.valueOf(bracket.getQuickDeduction()));
taxAmount = taxAmount.max(BigDecimal.ZERO);
income.subtract(taxAmount);
(
income.doubleValue(),
taxableIncome.doubleValue(),
taxAmount.doubleValue(),
afterTaxIncome.doubleValue(),
bracket
);
}
TaxBracket {
(TaxBracket bracket : TAX_BRACKETS) {
(taxableIncome >= bracket.getLowerBound() &&
taxableIncome < bracket.getUpperBound()) {
bracket;
}
}
TAX_BRACKETS[TAX_BRACKETS.length - ];
}
Map<String, BigDecimal> {
<>(SPECIAL_DEDUCTIONS);
}
{
lowerBound;
upperBound;
rate;
quickDeduction;
{
.lowerBound = lowerBound;
.upperBound = upperBound;
.rate = rate;
.quickDeduction = quickDeduction;
}
{ lowerBound; }
{ upperBound; }
{ rate; }
{ quickDeduction; }
String {
String.format(, rate * , quickDeduction);
}
}
{
totalIncome;
taxableIncome;
taxAmount;
afterTaxIncome;
TaxBracket taxBracket;
{
.totalIncome = totalIncome;
.taxableIncome = taxableIncome;
.taxAmount = taxAmount;
.afterTaxIncome = afterTaxIncome;
.taxBracket = taxBracket;
}
{ totalIncome; }
{ taxableIncome; }
{ taxAmount; }
{ afterTaxIncome; }
TaxBracket { taxBracket; }
String {
String.format(
+
+
+
+
+
,
totalIncome, taxableIncome, taxAmount, afterTaxIncome, taxBracket
);
}
}
}


