我正在研究C中的员工薪酬计划,我正在努力寻找一种更好的方法来组织计算小时工薪酬的代码。我想使用switch语句,而不是使用ifload语句。我只是想知道这是否可能?案件是需要一个价值还是可以保持空白?例如,我可以只使用“案例:”而不是“案例 value1 :”?我知道如果我使用switch语句,我可能必须使用它来验证用户输入的内容是否有效。或者我应该坚持一堆if??
如果您想知道,以下是我需要遵循的指示:
编写一个程序来计算每位员工的每周工资。你不知道 提前雇员人数。每种员工类型都有自己的薪资代码:
1为经理人 2小时工人 委员会工人3 4为Pieceworkers。
编写一个单独的函数来处理每种付费代码类型。使用开关 根据该员工的薪资代码计算每个员工的薪酬。内 切换,提示用户输入相应的事实程序 需要根据该员工的薪资来计算每个员工的薪酬 适当时添加合理性检查(例如,0到100000之间的工资, 工作时间在0-84之间,每小时工作在0-250之间,每周销售 在0 - 1000000之间,件数在1 - 1000之间,每件工资 介于0.01 - 1000之间。使用常数)。
以下是程序常量: #include
// 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))
{
}
}
我问的原因是因为我想在此处添加验证,如果用户输入的数字不在0到84之间,它会说“条目无效,请输入0到84之间的数字”。 “我还想添加验证,如果用户输入的小时费率不在0到250之间,则会显示“条目无效,请输入0到250之间的数字”。我希望我没有混淆任何人。我可能犯了一些错误,我应该指出我对C编程非常陌生。
EDITED
我编辑了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);
}
这是否正确,是否有效?
答案 0 :(得分:0)
首先,您要检查一个表达式中是否(totalHoursWorked&gt; = 0),并且&#34; else&#34;中的(totalHoursWorked&lt; = 0)条件。对零等式的检查应仅存在于其中一个检查中。您还应该将常用表达式分解出来以简化它们 - 例如,您已经检查了像totalHoursWorked这样的值是否在一个条件的范围内,但如果表达式的计算结果为false,则您需要进一步重新检查它,因为您&# 39;通过将它与hourlyPayRate的检查相结合,使其过于复杂。如果您需要知道涉及变量的表达式是否失败,您应该将其作为该表达式中唯一的变量,并保存其他值的完整性检查,直到第一次检查通过。
如果重新尝试的值超出范围,也不清楚会发生什么。如果失败,则会要求您重新输入值,但不会再次检查。您需要将条目和验证逻辑放在一个构造中,该构造将重复,直到值在范围内(或者它们表示它们想要退出),无论它们输入无效值多少次。
由于我们专注于使用常量,因此您用于验证检查的值也应保持不变。