第7章 選擇控制項與條件判斷 [速食店點餐系統] 第7章 選擇控制項與條件判斷 [速食店點餐系統]
Contents 7-1 結構化程式設計 7-2 是否選條件敘述 7-3 選擇控制項 7-4 二選一條件敘述 7-5 多選一條件敘述
7-1 結構化程式設計 7-1-1 結構化程式設計 7-1-2 流程控制的基礎
7-1-1 結構化程式設計-說明 結構化程式設計是一種軟體開發方法,它是用來組織和撰寫程式碼的技術,使用由上而下的設計方法來分析問題,將程式分解成階層架構的「模組」(Module)。 每個模組是一段擁有獨立功能的程式碼,且只有單一進入點和離開點,各模組間使用三種流程控制:循序結構(Sequential)、選擇結構(Selection)和重複結構(Iteration)來整合。 結構化程式設計主要觀念有三項,如下所示: 由上而下設計方法。 流程控制結構。 模組。
7-1-1 結構化程式設計-由上而下設計方法 由上而下設計方法是面對問題時,先將整個問題分解成數個獨立功能的大模組,再對每一個大模組,一一分割成數個小模組,位在下層模組並不會跳到上層模組,如此一直往下細分。 這些細分的小問題被一一解決且測試完成後,再將它們整合起來,如此一層層向上來完成整個程式設計。
7-1-2 流程控制的基礎-說明 程式語言撰寫的程式碼大部分是一列指令接著一列指令循序的執行,但對於複雜工作,為了達成預期執行結果,需要使用「流程控制結構」(Control Structures)來改變執行順序。
7-1-2 流程控制的基礎-循序結構 循序結構是程式預設執行方式,也就是一個敘述接著一個敘述依序的執行,如下圖所示:
7-1-2 流程控制的基礎-選擇結構 選擇結構是一種條件控制敘述,它是一個選擇題,可以分為單一選擇、二選一或多選一共三種。程式執行順序是依照關係運算式的條件,來決定執行哪一個區塊的程式碼,如下圖所示:
7-1-2 流程控制的基礎-重複結構 重複結構就是迴圈控制,它是重複執行一個區塊程式碼,提供一個結束條件結束迴圈的執行,依結束條件測試的位置不同分為兩種,如下所示: 前測式重複結構 後測式重複結構
7-1-2 流程控制的基礎-前測式重複結構 測試迴圈結束條件在程式區塊開頭,需要符合條件,才能執行迴圈中的程式碼,如下圖所示:
7-1-2 流程控制的基礎-後測式重複結構 測試迴圈結束條件在程式區塊結尾,所以迴圈程式區塊至少會執行一次,如下圖所示:
7-2 是否選條件敘述-語法 If Then條件敘述是一種是否執行的條件,決定是否執行程式區塊內程式碼。如果If條件為True,就執行Then/End If間的程式碼,其語法如下所示: If 條件 Then 程式區塊 End If 上述「條件」是第6-4節的比較運算式。
7-2 是否選條件敘述-範例 例如:在第6-3-2節的多功能計算機可加上身高和體重的條件判斷,只有身高大於等於130公分,才計算BMI值,如下所示: If height >= 130 Then Dim h As Double h = height / 100.0 lblOutput.Text = _ weight / h ^ 2 End If
7-2 是否選條件敘述-省略End If 如果條件需要加上體重需要超過20公斤,且If Then條件運算式為True時只會執行一列程式碼,此時可以省略End If,如下所示: If height < 130 Or weight < 20 Then _ lblOutput.Text = "錯誤: 身高體重值錯誤!"
7-2 是否選條件敘述-Visual Basic專案 Visual Basic專案:Ch7-2\多功能計算機 這個Windows應用程式是修改第6-3-2節的【多功能計算機】,使用If Then條件檢查身高和體重是否符合範圍,符合範圍才計算和顯示BMI值,否則顯示錯誤訊息。其執行結果如下圖所示:
7-3 選擇控制項 7-3-1 核取方塊控制項 7-3-2 選項按鈕控制項 7-3-3 群組方塊控制項
7-3-1 核取方塊控制項-說明 核取方塊是一個開關,可讓使用者選擇是否開啟功能或設定某些參數。如果表單擁有多個核取方塊控制項,每一個控制項都是獨立選項,換句話說,它允許複選。 核取方塊擁有2個狀態,一是【核取】;另一是【未核取】。如果核取核取方塊,在小方塊會顯示勾號,如下圖所示:
7-3-1 核取方塊控制項-屬性 CheckBox核取方塊控制項常用屬性說明,如下表所示:
7-3-1 核取方塊控制項-是否選取 當使用者選取核取方塊後,程式碼可使用核取方塊的Checked屬性值,以判斷使用者是否選取此核取方塊,值True表示勾選,如下所示: If chkBeef.Checked Then quantity = CInt(txtBeef.Text) total += 80 * quantity End If
7-3-1 核取方塊控制項-Visual Basic專案 Visual Basic專案:Ch7-3-1\速食店點餐系統 在Windows應用程式使用CheckBox控制項勾選餐點,在TextBox輸入數量後,可在Label標籤控制項顯示結帳總價。其執行結果如下圖所示:
7-3-2 選項按鈕控制項-說明 選項按鈕是二選一或多選一的選擇題,使用者可以在一組選項按鈕中選取一個選項,這是一個單選題。 選項按鈕的選項是互斥的,只能選取其中一個選項,如果選取,在小圓圈中會顯示實心圓,沒有選取是空心圓 ,如下圖所示:
7-3-2 選項按鈕控制項-屬性 RadioButton選項按鈕控制項的常用屬性說明,如下表所示:
當使用者選取選項按鈕後,在程式碼一樣是檢查Checked屬性,以判斷是否選取該選項按鈕,如下所示: 7-3-2 選項按鈕控制項-是否選取 當使用者選取選項按鈕後,在程式碼一樣是檢查Checked屬性,以判斷是否選取該選項按鈕,如下所示: If rdbCoke.Checked Then total += 30 * total_qty End If
7-3-2 選項按鈕控制項-Visual Basic專案 Visual Basic專案:Ch7-3-2\速食店點餐系統 這個Windows應用程式擴充第7-3-1節的【速食店點餐系統】,新增3個RadioButton控制項來選擇購買飲料,數量就是購買漢堡數量。其執行結果如下圖所示:
7-3-3 群組方塊控制項-說明 「群組方塊」(GroupBox)是一種容器控制項,在此控制項中可以新增其他控制項,以便讓這些控制項屬於同一群組,如下圖所示: 上述選項按鈕之外就是群組方塊,其功能除了美化控制項編排外,還可組織表單眾多不同控制項。例如:如果有多組選項按鈕擁有排它性,就可以使用群組方塊在同一個表單建立多組不同的選項按鈕。
7-3-3 群組方塊控制項-屬性 GroupBox群組方塊控制項的常用屬性說明,如下表所示:
7-3-3 群組方塊控制項-Visual Basic專案 Visual Basic專案:Ch7-3-3\速食店點餐系統 這個Windows應用程式是擴充第7-3-2節的【速食店點餐系統】,使用GroupBox控制項來群組2組RadioButton控制項,一是上一節選擇飲料;另新增一組來選擇薯條。其執行結果如下圖所示:
7-4 二選一條件敘述-語法 在第7-2節的條件只是選擇執行或不執行程式區塊的單一選擇,更進一步如果擁有排它情況的兩個執行區塊,只能二選一。可以加上Else關鍵字,其語法如下所示: If 條件 Then 程式區塊1 Else 程式區塊2 End If 上述If條件如為True,就執行Then/Else間的程式碼;False就執行Else/End If間的程式碼。
7-4 二選一條件敘述-範例 例如:速食店慶祝100家新店開張,消費200元以下95折;200元以上(含)9折,此時就可以使用If Then/Else條件敘述,以消費額來決定適用的折扣,如下所示: If total >= 200 Then total = total * 0.9 lblOutput.Text &= "9折: " Else total = total * 0.95 lblOutput.Text &= "95折: " End If lblOutput.Text &= total.ToString("C")
7-4 二選一條件敘述-流程圖
7-4 二選一條件敘述-Visual Basic專案 Visual Basic專案:Ch7-4\速食店點餐系統 擴充第7-3-3節的【速食店點餐系統】,因為新店開張促銷,凡消費200元以下95折;200元以上(含)9折,使用If Then/Else條件敘述來計算折扣,並且將選擇薯條的2個If Then條件改為If Then/Else條件敘述。其執行結果如下圖所示:
7-5 多選一條件敘述 7-5-1 If Then/ElseIf多選一條件敘述 7-5-2 Select Case多選一條件敘述
7-5-1 If Then/ElseIf多選一條件敘述-說明 If Then/ElseIf條件敘述是If Then/Else條件敘述的延伸,使用ElseIf來重複建立多選一條件敘述。 例如:擴充第6-3-1節的【算術計算機】,新增RadioButton控制項配合If Then/ElseIf條件敘述來決定使用哪一種運算子。
7-5-1 If Then/ElseIf多選一條件敘述-範例 If rdbAdd.Checked = True Then lblOutput.Text = opd1 + opd2 ElseIf rdbSubtract.Checked = True Then lblOutput.Text = opd1 - opd2 ElseIf rdbMultiply.Checked = True Then lblOutput.Text = opd1 * opd2 ………. ElseIf rdbExp.Checked = True Then lblOutput.Text = opd1 ^ opd2 Else lblOutput.Text = opd1 \ opd2 End If
7-5-1 If Then/ElseIf多選一條件敘述-流程圖
7-5-1 If Then/ElseIf多選一條件敘述-Visual Basic專案 Visual Basic專案:Ch7-5-1\算術計算機 這個Windows應用程式是擴充第6-3-1節的【算術計算機】,新增RadioButton控制項來選擇運算子,程式是配合If Then/Else If條件來執行運算。其執行結果如下圖所示:
7-5-2 Select Case多選一條件敘述-語法 Select Case多選一條件敘述比If Then/ElseIf多條件敘述來的清楚明白,其程式碼也比較簡潔。它可以依照符合條件來執行不同區塊的程式碼,其語法如下所示: Select Case 運算式 Case 值1 程式區塊1 Case 值2 程式區塊2 ……. Case Else 程式區塊N End Case 上述「運算式」值是用來和Case值比較,每一個Case是一個條件,如果True,就執行之後的程式區塊。若有例外情況則執行Case Else後的程式區塊。
7-5-2 Select Case多選一條件敘述-範例 Select Case total Case Is < 100 rate = 0.2 Case 100 To 499 rate = 0.1 Case 500 To 999 rate = 0.05 Case Is >= 1000 rate = 0 End Select
7-5-2 Select Case多選一條件敘述-流程圖
7-5-2 Select Case多選一條件敘述-Case條件
7-5-2 Select Case多選一條件敘述- Visual Basic專案 Visual Basic專案:Ch7-5-2\速食店點餐系統 擴充第7-3-3節的【速食店點餐系統】,目前速食店正式提供外送服務,其費率是依據消費金額的百分比來計算。在點餐系統新增CheckBox控制項來勾選是否外送,程式是使用Select Case條件敘述來計算外送運費。其執行結果如下圖所示: