私は C で従業員の給与プログラムに取り組んでおり、時給労働者の給与を計算するためのコードを整理するより良い方法を見つけようとしています。if ステートメントを大量に使用する代わりに、switch ステートメントを使用したいと考えています。私はそれが可能かどうか疑問に思っていましたか?ケースには値が必要ですか、それとも空白のままにできますか? たとえば、 「 case value1 : 」の代わりに「case :」だけを使用できますか? switch ステートメントを使用する場合、おそらく if を使用して、ユーザーが入力したものが有効であることを検証する必要があることを知っています。それとも、たくさんの if に固執する必要がありますか?
ご不明な点がある場合は、次の手順に従う必要があります。
- 会社は従業員に次のように支払います。 a) 固定の週給を受け取るマネージャー。b) 時間給労働者。最初の 40 時間までは固定の時給を受け取り、「1.5 時間」、つまり残業時間については時給の 1.5 倍を受け取ります。c) 250 ドルと毎週の売り上げの 5.7% を受け取る委託労働者。または d) 出来高払い労働者。生産された品目ごとに、品目ごとに固定額を受け取ります。
各従業員の週給を計算するプログラムを作成します。従業員数は事前にわかりません。各従業員タイプには、独自の給与コードがあります。
マネージャーの場合は 1
、時給労働者の場合は 2
、委託労働者の場合は 3 、出来高労働者
の場合は 4 です。
各ペイコード タイプを処理する個別の関数を記述します。スイッチを使用して、従業員のペイコードに基づいて各従業員の給与を計算します。スイッチ内で、プログラムが従業員の給与コードに基づいて各従業員の給与を計算するために必要な適切な事実を入力するようにユーザーに促します。
合理性チェックを適切に追加します (例: 給与 0 ~ 100000、労働時間 0 ~ 84、時給 0 ~ 250、週間売上 0 ~ 1000000、個数 1 ~ 1000、1 個あたりの賃金 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
Hourly Worker関数のこれまでのコードは次のとおりです。
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);
}
それは正しいですか、それは機能しますか?