#include <stdio.h>
int main(int argc,char* argv[])
{
int nBase = 1500,nPerformance = 0,nTemp = 0,nRes = 0;
int nDuty = 0,nInvigilate = 0,nClass = 0;
double fReserve = 0.0;
printf("輸入老師值班天數(不少於5天,不能超過22天):");
nRes = scanf("%d",&nDuty);
while(nRes == 1)
{
if (nDuty >= 5 && nDuty <= 22)
{
break;
}
else if (nDuty < 0)
{
printf("輸入數據有誤,請輸入整數!\n");
}
else
{
printf("輸入范圍有誤,請輸入整數!\n");
}
printf("輸入老師值班天數(不少於5天,不能超過22天):");
nRes = scanf("%d",&nDuty);
}
printf("輸入老師監考次數(不能超過10次):");
nRes = scanf("%d",&nInvigilate);
while(nRes == 1)
{
if (nInvigilate >= 0 && nInvigilate <= 10)
{
break;
}
else if (nInvigilate < 0)
{
printf("輸入數據有誤,請輸入整數!\n");
}
else
{
printf("輸入范圍有誤,請輸入整數!\n");
}
printf("輸入老師監考次數(不能超過10次):");
nRes = scanf("%d",&nInvigilate);
}
printf("輸入老師上課次數(不能超過30次):");
nRes = scanf("%d",&nClass);
while(nRes == 1)
{
if (nClass >= 0 && nClass <= 30)
{
break;
}
else if (nClass < 0)
{
printf("輸入數據有誤,請輸入整數!\n");
}
else
{
printf("輸入范圍有誤,請輸入整數!\n");
}
printf("輸入老師上課次數(不能超過30次):");
nRes = scanf("%d",&nClass);
}
nPerformance = (nDuty * 60) + (nInvigilate * 30) + (nClass * 64);
nTemp = nPerformance + nBase;
if (nTemp > 5000)
{
fReserve = (nTemp - 5000) * 0.25 + 1000 * 0.2 + 2000 * 0.15 + 2000 * 0.1;
}
else if (nTemp > 4000 && nTemp < 5000)
{
fReserve = (nTemp - 4000) * 0.2 + 2000 * 0.15 + 2000 * 0.1;
}
else if (nTemp > 2000 && nTemp < 4000)
{
fReserve = (nTemp - 2000) * 0.15 + 2000 * 0.1;
}
else if (nTemp < 2000)
{
fReserve = (float)(nTemp * 0.1);
}
printf("績效工資總額是%d\n",nPerformance);
printf("工資總額是%d\n",nTemp);
printf("需要繳納的公積金是%0.2f\n",fReserve);
return 0;
}
可以參考參考
#include <stdio.h>
#include <windows.h>
void Input(int &nDuty, int &nInvigilate,int &nClass);//獲取值班天數、監考次數、上課次數
void Calclate(int nDuty, int nInvigilate,int nClass);//計算工資、公積金等
int main(int argc,char* argv[])
{
int nDuty = 0,nInvigilate = 0,nClass = 0;
Input(nDuty, nInvigilate, nClass);
Calclate(nDuty, nInvigilate, nClass);
return 0;
}
//輸入是否為合法數據 str為獲取的字符串,minValue為合法的最小值,maxValue為合法的最大值
//返回值 合法,返回輸入的整數,不合法返回0
int IsLegalInput(const char * str, int minValue, int maxValue)
{
int i = 0;
int strValue = 0;
int strLength = strlen(str);//數據長度
for (i = 0; i < strLength; i++)
{
if(('0' == str[i]) || ('1' == str[i]) || ('2' == str[i]) || ('3' == str[i]) || ('4' == str[i]) || ('5' == str[i])
|| ('6' == str[i]) || ('7' == str[i]) || ('8' == str[i]) || ('9' == str[i]))
{
break;
}
else // 輸入的不是整數
{
printf("輸入數據有誤,請輸入整數!\n");
return 0;
}
}
//確認是整數了
strValue = atoi(str);
if (strValue < minValue || maxValue < strValue )
{
printf("輸入范圍有誤,請輸入%d到%d的整數!\n", minValue, maxValue);
return 0;
}
return strValue;
}
void Input(int &nDuty, int &nInvigilate,int &nClass)
{
int rt;
char input[10];
//輸入老師值班天數
do
{
printf("輸入老師值班天數(不少於5天,不能超過22天):");
scanf("%s",input);
rt = nDuty = IsLegalInput(input, 5, 22);//是否為合法輸入
} while (!rt);
//輸入老師監考次數
do
{
printf("輸入老師監考次數(不能超過10次):");
scanf("%s",input);
rt = nInvigilate = IsLegalInput(input, 1, 10);//是否為合法輸入
} while (!rt);
//輸入老師上課次數
do
{
printf("輸入老師上課次數(不能超過30次):");
scanf("%s",input);
rt = nClass = IsLegalInput(input, 1, 30);//是否為合法輸入
} while (!rt);
}
//計算工資、公積金等
void Calclate(int nDuty, int nInvigilate,int nClass)
{
int nPerformance = 0;
int nTemp = 0;
int nBase = 1500;
nPerformance = (nDuty * 60) + (nInvigilate * 30) + (nClass * 64);
nTemp = nPerformance + nBase;
double fReserve = 0.0;
if (nTemp > 5000)
{
fReserve = (nTemp - 5000) * 0.25 + 1000 * 0.2 + 2000 * 0.15 + 2000 * 0.1;
}
else if (nTemp > 4000 && nTemp < 5000)
{
fReserve = (nTemp - 4000) * 0.2 + 2000 * 0.15 + 2000 * 0.1;
}
else if (nTemp > 2000 && nTemp < 4000)
{
fReserve = (nTemp - 2000) * 0.15 + 2000 * 0.1;
}
else if (nTemp < 2000)
{
fReserve = (float)(nTemp * 0.1);
}
printf("績效工資總額是%d\n",nPerformance);
printf("工資總額是%d\n",nTemp);
printf("需要繳納的公積金是%0.2f\n",fReserve);
}