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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

3.學(xué)會(huì)使用可視化數(shù)據(jù)管理器建立的數(shù)據(jù)庫(kù)是Access數(shù)據(jù)庫(kù)(類型名為.mdb)

4.了解數(shù)據(jù)庫(kù)控件的常用屬性及與相關(guān)控件的綁定

5.了解結(jié)構(gòu)化查詢語(yǔ)言SQL對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行操作本章要求:第11章

過(guò)程與函數(shù)本章重點(diǎn):數(shù)據(jù)庫(kù)的建立與使用在設(shè)計(jì)一個(gè)規(guī)模較大、復(fù)雜程度較高的程序時(shí),往往根據(jù)需要按功能將程序分解成若干個(gè)相對(duì)獨(dú)立的部分,然后對(duì)每個(gè)部分分別編寫(xiě)一段程序,這些程序段稱為過(guò)程。

過(guò)程是構(gòu)成程序邏輯部件的基本單位,將程序分割成較小的邏輯部件可以簡(jiǎn)化程序設(shè)計(jì)任務(wù),結(jié)構(gòu)化設(shè)計(jì)就是建立在這個(gè)思路之上。

每個(gè)過(guò)程完成一個(gè)具有特定目的的任務(wù)。過(guò)程的定義:過(guò)程的分類

事件過(guò)程

VB中有兩類過(guò)程:Sub過(guò)程通用過(guò)程

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

通用過(guò)程是由程序中的語(yǔ)句調(diào)用。

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

聲明Sub過(guò)程聲明Sub過(guò)程就是在窗體或標(biāo)準(zhǔn)模塊的代碼窗口編寫(xiě)一個(gè)能實(shí)現(xiàn)預(yù)期功能的語(yǔ)句塊。聲明Sub過(guò)程的語(yǔ)法格式為:

[Private|Public][Static]Sub

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

[<語(yǔ)句塊2>]

EndSub注意:

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

①“工程”——”添加模塊”,添加一標(biāo)準(zhǔn)模塊;“工具”——”添加過(guò)程”②在標(biāo)準(zhǔn)模塊或窗體模塊中,直接輸入通用過(guò)程的代碼。2、調(diào)用Sub過(guò)程

在其他過(guò)程中執(zhí)行已聲明的Sub過(guò)程被稱為對(duì)Sub過(guò)程的調(diào)用。(1)使用Call語(yǔ)句調(diào)用Sub過(guò)程

格式:Call過(guò)程名[(實(shí)參列表)](2)將過(guò)程名作為語(yǔ)句使用格式:過(guò)程名<實(shí)參列表>特點(diǎn):

Sub過(guò)程的調(diào)用是一句獨(dú)立的語(yǔ)句。

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

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

yAsDouble,zAsDouble)DimsAsDoubles=(x+y+z)/2area=Sqr((s-x)*(s-y)*(s-z)*s)EndSubPrivateSubsuberr(intyrnAsInteger)intyrn=MsgBox("請(qǐng)檢查您的數(shù)據(jù)",vbYesNo+vbInformation,"數(shù)據(jù)錯(cuò)誤")EndSub3、使用Sub過(guò)程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關(guān)鍵字,實(shí)際參數(shù)用括號(hào)括起來(lái)

Print"面積=";s

Else

suberrintYesorNo

'不使用Call關(guān)鍵字,實(shí)際參數(shù)不用括號(hào)

EndIfEndSub

Sub過(guò)程的調(diào)用是一句獨(dú)立的語(yǔ)句。

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

Function過(guò)程可返回一個(gè)值到調(diào)用的過(guò)程1、

聲明Function過(guò)程格式:[Public|Private][Static]Function函數(shù)過(guò)程名

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

[<語(yǔ)句塊>][<函數(shù)過(guò)程名>=<表達(dá)式>]‘返回值語(yǔ)句

[ExitFunction]EndFunction注意:Function過(guò)程名有值,有類型。在函數(shù)體內(nèi),函數(shù)名可以當(dāng)變量名使用,函數(shù)的返回值就是通過(guò)對(duì)函數(shù)名的賦值語(yǔ)句來(lái)實(shí)現(xiàn)的。即函數(shù)值通過(guò)函數(shù)名返回。

函數(shù)過(guò)程需要返回的值的類型由

As<類型>

設(shè)置。11.2Function過(guò)程(函數(shù))函數(shù)體2、調(diào)用Function過(guò)程Function過(guò)程的調(diào)用,與標(biāo)準(zhǔn)函數(shù)(內(nèi)部函數(shù))相同。

通常用在表達(dá)式中

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

特點(diǎn):不能獨(dú)立存在,必須參加表達(dá)式的運(yùn)算。如:下面是已知直角三角形兩直角邊的值,計(jì)算斜邊的函數(shù)。

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中兩個(gè)Sub過(guò)程改為Function過(guò)程。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()‘

無(wú)參數(shù)時(shí),括號(hào)不能省略

EndIfEndSub內(nèi)部函數(shù)

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

Printgreatcd(x,y)

PublicFunctiongreatcd(mAsInteger,nAsInteger)

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

由形參將操作結(jié)果返回給實(shí)參。實(shí)參可以是常數(shù)、變量或表達(dá)式。1、按值傳遞例:寫(xiě)出下列程序的運(yùn)行結(jié)果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、按址傳遞——變量的引用傳址方式是將實(shí)參在內(nèi)存的地址傳遞給形參,也就是實(shí)參、形參公用內(nèi)存的“地址”。在VB中,按址傳遞數(shù)據(jù)是在形參前加上ByDef(默認(rèn)方式)。這種傳遞方式是一種雙向的數(shù)據(jù)傳遞,即調(diào)用時(shí)實(shí)參將值傳遞給形參;調(diào)用結(jié)束由形參將操作結(jié)果返回給實(shí)參。當(dāng)用傳址方式時(shí),實(shí)參只能是變量、數(shù)組名,不能是常數(shù)、表達(dá)式。修改前例題

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

nAsInteger)sum=mDoWhilen>1sum=sum+mn=n-1LoopEndFunction事件過(guò)程: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、數(shù)組作過(guò)程的參數(shù)VisualBasic允許把數(shù)組作為實(shí)參傳送到過(guò)程中。數(shù)組作參數(shù)是通過(guò)傳地址方式傳送。在傳送數(shù)組時(shí),除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下幾點(diǎn):(1)為了把一個(gè)數(shù)組的全部元素傳送給一個(gè)過(guò)程,應(yīng)將數(shù)組名分別寫(xiě)入形參表中,并略去數(shù)組的上下界,但括號(hào)不能省略。PrivateSubSort(a()Assingle)

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

(2)被調(diào)過(guò)程可通過(guò)Lbound和Ubound函數(shù)確定實(shí)參數(shù)組的上、下界。(3)當(dāng)用數(shù)組作形參時(shí),對(duì)應(yīng)的實(shí)參必須也是數(shù)組,且類型一致。(4)實(shí)參和形參結(jié)合是按地址傳遞,即形參數(shù)組和實(shí)參數(shù)組共用一段內(nèi)存單元。例如:定義了實(shí)參數(shù)組b(1to8),給它們賦了值,調(diào)用Sort()函數(shù)過(guò)程的形式如下:

Sortb()或

CallSort(b())

實(shí)參數(shù)組后面的括號(hào)可以省略,但為便于閱讀,建議一般不要省略為好。3、數(shù)組作過(guò)程的參數(shù)

調(diào)用時(shí)形參數(shù)組a和實(shí)參數(shù)組b虛實(shí)結(jié)合,共用一段內(nèi)存單元。因此在Sort()過(guò)程中改變數(shù)組a的各元素值,也就相當(dāng)于改變了實(shí)參數(shù)組b中對(duì)應(yīng)的元素的值,當(dāng)調(diào)用結(jié)束時(shí),形參數(shù)組a成為無(wú)定義。

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)參數(shù)為數(shù)組時(shí)虛實(shí)結(jié)合示意圖

3、數(shù)組作過(guò)程的參數(shù)11.4可選參數(shù)和可變參數(shù)1、可選參數(shù)

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

例6:求兩個(gè)數(shù)的和的函數(shù)過(guò)程。

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

IfNotIsMissing(third)Thenmysum=mysum+thirdEndFunction事件過(guò)程: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()——檢測(cè)可選參數(shù)是否被省略2、不定數(shù)量的參數(shù)(可變參數(shù))

一般說(shuō)來(lái),過(guò)程調(diào)用中的參數(shù)個(gè)數(shù)應(yīng)等于過(guò)程說(shuō)明的參數(shù)個(gè)數(shù)。在傳遞參數(shù)時(shí),如果要求參數(shù)的數(shù)目可以變化,則在函數(shù)過(guò)程或Sub過(guò)程的形參前可加ParamArray關(guān)鍵字(不能與ByValByDef…連用)指明。格式如下:Sub過(guò)程名([其他參數(shù),]ParamArray<數(shù)組名>())

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過(guò)程的嵌套和遞歸1、過(guò)程的嵌套

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

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

在一個(gè)過(guò)程內(nèi)部(例如Command1_Click)定義的變量稱為局部變量。PrivateSubForm1_click()

DimCountAsInteger……EndSub

PrivateSubCommand1_click()

DimCountAsInteger

StaticSumAsSingl

溫馨提示

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

評(píng)論

0/150

提交評(píng)論