Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-员工薪酬的转换报表与If报表?_C_If Statement_Switch Statement_Nested If - Fatal编程技术网

C-员工薪酬的转换报表与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) 小时工,领取固定的

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

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

  • 公司给员工的报酬是:A)经理,他们得到固定的工资 周薪;b) 小时工,领取固定的小时工资,最高工资为 他们工作的前40个小时是“一个半小时”,即每小时工作时间的1.5倍 加班工资;c) 佣金工人,他们获得250美元加5.7%的佣金 他们每周的销售额;或d)计件工人,他们为每项工作收取固定金额 生产的每一件物品
  • 编写一个程序来计算每个员工的周工资。你不知道这是怎么回事 提前通知员工人数。每种员工类型都有自己的薪酬代码:

    1适用于经理
    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