14.1子程序、過(guò)程及應(yīng)用
目的與要求: 通過(guò)本次課的學(xué)習(xí),掌握VFP的子程序、過(guò)程與自定義函數(shù)。 | ||
教學(xué)內(nèi)容與時(shí)間安排、教學(xué)方法: 教學(xué)安排: 自定義函數(shù)和過(guò)程設(shè)計(jì) 40分鐘 子程序的調(diào)用、變量和作用域 40分鐘 教學(xué)方法: CAI、圖形、表格 | ||
教學(xué)重點(diǎn)及如何突出重點(diǎn)、難點(diǎn)及如何突破難點(diǎn): 教學(xué)重點(diǎn): 自定義函數(shù)和過(guò)程設(shè)計(jì)、子程序的調(diào)用、變量和作用域 教學(xué)難點(diǎn): 子程序的調(diào)用、變量和作用域 | ||
基本內(nèi)容 | 教學(xué) | 課堂設(shè)計(jì) |
8.6 過(guò)程和函數(shù)程序設(shè)計(jì) 在程序設(shè)計(jì)過(guò)程中,經(jīng)常把能夠完成一個(gè)特定功能的程序編寫(xiě)成一個(gè)過(guò)程,作為一個(gè)模塊。以便在其它程序中使用該功能時(shí)調(diào)用該程序。這種可以完成一個(gè)特定功能的程序稱(chēng)為自定義函數(shù)或過(guò)程 1.自定義函數(shù) 對(duì)一些常用算法,可以編寫(xiě)成通用程序,例如為了將一個(gè)小寫(xiě)字符串轉(zhuǎn)換成大寫(xiě)的字符串,系統(tǒng)提供了 UPPER() 函數(shù)。系統(tǒng)將一些通用的算法編寫(xiě)成一個(gè)個(gè)程序提供給用戶(hù)使用,這就是所謂的系統(tǒng)函數(shù)。而用戶(hù)自定義函數(shù)是用戶(hù)根據(jù)需要自己編寫(xiě)的函數(shù)。 一、自定義函數(shù)的建立 自定義函數(shù)的格式如下。 【格式】FUNCTION <函數(shù)名> PARAMETERS <參數(shù)表> <語(yǔ)句序列> RETURN <表達(dá)式> 【功能】定義一個(gè)用戶(hù)自定義函數(shù)。 【說(shuō)明】若使用FUNCTION語(yǔ)句來(lái)指出函數(shù)名,表示該函數(shù)包含在調(diào)用程序中。若缺省該語(yǔ)句,表示此函數(shù)是一個(gè)獨(dú)立文件,函數(shù)名將在建立文件時(shí)確定,其擴(kuò)展名默認(rèn)為.PRG,并可使用命令MODIFY COMMAND <函數(shù)名>來(lái)建立或編輯該自定義函數(shù)。還需注意,自定義函數(shù)的函數(shù)名不能和Visual FoxPro系統(tǒng)函數(shù)同名,也不能和內(nèi)存變量同名。 <語(yǔ)句序列>組成函數(shù)體,用于進(jìn)行各種處理,簡(jiǎn)單函數(shù)的函數(shù)體可以為空。 RETURN 語(yǔ)句用于返回函數(shù)值,其中的<表達(dá)式>值就是函數(shù)值。若缺省該語(yǔ)句,則返回的函數(shù)值為.T.。 自定義函數(shù)與系統(tǒng)函數(shù)調(diào)用方法相同,通過(guò)函數(shù)名調(diào)用,形式為:函數(shù)名(<參數(shù)表>)。 2過(guò)程設(shè)計(jì) 過(guò)程是子程序的另一種形式,它和函數(shù)的不同之處是:在程序結(jié)束之后,不必返回值。如果希望返回參數(shù),可以通過(guò)PARAMETERS語(yǔ)句返回,而不是通過(guò) RETURN 詞句。當(dāng)調(diào)用過(guò)程時(shí),將參數(shù)傳遞給被調(diào)用的過(guò)程,過(guò)程執(zhí)行完后,將參數(shù)通過(guò) PAMETERS 再傳遞給主程序。所以,在過(guò)程中 RETURN 語(yǔ)句并不是必須的,有 RETURN 語(yǔ)句只不過(guò)是形式上更完整而已。 【格式】PROCEDURE <過(guò)程名> [PARAMETERS <參數(shù)表>] <命令序列> [RETURN] 【功能】定義一個(gè)過(guò)程。 【說(shuō)明】過(guò)程作為程序的一部分時(shí)往往列在程序的最后。 ⑴ 過(guò)程的格式是通過(guò)PROCEDURE 過(guò)程名…ENDPROC括起來(lái)的; ⑵ PARAMETERS語(yǔ)句即可傳入?yún)?shù),也可以輸出參數(shù); ⑶ 過(guò)程調(diào)用可以使用命令:DO過(guò)程名 WITH 參數(shù)|參數(shù)變量,如果沒(méi)有參數(shù)可以省略WITH關(guān)鍵字; ⑷ 在參數(shù)傳遞過(guò)程中,一次可以傳遞若干個(gè)變量。每次傳遞多少個(gè)變量,反映在調(diào)用命令中寫(xiě)多少個(gè)變量,接收命令中也要寫(xiě)多少個(gè)變量,傳遞變量之間存在一一對(duì)應(yīng)關(guān)系。這實(shí)際是一種按地址傳遞變量的方式。在函數(shù)的PARAMETER參數(shù)傳遞過(guò)程中還提供了一種按值傳送方式,需要使用SET UDFPARMS TO VALUE|REFERENCE命令進(jìn)行設(shè)置。
-----------本節(jié)課結(jié)束-----------
3.主程序和子程序 一、帶參數(shù)子程序的調(diào)用 【格式】DO <程序名1> [WITH <參數(shù)表>][IN <程序名2>] 【功能】主程序<程序名2>調(diào)用子程序<程序名1>。 【說(shuō)明】<參數(shù)表>中的參數(shù)可以是表達(dá)式,但若為內(nèi)存變量必須具有初值; 調(diào)用子程序時(shí)參數(shù)表中的參數(shù)要傳送給子程序,子程序中也必須設(shè)置相應(yīng)的參數(shù)接收語(yǔ)句。PARAMETERS 可以完成此項(xiàng)功能,但必須是子程序的第一條語(yǔ)句。 二、子程序的返回 主程序與子程序的概念是相對(duì)的,子程序還可調(diào)用它自己的子程序,即子程序可以嵌套調(diào)用。Visual FoxPro的返回命令包含了因嵌套而引出的多種返回方式。 【格式】RETURN [TO MASTER|TO <程序文件名>] 【功能】TO MASTER 使返回時(shí)直接返回到最外層主程序,TO <程序文件名>強(qiáng)制返回到指定的程序文件。 【例】計(jì)算S=1!+2!+3!+4!+5!,要求在子程序中計(jì)算n!,并 定義為函數(shù)。運(yùn)行 * 主程序: E7_20.PRG CLEAR S=0 && 累加器初值為0 FOR i=1 TO 5 ?STR(i)+"的階乘=",STR(mul(i),3) && 輸出每個(gè)數(shù)的階乘 S=S+mul(i) && 通過(guò)子程序名調(diào)用子程序函數(shù),累加階乘 NEXT ?"1+2!+3!+4!+5!=",STR(S,5)
* 子程序函數(shù):mul.PRG PARAMETERS n && 定義參數(shù) mul=1 && 累乘器初值為1 FOR j=1 TO n mul=mul*j && 累乘 NEXT RETURN mul && 返回累乘結(jié)果
.3.4變量作用域 當(dāng)程序使用函數(shù)或過(guò)程作為子程序來(lái)設(shè)計(jì)時(shí),弄清楚變量的作用域尤其重要。變量的作用域指的是變量在什么范圍內(nèi)是有效或能被訪問(wèn)的。在Visual FoxPro中關(guān)于變量聲明分為如下幾種情況。 一、全程變量 在任何模塊中都可使用的變量稱(chēng)為全程變量,全程變量必須先定義后使用。全程變量可以通過(guò)關(guān)鍵字 PUBLIC 命令來(lái)定義。 【格式】PUBLIC <內(nèi)存變量表> 【功能】將<內(nèi)存變量表>指定的變量設(shè)置為公共變量,并將這些變量的初值賦以.F.。 【說(shuō)明】若下層模塊中建立的內(nèi)存變量要供上層模塊使用,或某模塊中建立的內(nèi)存變量要供并列模塊使用,必須將這種變量說(shuō)明成公共變量。 二、局部變量 局部變量使用 LOCAL 關(guān)鍵字來(lái)說(shuō)明,局部變量只在當(dāng)前定義的程序中有效,一旦該程序執(zhí)行完成將自動(dòng)釋放局部變量。 注意:LOCAL 與 LOCATE 前4個(gè)字符字母相同,故不可使用縮寫(xiě)。 三、私有變量 在程序中使用,沒(méi)有通過(guò)PUBLIC和LOCAL聲明而由系統(tǒng)自動(dòng)創(chuàng)建的內(nèi)存變量是私有變量。這種變量不同于局部變量和全局變 量,它的作用范圍在本(子)程序及下屬的子程序內(nèi)有效,而在定義它的模塊程序運(yùn)行結(jié)束時(shí)自動(dòng)清除。 私有變量允許與上層模塊程序的變量同名,但此時(shí)為了分清楚兩者是不同的變量,系統(tǒng)會(huì)采用暫時(shí)屏蔽上級(jí)模塊變量。這種隱蔽說(shuō)明只是對(duì)上級(jí)程序的變量進(jìn)行屏蔽,而不創(chuàng)建變量。隱蔽的目的是為了當(dāng)前程序使用同名變量時(shí)不至于沖突。私有變量也可以使用PRIVATE關(guān)鍵字來(lái)說(shuō)明。 【格式】PRIVATE [<內(nèi)存變量表>][ALL[LIKE|EXCEPT <通配符>]] 【功能】聲明私有變量并隱藏上級(jí)程序的同名變量,直到聲明它的程序、過(guò)程或自定義函數(shù)執(zhí)行結(jié)束后,才恢復(fù)使用先前隱藏的變量。 【說(shuō)明】“聲明”與“建立”不一樣,前者僅指變量的類(lèi)型,后者包括類(lèi)型與值。PUBLIC命令除聲明變量的類(lèi)型外還賦了初值,故稱(chēng)為建立;而PRIVATE并不自動(dòng)對(duì)變量賦值,僅是聲明而已。 在程序模塊調(diào)用時(shí),參數(shù)接收命令PARAMETERS聲明的參變量也是私有變量,與PRIVATE命令相同。 |
講述
|
自定義函數(shù)介紹5分鐘
自定義函數(shù)的建立15分鐘
過(guò)程設(shè)計(jì)15分鐘
帶參數(shù)子程序的調(diào)用8分鐘
子程序的返回10分鐘
全程變量8分鐘
局部變量8分鐘
私有變量8分鐘
|
CopyRight ? 2016 宣城市信息工程學(xué)校 地址:宣城市梅溪路902號(hào) 后臺(tái)登錄
郵編:242000 電話(傳真):0563-2629508 如有問(wèn)題,歡迎惠賜 Email:xclmq@163.com