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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

事件過程

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

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

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

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

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

[Private|Public][Static]Sub

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

[<語句塊2>]

EndSub注意:

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

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

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

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

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

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

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

yAsDouble,zAsDouble)DimsAsDoubles=(x+y+z)/2area=Sqr((s-x)*(s-y)*(s-z)*s)EndSubPrivateSubsuberr(intyrnAsInteger)intyrn=MsgBox("請檢查您的數(shù)據(jù)",vbYesNo+vbInformation,"數(shù)據(jù)錯誤")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關(guān)鍵字,實(shí)際參數(shù)用括號括起來

Print"面積=";s

Else

suberrintYesorNo

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

EndIfEndSub

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

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

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

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

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

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

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

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

As<類型>

設(shè)置。11.2Function過程(函數(shù))函數(shù)體2、調(diào)用Function過程Function過程的調(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中兩個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()‘

無參數(shù)時,括號不能省略

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

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

Printgreatcd(x,y)

PublicFunctiongreatcd(mAsInteger,nAsInteger)

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

由形參將操作結(jié)果返回給實(shí)參。實(shí)參可以是常數(shù)、變量或表達(dá)式。1、按值傳遞例:寫出下列程序的運(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í)參將值傳遞給形參;調(diào)用結(jié)束由形參將操作結(jié)果返回給實(shí)參。當(dāng)用傳址方式時,實(shí)參只能是變量、數(shù)組名,不能是常數(shù)、表達(dá)式。修改前例題

ByValByDef再寫其運(yùn)行結(jié)果例5:下面的程序求解S1=nS2=n+nSn=n+n+…+n(n個n累加)并輸出S1到Sn。n為自然數(shù),從文本框值輸入。函數(shù)過程(注意傳值與傳址的區(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、數(shù)組作過程的參數(shù)VisualBasic允許把數(shù)組作為實(shí)參傳送到過程中。數(shù)組作參數(shù)是通過傳地址方式傳送。在傳送數(shù)組時,除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下幾點(diǎn):(1)為了把一個數(shù)組的全部元素傳送給一個過程,應(yīng)將數(shù)組名分別寫入形參表中,并略去數(shù)組的上下界,但括號不能省略。PrivateSubSort(a()Assingle)

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

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

Sortb()或

CallSort(b())

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

調(diào)用時形參數(shù)組a和實(shí)參數(shù)組b虛實(shí)結(jié)合,共用一段內(nèi)存單元。因此在Sort()過程中改變數(shù)組a的各元素值,也就相當(dāng)于改變了實(shí)參數(shù)組b中對應(yīng)的元素的值,當(dāng)調(diào)用結(jié)束時,形參數(shù)組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)參數(shù)為數(shù)組時虛實(shí)結(jié)合示意圖

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

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

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

lt6.vbp函數(shù)過程: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()——檢測可選參數(shù)是否被省略2、不定數(shù)量的參數(shù)(可變參數(shù))

一般說來,過程調(diào)用中的參數(shù)個數(shù)應(yīng)等于過程說明的參數(shù)個數(shù)。在傳遞參數(shù)時,如果要求參數(shù)的數(shù)目可以變化,則在函數(shù)過程或Sub過程的形參前可加ParamArray關(guān)鍵字(不能與ByValByDef…連用)指明。格式如下:Sub過程名([其他參數(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過程的嵌套和遞歸1、過程的嵌套

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

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

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

DimCountAsInteger……EndSub

PrivateSubCommand1_click()

DimCountAsInteger

StaticSumAsSingl

溫馨提示

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

最新文檔

評論

0/150

提交評論