工資計算小程序,不通用

閒來無事,寫個小計算器自己玩玩。

用法:程序名,社保比率(比如上海爲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);
}



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章