C语言笔记之个税计算

1. 业务

1.1 月薪个人所得税

2019年的个税制度改得比较复杂,每个月交的都不一样,前面交得少,后面交得多。

  • 个人所得税年度预扣税表

居民个人工资、薪金所得预扣预缴适用

级数 累计预扣预缴应纳税所得额 预扣率(%) 速算扣除数
1 不超过36000元的部分 3 0
2 超过36000元至144000元的部分 10 2520
3 超过144000元至300000元的部分 20 16920
4 超过300000元至420000元的部分 25 31920
5 超过420000元至660000元的部分 30 52920
6 超过660000元至960000元的部分 35 85920
7 超过960000元的部分 45 181920
  • 应纳税所得额
    应纳税所得额=收入-五险一金-免征额
    免征额,又称个税起征点,19年起为5000元。
  • 个人所得税
    个人所得税=应纳税所得额*税率-速算扣除数
  • 速算扣除数
    解决超额累进税率分级计算税额的速算数字。
  • 累计预扣预缴
    以前是以每个月工资金额扣税,19年开始以一年以内按照每个月叠加进行按年计税。
    1月份扣税,以第一个月工资为基数。
    2月份扣税,是以前两个月工资为基数。
    3月份扣税,是以前三个月工资为基数。

    即:累计前n个月的应纳税所得额,乘以查税表得预扣率,减去速算扣除数和前n个月已缴纳的个人所得税,结果就是当前月份的个人所得税。
    第n个月的个人所得税 = 前n个月应纳税所得额之和*税率-速算扣除数 - 前n-1个月的个人所得税
  • 举例:
    小王月薪15000,儿子学校在读,有首套房,教育费1000元与房贷支出1000元由小王扣除。暂不考虑五险一金。
月份 预扣预缴税额计算 税额
1 (15000-5000-1000-1000)*3%-0-0 240
2 2*(15000-5000-1000-1000)*3%-0-240 240
3 3*(15000-5000-1000-1000)3%-0-2402 240
4 4*(15000-5000-1000-1000)3%-0-2403 240
5 5*(15000-5000-1000-1000)10%-2520-2404 520
6 6*(15000-5000-1000-1000)10%-2520-(2404+520) 800
7 7*(15000-5000-1000-1000)10%-2520-(2404+520+800) 800
8 8*(15000-5000-1000-1000)10%-2520-(2404+520+800*2) 800
9 9*(15000-5000-1000-1000)10%-2520-(2404+520+800*3) 800
10 10*(15000-5000-1000-1000)10%-2520-(2404+520+800*4) 800
11 11*(15000-5000-1000-1000)10%-2520-(2404+520+800*5) 800
12 12*(15000-5000-1000-1000)10%-2520-(2404+520+800*6) 800

1.2 年终奖个人所得税

首先将年终奖除以12,分摊到12个月。再查税率表确定税率。
最终个人所得税计算公式为:
年终奖个人所得税=年终奖*税率-速算扣除数

级数 全月缴应纳税所得额 预扣率(%) 速算扣除数
1 不超过3000元的 3 0
2 超过3000元至12000元的部分 10 210
3 超过12000元至25000元的部分 20 1410
4 超过25000元至35000元的部分 25 2660
5 超过35000元至55000元的部分 30 4410
6 超过55000元至80000元的部分 35 7160
7 超过80000元的部分 45 15160

2. 功能

2.1 初级功能

  1. 该软件分为两大功能:月薪个人所得税和年终奖个人所得税
  2. 提示用户选择功能,并且提示用户输入必要的信息(月薪、五险一金、专项扣除等)。
  3. 打印出每个月扣除的税额和实发薪资。

2.2 高级功能

按照下面的条款,打印工资明细

  • 应发工资
  • 缺勤扣款
  • 餐补
  • 社保
  • 公积金
  • 个人所得税
  • 实发工资

代码:

#include <stdio.h>
double tax_table(int a)//年度预扣税表
{
    if(a<=36000)
         return a*0.03;
    else if(a>36000&&a<=144000)
         return a*0.1-2520;
    else if(a>144000&&a<=300000)
         return a*0.2-16920;
    else if(a>300000&&a<=420000)
         return a*0.25-31920;
    else if(a>420000&&a<=660000)
         return a*0.3-52920;
    else if(a>66000&&a<=960000)
         return a*0.35-85920;
    else if(a>960000)
         return a*0.45-181920;
}
double monthly_tax(double a)   //每月个人所得税 a:月薪
{    //第N个月税=前N个月纳税所得额之和-速算扣除数-前N-1个月的个人所得税
    int m;//月份
    double sum=0;//前N-1个月的个人所得税
    double mtax;//每月个人所得税
    for(m=1;m<=12;m++)
    {
       mtax = tax_table(m*(a-a*0.223-5000))-sum;
       sum+=mtax;
       printf("%d月份个人所得税为%.2f元,实发薪资为:%.2f元\n",m,mtax,a-a*0.223-mtax);
    }

}
double monthly_tax_detailed(double a)   //每月工资明细
{    //第N个月税=前N个月纳税所得额之和-速算扣除数-前N-1个月的个人所得税
    int m;//月份
    double sum=0;//前N-1个月的个人所得税
    double mtax;//每月个人所得税
    for(m=1;m<=12;m++)
    {
       mtax = tax_table(m*(a-a*0.223-5000))-sum;
       sum+=mtax;
       printf("%d月份应发工资  缺勤扣款   餐补    社保    公积金    个人所得税    实发工资\n",m);
       printf("%.2f\t%.2f\t %.2f\t %.2f   %.2f\t%.2f\t  %.2f\n",a,0.0,320.0,a*0.103,a*0.12,mtax,a-a*0.223-mtax+320.0);
    }

}
double Annual_bonus(int a)//年终奖个人所得税
{
    int m=a/12;
    if(m<=3000)
         return m*0.03*12;
    else if(m>3000&&m<=12000)
         return (m*0.1-210)*12;
    else if(m>12000&&m<=25000)
         return (m*0.2-1410)*12;
    else if(m>25000&&m<=35000)
         return (m*0.25-2660)*12;
    else if(m>35000&m<=55000)
         return (m*0.3-4410)*12;
    else if(m>55000&m<=80000)
         return (m*0.35-7160)*12;
    else if(m>80000)
         return (m*0.45-15160)*12;
}
void menu()
{
    printf("请输入数字进行相对应的操作\n");
    printf("1.月薪个人所得税查询\n");
    printf("2.年终奖个人所得税查询\n");
    printf("3.打印工资明细\n");
    printf("输入其它数字退出!\n");
}
int main() {
    int a=1;
    double wages;//月薪
    double ywages;//年终奖
    int month;//月份
    while(a)
    {
        menu();
        scanf("%d",&a);
	switch(a)
	{
        case 1 : printf("请输入你的月薪:");
		 scanf("%lf",&wages);
		 monthly_tax(wages);
		 break;
        case 2 : printf("请输入你的年终奖工资:");
                 scanf("%lf",&ywages);
                 printf("年终奖个人所得税为%.3f元,实际年终奖为%.2f元\n",Annual_bonus(ywages),ywages-Annual_bonus(ywages));
                 break;
        case 3 : printf("请输入你的月薪:");
                 scanf("%lf",&wages);
                 monthly_tax_detailed(wages);
                 break;
        default : a=0;break;
	}
    }
	return 0;
}
发布了39 篇原创文章 · 获赞 4 · 访问量 700

猜你喜欢

转载自blog.csdn.net/weixin_44718794/article/details/103927604
今日推荐