2014-02-20 38 views
0

任務: 創建一個使用簡單但有效的小時工資計算器。按小時支付計算器

private double amount4Hours = 4; 
    private double amount8Hours = 8; 
    private double amount10Hours = 10; 

    private void btnSubtotal_Click(object sender, EventArgs e) 
    { 

     double answer; 
     // 45 min break removal 
     double break45 = 0.75; 

     double outputValue = 0; 
     bool isNumber = true; 
     //true false statement for error checking 
     isNumber = double.TryParse(text4Hours.Text, out outputValue); 
     isNumber = double.TryParse(text8Hours.Text, out outputValue); 
     isNumber = double.TryParse(text10Hours.Text, out outputValue); 
     if (!isNumber) 
     { 
      //error checking for blank text boxes 
      MessageBox.Show("Enter a number from 0-9"); 
     } 
     else 
     { 
      //calculates total amount of hours after breaks have been removed 
      amount4Hours = amount4Hours * double.Parse(text4Hours.Text); 

      amount8Hours = amount8Hours * double.Parse(text8Hours.Text) - 
       break45 * double.Parse(text8Hours.Text); 

      amount10Hours = amount10Hours * double.Parse(text10Hours.Text) - 
       break45 * double.Parse(text10Hours.Text); 
      // Adds all together to output final amount of hours 
      answer = amount4Hours + amount8Hours + amount10Hours; 
      labSubtotal.Text = answer.ToString(); 
     } 

    } 

    private void btnPay_Click(object sender, EventArgs e) 
    { 
     // Hourly pay stored here 
     double hourpay = 6.19; 

     hourpay = hourpay * double.Parse(labSubtotal.Text); 
     labPay.Text = hourpay.ToString(); 
    } 

    private void btnClear_Click(object sender, EventArgs e) 
    { 

     // Resets all text boxes back to blank 
     text4Hours.Text = string.Empty; 
     text8Hours.Text = string.Empty; 
     text10Hours.Text = string.Empty; 
     labSubtotal.Text = string.Empty; 
     labPay.Text = string.Empty; 


    } 
} 

}

問題... ...

  • 當我在每個文本框中三種不同類型的數字,我得到的結果只是完美。
  • 如果我打的清除按鈕,它做什麼,我只要求從輸出
  • 消除一切,如果我再次(那些相同或不同的)輸入三個數字已被清除後,我會得到不同的輸出。

我認爲這與清晰的代碼有關,因爲它不像它在程序開始時那樣將值重置爲零。我曾嘗試設置清晰的代碼來輸入零,但這並沒有幫助;只是給出了同樣的問題。

+0

一些東西,可能會對你更有用的比解決您的問題,爲您提供:http://samizdat.mines.edu/howto/HowToBeAProgrammer.html#id2790282本節學習如何調試。 – mydogisbox

+0

歡迎來到SO。請避免文本沒有直接關係的問題(如「新來的」,「被搜索了很多」,「謝謝你」)和標籤(如「C#」)在以後的文章標題。如果您想添加有關您自己的詳細信息,請修改您的用戶信息。也可以嘗試格式化你的代碼在更短的線路,以避免水平滾動... –

+0

你可能想在小數不使用的,而不是「雙」雙有舍入誤差「小數」。在需要準確性的情況下,對貨幣相關存儲使用小數點是常見做法。 – Qwerty01

回答

0
amount4Hours = 4; 
amount8Hours = 8; 
amount10Hours = 10; 

將此代碼置於清除按鈕中。您還需要重置您的全局變量。

2

這是展示如何使用調試器的好例子。將斷點就行了:

amount4Hours = amount4Hours * double.Parse(text4Hours.Text); 

然後,當你算出答案,看如何amount4Hours變量的變化。

這種類型的錯誤顯示了人們爲什麼避免使用全局變量。

+0

感謝您的迅速反應和我在我自己在全局變量有點惱火,我怎麼沒想到這一點。將defo看看調試器,我會快速閱讀全局變量信息,以確保我更好地理解,並停止再次發生這種錯誤。 – Gasric

1
private double amount4Hours = 4; 
private double amount8Hours = 8; 
private double amount10Hours = 10; 

此代碼應該進入你的btnSubtotal_Click

+0

私人並不是由於封裝必要的,但這是正確的答案(因爲它使用適當的面向對象的設計)。我會重申,在處理金錢時,應該使用小數而不是雙倍。 – Qwerty01

+0

是的。由於封裝,私有是不必要的。 – Pierre

0

正如其他人所說的,在一般觀點上,您需要使用調試器來找出爲什麼某些事情沒有按照您的預期工作。在這種情況下,您將在開始時創建3個全局變量(數量爲4小時等),然後在單擊btnSubmit時稍後對其進行操作。在btnClear沒有任何時候你重置你的全局值。嘗試添加在你btnClear_Click方法:

amount4hours = 4; 
amount8hours = 8; 
amount10hours = 10; 

這將重置您的全局變量。

0

如果全局變量的值應該不會被更新,爲什麼不直接具有它們的和值直接

/*amount4Hours = amount4Hours * double.Parse(text4Hours.Text); 
* 
* amount8Hours = amount8Hours * double.Parse(text8Hours.Text) - 
*     break45 * double.Parse(text8Hours.Text); 
*     
* amount10Hours = amount10Hours * double.Parse(text10Hours.Text) - 
*     break45 * double.Parse(text10Hours.Text); 
*     
* answer = amount4Hours + amount8Hours + amount10Hours;*/ 
answer = amount4Hours * double.Parse(text4Hours.Text) + 
     amount8Hours * double.Parse(text8Hours.Text) - 
      break45 * double.Parse(text8Hours.Text) + 
     amount10Hours * double.Parse(text10Hours.Text) - 
      break45 * double.Parse(text10Hours.Text); 

順便說得到答案的價值,你的錯誤檢查是失敗,因爲你存儲的所有檢查結果在同一個變量中,因此只有第三個文本框內容是根據你的邏輯進行檢查的。我假設每當三個文本框中的任何一個具有無效輸入時,都顯示MessageBox。然後,

 //bool isNumber = true; 
     //true false statement for error checking 
     //isNumber = double.TryParse(text4Hours.Text, out outputValue); 
     //isNumber = double.TryParse(text4Hours.Text, out outputValue);; 
     //isNumber = double.TryParse(text10Hours.Text, out outputValue); 
     //if (!isNumber) 
     if (!double.TryParse(text4Hours.Text, out outputValue)|| 
      !double.TryParse(text8Hours.Text, out outputValue)|| 
      !double.TryParse(text10Hours.Text, out outputValue)) 
     { 
      //error checking for blank text boxes 
      //the checking only check if they are double type 
      //but not checking the range from 0 to 9 
      MessageBox.Show("Enter a number from 0-9"); 
     }