程序與程序文件
考點(diǎn)1 程序的概念、建立與執(zhí)行
1程序的概念 程序是能夠完成一定任務(wù)的命令集合。這組命令被存放在稱為程序文件或命令文件的文本文件中。當(dāng)運(yùn)行程序時(shí),系統(tǒng)會(huì)按照一定的次序自動(dòng)執(zhí)行包含在程序文件中的命令。 2程序文件的建立與修改 程序文件的建立與修改一般是通過調(diào)用系統(tǒng)內(nèi)置的文本編輯器來進(jìn)行的。其建立步驟如下。 (l)打開文本編輯窗口。 (2)在文本編輯窗口中輸入程序內(nèi)容,此處所輸入的程序命令不會(huì)馬上被執(zhí)行。 (3)編輯完成后,從“文件”菜單中選擇“保存”命令或按快捷鍵Ctrl+W保存程序文件。 3打開或修改程序文件的方法 (1)從“文件”菜單中選擇“打開”命令,彈出“打開”對(duì)話框。 (2)在“文件類型”列表框中選擇“程序”。 (3)在文件列表框中選定要修改的文件,并單擊“確定”按鈕。 (4)編輯修改后,從“文件”菜單中選擇“保存”命令或按快捷鍵Ctrl+W保存程序文件,若要放棄修改,可直接按Esc鍵,或從“文件”菜單中選擇“還原”命令。 4程序文件的執(zhí)行 程序文件建立后,可使用多種方式、多次執(zhí)行它,常用的以下有兩種方式。 (l)菜單方式。 (2)命令方式。
考點(diǎn)2 簡單的輸入輸出命令
程序一般都包含數(shù)據(jù)輸入、數(shù)據(jù)處理和數(shù)據(jù)輸出3個(gè)部分。 1 INPUT命令 格式:INPUT[<字符表達(dá)式>]TO<內(nèi)存變量> 功能:該命令等待用戶從鍵盤輸入數(shù)據(jù),當(dāng)用戶回車后,系統(tǒng)將表達(dá)式的值存入指定的內(nèi)存變量。 注釋:輸入的數(shù)據(jù)可以是常量、變量,也可以是更為一般的表達(dá)式。但不能不輸入任何內(nèi)容直接按回車鍵輸入字符串時(shí)必須加定界符,輸入邏輯型常量時(shí)要用圓點(diǎn)定界(如.T. ,.F.),則輸入日期時(shí)間型常量時(shí)要用大括號(hào)(如{^2001-03-01})。 2 ACCEPT命令 格式:ACCEPT[<字符表達(dá)式>]TO<內(nèi)存變量> 功能:該命令等待用戶從鍵盤輸入字符串,當(dāng)用戶回車后,系統(tǒng)將表達(dá)式的值存入指定的內(nèi)存變量。 注釋:該命令只能接收字符串。用戶在輸入字符串時(shí)不需要加定界符;否則,系統(tǒng)會(huì)把定界符作為字符串本身的一部分。如果不輸入任何內(nèi)容而直接按回車鍵,系統(tǒng)會(huì)把空串賦給指定的內(nèi)存變量。 3 WAIT命令 格式:WAIT[<字符表達(dá)式>][TO<內(nèi)存變量>][WINDOW[AT<行>,<列>]] [NOWAIT][CLEARINOCLEAR][TIMEOUT<數(shù)值表達(dá)式>] 功能:該命令顯示字符表達(dá)式的值作為提示信息,暫停程序的執(zhí)行,直到用戶按任意鍵或單擊鼠標(biāo)時(shí)繼續(xù)程序運(yùn)行。 注釋:<內(nèi)存變量>用來保存用戶輸入的字符,其類型為字符型。若用戶按的是Enter鍵或單擊了鼠標(biāo),那么<內(nèi)存變量>中保存的將是空串若不選TO <內(nèi)存變量>短語,則輸入的單字符不保留。
小提示: 如果用DO命令執(zhí)行查詢文件、菜單文件,在文件名中必須要包括擴(kuò)展名(QPR、MPR)。
7.2 程序的基本結(jié)構(gòu)
程序結(jié)構(gòu)是指程序中命令或語句執(zhí)行的流程結(jié)構(gòu),包括3種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
考點(diǎn)3 順序結(jié)構(gòu)
順序結(jié)構(gòu)是最簡單的程序結(jié)構(gòu),它是按命令在程序中出現(xiàn)的先后次序依次執(zhí)行。
考點(diǎn)4 選擇結(jié)構(gòu)
支持選擇結(jié)構(gòu)的語句包括條件語句和分支語句。 1條件語句 格式: IF<條件> <語句序列1> [ELSE> <語句序列2>] ENDIF 功能:該語句根據(jù)<條件>是否成立從兩組代碼中選擇一組執(zhí)行。 語句的執(zhí)行流程圖如圖7-1和圖7-2所示。  圖7-1有ELSE的選擇語句 圖7-2無ELSE的選擇語句 2分支語句 格式:DO CASE CASE<條件1> <語句序列1> CASE<條件2> <語句序列2> …… CASE<條件n> <語句序列n> [OTHERWISE <語句序列>] ENDCASE 功能:語句執(zhí)行時(shí),依次判斷CASE后面的條件是否成立。分支語句實(shí)現(xiàn)的是一種擴(kuò)展的選擇結(jié)構(gòu),可以根據(jù)條件從多組代碼中選擇一組執(zhí)行。分支語句的流程如圖7-3所示。
 圖7-3 多分支語句
考點(diǎn)5 循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)也稱為重復(fù)結(jié)構(gòu),是指程序在執(zhí)行的過程中,其中的某段代碼被重復(fù)執(zhí)行若一干珠。被重復(fù)執(zhí)行的代碼段,通常稱為循環(huán)體。Visual FoxPro支持循環(huán)結(jié)構(gòu)的語句包括:DO WHILE-ENDDO、FOR-ENDFOR和SCAN-ENDSCAN。 1 DO WHILE - ENDDO語句 格式: DO WHILE<條件> <語句序列1> [LOOP] <語句序列2> [EXIT] <語句序列3> ENDDO 功能:首先判斷循環(huán)條件是否為真,如果成立則執(zhí)行DO WHILE和ENDDO之間的命令序列,如果遇到LOOP語句,則回到DO WHILE處繼續(xù)執(zhí)行,遇到EXIT語句,則退出循環(huán)體;當(dāng)執(zhí)行到ENDDO時(shí),再次返回DO WHILE處判斷循環(huán)條件,一直到條件為假時(shí),退出循環(huán)體,執(zhí)行ENDDO之后的語句。 DO WHILE循環(huán)語句的控制流程如圖7-4和圖7-5所示。
 圖7-4基本循環(huán)結(jié)構(gòu)圖 7-5含有LOOP或EXIT的循環(huán) 2 FOR - ENDFOR語句 格式: FOR<循環(huán)變量>=<初值>TO<終值>[STEP<步長>] <循環(huán)體> ENDFOR 功能:首先將初值賦給循環(huán)變量,然后判斷循環(huán)條件是否成立(若步長為正值,則循環(huán)條件為<循環(huán)變量><=<終值>;若步長為負(fù)值,則循環(huán)條件為<循環(huán)變量>>=<終值>)。如果成立,則執(zhí)行循環(huán)體,然后循環(huán)變量增加一個(gè)步長值,并再次判斷循環(huán)條件,一直到條件為假時(shí),退出循環(huán)體。該語句通常用于實(shí)現(xiàn)循環(huán)次數(shù)已知情況下的循環(huán)結(jié)構(gòu)〕 3 SCAN - ENDSCAN語句 格式: SCAN[<范圍>][FOR<條件1>][WHERE<條件2>] <循環(huán)體> ENDSCAN 功能:該循環(huán)語句一般用于處理表中記錄,語句可指明需要處理的記錄范圍及應(yīng)滿足的條件。執(zhí)行該語句時(shí),記錄指針自動(dòng)、依次地在當(dāng)前表的指定范圍內(nèi)滿足條件的記錄上移動(dòng),對(duì)每一條記錄執(zhí)行循環(huán)體內(nèi)的命令。
7.3 多模塊程序 模塊是一個(gè)相對(duì)獨(dú)立的程序段,它可以被其他模塊調(diào)用,也可以調(diào)用其他模塊。通常,把被其他模塊調(diào)用的模塊稱為子程序,把調(diào)用其他模塊而沒有被其他模塊調(diào)用的模塊稱為主程序。應(yīng)用程序一般都是多模塊程序,包含多個(gè)程序模塊。
考點(diǎn)6 模塊的定義和調(diào)用
1模塊的定義 在Visual FoxPro中,模塊可以是命令文件,也可以是過程。過程定義的語句格式為: PROCEDURE|FUNCTION<過程名> <命令序列> [RETURN[<表達(dá)式>]] [ENDPROCIENDFUNC] 功能說明如下。 (1) PROCEDURE|FUNCTION命令表示一個(gè)過程的開始,并命名過程。過程名必須以字母或下劃線開頭,可以包含數(shù)字、字母和下劃線。 (2)當(dāng)程序執(zhí)行到RETURN命令時(shí),控制將轉(zhuǎn)回到調(diào)用處(或命令窗口),并返回表達(dá)式的值。若默認(rèn)RETURN命令,系統(tǒng)將在過程結(jié)束處自動(dòng)調(diào)用一條隱含的RETURN命令。 (3)ENDPROC|ENDFUNC命令表示一個(gè)過程的結(jié)束。如果默認(rèn)此語句,那么過程結(jié)束于下一條PROCEDURE|FUNCTION命令或文件尾。 2模塊的調(diào)用 模塊調(diào)用的格式有兩種。 (1)使用DO命令,格式如下。 DO<文件名>|<過程名> (2)在名字后加一對(duì)小括號(hào),格式如下。 <文件名>|<過程名>() 3打開過程文件 命令格式如下。 SET PROCEDURE TO[<過程文件1>[,<過程文件2>,…][ADDITIVE] 4關(guān)閉過程文件 命令格式如下。 RELEASE PROCEDURE<過程文件1>[,<過程文件2>,…]
考點(diǎn)7 參數(shù)傳遞
模塊程序可以接收調(diào)用程序傳遞過來的參數(shù)。 (1)PARAMETERS<形參變量1>[,<形參變量2>,…]。 (2) LPARAMETERS<形參變量1>[,<形參變量2>,…]。 說明PARAMETERS聲明的形參被看做是模塊程序中建立的私有變量,LPARAMETERS聲明的形參被看做是模塊程序中建立的局部變量。除此之外,兩條命令無其他區(qū)別。 不管是PARAMETERS或LPARAMETERS,都應(yīng)該是模塊程序的第一條可執(zhí)行命令。 (1)調(diào)用參數(shù)調(diào)用模塊程序參數(shù)的格式如下。 DO<文件名>|<過程名>WITH<實(shí)參1>[,<實(shí)參2>,…] <文件名>|<過程名>(<實(shí)參1>[,<實(shí)參2>,…]) 說明:實(shí)參可以是常量、變量或一般表達(dá)式,調(diào)用模塊程序時(shí),形參的數(shù)目不能少于實(shí)參的數(shù)目,當(dāng)形參數(shù)目多于實(shí)參數(shù)目時(shí),多余的形參取初值邏輯假.F.。 (2)參數(shù)的傳遞。模塊中參數(shù)的傳遞分為兩種:按值傳遞(實(shí)參一般為常量和表達(dá)式)和引用傳遞(實(shí)參一般為變量)。參數(shù)的傳遞方式可以重新設(shè)置,格式如下。 SET UDFPARMS TO VALUE|REFERENCE
考點(diǎn)8 變量的作用域
變量的一個(gè)重要屬性是作用域。變量的作用域指的是變量在什么范圍內(nèi)是有效或能夠被訪問的。在Visual FoxPro中,可分為公共變量、私有變量和局部變量3類。 1.公共變量 在任何模塊中都可使用的變量稱為公共變量,公共變量必須先定義后使用,格式如下。 PUBLIC<內(nèi)存變量表> 說明:該命令是建立公共的內(nèi)存變量,并賦以初值邏輯假.F.。建立好的公共變量一直有效,即使程序結(jié)束返回命令窗口也不會(huì)消失,只有執(zhí)行CLEAR MEMORY,RELEASE或QUIT等命令后,才能被釋放。 2私有變量 在程序中直接使用(沒有預(yù)先聲明),而由系統(tǒng)自動(dòng)隱含建立的變量都是私有變量。 私有變量的作用域是建立它的模塊及其下屬的各層模塊。 3局部變量 局部變量只能在建立它的模塊中使用,不能在上層或下層模塊中使用。程序結(jié)束時(shí),自動(dòng)釋放局部變量。格式如下 LOCAL<內(nèi)存變量表> 說明:該變量同樣給建立的內(nèi)存變量賦以初值邏輯假.F.,也必須先定義后使用。當(dāng)子程序中定義的變量名與主程序中同名時(shí),為避免子程序中的變量值改變主程序中的變量值,可在子程序中使用PRIVATE命令隱藏主程序中可能存在的變量,使這些變量在子程序中暫時(shí)無效。格式如下。 (1)PRIVATE<內(nèi)存變量表>。 (2)PRIVATE ALL[LIKE<通配符>|EXCEPT<通配符>]。 說明:該命令并不建立內(nèi)存變量,它只是隱藏指定的在上層模塊中可能已經(jīng)存在的內(nèi)存變量,但是當(dāng)模塊程序返回到上層模塊時(shí),被隱藏的變量就自動(dòng)恢復(fù)有效性,保持原值。
7.4 程序調(diào)試
考點(diǎn)9 調(diào)試器環(huán)境
程序調(diào)試是指在發(fā)現(xiàn)程序有錯(cuò)誤的情況下,確定出錯(cuò)位置并糾正錯(cuò)誤。計(jì)算機(jī)一般能夠發(fā)現(xiàn)程序的出錯(cuò)位置,但對(duì)于計(jì)算機(jī)不能發(fā)現(xiàn)的錯(cuò)誤,只能由用戶自己來查錯(cuò)。Visual FoxPro提供的功能強(qiáng)大的調(diào)試工具—調(diào)試器,可幫助我們進(jìn)行這項(xiàng)工作。 調(diào)用調(diào)試器的方法一般有兩種。 (l)選擇“工具”菜單中的“調(diào)試器”命令。 (2)在命令窗口中輸入DEBUG命令。
考點(diǎn)10 設(shè)置斷點(diǎn)
可以設(shè)置以下4種類型的斷點(diǎn)。 (1)在定位處中斷:可指定一行代碼,當(dāng)程序調(diào)試執(zhí)行到該行時(shí),中斷程序運(yùn)行。 (2)如果表達(dá)式值為真,則在定位處中斷:指定一行代碼及一個(gè)表達(dá)式,當(dāng)程序調(diào)試執(zhí)行到該行代碼時(shí),如果表達(dá)式值為真,就中斷程序運(yùn)行。 (3)當(dāng)表達(dá)式值為真時(shí)中斷:可以指定一個(gè)表達(dá)式,在程序調(diào)試執(zhí)行過程中,當(dāng)該表達(dá)式值為邏輯真.T.時(shí),中斷程序運(yùn)行。 (4)當(dāng)表達(dá)式值改變時(shí)中斷:可以指定一個(gè)表達(dá)式,在程序調(diào)試執(zhí)行過程中,當(dāng)該表達(dá)式值改變時(shí),中斷程序運(yùn)行。
考點(diǎn)11 “調(diào)試”菜單
“調(diào)試”菜單包含執(zhí)行程序、選擇執(zhí)行方式、終止程序執(zhí)行、修改程序,以及調(diào)整程序執(zhí)行速度等命令。各命令具體功能如下。 (1)運(yùn)行:執(zhí)行在跟蹤窗口中打開的程序: (2)繼續(xù)執(zhí)行:當(dāng)程序被中斷時(shí),該命令可使程序在中斷處繼續(xù)往下執(zhí)行。 (3)取消:終止程序的調(diào)試執(zhí)行,并關(guān)閉程序。 (4)定位修改:終止程序的調(diào)試執(zhí)行,然后在文本編輯窗口中打開調(diào)試程序。 (5)跳出:以連續(xù)方式而非單步方式繼續(xù)執(zhí)行被調(diào)用模塊程序中的代碼,然后在調(diào)用程序的調(diào)用語句的下一行處中斷。 (6)單步:單步執(zhí)行下一行代碼。如果下一行代碼調(diào)用了過程或者方法程序,那么該過程或者方法程序在后臺(tái)執(zhí)行。 (7)單步跟蹤:單步執(zhí)行下一行代碼。 (8)運(yùn)行到光標(biāo)處:從當(dāng)前位置執(zhí)行代碼直至光標(biāo)處中斷。 (9)調(diào)速:打開“調(diào)整運(yùn)行速度”對(duì)話框,設(shè)置兩代碼行執(zhí)行之間的延遲秒數(shù)。 (10)設(shè)置下一條語句:程序中斷時(shí)選擇該命令,可使光標(biāo)所在行成為恢復(fù)執(zhí)行后要執(zhí)行的語句。 |