首页 > 其他分享 >计算所得税

计算所得税

时间:2022-08-30 21:11:06浏览次数:32  
标签:收入 所得税 double income rules int 计算 规则

(1)问题描述
一个国家计算所得税的规则由如下的不确定多条规则构成:
M1, R1
M2, R2
...
Mn, Rn
其中,n是规则的条数,由用户输入。对于任意的1<=i<=n,Ri表示个人收入中在区间[Mi, Mi+1)的部分的税率,它是一个整数,代表百分之几。M1为税率起征点,M0=0, R0=0。
(2)问题要求
① 请定义一个结构体,用来存放一条规则。
② 根据用户输入的规则条数,使用结构体的数组存放所有的规则。
③ 定义一个子函数 inputRules(struct Rule rules[], int n),根据用户输入的规则条数,从键盘得到所有规则,存放至数组。
④ 定义一个子函数计算所得税。
// 参数 income 表示个人收入
double computeTax(struct Rule rules[], int n, int income);
⑤ 在主函数中,一次录入规则后,可以循环计算任意多个人的所得税,直到输入的收入为-1 为止。
⑥ 请至少测试以下情况

  • 输入规则后,在录入收入时,直接录入-1;
  • 收入为 0;
  • 收入小于M1;
  • 收入等于Mi的各种情况;
  • 收入大于Mn;
  • 收入在Mn−1和Mn之间的情况。

(3) 程序运行要求
程序的一次运行结果如下:

请输入规则的条数: 3
请输入第 1 条规则: 800 3
请输入第 2 条规则: 2000 4
请输入第 3 条规则: 5000 3

纳税规则如下:
纳税线 税率
800 3
2000 4
5000 36

请输入您的收入: 0
您的收入是: 0,应缴所得税: 0.00 元。

请输入您的收入: 800
您的收入是: 800,应缴所得税: 0.00 元。

请输入您的收入: 801
您的收入是: 801,应缴所得税: 0.03 元。

请输入您的收入: 2000
您的收入是: 2000,应缴所得税: 36.00 元。
(2000 – 800) × 3 / 100

请输入您的收入: 1999
您的收入是: 1999,应缴所得税: 35.97 元。

请输入您的收入: 5000
您的收入是: 5000,应缴所得税: 156.00 元。
[(2000 – 800) × 3 + (5000 – 2000) × 4] / 100
请输入您的收入: 10000
您的收入是: 10000,应缴所得税: 306.00 元。
[(2000 – 800) × 3 + (5000 – 2000) × 4 + (10000 – 5000) × 3] / 100

请输入您的收入: -1
再见
请按任意键继续···

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

struct Rule {          // 表示一条规则的结构体
	double taxLine;    // 纳税线
	double taxRate;    // 税率
};

// 根据用户输入的规则条数,从键盘得到所有规则,存放至数组。
void inputRules(struct Rule rules[], int num); 

// 计算所得税的函数。
double computeTax(struct Rule rules[], int num, double income);

// 根据用户输入的规则条数,打印得到所有规则至屏幕。
void printRules(struct Rule rules[], int num);

int main() {
	int ruleNumber;
	double income;
	double tax;
	struct Rule myrules[50];

	while (true) {
		cout << "请输入规则的条数:";
		cin >> ruleNumber;
		if (ruleNumber > 0) {
			break;
		} else {
			cout << "无效输入,请输入正整数!" << endl;
		}
	}
	inputRules(myrules, ruleNumber);
	printRules(myrules, ruleNumber);
	while (true) {
		while (true) {
			cout << "请输入您的收入(输入-1退出):";
			cin >> income;
			if (income > 0 || income == -1) {
				break;
			} else {
				cout << "无效输入,请输入正数!" << endl;
			}
		}
		if (income == -1) {
			break;
		}
		tax = computeTax(myrules, ruleNumber, income);
		cout << "您的收入是:" << setprecision(2) << fixed << income << "元,应交所得税:"
			<< setprecision(2) << fixed << tax << "元。" << endl;
	}
	cout << "感谢您的使用,再见!";
	return 0;
}

void inputRules(struct Rule rules[], int num) {
	for (int i = 0; i < num; i++) {
		cout << "请输入第 " << i + 1 << " 条规则(纳税线 税率):";
		cin >> (rules + i)->taxLine >> (rules + i)->taxRate;
	}
}

double computeTax(struct Rule rules[], int num, double income) {
	double sum = 0;
	int i;
	if (income > rules->taxLine) {
		for (i = 1; i < num; i++) {
			if (income < (rules + i)->taxLine) {
				sum += (income - (rules + i - 1)->taxLine) * (rules + i - 1)->taxRate / 100;
				break;
			} else {
				sum += ((rules + i)->taxLine - (rules + i - 1)->taxLine) * (rules + i - 1)->taxRate / 100;
			}
		}
		if (i == num) {
			sum += (income - (rules + i - 1)->taxLine) * (rules + i - 1)->taxRate / 100;
		}
	}
	return sum;
}

void printRules(struct Rule rules[], int num) {
	cout << "纳税规则如下:" << endl;
	cout << "   纳税线     税率   " << endl;
	for (int i = 0; i < num; i++) {
		cout << setw(8) << (rules + i)->taxLine << setw(8) << (rules + i)->taxRate << endl;
	}
}

标签:收入,所得税,double,income,rules,int,计算,规则
From: https://www.cnblogs.com/catting123/p/16640822.html

相关文章