Visual FoxPro 6.0程序設(shè)計教程09第09章_第1頁
Visual FoxPro 6.0程序設(shè)計教程09第09章_第2頁
Visual FoxPro 6.0程序設(shè)計教程09第09章_第3頁
Visual FoxPro 6.0程序設(shè)計教程09第09章_第4頁
Visual FoxPro 6.0程序設(shè)計教程09第09章_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第9章程序設(shè)計基礎(chǔ)VisualFoxPro中的應(yīng)用程序可以實現(xiàn)自動的信息分類,并對相應(yīng)的工作進行跟蹤和處理。本章將介紹程序設(shè)計其相關(guān)的一些內(nèi)容,包括程序與程序文件、程序的基本結(jié)構(gòu)、多模塊程序以及程序調(diào)試等內(nèi)容。9.1程序與程序文件

9.2程序的基本結(jié)構(gòu)

9.3多模塊程序

9.4程序調(diào)試

上一頁下一頁目錄結(jié)束本節(jié)9.1程序與程序文件VisualFoxPro程序是由代碼組成的,代碼包括以命令形式出現(xiàn)的指令、函數(shù)或VisualFoxPro可以理解的任何操作。9.1.1程序的概念

9.1.2程序文件的建立與執(zhí)行

9.1.3簡單的輸入輸出命令

上一頁下一頁目錄結(jié)束本節(jié)9.1.1程序的概念程序就是為了完成一項任務(wù)而編寫的指令的集合。這組指令被存放在稱為程序文件或命令文件的文本文件中。當運行程序時,系統(tǒng)會按照一定的次序自動執(zhí)行包含在程序文件中的命令。與在命令窗口逐條輸入命令相比,采用程序方式有如下好處:可以利用編輯器,方便地輸入、修改和保存程序??梢杂枚喾N方式、多次運行程序??梢栽谝粋€程序中調(diào)用另一個程序。上一頁下一頁目錄結(jié)束例9.1假定學(xué)號的前兩位為入學(xué)年份(如01代表2001年),第3、4位為專業(yè)代碼。編寫命令文件test1.prg,分別統(tǒng)計所有學(xué)生和2001年入學(xué),專業(yè)代碼為03的學(xué)生選修課程號為101課程的平均成績。*分別統(tǒng)計所有學(xué)生和指定學(xué)生的平均成績SETTALKOFFOPENDATABASE學(xué)生成績管理&&打開數(shù)據(jù)庫“學(xué)生成績管理”USE課程表IN0&&在空閑工作區(qū)打開課程表SELECTAVG(成績)FROM課程表WHERE課程號="101"INTOARRAYm1SELECTAVG(成績)FROM課程表WHERE課程號="101"ANDLEFT(學(xué)號,2)="01";ANDSUBS(學(xué)號,3,2)="03"INTOARRAYm2CLEAR&&清除VisualFoxPro主窗口或當前用戶自定義窗口里的全部內(nèi)容?"所有學(xué)生的平均分:",m1(1,1)?"指定學(xué)生的平均分:",m2(1,1)CLOSEDATABASE&&關(guān)閉當前數(shù)據(jù)庫SETTALKONRETURN本節(jié)上一頁下一頁目錄結(jié)束在命令窗口輸入:DOTEST1程序運行結(jié)果如下:所有學(xué)生的平均分:79.00指定學(xué)生的平均分:81.33本節(jié)上一頁下一頁目錄結(jié)束9.1.2程序文件的建立與執(zhí)行1.程序文件的建立與修改VisualFoxPro程序是包含一系列命令的擴展名為.PRG的文本文件。一般是通過調(diào)用系統(tǒng)內(nèi)置的文本編輯器來進行的。程序文件的默認擴展名是.prg。如果指定其他的擴展名,那么以后在打開或執(zhí)行程序文件時都要顯示指定擴展名。建立和修改程序文件的命令格式:MODIFYCOMMAND<文件名>本節(jié)上一頁下一頁目錄結(jié)束程序文件的建立和修改

《演示實驗9.1》本節(jié)上一頁下一頁目錄結(jié)束2.執(zhí)行程序文件運行程序使用以下方式:⑴

菜單方式:①從“程序”菜單中選擇“運行”命令,打開“運行”對話框。②從文件列表框中選擇要運行的程序文件,并單擊“運行”命令按鈕。⑵

命令方式:DO<文件名>終止程序文件的方式:①CANCAL:終止程序運行,清除所有的私有變量,返回命令窗口。②DO:轉(zhuǎn)去執(zhí)行另一個程序。③RETURN:結(jié)束當前程序的執(zhí)行,返回到調(diào)用它的上級程序,若無上級程序則返回到命令窗口。④QUIT:退出VisualFoxPro系統(tǒng),返回到操作系統(tǒng)。本節(jié)上一頁下一頁目錄結(jié)束注意:當用DO命令執(zhí)行程序文件時,如果沒有指定擴展名,系統(tǒng)將按下列順序?qū)ふ以摮绦蛭募脑创a或某種目標代碼文件執(zhí)行:.exe(VisualFoxPro可執(zhí)行文件)→.app(VisualFoxPro應(yīng)用程序文件)→.fxp(編譯文件)→.prg(源程序文件)。如果用DO命令執(zhí)行查詢文件、菜單文件,那么<文件名>中必須要包括擴展名(.qbr、.mpr)。本節(jié)上一頁下一頁目錄結(jié)束《演示實驗9.2》程序文件的執(zhí)行本節(jié)上一頁下一頁目錄結(jié)束3.程序的書寫規(guī)則⑴

命令注釋:以NOTE或*開頭的代碼行為注釋行。命令行后也可添加注釋,這種注釋以符號&&開頭。注釋為非執(zhí)行代碼,不會影響程序的功能。⑵

命令分行:程序中每條命令都以回車鍵結(jié)尾,一行只能寫一條命令。若命令需要分行書寫,應(yīng)在一行末尾處鍵入續(xù)行符“;”,再按回車鍵。本節(jié)上一頁下一頁目錄結(jié)束1.INPUT命令命令格式:INPUT[<字符表達式>]TO<內(nèi)存變量>該命令等待用戶從鍵盤輸入數(shù)據(jù),用戶可以輸入任意合法的表達式。2.ACCEPT命令命令格式:ACCEPT[<字符表達式>]TO<內(nèi)存變量>該命令等待用戶從鍵盤輸入字符串。當用戶以回車鍵結(jié)束輸入時,系統(tǒng)將該字符串存入指定的內(nèi)存變量,程序繼續(xù)運行。3.SAY語句該語句在屏幕上的指定位置處顯示信息,并可以接受用戶的輸入。命令格式:@行值,列值

[SAY表達式1][GET變量名][DEFAULT表達式2]9.1.3簡單的輸入輸出命令本節(jié)上一頁下一頁目錄結(jié)束4.WAIT命令命令格式:WAIT[<字符表達式>][TO<內(nèi)存變量>][WINDOW[AT<行>,<列>]][NOWAIT][CLEAR∣NOCLEAR][TIMEOUT<數(shù)值表達式>]該命令顯示字符表達式的值作為提示信息,暫停程序的執(zhí)行,直到用戶按任意鍵或單擊鼠標時繼續(xù)程序的執(zhí)行。5.MESSAGEBOX命令命令格式:MessageBox(<信息內(nèi)容>[,<對話框類型>[,<對話框標題>]])功能:顯示一自定義對話框。本節(jié)上一頁下一頁目錄結(jié)束《演示實驗9.3》簡單輸入輸出命令舉例本節(jié)上一頁下一頁目錄結(jié)束本節(jié)9.2程序的基本結(jié)構(gòu)

程序的三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)是9.2.1順序結(jié)構(gòu)

9.2.2選擇結(jié)構(gòu)

9.2.3循環(huán)結(jié)構(gòu)

9.2.4編程實例

上一頁下一頁目錄結(jié)束本節(jié)9.2.1順序結(jié)構(gòu)在順序結(jié)構(gòu)的語句中,語句的執(zhí)行是線性的,即程序從第一條語句開始,依次執(zhí)行下面的語句,直到最后一條語句為止。上一頁下一頁目錄結(jié)束支持選擇結(jié)構(gòu)的語句包括條件語句和分支語句。1.條件語句語句格式:IF<條件><語句序列1>[ELSE<語句序列2>]ENDIF該語句根據(jù)<條件>是否成立從兩組代碼中選擇一組執(zhí)行。9.2.2選擇結(jié)構(gòu)本節(jié)上一頁下一頁目錄結(jié)束有ELSE的選擇語句無ELSE的選擇語句注意:IF和ENDIF必須成對出現(xiàn),IF是本結(jié)構(gòu)的入口,ENDIF是本結(jié)構(gòu)的出口。

本節(jié)上一頁下一頁目錄結(jié)束《演示實驗9.4》條件選擇結(jié)構(gòu)程序?qū)嵗竟?jié)上一頁下一頁目錄結(jié)束2.分支語句分支語句實現(xiàn)一種擴展的選擇結(jié)構(gòu),她可以根據(jù)條件從多組代碼中選擇一組執(zhí)行。語句格式:

DOCASECASE<條件1><語句序列1>CASE<條件2><語句序列2>……CASE<條件n>[OTHERWISE<語句序列>]ENDCASE本節(jié)上一頁下一頁目錄結(jié)束語句執(zhí)行時,依次判斷CASE后面的條件是否成立。當發(fā)現(xiàn)某個CASE后面的條件成立時,就執(zhí)行該CASE和下一個CASE之間的命令序列,然后執(zhí)行ENDCASE后面的命令。如果所有的條件都不成立,則執(zhí)行OTHERWISE與ENDCASE之間的命令序列,然后轉(zhuǎn)向ENDCASE后面的語句。DOCASE和ENDCASE必須成對出現(xiàn),DOCASE是本結(jié)構(gòu)的入口,ENDCASE是本結(jié)構(gòu)的出口。多分支選擇本節(jié)上一頁下一頁目錄結(jié)束分支結(jié)構(gòu)程序?qū)嵗堆菔緦嶒?.4》本節(jié)上一頁下一頁目錄結(jié)束9.2.3循環(huán)結(jié)構(gòu)

循環(huán)結(jié)構(gòu)是特殊類型的命令,它從其線性路徑開始分流程序的執(zhí)行。程序在執(zhí)行的過程中,其中的某段代碼被重復(fù)執(zhí)行若干次。被重復(fù)執(zhí)行的代碼段,通常稱之為循環(huán)體。VisualFoxPro支持循環(huán)結(jié)構(gòu)的語句包括:DOWHILE-ENDDOFOR-ENDFORSCAN-ENDSCAN語句。1.DOWHILE-ENDDO語句語句格式:DOWHILE<條件><語句序列1>[LOOP]<語句序列2>[EXIT]<語句序列3>ENDDO本節(jié)上一頁下一頁目錄結(jié)束執(zhí)行該語句時,先判斷DOWHILE處的循環(huán)條件是否成立,如果條件為真,則執(zhí)行DOWHILE與ENDDO之間的命令序列(循環(huán)體)。當執(zhí)行到ENDDO時,返回到DOWHILE,再次判斷循環(huán)條件是否為真,以確定是否再次執(zhí)行循環(huán)體。若條件為假,則結(jié)束該循環(huán)語句,執(zhí)行ENDDO后面的語句。循環(huán)結(jié)構(gòu)含有LOOP或EXIT的循環(huán)

本節(jié)上一頁下一頁目錄結(jié)束2.FOR-ENDFOR語句該語句通常用于實現(xiàn)循環(huán)次數(shù)已知情況下的循環(huán)結(jié)構(gòu)。語句格式:

FOR<循環(huán)變量>=<初值>TO<終值>[STEP<步長>]<循環(huán)體>ENDFOR∣NEXT執(zhí)行該語句時,首先將初值賦給循環(huán)變量,然后判斷循環(huán)條件是否成立(若步長為正值,循環(huán)條件為<循環(huán)變量><=<終值>;若步長為負值,循環(huán)條件為<循環(huán)變量>>=<終值>)。若循環(huán)條件成立,則執(zhí)行循環(huán)體,然后循環(huán)變量增加一個步長值,并再次判斷條件是否成立,以確定是否再次執(zhí)行循環(huán)體。若循環(huán)條件不成立,則結(jié)束該循環(huán)語句,執(zhí)行ENDFOR后面的語句。本節(jié)上一頁下一頁目錄結(jié)束3.SCAN-ENDSCAN語句該循環(huán)語句用于處理整個數(shù)據(jù)表文件。當遇到ENDSCAN時,程序就返回到循環(huán)的頂部,同時測試是否存在文件結(jié)束條件。只要隱含的

!EOF()條件為真,每條記錄便依次從屬于后隨的代碼。SCAN[<范圍>][FOR<條件1>][WHILE<條件2>]<循環(huán)體>ENDSCANSCAN-ENDSCAN語句也稱為掃描循環(huán)語句其功能相當于LOCATE、CONTINUE和DOWHILE-ENDDO語句功能的合并。本節(jié)上一頁下一頁目錄結(jié)束《演示實驗9.5》循環(huán)結(jié)構(gòu)程序?qū)嵗竟?jié)上一頁下一頁目錄結(jié)束9.2.4編程實例例9.17

先在學(xué)生表中添加一個字段:平均成績N(6,2)。然后根據(jù)課程表統(tǒng)計每一個學(xué)生選課的平均成績,并寫入新添加的字段里。OPENDATABASE學(xué)生成績管理USE課程表IN0USE學(xué)生表IN0ALTERTABLE學(xué)生表ADD平均成績N(6,2)SELECT學(xué)生表DOWHILE!EOF()SELECTAVG(成績)FROM課程表WHERE學(xué)號=學(xué)生表.學(xué)號;INTOARRAY成績表REPLACE平均成績WITH成績表(1,1)SKIPENDDOCLOSEDATABASE本節(jié)上一頁下一頁目錄結(jié)束本節(jié)9.3多模塊程序應(yīng)用程序一般都是多模塊程序,包含多個程序模塊。模塊是一個相對獨立的程序段,它可以被其他模塊所調(diào)用,也可以去調(diào)用其他的模塊。通常,把被其他模塊調(diào)用的模塊稱為子程序,把調(diào)用其他模塊而沒有被其他模塊調(diào)用的模塊稱為主程序。9.3.1模塊的定義和調(diào)用

9.3.2參數(shù)傳遞

9.3.3變量的作用域

上一頁下一頁目錄結(jié)束本節(jié)9.3.1模塊的定義和調(diào)用在VisualFoxPro中,模塊可以是命令文件,也可以是過程。過程定義的語法格式如下:

PROCEDURE∣FUNCTION<過程名><命令序列>[RETURN[<表達式>]][ENDPROC∣ENDFUNC]PROCEDURE∣FUNCTION命令表示一個過程的開始,并命名過程名。過程名必須以字母或下劃線開頭,可包含字母、數(shù)字和下劃線。ENDPROC∣ENDFUNC命令表示一個過程的結(jié)束。如果缺省ENDPROC∣ENDFUNC命令,那么過程結(jié)束于下一條PROCEDURE∣FUNCTION命令或文件結(jié)尾處。上一頁下一頁目錄結(jié)束當過程執(zhí)行到RETURN命令時,控制將轉(zhuǎn)回到調(diào)用程序(或命令窗口),并返回表達式的值。如果缺省RETURN命令,則在過程結(jié)束處自動執(zhí)行一條隱含的RETURN命令。若RETURN命令不帶<表達式>,則返回邏輯真.T.。過程文件的建立:MODIFYCOMMAND文件的默認擴展名還是.PRG。打開過程文件的命令格式:SETPROCEDURETO[<過程文件1>[,<過程文件2>,…..]][ADDITIVE]可以打開一個或多個過程文件。一旦一個過程文件被打開,那么該過程文件中的所有過程都可以被調(diào)用。如果選用ADDITIVE,那么在打開過程文件時,并不關(guān)閉原先已打開的過程文件。本節(jié)上一頁下一頁目錄結(jié)束關(guān)閉所有打開的過程文件命令格式:SETPROCEDURETO關(guān)閉個別過程文件命令格式:RELEASEPROCEDURE<過程文件1>[,<過程文件2>,……]總而言之,我們這里討論的模塊主要是指過程和命令文件里的代碼。而過程的調(diào)用需要它所在的文件處于打開狀態(tài)。模塊調(diào)用的格式有兩種:格式1:使用DO命令

DO<文件名>∣<過程名>格式2:在名字后加一對小括號

<文件名>∣<過程名>()在上面的兩種格式里,如果模塊是程序文件的代碼,用<文件名>;否則用<過程名>。格式2既可以作為命令使用(返回值被忽略),也可以作為函數(shù)出現(xiàn)在表達式里。在這里,<文件名>不能包含擴展名。本節(jié)上一頁下一頁目錄結(jié)束《演示實驗9.6》模塊定義和調(diào)用的程序?qū)嵗?/p>

本節(jié)上一頁下一頁目錄結(jié)束9.3.2參數(shù)傳遞1.參數(shù)的傳遞若想使方法能夠接受參數(shù),只需在方法代碼的開始增加命令行:PARAMETERS<形參表>或

LPARAMETERS<形參表>調(diào)用時使用括號將實參括起:對象名.方法名(<實參表>)本節(jié)上一頁下一頁目錄結(jié)束2.參數(shù)傳遞的形式參數(shù)傳遞的形式分為傳址方式和傳值方式。傳址方式是指主程序?qū)嶋H參數(shù)在內(nèi)存中的地址傳給被調(diào)用的方法,由形式參數(shù)接收,而形式參數(shù)也使用該地址。即實際參數(shù)與形式參數(shù)使用相同的內(nèi)存地址,形式參數(shù)的內(nèi)容一經(jīng)改變,實際參數(shù)的內(nèi)容也將跟著改變。傳值方式是指主程序?qū)嶋H參數(shù)的一個備份傳給被調(diào)用的方法,這個備份可以被方法改變,但在主程序中變量的原值不會改變。在默認的情況下,VFP在調(diào)用方法時采用傳值方式。如果要改變參數(shù)的傳遞方式,可以采用以下兩種方法:⑴

使用SETUDFPARMSTOVALUE|REFERENCE命令,用來強制改變參數(shù)的傳遞方式。⑵

使用@符號來強制VisualFoxPro使用參數(shù)傳址的傳遞方式。本節(jié)上一頁下一頁目錄結(jié)束《演示實驗9.7》參數(shù)傳遞方式的程序?qū)嵗竟?jié)上一頁下一頁目錄結(jié)束9.3.3變量的作用域作用域指變量的生存時間和可視性。在VisualFoxPro中,若以變量的作用域來分,內(nèi)存變量可分為公共變量、私有變量和局部變量三類。1.公共變量在任何模塊中都可以使用的變量稱為公共變量,也稱全局變量。公共變量要先建立后使用。建立公共變量命令:PUBLIC<內(nèi)存變量>該命令的功能是建立公共的內(nèi)存變量,并為它們賦初值.F.。公共變量一旦建立就一直有效,即使程序運行結(jié)束返回到命令窗口也不會消失。只有當執(zhí)行CLEARMEMORY、RELEASE、QUIT等命令后,公共變量才被釋放。本節(jié)上一頁下一頁目錄結(jié)束2.私有變量在程序中直接使用(沒有通過PUBLIC和LOCAL命令事先聲明)而由系統(tǒng)自動隱含建立的變量都是私有變量。私有變量的作用域是建立它的模塊及其下屬的各層模塊。一旦建立它的模塊程序運行結(jié)束時,這些私有變量將自動清除。PRIVATE命令的語法格式為:PRIVATE<內(nèi)存變量表>PRIVATEALL[LIKE<通配符>∣EXCEPT<通配符>]該命令并不建立內(nèi)存變量,它的作用是:隱藏指定的在上層模塊中可能已經(jīng)存在的內(nèi)存變量,使得這些變量在當前模塊程序中暫時無效。3.局部變量局部變量只能在建立它的模塊中使用,不能在上層或下層模塊中使用。當建立它的模塊程序運行結(jié)束時,局部變量自動釋放。局部變量用LOCAL命令建立:LOCAL<內(nèi)存變量表>該命令建立指定的局部內(nèi)存變量,并為它們賦初值邏輯假.F.。局部變量要先建立后使用。本節(jié)上一頁下一頁目錄結(jié)束《演示實驗9.8》變量作用域程序?qū)嵗竟?jié)上一頁下一頁目錄結(jié)束本節(jié)9.4程序調(diào)試VisualFoxPro提供的功能強大的調(diào)試工具-調(diào)試器。9.4.1調(diào)試器環(huán)境

9.4.2設(shè)置斷點

9.4.3調(diào)試菜單

上一頁下一頁目錄結(jié)束本節(jié)9.4.1調(diào)試器環(huán)境調(diào)試器實際上由一系列工具組成。它包含“調(diào)試器”菜單、“調(diào)試器”工具欄以及幾個調(diào)試窗口。用戶可以通過調(diào)試設(shè)置、執(zhí)行程序和修改程序來完成程序調(diào)試。調(diào)用調(diào)試器的方法一般有兩種:選擇“工具”菜單中的“調(diào)試器”命令。在命令窗口輸入DEBUG命令。系統(tǒng)打開“調(diào)試器”窗口,進入調(diào)試器環(huán)境。在“調(diào)試器”窗口中可選擇地打開5個子窗口:跟蹤、監(jiān)視、局部、調(diào)用堆棧和調(diào)用輸出。上一頁下一頁目錄結(jié)束1.跟蹤窗口用于顯示正在調(diào)試執(zhí)行的程序文件。跟蹤窗口左端的灰色區(qū)域會顯示某些符號,常見的符號及意義如下所示:→:指向調(diào)試中正在執(zhí)行的代碼行。●:斷點。可以在某些代碼行處設(shè)置斷點,當程序執(zhí)行到該代碼行時,中斷程序執(zhí)行。2.監(jiān)視窗口用于監(jiān)視指定表達式在程序調(diào)試執(zhí)行過程中的取值變化情況。3.局部窗口用于顯示模塊程序(程序、過程和方法程序)中的內(nèi)存變量(簡單變量、數(shù)組、對象),顯示它們的名稱、當前取值和類型。本節(jié)上一頁下一頁目錄結(jié)束4.調(diào)用堆棧窗口用于顯示當前處于執(zhí)行狀態(tài)的程序、過程或方法程序。5.調(diào)試輸出窗口可以在模塊程序中安置一些DEBUGOUT命令:DEBUGOUT<表達式>當模塊程序調(diào)試執(zhí)行到此命令時,會計算出表達式的值,并將計算結(jié)果送入調(diào)試輸出窗口。本節(jié)上一頁下一頁目錄結(jié)束9.4.2設(shè)置斷點可以設(shè)置以下4種類型的斷點:類型1:在定位處中斷:可以指定一代碼行,當程序調(diào)試執(zhí)行到該行代碼時中斷程序運行。類型2:如果表達式值為真則在定位處中斷:指定一代碼行以及一個表達式,當程序調(diào)試執(zhí)行到該行代碼時如果表達式的值為真,就

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論