信手拈来 妙手偶得 » 日志 » 【原创】薪水计算续
【原创】薪水计算续
Junglesong 发表于 2008-04-05 14:52:44
本文是 "从薪水计算的例子看一段程序在不同环境中的变化 " 的续文.
如果需求发生如下变化:
代码如下:
SalaryGrade类:
package com.sitinspring.oostyleadv;


/** *//**
* 工资等级类
* @author sitinspring(junglesong@gmail.com)
*
*/

public class SalaryGrade
{
// 月薪界限
protected double grade;

// 税率
protected double ratio;

// 折扣
protected double discount;


public SalaryGrade(double grade, double ratio, double discount)
{
this.grade = grade;
this.ratio = ratio;
this.discount = discount;
}

public double getSalaryAfterTax(double salary)
{
return salary*(1-ratio)-discount;
}


public SalaryGrade()
{
this(0.0f, 0.0f, 0.0f);
}


public double getDiscount()
{
return discount;
}


public double getGrade()
{
return grade;
}


public double getRatio()
{
return ratio;
}
}
HigherSalaryGrade类:
package com.sitinspring.oostyleadv;


/** *//**
* 超高收入工资等级类
* @author sitinspring(junglesong@gmail.com)
*
*/

public class HigherSalaryGrade extends SalaryGrade
{

public HigherSalaryGrade(double grade, double ratio, double discount)
{
super(grade,ratio,discount);
}

public double getSalaryAfterTax(double salary)
{
return (salary*(1-ratio)-discount)*0.8;
}


public HigherSalaryGrade()
{
this(0.0f, 0.0f, 0.0f);
}
}
LowerSalaryGrade类:
package com.sitinspring.oostyleadv;


/** *//**
* 低保工资等级类
* @author sitinspring(junglesong@gmail.com)
*
*/

public class LowerSalaryGrade extends SalaryGrade
{

public LowerSalaryGrade(double grade, double ratio, double discount)
{
super(grade,ratio,discount);
}

public double getSalaryAfterTax(double salary)
{
return salary*(1-ratio)-discount+300;
}


public LowerSalaryGrade()
{
this(0.0f, 0.0f, 0.0f);
}
}
SalaryCaculator类:
package com.sitinspring.oostyleadv;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


/** *//**
* 工资计算类
* @author sitinspring(junglesong@gmail.com)
*
*/

public class SalaryCaculator
{
private List<SalaryGrade> grades;

public SalaryCaculator()
{
grades=new ArrayList<SalaryGrade>();
grades.add(new LowerSalaryGrade(500,0.05,0));
grades.add(new SalaryGrade(2000,0.1,25));
grades.add(new SalaryGrade(5000,0.15,125));
grades.add(new SalaryGrade(20000,0.20,375));
grades.add(new HigherSalaryGrade(99999999,0.25,1375));
}
// OO化的查询方法

public double getSalaryAfterTax(double total)
{
SalaryGrade taxGrade=null;

for(Iterator it=grades.iterator();it.hasNext();)
{
taxGrade=(SalaryGrade)it.next();

if(total>taxGrade.getGrade())
{
continue;
}

else
{
break;
}
}
return taxGrade.getSalaryAfterTax(total);
}
}
Main:
package com.sitinspring.oostyleadv;


/** *//**
* Main函数所在的类
* @author sitinspring(junglesong@gmail.com)
*
*/

public class Main
{

public static void main(String[] args)
{
SalaryCaculator caculator=new SalaryCaculator();

for(double total=100;total<30000;total+=1000)
{
System.out.println("税前薪水="+total+" 税后薪水="+caculator.getSalaryAfterTax(total));
}
}
}
代码下载:
http://www.blogjava.net/Files/sitinspring/TaxCaculator20071115120519.rar
如果需求发生如下变化:
如果说国家改变了公民福利制度,具体就是500元以下的每人补充300元,超过20000元的在原有基础上再扣除20%,请问该如何编程?
具体等级税率:
等级 税率 额定扣除数
不超过500元 5% 0 (低保每人补助300元)
大于500小于2000 10% 25
大于2000小于5000 15% 125
大于5000小于20000 20% 375
超过20000元 25% 1375(在计算完的基础上再乘以80%)
这时原有公式就不适用了,我们没有必要回到分支语句的老路上去,将计算公式归并成SalaryGrade的一个函数getSalaryAfterTax,然后从SalaryGrade分别扩展两个类HigherSalaryGrade和LowerSalaryGrade,然后分别实现各自的getSalaryAfterTax函数即可.
代码如下:
SalaryGrade类:
package com.sitinspring.oostyleadv;

/** *//**
* 工资等级类
* @author sitinspring(junglesong@gmail.com)
*
*/
public class SalaryGrade
{
// 月薪界限
protected double grade;
// 税率
protected double ratio;
// 折扣
protected double discount;

public SalaryGrade(double grade, double ratio, double discount)
{
this.grade = grade;
this.ratio = ratio;
this.discount = discount;
}

public double getSalaryAfterTax(double salary)
{
return salary*(1-ratio)-discount;
}

public SalaryGrade()
{
this(0.0f, 0.0f, 0.0f);
}

public double getDiscount()
{
return discount;
}

public double getGrade()
{
return grade;
}

public double getRatio()
{
return ratio;
}
}HigherSalaryGrade类:
package com.sitinspring.oostyleadv;

/** *//**
* 超高收入工资等级类
* @author sitinspring(junglesong@gmail.com)
*
*/
public class HigherSalaryGrade extends SalaryGrade
{
public HigherSalaryGrade(double grade, double ratio, double discount)
{
super(grade,ratio,discount);
}

public double getSalaryAfterTax(double salary)
{
return (salary*(1-ratio)-discount)*0.8;
}

public HigherSalaryGrade()
{
this(0.0f, 0.0f, 0.0f);
}
}LowerSalaryGrade类:
package com.sitinspring.oostyleadv;

/** *//**
* 低保工资等级类
* @author sitinspring(junglesong@gmail.com)
*
*/
public class LowerSalaryGrade extends SalaryGrade
{
public LowerSalaryGrade(double grade, double ratio, double discount)
{
super(grade,ratio,discount);
}

public double getSalaryAfterTax(double salary)
{
return salary*(1-ratio)-discount+300;
}

public LowerSalaryGrade()
{
this(0.0f, 0.0f, 0.0f);
}
}SalaryCaculator类:
package com.sitinspring.oostyleadv;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/** *//**
* 工资计算类
* @author sitinspring(junglesong@gmail.com)
*
*/
public class SalaryCaculator
{
private List<SalaryGrade> grades;

public SalaryCaculator()
{
grades=new ArrayList<SalaryGrade>();
grades.add(new LowerSalaryGrade(500,0.05,0));
grades.add(new SalaryGrade(2000,0.1,25));
grades.add(new SalaryGrade(5000,0.15,125));
grades.add(new SalaryGrade(20000,0.20,375));
grades.add(new HigherSalaryGrade(99999999,0.25,1375));
}
// OO化的查询方法
public double getSalaryAfterTax(double total)
{
SalaryGrade taxGrade=null;

for(Iterator it=grades.iterator();it.hasNext();)
{
taxGrade=(SalaryGrade)it.next();

if(total>taxGrade.getGrade())
{
continue;
}
else
{
break;
}
}
return taxGrade.getSalaryAfterTax(total);
}
}Main:
package com.sitinspring.oostyleadv;

/** *//**
* Main函数所在的类
* @author sitinspring(junglesong@gmail.com)
*
*/
public class Main
{
public static void main(String[] args)
{
SalaryCaculator caculator=new SalaryCaculator();

for(double total=100;total<30000;total+=1000)
{
System.out.println("税前薪水="+total+" 税后薪水="+caculator.getSalaryAfterTax(total));
}
}
}代码下载:
http://www.blogjava.net/Files/sitinspring/TaxCaculator20071115120519.rar
曾经的这一天...
- » 2007年: 【转贴】表格特效整理
- » 2007年: 【整理】使用CSS隐藏和显式页面单元
- » 2007年: 【转贴】曾国藩语录
- » 2007年: 【转贴】中国古代百句经典名言
- » 2007年: 【转贴】修身格言集锦100条
- » 2007年: 【转贴】人脉存折--成功的轨迹
- » 2007年: 【转贴】英文写作佳句300例
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾
