第11章 過程與函數_第1頁
第11章 過程與函數_第2頁
第11章 過程與函數_第3頁
第11章 過程與函數_第4頁
第11章 過程與函數_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1.掌握數據庫及數據庫管理系統(tǒng)的概念

2.掌握關系型數據庫模型的關系(表),記錄、字段、關鍵字、索引概念等。

3.學會使用可視化數據管理器建立的數據庫是Access數據庫(類型名為.mdb)

4.了解數據庫控件的常用屬性及與相關控件的綁定

5.了解結構化查詢語言SQL對數據庫中的數據進行操作本章要求:第11章

過程與函數本章重點:數據庫的建立與使用在設計一個規(guī)模較大、復雜程度較高的程序時,往往根據需要按功能將程序分解成若干個相對獨立的部分,然后對每個部分分別編寫一段程序,這些程序段稱為過程。

過程是構成程序邏輯部件的基本單位,將程序分割成較小的邏輯部件可以簡化程序設計任務,結構化設計就是建立在這個思路之上。

每個過程完成一個具有特定目的的任務。過程的定義:過程的分類

事件過程

VB中有兩類過程:Sub過程通用過程

Function過程事件過程——是對發(fā)生的事件進行處理的代碼通用過程——是由用戶根據自己的需要定義和編寫的、可供事件過程多次調用的程序段。二者的區(qū)別是:

通用過程是由程序中的語句調用。

事件過程往往是由用戶事件觸發(fā)。建立函數(過程)的辦法是:進入代碼窗口后,在對象框選擇“通用”,在過程框選擇“聲名”,然后敲入Function和函數名(Sub和過程名)進入代碼窗口后,選擇主窗口菜單條的“工具”菜單,選擇“添加過程”項,在“類型”框中選擇“函數”(子程序)11.1Sub過程(子程序過程)Sub過程是指以規(guī)定語法結構組織的、可以被重復調用的、具有特定功能的、相對獨立的語句塊。1、

聲明Sub過程聲明Sub過程就是在窗體或標準模塊的代碼窗口編寫一個能實現預期功能的語句塊。聲明Sub過程的語法格式為:

[Private|Public][Static]Sub

過程名([<形參列表>])[<語句塊1>][ExitSub]過程體

[<語句塊2>]

EndSub注意:

Sub過程名無值,無類型。說明:(1)每個通用過程都有一個過程名(由用戶自己指定,規(guī)定同變量名),同一模塊中過程名不得重復。(2)過程前加上Public關鍵字或缺省,則該過程為全局級過程,可以被應用程序的所有窗體模塊或標準模塊中的過程調用(在窗體中定義,調用時應加窗體名)。(3)過程前加上Private關鍵字,則該過程為模塊級過程,只有在聲明它的模塊中才可以調用此過程。(4)在過程名前加上Static關鍵字,表明該過程的變量都是靜態(tài)變量。(5)形參列表是傳遞到過程中的變量名(多個時用“,”分隔),它指明了調用時傳遞給過程的參數的類型和個數,格式為:變量名[AS數據類型](過程級變量)如:SubTryout(xasinteger,yasinteger)x=x+100y=y*6Printx,yEndSub(6)注意:過程可以有參數,也可以不帶任何參數。通用過程可以在標準模塊中建立,也可以在窗體模塊中建立。(7)建立通用過程可以使用以下兩種方法:

①“工程”——”添加模塊”,添加一標準模塊;“工具”——”添加過程”②在標準模塊或窗體模塊中,直接輸入通用過程的代碼。2、調用Sub過程

在其他過程中執(zhí)行已聲明的Sub過程被稱為對Sub過程的調用。(1)使用Call語句調用Sub過程

格式:Call過程名[(實參列表)](2)將過程名作為語句使用格式:過程名<實參列表>特點:

Sub過程的調用是一句獨立的語句。

主過程Call過程1EndSub過程1Call過程2EndSub過程2EndSub說明:(1)可以直接調用本模塊中聲明的過程或標準模塊中聲明的全局過程;(2)當定義的過程重名時,調用過程時,過程名前應加模塊名修飾;(3)如果要調用窗體模塊中聲明的全局過程,調用時過程名前應加窗體名。(4)調用Sub過程時,若省略Call,則<實際參數列表>外面的括號也必須省略。(5)調用Sub過程時,每個實參可以加單獨的括號。(6)實參數表,是往被定義過程的形參列表傳遞的數據;因此,其數據類型需要和形參列表保持一致。實參可以是常量、變量、數組,或復雜表達式,但無論是什么都必須有確定的值。

例1:將求三角形的面積的代碼存放在過程triarea(a,b,c)中,邊長從三個文本框中輸入,如果符合構成三角形的條件,則調用該過程,否則調用suberr過程。程序如下:PrivateSubtriarea(areaAsDouble,xAsDouble,

yAsDouble,zAsDouble)DimsAsDoubles=(x+y+z)/2area=Sqr((s-x)*(s-y)*(s-z)*s)EndSubPrivateSubsuberr(intyrnAsInteger)intyrn=MsgBox("請檢查您的數據",vbYesNo+vbInformation,"數據錯誤")EndSub3、使用Sub過程PrivateSubCommand1_Click()Dima#,b#,c#,s#DimintYesorNoAsIntegera=Val(Text1.Text)b=Val(Text2.Text)c=Val(Text3.Text)Ifa+b>cAndb+c>aAndc+a>bThen

Calltriarea(s,a,b,c)'使用Call關鍵字,實際參數用括號括起來

Print"面積=";s

Else

suberrintYesorNo

'不使用Call關鍵字,實際參數不用括號

EndIfEndSub

Sub過程的調用是一句獨立的語句。

Function過程與Sub過程的主要區(qū)別是:

Function過程可返回一個值到調用的過程1、

聲明Function過程格式:[Public|Private][Static]Function函數過程名

[(<參數列表>)][As<類型>]

[<語句塊>][<函數過程名>=<表達式>]‘返回值語句

[ExitFunction]EndFunction注意:Function過程名有值,有類型。在函數體內,函數名可以當變量名使用,函數的返回值就是通過對函數名的賦值語句來實現的。即函數值通過函數名返回。

函數過程需要返回的值的類型由

As<類型>

設置。11.2Function過程(函數)函數體2、調用Function過程Function過程的調用,與標準函數(內部函數)相同。

通常用在表達式中

格式:函數名(<實參列表>)

特點:不能獨立存在,必須參加表達式的運算。如:下面是已知直角三角形兩直角邊的值,計算斜邊的函數。

functionmyfun(Aasinteger,Basinteger)asstring

myfun=sqr(A*A+B*B)

Endfunction

label1.caption=myfun(Cint(text1.text),cint(text2.text))

strX=myfun(width,height)例2:將例1中兩個Sub過程改為Function過程。PrivateFunctiontriarea(xAsDouble,yAsDouble,zAsDouble)DimsAsDoubles=(x+y+z)/2triarea=Sqr((s-x)*(s-y)*(s-z)*s)EndFunctionPrivateSubCommand1_Click()

Dima#,b#,c#,s#,intYesorNo%a=Val(Text1.Text):b=Val(Text2.Text)c=Val(Text3.Text)

Ifa+b>cAndb+c>aAndc+a>bThen

Print"面積=";triarea(a,b,c)

Else

intYesorNo=suberr()‘

無參數時,括號不能省略

EndIfEndSub內部函數

1.數學函數2.字符串函數Sub過程和Function函數過程中的<參數列表>中的參數稱為形式參數(形參),在程序中調用Sub過程和Function函數過程時<參數列表>中稱為實際參數(實參)。在調用過程時,就是把“實參”依次按位置傳遞給被調用過程的“形參”,然后執(zhí)行被調用過程中的語句。參數傳遞時相當于給變量賦初值。如:

Printgreatcd(x,y)

PublicFunctiongreatcd(mAsInteger,nAsInteger)

參數傳遞有兩種模式:按值傳遞與按址傳遞11.3過程中參數的傳送按值傳遞就是將實參的值傳送給被調用過程中的形參。即:系統(tǒng)把實參復制一份傳送給形參。這樣,被調用的過程如果改變了形參的值,也不會改變實參的值。在VB中,傳值方式的標志為:在形參前加上ByVal。這種傳遞方式是一種單向的數據傳遞,即調用時只能由實參的值傳遞給形參,調用結束不能

由形參將操作結果返回給實參。實參可以是常數、變量或表達式。1、按值傳遞例:寫出下列程序的運行結果Subtryout(ByValxasinteger,ByValyasinteger)x=x+100y=y*6print“x=“;x.”y=“;yEndSubSubForm_click()Dima%,b%a=10:b=20tryouta,bPrint“a=“;a,”b=“;bEndSub傳值:X=110y=120a=10b=20傳址:X=110y=120a=110b=1202、按址傳遞——變量的引用傳址方式是將實參在內存的地址傳遞給形參,也就是實參、形參公用內存的“地址”。在VB中,按址傳遞數據是在形參前加上ByDef(默認方式)。這種傳遞方式是一種雙向的數據傳遞,即調用時實參將值傳遞給形參;調用結束由形參將操作結果返回給實參。當用傳址方式時,實參只能是變量、數組名,不能是常數、表達式。修改前例題

ByValByDef再寫其運行結果例5:下面的程序求解S1=nS2=n+nSn=n+n+…+n(n個n累加)并輸出S1到Sn。n為自然數,從文本框值輸入。函數過程(注意傳值與傳址的區(qū)別):ByDefPublicFunctionsum(mAsInteger,ByVal

nAsInteger)sum=mDoWhilen>1sum=sum+mn=n-1LoopEndFunction事件過程:PrivateSubCommand1_Click()Dimi%,s(),a%,k%Clsa=Val(Text1.Text)ReDims(1Toa)Fori=1Toa按值傳送

s(i)=sum(a,i)k=k+1Print"i=";i,"k=";k,"s"&i&"=";s(i)Ifk>aThenExitForNextiEndSub按址傳送3、數組作過程的參數VisualBasic允許把數組作為實參傳送到過程中。數組作參數是通過傳地址方式傳送。在傳送數組時,除遵守參數傳送的一般規(guī)則外,還應注意以下幾點:(1)為了把一個數組的全部元素傳送給一個過程,應將數組名分別寫入形參表中,并略去數組的上下界,但括號不能省略。PrivateSubSort(a()Assingle)

……EndSub其中形參“a()”即為數組。

(2)被調過程可通過Lbound和Ubound函數確定實參數組的上、下界。(3)當用數組作形參時,對應的實參必須也是數組,且類型一致。(4)實參和形參結合是按地址傳遞,即形參數組和實參數組共用一段內存單元。例如:定義了實參數組b(1to8),給它們賦了值,調用Sort()函數過程的形式如下:

Sortb()或

CallSort(b())

實參數組后面的括號可以省略,但為便于閱讀,建議一般不要省略為好。3、數組作過程的參數

調用時形參數組a和實參數組b虛實結合,共用一段內存單元。因此在Sort()過程中改變數組a的各元素值,也就相當于改變了實參數組b中對應的元素的值,當調用結束時,形參數組a成為無定義。

b(1)b(2)b(3)b(4)b(5)b(6)b(7)b(8)

a(1) a(2)a(3)a(4)a(5)a(6)a(7)a(8)參數為數組時虛實結合示意圖

3、數組作過程的參數11.4可選參數和可變參數1、可選參數

在過程的形參列表中加入Optional關鍵字,就可以指定過程的參數為可選的。如果指定了可選參數,則參數表中此參數后面的其它參數也必是可選的,并且要用Optional關鍵字來聲明。

例6:求兩個數的和的函數過程。

lt6.vbp函數過程:PublicFunctionmysum(firstAsInteger,secondAsLong,Optionalthird)mysum=first+second

IfNotIsMissing(third)Thenmysum=mysum+thirdEndFunction事件過程:PrivateSubCommand1_Click()DimaAsInteger,bAsLong,cAsDoubleDimsumAsIntegera=10:b=20Sum=mysum(a,b)Print"sum=";Suma=10:b=20:c=30Sum=mysum(a,b,c)Print"sum=";SumEndSubIsMissing()——檢測可選參數是否被省略2、不定數量的參數(可變參數)

一般說來,過程調用中的參數個數應等于過程說明的參數個數。在傳遞參數時,如果要求參數的數目可以變化,則在函數過程或Sub過程的形參前可加ParamArray關鍵字(不能與ByValByDef…連用)指明。格式如下:Sub過程名([其他參數,]ParamArray<數組名>())

PrivateSubCommand1_Click()Dims(),a%,bAsLong,cAsVariant,dAsDoubles=Array(1,2,3,4,5)Print"sum=";multisum(s(0),s(2),s(4))a=1000:b=10000:c=100:d=10Print"sum=";multisum(a,b,c,d)EndSub

PublicFunctionmultisum(ParamArrayp())Dimint1%,sumasvariantForint1=LBound(p)ToUBound(p)sum=sum+p(int1)Nextmultisum=sumEndSub11.5過程的嵌套和遞歸1、過程的嵌套

在程序中調用一子過程,而在子過程中又調用另外的子過程,這種程序結構稱為過程的嵌套。過程的嵌套調用執(zhí)行過程如下圖:2、過程的遞歸調用用自身的結構來描述自身,稱遞歸。例如,對階乘的定義:VisualBasic允許在一個Sub子過程和Function過程的定義內部調用自己,即遞歸Sub子過程和遞歸Function函數。PrivateFunctionfac(nAsInteger)AsIntegerIfn=1Then fac=1Else fac=n*fac(n-1)EndIfEndFunctionPrivateSubForm_Click() Print“fac(4)=”;fac(4)EndSub程序的遞歸過程:說明:遞歸處理分遞推和回歸兩個過程,如上圖所示。使用遞歸算法必須要滿足以下的遞歸條件:

(1)存在遞歸結束條件及結束時的值;(2)能用遞歸形式表示,且遞歸向終止條件發(fā)展。根據過程的作用域,過程分為窗體/模塊級和全局級。11.6變量與過程的作用范圍不同作用范圍的二種過程定義及調用規(guī)則能但過程名必須唯一,否則要加標準模塊名能但必須在過程名前加窗體名不能不能能否被本應用程序其他模塊調用能能能能能否被本模塊其他過程調用Public缺省Private定義方式標準模塊窗體標準模塊窗體全局級模塊級作用范圍變量的作用域VB應用程序窗體文件模塊文件聲名部分事件過程通用過程全局聲名部分模塊層聲名部分通用過程變量的作用域根據變量的作用域,變量分為局部(過程級)變量、窗體/模塊變量和全局變量局部變量在過程中用Dim語句定義,只存在于過程中窗體/模塊變量Dim語句或Private語句定義,模塊中的所有過程都可使用全局變量Public語句定義,可以在所有模塊中使用1.局部變量

在一個過程內部(例如Command1_Click)定義的變量稱為局部變量。PrivateSubForm1_click()

DimCountAsInteger……EndSub

PrivateSubCommand1_click()

DimCountAsInteger

StaticSumAsSingl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論