第八章程序設(shè)計(jì)基礎(chǔ)_第1頁(yè)
第八章程序設(shè)計(jì)基礎(chǔ)_第2頁(yè)
第八章程序設(shè)計(jì)基礎(chǔ)_第3頁(yè)
第八章程序設(shè)計(jì)基礎(chǔ)_第4頁(yè)
第八章程序設(shè)計(jì)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩59頁(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)介

會(huì)計(jì)學(xué)1第八章程序設(shè)計(jì)基礎(chǔ)(1)命令方式【命令】MODIFYCOMMAND<程序文件名>【功能】打開(kāi)一個(gè)編輯器窗口,用于建立或修改程序文件?!纠?-1】用命令方式建立能顯示教師表中職稱為講師的教師記錄的程序文件P1.PRG。操作步驟如下:①在命令窗口中輸入下列命令,進(jìn)入“程序文件”編輯窗口。

MODIFYCOMMANDP1.PRG②在“程序文件”編輯窗口,輸入下列命令,如圖8-1所示。③輸入完成后,在“文件”菜單中選擇“保存”命令,在“對(duì)話框”的“保存文檔為”文本框中輸入P1.PRG,保存文件。圖8-1

建立程序文件P1.PRG窗口

第1頁(yè)/共64頁(yè)SettalkoffClearUse學(xué)生Appendblank@6,30say“學(xué)號(hào)”Get學(xué)號(hào)@6,50say“姓名”Get姓名@8,30say“性別”Get性別@8,40say“出生年月”Get出生年月@10,30say“入??偡帧盙et入校總分@10,50say“三好生”Get三好生Read第2頁(yè)/共64頁(yè)ClearBrowseSetTalkonreturn第3頁(yè)/共64頁(yè)

(2)菜單方式用菜單方式的操作步驟:①如果是新建文件,在“文件”菜單中選擇“新建”命令選項(xiàng),在屏幕顯示的“新建”對(duì)話框中選擇“程序”項(xiàng)進(jìn)入程序編輯窗口。如果是修改已有的程序文件,則選擇“文件”菜單中選擇“打開(kāi)”命令選項(xiàng),在屏幕顯示的“打開(kāi)”對(duì)話框中輸入或選擇要修改的文件名,系統(tǒng)自動(dòng)將按輸入或選擇的文件名將程序文件調(diào)入內(nèi)存并顯示在文本編輯窗口以供修改。

②在程序編輯窗口逐條輸入或修改程序語(yǔ)句。③輸入或修改完成后,在“文件”菜單中選擇“保存”或“另存為”命令,保存文件【例8-2】用菜單方式修改程序文件P1.PRG,使之顯示教師表中職稱為教授或副教授的教師記錄,并另存文件為P2.PRG。操作步驟如下:①選擇“文件”菜單中的“打開(kāi)”命令選項(xiàng),在屏幕顯示的“打開(kāi)”對(duì)話框中輸入程序文件名:P1.PRG。進(jìn)入“程序文件”編輯窗口。②在“程序文件”編輯窗口,對(duì)第二條命令進(jìn)行修改,如圖8-2所示。③輸入完成后,在“文件”菜單中選擇“另存為”命令,在“對(duì)話框”的“保存文檔為”文本框中輸入P2.PRG,保存文件。

圖8-2

修改程序文件P1.PRG窗口

第4頁(yè)/共64頁(yè)2.執(zhí)行程序文件執(zhí)行程序文件就是依次執(zhí)行程序文件中的每條命令或語(yǔ)句。程序文件的執(zhí)行有命令和菜單兩種方式。(1)命令方式【命令】DO<程序文件名>【功能】在命令窗口運(yùn)行以.PRG為擴(kuò)展名的程序文件。(2)菜單方式在VisualFoxPro系統(tǒng)環(huán)境下,選擇“程序”菜單中的“運(yùn)行”命令選項(xiàng),在顯示的對(duì)話框中確定或輸入要執(zhí)行的程序文件名?!纠?-3】用菜單方式運(yùn)行程序文件P2.PRG。操作步驟如下:選擇“程序”菜單中的“運(yùn)行”命令選項(xiàng),在顯示的對(duì)話框中確定或輸入要執(zhí)行的程序文件名:P2.PRG,然后單擊對(duì)話框中的運(yùn)行按鈕,得到如圖8-3所示的運(yùn)行結(jié)果。

圖8-3

運(yùn)行程序文件P2.PRG窗口

第5頁(yè)/共64頁(yè)8.1.2程序中常用的命令在程序文件中常常要用到一些交互式輸入、輸出命令,注釋命令,程序結(jié)束專用命令及系統(tǒng)狀態(tài)的設(shè)置命令。1.交互式輸入命令輸入命令用于在程序的執(zhí)行過(guò)程中給程序賦值。在程序文件中,交互式輸入命令有以下幾種形式:(1)賦值命令【命令】STORE<表達(dá)式>TO<內(nèi)存變量名表>或<內(nèi)存變量>=<表達(dá)式>【功能】給內(nèi)存變量賦值?!菊f(shuō)明】STORE命令可以同時(shí)給多個(gè)內(nèi)存變量賦值,而<內(nèi)存變量>=<表達(dá)式>命令只能給一個(gè)變量賦值。(2)字符串輸入命令【命令】ACCEPT[<提示信息>]TO<內(nèi)存變量>【功能】暫停程序的運(yùn)行,等待用戶從鍵盤上輸入一串字符,存入指定的內(nèi)存變量中?!菊f(shuō)明】<提示信息>用于提示用戶進(jìn)行操作的信息。從鍵盤接受的字符串,可以加定界符也可以不加定界符,系統(tǒng)都將其作為字符型數(shù)據(jù)輸入到內(nèi)存變量中。

第6頁(yè)/共64頁(yè)(3)單字符輸入命令【命令】WAIT[<提示信息>][TO<內(nèi)存變量>]【功能】暫停程序的運(yùn)行,等待用戶從鍵盤上輸入單個(gè)字符后恢復(fù)程序的運(yùn)行?!菊f(shuō)明】<提示信息>用于提示用戶進(jìn)行操作的信息,TO<內(nèi)存變量>是可選項(xiàng),當(dāng)選用時(shí),鍵入的單個(gè)字符均作為字符型數(shù)據(jù)賦給<內(nèi)存變量>。如果只有WAIT命令,沒(méi)有選項(xiàng),則系統(tǒng)默認(rèn)的提示信息是:PRESSANYKEYTOCONTINUE…

(4)表達(dá)式輸入命令【命令】INPUT[<提示信息>]TO<內(nèi)存變量>【功能】暫停程序的運(yùn)行,等待用戶輸入表達(dá)式并將其值賦給指定的內(nèi)存變量?!菊f(shuō)明】<提示信息>用于提示用戶進(jìn)行操作的信息,命令中<內(nèi)存變量>的類型決定于輸入數(shù)據(jù)的類型,但不能為M型。如果鍵入的是表達(dá)式,本命令先計(jì)算出表達(dá)式的值,再將結(jié)果賦給<內(nèi)存變量>;如果鍵入的是字符常量、邏輯常量和日期常量時(shí)應(yīng)帶定界符,既字符常量加引號(hào),邏輯常量左右加圓點(diǎn),日期常量要用CTOD()函數(shù)進(jìn)行轉(zhuǎn)換。第7頁(yè)/共64頁(yè)(5)定位輸入命令【命令】@<行,列>SAY<提示信息>GET<變量>READ【功能】在屏幕指定的行列位置上輸入數(shù)據(jù)?!菊f(shuō)明】命令中的各選項(xiàng)說(shuō)明如下:l

<行,列>是指屏幕窗口的位置。l

SAY<提示信息>給出提示信息。l

GET<變量>取得變量的值。其中<變量>可以是字段變量或內(nèi)存變量,如果是字段變量,應(yīng)先打開(kāi)表文件,如果是內(nèi)存變量,應(yīng)先賦值。GET子句必須使用命令READ激活。在帶有多個(gè)GET子句的命令后,必須遇到READ命令才能編輯GET中的變量。當(dāng)光標(biāo)移出這些GET變量組成的編輯區(qū)時(shí),READ命令才執(zhí)行結(jié)束

第8頁(yè)/共64頁(yè)2.輸出命令輸出命令用于顯示程序中的輸出內(nèi)容和結(jié)果。下面介紹一些常用輸出命令。(1)非格式輸出命令

【命令】?<內(nèi)存變量名表>或??<內(nèi)存變量名表>【功能】顯示內(nèi)存變量、常量或表達(dá)式的值。

【說(shuō)明】?是在光標(biāo)所在行的下一行開(kāi)始顯示,而??則是在當(dāng)前光標(biāo)位置開(kāi)始顯示。(2)格式輸出命令

【命令】@<行,列>SAY<表達(dá)式>【功能】按指定的坐標(biāo)位置在屏幕上輸出表達(dá)式的值。

【說(shuō)明】輸出<表達(dá)式>的位置由<行,列>指定,<表達(dá)式>的內(nèi)容可以是數(shù)值、字符、內(nèi)存變量和字段變量。(3)文本輸出命令

【命令】TEXT <文本信息> ENDTEXT【功能】將TEXT和ENDTEXT之間的文本信息照原樣輸出。

【說(shuō)明】TEXT與ENDTEXT在程序中必須配對(duì)。第9頁(yè)/共64頁(yè)3.其他程序運(yùn)行命令在程序中,有一些專門用于程序開(kāi)始和結(jié)束時(shí)的命令以及對(duì)程序進(jìn)行說(shuō)明的命令,常用的有以下幾個(gè):(1)清屏命令【命令】CLEAR【功能】清除屏幕上的內(nèi)容。(2)返回命令【命令】RETURN【功能】結(jié)束當(dāng)前程序的運(yùn)行?!菊f(shuō)明】如果當(dāng)前程序無(wú)上級(jí)程序,該命令用于結(jié)束程序的運(yùn)行,返回到命令窗口。如果當(dāng)前程序是一個(gè)子程序,該命令用于結(jié)束程序的運(yùn)行,返回到調(diào)用該程序的上級(jí)程序中。(3)終止程序執(zhí)行命令【命令】CANCEL【功能】終止程序執(zhí)行并關(guān)閉所有打開(kāi)的文件,返回到系統(tǒng)的命令窗口。第10頁(yè)/共64頁(yè)(4)退出系統(tǒng)命令【命令】QUIT【功能】終止程序運(yùn)行,關(guān)閉所有打開(kāi)的文件,退出VisualFoxPro系統(tǒng),返回到Windows環(huán)境。(5)注釋命令【命令】NOTE<注釋內(nèi)容>或*<注釋內(nèi)容>或&&<注釋內(nèi)容>【功能】用于在程序中加入說(shuō)明,以注明程序的名稱、功能或其他備忘標(biāo)記。【說(shuō)明】注釋命令為非執(zhí)行語(yǔ)句。其中前兩個(gè)命令格式作為獨(dú)立的一行語(yǔ)句,第三條命令放在某一個(gè)語(yǔ)句的右邊。

第11頁(yè)/共64頁(yè)4.環(huán)境設(shè)置命令為了保證程序的正常運(yùn)行,需要為其設(shè)置一定的運(yùn)行環(huán)境。VisualFoxPro系統(tǒng)提供的SET命令組就是用來(lái)設(shè)置程序運(yùn)行環(huán)境的。這些命令相當(dāng)于一個(gè)狀態(tài)轉(zhuǎn)換開(kāi)關(guān),當(dāng)命令置為“ON”時(shí),開(kāi)啟指定的某種狀態(tài);而置為“OFF”時(shí),則關(guān)閉該種狀態(tài)。常用的系統(tǒng)環(huán)境設(shè)置命令有以下幾個(gè):(1)關(guān)閉對(duì)話命令【命令】SETTALKON|OFF【功能】控制非輸出性的執(zhí)行結(jié)果是否在屏幕上顯示或打印出來(lái)?!菊f(shuō)明】系統(tǒng)默認(rèn)值為ON。(2)設(shè)置跟蹤命令【命令】SETECHOON|OFF【功能】控制程序文件執(zhí)行過(guò)程中的每條命令是否顯示或打印出來(lái)?!菊f(shuō)明】系統(tǒng)默認(rèn)值為OFF。第12頁(yè)/共64頁(yè)(3)設(shè)置打印命令【命令】SETPRINTERON|OFF【功能】控制程序執(zhí)行的結(jié)果到打印機(jī)或顯示在屏幕上?!菊f(shuō)明】在命令格式中選擇ON表示將輸出結(jié)果送到打印機(jī),選擇OFF則將輸出結(jié)果顯示在屏幕上,系統(tǒng)默認(rèn)值為OFF。(4)設(shè)置定向輸出命令【命令】SETDEVICETOSCREEN|TOPRINTER|TOFILE<文件名>【功能】控制輸出結(jié)果到屏幕、打印機(jī)或指定的文件?!菊f(shuō)明】在命令格式中選擇SCREEN表示將輸出結(jié)果顯示在屏幕上,選擇PRINTER表示將輸出結(jié)果送到打印機(jī),選擇FILE<文件名>則將輸出結(jié)果送到指定文件。(5)設(shè)置精確比較命令【命令】SETEXACTTOON|OFF【功能】在進(jìn)行字符比較時(shí)是否需要精確比較?!菊f(shuō)明】在命令格式中選擇ON表示需要精確比較,選擇OFF表示不需要精確比較,系統(tǒng)默認(rèn)值為OFF。第13頁(yè)/共64頁(yè)(6)設(shè)置保護(hù)狀態(tài)命令【命令】SETSAFETYON|OFF【功能】系統(tǒng)在用戶提出對(duì)文件重寫或刪除的要求時(shí)給出警告提示?!菊f(shuō)明】需要提示選擇ON,否則選擇OFF。系統(tǒng)默認(rèn)為ON。(7)設(shè)置刪除記錄標(biāo)志命令【命令】SETDELETEDON|OFF【功能】屏蔽或處理有刪除標(biāo)記的記錄?!菊f(shuō)明】在命令格式中選擇ON時(shí),命令將不對(duì)有刪除標(biāo)記的記錄進(jìn)行操作,但索引命令除外。系統(tǒng)默認(rèn)值為OFF。

(8)設(shè)置屏幕狀態(tài)命令【命令】SETCONSOLEON|OFF【功能】發(fā)送或暫停輸出內(nèi)容到屏幕上?!菊f(shuō)明】系統(tǒng)默認(rèn)值為ON。(9)設(shè)置缺省目錄命令【命令】SETDEFAULTTO<默認(rèn)目錄>【功能】用于設(shè)置系統(tǒng)默認(rèn)的磁盤文件目錄。

第14頁(yè)/共64頁(yè)5.程序中常用的命令綜合應(yīng)用【例8-4】編寫程序P3.PRG,其程序功能是在學(xué)生表中追加一條記錄。編寫程序如圖8-4所示,運(yùn)行程序P3.PRG,在如下輸入界面填寫數(shù)據(jù),顯示結(jié)果如圖8-5所示。

圖8-4

程序P3.PRG的編寫窗口

圖8-5

程序P3.PRG的輸出結(jié)果

第15頁(yè)/共64頁(yè)【例8-5】編寫程序P4.PRG,其程序功能是在學(xué)生表中查詢某一天出生的學(xué)生記錄。編寫程序如圖8-6所示,運(yùn)行程序P4.PRG,在輸入了要查詢學(xué)生的出生日期之后,系統(tǒng)輸出查詢的結(jié)果。圖8-6

程序P4.PRG編寫窗口

第16頁(yè)/共64頁(yè)*用日期查詢某一天出生的學(xué)生的記錄

settalkoffcloseallclearusexuesheng2?"出生日期的正確格式:'mm/dd/yy'"input"請(qǐng)輸入出生日期"tosd&&sd用于存放輸入學(xué)生的出生日期

locateallfor出生年月=CTOD(sd)?"以下為查詢的顯示結(jié)果"@5,10say學(xué)號(hào)

@5,30say姓名

@7,10say性別

@7,20say出生年月

wait@10,10say入??偡謘ettalkonreturn第17頁(yè)/共64頁(yè)問(wèn)題1:能不能輸入05/12/84

問(wèn)題2:locateallfor出生年月=CTOD(sd)

能不能用SQL語(yǔ)句來(lái)代替?第18頁(yè)/共64頁(yè)【例8-6】編寫程序P5.PRG,其程序功能是在學(xué)生表中刪除學(xué)生記錄。編寫程序如圖8-7所示,運(yùn)行程序P5.PRG,在輸入了要查詢學(xué)生的姓名之后,系統(tǒng)顯示要?jiǎng)h除學(xué)生的記錄,并確認(rèn)刪除。程序運(yùn)行結(jié)果的屏幕顯示如下:圖8-7

程序P5.PRG編寫窗口

第19頁(yè)/共64頁(yè)settalkoffcleartext##刪除學(xué)生記錄程序##endtextusexuesheng2accept"請(qǐng)輸入學(xué)生姓名"tosmlocateallfor姓名=smdisplaywait"輸入Y刪除記錄"delete??"",sn,"學(xué)生記錄已刪除!"settalkonreturn第20頁(yè)/共64頁(yè)8.1.3程序的基本結(jié)構(gòu)在VisualFoxPro中,結(jié)構(gòu)化程序設(shè)計(jì)主要依靠系統(tǒng)提供的結(jié)構(gòu)化語(yǔ)句構(gòu)成,程序的基本結(jié)構(gòu)有三種:順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。每一種基本結(jié)構(gòu)可以包含一個(gè)或多個(gè)語(yǔ)句。1.順序結(jié)構(gòu)順序結(jié)構(gòu)是指程序按照語(yǔ)句排列的先后順序逐條的執(zhí)行。它是程序中最簡(jiǎn)單、最常用的基本結(jié)構(gòu)。VisualFoxPro中,大多數(shù)命令都可以作為順序結(jié)構(gòu)中的語(yǔ)句來(lái)實(shí)現(xiàn)編程。在例8-4、例8-5和例8-6的程序中都是采用順序結(jié)構(gòu)。2.分支結(jié)構(gòu)分支結(jié)構(gòu)是在執(zhí)行程序時(shí),按照一定的條件選擇不同的語(yǔ)句,用來(lái)解決選擇、轉(zhuǎn)移的問(wèn)題。分支結(jié)構(gòu)的基本形式有三種。(1)單向分支單向分支,即根據(jù)用戶設(shè)置的條件表達(dá)式的值,決定某一操作是否執(zhí)行?!菊Z(yǔ)句】IF<條件表達(dá)式><命令行序列>ENDIF【功能】當(dāng)條件表達(dá)式的值為真時(shí),執(zhí)行<命令行序列>,否則執(zhí)行ENDIF后面的命令?!菊f(shuō)明】<條件表達(dá)式>是關(guān)系表達(dá)式或邏輯表達(dá)式,IF和ENDIF必須成對(duì)使用。<命令行序列>可以由一條語(yǔ)句或多條語(yǔ)句構(gòu)成。第21頁(yè)/共64頁(yè)第22頁(yè)/共64頁(yè)【例8-7】編寫程序P6.PRG,其程序功能是在教師表中,將陳靜教師的職稱由講師改成副教授。編寫程序如圖8-8所示,運(yùn)行程序P6.PRG,先顯示原數(shù)據(jù)表的內(nèi)容,見(jiàn)圖8-9,再顯示修改后數(shù)據(jù)表的內(nèi)容,見(jiàn)圖8-10,對(duì)比兩個(gè)數(shù)據(jù)表的內(nèi)容,可看見(jiàn),陳靜教師的職稱已由講師改成了副教授。圖8-8

程序P6.PRG編寫窗口圖8-10

修改后教師表的內(nèi)容圖8-9

修改前教師表的內(nèi)容第23頁(yè)/共64頁(yè)SettalkoffClearUseteachersBrowselastLocateallfor姓名="陳靜"If

職稱="講師"Replace職稱with"副教授"EndifBrowselastSettalkonreturn第24頁(yè)/共64頁(yè)(2)雙向分支雙向分支,即根據(jù)用戶設(shè)置的條件表達(dá)式的值,選擇兩個(gè)操作中的一個(gè)來(lái)執(zhí)行?!菊Z(yǔ)句】IF<條件表達(dá)式><命令行序列1>ELSE<命令行序列2>ENDIF【功能】執(zhí)行該命令時(shí),首先判斷<條件表達(dá)式>的值,若為真,則執(zhí)行<命令行系列1>,然后執(zhí)行ENDIF后的命令;若為假,則執(zhí)行<命令行序列2>,然后執(zhí)行ENDIF后的命令?!菊f(shuō)明】IF…ELSE…ENDIF語(yǔ)句必須成對(duì)使用。<命令行序列1>和<命令行序列2>中可以嵌套IF命令。第25頁(yè)/共64頁(yè)【例8-8】編寫程序P7.PRG,其程序功能是在教師表中,查詢陳靜教師的記錄,如果找到記錄,就顯示該記錄,否則,顯示“查無(wú)此人”。編寫程序如圖8-11所示。運(yùn)行程序P7.PRG,由于數(shù)據(jù)表中有陳靜教師的記錄,所以在程序運(yùn)行后顯示了陳靜教師的記錄內(nèi)容,如圖8-12所示。圖8-11

程序P7.PRG編寫窗口

圖8-12

程序P7.PRG執(zhí)行的結(jié)果

第26頁(yè)/共64頁(yè)settalkoffclearuseteacherslocateallfor姓名="陳靜"if.not.eof()Browsefor姓名="陳靜"else@2,30say"查無(wú)此人"endifsettalkonreturn第27頁(yè)/共64頁(yè)

(3)多向分支多向分支,即根據(jù)多個(gè)條件表達(dá)式的值,選擇多個(gè)操作中的一個(gè)來(lái)執(zhí)行?!菊Z(yǔ)句】DOCASECASE<條件表達(dá)式1><命令行序列1>CASE<條件表達(dá)式2><命令行序列2>......CASE<條件表達(dá)式N><命令行序列N>OTHERWISE<命令行序列N+1>ENDCASE【功能】系統(tǒng)從多個(gè)條件中依次測(cè)試<條件表達(dá)式>的值,若為真,即執(zhí)行相應(yīng)<條件表達(dá)式>后的<命令行序列>;若所有的<條件表達(dá)式>的值均為假,則執(zhí)行OTHERWISE后面的<命令行序列>?!菊f(shuō)明】DOCASE和第一個(gè)CASE子句之間不能插入任何命令。DOCASE和ENDCASE必須配對(duì)使用。

第28頁(yè)/共64頁(yè)【例8-9】編寫程序P8.PRG,其程序功能是根據(jù)用戶的選擇,顯示不同數(shù)據(jù)表的內(nèi)容。編寫程序如圖8-13所示,運(yùn)行程序P8.PRG,屏幕顯示如下提示,當(dāng)輸入2,將顯示教師表的內(nèi)容。

圖8-13

程序P8.PRG編寫窗口

第29頁(yè)/共64頁(yè)SettalkoffClearText

數(shù)據(jù)表內(nèi)容顯示

1.學(xué)生表2.教師表3.課程表EndtextWait“請(qǐng)輸入你的選擇(1~3)toanDocasecasean=“1”browselastcasean=“2”useteachersbrowselast第30頁(yè)/共64頁(yè)Otherwise?”選擇錯(cuò)誤!“

endcase第31頁(yè)/共64頁(yè)3.循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是重復(fù)執(zhí)行一段命令序列若干次或重復(fù)執(zhí)行一段命令序列直到滿足某種條件為止。循環(huán)結(jié)構(gòu)可以簡(jiǎn)化程序,提高程序效率。常用的循環(huán)語(yǔ)句有以下幾種形式。(1)條件循環(huán)條件循環(huán)是根據(jù)條件表達(dá)式的值,決定循環(huán)體內(nèi)語(yǔ)句的執(zhí)行次數(shù),也稱為當(dāng)型循環(huán)。【語(yǔ)句】DOWHILE<條件表達(dá)式><命令行序列1>[LOOP]<命令行序列2>[EXIT]<命令行序列3>ENDDO【功能】語(yǔ)句執(zhí)行時(shí),先判斷<條件表達(dá)式>的值,若為真,則執(zhí)行循環(huán)體內(nèi)的命令,即DO與ENDDO之間的命令;若為假,則執(zhí)行ENDDO后面的命令。第32頁(yè)/共64頁(yè)【說(shuō)明】對(duì)循環(huán)語(yǔ)句進(jìn)行以下說(shuō)明:l

DOWHILE和ENDDO子句要配對(duì)使用。l

DOWHILE<條件表達(dá)式>是循環(huán)語(yǔ)句的入口;ENDDO是循環(huán)語(yǔ)句的出;中間<命令行序列>是重復(fù)執(zhí)行的循環(huán)體。l

LOOP和EXIT只能在循環(huán)語(yǔ)句中使用,其中LOOP是轉(zhuǎn)到循環(huán)的入口語(yǔ)句;EXIT是強(qiáng)行退出循環(huán)的語(yǔ)句。

l

循環(huán)結(jié)構(gòu)允許嵌套,這種嵌套不僅限于循環(huán)結(jié)構(gòu)自身的嵌套,而且還可以是和選擇結(jié)構(gòu)的相互嵌套。

第33頁(yè)/共64頁(yè)【例8-10】編寫程序P9.PRG,其程序功能是統(tǒng)計(jì)學(xué)生表中入??偡衷?80分以上的學(xué)生人數(shù)。編寫程序如圖8-14所示,運(yùn)行程序P9.PRG,屏幕先顯示學(xué)生表中入??偡衷?80分以上的學(xué)生記錄內(nèi)容,如圖8-15所示,再以如下格式顯示統(tǒng)計(jì)出的學(xué)生表中入??偡衷?80分以上的學(xué)生人數(shù)。

圖8-14

程序P9.PRG編寫窗口

圖8-15

入??偡衷?80分以上的學(xué)生記錄

第34頁(yè)/共64頁(yè)Settalkoffclearusexuesheng2nu=0browsefor入校總分>=580dowhile.not.eof()if入??偡?gt;=580NU=nu+1endifSkipEnddo@2,30say“入校總分在580分以上的人數(shù)”@2,60sayNU第35頁(yè)/共64頁(yè)【例8-11】編寫程序P10.PRG,其程序功能是設(shè)計(jì)一個(gè)對(duì)學(xué)生表進(jìn)行管理主控程序,用戶通過(guò)鍵盤選擇菜單,以實(shí)現(xiàn)不同的功能模塊的調(diào)用或退出程序運(yùn)行。編寫程序如圖8-16所示,運(yùn)行程序P10.PRG,屏幕顯示如下:當(dāng)輸入5,輸入的代號(hào)不在提示的范圍內(nèi),系統(tǒng)提示重新選擇,再次顯示選擇提示信息。

圖8-16

程序P10.PRG編寫窗口

第36頁(yè)/共64頁(yè)settalkoffdowhile.t.cleartext

學(xué)生檔案管理****************

1.查詢2.修改

3.統(tǒng)計(jì)4.退出endtextwait"請(qǐng)輸入功能選擇代號(hào)(1~4)"toandocasecasean="1"do查詢

casean="2"do修改

casean="3"do統(tǒng)計(jì)

casean="4"exitotherwisewait"選擇錯(cuò)誤,按任意鍵重新選擇!"endcaseenddoclearallsettalkon

第37頁(yè)/共64頁(yè)(2)計(jì)數(shù)循環(huán)計(jì)數(shù)循環(huán)是根據(jù)用戶設(shè)置的循環(huán)變量的初值、終值和步長(zhǎng),決定循環(huán)體內(nèi)語(yǔ)句執(zhí)行次數(shù)?!菊Z(yǔ)句】FOR<循環(huán)變量>=<循環(huán)初值>TO<循環(huán)終值>[STEP<步長(zhǎng)>]<命令行序列1>[LOOP]<命令行序列2>[EXIT]<命令行序列3>ENDFOR|NEXT【功能】系統(tǒng)執(zhí)行該命令時(shí),首先將循環(huán)初值賦給循環(huán)變量,然后判斷循環(huán)變量的值是否超過(guò)終值,若超過(guò)則跳出循環(huán),執(zhí)行ENDFOR后面的命令,否則執(zhí)行循環(huán)體內(nèi)的命令序列。當(dāng)遇到ENDFOR子句時(shí),返回FOR命令,并將循環(huán)變量的值加上步長(zhǎng)值再一次與循環(huán)終值比較,如此重復(fù)執(zhí)行,直到循環(huán)變量的值超過(guò)循環(huán)終值?!菊f(shuō)明】對(duì)循環(huán)語(yǔ)句進(jìn)行以下說(shuō)明:l

步長(zhǎng)值省略時(shí),系統(tǒng)默認(rèn)步長(zhǎng)值為1。當(dāng)初值小于終值時(shí),步長(zhǎng)值為正值。當(dāng)初值大于終值時(shí),步長(zhǎng)值為負(fù)值。步長(zhǎng)值不能為0,否則造成死循環(huán)。l

在循環(huán)體內(nèi)不要隨便改變循環(huán)變量的值,否則會(huì)引起循環(huán)次數(shù)發(fā)生改變。l[LOOP]和[EXIT]命令的功能和用法與條件循環(huán)中該命令的用法相同

第38頁(yè)/共64頁(yè)【例8-12】編寫程序P11.PRG,其程序功能是用計(jì)數(shù)循環(huán)統(tǒng)計(jì)學(xué)生表中入校總分在580分以上的學(xué)生人數(shù)。編寫程序如圖8-17所示,運(yùn)行程序P11.PRG,屏幕以如下格式顯示統(tǒng)計(jì)出的學(xué)生表中入??偡衷?80分以上的學(xué)生人數(shù)(與例8-10的結(jié)果相同)。

圖8-17

程序P11.PRG編寫窗口

第39頁(yè)/共64頁(yè)settalkoffclearusexuesheng2countalltornugotopnu=0fori=1tornustep1if入校總分>=580nu=nu+1endifskipendfor@2,30say"入??偡衷?80以上的人數(shù):"@2,60saynuclearallsettalkonreturn第40頁(yè)/共64頁(yè)(3)指針循環(huán)指針循環(huán)是在數(shù)據(jù)表中建立的循環(huán),它是根據(jù)用戶設(shè)置的當(dāng)前記錄指針,對(duì)一組記錄進(jìn)行循環(huán)操作?!菊Z(yǔ)句】SCAN[<范圍>][FOR<條件表達(dá)式1>][WHILE<條件表達(dá)式2>]<命令行序列1>[LOOP]<命令行序列2>[EXIT]<命令行序列3>ENDSCAN【功能】該語(yǔ)句在指定的范圍內(nèi),用記錄指針來(lái)控制循環(huán)次數(shù)。執(zhí)行語(yǔ)句時(shí),首先判斷函數(shù)EOF()的值,若為“真”,則結(jié)束循環(huán),執(zhí)行ENDSCAN后面的語(yǔ)句;否則,結(jié)合<條件表達(dá)式1>或<條件表達(dá)式2>執(zhí)行<命令行序列>,記錄指針移到指定的范圍和條件內(nèi)的下一條記錄,重新判斷函數(shù)EOF()的值,直到EOF()的值為“真”時(shí)結(jié)束循環(huán)。【說(shuō)明】對(duì)循環(huán)語(yǔ)句進(jìn)行以下說(shuō)明:l

SCAN…ENDSCAN循環(huán)語(yǔ)句中隱含函數(shù)EOF()和命令SKIP的處理。l

無(wú)<范圍>選項(xiàng)時(shí),則表示對(duì)所有記錄進(jìn)行處理。l

[LOOP]和[EXIT]命令的功能和用法與條件循環(huán)中該命令的用法相同。第41頁(yè)/共64頁(yè)【例8-13】編寫程序P12.PRG,其程序功能是用指針循環(huán)統(tǒng)計(jì)學(xué)生表中入??偡衷?80分以上的學(xué)生人數(shù)。編寫程序如圖8-18所示,運(yùn)行程序P12.PRG,屏幕顯示格式與例8-10的結(jié)果相同。

圖8-18

程序P12.PRG編寫窗口

第42頁(yè)/共64頁(yè)settalkoffclearusexuesheng2nu=0scanallfor入??偡?gt;=580nu=nu+1endscan@2,30say"入校總分在580分以上得人數(shù):"@2,60saynuclearallsettalkonreturn第43頁(yè)/共64頁(yè)(4)多重循環(huán)多重循環(huán)是指在一個(gè)循環(huán)語(yǔ)句內(nèi)又包含另一個(gè)循環(huán)語(yǔ)句,多重循環(huán)也稱為循環(huán)嵌套。下面以條件循環(huán)為例,進(jìn)行說(shuō)明?!菊Z(yǔ)句】DOWHILE<條件表達(dá)式1><命令行序列11>DOWHILE<條件表達(dá)式2><命令行序列21>……ENDDO<命令行序列12>ENDDO【功能】在多重循環(huán)中,首先從外循環(huán)進(jìn)入內(nèi)循環(huán),執(zhí)行內(nèi)循環(huán)的語(yǔ)句。當(dāng)內(nèi)循環(huán)的條件為假時(shí),返回到外循環(huán);當(dāng)外循環(huán)的條件為真時(shí),又進(jìn)入內(nèi)循環(huán);否則,退出循環(huán)。【說(shuō)明】對(duì)循環(huán)語(yǔ)句進(jìn)行以下說(shuō)明:①循環(huán)嵌套層次不限,但內(nèi)循環(huán)的所有語(yǔ)句必須完全嵌套在外層循環(huán)之中。否則,就會(huì)出現(xiàn)循環(huán)的交叉,造成邏輯上的混亂。②循環(huán)結(jié)構(gòu)和分支結(jié)構(gòu)允許混合嵌套使用,但不允許交叉。其入口語(yǔ)句和相應(yīng)的出口語(yǔ)句必須成對(duì)出現(xiàn)。第44頁(yè)/共64頁(yè)【例8-14】編寫程序P13.PRG,其程序功能是使用多重循環(huán)打印一個(gè)九九乘法口訣表。編寫程序P13.PRG,運(yùn)行程序后屏幕顯示九九乘法口訣表。程序和結(jié)果如圖8-19所示。

圖8-19

程序P13.PRG編寫窗口和九九乘法口訣表屏幕顯示

第45頁(yè)/共64頁(yè)settalkoffclearfory=1to9forx=1toyz=x*y??""+Str(y,1)+"*"+Str(x,1)+"="+Str(z,2)+""endforx?endforysettalkonreturn

第46頁(yè)/共64頁(yè)8.1.4過(guò)程及過(guò)程調(diào)用1.過(guò)程概念在程序設(shè)計(jì)中,經(jīng)常會(huì)遇到有些運(yùn)算或程序段落在程序中多次調(diào)用的情況,為了有效地解決上述重復(fù)調(diào)用,可設(shè)計(jì)相對(duì)獨(dú)立并能完成特定功能的程序段,這種程序段稱為過(guò)程或子程序,用于調(diào)用程序段的程序稱為主程序。在應(yīng)用系統(tǒng)的開(kāi)發(fā)中,一般會(huì)根據(jù)實(shí)際的需要將整個(gè)系統(tǒng)劃分成若干個(gè)模塊,然后在主控模塊的控制下,調(diào)用各個(gè)功能模塊以實(shí)現(xiàn)系統(tǒng)的各種功能操作,通常將這些可調(diào)用的功能模塊也設(shè)計(jì)成過(guò)程或子程序。2.過(guò)程的建立與調(diào)用建立過(guò)程的方法與建立一般程序的方法相同,所不同的是在每個(gè)過(guò)程中至少要有一個(gè)返回語(yǔ)句?!痉祷卣Z(yǔ)句】RETURN[<表達(dá)式>|TO<程序文件名>|TOMASTER]【調(diào)用命令】DO<過(guò)程名>【功能】執(zhí)行DO調(diào)用命令時(shí),將指定的過(guò)程調(diào)入內(nèi)存并執(zhí)行,當(dāng)執(zhí)行到RETURN命令時(shí),返回到調(diào)用該子程序的主程序,并執(zhí)行調(diào)用命令下的第一條可執(zhí)行命令?!菊f(shuō)明】在返回語(yǔ)句中,若選擇可選項(xiàng)<表達(dá)式>,將表達(dá)式的值返回給調(diào)用程序。選擇可選項(xiàng)[TO<程序文件名>],可直接返回指定的程序文件。選擇可選項(xiàng)[TOMASTER],則不論前面有多少級(jí)調(diào)用而直接返回到第一級(jí)主程序。

第47頁(yè)/共64頁(yè)【例8-15】編寫程序P14.PRG,其程序功能是計(jì)算S=X!+Y!+Z!。編寫程序如圖8-20所示,運(yùn)行程序P14.PRG,屏幕顯示如下的輸入數(shù)據(jù)和輸出結(jié)果。圖8-20

程序P14.PRG主程序和過(guò)程編寫窗口

第48頁(yè)/共64頁(yè)3.過(guò)程文件過(guò)程是作為一個(gè)文件獨(dú)立地存儲(chǔ)在磁盤上,每次運(yùn)行時(shí),必須將程序調(diào)入內(nèi)存,為減少磁盤文件的打開(kāi)次數(shù),提高系統(tǒng)的運(yùn)行效率,可以把多個(gè)過(guò)程寫入到一個(gè)過(guò)程文件中。一個(gè)過(guò)程文件由多個(gè)過(guò)程組成,過(guò)程文件的擴(kuò)展名仍然是.PRG。(1)建立過(guò)程文件【命令】MODIFYCOMMAND<過(guò)程文件名>【功能】建立過(guò)程文件。過(guò)程文件的基本書寫格式:PROCEDURE<過(guò)程名1><命令序列1>RETURNPROCEDURE<過(guò)程名2><命令序列2>RETURN……PROCEDURE<過(guò)程名N><命令序列N>RETURN

第49頁(yè)/共64頁(yè)(2)打開(kāi)過(guò)程文件【命令】SETPROCEDURETO<過(guò)程文件名>【功能】打開(kāi)指定的過(guò)程文件,將過(guò)程文件中所包含的子程序全部調(diào)入內(nèi)存?!菊f(shuō)明】系統(tǒng)在同一時(shí)刻只能打開(kāi)一個(gè)過(guò)程文件,打開(kāi)新過(guò)程文件的同時(shí)將關(guān)閉原來(lái)打開(kāi)的過(guò)程文件。若要修改過(guò)程文件的內(nèi)容,一定要先關(guān)閉該過(guò)程文件。(3)執(zhí)行過(guò)程文件中的過(guò)程【命令】DO<過(guò)程名>【功能】調(diào)用過(guò)程文件中的指定過(guò)程。(4)關(guān)閉過(guò)程文件【命令】CLOSEPROCEDURE

或SETPROCEDURETO【功能】關(guān)閉已打開(kāi)的過(guò)程文件。

第50頁(yè)/共64頁(yè)【例8-16】編寫程序P15.PRG,其程序功能是求3~100之間的所有素?cái)?shù)。注意:對(duì)一個(gè)自然數(shù)M(取值在3~100之間的奇數(shù))求素?cái)?shù)的方法是:將M依次除以3到M的算數(shù)平方根之間的所有奇數(shù),若均不能被整除,則M即為素?cái)?shù),否則,M不是素?cái)?shù)。編寫程序如圖8-21所示,運(yùn)行程序P15.PRG,屏幕顯示如下的輸出結(jié)果。3~100之間的所有素?cái)?shù):3 5 7 11 1317 19 23 29 3137 41 43 47 5359 61 67 71 7379 83 89 97

圖8-21

程序P15.PRG主程序和過(guò)程文件編寫窗口

第51頁(yè)/共64頁(yè)settalkoffclearj=0setproceduretop3_1dox1form=3to100step2i=3n=int(sqrt(m))dox2endforsetproceduretosettalkonreturnprocedurex2fori=3tonstep2ifint(m/i)=m/ireturnendifendforifint(j/5)=j/5?Melse??Mendifj=j+1return第52頁(yè)/共64頁(yè)過(guò)程程序procedurex1?"3~100之間的所有素?cái)?shù):"?Return第53頁(yè)/共64頁(yè)8.1.5變量的作用域和參數(shù)調(diào)用1.變量的作用域在程序設(shè)計(jì)中,特別是模塊程序中,往往會(huì)用到許多內(nèi)存變量,這些內(nèi)存變量有的在整個(gè)程序運(yùn)行過(guò)程中起作用,而有的內(nèi)存變量只在某些程序模塊中起作用,內(nèi)存變量的這些作用范圍稱為內(nèi)存變量的作用域。內(nèi)存變量的作用域根據(jù)作用范圍可分為全局變量和局部變量。(1)全局變量全局變量是指在程序的任何嵌套中及在程序執(zhí)行期間始終有效的變量。程序執(zhí)行完畢,它們不會(huì)在內(nèi)存自動(dòng)釋放。全局變量的定義如下:【命令】PUBLIC<內(nèi)存變量表>【功能】將內(nèi)存變量名表中的變量說(shuō)明為全局變量。【說(shuō)明】<內(nèi)存變量表>中的變量可以是簡(jiǎn)單變量,也可以是下標(biāo)變量。

第54頁(yè)/共64頁(yè)(2)局部變量局部變量是指未經(jīng)PUBLIC命令定義的,只在建立它的過(guò)程及下級(jí)過(guò)程中有效的內(nèi)存變量。建立局部變量的程序執(zhí)行完畢,局部變量的值將被自動(dòng)清除。凡是過(guò)程中未經(jīng)特殊說(shuō)明的內(nèi)存變量,系統(tǒng)一律認(rèn)為是局部變量,這種方式稱做隱含定義方式。也可以使用專門命令來(lái)定義局部變量,即顯式定義方式?!久睢縋RIVATE<內(nèi)存變量表>[ALL[LINK|EXCEPT<通配符>]]【功能】定義選定的內(nèi)存變量為局部變量?!菊f(shuō)明】在同一過(guò)程中,用隱式或顯式定義的局部變量的作用域完全相同。在主程序或上級(jí)過(guò)程中未經(jīng)PRIVATE語(yǔ)句定義的局部變量,在下級(jí)過(guò)程中也未經(jīng)顯式定義,那么它的新值可以帶回主程序或上級(jí)過(guò)程;若在下級(jí)過(guò)程中進(jìn)行了顯式定義,其新值不能帶回主程序或上級(jí)過(guò)程中使用。

第55頁(yè)/共64頁(yè)有一個(gè)程序和兩個(gè)過(guò)程文件*主程序P.PRG*過(guò)程P1.PRGSETTALKOFFPRIVATEBA=0A=123B=0B=321DOP1?A,B?A,BRETURNRETURN(1)過(guò)程P1的輸出”?A,B”為()(A)123321(B)123XYZ(C)OPQXYZ(D)1230(2)主程序P的輸出”?A,B”為()(A)123321(B)123XYZ(C)OPQXYZ(D)1230第56頁(yè)/共64頁(yè)2.過(guò)程的帶參調(diào)用在調(diào)用過(guò)程時(shí),有時(shí)需要將數(shù)據(jù)傳遞到調(diào)用過(guò)程,有時(shí)又需要從調(diào)用過(guò)程將數(shù)據(jù)返回。實(shí)現(xiàn)數(shù)據(jù)相互傳遞。VisualFoxPro為此提供了過(guò)程的帶參調(diào)用方法,這種方法是:在調(diào)用過(guò)程的命令和被調(diào)用過(guò)程的相關(guān)語(yǔ)句中,分別設(shè)置數(shù)量相同、數(shù)據(jù)類型一致且排列順序相互對(duì)應(yīng)的參數(shù)表。調(diào)用過(guò)程的命令將一系列參數(shù)的值傳遞給被調(diào)用過(guò)程中的對(duì)應(yīng)參數(shù),被調(diào)用過(guò)程運(yùn)行結(jié)束時(shí),再將參數(shù)的值返回到調(diào)用它的上一級(jí)過(guò)程或主程序中。這種調(diào)用是通過(guò)帶參過(guò)程調(diào)用命令和接受參數(shù)命令實(shí)現(xiàn)的。(1)帶參調(diào)用【命令】DO<子程序名>WITH<參數(shù)表>【功能】調(diào)用一般過(guò)程或過(guò)程文件中的過(guò)程,并為被調(diào)用過(guò)程提供參數(shù)?!菊f(shuō)明】該命令只用在調(diào)用過(guò)程的程序中。此處<參數(shù)表>又稱為實(shí)參表,其中的參數(shù)可以是常量、已賦值的變量或數(shù)值表達(dá)式,參數(shù)之間用逗號(hào)分開(kāi)。(2)接受參數(shù)【命令】PARAMETERS<參數(shù)表>【功能】接受調(diào)用過(guò)程的命令傳遞過(guò)來(lái)的參數(shù)?!菊f(shuō)明】該命令必須位于被調(diào)用過(guò)程的第一條可執(zhí)行語(yǔ)句處。此處<參數(shù)表>又稱為形參表,其中的參數(shù)一般為內(nèi)存變量。形參與實(shí)參的個(gè)數(shù)應(yīng)相等、數(shù)據(jù)類型和個(gè)數(shù)要對(duì)應(yīng)相同。第57頁(yè)/共64頁(yè)【例8-18】編寫程序P17.PRG,其程序功能是用帶參調(diào)用方法計(jì)算梯形的面積。編寫程序如圖8-24(a)、(b)所示,運(yùn)行程序P17.PRG,屏幕顯示如下的輸入界面和輸出結(jié)果:(a)(b)圖8-24

程序P17.PRG主程序和調(diào)用過(guò)程編寫窗口第58頁(yè)/共64頁(yè)主程序SETTALKOFF*于程序SUB.PRGCLEARPARAMETERSI.JN=4M=1①K=1

溫馨提示

  • 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)論