问题描述
代码部分:
#include <iostream>
#include<iomanip>
using namespace std;
struct Rule
{
int M;
int R;
};
//输入规则
void inputRules(struct Rule rules[], int n)
{
int m = 0, r = 0;
for (int i = 0; i < n; i++)
{
cout << "请输入第" << i+1 << "条规则:";
cin >> m >> r;
rules[i].M = m;
rules[i].R = r;
}
}
//计算税收
double computeTax(struct Rule rules[], int n, int income)
{
double tax=0.00;
int taxflag=0;//设定一个标签,看工资卡在哪一个段
for (int i = 0; i < n; i++)
{
if (income >= rules[i].M)
taxflag = i;
}
if (taxflag == 0)
{
if (income <= rules[taxflag].M)//低于起征线的情况
{
return tax;
}
else {
//高于第一条规则而小于第二条规则的情况
tax =double (income - rules[taxflag].M)*rules[taxflag].R / 100;
return tax;
}
}
else
{
//剩余的普遍的情况
for (int i = 1; i <= taxflag; i++)
{
tax += double((rules[i].M - rules[i - 1].M)*rules[i - 1].R/100);
}
tax += double(income - rules[taxflag].M)*rules[taxflag].R/ 100;
return tax;
}
}
void printRules(struct Rule rules[],int numRules)
{
cout << "纳税规则如下:" << endl;
cout << "纳税线 " << "税率" << endl;
for (int i = 0; i < numRules; i++)
{
cout << rules[i].M << " " << rules[i].R << endl;
}
};
int main()
{
int income=1;
int numRules;
double tax = 0.00;
cout << "请输入规则的条数:";
cin >> numRules;
Rule rules[20];
inputRules(rules, numRules);
printRules(rules, numRules);
while (1)
{
cout << "请输入您的收入:" ;
cin >> income;
//输入为-1的时候跳出循环
if (income == -1)
{
cout << "再见" << endl;
break;
}
cout << "您的收入是:" << income;
tax = computeTax(rules, numRules, income);
cout << ",应缴所得税:" << setiosflags(ios::fixed) << setprecision(2) << tax << "元" << endl;
}
system("pause");
return 0;
}