• 沒有找到結果。

14-1 VB c 207

N/A
N/A
Protected

Academic year: 2022

Share "14-1 VB c 207"

Copied!
25
0
0

加載中.... (立即查看全文)

全文

(1)

207

單元 14

  VB 程式進階

單 • 元 • 目 • 標

瞭解 IF...Then...Else 的意義與用法。

瞭解 的意義與用法。

瞭解 的意義與用法。

瞭解 的意義與用法。

Select...Case For...Next Do...Loop

14-1   VB 中的選擇結構

  如果明天不下雨,我就要出去玩;凡消費滿 1000 元就 可享 9 折優惠, 2000 元以上 8 折, 3000 元以上 7 折。日常 生活中充滿這類選擇性的問題,我們必須根據現實條件選擇 一個最適合的途徑。

  撰寫程式時也是一樣,如果程式只能由上而下循序執行 而不具備「選擇」的能力,將會使程式的功用受到限制。因 此 VB 提供了「If...Then...Else」以及「Select...Case」

二種選擇結構,藉此可以執行各種判斷並執行相關處理,使 程式撰寫更加靈活有彈性。

選擇結構

  測試某一條件並按其結 果來改變執行路徑的結構,

舉例來說,當我們寫一個計 算購書總價的程式時,可先 判 斷 數 量 是 否 達 到 折 扣 標 準,若達到某一標準,則對 應 某 一 折 扣 價 而 得 總 價 為

(定價×數量×折扣)。

(2)

208 第五篇

  

基本視窗程式應用

14-1.1 具判斷力的 If...Then...Else

  If...Then...Else 結構顧名思義就是「如果...就...

否則...」的意思。例如「If 明天是個好天氣 Then 去陽 明山賞楓 Else 在家看電視」或是「If 分數 >= 60 Then Print " 成績及格 " Else Print " 成績不及格 "」等,都是 If...Then...Else 結構的例子。

功能 利用關係或邏輯運算式進行判斷,有條件地指示程式去執行特定的敘述。

說明 當電腦執行此敘述時,會先測試 If 後面的運算式值,如果其值為真,便執行 Then 之後的敘 述;如果其值為假,則執行 Else 之後的敘述,也就是「如果...就...否則...」的意思。例如「IF 分數 >= 60 Then Print " 成績及格 " Else Print " 成績不及格 "」。

If...Then...Else

格式 If 條件運算式 Then 敘述 1

敘述 2 ...

Else 敘述 a 敘述 b ...

End If

指令語法與說明

是 (Then

( )條 件If

否 (Else

敘 述 、 敘 述 、 a b ...

敘述 、 1 2 ...

敘述 、

(3)

209

單元 14

  VB 程式進階

》》計算工讀生薪水(IF...Then...Else)

  請撰寫一個「計算工讀生薪水」的程式:當工作時數小於等於40小時,每小時的薪水 為100元;若超過40小時,則超過的部分每小時再加發20元加班費,如下圖。【範例檔案:

工讀生薪水.frm】

為什麼我的標題列是「Project1」而不是「工讀生薪水」?

  當我們使用Msgbox或InputBox指令時,若沒有特別以參數指定標題列文字,則系統預設會以專案檔名 作為標題列文字,因此若同學是開啟範例檔案「工讀生薪水.vbp」進行練習,就會看到如課本上的畫面,而 若是自行開新檔案並輸入程式碼,在未存檔前便可能看到類似「Project1」、「Project2」之類的標題列文字。

  當然,我們也可以自行指定合適的標題列文字(相關語法請參閱13-3節),但為避免過多文字模糊程 式碼畫面中的重點,因此本書在說明時皆統一省略,而標題列則會顯示該範例檔檔名。

(4)

210 第五篇

  

基本視窗程式應用

14-1.2 巢狀 If...Then...Else

  有時候我們的設定條件可能不只一個,例如「如果有很 多人就叫 Pizza 來吃,如果 3 到 4 個就點炸雞全家餐,

如果只有一個人就叫便當」,這時就必須要使用巢狀 If...

Then...Else 敘述才能解決。

巢狀 If...Then...Else

格式 If 條件運算式 1 Then 敘述 1

敘述 2 ...

Else

If 條件運算式 2 Then 敘述 a

敘述 b ...

E lse 敘述 x 敘述 y ...

End If End If

指令語法與說明

符合條件 1時。

不符合條件 1但符合條件2時。

不符合條件1也不符合條件2時。

功能 利用巢狀的關係或邏輯運算式,有條件地指示程式依照不同的情況去執行特定的敘述。

說明 當符合條件 1 時便執行敘述 1、2 ...,若不符則進行第二個 IF 判斷,若符合條件 2 則執行敘 述 a、b ...,而若不符合條件 1 也不符合條件 2 則執行敘述 x、y ...。理論上巢狀 If...Then...

Els e 敘述的的層次數目是沒有限制的,也就是在敘述 1 、 2 ...,敘述 a 、 b ...,或敘述 x 、 y ... 中還可以再加入巢狀 If...Then...Else 的敘述,但太多層次會造成閱讀及維護上的困難。

(5)

211

單元 14

  VB 程式進階

》》求最大值(巢狀 IF...Then...Else)

  請撰寫一個「求最大值」的程式:使用者透過輸入方塊輸入三個數字 A、B、C,程式 處理後再以訊息方塊顯示三者的最大值,如下圖。【範例檔案:求最大值.frm】

(6)

212 第五篇

  

基本視窗程式應用

14-1.3 多重選擇 Select...Case

  假設某一運動比賽需以年齡區分為 10 級,雖然我們 可以使用巢狀的 If... Then...Else 敘述來完成,但這會 使程式變得十分複雜混亂,而且執行上也比較沒有效率。為 此 Visual Basic 提供了 Select...Case 敘述,可作為這 類多重選擇的問題的解決方案。

Select...Case

格式 Select Case 運算式 Case 運算式值串列 1 敘述區段 1

Case 運算式值串列 2 敘述區段 2

C ase E lse 敘述區段 n End S elect

功能 利用關係或邏輯運算式進行判斷,有條件地指示程式去執行特定的敘述。

說明 1. 求出 Select Case 運算式之值,並逐一與 Case 運算式值串列比對,若符合則執行該 Case 之後的敘述區段。

2. 如果所有的 Case 運算式值串列都不符合,則執行 Case Else 的敘述區段。

3. 如無符合條件的 Case 且無 Case Else 的敘述,則直接執行 End Select 的下一列敘述。

4. Select Case 後的運算式可為數值變數、字串變數或是算術運算式。例如:Case 1 或 Case

"a" 、 Case 1 to 5 或 Case "a" to "k" 、 Case is > 5 或 Case is > "a"...等。

指令語法與說明

接下頁

(7)

213

單元 14

  VB 程式進階

...

運算式 Select Case

Case 1

敘 述 區 段 1 敘 述 區 段 2 敘 述 區 段 n

Case 2 Case Else

》》改寫成績分級(Select...Case)

  請利用Select...Case 改寫「成績分級」的程式,使成績區分為更多等級(100、97∼

99 、80∼ 96、60 ∼79、 0∼59 、其他),並分別顯示不同的回應訊息如下圖。【範例檔 案:改寫成績分級.frm】

接下頁

(8)

214 第五篇

  

基本視窗程式應用

14-1.4 選擇結構的應用範例

  利用上面介紹的 If... Then...Else 以及 Select...

Case 的觀念,我們要來撰寫一個「登入畫面」的程式,請 參考以下範例。

(9)

215

單元 14

  VB 程式進階

》》登入畫面(選擇結構的應用)

  請練習撰寫一個「登入畫面」的程式:當使用者輸入正確的ID與密碼時便顯示問候語,

如果錯誤時會要詢問使用者是否重新輸入,答「是」則可重新輸入,答「否」則結束程式。

【範例檔案:登入畫面進階.frm】

結束程式。

輸入錯誤的使用者 ID或密碼時。

接下頁 輸入的密碼會顯示為 * 號。

顯 示 表 單

輸入ID及密碼 並 按 下 「 登 入 」

ID及密碼是 否 正 確 ?

顯示問候語

是 否 重 新 輸 入 ?

開 始

清空表單

結 束

【流程圖】

(10)

216 第五篇

  

基本視窗程式應用

建立一個新專案,並利用工 具箱上的各種控制項建立如 圖的表單,然後分別設定各 控制項屬性如下表。

1

物件名稱 屬性

(空字串)

設定值 備註

Text 清空文字盒

MaxLength 10 限制最大輸入長度

Text2

PasswordChar * 以 * 取代輸入的密碼

(空字串)

Text 清空文字盒

登入畫面範例

Caption 表單標題列

Form1

請輸入ID:

Caption 標籤文字

Label1

請輸入密碼:

Caption 標籤文字

Label2

MaxLength 10 限制最大輸入長度

Text1

Caption 登入 按鈕文字

Command1

接下頁 全部完成後,表單應該會像 左圖一樣。

2

雙按「登入」按鈕開啟【程式 碼】視窗並輸入程式碼。

3

(11)

217

單元 14

  VB 程式進階

  在這個範例中,我們用了幾個控制項,包括用以顯示標 籤文字的 「Label」 以及用來輸入文字的 「TextBox」。

另外,我們也針對對話方塊的問題按鈕做了不同回應,這些 基本的範例類型都可以作為往後撰寫程式的參考。在這個範 例中幾個比較需要說明的地方是:

1. Label 的 Caption 屬性(通常以 Label.Caption 代 表)表示要顯示在 Label 所在位置的文字。

2. Text.MaxLength 表示文字方塊中所能輸入字元的最大 長度,在這個範例中設定的最大長度是 10 。

3. Text.PasswordChar 表示輸入文字方塊中的字元將以指 定的密碼字元代替,在這個範例中是符號 「*」。

4. 程式碼

(12)

218 第五篇

  

基本視窗程式應用

ID = Text1.Text ' 將 Text1 輸入值存入變數 ID Password = Text2.Text ' 將 Text1 輸入值存入變數 Password

的目的是以較有意義的變數名稱來存放輸入值,避免 在撰寫程式時產生混淆,此外也使程式較易維護,因 為一旦要更改 ID 或密碼的輸入來源時,只要更動此 二行程式碼即可。

5. 程式碼

Case "Kevin" ' ID 為「Kevin」時

If Password = "1234" Then ' 若輸入密碼為「1234」

MsgBox "Kevin, 又見到你真好! ", vbInformation, " 登入成功 "

End If

先以 Select...Case 結構判斷 ID 輸入值是否屬於 內建的 ID(Kevin 或 May),如果是的話,再以 If...

Then 敘述判斷密碼是否正確,正確的話就以對話方塊 顯示問候語並跳出 Select...Case 結構。

6. 如果在 Select...Case 中找不到符合的 ID 時會執 行下列敘述

Click = MsgBox(" 不合法的身份或密碼錯誤,是否要重新輸入? ", _

vbExclamation + vbYesNo, " 錯誤 ") ' 顯示錯誤訊息並傳回回應值

這會顯示一個對話方塊。當使用者按下按鈕

時會傳回值 v b Y e s 至變數 C l i c k 中,而按下按鈕 則會傳回值 vbNo(請參閱 13-3.1 節),藉 此我們可以進行下列處理

(13)

219

單元 14

  VB 程式進階

If Click = vbYes Then ' 若回應值為「是」

Text1.Text = "" ' 將 Text1 清空 Text2.Text = "" ' 將 Text2 清空

Form1.Show ' 重新呼叫並顯示表單

Else ' 否則(即回應值為「否」)

End ' 直接結束程式

End If

其中 Text1.Text = "" 以及 Text2.Text = "" 的 目的在於清除前一次輸入的資料,方便使用者直接 輸入新資料。而 Form1.Show 的功用則是再次顯示 表單 F o r m 1 以便使用者能夠再次進行輸入 I D 與 密碼的動作,其中 Show 是 Form 的一種「方法」,

功能是顯示表單。

14-2   VB 中的重複結構

  我們在撰寫程式時,經常需要一再使用程式中的某些片 段,而重複結構便是因應此種需求而產生的結構。重複結構 有時又稱迴圈,藉此程式設計師不需要一直撰寫重複的程式 碼,就可以重複執行某段程式,而且可以很方便地設定起始 或停止的條件,這使得程式更加簡潔有條理,並有效地控制 程式執行的流程。

  VB 中主要提供 For...Next 以及 Do…Loop 二種重複 結構,以下亦將簡單介紹其觀念與應用方式。

重複結構

  測試某一條件是否成立 以決定是否重複執行某一段 程式,以「計算購書總價」 例子來說,由於書店顧客不 只一位,因此程式將會不斷 重複執行直到某一個特定的 條件(如打烊)成立為止。

(14)

220 第五篇

  

基本視窗程式應用

14-2.1 計數式迴圈 For...Next

  當程式中某個敘述區段要重覆執行的次數是固定且可計 數時(例如重複執行某程式片段 1 0 0 次),這類已知起始 值,每執行一次增減多少,一直到超過或等於終止值才停止 的問題,都可以使用 For...Next 敘述。

For...Next

格式 For 控制變數 = 初始值 To 終止值 [ Ste p 增加值 ]

敘述 1

敘述 2 …

Next [控制變數]

功能 依據使用者所設定的次數,重複執行迴圈內的敘述區段。

說明 1. 控制變數必須是數值變數。

2. 初始值、終止值與增加值可以為數值常數、數值變數或數值運算式。若增加值為1,則 Step 可以省略。

3. 如果初始值小於終止值,則增加值應為 正數,反之,若初始值大於終止值,則 增加值應為負數,如此才會執行迴圈內 的敘述。

4. 迴圈的執行次數 = ( 終止值 − 初始值 ) \ 增加值 + 1 ,如果執行次數小於0,則 迴圈內的敘述不會被執行。

指令語法與說明

敘 述 、 1 2 ...

敘 述 、 For =

To Step

控 制 變 數 初始值 終 止 值

增 加 值

控 制 變 數

(15)

221

單元 14

  VB 程式進階

》》計算 1 到 100 的總和(For...Next)

  請利用 F o r . . . N e x t 敘述撰寫一個「計算 1到 100總和」的程式,如下圖。【範例 檔案:1100總和.frm】

  在這個程式中,我們首先宣告一個整數變數 total 用 以存放加總後的結果,並藉由 total = 0 設定其初始值為 0 ,然後

1. 程式碼 For i = 1 To 100

省略 STEP 敘述表示增加值為 1,即控制變數 i 每 次加 1 直到 i=100 ,所以這個迴圈會執行 100 次。

2. 由於變數 i 每次加 1 ,所以 Total=Total+i 相當於 Total = Total + 1

Total = Total + 2 ...

Total = Total + 100

(16)

222 第五篇

  

基本視窗程式應用

所以便能達到我們想要計算1 + 2 + 3 + ... + 100之 值的目的。

》》計算 1 到 100 的奇數和(For...Next 增加值為 2)

  請利用 For...Next 敘述撰寫一個「計算 1 到 100 奇數和」的程式,如下圖。【範例檔 案:1 到 100奇數和.frm】

  這個程式唯一的差別在於,為了只計算奇數之和,變數 i 必須每次加 2,這可以利用程式碼 For i=1 To 100 Step 2 來達成,如此便能達到我們想要計算 1 到 100 之奇數和 的目的。

14-2.2 巢狀 For...Next

  一個 For...Next 結構之中也可以再包含一個或數個 For...Next 結構,我們稱之為巢狀 For...Next。下面的 例子,便是利用二層迴圈建立的「九九乘法表」。由程式中 可以看出,當 i=1 時, j 依序由 1 至 9 ,當 i=2 時, j 一樣依序由 1 至 9 ,如此重複下去直到 i=9 。另外程式中

(17)

223

單元 14

  VB 程式進階

》》九九乘法表(巢狀 For...Next)

  請利用使用巢狀For...Next結構在表單上建立「九九乘法表」,如下圖。【範例檔案:

九九乘法表.frm】

二個 Print 指令的目的是,當 j 跑完一個輪迴時(剛好是 一行),讓游標換行並空一行。

14-2.3 條件式迴圈 Do...Loop

  條件式迴圈可重覆執行某一程式區段,至於重覆的次數 則視設定條件是否符合而定。其中先作測試再決定是否執行 迴圈者稱為前測式迴圈。而後測式迴圈則是先執行一次迴圈 敘述後再行判斷是否重覆執行。

(18)

224 第五篇

  

基本視窗程式應用

Do...Loop(前測式)

格式 Do W hile 條件式 敘述 1 敘述 2 ...

Loop

Do Until 條件式 敘述 1 敘述 2 ...

Loop

功能 當條件為真時(While),或是條件為真以前(Until),重複執 行迴圈內的敘述區段,所以依條件限制有可能一次也沒有執行 迴圈內的敘述。

說明 Do W hile...L oop 或Do Until...L oop 亦可構成巢式迴圈。

指令語法與說明

測 試 條 件

敘述 、 1 2...

Do Until

Loop False True

測 試 條 件

敘 述 、1 2...

Do While

Loop True False

早 期 的 中 有 一

結 構,

其 作 用 相 當 於 中 的 結 構。

QBASIC While...Wend

VB Do While...Loop

(19)

225

單元 14

  VB 程式進階

》》計算 1 到 100 的總和(Do While...Loop)

  請利用 Do While...Loop 敘述撰寫一個「計算 1到100總和」的程式,如下圖。【範例 檔案:1 到100總和DoWhileLoop.frm】

  由於前測式迴圈的條件式為 Do While i <= 100 ,所 以迴圈內的敘述會一直執行直到 i=101 為止。當 i=1 ∼ 100 時,會執行迴圈內的敘述,並逐一將 i 的值加到變數 Total 中,也就是計算 1 到 100 的總和。圖 14-2.1 中的 範例也是同樣的原理,只是我們將條件式改為 Do Until i

= 101 。(範例檔案:1 到 100 總和 DoW hileLoop.frm)

圖 14-2.1

計算 1 到 100 的總和(Do Until...Loop)。

(20)

226 第五篇

  

基本視窗程式應用

Do...Loop(後測式)

格式 Do 敘述 1 敘述 2 ...

Loop W hile 條件式

Do 敘述 1 敘述 2 ...

Loo p Until 條件式

功能 至少先執行一次迴圈內的敘述再根據條件式測試是否重複迴圈內的敘述。

指令語法與說明

測試條件 敘述 、 1 2...

Do

Loop

True False

測試條件 敘述 、 1 2...

Do

Loop False True

  下面是二個後測式迴圈的簡單範例。此外,仔細觀察這 四個例子會發現,前測試迴圈與後測試迴圈最大的差異處在 於:前測試迴圈有可能連一次也不執行迴圈內的敘述,而後 測試迴圈則最少會執行迴圈內的敘述一次。

While Until

(21)

227

單元 14

  VB 程式進階

》》計算 1 到 100 的總和(Do...Loop While)

  請利用 Do...Loop While 敘述撰寫一個「計算 1到100總和」的程式,如下圖。【範例 檔案:1 到100總和DoLoopWhile.frm】

》》計算 1 到 100 的總和(Do...Loop Until)

  請利用 Do...Loop Until 敘述撰寫一個「計算 1到100總和」的程式,如下圖。【範例 檔案:1 到100總和DoLoopUntil.frm】

(22)

228 第五篇

  

基本視窗程式應用

14-2.4 重複結構的應用範例

  下面是利用 Do...Loop 結構設計的「公雞賽跑」遊戲,

為了說明方便,範例中只使用了 Do Until...Loop 的方式,

同學可自行嘗試使用其他不同的 Do...Loop 結構改寫。

》》公雞賽跑(重複結構的應用)

  請參閱次頁的流程圖,練習撰寫一個「公雞賽跑」的程式,執行畫面如下圖,當使用者 按下 鈕後,電腦會以亂數決定要使那隻公雞向前跑,而當任一隻公雞跑超過終點線 時便結束比賽且顯示比賽結果。【範例檔案:公雞賽跑.frm】

接下頁 顯示比賽

結果。

當任一隻公雞跑 超過終點線時便 結束比賽。

【提示】

1. 利用VB敘述Randomize與Int( N * Rnd )可以產生 0 到 N-1 之間的整數亂數。

2. 以上述方式產生1到10之間的亂數,且當亂數值小於等於5時,1號雞便向前跑一步,

反之則2號雞向前跑一步。

3. 使用Do Until...Loop結構使公雞不斷向前跑。

4. 當(公雞圖片的X座標值 Image.Left + 圖片寬度) >= 終點線 X 座標值時,便代表 公雞已跑過終點線,比賽結束。

(23)

229

單元 14

  VB 程式進階

【流程圖】

結 束 超 過 終 點 線

Run <=5 True

1 500 twips

號 雞 向 右 跑

Loop

False

超 過 終 點 線 2 500 twips

號 雞 向 右 跑

顯 示 「 1 號 雞 獲 勝 」 GameOver = True

顯示「 2 號 雞 獲 勝 」 GameOver = True

True True

False False

False

產 生 之間的 亂數值

1 10 Run GameOver

=True Do Until

True

GameOver = False 開始

接下頁

(24)

230 第五篇

  

基本視窗程式應用

Line1

建立一個新專案,並利 用工具箱上的各種控制 項建立如圖的表單,然 後分別設定各控制項屬 性如下表。

1

物件名稱 屬性

&H000000FF&

設定值 備註

ForeColor 將文字設為紅色

Caption 公雞賽跑 表單標題列

Form1

(空字串)

Caption 標籤文字

Label1

Font 14點 字體大小

Label2 Caption 1 標示1號公雞

粗體,18點

Font 字體樣式與大小

&H000000FF&

ForeColor 將文字設為紅色

Label3 Caption 2 標示2號公雞

粗體,18點

Font 字體樣式與大小

2-破折線

BorderStyle 線條樣式

Command1 Caption 起跑 按鈕文字

&H000000FF&

BorderColor 設定線條顏色為紅色

Line2 Line1

BorderWidth 5 線條粗細

&H00008080&

BorderColor 設定線條顏色為紫色

Line2 Image1

Image2

設定完成後的表單外觀 如左圖。

接下頁

(25)

231

單元 14

  VB 程式進階

雙 按 表 單 開 啟 【 程 式 碼】視窗,並輸入表單 Form1 的 Load 事件程 序如左。

2

雙 按 鈕 開 啟

【程式碼】視窗,並輸 入 Click事件程序。

3

參考文獻

相關文件

 There is an ill-defined radiolucent lesion without a corticated margin over right mandibular body extending from distal aspect of tooth 42 to mesial aspect of tooth 47, and

Site Most common in parotid gland Hard palate. Color Blue or

4.5cm * 4cm, invading left maxillary sinus and hard palate... Mucoepidermoid carcinoma.. This case Mucoepidermoid

• An ulceration over lower left posterior gingival area from 2010 September....

Tumor mass over right posterior maxilla for a half year...

Mathematica 5.0 (Wolfram 2003) 是一個強大的數值、 符號運算、 繪圖整合系統, 具有 高階程式語言能力的數學軟體。 它新增一個強大的內建命令 RSolve, 可以解遞迴方程。 在

☞ 投資成本約較模板式光電板高一倍,主要原因在 於目前設計都是Case by Case的生產,再配合與 建築本體的接合填縫、承載、隔熱設計、安全耐

 點選「 Single Solution」 選項予以求解電力潮流,然 後再點選「 Case Information 與Bus…」 選項,以觀看 所有匯流排的相關資訊。.  為迅速獲得最低的匯流排電壓值,請於