# COD02_零錢兌換機 ## 製作步驟: ### 1. **介面安排(layout)** 按照題目要求設置**MenuStrip**、**GroupBox**、**CheckBox**、**Label**、**TextBox**元件 ### 2. **為元件設置變數名** 為了避免混亂,在編輯程式碼前更改元件的`(name)`屬性, 方便之後調用,命名如下: > - **textbox:** > `numTextbox` : 用戶輸入的金額 > `textBox<金額數(50/10/5)>d`: 用於顯示兌換結果 > - **CheckBox:** > `checkBox<金額數(50/10/5)>d`: 用於讓用戶選擇幣種 ### 3.**撰寫程式碼** 1. **離開按鈕** 上網尋找資料後,使用`Application.Exit()`達成。 2. **兌換按鈕** > - **避免錯誤數值:** > 為了達成對非正整數報錯的效果,直接使用異常處理, > 在任何異常狀況發生時用`MessageBox.Show()`要求用戶輸入正整數: > ```C# > try > { > ///略 > } > catch > { > MessageBox.Show("請輸入正整數!"); > } > ``` > - **讀取用戶輸入的數字/清空介面輸出** > 首先先將用戶輸入的數字`numTextbox.Text` 轉換為`Int32`並存入`num`變數 > 為了避免用戶介面上留有之前的計算結果造成顯示錯誤, > 將所有顯示結果的**TextBox**設定為`"0"`。 > ```C# > int num = Convert.ToInt32(numTextbox.Text); //讀取用戶輸入資料 > //歸零介面數據: > textBox1d.Text = "0"; > textBox5d.Text = "0"; > textBox10d.Text = "0"; > textBox50d.Text = "0"; >``` > - **計算錢幣數/輸出結果** > 依幣種面而大到小使用`if`判斷用戶是否勾選該幣種, > 如果有則先計算餘數,將總錢數扣掉餘數, > 進行除法運算並將結果存入變數,確保不會出現小數點。 > 將總錢數扣掉計算結果存回,下次計算時就不會重複計算。 > ```C# > if (checkBox50d.Checked ) > { > int d50 = (num - (num % 50)) / 50; //計算幣種數量並存入變數"d50" > num -= 50 * d50; //將總錢數扣掉計算結果避免重複計算 > textBox50d.Text = Convert.ToString(d50); //輸出結果到介面 > > } > // 以下省略... > ``` ## 需改善問題: 程式碼部分應該可以更精簡,不確定是否有正確針對功能表所有控制項加入快捷鍵。 ## 更新: - 2024/1/27 - 快捷鍵部分要在`text`屬性像這樣: `離開(&X)` 這樣就會自動變成`Alt` + `設定的按鍵` 的快捷方式。 - 發現判斷正整數時忘記考慮負整數不會報錯,直接使用`throw new Exception();`丟出錯誤進入`catch`。 ```C# if (num < 0) { throw new Exception("num是負數"); }