工资计算小程序,不通用

闲来无事,写个小计算器自己玩玩。

用法:程序名,社保比率(比如上海为18),工资。

所有的参数中数字的不支持浮点数输入。

程序1:已知税前工资,求税后工资。

program 1:
#include <stdio.h>
#include <ctype.h>
#define ENSBASE 2800
#define TAXBASE 3500

static int suKou[4]={0,25,125,375};
static int taxRate[4]={5,10,15,20};
static int weigh[6] = {0,1,10,100,1000,10000};
static int comp_Num[6] = {1,2,3,4,5,6};

int covToInt(char*);
int getWeigh(int);
float ensCalc(int);
float uSalCalc(float, int);

void main(int arg,char** args)
{
	int ensRate = 0;
	int preSalary = 0;
	float urtlSalary = 0;
	float ensTax = 0;
	char* rate = args[1];
	char* sal = args[2];

	ensRate = covToInt(rate);
	preSalary = covToInt(sal);

	ensTax = ensCalc(ensRate);
	urtlSalary = uSalCalc(ensTax,preSalary);

	printf("ens tax = %f\n",ensTax);
	printf("actual salary = %f\n",urtlSalary);
}

int covToInt(char* parm)
{
	int len = 0;
	int comp_Max = 0;
	int dig[6] = {0};
	int sum = 0;
	while('\0' != *(parm)){
		dig[len++] = toascii(*(parm)) - 48;
		parm++;
	}
	comp_Max = comp_Num[len];
	while(len > 0){
		sum += dig[len-1] * getWeigh(comp_Max-len);
		len--;
	}
	return sum;
}

int getWeigh(int index)
{
	return weigh[index];
}

float ensCalc(int rate)
{
	return ENSBASE * (rate/100.00);
}

float uSalCalc(float ens, int pSal)
{
	float usal = pSal - ens - TAXBASE;
	float outSal = 0;
	while(1){
		if(usal <= 0){
			outSal = pSal - ens;
			break;
		}
		if(usal <= 500.00){
			outSal = pSal - ens - usal*0.05;
			break;
		}
		if(usal <= 2000.00){
			outSal = pSal - ens - usal*0.10 + 25;
			break;
		}
		if(usal <= 5000.00){
			outSal = pSal - ens - usal*0.10 + 125;
			break;
		}
		if(usal <= 20000.00){
			outSal = pSal - ens - usal*0.10 + 375;
			break;
		}else{
			break;
		}
	}
	return outSal;
}

程序2:已知税后工资,求税前工资。

/*
	x: preSalary
	er: ensRate
	tr: taxRate
	s: suKou

	x - (x - base*er)*tr + s = u
	x - x*tr = u- s - base*er*tr
	x= (u- s - base*er*tr)/(1-tr)
*/

#include <stdio.h>
#include <ctype.h>
#define ENSBASE 2800
#define TAXBASE 3500

static int suKou[4]={0,25,125,375};
static int taxRate[4]={5,10,15,20};
static int weigh[6] = {0,1,10,100,1000,10000};
static int comp_Num[6] = {1,2,3,4,5,6};

int covToInt(char*);
int getWeigh(int);
float ensCalc(int);
float pSalCalc(float, int, int, int, float);

void main(int arg,char** args)
{
	int ensRate = 0;
	float preSalary[4] = {0.0};
	float urtlSalary = 0.0;
	float ensTax = 0.0;
	char* rate = args[1];
	char* sal = args[2];
	int i = 0;
	ensRate = covToInt(rate);
	urtlSalary = covToInt(sal);

	ensTax = ensCalc(ensRate);
	printf("ens tax = %f\n",ensTax);

	while(i < 4){
	    preSalary[i] = pSalCalc(urtlSalary,suKou[i],ensRate,taxRate[i],ensTax);
	    printf("preTax salary = %f\n",preSalary[i]);

		printf("\n");
		i++;
	}
}

int covToInt(char* parm)
{
	int len = 0;
	int comp_Max = 0;
	int dig[6] = {0};
	int sum = 0;
	while('\0' != *(parm)){
		dig[len++] = toascii(*(parm)) - 48;
		parm++;
	}
	comp_Max = comp_Num[len];
	while(len > 0){
		sum += dig[len-1] * getWeigh(comp_Max-len);
		len--;
	}
	return sum;
}

int getWeigh(int index)
{
	return weigh[index];
}

/* x= (u- s - base*er*tr)/(1-tr) */

float pSalCalc(float uSal, int s, int er, int tr, float ens)
{
	float outSal = (uSal - s - (TAXBASE*(er/100.0)*(tr/100.0)))/(1 - (tr/100.00));

	if(outSal <= 3500.00){
		outSal = uSal + ens;
	}
	return outSal;
}

float ensCalc(int rate)
{
	return ENSBASE * (rate/100.00);
}



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值