⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 application.java

📁 一个计算个人所得税的Java程序
💻 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 + -