第8章 VFP的程序設(shè)計(jì)技術(shù)_第1頁(yè)
第8章 VFP的程序設(shè)計(jì)技術(shù)_第2頁(yè)
第8章 VFP的程序設(shè)計(jì)技術(shù)_第3頁(yè)
第8章 VFP的程序設(shè)計(jì)技術(shù)_第4頁(yè)
第8章 VFP的程序設(shè)計(jì)技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩105頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Visual FoxPro數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用第第 8 章章返回返回8.1 程序設(shè)計(jì)概述8.2 程序文件的建立和執(zhí)行8.3 程序的基本結(jié)構(gòu)8.4 過程與過程調(diào)用8.5 數(shù)組返回返回 程序是為了完成某項(xiàng)任務(wù)所需執(zhí)行的命令序列,這些命令按照一定的結(jié)構(gòu)有機(jī)地組合在一起,并以文件的形式存儲(chǔ)在磁盤上,它的擴(kuò)展名為擴(kuò)展名為.PRG。 VFP應(yīng)用程序一般由以下幾個(gè)部分組成:指出程序的名稱、功能、作者等信息。設(shè)置程序的運(yùn)行環(huán)境。包含實(shí)現(xiàn)某項(xiàng)功能的所有命令序列,一般包含數(shù)據(jù)的輸入輸出、數(shù)據(jù)的處理以及結(jié)果輸出等。一些整理工作,如關(guān)閉各種文件,使系統(tǒng)狀態(tài)恢復(fù)到標(biāo)準(zhǔn)狀態(tài)。返回到系統(tǒng)的命令窗口狀態(tài)或操作系統(tǒng)狀態(tài)。 返回返回

2、 一個(gè)大型的程序設(shè)計(jì)的基本步驟可以描述為: 對(duì)問題進(jìn)行說明; 對(duì)問題進(jìn)行分解; 編制各個(gè)分支模塊; 測(cè)試以及完善各個(gè)分支模塊; 組裝全部模塊; 整體程序的測(cè)試。 返回返回8.2.1 程序文件的建立與修改8.2.2 程序文件的執(zhí)行8.2.3 程序的常用命令返回返回程序文件的概念程序文件的概念 在VFP中,要實(shí)現(xiàn)對(duì)數(shù)據(jù)操作的某一種功能,總要通過執(zhí)行命令來完成。對(duì)于較為簡(jiǎn)單的功能,執(zhí)行一個(gè)命令即可,但對(duì)于較復(fù)雜的功能,則往往需要執(zhí)行多條命令多條命令來加以實(shí)現(xiàn)。 把多條命令多條命令組織起來,保存于一個(gè)文件中,便構(gòu)成了一個(gè)程序文件,它的擴(kuò)展名為.PRG。返回返回1、使用菜單、使用菜單建立程序文件:建立程

3、序文件: 1)第一步:)第一步: 選擇菜單文件 新建命令 或單擊常用工具欄中的“新建”按鈕 2)第二步:)第二步: 從右圖的對(duì)話框中選中“程序”,并單擊“新建文件”按鈕 進(jìn)入編輯窗口,輸入程序的內(nèi)容,按+W存盤退出。返回返回2 2、使用命令使用命令建立程序文件建立程序文件格式:格式:MODIFY COMMAND 實(shí)例:實(shí)例:顯示“教師信息表”中所有信息,再按職稱分類匯總,然后顯示各類職稱的工資總和 MODIFY COMMAND MODIFY COMMAND GZZH (建立文件) DO DO GZZH (執(zhí)行文件)程序文件內(nèi)容如下頁(yè):程序文件內(nèi)容如下頁(yè):返回返回clearUSE 教師信息表LI

4、ST INDEX ON 職稱 TO ZCTOTAL ON 職稱 TO BUFUSE BUFCOPY TO GZZH FIELD 職稱 ,基礎(chǔ)工資USE GZZHLIST FIELD 職稱 ,基礎(chǔ)工資返回返回【例8.1】建立名為8-1.prg的應(yīng)用程序,使其能夠打開表文件“學(xué)生.dbf”,并且可以根據(jù)輸入的學(xué)生姓名在該表文件中查找并輸出該學(xué)生的基本情況,然后關(guān)閉該文件。 在命令窗口中鍵入如下命令。 打開程序編輯窗口,在其中輸入以下代碼。輸入完畢后單擊輸入完畢后單擊“關(guān)閉關(guān)閉”按鈕,在彈出的按鈕,在彈出的“保存保存”對(duì)話框中輸入對(duì)話框中輸入“8-1.prg”即完成了應(yīng)用程序的建立。即完成了應(yīng)用程序

5、的建立。 返回返回 在Visual FoxPro系統(tǒng)中,除了用上面介紹的建立、編輯程序文件方法外,還可以借助于“表單設(shè)計(jì)器”、“類設(shè)計(jì)器”、“菜單設(shè)計(jì)器”、“報(bào)表設(shè)計(jì)器”和“項(xiàng)目管理器”等代碼設(shè)計(jì)工具完成程序文件的建立與編輯。返回返回1)用命令 MODIFY COMMAND 程序名 MODIFY FILE 程序名.prg 2)利用菜單文件-打開選擇“程序程序”類型選擇程序名程序名 返回返回方法方法1 1:命令方式:命令方式 DO DO 運(yùn)行一個(gè)程序文件(.prg)時(shí),會(huì)先把它翻譯成一個(gè)目標(biāo)文件(.fxp),再運(yùn)行該目標(biāo)文件。也可直接運(yùn)行目標(biāo)文件:DO 程序名.fxp方法方法2 2:菜單方式:菜

6、單方式程序-運(yùn)行或直接選擇最下面的執(zhí)行當(dāng)前程序的命令返回返回 在程序運(yùn)行過程中執(zhí)行到下述命令時(shí)將會(huì)中斷運(yùn)行而退出:終止程序運(yùn)行,消除所有的私有變量,返回命令窗口;轉(zhuǎn)去執(zhí)行另一個(gè)程序;結(jié)束當(dāng)前程序的運(yùn)行,返回到調(diào)用它的上級(jí)程序,若沒有上級(jí)程序就返回命令窗口。退出VFP程序,返回到操作系統(tǒng)。返回返回l 在程序運(yùn)行過程中,若按下ESC鍵可使得運(yùn)行強(qiáng)行中斷。系統(tǒng)將給予用戶3種選擇:中斷程序的運(yùn)行,這是默認(rèn)選項(xiàng);忽略ESC的中斷作用,繼續(xù)執(zhí)行程序;暫時(shí)中斷程序的運(yùn)行,返回命令窗口,當(dāng)再次運(yùn)行時(shí)可以從中斷處繼續(xù)運(yùn)行程序。返回返回(1) ACCEPT從鍵盤得到一字符串字符串(2) WAIT從鍵盤得到一個(gè)字符

7、字符(3) INPUT給內(nèi)存變量賦值(多種類型多種類型)返回返回 格式:格式: 命令功能:暫停程序的運(yùn)行,等待用戶鍵入字符型常量以賦給指定的內(nèi)存變量。 說明:說明: 為可選項(xiàng),它是一個(gè)用于提示說明的字符型表達(dá)式。當(dāng)程序執(zhí)行到可選項(xiàng)時(shí),將會(huì)計(jì)算該表達(dá)式的值并將其顯示出來。 如果不鍵入任何字符而只按ENTER鍵,則賦給內(nèi)存變量的值將是一個(gè)空字符串。 該命令最多能接收254個(gè)字符。返回返回【例8-2】從鍵盤輸入表文件名。返回返回 WAIT TO WINDOW AT , TIMEOUT 功能:功能:屏幕出現(xiàn)提示符的內(nèi)容,等待等待從鍵盤上接收輸入;或在指定時(shí)間或地點(diǎn)屏幕出現(xiàn)提示符;也可以不要提示,按任意

8、鍵繼續(xù)。說明:說明:內(nèi)存變量只能接受一個(gè)字符,不要加回車不要加回車返回返回【例】在屏幕第【例】在屏幕第2020行行5050列顯示信息框列顯示信息框“請(qǐng)稍候” 2秒鐘WAIT WAIT 請(qǐng)稍候請(qǐng)稍候 WINDOW WINDOW AT 20,50AT 20,50 TIMEOUT 2 TIMEOUT 2執(zhí)行時(shí),屏幕出現(xiàn)小窗口:停留2秒鐘【例】等待輸入一個(gè)字符后,繼續(xù)往下【例】等待輸入一個(gè)字符后,繼續(xù)往下WAIT WAIT 請(qǐng)回答請(qǐng)回答(Y/N) TO OP(Y/N) TO OPIF OP=Y OR OP=“y ? YESELSE ? NOENDIF返回返回【例】在【例】在信息框信息框顯示提示內(nèi)容顯示

9、提示內(nèi)容停留停留5 5秒鐘秒鐘CLEARUSE 教師信息表ACCEPT 請(qǐng)輸入職稱: TO ZCLIST FOR 職稱=ZCWAIT “職稱為 ”+ZC+“ 的紀(jì)錄已顯示”; WINDOW AT 20,30 TIMEOUT 5* *注意:當(dāng)屏幕出現(xiàn)提示字符串時(shí),注意:當(dāng)屏幕出現(xiàn)提示字符串時(shí),* *輸入:副教授輸入:副教授返回返回格式:格式:INPUT TO 功能:功能:屏幕出現(xiàn)提示符的內(nèi)容,等待等待從鍵盤上接收輸入接收輸入數(shù)據(jù)。注意:注意:1)兩端要加引號(hào)2)可以為字符字符、數(shù)值數(shù)值、日期日期等類型3)內(nèi)存變量的類型,取決于輸入的值返回返回【例】將馬大大的出生日期改為83.4.2CLEARIN

10、PUT “INPUT “請(qǐng)輸入馬大大的出生日期請(qǐng)輸入馬大大的出生日期: TO DD: TO DDUSE A班學(xué)生信息REPLACE 出生日期 WITH DD FOR 姓名=馬大大BROW*注意:當(dāng)屏幕出現(xiàn)提示字符串時(shí),輸入:*CTOD(“04/02/83”)或1983-4-2或date(1983,4,2)返回返回【例8-4】輸入學(xué)生姓名,把“A班學(xué)生信息”表中該學(xué)生的信息顯示出來。USE A班學(xué)生信息班學(xué)生信息INPUT 請(qǐng)輸入要查詢的學(xué)生姓名:請(qǐng)輸入要查詢的學(xué)生姓名: TO nameLOCATE FOR 姓名姓名 = nameDISPLAYUSE 程序運(yùn)行時(shí),根據(jù)提示輸入“馬大大”,顯示馬大

11、大信息。(思考:接收字符型數(shù)據(jù),使用哪個(gè)命令更思考:接收字符型數(shù)據(jù),使用哪個(gè)命令更好?)好?) 返回返回(1)注釋命令(2)文本輸出命令(3)定位輸出命令(4)設(shè)置會(huì)話狀態(tài)命令(5)清除命令簡(jiǎn)介返回返回為了提高程序的可讀性或幫助讀者了解程序的結(jié)構(gòu),程序設(shè)計(jì)人員會(huì)對(duì)某些語(yǔ)句作一些解釋性的說明。 命令格式一: 命令格式二: 命令格式三: 如:LOCATE FOR 姓名 = 馬大大“ & 定位到“姓名”為“馬;大大”的記錄 返回返回 格式:格式: 功能:功能:在屏幕或打印機(jī)上按原樣輸出文本的內(nèi)容?!纠?-5】TEXT的使用示例。返回返回 命令格式: 功能:從指定的行、列坐標(biāo)位置開始顯示SAY

12、子句中表達(dá)式的值。:有GET時(shí),起提示作用。GET 子句用來顯示待輸入數(shù)據(jù)的變量值,該變量必須事先定義。DEFAULT 子句用于給GET中的變量賦初值。執(zhí)行 READ 語(yǔ)句時(shí),系統(tǒng)允許用戶從鍵盤上輸入新的值,并將其賦給GET中的變量。返回返回【例8-6】.SAYGETREAD的使用示例。 要求用戶輸入姓名和基本工資,用戶輸入后,將結(jié)果賦給相應(yīng)變量 返回返回 格式: 功能:設(shè)置是否顯示命令執(zhí)行的響應(yīng)信息。格式一: 功能:清除當(dāng)前屏幕上的所有信息。格式二: 功能:關(guān)閉所有文件,釋放所有內(nèi)存變量。格式三: 功能:釋放所有的內(nèi)存變量。格式四: 功能:清除鍵盤緩沖區(qū)。 返回返回結(jié)構(gòu)化程序設(shè)計(jì)把程序的基本

13、結(jié)構(gòu)分為三種:分為三種: 1、 順序結(jié)構(gòu):語(yǔ)句按輸入的順序依次執(zhí)行。 2、 分支結(jié)構(gòu):語(yǔ)句按條件選擇執(zhí)行。 3、循環(huán)結(jié)構(gòu):反復(fù)執(zhí)行循環(huán)體語(yǔ)句返回返回?cái)?shù)據(jù)過程特定過程準(zhǔn)備判斷連接端點(diǎn)流線返回返回 1 1順序結(jié)構(gòu)順序結(jié)構(gòu)(流程圖)順序結(jié)構(gòu)是在程序執(zhí)行時(shí),根據(jù)程序中語(yǔ)句的物理順序物理順序依次執(zhí)行的命令序列。語(yǔ)句A語(yǔ)句B返回返回2 2、分支結(jié)構(gòu)、分支結(jié)構(gòu)(流程圖) 雙分支 單分支表達(dá)式語(yǔ)句B后續(xù)語(yǔ)句語(yǔ)句A表達(dá)式后續(xù)語(yǔ)句語(yǔ)句AYNyn返回返回返回返回3 3、循環(huán)結(jié)構(gòu)、循環(huán)結(jié)構(gòu)(流程圖)當(dāng)滿足某條件時(shí)循環(huán),否則結(jié)束循環(huán)條件式語(yǔ)句A后續(xù)語(yǔ)句yn返回返回順序結(jié)構(gòu)程序也稱直接程序或簡(jiǎn)單程序。它自始至終嚴(yán)格按照程

14、序中語(yǔ)句的。它是最基本、最普遍的結(jié)構(gòu)形式?!纠?-7】在表文件中查看學(xué)號(hào)為“1161009”的學(xué)生的信息。CLEARUSE 學(xué)生學(xué)生LOCATE FOR 學(xué)號(hào)學(xué)號(hào) = 1161009DISPLAYUSE返回返回【例8-8】請(qǐng)用戶為“課程”表輸入一條記錄。CLEARUSE 課程? 錄入課程數(shù)據(jù)? =ACCEPT 課程ID: TO CIDACCEPT 課程名: TO CACCEPT 類型id: TO TIDACCEPT 學(xué)分: TO CRACCEPT 類型: TO T* 把用戶輸入的數(shù)據(jù)插入數(shù)據(jù)庫(kù)APPEND BLANKREPLACE 課程ID WITH CID,課程名 WITH C,類型id W

15、ITH TID,學(xué)分 WITH VAL(CR),類型 WITH TUSE返回返回 選擇結(jié)構(gòu)程序是由判斷語(yǔ)句或選擇語(yǔ)句構(gòu)成的雙重或多重走向的程序。 選擇結(jié)構(gòu)可分為選擇和選擇兩種不同的結(jié)構(gòu)形式,分別由語(yǔ)句和語(yǔ)句實(shí)現(xiàn)。通常有一個(gè)入口和兩個(gè)出口,包括以下幾種情況。 命令格式:返回返回【例8-9】詢問是否要顯示教師信息表?若是,顯示該表。返回返回 命令格式:返回返回【例8-10】按姓名查找學(xué)生,找到則顯示該學(xué)生信息,否則顯示“查無此人!”。返回返回【例8-11】廣州向某地寄送特快專遞,計(jì)費(fèi)標(biāo)準(zhǔn)為每克0.04元,當(dāng)郵件重量超過100克之后,超出的重量為每克0.02元,請(qǐng)根據(jù)郵件重量編寫程序計(jì)算郵費(fèi)。CLE

16、ARINPUT 請(qǐng)輸入郵件的重量:請(qǐng)輸入郵件的重量: TO weightIF weight = 80 ? Sname, ,Ssex, 優(yōu)優(yōu) CASE Score11 = 60 ? Sname, ,Ssex, 合格合格 OTHERWISE ? Sname, ,Ssex, 不合格不合格ENDCASE返回返回【例8-16】根據(jù)鍵入的自變量x的值,計(jì)算分段函數(shù)的函數(shù)值。 )10(6)105(65)53(5)30(13)0(12)(2322xxxxxxxxxxxxf返回返回三種類型的循環(huán)語(yǔ)句:三種類型的循環(huán)語(yǔ)句:1、WHILE循環(huán):循環(huán): (當(dāng)型)(當(dāng)型)循環(huán)的次數(shù)不確定的,用其他條件式控制2、FOR循

17、環(huán):循環(huán): (步長(zhǎng)型)(步長(zhǎng)型)能確定循環(huán)的次數(shù)的情況3、SCAN循環(huán):循環(huán): (掃描型(掃描型或指針型或指針型)對(duì)數(shù)據(jù)表的記錄操作返回返回根據(jù)條件表達(dá)式的值決定循環(huán)體內(nèi)語(yǔ)句的執(zhí)行次數(shù)。 返回返回【例8-17】編程求和S=1+2+3+100。CLEARJ = 1sum = 0DO WHILE J = 100 sum = sum + J J = J + 1ENDDO? 從從1到到100的和是:的和是:+ALLTRIM(STR(sum)返回返回【例8-18】輸出“學(xué)生”表中1982年出生的學(xué)生記錄。CLEARUSE 學(xué)生學(xué)生LOCATE FOR YEAR(出生日期出生日期) = 1982DO WH

18、ILE NOT EOF() DISPLAY *WAIT 請(qǐng)按任意鍵顯示下一條記錄!請(qǐng)按任意鍵顯示下一條記錄! CONTINUEENDDO? 查詢結(jié)束。查詢結(jié)束。返回返回CLEARUSE 學(xué)生學(xué)生INDEX ON YEAR(出生日期出生日期) TAG birthdaySEEK 1982DO WHILE NOT EOF() DISPLAY WAIT 請(qǐng)按任意鍵顯示下一條記錄!請(qǐng)按任意鍵顯示下一條記錄! SKIP IF YEAR(出生日期出生日期) != 1982 EXIT ENDIFENDDO? 查詢結(jié)束。查詢結(jié)束。返回返回【例8-19】輸出“教師信息表”中職稱為“副教授”的教師基本信息,并統(tǒng)計(jì)出

19、“副教授”的人數(shù)。CLEARUSE 教師信息表教師信息表DO WHILE NOT EOF() IF 職稱職稱 副教授副教授 SKIP LOOP ENDIF DISPLAY SKIPENDDOCOUNT FOR 職稱職稱 = 副教授副教授 TO P_NO? 以上顯示的是副教授的基本信息,共計(jì)有:以上顯示的是副教授的基本信息,共計(jì)有:+STR(P_NO)+人人返回返回找到了嗎?找到了嗎?顯示顯示“查無此人!顯示該人信息從鍵盤接收從鍵盤接收輸入姓名輸入姓名定位定位NY3次以上?NYloopexitClearI=0use A班學(xué)生信息do while .t. accept 請(qǐng)輸入姓名: to xm I

20、=I+1 locate for 姓名=xm if not found() ? 查無此人! if I 3 loop endif else disp endif exitenddo? bye !return返回返回Clearuse A班學(xué)生信息for i=1 to 3 accept 請(qǐng)輸入姓名: to xm locate for 姓名=xm if not found() ? 查無此人! loop else disp endif exitendfor? bye !returnLoopExit跳到循環(huán)開始處跳到循環(huán)的后繼語(yǔ)句限制最多3次返回返回 = 或返回返回【例8-20】有FORENDFOR語(yǔ)句求出

21、1200之間的偶數(shù)的和。 返回返回 特點(diǎn):特點(diǎn):“指針指針”自動(dòng)移動(dòng)自動(dòng)移動(dòng)(不需要(不需要SKIPSKIP)返回返回【例8-22】統(tǒng)計(jì)“學(xué)生”表中男學(xué)生的人數(shù) DO WHILEENDDO返回返回【例8-23】用表掃描循環(huán)結(jié)構(gòu)將教師信息表中基礎(chǔ)工資小于1000的姓名、基礎(chǔ)工資兩個(gè)字段輸出,并統(tǒng)計(jì)這些職工的人數(shù)。SET TALK OFFCLEARUSE 教師信息表教師信息表n = 0SCAN FOR 基礎(chǔ)工資基礎(chǔ)工資 1000 ? 姓名姓名,基礎(chǔ)工資基礎(chǔ)工資 n = n + 1ENDSCAN? 基礎(chǔ)工資在基礎(chǔ)工資在1000元以下的人數(shù)有:元以下的人數(shù)有:+STR(N,2)+人。人。SET TAL

22、K ON 返回返回【例8-24】統(tǒng)計(jì) “學(xué)生”表中各個(gè)專業(yè)的人數(shù)。(SCAN中套中套CASE)CLEARSTORE 0 TO A,B,C,DUSE 學(xué)生學(xué)生SCAN DO CASE CASE 專業(yè)專業(yè)=土木工程土木工程 A=A+1 CASE 專業(yè)專業(yè)=計(jì)算機(jī)計(jì)算機(jī) B=B+1 CASE 專業(yè)專業(yè)=電子電子 C=C+1 CASE 專業(yè)專業(yè)=機(jī)電機(jī)電 D=D +1 ENDCASEENDSCAN? 土木工程專業(yè)的人數(shù)為:土木工程專業(yè)的人數(shù)為:,ALLTRIM(STR(A)? 計(jì)算機(jī)專業(yè)的人數(shù)為:計(jì)算機(jī)專業(yè)的人數(shù)為:,ALLTRIM(STR(B)? 電子專業(yè)的人數(shù)為:電子專業(yè)的人數(shù)為:,ALLTRIM

23、(STR(C)? 機(jī)電專業(yè)的人數(shù)為:機(jī)電專業(yè)的人數(shù)為:,ALLTRIM(STR(D)SET TALK ON 返回返回4. 多重循環(huán)多重循環(huán)(循環(huán)嵌套循環(huán)嵌套) DO WHILE 條件表達(dá)式條件表達(dá)式1 語(yǔ)句行序列語(yǔ)句行序列11 DO WHILE 條件表達(dá)式條件表達(dá)式2 語(yǔ)句行序列語(yǔ)句行序列21 DO WHILE 條件表達(dá)式條件表達(dá)式3 語(yǔ)句行序列語(yǔ)句行序列31 ENDDO&3 語(yǔ)句序列語(yǔ)句序列22 ENDDO&2 語(yǔ)句行序列語(yǔ)句行序列12 ENDDO&1返回返回【例8-25】打印一個(gè)6行5列的自然數(shù)矩陣。SET TALK OFFCLEARDIME A(6,5)FOR I

24、=1 TO 30 A(I)=IENDFORFOR I=1 TO 6 FOR J=1 TO 5 ?A(I,J) ENDFOR ?ENDFORSET TALK ON 二維數(shù)組可以當(dāng)作一維數(shù)組來處理返回返回【例8-27】編寫程序,輸出九九乘法表。CLEARFOR Y=1 TO 9 FOR X=1 TO 9 Z= Y * X * ? Y,*,X,= ,Z ? STR(Y,1)+*+STR(X,1)+= +STR(Z,2)+ ENDFOR ?ENDFOR 返回返回 在應(yīng)用程序系統(tǒng)中,一般是根據(jù)實(shí)際需要將整個(gè)系統(tǒng)劃分為若干個(gè)模塊,然后在主控模塊的控制下,調(diào)用各個(gè)功能模塊實(shí)現(xiàn)系統(tǒng)的各種功能操作。 通常將這些

25、可被調(diào)用的功能模塊可被調(diào)用的功能模塊或能完成某種能完成某種特定功能的獨(dú)立程序特定功能的獨(dú)立程序稱作,而把把調(diào)用其他程序而沒有被其他程序調(diào)用的程序段調(diào)用其他程序而沒有被其他程序調(diào)用的程序段,稱為。 返回返回 結(jié)構(gòu)化程序的總體結(jié)構(gòu) :主模塊主模塊子模塊子模塊子模塊子模塊子模塊子模塊調(diào)用調(diào)用返回返回返回返回 子程序的建立方法與程序文件的建立方法相同,擴(kuò)展名為.prg。 調(diào)用子程序的命令格式為: WITH 指定傳遞到子程序的參數(shù) 返回返回【例8-28】編寫主程序調(diào)用子程序,計(jì)算Z=f(x1)+f(x2)+f(x3)的值,其中f(x)=x2+1。*主程序開始主程序開始INPUT x1= TO x1INP

26、UT x2= TO x2 INPUT x3= TO x3STORE 0 TO z,yx=x1DO SUB& 調(diào)用子程序調(diào)用子程序SUB,求,求f(x1)z=z+y& 將結(jié)果將結(jié)果y加入加入z,下同,下同x=x2 DO SUB& 調(diào)用子程序調(diào)用子程序SUB,求,求f(x2)z=z+yx=x3 DO SUB& 調(diào)用子程序調(diào)用子程序SUB,求,求f(x3)z=z+y ? z=,zRETURN*子程序開始,文件名為:子程序開始,文件名為:sub.prgy=x2+1RETURN 返回返回 過程定義的命令格式為:PROCEDURE PARAMETER RETURN 表達(dá)式表

27、達(dá)式ENDPROC 過程調(diào)用的命令格式為:過程調(diào)用的命令格式為:DO IN WITH 返回返回【例8-29】編寫過程求圓的面積并在主程序內(nèi)調(diào)用這個(gè)過程。SET TALK OFFCLEARDO AREA&調(diào)用過程調(diào)用過程SET TALK ONPROCEDURE AREA&過程開始過程開始STORE 0 TO RINPUT 請(qǐng)輸入圓的半徑:請(qǐng)輸入圓的半徑: TO RS=3.14156*R*R? 圓的面積為:圓的面積為:+STR(S,8,5) 返回返回有時(shí),在一個(gè)程序的執(zhí)行過程中,可能需要多次執(zhí)行到某個(gè)程序段。這時(shí),用戶也可以把這個(gè)需要反復(fù)執(zhí)行的程序段程序段編成為獨(dú)立的程序。當(dāng)需要執(zhí)

28、行到這個(gè)程序段時(shí),以合適的形式調(diào)用調(diào)用執(zhí)行這個(gè)程序段。例如例如編寫程序計(jì)算從編寫程序計(jì)算從m個(gè)元素中取個(gè)元素中取n個(gè)的組合數(shù),即計(jì)算個(gè)的組合數(shù),即計(jì)算 該公式用到了三個(gè)階乘。為了避免重復(fù),可以把階乘的計(jì)算該公式用到了三個(gè)階乘。為了避免重復(fù),可以把階乘的計(jì)算用一個(gè)用一個(gè)子程序子程序來實(shí)現(xiàn)。來實(shí)現(xiàn)。)!( !nmnmcnm返回返回 過程可以作為一個(gè)文件獨(dú)立地存儲(chǔ)在磁盤上,因此,每調(diào)用一次過程都要打開一個(gè)磁盤文件。 (外部過程 ) 所謂過程文件就是過程的集合。 其中每個(gè)過程用PROCEDURE 來標(biāo)識(shí) 過程文件中的過程又稱作內(nèi)部過程內(nèi)部過程 返回返回 過程文件的命令格式如下:PROCEDURE RE

29、TURNPROCEDURE RETURNPROCEDURE RETURN 過程文件的建立和修改建立和修改命令的命令格式為:MODIFY COMMAND 1)過程文件的類型名:.PRG2)一個(gè)過程文件中最多可以有一個(gè)主程序,且必須放在最前。返回返回 打開過程文件打開過程文件的命令格式為:SET PROCEDURE TO 該命令打開指定的過程文件,并將過程文件中所包含的過程全部調(diào)入內(nèi)存。 過程文件的調(diào)用過程文件的調(diào)用命令格式為:DO WITH 。若要修改過程文件內(nèi)容,則一定要先關(guān)閉該過程文件。 關(guān)閉過程文件關(guān)閉過程文件的命令格式為:格式1:CLOSE PROCEDURE格式2:SET PROCED

30、URE TO 當(dāng)退出VFP系統(tǒng)時(shí),所有已打開的過程文件將會(huì)自動(dòng)關(guān)閉。 返回返回文件f1.prg的程序內(nèi)容為:* 主程序:f1.prgCLEARSET PROCEDURE TO f3 &打開過程文件f3DO f2&調(diào)用DO p1* 過程p1PROCEDURE p1? 調(diào)用p3()? 返回值:,p3()ENDPROC 文件f2.prg的內(nèi)容為:* 子程序f2.prg? 子程序f2開始? 調(diào)用p2()x = p2()? 子程序f2結(jié)束RETURN*過程文件f3.prgPROCEDURE p2RETURNPROCEDURE p3RETURN 100返回返回一、變量的作用域 (內(nèi)存變量的

31、作用范圍)有三種內(nèi)存變量: 全局變量:全局變量:在關(guān)閉VFP應(yīng)用程序之前一直有效。用語(yǔ)句來定義全局變量。 局部變量:局部變量:在定義它的程序段以及由它所調(diào)用到的子程序中保持有效。用語(yǔ)句來定義局部變量。 私有變量:私有變量:在定義它的程序段才有效。用語(yǔ)句來定義私有變量。返回返回(1)全局變量 程序執(zhí)行完畢,它們,必須使用RELEASE命令予以清除。 在VFP的命令窗口中建立的內(nèi)存變量,系統(tǒng)默認(rèn)為全局變量,并賦初值邏輯假。 定義方式有兩種: 格式1: 該命令是將中指定的內(nèi)存變量定義為全局變量。 格式2:(,) (,) 該命令定義數(shù)組變量并將其元素定義為全局變量。返回返回【例8-31】主程序和過程中

32、的全局變量。SET TALK OFFCLEAR AA=1DO SUB_PROC?“主程序中:A,B,C,DRETURN *過程Proc SUB_PROC B,C B=2 =3 ?在過程中:A,B,C,DRETURN SET TALK ON 由于變量由于變量D不是全局變量,不是全局變量,在主程序中不能被識(shí)別在主程序中不能被識(shí)別全局變量全局變量全局變量全局變量全局變量全局變量返回返回(2) 局部變量局部變量 局部變量,。當(dāng)建立它的模塊程序運(yùn)行結(jié)束時(shí),局部變量將自動(dòng)釋放。 定義局部變量的命令格式為: 建立局部變量時(shí),系統(tǒng)賦初值邏輯假。 局部變量要建立后使用。返回返回【例8-32】局部變量的使用。CL

33、EARLOCAL XX=10DO SUB? Y & 出錯(cuò):找不到變量出錯(cuò):找不到變量Y(因?yàn)椋ㄒ驗(yàn)閅是過程中局部變量)是過程中局部變量)RETURNPROCEDURE SUBLOCAL YY=20? X & 出錯(cuò):找不到變量出錯(cuò):找不到變量X (因?yàn)橐驗(yàn)閄是主程序中局部變量是主程序中局部變量)RETURN 返回返回(3) 私有變量私有變量 沒有通過PUBLIC或者LOCAL命令事先聲明。 作用域是建立它的模塊及其下屬的各層模塊 命令格式為: 此命令作用是隱藏在上層隱藏在上層模塊中可能已經(jīng)存在的內(nèi)存變變量量,使得這些變量在當(dāng)前模塊程序中暫時(shí)無效暫時(shí)無效。 此時(shí),這些變量名就可用來

34、命名可用來命名在當(dāng)前模塊當(dāng)前模塊中需要的私有變量或者局部變量變量。 當(dāng)前模塊程序運(yùn)行結(jié)束返回返回上層模塊時(shí)時(shí),被隱藏的內(nèi)存變量就自動(dòng)恢復(fù)有效性恢復(fù)有效性,并保持原有保持原有的取值值。返回返回【例8-33】私有變量的使用。CLEARA=1 B=2 D=0?: A=,A, B=,B , D=,D?:A=,A, B=,B, C=,C,D=,DRETURN PROC SUB1PRIVATE B,DPUBLIC CA=10B=11C=12D=13? : A=,A, B=,B, C=,C,D=,D RETURN過程中變量過程中變量主程序中的變量主程序中的變量恢復(fù)為主程序中的變量恢復(fù)為主程序中的變量返回返回

35、【例8-34】局部變量和私有變量比較示例。CLEARPUBLIC x,y& 定義全局變定義全局變量量x=5y=10?x,y & 顯示顯示 5,bbbRETURN *SUB3x=“aaa“ & x為為SUB2中建立的私有變量中建立的私有變量 &y=bbb“ & RETURN*SUB2PRIVATE x& 隱藏主程序中隱藏主程序中xx=50 & 建立私有變量建立私有變量LOCAL y & 建立局部變量建立局部變量y &?x,y & &RETURN1234返回返回 在VFP中把向過程發(fā)送消息稱為過程調(diào)用中的參數(shù)傳

36、遞。 方法是: 在定義過程時(shí)定義過程時(shí),設(shè)置一個(gè)參數(shù)表,用來接收過程調(diào)用時(shí)傳遞來的參數(shù),稱為形式參數(shù)表形式參數(shù)表; 在調(diào)用過程時(shí)調(diào)用過程時(shí),通過一個(gè)參數(shù)表向被調(diào)用過程傳遞實(shí)際值,這個(gè)參數(shù)表稱為實(shí)際參數(shù)表實(shí)際參數(shù)表。 這兩個(gè)參數(shù)表中參數(shù)這兩個(gè)參數(shù)表中參數(shù)個(gè)數(shù)相同個(gè)數(shù)相同,數(shù)據(jù),數(shù)據(jù)類型一致類型一致且排序且排序順序一一對(duì)應(yīng)順序一一對(duì)應(yīng)。 返回返回1. 接收參數(shù)命令接收參數(shù)命令格式1:PARAMETERS 格式2:LPARAMETERS 說明:(1)該命令必須位于被調(diào)用過程的第一條可執(zhí)行語(yǔ)句處位于被調(diào)用過程的第一條可執(zhí)行語(yǔ)句處。(2)格式1聲明的形參變量被看作是建立的私有變量,格式2中聲明的形參變量

37、看作是模塊程序中建立的局部變量,除此之外,二者沒有區(qū)別。(3)。返回返回 2. 通過過程調(diào)用命令傳遞參數(shù)通過過程調(diào)用命令傳遞參數(shù)格式1:DO | WITH 格式2: | () 說明: (1)實(shí)參可以是常量、變量,表達(dá)式。調(diào)用時(shí),系統(tǒng)自動(dòng)把實(shí)參傳遞給對(duì)應(yīng)的形參。形參的數(shù)目不能少于實(shí)參形參的數(shù)目不能少于實(shí)參的數(shù)目,否則系統(tǒng)會(huì)產(chǎn)生運(yùn)行錯(cuò)誤的數(shù)目,否則系統(tǒng)會(huì)產(chǎn)生運(yùn)行錯(cuò)誤。如果形參數(shù)目多于如果形參數(shù)目多于實(shí)參數(shù)目,多余的形參將取邏輯假實(shí)參數(shù)目,多余的形參將取邏輯假.F.。 (2),由于實(shí)參形式的不同,參數(shù)傳遞有兩種方式:返回返回 當(dāng)實(shí)參是時(shí),在實(shí)參與形參之間的參數(shù)傳遞是按值按值傳送的。這時(shí)在調(diào)用過程時(shí),

38、形參所得到的是實(shí)參的值,過程調(diào)用結(jié)束時(shí),實(shí)參將得不到形參的值。按值傳送時(shí),實(shí)參與形參之間的傳遞是的。只是實(shí)參向形參傳遞值。返回返回CLEARSET PROC TO P3-4DIME A(3),G(2)G(1)=20STORE 3 TO B,CA=5DO P WITH A(2),B+4,C,G? A(2),B,C,G(1)SET TALK ONRETURNPROCEDURE PPARA X,Y,Z,UX=X+10Y=2*YZ=Y+ZU(1)=X+Y+Z? X,Y,Z,U(1)ENDPROC輸入、出輸入、出參數(shù)參數(shù)傳值傳值返回返回 當(dāng)實(shí)參是內(nèi)存變量?jī)?nèi)存變量或數(shù)組名數(shù)組名時(shí),在實(shí)參與形參之間的參數(shù)傳

39、遞是按地址傳送的。這時(shí)在調(diào)用過程時(shí),形參所得到的是實(shí)參的地址,過程調(diào)用結(jié)束時(shí),實(shí)參將得到與形參相同的值。 按址傳送時(shí),實(shí)參與形參之間的傳遞是雙向雙向的,即可以是輸入?yún)?shù),也可以是輸出參數(shù)(返回值)。返回返回SET PROC TO P3-3STORE 0 TO A,B,CINPUT M= TO MINPUT N= TO NDO SUB WITH M,ADO SUB WITH N,BDO SUB WITH M-N,CW=A/(B*C)?W=+STR(W,7) RETURNPROC SUBPARAMETER K,TT=1 FOR I=1 TO KT=T*IENDFORRETURN形式參數(shù)形式參數(shù)實(shí)際

40、參數(shù)實(shí)際參數(shù)輸入輸入?yún)?shù)參數(shù)輸出輸出參數(shù)參數(shù)返回返回2. 通過過程調(diào)用命令傳遞參數(shù)通過過程調(diào)用命令傳遞參數(shù)格式1:DO | WITH 格式2: | () (3)采用格式2時(shí),默認(rèn)以按值方式傳遞參數(shù)。如果實(shí)參是變量,可以通過命令重新設(shè)置參數(shù)傳遞方式。重新設(shè)置參數(shù)傳遞方式命令如下: 說明: TO VALUE:按值傳遞。 TO REFERENCE:按址傳遞。返回返回【例8-36】按值傳遞和按地址傳遞示例。CLEARSTORE 100 TO x1,x2SET UDFPARMS & 設(shè)置按值傳遞DO P1 WITH x1,(x2) & x1按地址按地址傳遞,(x2)按值傳遞?第一次:,x

41、1,x2STORE 100 TO x1,x2 & x1,(x2)都傳遞傳遞?第二次:,x1,x2SET UDFPARMS & 設(shè)置引用傳遞DO P1 WITH x1,(x2) & x1按地址按地址傳遞,(x2)按值傳遞?第三次:,x1,x2STORE 100 TO x1,x2 & x1傳遞,(x2)按值傳遞?第四次:,x1,x2RETURNPROCEDURE P1PARAMETERS x1,x2STORE x1+1 TO x1STORE x2+1 TO x2ENDPROC (x2)有一對(duì)圓括號(hào),是一有一對(duì)圓括號(hào),是一般形式的表達(dá)式,所以總般形式的表達(dá)式,所以總是

42、按值傳遞。是按值傳遞。返回返回 8.5.1數(shù)組的建立及使用數(shù)組的建立及使用 數(shù)組是具有相同變量名相同變量名并在內(nèi)存中占有連續(xù)存儲(chǔ)連續(xù)存儲(chǔ)單元的一組數(shù)據(jù),數(shù)組中的各個(gè)變量稱為數(shù)組元素。 每一個(gè)數(shù)組元素在內(nèi)存中獨(dú)占一個(gè)內(nèi)存單元。為了區(qū)分不同的數(shù)組元素,每一個(gè)數(shù)組元素都是通每一個(gè)數(shù)組元素都是通過數(shù)組名和下標(biāo)來訪問的過數(shù)組名和下標(biāo)來訪問的。 數(shù)組與變量具有相同的作用域原則,可以存儲(chǔ)任何類型的數(shù)據(jù),數(shù)組必須先定義后使用先定義后使用。返回返回1. 數(shù)組的定義數(shù)組的定義 格式:DIMENSION | DECLARE (,) ,(,)返回返回 在VFP中,規(guī)定數(shù)組下標(biāo)的下界為1,最大值將受內(nèi)存的限制。例如:返

43、回返回 2. 數(shù)組的賦值數(shù)組的賦值給數(shù)組賦值,就是分別給每個(gè)數(shù)組元素賦值,與給內(nèi)存變量賦值操作完全相同。 格式格式1: 功能功能:將表達(dá)式的值賦給數(shù)組中所有元素或某一個(gè)元素。例如: STORE 0 TO A &將數(shù)值0賦給數(shù)組A的所有元素 STORE 陳紅陳紅 TO A(2,1) &將“李磊”賦給數(shù)組A的第2行第1列的元素 格式格式2: 功能功能:可以用賦值語(yǔ)句直接賦值給數(shù)組。例如: A=.T. & 將邏輯真值賦給數(shù)組A的所有元素返回返回 【例8-37】定義一維數(shù)組,給數(shù)組賦值并輸出結(jié)果。CLEARx = 5& 賦值給數(shù)據(jù)所有元素STORE 3 TO y(1),

44、y(2)& 賦值給數(shù)組前兩個(gè)元素? x:,x(1),x(2),x(3)? y:,y(1),y(2),y(3)& y(3)的值顯示為.F.返回返回 數(shù)組變量建立后,數(shù)組中的每一個(gè)元素的其性質(zhì)及其使用方法與普通內(nèi)存變量是類似的 注意:(1)可用STORE命令或其他各種能對(duì)內(nèi)存變量賦值的命令對(duì)某個(gè)數(shù)組元素賦值;(2)可用LIST | DISPLAY MEMORY、RELEASE、CLEAR MEMORY等命令查看、釋放或清除已建立的數(shù)組變量;(3)可用SAVE命令將數(shù)組存入內(nèi)存變量文件(.mem),或用RESTORE命令將其恢復(fù)到內(nèi)存中來。(4)在同一運(yùn)行環(huán)境中,應(yīng)注意數(shù)組名與一般的

45、內(nèi)存變量名不要重名。 返回返回 【例8-38】定義二維數(shù)組,給數(shù)組賦值并輸出結(jié)果。CLEAR MEMORYDIMENSION aa(2,3)aa(1,1)=王楠aa(2)=是STORE 奧運(yùn)冠軍 TO aa(1,3)aa(6)=ChinaLIST MEMORY LIKE aa 返回返回 1. 將記錄內(nèi)容傳遞到數(shù)組將記錄內(nèi)容傳遞到數(shù)組格式格式1: 功能:將所打的數(shù)據(jù)表當(dāng)前記錄的各個(gè)數(shù)據(jù)復(fù)制并傳送到指定數(shù)組的各個(gè)元素中。 說明: (1)若指定短語(yǔ)FIELDS ,則只傳送指定的各字段內(nèi)容,否則傳遞所有字段內(nèi)容。 (2)傳遞時(shí),從第一個(gè)字段開始依次向?qū)?yīng)的數(shù)組元素傳遞,各數(shù)組元素的數(shù)據(jù)類型則應(yīng)由該記錄對(duì)應(yīng)的字段類型所決定。 (3)若數(shù)組元素的個(gè)數(shù)比字段個(gè)數(shù)多,則多余數(shù)組元素的值仍保留不變;若數(shù)組元素的個(gè)數(shù)比字段個(gè)數(shù)少或未定義數(shù)組,則系統(tǒng)將自動(dòng)建立一個(gè)新的一維數(shù)組來接受傳遞過來的數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論