VisualFoxpro程學(xué)設(shè)計(jì)教程(第二版)課件第六章_第1頁(yè)
VisualFoxpro程學(xué)設(shè)計(jì)教程(第二版)課件第六章_第2頁(yè)
VisualFoxpro程學(xué)設(shè)計(jì)教程(第二版)課件第六章_第3頁(yè)
VisualFoxpro程學(xué)設(shè)計(jì)教程(第二版)課件第六章_第4頁(yè)
VisualFoxpro程學(xué)設(shè)計(jì)教程(第二版)課件第六章_第5頁(yè)
已閱讀5頁(yè),還剩123頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

封面程序設(shè)計(jì)基礎(chǔ)程序文件程序的基本結(jié)構(gòu)過(guò)程及其調(diào)用人機(jī)交互方式交互式方式是通過(guò)在命令窗口中輸入命令或通過(guò)選擇菜單項(xiàng)來(lái)實(shí)現(xiàn)各種操作,適用于解決一些較為簡(jiǎn)單的問(wèn)題。程序方式要處理復(fù)雜的問(wèn)題,就應(yīng)采取程序方式。VFP的工作方式6.1程序文件程序由能夠完成指定任務(wù)的一系列命令組成,這些命令被保存在程序文件中。程序文件又稱為命令文件,其擴(kuò)展名為PRG。程序文件中既可包含能在命令窗口執(zhí)行的VFP命令,也可包含一些程序控制語(yǔ)句(如IF語(yǔ)句、循環(huán)語(yǔ)句)。6.1.1程序文件程序文件既可通過(guò)VFP內(nèi)置的文本編輯器來(lái)建立和修改,也可通過(guò)其他文本編輯器(如記事本)來(lái)編輯。程序一旦建立,可以多次執(zhí)行,也可被其他的程序、表單、菜單等調(diào)用。執(zhí)行程序時(shí),系統(tǒng)會(huì)自動(dòng)地按一定的順序來(lái)執(zhí)行程序中的命令。程序的概念菜單方式6.1.2程序文件的建立和修改選擇“文件”菜單的“打開(kāi)”命令,打開(kāi)“打開(kāi)”對(duì)話框。在“打開(kāi)”對(duì)話框中,在“查找范圍”下拉列表中定位到程序文件所在的文件夾,在“文件類型”下拉列表中選擇“程序”,文件列表中顯示出此文件夾下的程序文件。雙擊要打開(kāi)的程序文件,或者選擇它,再單擊“確定”按鈕,即可打開(kāi)程序文件的編輯窗口。修改程序MODIFYCOMMAND<文件名>|?當(dāng)程序文件是一個(gè)新文件名時(shí),系統(tǒng)將創(chuàng)建一個(gè)新的程序文件,并打開(kāi)其編輯窗口。當(dāng)程序文件是一個(gè)已經(jīng)存在的文件時(shí),系統(tǒng)將打開(kāi)該程序文件的編輯窗口,供用戶修改。命令方式在項(xiàng)目管理器中建立和修改程序在程序中,每條命令都以回車鍵結(jié)束,一行只能寫一條命令。若命令需分行書寫,應(yīng)在上一行終了時(shí)輸入續(xù)行符“;”。在程序中可插入注釋,以提高程序的可讀性。注釋行以單詞“NOTE”或符號(hào)“*”開(kāi)頭,它僅在編輯程序時(shí)顯示,不會(huì)在運(yùn)行程序時(shí)執(zhí)行。在語(yǔ)句末尾也可添加注釋,這種注釋以符號(hào)“&&”開(kāi)頭。程序書寫規(guī)則

6.1.3程序的運(yùn)行在程序處于打開(kāi)狀態(tài)時(shí)運(yùn)行程序

如果程序已在編輯窗口被打開(kāi),單擊常用工具欄的“運(yùn)行”按鈕,或在“程序”菜單中選擇“執(zhí)行程序名.prg”命令,可執(zhí)行此程序。程序(P)運(yùn)行(D)通過(guò)菜單執(zhí)行程序文件DO<程序名>通過(guò)命令執(zhí)行程序文件由于DO命令默認(rèn)是運(yùn)行PRG程序。若用戶要運(yùn)行程序文件,則只需指定主文件名,不需指定擴(kuò)展名通過(guò)項(xiàng)目管理器執(zhí)行程序文件在項(xiàng)目管理器中,選擇“代碼”選項(xiàng)卡中“程序”選項(xiàng)下的程序名,單擊“運(yùn)行”按鈕可以運(yùn)行該程序文件。當(dāng)VFP執(zhí)行PRG源程序文件時(shí),系統(tǒng)將自動(dòng)對(duì)其編譯,產(chǎn)生相應(yīng)的FXP文件。系統(tǒng)實(shí)際執(zhí)行的是FXP目標(biāo)文件。在執(zhí)行程序的過(guò)程中,系統(tǒng)會(huì)自動(dòng)地按一定的順序逐條來(lái)執(zhí)行程序中的命令。

中止程序的運(yùn)行如果程序有錯(cuò),或在執(zhí)行過(guò)程中用戶按了ESC鍵中止程序,系統(tǒng)會(huì)打開(kāi)“程序錯(cuò)誤”對(duì)話框。中止程序的運(yùn)行系統(tǒng)將取消此次程序的執(zhí)行

系統(tǒng)將暫停程序的運(yùn)行,返回到命令窗口用戶可以在執(zhí)行其他的操作后,選擇“程序”菜單的“繼續(xù)執(zhí)行”命令或在命令窗口中執(zhí)行“RESUME”命令,從程序的中止處繼續(xù)運(yùn)行程序

當(dāng)用戶選擇“忽略”時(shí),系統(tǒng)將忽略程序錯(cuò)誤,繼續(xù)執(zhí)行程序

6.1.4輸入命令在VFP中,應(yīng)用程序的輸入/輸出界面通常采用表單、報(bào)表等形式。但在編寫小程序時(shí),仍然常使用傳統(tǒng)的輸入命令。

ACCEPT[<提示信息>]TO<內(nèi)存變量>程序中執(zhí)行到該語(yǔ)句時(shí),在主窗口顯示用戶設(shè)置的提示信息,等待用戶從鍵盤輸入數(shù)據(jù)。用戶輸入數(shù)據(jù)后,按回車鍵,系統(tǒng)將接收到的數(shù)據(jù)作為字符串賦值給內(nèi)存變量,再繼續(xù)往下執(zhí)行程序。

字符串接收命令

<提示信息>是一個(gè)字符型表達(dá)式。執(zhí)行此命令時(shí),該表達(dá)式的內(nèi)容作為提示信息,顯示在屏幕上。若缺省此項(xiàng),則不顯示提示信息。由于此命令接收到的任何數(shù)據(jù)都會(huì)作為字符串。用戶在輸入數(shù)據(jù)時(shí),不需要輸入字符串定界符。若用戶不輸入任何數(shù)據(jù),直接按回車鍵,則系統(tǒng)會(huì)將對(duì)內(nèi)存變量賦值為空串。

字符串接收命令USE圖書

&&打開(kāi)圖書表ACCEPT"請(qǐng)輸入要查詢的條形碼"totxm

&&接收用戶要查詢的條形碼LOCATEFOR條形碼=txm

&&根據(jù)用戶的輸入查找記錄DISPLAY條形碼,書名,售價(jià),作者

&&顯示圖書記錄的相關(guān)信息USE

&&關(guān)閉數(shù)據(jù)表RETURN例題在圖書表中,根據(jù)用戶輸入的條形碼,查找書籍的條形碼、書名、售價(jià)、作者信息。

INPUT[<提示信息>]TO<內(nèi)存變量>該命令與ACCEPT命令類似,但該命令可接收用戶輸入的多種數(shù)據(jù)類型的表達(dá)式。用戶可輸入數(shù)值型、字符型、日期型或邏輯型表達(dá)式。系統(tǒng)先計(jì)算表達(dá)式的值,然后將值賦給指定的內(nèi)存變量。內(nèi)存變量的類型由表達(dá)式的數(shù)據(jù)類型決定。當(dāng)用戶輸入字符型、日期型或邏輯型常量時(shí),應(yīng)加上相應(yīng)的定界符。表達(dá)式輸入命令

WAIT[<提示信息>][TO<內(nèi)存變量>][WINDOW[AT<行>,<列>]][TIMEOUT<表達(dá)式>]該命令與ACCEPT命令類似,但該命令只能接收用戶輸入的一個(gè)字符。

單個(gè)字符接收命令若缺省<提示信息>,執(zhí)行此命令時(shí),屏幕上顯示“按任意鍵繼續(xù)?!比糁付═O<內(nèi)存變量>短語(yǔ),執(zhí)行此命令時(shí),用戶按任意鍵,不需按回車鍵,該鍵作為一個(gè)字符被接收到指定的內(nèi)存變量中。若用戶不輸入任何數(shù)據(jù),直接按回車鍵,或單擊鼠標(biāo),系統(tǒng)會(huì)將對(duì)內(nèi)存變量賦值為空串。

若不指定TO<內(nèi)存變量>短語(yǔ),此語(yǔ)句的功能為暫停程序的執(zhí)行,顯示提示信息。用戶按任意鍵,或單擊鼠標(biāo),將繼續(xù)執(zhí)行程序。單個(gè)字符接收命令若指定WINDOW短語(yǔ),將顯示一個(gè)窗口顯示提示信息。通常,窗口顯示在屏幕的右上角。若用AT<行>,<列>短語(yǔ),可指定窗口的位置。TIMEOUT<數(shù)值表達(dá)式>短語(yǔ),用來(lái)設(shè)置等待用戶輸入的時(shí)間,以秒為單位。如果在指定的時(shí)間內(nèi)用戶未輸入任何字符,系統(tǒng)將自動(dòng)執(zhí)行后面的命令。單個(gè)字符接收命令例如,用戶要在程序執(zhí)行過(guò)程中查看數(shù)值型變量A的值,要求結(jié)果顯示在10行30列位置的窗口中,顯示5秒鐘后繼續(xù)執(zhí)行程序,則語(yǔ)句為WAIT“變量A的值為”+STR(A)WINDOWAT10,30TIMEOUT5又例如,用戶要在程序執(zhí)行過(guò)程中接收一個(gè)字符,將此值存儲(chǔ)在變量B中。則語(yǔ)句為WAIT“請(qǐng)輸入一個(gè)字符”TOB單個(gè)字符接收命令6.1.5其他命令在程序的結(jié)尾,通常執(zhí)行以下命令,以結(jié)束程序的運(yùn)行。當(dāng)然,如果省略這些命令,也可以終止程序。RETURN結(jié)束當(dāng)前程序的執(zhí)行,返回到調(diào)用它的上級(jí)程序,若無(wú)上級(jí)程序,則返回到命令窗口結(jié)束程序運(yùn)行命令CANCEL終止程序運(yùn)行,清除所有的私有變量,返回命令窗口QUIT退出Visual

FoxPro系統(tǒng),返回到Windows。結(jié)束程序運(yùn)行命令CLEAR清除主屏幕窗口上的所有信息。清屏命令CLOSEALL

關(guān)閉所有已打開(kāi)的各類文件,并將當(dāng)前工作區(qū)設(shè)為1號(hào)工作區(qū)。

關(guān)閉文件命令CLEARALL

可以關(guān)閉文件,還可以清除所有用戶定義的內(nèi)存變量。

關(guān)閉文件命令

SETTALKON/OFF許多命令在執(zhí)行時(shí)會(huì)返回一些執(zhí)行狀態(tài)的信息這些信息通常會(huì)顯示在窗口或狀態(tài)欄中開(kāi)啟或關(guān)閉人機(jī)會(huì)話設(shè)置環(huán)境參數(shù)命令

SETDEFAULTTO<路徑>設(shè)置默認(rèn)的文件路徑設(shè)置環(huán)境參數(shù)命令6.2程序的基本結(jié)構(gòu)結(jié)構(gòu)化程序設(shè)計(jì)是根據(jù)給定的任務(wù),設(shè)計(jì)、編寫和調(diào)試出完成該任務(wù)的過(guò)程。結(jié)構(gòu)化程序設(shè)計(jì)的基本思想是采用“自頂向下,逐步求精”的程序設(shè)計(jì)方法和“單入口單出口”的控制結(jié)構(gòu)。程序的基本結(jié)構(gòu)自頂向下、逐步求精的程序設(shè)計(jì)方法是從問(wèn)題本身開(kāi)始,經(jīng)過(guò)逐步細(xì)化,將解決問(wèn)題的步驟分解為由基本程序結(jié)構(gòu)模塊組成的結(jié)構(gòu)化程序框圖。程序的基本結(jié)構(gòu)“單入口單出口”的思想認(rèn)為:一個(gè)復(fù)雜的程序,如果它僅是由順序、選擇和循環(huán)三種基本程序結(jié)構(gòu)通過(guò)組合、嵌套構(gòu)成,那么這個(gè)一定只有一個(gè)唯一的入口和出口。據(jù)此,就很容易編寫出結(jié)構(gòu)良好、易于調(diào)試的程序。程序的基本結(jié)構(gòu)順序結(jié)構(gòu)程序是最簡(jiǎn)單的程序結(jié)構(gòu),先執(zhí)行A操作,再執(zhí)行B操作,依次執(zhí)行各條語(yǔ)句。6.2.1順序結(jié)構(gòu)ABC6.2.2選擇結(jié)構(gòu)選擇結(jié)構(gòu)是在程序執(zhí)行時(shí),根據(jù)不同的條件,選擇執(zhí)行不同的程序語(yǔ)句。VFP的分支結(jié)構(gòu)程序可以分為簡(jiǎn)單分支(IF-ENDIF)、選擇分支(IF-ELSE-ENDIF)以及多路分支(DOCASE-ENDCASE)三種不同的程序IF<條件表達(dá)式>

<語(yǔ)句序列>ENDIF條件.N.語(yǔ)句序列.Y.ENDIF的下一條語(yǔ)句簡(jiǎn)單選擇語(yǔ)句如果條件成立,即<條件表達(dá)式.>的值為真,則執(zhí)行語(yǔ)句序列,然后再執(zhí)行ENDIF后面的語(yǔ)句。否則,直接執(zhí)行ENDIF后面的語(yǔ)句。某地的計(jì)程車收費(fèi)規(guī)則為:不超過(guò)2公里時(shí),一律收取6元。超過(guò)部分每公里加收1.8元。編程根據(jù)行車?yán)锍逃?jì)算應(yīng)付車費(fèi)。INPUT'請(qǐng)輸入里程數(shù)'TOx

&&接收要計(jì)算的行車?yán)锍蘺=6

&&將車費(fèi)賦值為6元IFx>2

&&判斷x是否超過(guò)2公里

y=6+(x-2)*1.8

&&重新計(jì)算車費(fèi)ENDIF?’里程數(shù)為’,x,’車費(fèi)為’,y

&&顯示里程和車費(fèi)RETURN

&&返回命令窗口例題:簡(jiǎn)單選擇語(yǔ)句IF<條件表達(dá)式>

<語(yǔ)句序列1>ELSE

<語(yǔ)句序列2>ENDIF

雙分支選擇語(yǔ)句如果條件成立,即<條件表達(dá)式>的值為真,則執(zhí)行語(yǔ)句序列1,然后執(zhí)行ENDIF后面的語(yǔ)句。否則,執(zhí)行語(yǔ)句序列2的語(yǔ)句,再執(zhí)行ENDIF后面的語(yǔ)句。ENDIF的下一條語(yǔ)句條件語(yǔ)句序列2.N.語(yǔ)句序列1.Y.

雙分支選擇語(yǔ)句某地的計(jì)程車收費(fèi)規(guī)則為:不超過(guò)2公里時(shí),一律收取6元。超過(guò)部分每公里加收1.8元。編程根據(jù)行車?yán)锍逃?jì)算應(yīng)付車費(fèi)。INPUT'請(qǐng)輸入里程數(shù)'TOx

&&接收要計(jì)算的行車?yán)锍蘄Fx<=2

&&判斷x是否超過(guò)2公里

y=6

&&將車費(fèi)賦值為6元ELSE

y=6+(x-2)*1.8

&&將車費(fèi)賦值為6元加超出的部分ENDIF?’里程數(shù)為’,x,’車費(fèi)為’,y

&&顯示里程和車費(fèi)RETURN

&&返回命令窗口例題:雙分支選擇語(yǔ)句在圖書表中,根據(jù)用戶輸入的條形碼查找書籍。如果找到,則顯示書籍的條形碼、書名、售價(jià)、作者信息;如果沒(méi)有找到,顯示‘查無(wú)此書’。

USE圖書

&&打開(kāi)圖書表ACCEPT"請(qǐng)輸入要查詢的條形碼"totxm

&&接收用戶要查詢的條形碼LOCATEFOR條形碼=txm

&&根據(jù)用戶的輸入查找記錄IFFOUND()

&&判斷是否找到了輸入條碼DISPLAY條形碼,書名,售價(jià),作者

&&顯示圖書記錄的相關(guān)信息ELSE?’查無(wú)此書’

&&顯示沒(méi)有這本書ENDIFUSE

&&關(guān)閉數(shù)據(jù)表RETURN

&&返回命令窗口例題:雙分支選擇語(yǔ)句

嵌套選擇語(yǔ)句在解決一些復(fù)雜問(wèn)題時(shí),需要將多個(gè)選擇結(jié)構(gòu)語(yǔ)句結(jié)合起來(lái)使用。也就是說(shuō),在選擇結(jié)構(gòu)的<語(yǔ)句序列>中,允許包括另一個(gè)合法的選擇結(jié)構(gòu),形成選擇的嵌套。對(duì)于嵌套選擇結(jié)構(gòu)的程序而言,每一個(gè)IF必須和一個(gè)ENDIF配對(duì)。為了使程序易于閱讀,內(nèi)外層選擇結(jié)構(gòu)層次分明,通常按縮進(jìn)格式來(lái)書寫。某商場(chǎng)采取打折的方法進(jìn)行促銷,購(gòu)物金額在300元以上,按九五折優(yōu)惠;購(gòu)物金額在500元以上,按九折優(yōu)惠;購(gòu)物金額在1000元以上,按八五折優(yōu)惠。編寫程序,根據(jù)用戶的購(gòu)物金額,計(jì)算其優(yōu)惠額及實(shí)際付款金額例題:嵌套選擇語(yǔ)句INPUT'請(qǐng)輸入購(gòu)物金額'TOje

&&接收要計(jì)算的購(gòu)物金額IFje<=300

&&判斷金額是否超過(guò)300元

yh=0

&&沒(méi)有優(yōu)惠ELSE

IFje<=500

yh=je*0.05

&&優(yōu)惠額為5%ELSE

IFje<=1000

&&判斷金額是否超過(guò)1000元

yh=je*0.1

&&優(yōu)惠額為10%ELSE

yh=je*0.15

&&優(yōu)惠額為15%ENDIFENDIFENDIF?’優(yōu)惠額為’,yh,’實(shí)際付款為’,je-yh

&&顯示優(yōu)惠額和實(shí)際付款RETURN

&&返回命令窗口例題:嵌套選擇語(yǔ)句DOCASECASE<條件表達(dá)式1>

<語(yǔ)句序列1>CASE<條件表達(dá)式2>

<語(yǔ)句序列2>…CASE<條件表達(dá)式

N>

<語(yǔ)句序列N>[OTHERWISE

<語(yǔ)句序列N+1>]ENDCASE

多路分支系統(tǒng)自上而下依次對(duì)各個(gè)CASE語(yǔ)句的條件進(jìn)行判斷。若某個(gè)<條件表達(dá)式>的值為真,則執(zhí)行該語(yǔ)句下的語(yǔ)句序列。然后,不管其他CASE語(yǔ)句的條件是否成立,轉(zhuǎn)去執(zhí)行ENDCASE后的語(yǔ)句。若所有<條件表達(dá)式>的值都不為真,又有OTHERWISE子句,則執(zhí)行OTHERWISE后的語(yǔ)句序列,再轉(zhuǎn)去執(zhí)行ENDCASE后的語(yǔ)句。若所有<條件表達(dá)式>的值都不為真,又沒(méi)有OTHERWISE子句,則直接執(zhí)行ENDCASE后的語(yǔ)句。多路分支ENDCASE的下一條語(yǔ)句條件1.N.條件2…....N.條件N語(yǔ)句序列1.Y.語(yǔ)句序列2.Y.語(yǔ)句序列N.Y.語(yǔ)句序列N+1.N.多路分支流程圖INPUT'請(qǐng)輸入購(gòu)物金額'TOje

&&接收要計(jì)算的購(gòu)物金額DOCASECASEje<=300

&&判斷金額是否超過(guò)300元

yh=0

&&沒(méi)有優(yōu)惠CASEje<=500

&&判斷金額是否超過(guò)500元

yh=je*0.05

&&優(yōu)惠額為5%CASEje<=1000

&&判斷金額是否超過(guò)1000元

yh=je*0.1

&&優(yōu)惠額為10%

OTHERWISE

yh=je*0.15

&&優(yōu)惠額為15%ENDCASE?’優(yōu)惠額為’,yh,’實(shí)際付款為’,je-yh

&&顯示優(yōu)惠額和實(shí)際付款RETURN

&&返回命令窗口例題:多路分支由于各個(gè)CASE條件是按其排列的前后順依次被判斷的。所以,哪一個(gè)條件在前,哪一個(gè)條件在后,可能會(huì)影響程序的執(zhí)行結(jié)果。編寫程序時(shí),應(yīng)根據(jù)條件所蘊(yùn)含的邏輯關(guān)系,認(rèn)真考慮。多路分支6.2.3循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是指在程序執(zhí)行的過(guò)程中,某段代碼被重復(fù)地執(zhí)行若干次,被重復(fù)執(zhí)行的代碼段稱之為循環(huán)體。VFP支持三種循環(huán)結(jié)構(gòu)的控制語(yǔ)句:條件循環(huán)(DOWHILE-ENDDO)、步長(zhǎng)型循環(huán)(FOR-ENDFOR)、掃描型循環(huán)(SCAN-ENDSCAN)。DOWHILE<條件表達(dá)式>

<語(yǔ)句序列>ENDDO

條件循環(huán)條件循環(huán)語(yǔ)句,是根據(jù)條件表達(dá)式的值,決定循環(huán)體語(yǔ)句的執(zhí)行次數(shù)。

條件循環(huán)執(zhí)行該語(yǔ)句時(shí),先判斷DO

WHILE處的循環(huán)條件是否成立,如果條件為真,則執(zhí)行DO

WHILE與ENDDO之間的命令序列(循環(huán)體)。當(dāng)執(zhí)行到ENDDO時(shí),返回到DOWHILE,再次判斷循環(huán)條件是否為真,以確定是否再次執(zhí)行循環(huán)體。若條件為假,則結(jié)束該循環(huán)語(yǔ)句,執(zhí)行ENDDO后面的語(yǔ)句。如果第一次判斷條件時(shí),條件即為假,則循環(huán)體一次都不執(zhí)行。

條件循環(huán)體.Y..N.條件循環(huán)USE圖書

&&打開(kāi)圖書表jx=’Y’

&&設(shè)置變量jx的初值DOWHILEjx=’Y’ORjx=’y’

&&根據(jù)變量jx的值判斷是否循環(huán)ACCEPT"請(qǐng)輸入要查詢的條形碼"totxm

&&接收用戶要查詢的條形碼LOCATEFOR條形碼=txm

&&根據(jù)用戶的輸入查找記錄IFFOUND()

&&判斷是否找到了輸入條碼

DISPLAY條形碼,書名,售價(jià),作者

&&顯示圖書記錄的相關(guān)信息ELSE

?’查無(wú)此書’

&&顯示沒(méi)有這本書ENDIFWAIT“是否繼續(xù)(Y/N)”TOjx

&&接收用戶輸入的字符是否繼續(xù)查找ENDDOUSE

&&關(guān)閉數(shù)據(jù)表RETURN

&&返回命令窗口例題:條件循環(huán)

條件循環(huán)在循環(huán)體中可以出現(xiàn)兩條特殊的命令:LOOP和EXIT。如果循環(huán)體包含LOOP命令,那么當(dāng)遇到LOOP時(shí),就結(jié)束循環(huán)體的本次執(zhí)行,不再執(zhí)行其后面的語(yǔ)句,而是轉(zhuǎn)回DOWHILE處重新判斷條件。如果循環(huán)體包含EXIT命令,那么當(dāng)遇到EXIT時(shí),就結(jié)束該語(yǔ)句的執(zhí)行,轉(zhuǎn)去執(zhí)行ENDDO后面的語(yǔ)句。通常LOOP和EXIT出現(xiàn)在循環(huán)體內(nèi)包含的選擇結(jié)構(gòu)中,根據(jù)選擇語(yǔ)句的條件來(lái)判斷是否LOOP或EXIT。條件命令組.Y..N.無(wú)條件循環(huán)命令

EXITLOOP無(wú)條件結(jié)束循環(huán)命令

條件循環(huán)例題:條件循環(huán)實(shí)現(xiàn)程序例6.7的功能。且如果用戶輸入的條形碼不是8位字符,則提示用戶重新輸入條形碼。USE圖書

&&打開(kāi)圖書表DOWHILE.T.&&循環(huán)條件永遠(yuǎn)為真值A(chǔ)CCEPT"請(qǐng)輸入要查詢的條形碼"totxm

&&接收用戶要查詢的條形碼IFLEN(ALLT(TXM))<>8

&&如果用戶輸入的條形碼不是8位

WAIT‘請(qǐng)輸入8位條形碼’AT50,20TIMEOUT3

&&顯示警告信息

LOOP

&&跳轉(zhuǎn)到循環(huán)的條件判斷處ENDIFLOCATEFOR條形碼=txm

&&根據(jù)用戶的輸入查找記錄IFFOUND()

&&判斷是否找到了輸入條碼

DISPLAY條形碼,書名,售價(jià),作者

&&顯示圖書記錄的相關(guān)信息ELSE

?’查無(wú)此書’

&&顯示沒(méi)有這本書ENDIFWAIT“是否繼續(xù)(Y/N)”TOjx

&&接收用戶輸入的字符是否繼續(xù)查找IFjx<>’Y’ANDjx<>’y’

&&如果用戶回答的不是Y或y

EXIT

&&退出循環(huán)ENDIFENDDOUSE

&&關(guān)閉數(shù)據(jù)表RETURN

&&返回命令窗口例題:條件循環(huán)循環(huán)條件為邏輯常量.T.,循環(huán)條件永遠(yuǎn)成立,這種循環(huán)被稱為絕對(duì)循環(huán)。這時(shí),在循環(huán)體內(nèi)應(yīng)該有EXIT語(yǔ)句退出循環(huán)。

使用循環(huán)結(jié)構(gòu)時(shí),為使程序最終能退出循環(huán),在循環(huán)體中必須要有使循環(huán)條件的值的發(fā)生改變的語(yǔ)句,或者有EXIT語(yǔ)句。否則程序?qū)⒂肋h(yuǎn)重復(fù)地執(zhí)行循環(huán)體,這種情況稱為死循環(huán)。調(diào)試過(guò)程中遇到死循環(huán)時(shí),按鍵盤的ESC鍵可結(jié)束程序的運(yùn)行。條件循環(huán)求1到100之間全部數(shù)之和i=1

&&設(shè)置計(jì)數(shù)變量i的初值為1s=0

&&設(shè)置求和變量s的初值為0DOWHILEi<=100

&&循環(huán)條件為i不超過(guò)100s=s+i

&&使s的值增加ii=i+1

&&使i的值增加1ENDDO?”1到100的和為”,s

&&顯示求和變量的值RETURN

&&返回命令窗口例題:條件循環(huán)

si初值01

循環(huán)1:12循環(huán)2:1+23循環(huán)3:1+2+3

4循環(huán)4:1+2+3+4

5循環(huán)5:1+2+3+4+5

6……循環(huán)100:1+2+…+100101例題:條件循環(huán)對(duì)于讀者表的所有讀者根據(jù)不同的身份來(lái)收取押金。其中,教研人員收取50元,工作人員收取30元,研究生收取20元。

將所有讀者的姓名,身份和押金顯示出來(lái)

例題:條件循環(huán)USE讀者

&&打開(kāi)讀者表DOWHILENOTEOF()

&&循環(huán)條件為記錄指針不指向文件尾DOCASECASE身份=’教研人員’

&&判斷當(dāng)前記錄的身份字段的值是否為教研人員

yj=50

&&對(duì)yj賦值為50

CASE身份=’工作人員’

&&判斷當(dāng)前記錄的身份字段的值是否為工作人員

yj=30

&&對(duì)yj賦值為30CASE身份=’研究生’

&&判斷當(dāng)前記錄的身份字段的值是否為研究生

yj=20

&&對(duì)yj賦值為20ENDCASE?姓名,身份,yj

&&顯示當(dāng)前記錄的姓名和身份字段及變量yj的值SKIP

&&向下移動(dòng)記錄指針ENDDOUSE

&&關(guān)閉數(shù)據(jù)表RETURN

&&返回命令窗口例題:條件循環(huán)FOR循環(huán)變量=<初值>TO<終值>[STEP<步長(zhǎng)值>]

<語(yǔ)句序列>ENDFOR|NEXT

步長(zhǎng)型循環(huán)

步長(zhǎng)型循環(huán)執(zhí)行該語(yǔ)句時(shí),系統(tǒng)首先自動(dòng)將初值賦給循環(huán)變量,然后判斷循環(huán)變量是否超過(guò)終值。若步長(zhǎng)值為正數(shù),則循環(huán)變量大于終值為超過(guò);若步長(zhǎng)值為負(fù)數(shù),則循環(huán)變量小于終值為超過(guò)。若沒(méi)有超過(guò),則執(zhí)行循環(huán)體,并將循環(huán)變量增加一個(gè)步長(zhǎng)值。然后,再去判斷循環(huán)變量是否超過(guò)終值。如果沒(méi)有超過(guò)終值,則再次執(zhí)行循環(huán)體;否則,轉(zhuǎn)去執(zhí)行ENDFOR后面的語(yǔ)句。在缺省步長(zhǎng)值時(shí),默認(rèn)的步長(zhǎng)值為1。<初值>、<終值>、<步長(zhǎng)值>都是數(shù)值型表達(dá)式。這些表達(dá)式的值在第一次循環(huán)時(shí)被計(jì)算出來(lái),在以后循環(huán)的執(zhí)行過(guò)程中不再會(huì)被改變。

循環(huán)變量超過(guò)終值循環(huán)變量=初值步長(zhǎng)型循環(huán)循環(huán)變量=循環(huán)變量+步長(zhǎng).N.循環(huán)體.Y.ENDFOR后面的語(yǔ)句使用步長(zhǎng)型循環(huán)實(shí)現(xiàn)例6.9s=0

&&設(shè)置求和變量為sFORi=1TO100&&設(shè)置循環(huán)變量i的初值為1,終值為100,步長(zhǎng)為1s=s+i

&&使s的值增加iENDFOR?”1到100的和為”,s

&&顯示求和變量的值RETURN

&&返回命令窗口例題:步長(zhǎng)型循環(huán)判斷某數(shù)是否為質(zhì)數(shù)除了1和它本身之外不能被任何一個(gè)整數(shù)所整除的數(shù)為質(zhì)數(shù)。除了2以外的質(zhì)數(shù)均為素?cái)?shù)。

要判斷一個(gè)數(shù)n是否素?cái)?shù),只需用2到n-1的各個(gè)整數(shù)去除n。如果都不能整除n,則n就是素?cái)?shù)。只要有一個(gè)數(shù)能整除n,則n就不是一個(gè)素?cái)?shù)。

例題:步長(zhǎng)型循環(huán)INPUT"請(qǐng)輸入一個(gè)大于2的整數(shù)"ton

&&接收從鍵盤輸入的整數(shù)賦值給變量nFORi=2TOn-1

&&設(shè)置循環(huán)變量i的初值為2,終值為n-1,步長(zhǎng)為1IFMOD(n,i)=0

&&若i整除n,則退出循環(huán)EXITENDIF

ENDFORIFi>n-1

&&退出循環(huán)后,判斷i是否大于n-1?n,’是一個(gè)素?cái)?shù)’

&&若i等于n,則說(shuō)明2到n-1沒(méi)有一個(gè)數(shù)整除nELSE

?n,’不是一個(gè)素?cái)?shù)’

&&否則,說(shuō)明是在i整除n的情況下退出循環(huán)ENDIFRETURN

&&返回命令窗口例題:步長(zhǎng)型循環(huán)

SCAN[<范圍>]

[FOR<條件>]

<語(yǔ)句序列>ENDSCAN掃描型循環(huán)

掃描型循環(huán)執(zhí)行該語(yǔ)句時(shí),系統(tǒng)首先將記錄指針指向給定范圍內(nèi)滿足指定條件的第一條記錄上。如果此時(shí)記錄指針指向的不是文件尾,即EOF()為假值,則執(zhí)行循環(huán)體。執(zhí)行完,系統(tǒng)自動(dòng)將記錄指針定位到給定范圍內(nèi)下一條滿足指定條件的記錄,然后重新判斷記錄指針是否指向文件尾。若不是文件尾,則再次執(zhí)行循環(huán)體,否則轉(zhuǎn)去執(zhí)行ENDSCAN后的語(yǔ)句。當(dāng)缺省范圍和條件時(shí),數(shù)據(jù)表的所有記錄都將執(zhí)行循環(huán)體的語(yǔ)句。循環(huán)體.F.紀(jì)錄指針指向第一條記錄指針是否指向文件尾掃描型循環(huán)紀(jì)錄指針指向下一條記錄.T.ENDSCAN后面的語(yǔ)句USE讀者

&&打開(kāi)讀者表SCAN

&&對(duì)所有記錄進(jìn)行掃描DOCASECASE身份=’教研人員’

&&判斷當(dāng)前記錄的身份字段的值是否為教研人員

yj=50

&&對(duì)yj賦值為50

CASE身份=’工作人員’

&&判斷當(dāng)前記錄的身份字段的值是否為工作人員

yj=30

&&對(duì)yj賦值為30CASE身份=’研究生’

&&判斷當(dāng)前記錄的身份字段的值是否為研究生

yj=20

&&對(duì)yj賦值為20ENDCASE?姓名,身份,yj

&&顯示當(dāng)前記錄的姓名和身份字段及變量yj的值ENDSCANUSE

&&關(guān)閉數(shù)據(jù)表RETURN

&&返回命令窗口例題:掃描循環(huán)在一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)包含另一個(gè)循環(huán)結(jié)構(gòu),則稱為多重循環(huán),或稱為循環(huán)的嵌套。前面所介紹的幾種循環(huán)語(yǔ)句不僅自身可以嵌套自身,也可以互相嵌套,實(shí)現(xiàn)多重循環(huán)但是,每一層次的循環(huán)開(kāi)始語(yǔ)句和循環(huán)結(jié)束語(yǔ)句必須互相對(duì)應(yīng),層次分明,不能互相交叉。

多重循環(huán)顯示出3到100之間的所有素?cái)?shù),并求這些數(shù)的和

s=0

&&設(shè)置求和變量s的初值為0FORn=3TO99STEP2

&&設(shè)置循環(huán)變量n的初值為3,終值為100,步長(zhǎng)為2FORi=3TOINT(SQRT(n))

&&設(shè)置i的初值為2,終值為n的平方根的整數(shù)值IFMOD(n,i)=0

&&若i整除n,則退出循環(huán)EXITENDIF

ENDFORIFi>INT(SQRT(n))

&&退出循環(huán)后,判斷i是否大于內(nèi)層循環(huán)的終值

?n

&&說(shuō)明沒(méi)有發(fā)生i整除n的情況,即n是素?cái)?shù)

s=s+n

&&使求和變量s的值增加nENDIF

ENDFOR?’素?cái)?shù)的和為’,sRETURN

&&返回命令窗口例題編程輸出乘法九九表例題:多重循環(huán)s=0

&&設(shè)置求和變量s的初值為0FORi=1TO9

&&外層循環(huán)變量i從1到9

FORj=1toi

&&內(nèi)層循環(huán)變量j從1到i

??'',str(i,1)+'×'+str(j,1)+'='+str(i*j,2)

&&在本行顯示數(shù)學(xué)式i×j=i與j的乘積

ENDFOR

?

&&換行輸出ENDFOR例題:多重循環(huán)輸入9個(gè)數(shù)值,建立一個(gè)三行三列的數(shù)組,求出每行元素的最大值,并輸出。

例題:多重循環(huán)DIMEa(3,3),m(3)&&定義三行三列的a數(shù)組,用來(lái)保存各行最大值的m數(shù)組FORi=1TO3FORj=1TO3INPUT"請(qǐng)輸入"+STR(i,1)+"行"+STR(j,1)+"列的元素"TOa(i,j)ENDFORENDFOR*上述語(yǔ)句為對(duì)二維數(shù)組的各個(gè)元素逐一賦值

FORi=1TO3&&外層循環(huán)變量i從2到3

m(i)=a(i,1)&&設(shè)m(i)初值為i行的第一列的數(shù)組元素

FORj=2TO3&&內(nèi)層循環(huán)變量j從2到3IFm(i)<a(i,j)&&判斷第j列元素是否大于m(i)中保存的值

m(i)=a(i,j)&&將m(i)重新賦值為第j列元素

ENDIFENDFORENDFOR*下列語(yǔ)句為對(duì)二維數(shù)組的各個(gè)元素逐一輸出,并顯示各行的最大值FORi=1TO3?FORj=1TO3??a(i,j)ENDFOR??'最大值為',m(i)ENDFOR例題:多重循環(huán)顯示讀者表中還有未還書籍的讀者的姓名,電話,未還書籍的本數(shù),未還書籍的條形碼和借閱日期。

例題:多重循環(huán)SELE2&&選擇2號(hào)工作區(qū)為當(dāng)前工作區(qū)USE借閱&&打開(kāi)借閱表SELE1&&選擇1號(hào)工作區(qū)為當(dāng)前工作區(qū)USE讀者&&打開(kāi)讀者表SCAN&&對(duì)讀者表所有記錄進(jìn)行掃描循環(huán)c=0&&設(shè)統(tǒng)計(jì)未還圖書本數(shù)的變量c的初值為0SELE2&&選擇借閱表為當(dāng)前表SCANFOR讀者證號(hào)=讀者.讀者證號(hào)ANDEMPTY(還書日期)&&掃描讀者證號(hào)與讀者表當(dāng)前記錄的讀者證號(hào)相同且還書日期為空的記錄c=c+1&&未還圖書本數(shù)變量c增加1?c,條形碼,借閱日期&&顯示未還圖書的條形碼和借閱日期ENDSCAN&&內(nèi)層循環(huán)結(jié)束SELE1&&選擇讀者表為當(dāng)前表IFc>0&&判斷該讀者未還圖書的本數(shù)是否大于0?姓名,'電話',電話號(hào)碼,'總計(jì)',c,'本'&&顯示該讀者的姓名,電話號(hào)碼,未還圖書的本數(shù)ENDIFENDSCAN&&外層循環(huán)結(jié)束USE&&關(guān)閉讀者表SELE2&&選擇借閱表為當(dāng)前表USE&&關(guān)閉借閱表RETURN&&返回命令窗口例題:多重循環(huán)程序6.3多模塊程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)的基本思想是將一個(gè)復(fù)雜的規(guī)模較大的程序系統(tǒng)劃分為若干個(gè)功能相關(guān)又相對(duì)獨(dú)立的一個(gè)個(gè)較小的模塊。這樣,既有利于程序的編寫和開(kāi)發(fā),也有利于程序的維護(hù)和擴(kuò)充。此外,在程序設(shè)計(jì)中,如果某個(gè)功能的程序段需要多次重復(fù)使用的話,也要把這樣的程序段獨(dú)立出來(lái)成為一個(gè)模塊,當(dāng)系統(tǒng)中任何地方要用到該功能時(shí),只要調(diào)用相應(yīng)的模塊即可,而不必再重復(fù)編寫。多模塊程序設(shè)計(jì)求組合數(shù):Cm=n!(m-n)!INPUT‘m=‘TOmINPUT‘n=‘TOnt=1FORi=1TOmt=t*iENDFORa=tt=1FORi=1TOnt=t*iENDFORb=tt=1FORi=1TOm-nt=t*iENDFORc=t?”組合數(shù)為”,a/(b*c)nm!

求階乘例題由于公式中出現(xiàn)了3個(gè)階乘,所以程序中計(jì)算階乘的程序段重復(fù)出現(xiàn)三次。為了簡(jiǎn)化程序,我們可以把計(jì)算階乘的功能定義為一個(gè)模塊。在VFP中,模塊可以是一個(gè)子程序,也可以是一個(gè)過(guò)程。子程序就是將模塊建成一個(gè)獨(dú)立的命令文件,當(dāng)其他程序中需要用到該模塊的功能,可以通過(guò)DO命令來(lái)調(diào)用此子程序。由于每調(diào)用一個(gè)子程序就要打開(kāi)一個(gè)文件,減慢了程序運(yùn)行的速度。為此,可以通過(guò)定義過(guò)程實(shí)現(xiàn)模塊功能,而一個(gè)程序文件中可存放多個(gè)過(guò)程。多模塊程序設(shè)計(jì)6.3.1過(guò)程的定義和使用

PROCEDURE|FUNCTION

<過(guò)程名><命令序列>[RETURN[<表達(dá)式>]][ENDPROC|ENDFUNC]定義過(guò)程PROCDURE或FUNCTION命令表示過(guò)程的開(kāi)始,并對(duì)過(guò)程命名。

過(guò)程名必須以字母或下劃線開(kāi)頭,可包含字母、數(shù)字和下劃線。ENDPROC或ENDFUNC命令表示過(guò)程的結(jié)束。

如果缺省,過(guò)程結(jié)束于下一個(gè)過(guò)程的開(kāi)始處或文件結(jié)尾處。RETURN命令表示過(guò)程的返回。

如果缺省RETURN命令,則在過(guò)程的結(jié)束處將自動(dòng)執(zhí)行一條隱含的RETURN命令。

若RETURN帶<表達(dá)式>,則過(guò)程將返回表達(dá)式的值。若不帶表達(dá)式,過(guò)程返回一個(gè)邏輯真(.T.)。定義過(guò)程過(guò)程可以保存在程序文件中,放置在程序文件正常代碼的后面。一個(gè)程序文件中可以存放多個(gè)過(guò)程。定義過(guò)程當(dāng)主程序中要用到過(guò)程所定義的功能,可以用下列兩種格式調(diào)用過(guò)程。調(diào)用過(guò)程DO

<過(guò)程名><過(guò)程名>()當(dāng)系統(tǒng)運(yùn)行到程序中調(diào)用過(guò)程的命令時(shí),便從過(guò)程的第一條語(yǔ)句開(kāi)始執(zhí)行,執(zhí)行中只要碰到RETURN語(yǔ)句,控制返回到主程序,從主程序中調(diào)用過(guò)程的下一條語(yǔ)句處繼續(xù)執(zhí)行。使用第二種格式調(diào)用過(guò)程時(shí),該過(guò)程將返回一個(gè)值,可以作為函數(shù)出現(xiàn)在主程序的表達(dá)式中。調(diào)用過(guò)程使用過(guò)程的方式求組合數(shù)INPUT'm='TOmINPUT'n='TOnk=ma=jc()k=nb=jc()k=m-nc=jc()?a/(b*c)RETURNPROCjct=1FORi=1TOkt=t*iENDFORRETURNtENDP例題一個(gè)應(yīng)用程序往往需要用到多個(gè)過(guò)程,用戶可將多個(gè)過(guò)程的定義存放在一個(gè)程序文件中,該文件被稱為過(guò)程文件。過(guò)程文件PROCEDURE

<過(guò)程名1>

<命令序列1>

[RETURN<表達(dá)式>][ENDPROC]PROCEDURE

<過(guò)程名2>

<命令序列2>

[RETURN<表達(dá)式>][ENDPROC]。。。。。。PROCEDURE

<過(guò)程名n>

<命令序列n>

[RETURN<表達(dá)式>][ENDPROC]過(guò)程文件由于過(guò)程文件也是一個(gè)擴(kuò)展名為prg的程序文件,其建立和編輯的方法和其他的程序文件相同。當(dāng)主程序中要用到過(guò)程文件中所定義的過(guò)程時(shí),首先要在主程序中通過(guò)SETPROCEDURETO<過(guò)程文件名>命令打開(kāi)過(guò)程文件。此后,主程序可以調(diào)用過(guò)程文件中的任一過(guò)程。當(dāng)不再需要調(diào)用過(guò)程時(shí),應(yīng)該在主程序中使用命令CLOSEPROCEDURE或SETPROCEDURETO關(guān)閉過(guò)程文件。

過(guò)程文件在調(diào)用過(guò)程時(shí),往往需要將一些數(shù)據(jù)從主程序傳送到被調(diào)用的過(guò)程中,或?qū)⑦^(guò)程運(yùn)行的結(jié)果上傳到主程序中。為此,在定義過(guò)程時(shí),可以用PARAMETER<變量表>語(yǔ)句來(lái)定義參數(shù)。PARAMETER必須是過(guò)程的第一個(gè)語(yǔ)句。在PARAMETER中所說(shuō)明的變量,稱其為形參。6.3.2參數(shù)傳遞當(dāng)主程序中調(diào)用過(guò)程時(shí),可以用DO<過(guò)程名>WITH<參數(shù)表>或過(guò)程名(<參數(shù)表>)進(jìn)行參數(shù)傳遞。在調(diào)用語(yǔ)句中的參數(shù),稱其為實(shí)參。實(shí)參和形參的個(gè)數(shù)、類型必須一一對(duì)應(yīng)。實(shí)參可為常量、變量、表達(dá)式。若實(shí)參為變量,必須在調(diào)用前賦予初值。

參數(shù)傳遞使用帶參數(shù)的過(guò)程實(shí)現(xiàn)求組合數(shù)INPUT'm='TOmINPUT'n='TOn?jc(m)/(jc(n)*jc(m-n))RETURNPROCjcPARAMETERkt=1FORi=1TOkt=t*iENDFORRETURNtENDP例題以m為實(shí)參,m的值傳送給k調(diào)用結(jié)束后,t的值通過(guò)過(guò)程名傳回到主程序

以n為實(shí)參,n的值傳送給k過(guò)程的值為n的階乘

以m-n為實(shí)參,過(guò)程的值為m-n的階乘

當(dāng)實(shí)參是常量或表達(dá)式時(shí),采取值傳遞,即實(shí)參的值傳給形參,過(guò)程中形參變化的結(jié)果不傳給實(shí)參。若采取DO<過(guò)程名>WITH<參數(shù)>格式調(diào)用過(guò)程,當(dāng)實(shí)參是變量時(shí),采取的是地址傳遞,即過(guò)程中形參變化的結(jié)果將傳給實(shí)參?;蛘哒f(shuō),對(duì)形參的操作實(shí)際上相當(dāng)于在對(duì)實(shí)參所對(duì)應(yīng)的變量進(jìn)行。如果將作為實(shí)參的變量加上括號(hào),則采取值傳遞,過(guò)程中形參變化的結(jié)果不傳給實(shí)參。參數(shù)傳遞若采取過(guò)程名(<參數(shù)表>)格式調(diào)用過(guò)程,在進(jìn)行參數(shù)傳遞時(shí),默認(rèn)是采取值傳遞方式。使用命令SETUDFPARMSTOVALUE|REFERENCE可改變參數(shù)傳遞方式。SETUDFPARMSTOVALUE為按值傳遞,SETUDFPARMSTOREFERENCE為按參數(shù)傳遞。形參變量是局部變量。當(dāng)控制返回到主程序后,形參變量即被清除。參數(shù)傳遞參數(shù)傳遞舉例x=15y=7DOsubWITHx,(y)?x,y?sub(x,y),x,y

RETURNPROCsubPARAMETERSa,ba=a+bb=aRETURNa+bENDP例題x是地址傳遞,y是值傳遞返回主程序后,x的值變?yōu)?2,y的值仍為7

x,y均為值傳遞。返回主程序后,x和y的值不變。顯示結(jié)果58,22,76.3.3變量的作用域多模塊程序中,在一個(gè)模塊中定義的變量在其他模塊中不一定能夠使用。不同的變量有不同的作用域,即每個(gè)變量有其發(fā)揮作用的有效范圍。根據(jù)變量作用域不同,變量分為全局變量、局部變量和私有變量。全局變量也稱為公共變量,是在任何語(yǔ)句和各個(gè)程序模塊中都有效的內(nèi)存變量。

PUBLIC<內(nèi)存變量表>定義全局內(nèi)存變量全局內(nèi)存變量全局變量應(yīng)先定義后賦值,不能在賦值一個(gè)變量后再將其定義為全局變量。全局變量在定義以后,默認(rèn)的初值是邏輯假.F定義全局變量的程序運(yùn)行結(jié)束后,全局變量并未被釋放,仍然可以在其他程序中使用。只有在執(zhí)行CLEARMEMORY、RELEASE等命令或退出VFP后,全局變量才被釋放。在命令窗口所建立的內(nèi)存變量,默認(rèn)為全局變量。全局內(nèi)存變量在程序中所有未經(jīng)說(shuō)明而直接建立的內(nèi)存變量都是私有變量。私有變量可以在創(chuàng)建它的模塊及其調(diào)用的下層模塊中使用。一旦建立它的模塊程序運(yùn)行結(jié)束,這些私有變量將被清除。也就是說(shuō),在下層模塊定義的私有變量,無(wú)法在其上層模塊中使用。私有變量

局部變量只能在建立它的模塊中使用,不能在上層或下層模塊中使用。當(dāng)建立它的模塊程序運(yùn)行結(jié)束,局部變量被釋放。

LOCAL<內(nèi)存變量表>命令定義的變量是局部變量,并賦予其初值為邏輯值假.F.。同樣,局部變量也要先定義后使用。局部變量LOCALaSTORE10TOa,b?'執(zhí)行過(guò)程前a,b的值',a,bDOp1?'執(zhí)行過(guò)程后a,b的值',a,b?’c=’,cPROCp1STORE20toa,b

?'執(zhí)行過(guò)程時(shí)a,b的值',a,bPUBLICcc=30ENDPROC 例題:變量作用域顯示結(jié)果1010

顯示結(jié)果1020

顯示結(jié)果2020

由于一個(gè)大型的程序可能由多人開(kāi)發(fā),在下級(jí)子程序中可能會(huì)無(wú)意地改變上級(jí)程序中的私有變量。為了避免這種情況,可以在過(guò)程中使用PRIVATE

<內(nèi)存變量表>。該命令并不建立變量,而是用來(lái)隱藏在上層程序中可能已經(jīng)存在的內(nèi)存變量,使得這些變量在當(dāng)前模塊程序中暫時(shí)無(wú)效。這樣,這些變量名可以用來(lái)命名在當(dāng)前模塊或其下屬模塊中需要的私有變量,并且不會(huì)改變上層模塊中同名變量的取值。一旦當(dāng)前模塊程序運(yùn)行結(jié)束返回上層模塊,那些被隱藏的內(nèi)存變量就恢復(fù)原有的取值。隱藏變量LOCALaSTORE10TOa,b?'執(zhí)行過(guò)程前a,b的值',a,bDOp1?'執(zhí)行過(guò)程后a,b的值',a,b?’c=’,cPROCp1PRIVATEa,bSTORE20toa,b

?'執(zhí)行過(guò)程時(shí)a,b的值',a,bPUBLICcc=30ENDPROC 例題:變量作用域顯示結(jié)果1010

顯示結(jié)果1010

顯示結(jié)果2020

6.3.4存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程是保存在數(shù)據(jù)庫(kù)文件中的過(guò)程,屬于數(shù)據(jù)庫(kù)對(duì)象的一部分。它可以被數(shù)據(jù)庫(kù)中的對(duì)象調(diào)用,例如,可作為數(shù)據(jù)表字段的默認(rèn)值和有效性規(guī)則。數(shù)據(jù)庫(kù)編輯存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程快捷菜單編輯存儲(chǔ)過(guò)程單擊數(shù)據(jù)庫(kù)設(shè)計(jì)器工具欄的“編輯存儲(chǔ)過(guò)程”按鈕PROCEDUREnewtxm()SELEMAX(條形碼)FROM圖書INTOARRAYltxm

lntxm=ALLTRIM(STR(VAL(RIGHT(ltxm(1),7))+1))RETU'P'+REPLICATE('0',7-LEN(lntxm))+lntxmENDPROC例題:存儲(chǔ)過(guò)程建立一個(gè)存儲(chǔ)過(guò)程,獲得一個(gè)條形碼。該條形碼以字母P開(kāi)頭,后7位數(shù)字為當(dāng)前圖書表中書籍編號(hào)的最大值加一例題:存儲(chǔ)過(guò)程設(shè)置為默認(rèn)值一個(gè)三位正整數(shù)等于它的各位數(shù)字的立方和,該數(shù)稱為水仙花數(shù)。顯示所有的水仙花數(shù)

FORm=100TO999m1=&&求出m的百位數(shù)

m2=&&求出m的十位數(shù)

m3=m-m1*100-m2*10&&求出m的個(gè)位數(shù)IFm=m1*m1*m1+m2*m2*m2+m3*m3*m3

溫馨提示

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