Upload
avram-caldwell
View
41
Download
0
Embed Size (px)
DESCRIPTION
第 8 章 模組化程式設計 I -副程式與自定函數. 大型程式. 模組 1. 模組 2. 模組 3. …. 模組 n. 一、模組化設計的概念. 模組 通常是指一段具有某種 特定功能、大小適中、容易 閱讀及維護的程式 將程式切割成許多個子功能 後,便可分別撰寫成模組程 式. 二、模組設計的原則. 設計功能單純的模組程式,以便提供給更多程式使用 儘量減少模組之間相互影響的程度,以使模組成為獨立的程式基本單元 將模組控制在適當的大小 ( 例如不超過 50 行敘述 ) ,以方便閱讀與維護. 模組 A. 模組 A'. 模組 B. 模組 B. 呼叫. 呼叫. - PowerPoint PPT Presentation
Citation preview
第 8 章 模組化程式設計I-副程式與自定函數
一、模組化設計的概念
模組通常是指一段具有某種特定功能、大小適中、容易閱讀及維護的程式
將程式切割成許多個子功能後,便可分別撰寫成模組程式
模組 1
模組 2
模組 3
模組 n
大型程式
…
二、模組設計的原則
設計功能單純的模組程式,以便提供給更多程式使用
儘量減少模組之間相互影響的程度,以使模組成為獨立的程式基本單元
將模組控制在適當的大小(例如不超過 50行敘述),以方便閱讀與維護
三、使用模組的優點
模組可重覆使用程式開發易於分工
程式易於測試與偵錯可簡化維護的工作
呼叫
模組 A
模組 B
模組 F
…呼叫
模組 A'
模組 B
模組 F
…呼叫
呼叫
模組 A具有檢查產品編號功能
產品編號的檢查規則改變時
只要修改模組 A即可… …
四、模組設計的方法
在專案中加入空白模組檔,撰寫副程式或自定函數,以設計模組程式(如左下圖)
在專案中匯入某個專案中的模組檔(如右下圖)
表單檔
模組檔
程式專案 P1
表單檔
模組檔
程式專案 P2
匯入現有模組檔
撰寫模組程式
五、副程式( 1/6)
副程式是一段具有特定功能的程式區塊;它通常必須透過主程式的呼叫才能被啟動起來執行
Call 副程式A
呼叫 Sub 副程式A
End Sub…
……
…..執行
返回
主程式 副程式
五、副程式( 2/6)
語法:《定義副程式的語法》 Sub 副程式名稱 ([形式參數 1 [As 資料型別 ], 形式參數 2 [As 資料型別 ], …]) 程式敘述區塊 End Sub
《呼叫副程式的語法》 Call 副程式名稱 ([實際參數 1, 實際參數 2, …])
Private Sub Form1_Activated……
讀取用電類型 讀取用電量 If 用電類型為家庭用電 Then 呼叫副程式 F_Expense( ) ElseIf 用電類型為營業用電Then 呼叫副程式 C_Expense( ) End IfEnd Sub
五、副程式( 3/6)
範例:計算家庭用電費與營業用電費
主程式 副程式
'計算家庭用電費Sub F_Expense……
End Sub'計算營業用電費Sub C_Expense……
End Sub
…
……
五、副程式( 4/6)
副程式 F_Expense( )
Sub F_Expense(ByVal volume As Single) '計算家庭用電110: Dim fee As Integer120: If volume > 500 Then '用電量超過 500度130: fee = 110 * 2.1 + 390 * 2.875 + (volume - 500) * 3.6140: ElseIf volume > 110 Then '用電量超過 110度150: fee = 110 * 2.1 + (volume - 110) * 2.875160: Else '用電量在 110度以內170: fee = volume * 2.1180: End If190: MsgBox("電費為 " & fee & " 元 ", , "電費試算 ")End Sub
五、副程式( 5/6)
副程式 C_Expense( )
Sub C_Expense(ByVal volume As Single) '計算營業用電費200: Dim fee As Integer210: Const rate As Single = 3.1220: fee = rate * volume '計算電費230: MsgBox("電費為 " & fee & " 元 ", , "電費試算 ")End Sub
五、副程式( 6/6)
主程式Private Sub Form1_Activated(ByVal sender ……) Handles Me.Activated10: Dim ecase As Short20: Dim usage As Single30: ecase = InputBox("請輸入用電類型: 1)家庭用電 2)營業用電 ", _ "電費試算 ")40: usage = InputBox("請輸入用電量,單位:度 ", "電費試算 ")50: If ecase = 1 Then60: Call F_Expense(usage) '呼叫副程式計算家庭用電費70: Else80: Call C_Expense(usage) '呼叫副程式計算營業用電費90: End If100: EndEnd Sub
六、自定函數( 1/3)
自定函數的功能與副程式類似;差別在於自定函數在執行結束後會產生一個傳回值給呼叫它的程式
1.呼叫主程式
Public Class Form1
X = 自定函數 A( )
End Class
自定函數
Function 自定函數 A( ) As Short
自定函數 A = 100End Function
3.返回並將值 100傳回給變數 X
2.執行
4.執行下一行程式敘述…
……
…
六、自定函數( 2/3)
語法:《定義自定函數的語法》Function 自定函數名稱 ([形式參數 1[As 資料型別 ], 形式參數2_[As 資料型別 ], …]) As 資料型別 程式敘述區塊 自定 函數名稱 = 傳回值End Function
《呼叫自定函數的語法》 變數名稱 = 自定函數名稱 ([實際參數 1, 實際參數 2, …])
六、自定函數( 3/3)
範例:華氏溫度換算為攝氏溫度Function Convert_temp(ByVal F As Short) As Short 'F為形式參數60: Convert_temp = (F - 32) * 5 / 9 '攝氏溫度 = (華氏溫度 - 32 ) * 5 / 9End Function
Private Sub Form1_Activated(ByVal sender …) Handles Me.Activated10: Dim F_temp, C_temp As Short20: F_temp = InputBox("請輸入華氏溫度: ", "溫度換算 ")30: C_temp = Convert_temp(F_temp) 'F_temp為實際參數40: MsgBox("華氏 " & F_temp & " 度 = 攝氏 " & C_temp & " 度 ", , _ "溫度換算 ")50: EndEnd Sub
隨機不重覆
Dim rnd_n As Short Dim ck(4) As Short
For i = 1 To 4 rnd_n = Int(Rnd() * 4) + 1 Do While ck(rnd_n) = 1 rnd_n = Int(Rnd() * 4) + 1 Loop N(i) = rnd_n ck(rnd_n) = 1Next
副程式 (版本一 )
Sub Generate_Random_Number()
Dim rnd_n As ShortDim ck(4) As Short
For i = 1 To 4 rnd_n = Int(Rnd() * 4) + 1 Do While ck(rnd_n) = 1 rnd_n = Int(Rnd() * 4) + 1 Loop N(i) = rnd_n ck(rnd_n) = 1Next
End sub
使用方法: Call Generate_Random_Number()
副程式 (版本二 -加入模組 )
Sub Generate_Random_Number()
Dim rnd_n As ShortDim ck(4) As Short
For i = 1 To 4 rnd_n = Int(Rnd() * 4) + 1 Do While ck(rnd_n) = 1 rnd_n = Int(Rnd() * 4) + 1 Loop Form1.N(i) = rnd_n ck(rnd_n) = 1Next
End sub
使用方法: 1. ”在專案中加入空白模組檔 Module1.vb” 2. Public N(4) as short
3. Call Generate_Random_Number()
副程式 (版本三 -加入參數 )
Sub Generate_Random_Number(ByVal num as short)
Dim rnd_n As ShortDim ck(4) As Short
For i = 1 To num rnd_n = Int(Rnd() * num) + 1 Do While ck(rnd_n) = 1 rnd_n = Int(Rnd() * num) + 1 Loop Form1.N(i) = rnd_n ck(rnd_n) = 1Next
End sub
使用方法: 1. ”在專案中加入空白模組檔 Module1.vb” 2. Public N(4) as short
3. Call Generate_Random_Number(4)
副程式 (版本四 -加入陣列參數 )
Sub Generate_Random_Number(ByVal k() as short, ByVal num as short)
Dim rnd_n As ShortDim ck(4) As Short
For i = 1 To num rnd_n = Int(Rnd() * num) + 1 Do While ck(rnd_n) = 1 rnd_n = Int(Rnd() * num) + 1 Loop K(i)= rnd_n ck(rnd_n) = 1Next
End sub
使用方法: 1. ”在專案中加入空白模組檔 Module1.vb” 2. Public N(4) as short
3. Call Generate_Random_Number(4)
自定函數 Function money(ByVal all As Integer, ByVal ans As Boolean) As Integer Dim rate As Integer If RadioButton1.Checked = True Then rate = 1 ElseIf RadioButton2.Checked = True Then rate = 10 ElseIf RadioButton3.Checked = True Then rate = 100 ElseIf RadioButton4.Checked = True Then rate = 1000 End If
If ans = True Then all = all + rate Else all = all - rate End If money = all End Function
使用方法: all_money = money(all_money, ans)