---
# System prepended metadata

title: COD02_零錢兌換機

---

# 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是負數");
    }
