VFP第7章結(jié)構(gòu)化程序設(shè)計_第1頁
VFP第7章結(jié)構(gòu)化程序設(shè)計_第2頁
VFP第7章結(jié)構(gòu)化程序設(shè)計_第3頁
VFP第7章結(jié)構(gòu)化程序設(shè)計_第4頁
VFP第7章結(jié)構(gòu)化程序設(shè)計_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第七章VisualFoxPro程序設(shè)計教學(xué)目標(biāo)掌握程序與命令的區(qū)別

;掌握程序文件的建立與運(yùn)行

;掌握結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)構(gòu)及其特點;調(diào)試應(yīng)用程序的基本方法。

雙語課堂C重點與難點:程序調(diào)試的基本方法與步驟,檢測和排除程序中錯誤(尤其是邏輯錯誤)的方法與技巧

。7.1程序與程序文件程序的邏輯性

VFP程序主要用于進(jìn)行數(shù)據(jù)處理,其過程一般由三部分組成:

①根據(jù)題意(實際問題)給出原始數(shù)據(jù)及處理要求。②按規(guī)定要求對數(shù)據(jù)進(jìn)行處理。③輸出數(shù)據(jù)處理的結(jié)果。

上述過程簡稱為:輸入數(shù)據(jù)→處理數(shù)據(jù)→輸出數(shù)據(jù)

程序調(diào)用(運(yùn)行)后,由系統(tǒng)自動按命令的排列次序逐條執(zhí)行。由此可見命令的排列次序必須嚴(yán)格的遵守解決問題的邏輯順序。一.VisualFoxPro程序的概念

例如:要計算圓面積,就要依次完成下列三步:步驟1:

給出圓半徑r步驟2:

按公式S=лr*r計算圓柱體積步驟3:

輸出圓面積

VFP程序是用命令來敘述這個過程,雖然這里選用計算圓面積并非典型的數(shù)據(jù)處理問題,但是編程思想是相似的,下面寫出求半徑為10cm的圓面積計算程序

r=10

}

輸入

S=3.1415*r*r

}

處理

?″圓面積=″,S

}

輸出

這3條命令的三大步驟決定了這個程序的邏輯性,只有執(zhí)行了r=10后,才能計算S,之后才能輸出S,否則會因變量找不到而終止程序。程序的通用性

程序可反復(fù)執(zhí)行,故編制程序應(yīng)具有通用性,使程序的應(yīng)用范圍更廣。只能計算r=10的圓面積程序就價值不大,若對任意半徑都能計算圓面積,則程序的功能就具有通用性。通常在程序執(zhí)行過程中輸入原始數(shù)據(jù)與處理要求,就能更加體現(xiàn)出程序的通用性。下面是一個完整的VFP程序

*功能說明:求圓形的面積。*文件名:E7_1.PRGCLEARSETTALKOFFINPUT

“請輸入圓的半徑,半徑=”

TO

RS=PI()*R*R?“半徑為”+ALLTRIM(STR(R))+“的圓,面積=”,SSETTALKONRETURN

程序的組成:

前言:注釋語句

設(shè)置區(qū):設(shè)置程序的運(yùn)行環(huán)境,多由SET命令實現(xiàn)

程序體:包括數(shù)據(jù)的輸入輸出、數(shù)據(jù)的處理以及結(jié)果輸出等命令

整理部分:如關(guān)閉各種文件

程序的退出:設(shè)置有關(guān)命令關(guān)閉文件返回到命令窗口狀態(tài)或操作系統(tǒng)狀態(tài)程序書寫規(guī)則①命令分行程序中每條命令都以回車鍵結(jié)束,一行只能寫一條命令。若命令需分行書寫,應(yīng)在一行終了時鍵入續(xù)行符“;”,然后按回車鍵。VFP程序不區(qū)分命令動詞和短語的大小寫。②命令注釋程序中可插入注釋,以提高程序的可讀性。

程序文件的創(chuàng)建與編輯通常采用文本編輯器來進(jìn)行,例如Word、記事本等均能創(chuàng)建程序文件。一般情況是調(diào)用VFP系統(tǒng)內(nèi)置的文本編輯器。通常有兩種方法:命令方式與菜單方式。1.建立程序

命令方式:MODIFYCOMMAND

<程序名>

說明:<程序名>為主文件名,其擴(kuò)展名的默認(rèn)值為.PRG

示例:建立名為E7_2.PRG的應(yīng)用程序,使其能夠在學(xué)生表XS.DBF中,顯示所有平均成績最高和平均成績最低的記錄。命令窗口:MODICOMM

E7_2.PRG編輯窗口:

*FILENAMEL1.PRGSETTALKOFFUSEXSCLEARINDEXON

平均成績

TO

CJIN

&&按平均成績升序索引GOBOTTOMH=平均成績

&&取最高成績LISTFOR

平均成績=H

&&顯示所有平均成績最高的記錄GOTOPL=平均成績

&&取最低成績LISTWHILE

平均成績=L

&&顯示所有平均成績最低的記錄USESETTALKON

菜單方式:

(1)在【文件】菜單中選擇【新建】命令;(2)在“新建”對話框中選擇“程序”;(3)單擊【新建文件】按鈕。系統(tǒng)彈出文本編輯窗口,并在命令窗口自動生成MODIFYCOMMAND命令

從項目管理器創(chuàng)建程序:

(1)打開項目管理器;

(2)選定【代碼】選項卡中的【程序】項;(3)選擇【新建】命令。2.保存程序●

從【文件】菜單中選擇【保存】命令?!?/p>

按Ctrl+W組合鍵。

(使用Ctrl+Q組合鍵,不存盤退出編輯窗口)●

若關(guān)閉一個沒有保存的程序,會彈出相應(yīng)對話框,提示用戶是否保存已作的修改?!?/p>

若保存了一個由項目管理器創(chuàng)建的程序,則該程序被加入到項目中。

若保存一個尚未命名的程序,則會打開“另存為…”對話框,提示用戶為程序指定程序名。程序保存后,可以運(yùn)行或修改它。

選擇【文件】菜單的【打開】命令,系統(tǒng)彈出“打開”對話框,在【文件類型】列表框中選擇【程序】,然后在文件列表中選擇要修改的程序,單擊【確定】按鈕。

若程序包含在一項目中,則在【項目管理器】中選定它并單擊【修改】按鈕。

使用“編輯”菜單中的選項“復(fù)制”、“剪切”和“粘貼”等功能可加速編輯過程。修改完成后保存。3.修改程序首先按以下方式打開想要修改的程序:●

在命令窗口鍵入命令:

MODIFYCOMMAND<程序文件名>4.運(yùn)行程序運(yùn)行程序的方法有以下三種:●

若程序包含在一個項目中,則可在項目管理器中選定它,并選擇【運(yùn)行】命令?!?/p>

在【程序】菜單中選擇【運(yùn)行】菜單項,然后在程序列表中,選擇想要運(yùn)行的程序,并單擊【運(yùn)行】按鈕?!?/p>

在命令窗口中輸入命令:DO

<程序文件名>說明:

如果文件不加擴(kuò)展名,系統(tǒng)會假定它具有.PRG的擴(kuò)展名,如果想運(yùn)行一個具有其他擴(kuò)展名的命令文件時,在輸入命令時必須給出這個命令文件的全名。如:要運(yùn)行上例中編輯的程序,可以在命令窗口中輸入:DO

E7_1

然后按回車鍵執(zhí)行。

若指定的程序文件不在當(dāng)前路徑,應(yīng)在文件名前面指定路徑。程序文件名的擴(kuò)展名PRG可省略。在VFP系統(tǒng)中,一個程序文件通過編譯、連編可產(chǎn)生不同的目標(biāo)代碼文件,這些目標(biāo)代碼文件名相同,但是擴(kuò)展名不同。這些文件擴(kuò)展名的含義如下:PRG:VFP源程序文件。FXP:VFP編譯文件,一旦源程序文件被執(zhí)行,自動產(chǎn)生FXP文件。APP:VFP應(yīng)用程序文件。EXE:Windows可執(zhí)行文件。

當(dāng)DO命令執(zhí)行程序文件時,如果沒有指定文件擴(kuò)展名,系統(tǒng)按下列順序執(zhí)行某個文件:EXEAPPFXPPRG7.2VFP程序設(shè)計中常用的命令1.WAIT命令功能:暫停正在運(yùn)行的程序,直到輸入一個字符為止。格式:

WAIT[<提示信息>][TO<內(nèi)存變量名>][WINDOWS[AT<行,列>]][CLEAR][NOCLEAR][TIMEOUT<數(shù)值表達(dá)式>]說明:(1)若選擇TO<內(nèi)存變量名>子句,則將輸入的單個字符存入指定的內(nèi)存變量。若直接輸入回車鍵,則內(nèi)存變量中存入空字符串。內(nèi)存變量的類型為字符型。(2)若選擇<提示信息>子句,執(zhí)行此命令時,屏幕上將顯示提示信息,否則,屏幕上將顯示“按任意鍵繼續(xù)…”WAIT語句主要用于下列兩種情況●

暫停程序的運(yùn)行,以便觀察程序的運(yùn)行情況,檢查程序運(yùn)行的中間結(jié)果。●

根據(jù)實際情況輸入某個字符,以控制程序的執(zhí)行流程。比如,在某應(yīng)用程序的“Y/N”選擇中,常用此命令暫停程序的執(zhí)行,等待用戶回答“Y”或“N”,由于這時只需輸入單個字符,也不用按回車鍵,操作簡便,響應(yīng)迅速。

功能:暫停程序的執(zhí)行,將從鍵盤上接收的字符串?dāng)?shù)據(jù)存入指定的內(nèi)存變量中。提供此命令是為了向后兼容,在VFP中可以用格式輸入命令實現(xiàn)。2.字符接收命令格式:ACCEPT

[<提示信息>]

TO

<內(nèi)存變量名>參數(shù)描述:提示信息:指定提示信息字符串,其后是數(shù)據(jù)輸入?yún)^(qū)。提示文本的字體與VFP主窗口的字體相同。但輸入的字符數(shù)據(jù)用9磅FoxFont字體顯示。提示信息缺省,屏幕上將有輸出任何信息。內(nèi)存變量名:指定存儲字符數(shù)據(jù)的內(nèi)存變量或數(shù)組元素。如果沒有定義此內(nèi)存變量,ACCEPT將自動創(chuàng)建。如果沒有輸入數(shù)據(jù)就按Enter鍵,內(nèi)存變量或數(shù)組元素則為空字符串。說明:

ACCEPT命令允許直接向內(nèi)存變量或數(shù)組元素輸入字符數(shù)據(jù),輸入時不需要用定界符將字符括起來。執(zhí)行此語句時,先在屏幕上顯示<提示信息>,光標(biāo)緊隨其后,然后暫停程序運(yùn)行,等待用戶從鍵盤上輸入信息。輸入的信息可以是任何可顯示的ASCII碼字符串,并以回車鍵結(jié)束。系統(tǒng)將此字符串信息存入指定的內(nèi)存變量中,然后,繼續(xù)運(yùn)行暫停的程序。例:

試編程完成下述功能:從鍵盤隨機(jī)輸入某個表的文件名,要求打開并顯示此表的內(nèi)容。

在命令窗口輸入下列命令:MODIFYCOMMAND

E7_3屏幕顯示編輯窗口。在編輯窗口輸入如下程序代碼:CLEARSETTALKOFFACCEPT

"請輸入表文件名"

TO

FileNameUSE

&FileNameLISTUSESETTALKONRETURN按Ctrl+W存盤,返回命令窗口。使用宏代換函數(shù),是由于FileName本身不是文件名,而其內(nèi)容才是文件名。宏代換函數(shù)3.通用數(shù)據(jù)接收命令A(yù)CCEPT語句只能給字符型內(nèi)存變量提供數(shù)據(jù)。如果用戶想給其他類型的內(nèi)存變量提供數(shù)據(jù),可以使用下列命令:

格式:INPUT[<提示信息>]

TO

<內(nèi)存變量名>功能:接收從鍵盤上輸入的表達(dá)式,并將計算結(jié)果存入指定的內(nèi)存變量或數(shù)組元素中。包含此命令也是為了提供向后的兼容性。在VFP中,該命令也可以用格式輸入命令實現(xiàn)。參數(shù)描述:提示信息:提示用戶輸入數(shù)據(jù)。內(nèi)存變量名:指定一個內(nèi)存變量或數(shù)組元素,存儲從鍵盤輸入的數(shù)據(jù)。如果指定的內(nèi)存變量或數(shù)組元素不存在,VFP將自動創(chuàng)建該內(nèi)存變量或數(shù)組。說明:INPUT語句與ACCEPT語句的執(zhí)行過程相同,功能相似。<內(nèi)存變量名>的數(shù)據(jù)類型取決于輸入數(shù)據(jù)的類型。可以為數(shù)字型、字符型、日期型和邏輯型。INPUT語句與ACCEPT語句的區(qū)別:ACCEPT命令只能接收字符串,而INPUT語句可以接收任意類型的VFP表達(dá)式;如果輸入的是字符串,ACCEPT語句不要使用字符型定界符,而INPUT語句必須用定界符括起來。示例:功能:顯示一個用戶定義的信息對話框,按下一次按鈕即返回一個數(shù)值。說明:<信息文字>:指定在對話框中顯示的信息文本。<對話框類型>:設(shè)定對話框中的按鈕、圖標(biāo)和默認(rèn)按鈕,它們的意義見表7.1。4.MESSAGEBO()函數(shù)格式:

MESSAGEBOX(<信息文字>[,<對話框類型>[,<標(biāo)題文字>]])<對話框類型>的值為三者之和,如“1+48+256”中:“1”表示在對話框中設(shè)置“確定”和“取消”兩個按鈕;“48”表示對話框中圖標(biāo)為“警告”(驚嘆號);“256”則表示對話框中第2個按鈕為默認(rèn)按鈕。<標(biāo)題文字>:指定對話框標(biāo)題欄的顯示文本。缺省該參數(shù)則在標(biāo)題欄顯示“MicrosoftVisualFoxPro”。函數(shù)返回值是一個數(shù)值,意義見表7.2。用戶將根據(jù)操作時按下的按鈕來獲得相應(yīng)的返回值,編程時根據(jù)返回值來設(shè)置動作。

5.中止程序運(yùn)行在程序運(yùn)行過程中,按Esc鍵可以中止程序的運(yùn)行,系統(tǒng)會顯示警告對話框讓用戶選擇:取消:

中止程序運(yùn)行,這是缺省選擇;掛起:

暫停程序運(yùn)行,返回命令窗口。當(dāng)選擇【程序】菜單下的【繼續(xù)執(zhí)行】選項或在命令窗口中輸入“Resume”命令,系統(tǒng)則從中止的地方繼續(xù)程序的執(zhí)行;忽略:

忽略所給的Esc,繼續(xù)程序的執(zhí)行。6.注釋命令

格式一:NOTE

|

*

<注釋字符串>

格式二:&&

<注釋字符串>說明:上述命令不作任何操作,只是注釋標(biāo)記,用于說明程序或命令的功能等。注釋內(nèi)容不需要用定界符定界,執(zhí)行時也不顯示。注釋信息如果在一行內(nèi)沒有寫完,換行時也必須再寫注釋命令。NOTE或*是用于整行注釋的,因此,它必須寫在每一個注釋行的開頭;而&&命令是用于注釋一行的部分內(nèi)容的,因此,它可以寫在行中(命令的尾部、注釋信息的頭部),這是程序中唯一可以在一個邏輯行寫兩個語句的命令。3.清屏命令

格式一:CLEAR

格式二:@

<行1,列1>

CLEARTO

<行2,列2>

功能:清除屏幕上所有顯示內(nèi)容,將光標(biāo)置于屏幕左上角。

功能:清除屏幕上相應(yīng)區(qū)域的顯示內(nèi)容。7.3程序的基本結(jié)構(gòu)一.程序的結(jié)構(gòu)順序結(jié)構(gòu):命令按其在程序中書寫的先后順序執(zhí)行。分支結(jié)構(gòu):根據(jù)給定的邏輯條件在一條或多條程序路徑中選擇一個執(zhí)行。循環(huán)結(jié)構(gòu):在滿足條件的情況下,重復(fù)執(zhí)行某一命令序列,并在條件不成立的時候中止循環(huán)。二.分支結(jié)構(gòu)程序設(shè)計格式:IF<條件> <語句序列1>

[ELSE <語句序列2>]ENDIF……語句序列2語句序列1ENDIF后的語句條件為真?YN1.IF語句參數(shù)描述:條件:指定要計算的邏輯表達(dá)式。如果<條件>的值為“真”,則執(zhí)行IF語句之后的<語句序列1>;如果<條件>的值為“假”,而且包含ELSE語句和<語句序列2>,則執(zhí)行<語句序列2>;如果<條件>的值為“假”,而且不包含ELSE語句和<語句序列2>,則程序忽略IF語句和ENDIF語句之間的所有語句,程序從ENDIF語句后的第一條命令開始繼續(xù)往下執(zhí)行其他程序。注意:(1)IF

ENDIF必須成對出現(xiàn)。(2)<條件>可以是各種表達(dá)式的組合,但其值必須是邏輯值“真”或“假”值。(3)語句序列可以是一組命令,也可以是其他程序的控制命令,命令可以嵌套寫入(如IF的嵌套結(jié)構(gòu))。P160:例7.112.分支選擇函數(shù)IIF()功能:當(dāng)條件為真時,取表達(dá)式1的值作為函數(shù)返回值,否則取表達(dá)式2的值作為函數(shù)返回。例如:REPLACE

基本工資

WITH

;

基本工資+IIF(基本工資<=500,50,20)格式:

IIF(<條件>,<表達(dá)式1>,<表達(dá)式2>)

IF條件1……

IF條件2 …… IF條件3 …… ENDIF IF條件4 …… ENDIF

ELSE ……

ENDIF…… ELSE

IF條件5 ……ENDIFENDIF3.IF語句的嵌套結(jié)構(gòu)P161:例7.14格式:DOCASE

CASE

<條件1>

<語句序列1>……CASE<條件n>

<語句序列n>[OTHERWISE

<語句序列n+1>]ENDCASE

條件1為真?……語句序列1語句序列n+1ENDCASE后的語句語句序列n條件n為真?yyn多分支語句流程圖n4.CASE多分支語句參數(shù)描述:CASE

<條件表達(dá)式1><語句序列1>…:VFP在執(zhí)行這條多分支選擇命令時,按命令行中寫出的條件表達(dá)式的順序逐條檢查<條件表達(dá)式>,當(dāng)遇到第一個結(jié)果為“真”的<條件表達(dá)式>時,就執(zhí)行它后面的語句序列。語句序列中的命令逐條被執(zhí)行,直到遇到下一個CASE或OTHERWISE或ENDCASE,然后再從ENDCASE語句后的第一條命令開始繼續(xù)執(zhí)行其他命令。如果一個CASE<條件表達(dá)式>為“假”,就忽略它后面的語句序列。P162:例7.15二.循環(huán)結(jié)構(gòu)程序設(shè)計1.基于條件的循環(huán):DOWHILE

命令格式:DOWHILE

<條件>

循環(huán)體語句

ENDDO條件為真?ENDDO后面的語句……循環(huán)體語句YN參數(shù)描述:條件表達(dá)式:指定一個邏輯表達(dá)式,它的值決定是否執(zhí)行DO

WHILE和ENDDO之間的命令集合。如果<條件表達(dá)式>的值為“真”,就執(zhí)行命令集。語句序列:指定當(dāng)<條件表達(dá)式>計算為“真”時要執(zhí)行的VFP命令集。ENDDO:表明DOWHILE語句的結(jié)束。P164:例7.182.循環(huán)結(jié)構(gòu)中的兩條專用命令DOWHILE

<條件> <語句序列1>

[LOOP

<語句序列2>]ENDDO……條件為真?…………LOOP

YENDDO后面的語句

Y

N

N

格式一:

LOOPDOWHILE

<條件>

<語句序列1>

[EXIT

<語句序列3>]ENDDO條件為真?…………EXIT

YENDDO后面的語句

Y

N

N

格式二:

EXIT功能:LOOP:直接將程序控制返回到DOWHILE語句,并重新計算條件值。LOOP可以放在DOWHILE和ENDDO之間的任何位置。EXIT:將程序控制從DOWHILE和ENDDO循環(huán)的內(nèi)部轉(zhuǎn)到ENDDO后的第一條命令。EXIT可以放在DOWHILE和ENDDO之間的任何位置。例:

求連續(xù)N個不是7的倍數(shù)的自然數(shù)之和,當(dāng)和是101的倍數(shù)時顯示最后的自然數(shù)和它們的和。

STORE0TOAA,BB

&&定義兩個變量,用以保存累加值和累加數(shù)DOWHILE.T.

BB=BB+1

IFMOD(BB,7)=0

&&判斷BB是否為7的倍數(shù)

LOOP

&&如果BB是7的倍數(shù)則返回去將BB再加1

ENDIF

AA=AA+BB

&&將BB不是7的倍數(shù)的連續(xù)自然數(shù)累加求和

IFMOD(AA,101)=0

&&判斷AA是否是101的倍數(shù)

EXIT

&&如果AA是101的倍數(shù),則結(jié)束程序的循環(huán)

ENDIFENDDO?BB,AA

&&屏幕顯示結(jié)果為207和18483

P167:例7.21FOR

<內(nèi)存變量>=<初值>

TO<終值>

[STEP

<步長>]

<語句序列>

[LOOP][EXIT]ENDFOR|NEXT……變量←變量+步長變量超過終值?ENDFOR后面的語句

N

Y內(nèi)存變量←初值語句序列3.基于計數(shù)的循環(huán):FOR

循環(huán)參數(shù)描述:內(nèi)存變量:指定作為計數(shù)器的內(nèi)存變量或數(shù)組元素。在執(zhí)行FOR…ENDFOR語句之前,此內(nèi)存變量或數(shù)組元素不一定存在。初值TO終值:初值是計數(shù)器的初始值,而終值是計數(shù)器的終止值。STEP<步長>:是計數(shù)器遞增或遞減的步長。如果步長是負(fù)值,則計數(shù)器遞減;如果省略STEP子句,計數(shù)器每次遞增1。P169:例7.22……EOF()為真?語句序列條件為真?ENDSCAN后面的語句

Y

Y

N4.基于表的循環(huán):SCAN

循環(huán)在指定范圍內(nèi)?SKIP

Y

N

NSCAN

[<范圍>][FOR<條件1>]

[WHILE<條件2>]

<語句序列>

[LOOP][EXIT]ENDSCAN參數(shù)描述:范圍

溫馨提示

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

評論

0/150

提交評論