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