0

これは、両方のチェック ボックスが選択されている場合の希望する入力です。

* *入力: 時間 = 45、レート 10.00、医療/歯科と 401k の両方のチェック ボックスがオン

ここに私が期待する出力があります:

· アウトプット: 総賃金 = 475.00、医療/歯科控除 = 50.00、401k 控除 = 23.75、税金 = 100.31、正味賃金 = 300.94**

ただし、計算ボタンを押して両方のチェックボックスを選択した後にプロジェクトを実行すると、次のように表示されます (名前は無視してください)。

名前: ジョー 時間: 45 レート: 10.00 総給与: $400.00 税金: $112.50 正味給与: $337.50 医療/歯科控除: $400.00 401k 控除: $20.00

私が間違っていることについての助けをいただければ幸いです。私は問題を理解できないようです。

これは私のプロジェクトにあるものです:

これらの変数は、コードの先頭で宣言されています。

private const decimal TAX = 0.25m;
private string name = "";
private decimal Gross_pay;
private decimal Taxes;
private decimal Net_Pay;
private decimal annual_salary;
private int NumberOfEmployees;
private decimal deductionMed;
private decimal deduction401k ;

ここで計算が行われます。

private void CalcButton_Click(object sender, EventArgs e)
    {  // The “Calculate” button calculates gross pay, taxes, and net pay and then displays name, department, gross pay, taxes, and net pay using currency format for various amounts in the rich text box
        // Gross pay=  (hours * rate)
        // Taxes= (25% of gross pay)
        // Net pay (gross pay ?taxes)



        //calculate         


        Gross_pay = Convert.ToInt32(HoursTextBox.Text) * decimal.Parse(RateTextBox.Text);
        Taxes = TAX * Gross_pay;
        Net_Pay = Gross_pay - Taxes;

        annual_salary = Net_Pay;

        Taxes = TAX * (Gross_pay - (deductionMed + deduction401k));

        //overtime pay
        if (Convert.ToInt32(HoursTextBox.Text) >= 41)
        {
            Gross_pay = Convert.ToInt32(HoursTextBox.Text) * decimal.Parse(RateTextBox.Text) * 1.5m;
            DisplayOutPut.Text += "\nOvertime:" + Gross_pay.ToString("C") + "\n";
        }

        //Medical/Dental and 401k deductions...as well as tax collected.
        if (MedicalDentalDeductions.Checked)
        {
            deductionMed = Gross_pay = Convert.ToInt32(HoursTextBox.Text) * decimal.Parse(RateTextBox.Text) - 50.00m;
        }


        if (FourOneKDeduction.Checked)
        {
            deduction401k = Gross_pay * 0.05m;

        }


        //display
        DisplayOutPut.Text = "Name: "+ "";
        DisplayOutPut.Text += NameTextBox.Text + "\n";
        DisplayOutPut.Text += "Hours: " + HoursTextBox.Text + "\n";
        DisplayOutPut.Text += "Rate: " + RateTextBox.Text + "\n";
        DisplayOutPut.Text += "Gross Pay: " + Gross_pay.ToString("C") + "\n"; // Hours*Rate
        DisplayOutPut.Text += "Taxes: " + Taxes.ToString("C") + "\n";
        DisplayOutPut.Text += "Net Pay: " + Net_Pay.ToString("C");
        DisplayOutPut.Text += "\nMedical/Dental deduction: " + deductionMed.ToString("C") + "\n401k deduction: " + deduction401k.ToString("C");

        //handling the invalid inputs
        if (NameTextBox.Text == "")
        { MessageBox.Show("Name is missing.", "Error"); }

        if (Convert.ToInt32(HoursTextBox.Text) >= 70)
        { MessageBox.Show("Please Enter a Valid hour.", "Invalid data type."); }

        if (RateTextBox.Text == "" && (RateTextBox.Text == ","))
        { MessageBox.Show("Please Enter a valid amount.", "Invalid data type ($)"); }

        if (Convert.ToInt32(HoursTextBox.Text) >= 70)
        { MessageBox.Show("You have exceeded the maximum hours per week."); }

        else if (Convert.ToInt32(HoursTextBox.Text) < 10)
        { MessageBox.Show("You cannot input less than 10 hours."); }

        if (Convert.ToDecimal(RateTextBox.Text) < 9.75m)
        { MessageBox.Show("Please enter the minimum wage."); }



      }

チェックボックスのメソッドは次のとおりです。

 private void MedicalDentalDeductions_CheckedChanged(object sender, EventArgs e)
{






    } 

    private void FourOneKDeduction_CheckedChanged(object sender, EventArgs e)
    {


      }
4

1 に答える 1

1

デバッグがはるかに簡単になるため、計算を別々のメソッドに分割する必要があります。そうは言っても、私は以下をテストしていませんが、各メソッドはあなたが求めている値を生成するはずです. これらのメソッドから派生した値を使用して DisplayOutPut を構築するだけです (いくつかの作業を残しておいてください)。

最初に計算する必要があるのは、総給与です。

private double calculateGrossPay (double hours, double rate)
{
    double result = 0.00;
    double standardHours = 0.00;
    double overtimeHours = 0.00;
    if (hours > 40)
    {
        overtimeHours = (hours - 40) * (rate * 1.5);
        standardHours = 40 * rate;
    }
    else
    {
        standardHours = hours * rate;
    }
    result = standardHours + overtimeHours;
    return result;
}

次に、税金を計算します。

private double caculateTax (double gross, double tax)
{
    double result = 0.00;
    result = gross * tax; // assuming tax is represented as 0.25 for 25%
    return result;
}

続いて控除額を計算します。

private double caclulate401k (double gross) // Or net?
{
    double result = 0.00;
    result = gross * 0.05;
    return result;
}

private double calculateMedical (double gross) // Or net?
{
    double result = 0.00;
    result = 50.00; // I figure this should be an actual calculation, if medical is always $50, waste of a method...
    return result;
}

最後に、ネットを計算します。

private double calculateNet (double gross, double tax, double med, double 401k)
{
    double result = 0.00;
    double deductions = tax + med + 401k;
    result = gross - deductions;
    return result;  
}
于 2013-10-15T02:18:35.930 に答える