📄 application.java
字号:
package iitax;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
public class Application {
/**
* taxRateList 税率表
*/
private ArrayList taxRateList =null;
/**
* startingPoint 起征点
*/
private double startingPoint = 0.0D;
/**
* 构造函数 根据参数税率表和起征点初始本域
* @param taxRateList 税率表
* @param startingPoint 起征点
*/
public Application(ArrayList taxRateList, double startingPoint){
this.taxRateList = taxRateList;
this.startingPoint = startingPoint;
}
/**
* 打印欢迎信息
*/
public void welcome(){
System.out.println("欢迎使用阿木开发的个人所得税计算系统, 请输入你要选择的服务对应的编号再按回车.\n");
}
/**
* 打印系统菜单
*/
private void printMainMenu(){
System.out.println("1. 使用当前起征点和税率表计算个人所得税.");
System.out.println("2. 输出当前起征点和税率表.");
System.out.println("3. 更改个人所得税起征点");
System.out.println("4. 更改各级税率表");
System.out.println("5. 重建税率表");
System.out.println("6. 读取参数");
System.out.println("7. 保存参数");
System.out.println("8. 退出本系统");
}
/**
* 从命令行接收输入, 按当前起征点和税率表计算税值
*/
public void computeTax(){
System.out.print("请输入个人的总收入: ");
double income = readIncome();
double tax = TaxComputer.compute(taxRateList, startingPoint, income);
if(tax >= 0.0D){
System.out.println("应缴纳的个人所得税为: " +tax+ "元.");
} else {
System.out.println("你以为你比盖茨收入还高吗?");
}
System.out.println();
}
/**
* 输出当前起征点和税率表
*/
public void printTaxRate(){
System.out.println("\n当前个税起征点为: "+startingPoint);
System.out.println("以下为当前税率表:");
Iterator it = taxRateList.iterator();
int level = 1;
while(it.hasNext()){
TaxItem ti = (TaxItem)it.next();
System.out.println("等级"+(level++)+":\t" + ti.getTaxStartPoint() + "元 -- " + ti.getTaxEndPoint() + "元\t\t\t" + ti.getTaxRate()*100 + "%");
}
System.out.println();
}
/**
* 从命令行接收输入, 改变起征点的值
*/
public void changeStartingPoint(){
System.out.print("请输入新的起征点(0 ~ 100000): ");
int newStartingPoint = readInt(0, 1000000);
startingPoint = newStartingPoint;
System.out.println("更改成功!!!\n");
}
/**
* 从命令行接收输入, 更改指定级的税率
*/
public void changeTaxList(){
System.out.print("请输入要更改的等级: ");
int level = readInt(1, 8);
System.out.print("请输出新的税率值(%): ");
int rate = readInt(0, 100);
TaxItem ti= (TaxItem)taxRateList.get(level-1);
ti.setTaxRate((double)rate/100);
System.out.println("更改成功!!!\n");
}
/**
* 从命令行接收输入, 重新建立新的税率表, 并把该表设为当前表
*/
public void buildNewTaxList(){
System.out.print("请输入新税表的等级数(1 ~ 20): ");
int totalLevel = readInt(1, 20);
ArrayList list = new ArrayList();
double taxStartPoint = 0.0D;
for(int i=1; i<totalLevel; i++){
System.out.print("请输入等级"+i+"的右值(整数): ");
int taxEndPoint = readInt(1, (int)Constants.MAX_INCOME);
//保证各等级的右值必须是递增的
while(!(taxEndPoint > taxStartPoint)){
System.out.print("本税率等级右值必须高于上一等级的右值, 请重新输入: ");
taxEndPoint = readInt(1, (int)Constants.MAX_INCOME);
}
System.out.print("请输入该级的税率值(%): ");
double rate = ((double)readInt(1, 100))/100;
list.add(new TaxItem(taxStartPoint, taxEndPoint, rate));
taxStartPoint = taxEndPoint;
}
System.out.print("请输入最后一级的税率值(%)");
double rate = ((double)readInt(1, 100))/100;
list.add(new TaxItem(taxStartPoint, rate));
this.taxRateList = list;
System.out.println("你已成功建立了新的税率表!!!\n");
}
/**
* 读取参数, 包括税率表和起征点
*/
public void loadParas(){
try{
FileAccessor fa = new FileAccessor();
fa.loadParas();
taxRateList = fa.getTaxList();
startingPoint = fa.getStartingPoint();
System.out.println("已成功读取参数");
printTaxRate();
}catch(Exception e){
System.out.println("请取参数失败.");
System.out.println("请确认文件存在并且里面的数据是正确的.");
}
}
/**
* 将税率表和起征点持久化到文件中
*/
public void saveParas(){
try{
FileAccessor fa = new FileAccessor();
fa.saveParas(taxRateList, startingPoint);
System.out.println("已成功保存参数\n");
}catch(Exception e){
System.out.println("保存参数失败.\n");
}
}
/**
* 从命令行接收一个指定范围的整数
* @param minNum 整数的下限(包含)
* @param maxNum 整数的上限(包含)
* @return 接收的合法整数值
*/
private int readInt(int minNum, int maxNum){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try{
int option = Integer.parseInt(br.readLine());
if(option > maxNum || option < minNum){
System.out.print("输入错误, 请输出一个 "+minNum+" 到 "+maxNum+" 的整数: ");
return readInt(minNum, maxNum);
}
return option;
} catch (Exception e){
System.out.print("输入格式错误, 请输出一个 "+minNum+" 到 "+maxNum+" 的整数: ");
return readInt(minNum, maxNum);
}
}
/**
* 从命令行接收一个双精度浮点数
* @return 接收的双精度浮点数
*/
private double readIncome(){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try{
double income = Double.parseDouble(br.readLine());
if(income < 0){
System.out.print("输入错误, 收入值应该大于0, 请重新输出个人收入: ");
return readIncome();
}
return income;
} catch (Exception e){
System.out.println("输入格式错误, 请重新输入.");
return readIncome();
}
}
/**
* 运行系统
*/
public void run(){
welcome();
while(true){
printMainMenu();
System.out.print("请输入你要选择的服务编号: ");
int option = readInt(1, 8);
switch(option){
case 1 : computeTax(); break; //计算个税
case 2 : printTaxRate(); break; //输出计算参数值
case 3 : changeStartingPoint(); break; //更改起征点
case 4 : changeTaxList(); break; //改更各级税率
case 5 : buildNewTaxList(); break; //重新建立税率表
case 6 : loadParas(); break; //存储参数
case 7 : saveParas(); break; //保存参数
case 8 : System.exit(0); //退出系统
}
}
}
/**
* 测试函数
* @param args
*/
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new TaxItem(0, 500, 0.05));
list.add(new TaxItem(500, 2000, 0.10));
list.add(new TaxItem(2000, 5000, 0.15));
list.add(new TaxItem(5000, 20000, 0.20));
list.add(new TaxItem(20000, 0.25));
Application application = new Application(list, 1600);
application.run();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -