C-员工薪酬的转换报表与If报表?
我正在用C语言编写一个员工薪酬计划,我正在试图找到一种更好的方法来组织计算小时工薪酬的代码。我想使用switch语句,而不是大量的if语句。我只是想知道这是否可能?案例是否需要一个值,还是可以保留为空?例如,我是否可以只使用“case:”而不是“casevalue1:”?我知道如果我使用switch语句,我可能必须使用if来验证用户输入的内容是否有效。还是我应该坚持用一堆if 如果您想知道,以下是我需要遵循的指示:C-员工薪酬的转换报表与If报表?,c,if-statement,switch-statement,nested-if,C,If Statement,Switch Statement,Nested If,我正在用C语言编写一个员工薪酬计划,我正在试图找到一种更好的方法来组织计算小时工薪酬的代码。我想使用switch语句,而不是大量的if语句。我只是想知道这是否可能?案例是否需要一个值,还是可以保留为空?例如,我是否可以只使用“case:”而不是“casevalue1:”?我知道如果我使用switch语句,我可能必须使用if来验证用户输入的内容是否有效。还是我应该坚持用一堆if 如果您想知道,以下是我需要遵循的指示: 公司给员工的报酬是:A)经理,他们得到固定的工资 周薪;b) 小时工,领取固定的
2小时工
3对于佣金工人
计件工人4人 编写一个单独的函数来处理每个paycode类型。使用开关切换到 根据每个员工的工资代码计算每个员工的工资。在内部 开关,提示用户在程序中输入适当的事实 需要根据每位员工的工资代码计算其工资。
酌情添加合理性检查(例如,0-100000之间的工资, 工作时间在0-84之间,小时工资在0-250之间,每周销售 在0-1000000之间,件数在1-1000之间,每件工资 介于0.01–1000之间。使用常量) 以下是程序常数: #包括
// constants
#define MANAGERS 1
#define HOURLY_WORKERS 2
#define COMMISSION_WORKERS 3
#define PIECEWORKERS 4
#define STOP_PROGRAM -1
#define COMMISSION_PERCENT 0.057
#define COMMISSION_PAY 250
#define OVERTIME_HOURS 1.5
#define MAX_HOURS_WORKED 40
以下是我到目前为止为小时工功能编写的代码:
void calcHourlyWorkerPay()
{
float hourlyPayRate;
int totalHoursWorked;
float totalPay;
printf("You entered 2 for Hourly Worker.\n\n");
printf("Enter hourly pay rate.\n"
"(Entry must be between 0 and 250): ");
scanf ("%f", &hourlyPayRate);
printf("Enter total hours worked.\n"
"(Entry must be between 0 and 84): ");
scanf ("%d", &totalHoursWorked);
if ((totalHoursWorked <= MAX_HOURS_WORKED) && (totalHoursWorked >= 84))
{
}
}
void calcHourlyWorkerPay()
{
浮动小时支付率;
工作总小时数;
浮动工资;
printf(“您为小时工输入了2。\n\n”);
printf(“输入小时工资率。\n”
“(输入必须介于0和250之间):”;
scanf(“%f”&小时支付率);
printf(“输入总工作小时数。\n”
“(输入必须介于0和84之间):”;
scanf(“%d”和总工时);
如果((总工时=84))
{
}
}
我问这个问题的原因是因为我想添加验证,如果用户输入的数字不在0和84之间,它会说“输入无效,请输入一个介于0和84之间的数字”。我还想添加验证,如果用户输入的小时费率不在0和250之间,它会说“输入无效,请输入一个介于0和250之间的数字。”我希望我没有混淆任何人。我可能犯了一些错误,我应该指出我对C编程非常陌生
已编辑
我对if语句进行了如下编辑:
if (((totalHoursWorked >= 0) && (totalHoursWorked <= 84)) && ((hourlyPayRate >= 0) && (hourlyPayRate <= 250)))
{
totalPay = totalHoursWorked * hourlyPayRate;
}
else if ((totalHoursWorked <= 0) || (totalHoursWorked >= 84))
{
printf("\n\nINVALID!!! Total hours worked MUST be between 0 and 84.\n\n");
printf("Enter total hours worked.\n"
"(Entry must be between 0 and 84): ");
scanf ("%d", &totalHoursWorked);
}
else if ((hourlyPayRate <= 0) || (hourlyPayRate >= 250))
{
printf("\n\nINVALID!!! Hourly pay rate MUST be between 0 and 250.\n\n");
printf("Enter hourly pay rate.\n"
"(Entry must be between 0 and 250): ");
scanf ("%f", &hourlyPayRate);
}
else
{
totalPay = (MAX_HOURS_WORKED * hourlyPayRate) + ((hoursWorked - MAX_HOURS_WORKED) * hourlyPayRate * OVERTIME_HOURS);
}
如果((totalHoursWorked>=0)和&(totalHoursWorked=0)和&(hourlyPayRate对于一个表达式,您正在检查(totalHoursWorked>=0)是否在一个表达式中,并且(totalHoursWorked您可能需要给出一个例子,说明大量if语句是什么样子的。如果没有其他大小写匹配,则开关中的大小写值是必需的,除非是默认大小写。似乎合理的做法是对employee类型使用一个开关,然后调用一个函数进行计算。这就是calcHourlyWorkerPay函数应该做。它应该为小时工做计算。我没有在这里发布我的全部代码(这样会更有帮助)因为我已经为此大喊大叫了。我看不到代码中任何嵌套的if
语句,除了员工类型之外,我看不到哪里可以使用switch
语句。但是风格上的一句话:去掉#define
s。将员工类型设为enum
并添加全局静态常量代码>其他常数的蚂蚁。1)诸如totalPay=totalHoursWorked*hourlyPayRate;
之类的计算应该四舍五入到最接近的美分。例如totalPay=round(totalHoursWorked*hourlyPayRate*100)/100;
2)“这正确吗?它会工作吗?”含糊不清。请提供具体问题以获得具体答案。1)每次用户输入后,对数据进行限定printf(“输入…”);int count=scanf(“%f”和&hourlyPayRate);if(count!=1 | | | hourlyPayRate<0.0 | | hourlyPayRate>佣金支付)HandleError()
2)建议使用double
而不是float
。