public class PersonTax
{
private decimal _CalAmount = 0.00;
private static decimal _DeductBase = 1100;
private decimal _CalBase = 0.00;
private decimal _TaxRate = 0.00;
private decimal _TaxDeduct = 0.00;
private decimal _Tax = 0.00;
private Tax_Amount_Rate_Deduct[] arr_Tax_Amount_Rate_Deduct = null;
private int _RateCount = 0;
private decimal _MaxTaxRate = 0.45;
private decimal _MaxTaxDeduct = 15375;
pubic decimal CalAmount
{
get
{
return _CalAmount;
}
set
{
if (_CalAmount != value)
{
_CalAmount = value;
Calculate();
}
}
}
public static decimal DeductBase
{
get
{
return _DeductBase;
}
set
{
if (_DeductBase != value)
{
_DeductBase = value;
CalCulate();
}
}
}
public PersonTax
{
_CalAmount = 0.00;
Calculate();
}
public PersonTax(decimal nCalAmount,decimal nDeductBase)
{
_CalAmount = nCalAmount;
_DeductBase = nDeductBase;
Calculate();
}
public PersonTax(decimal nCalAmount)
{
_CalAmount = nCalAmount;
Calculate();
}
public void Calculate()
{
_CalBase = _CalAmount - _DeductBase;
if (_RateCount == 0 || _CalAmount <= _DeductBase)
{
_TaxRate = 0.00;
_TaxDeduct = 0.00;
_Tax = 0.00;
return;
}
if ( _CalBase > arr_Tax_Amount_Rate_Deduct[i]._Amount[_RateCount-1]._Amount)
{
_TaxRate = _MaxTaxRate;
_TaxDeduct = _MaxTaxDeduct;
_Tax = Round(_CalBase * _TaxRate,2) - _TaxDeduct;
return;
}
for (int i=0; i<_RateCount; i++)
{
if (_CalBase <= arr_Tax_Amount_Rate_Deduct[i]._Amount)
{
_TaxRate = arr_Tax_Amount_Rate_Deduct[i]._Rate;
_TaxDeduct = arr_Tax_Amount_Rate_Deduct[i]._Deduct;
_Tax = Round(_CalBase * _TaxRate,2) - _TaxDeduct;
return;
}
}
}
public void PushRate(decimal nAmount,decimal nRate,decimal nDeduct)
{
if (_RateCount == 0)
{
_RateCount ++;
arr_Tax_Amount_Rate_Deduct = new Tax_Amount_Rate_Deduct[_RateCount];
arr_Tax_Amount_Rate_Deduct[0] = new Tax_Amount_Rate_Deduct(nAmount,nRate,nDeduct);
}
else
{
_RateCount ++;
bool lFind = false;
int nCnt = 0;
Tax_Amount_Rate_Deduct[] temp_Tax_Amount_Rate_Deduct = new Tax_Amount_Rate_Deduct[_RateCount];
for (int i=0; i<_RateCount; i++)
{
if (nAmount = arr_Tax_Amount_Rate_Deduct[i]._Amount)
{
arr_Tax_Amount_Rate_Deduct[i].SetData(nAmount,nRate,nDeduct);
_RateCount--;
return;
}
else if(lFind == false && nAmount < arr_Tax_Amount_Rate_Deduct[i]._Amount)
{
temp_Tax_Amount_Rate_Deduct[++nCnt] = new Tax_Amount_Rate_Deduct(nAmount,nRate,nDeduct);
lFind = true;
}
else if(lFind == false)
{
if (i < _RateCount - 1)
{
temp_Tax_Amount_Rate_Deduct[++nCnt] = arr_Tax_Amount_Rate_Deduct[i];
}
else
{
temp_Tax_Amount_Rate_Deduct[++nCnt] = new Tax_Amount_Rate_Deduct(nAmount,nRate,nDeduct);
}
}
else if(lFind == true)
{
temp_Tax_Amount_Rate_Deduct[++nCnt] = arr_Tax_Amount_Rate_Deduct[i-1]
}
}
arr_Tax_Amount_Rate_Deduct = temp_Tax_Amount_Rate_Deduct;
}
}
public void PopRate(decimal nAmount)
{
if(_RateCount == 0)
{
return;
}
bool lFind = false;
_RateCount--;
int nCnt = 0;
Tax_Amount_Rate_Deduct[] temp_Tax_Amount_Rate_Deduct = new Tax_Amount_Rate_Deduct[_RateCount];
for (int i=0; i<_RateCount+1; i++)
{
if (lFind == false && nAmount = arr_Tax_Amount_Rate_Deduct[i]._Amount)
{
lFind == true;
}
else if (lFind == false)
{
if (i < _RateCount)
{
temp_Tax_Amount_Rate_Deduct[++nCnt] = arr_Tax_Amount_Rate_Deduct[i];
}
}
else if (lFind == true)
{
temp_Tax_Amount_Rate_Deduct[++nCnt] = arr_Tax_Amount_Rate_Deduct[i-1];
}
}
if (lFind == false)
{
_RateCount ++;
return;
}
arr_Tax_Amount_Rate_Deduct = temp_Tax_Amount_Rate_Deduct;
}
}
public class Tax_Amount_Rate_Deduct
{
public decimal _Amount = 0.00;
public decimal _Rate = 0.00;
public decimal _Deduct = 0.00;
public Tax_Amount_Rate_Deduct()
{
SetData(0.00,0.00,0.00);
}
public Tax_Amount_Rate_Deduct(decimal nAmount,decimal nRate,decimal nDeduct)
{
SetData(nAmount,nRate,nDeduct);
}
public void SetData(decimal nAmount,decimal nRate,decimal nDeduct)
{
_Amount = nAmount;
_Rate = nRate;
_Deduct = nDeduct;
}
public void CopyDate(Tax_Amount_Rate_Deduct oTemp)
{
SetDate(oTemp._Amount,oTemp._Rate,oTemp._Deduct);
}
}
{
private decimal _CalAmount = 0.00;
private static decimal _DeductBase = 1100;
private decimal _CalBase = 0.00;
private decimal _TaxRate = 0.00;
private decimal _TaxDeduct = 0.00;
private decimal _Tax = 0.00;
private Tax_Amount_Rate_Deduct[] arr_Tax_Amount_Rate_Deduct = null;
private int _RateCount = 0;
private decimal _MaxTaxRate = 0.45;
private decimal _MaxTaxDeduct = 15375;
pubic decimal CalAmount
{
get
{
return _CalAmount;
}
set
{
if (_CalAmount != value)
{
_CalAmount = value;
Calculate();
}
}
}
public static decimal DeductBase
{
get
{
return _DeductBase;
}
set
{
if (_DeductBase != value)
{
_DeductBase = value;
CalCulate();
}
}
}
public PersonTax
{
_CalAmount = 0.00;
Calculate();
}
public PersonTax(decimal nCalAmount,decimal nDeductBase)
{
_CalAmount = nCalAmount;
_DeductBase = nDeductBase;
Calculate();
}
public PersonTax(decimal nCalAmount)
{
_CalAmount = nCalAmount;
Calculate();
}
public void Calculate()
{
_CalBase = _CalAmount - _DeductBase;
if (_RateCount == 0 || _CalAmount <= _DeductBase)
{
_TaxRate = 0.00;
_TaxDeduct = 0.00;
_Tax = 0.00;
return;
}
if ( _CalBase > arr_Tax_Amount_Rate_Deduct[i]._Amount[_RateCount-1]._Amount)
{
_TaxRate = _MaxTaxRate;
_TaxDeduct = _MaxTaxDeduct;
_Tax = Round(_CalBase * _TaxRate,2) - _TaxDeduct;
return;
}
for (int i=0; i<_RateCount; i++)
{
if (_CalBase <= arr_Tax_Amount_Rate_Deduct[i]._Amount)
{
_TaxRate = arr_Tax_Amount_Rate_Deduct[i]._Rate;
_TaxDeduct = arr_Tax_Amount_Rate_Deduct[i]._Deduct;
_Tax = Round(_CalBase * _TaxRate,2) - _TaxDeduct;
return;
}
}
}
public void PushRate(decimal nAmount,decimal nRate,decimal nDeduct)
{
if (_RateCount == 0)
{
_RateCount ++;
arr_Tax_Amount_Rate_Deduct = new Tax_Amount_Rate_Deduct[_RateCount];
arr_Tax_Amount_Rate_Deduct[0] = new Tax_Amount_Rate_Deduct(nAmount,nRate,nDeduct);
}
else
{
_RateCount ++;
bool lFind = false;
int nCnt = 0;
Tax_Amount_Rate_Deduct[] temp_Tax_Amount_Rate_Deduct = new Tax_Amount_Rate_Deduct[_RateCount];
for (int i=0; i<_RateCount; i++)
{
if (nAmount = arr_Tax_Amount_Rate_Deduct[i]._Amount)
{
arr_Tax_Amount_Rate_Deduct[i].SetData(nAmount,nRate,nDeduct);
_RateCount--;
return;
}
else if(lFind == false && nAmount < arr_Tax_Amount_Rate_Deduct[i]._Amount)
{
temp_Tax_Amount_Rate_Deduct[++nCnt] = new Tax_Amount_Rate_Deduct(nAmount,nRate,nDeduct);
lFind = true;
}
else if(lFind == false)
{
if (i < _RateCount - 1)
{
temp_Tax_Amount_Rate_Deduct[++nCnt] = arr_Tax_Amount_Rate_Deduct[i];
}
else
{
temp_Tax_Amount_Rate_Deduct[++nCnt] = new Tax_Amount_Rate_Deduct(nAmount,nRate,nDeduct);
}
}
else if(lFind == true)
{
temp_Tax_Amount_Rate_Deduct[++nCnt] = arr_Tax_Amount_Rate_Deduct[i-1]
}
}
arr_Tax_Amount_Rate_Deduct = temp_Tax_Amount_Rate_Deduct;
}
}
public void PopRate(decimal nAmount)
{
if(_RateCount == 0)
{
return;
}
bool lFind = false;
_RateCount--;
int nCnt = 0;
Tax_Amount_Rate_Deduct[] temp_Tax_Amount_Rate_Deduct = new Tax_Amount_Rate_Deduct[_RateCount];
for (int i=0; i<_RateCount+1; i++)
{
if (lFind == false && nAmount = arr_Tax_Amount_Rate_Deduct[i]._Amount)
{
lFind == true;
}
else if (lFind == false)
{
if (i < _RateCount)
{
temp_Tax_Amount_Rate_Deduct[++nCnt] = arr_Tax_Amount_Rate_Deduct[i];
}
}
else if (lFind == true)
{
temp_Tax_Amount_Rate_Deduct[++nCnt] = arr_Tax_Amount_Rate_Deduct[i-1];
}
}
if (lFind == false)
{
_RateCount ++;
return;
}
arr_Tax_Amount_Rate_Deduct = temp_Tax_Amount_Rate_Deduct;
}
}
public class Tax_Amount_Rate_Deduct
{
public decimal _Amount = 0.00;
public decimal _Rate = 0.00;
public decimal _Deduct = 0.00;
public Tax_Amount_Rate_Deduct()
{
SetData(0.00,0.00,0.00);
}
public Tax_Amount_Rate_Deduct(decimal nAmount,decimal nRate,decimal nDeduct)
{
SetData(nAmount,nRate,nDeduct);
}
public void SetData(decimal nAmount,decimal nRate,decimal nDeduct)
{
_Amount = nAmount;
_Rate = nRate;
_Deduct = nDeduct;
}
public void CopyDate(Tax_Amount_Rate_Deduct oTemp)
{
SetDate(oTemp._Amount,oTemp._Rate,oTemp._Deduct);
}
}
解决方案 »
- C#开发的后台WebService返回的XML里,如果字段为null值,则不显示,怎么解决?
- 编码问题:"安哥拉\x28中\x29",如何转化成“安哥拉(中)”?
- 请问VS2005转换成VS2008C出现异常如何解决
- c# winform中DateTimePicker 如何赋值?
- 急求:字符串或者数组形式的一组数字比较
- 安裝vs 2005 sp1 問題
- 怎样让程序一启动就到托盘?
- 请问怎么样可以把VB中的颜色放到C#中去使用
- 求助,求助!!!关于TemplateField
- button调用dataGridView1_CellContentClick 参数该怎么写
- 关于ImageList的一个很奇怪的问题
- 把excel 文件导入到 datagrid 里面出现了问题,请高手指点?急!!!
PUSHRATE 增加一个税率,如果税额相同,则不增加,直接修改相应的税率和速算扣除数,按税额大于排序,
POPRATE 删除一个税率,如果找到指定的税额,则予以删除,否则不变,还是按税额大于排序