java工资计算器,三险一金

    xiaoxiao2024-10-23  81

    效果图: 做成的exe文件: https://download.csdn.net/download/weixin_42884584/11205317

    package com.rn; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; public class ShowGUI_gz extends JFrame{ public static void main(String[] args) { ShowGUI_gz sg = new ShowGUI_gz(); } private JTable jTable; private JLabel label1; private JLabel label2; private JLabel label; private JLabel yalbxLabel; private JLabel sybxLabel; private JLabel yilbxLabel; private JLabel gjjLabel; private JButton button; private JButton button1; private JButton button2; private JButton button3; private JTextField yalbxText; private JTextField sybxText; private JTextField yilbxText; private JTextField gjjText; private DefaultTableModel model; // 构造函数 public ShowGUI_gz() { JPanel panel1 = new JPanel(); // 需要选择的条目 年和月 Integer[] yearData = new Integer[10]; String nowYear = new SimpleDateFormat("yyyy").format(new Date()); Integer years = Integer.valueOf(nowYear)-5; for (int i = 0; i < 10; i++) { yearData[i] = years++; } Integer[] monthData = new Integer[12]; for (int i = 0; i < 12; i++) { monthData[i] = i+1; } // 创建下拉列表框 年和月 JComboBox<Integer> yearBox = new JComboBox<Integer>(yearData); JComboBox<Integer> monthBox = new JComboBox<Integer>(monthData); // 设置默认选中 当前年和月 yearBox.setSelectedItem(Integer.valueOf(nowYear)); monthBox.setSelectedItem(new Date().getMonth()+1); label1=new JLabel("年"); label2=new JLabel("月"); button=new JButton("增加行"); button1=new JButton("删除选中行"); button2=new JButton("计算统发实发"); button3=new JButton("计算实发合计"); JPanel panel2 = new JPanel(); label=new JLabel("三险一金比例:"); yalbxLabel=new JLabel("养老保险%:"); yalbxText=new JTextField(2); sybxLabel=new JLabel("失业疗保险%:"); sybxText=new JTextField(2); yilbxLabel=new JLabel("医疗保险%:"); yilbxText=new JTextField(2); gjjLabel=new JLabel("公积金%:"); gjjText=new JTextField(2); Object[][] p = {{ "","", "", "", "", "", "", "", "", "", "", "" }}; String[] names={"工号","姓名","基本工资","养老保险费","失业保险费","医疗保险费","公积金","统发实发","绩效工资","奖金补贴","个人所得税","实发合计"}; model=new DefaultTableModel(p, names); jTable=new JTable(model); // 加入各个组件 panel1.add(yearBox); panel1.add(label1); panel1.add(monthBox); panel1.add(label2); panel1.add(button); panel1.add(button1); panel1.add(button2); panel1.add(button3); panel2.add(label); panel2.add(yalbxLabel); panel2.add(yalbxText); panel2.add(sybxLabel); panel2.add(sybxText); panel2.add(yilbxLabel); panel2.add(yilbxText); panel2.add(gjjLabel); panel2.add(gjjText); // 为按钮 注册事件监听器 //增加行 button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("button-增加行"); //创建一个String数组作为新增行的内容 String[] newCells = new String[12]; for (int i = 0; i < newCells.length; i++) { newCells[i] = ""; } //向TableModel中新增一行。 model.addRow(newCells); } }); //删除选中行 button1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("button1-删除行"); //获取所有选中行 int[] selected = jTable.getSelectedRows(); //依次删除所有选中行 for (int i = selected.length - 1; i >= 0; i--) { model.removeRow(selected[i]); } } }); //计算统发实发 button2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("button3-计算统发实发"); if (jTable.isEditing()) jTable.getCellEditor().stopCellEditing(); if(yalbxText.getText() == null || "".equals(yalbxText.getText())){ JOptionPane.showMessageDialog(null, "请输入养老保险比率", "ERROR_MESSAGE",JOptionPane.ERROR_MESSAGE); return; } if(sybxText.getText() == null || "".equals(sybxText.getText())){ JOptionPane.showMessageDialog(null, "请输入失业保险比率", "ERROR_MESSAGE",JOptionPane.ERROR_MESSAGE); return; } if(yilbxText.getText() == null || "".equals(yilbxText.getText())){ JOptionPane.showMessageDialog(null, "请输入医疗保险比率", "ERROR_MESSAGE",JOptionPane.ERROR_MESSAGE); return; } if(gjjText.getText() == null || "".equals(gjjText.getText())){ JOptionPane.showMessageDialog(null, "请输入公积金比率", "ERROR_MESSAGE",JOptionPane.ERROR_MESSAGE); return; } //获取三险一金比例 BigDecimal yalbxP = new BigDecimal(yalbxText.getText()).divide(new BigDecimal(100)); BigDecimal sybxP = new BigDecimal(sybxText.getText()).divide(new BigDecimal(100)); BigDecimal yilbxP = new BigDecimal(yilbxText.getText()).divide(new BigDecimal(100)); BigDecimal ggjP = new BigDecimal(gjjText.getText()).divide(new BigDecimal(100)); System.out.println(yalbxP+"-"+sybxP+"-"+yilbxP+"-"+ggjP); int rowCount = jTable.getRowCount(); for(int i=0;i<rowCount;i++){ //先获取到基本工资 if(jTable.getValueAt(i, 8) == null || "".equals(jTable.getValueAt(i, 2))){ JOptionPane.showMessageDialog(null, "请输入基本工资", "ERROR_MESSAGE",JOptionPane.ERROR_MESSAGE); return; } String valueAt = (String) jTable.getValueAt(i, 2); System.out.println("基本工资: "+valueAt); BigDecimal jbgzVal = new BigDecimal(valueAt); //通过基本工资算出三险一金 BigDecimal yalbxAmt = jbgzVal.multiply(yalbxP); BigDecimal sybxAmt = jbgzVal.multiply(sybxP); BigDecimal yilbxAmt = jbgzVal.multiply(yilbxP); BigDecimal ggjAmt = jbgzVal.multiply(ggjP); //将算出的三险一金值放入table中 jTable.setValueAt(yalbxAmt, i, 3); jTable.setValueAt(sybxAmt, i, 4); jTable.setValueAt(yilbxAmt, i, 5); jTable.setValueAt(ggjAmt, i, 6); //算出统发实发 BigDecimal tfsfAmt = jbgzVal.subtract(yalbxAmt).subtract(sybxAmt).subtract(yilbxAmt).subtract(ggjAmt); jTable.setValueAt(tfsfAmt, i, 7); } } }); //计算实发合计 button3.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("button3-计算实发合计"); if (jTable.isEditing()) jTable.getCellEditor().stopCellEditing(); int rowCount = jTable.getRowCount(); for(int i=0;i<rowCount;i++){ if(jTable.getValueAt(i, 8) == null || "".equals(jTable.getValueAt(i, 8))){ JOptionPane.showMessageDialog(null, "请输入绩效工资", "ERROR_MESSAGE",JOptionPane.ERROR_MESSAGE); return; } if(jTable.getValueAt(i, 8) == null || "".equals(jTable.getValueAt(i, 9))){ JOptionPane.showMessageDialog(null, "请输入奖金补贴", "ERROR_MESSAGE",JOptionPane.ERROR_MESSAGE); return; } //先获取到绩效工资,奖金补贴 BigDecimal tfsfAmt = (BigDecimal) jTable.getValueAt(i, 7); BigDecimal jxgzAmt = new BigDecimal((String) jTable.getValueAt(i, 8)); BigDecimal jjbtAmt = new BigDecimal((String) jTable.getValueAt(i, 9)); BigDecimal amt3 = tfsfAmt.add(jxgzAmt).add(jjbtAmt); //算出个人所得税 = 统发实发+绩效工资+奖金补贴 个人基数是啥。。个人所得税不是清楚。。。 BigDecimal shui = BigDecimal.valueOf(getShui(amt3.doubleValue(),5000)); jTable.setValueAt(shui, i, 10); //计算实发合计 =统发实发+绩效工资+奖金补贴-个人所得税 BigDecimal sfhjAmt = amt3.subtract(shui); jTable.setValueAt(sfhjAmt, i, 11); } } }); // 设置此表视图的首选大小 jTable.setPreferredScrollableViewportSize(new Dimension(550, 100)); // 将表格加入到滚动条组件中 JScrollPane scrollPane = new JScrollPane(jTable); // 加入到JFrame Container contentPane = this.getContentPane(); contentPane.add(panel1, BorderLayout.NORTH); contentPane.add(panel2, BorderLayout.CENTER); contentPane.add(scrollPane, BorderLayout.SOUTH); this.setSize(1250, 400); this.setTitle("工资计算器"); this.setLocation(100, 100); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } /** * 计算个人所得税 * @param balanceAmount 工资 * @param minimumAmount 个人基数 * @return */ public double getShui(double balanceAmount,int minimumAmount){ if(minimumAmount == 5000) { if(balanceAmount >0 && balanceAmount <=3000){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.03)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); } if(balanceAmount >3000 && balanceAmount <=12000){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.1)).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.valueOf(210)).doubleValue(); } if(balanceAmount >12000 && balanceAmount <=25000){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.2)).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.valueOf(1410)).doubleValue(); } if(balanceAmount >25000 && balanceAmount <=35000){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.25)).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.valueOf(2660)).doubleValue(); } if(balanceAmount >35000 && balanceAmount <=55000){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.3)).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.valueOf(4410)).doubleValue(); } if(balanceAmount >55000 && balanceAmount <=80000){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.35)).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.valueOf(7160)).doubleValue(); } if(balanceAmount >80000 ){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.45)).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.valueOf(15160)).doubleValue(); } }else { if(balanceAmount >0 && balanceAmount <=1500){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.03)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); } if(balanceAmount >1500 && balanceAmount <=4500){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.1)).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.valueOf(105)).doubleValue(); } if(balanceAmount >4500 && balanceAmount <=9000){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.2)).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.valueOf(555)).doubleValue(); } if(balanceAmount >9000 && balanceAmount <=35000){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.25)).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.valueOf(1005)).doubleValue(); } if(balanceAmount >35000 && balanceAmount <=55000){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.3)).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.valueOf(2755)).doubleValue(); } if(balanceAmount >55000 && balanceAmount <=80000){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.35)).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.valueOf(5505)).doubleValue(); } if(balanceAmount >80000 ){ balanceAmount = BigDecimal.valueOf(balanceAmount).multiply(BigDecimal.valueOf(0.45)).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.valueOf(13505)).doubleValue(); } } return balanceAmount; } }
    最新回复(0)