gpt4 book ai didi

C - Switch 语句与员工薪酬的 If 语句?

转载 作者:行者123 更新时间:2023-11-30 17:28:17 24 4
gpt4 key购买 nike

我正在用 C 语言开发一个员工工资程序,我正在尝试找到一种更好的方法来组织计算小时工工资的代码。我想使用 switch 语句,而不是大量的 if 语句。我只是想知道这是否可能?这些案例需要一个值还是可以保留为空?例如,我可以只使用“case:”而不是“case value1:”吗?我知道,如果我确实使用 switch 语句,我可能必须使用 if 来验证用户输入的内容是否有效。或者我应该坚持一堆如果?

如果您想知道,以下是我需要遵循的指示:

  1. 公司向其员工支付以下职位的工资:a) 经理,他们获得固定的报酬周薪; b) 小时工,他们获得固定的小时工资,最高可达他们工作的前 40 个小时是“一个半小时”,即每小时的 1.5 倍加类工资; c) 佣金 worker ,获得 250 美元加 5.7%他们的每周销售额; d) 计件 worker ,每件商品获得固定金额生产的每件元素。

编写一个程序来计算每个员工的周薪。你不知道提前确定员工数量。每种员工类型都有自己的薪资代码:

经理1个
2 小时工
3 佣金工作人员
4 为计件工。

编写一个单独的函数来处理每种支付代码类型。使用开关根据该员工的工资代码计算该员工的工资。之内开关,提示用户输入适当的信息程序需要根据每个员工的工资代码计算该员工的工资。
酌情添加合理性检查(例如,工资在 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))
{

}
}

我问的原因是因为我想为此添加验证,如果用户输入一个不在 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);
}

这是正确的吗?它会起作用吗?

最佳答案

首先,您要检查一个表达式中的 if (totalHoursWorked >= 0) 以及“else”条件中的 (totalHoursWorked <= 0)。与零相等的检查应该只存在于这些检查之一中。您还应该分解出常见的表达式来简化它们 - 例如,您已经检查了诸如totalHoursWorked之类的值是否在一种条件下的范围内,但是如果表达式计算结果为 false,您将进一步重新检查它,因为您已经过于复杂了通过将其与 hourlyPayRate 的检查结合起来。如果您需要知道涉及变量的表达式是否失败,则应将该变量设为该表达式中的唯一变量,并保存对其他值的健全性检查,直到第一个检查通过。

如果重入尝试中的值超出范围,也不清楚会发生什么情况。如果失败,它会要求您重新输入该值,但不会再次检查。您需要将输入和验证逻辑放入一个构造中,该构造将重复直到值在范围内(或者它们表明它们想要退出),无论输入无效值多少次。

由于重点关注常量的使用,因此您用于验证检查的值也应该是常量。

关于C - Switch 语句与员工薪酬的 If 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26080249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com