Visual-FoxPro程序設(shè)計幻燈片.徐紅波.第5章_第1頁
Visual-FoxPro程序設(shè)計幻燈片.徐紅波.第5章_第2頁
Visual-FoxPro程序設(shè)計幻燈片.徐紅波.第5章_第3頁
Visual-FoxPro程序設(shè)計幻燈片.徐紅波.第5章_第4頁
Visual-FoxPro程序設(shè)計幻燈片.徐紅波.第5章_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

講師:徐紅波E-mail:VisualFoxPro程序設(shè)計教程第5章程序設(shè)計根底VFP的工作方式: 1)交互式工作方式是直接在命令窗口中執(zhí)行命令或用菜單及工具欄按鈕執(zhí)行命令。

2)自動化工作方式是用編寫的程序或用各種生成器生成程序文件再執(zhí)行。

5.1程序文件的建立、修改、執(zhí)行

5.1.1程序 程序是能夠完成一定任務(wù)的命令集合。程序文件的擴展名為prg。5.1.2程序文件的建立和修改1)用界面方式建立和修改程序2)用命令方式建立和修改程序 格式:MODIFYCOMMAND[<文件名>|?] 功能:翻開程序編輯器,用于建立或修改程序文件5.1.3程序文件的執(zhí)行1〕用界面方式執(zhí)行程序文件2〕用命令方式執(zhí)行程序文件 格式:DO<程序名> 功能:執(zhí)行<程序名>指定的程序5.1.4程序的書寫規(guī)那么 一個程序是由假設(shè)干行組成,每行由回車鍵結(jié)束1〕命令行:一個命令可以寫在一行也可以分多行書寫,分行書寫時應(yīng)該在行尾加續(xù)行符“;”2〕命令的注釋:注釋符有&&,*,NOTE三種 格式1:&&[<注釋內(nèi)容>] 格式2:*[<注釋內(nèi)容>] 格式3:NOTE[<注釋內(nèi)容>] 功能:程序注釋 說明:格式1為行尾注釋,即可寫在命令行的尾部。格式2與格式3為行首注釋,即以*和NOTE開始的行都為注釋例5.1在學(xué)生庫中查找VFP與C的成績大于90分的學(xué)生的學(xué)號,姓名以及課程VFP與C語言的成績opendatabase學(xué)生 &&翻開學(xué)生數(shù)據(jù)庫select學(xué)生.學(xué)號,學(xué)生.姓名,學(xué)生成績.vfp,學(xué)生成績f.c;where學(xué)生.學(xué)號=學(xué)生成績.學(xué)號and學(xué)生.學(xué)號=學(xué)生成績f.學(xué)號and;學(xué)生成績.vfp>=90AND學(xué)生成績f.c>=90; &&命令分行書寫要加分號from學(xué)生,學(xué)生成績,學(xué)生成績f &&select命令結(jié)束closedatabaseall &&關(guān)閉數(shù)據(jù)庫return5.1.5調(diào)試命令與輔助命令1、SETTALK命令格式:SETTALKON|OFF功能:設(shè)置是否顯示命令在執(zhí)行過程中的狀態(tài)信息,ON為顯示信息〔默認(rèn)值〕,OFF為不顯示信息。如:命令copyfiles學(xué)生.*to學(xué)生1.*,假設(shè)選ON,那么顯示復(fù)制過程中復(fù)制的幾個文件的信息。假設(shè)選OFF,那么無信息。2、CANCEL命令格式:CANCEL功能:終止程序運行,去除所有私有變量,返回到命令窗口3、RETURN命令格式:RETURN功能:結(jié)束當(dāng)前程序執(zhí)行,返回到調(diào)用它的上級程序,假設(shè)無上級調(diào)用程序,那么返回到命令窗口4、QUIT命令格式:QUIT功能:退出VFP系統(tǒng),返回WINDOWS操作系統(tǒng)5.2輸入與輸出命令

5.2.1輸入命令1〕INPUT命令格式:INPUT[<字符表達式>]TO[<內(nèi)存變量>]功能:從鍵盤輸入數(shù)據(jù),回車后將數(shù)據(jù)賦給內(nèi)存變量說明: 1)<字符表達式>為提示信息。 2)輸入的數(shù)據(jù)可為,常量,變量,表達式。 3)輸入C,L,D型常量時要用定界符。例5.2查找指定姓名對應(yīng)學(xué)生的學(xué)號,性別和數(shù)學(xué)成績。opendatabase學(xué)生input"輸入姓名:"tonameselect學(xué)生.學(xué)號,學(xué)生.姓名,學(xué)生成績.數(shù)學(xué)from學(xué)生,學(xué)生成績;where學(xué)生.姓名=nameand學(xué)生成績.學(xué)號=學(xué)生.學(xué)號closedatabaseallreturn2〕ACCEPT命令格式:ACCEPT[<字符表達式>]TO[<內(nèi)存變量>]功能:從鍵盤輸入字符串?dāng)?shù)據(jù),賦給內(nèi)存變量說明: 1〕<字符表達式>為提示信息。 2〕輸入的字符串不需加定界符,否那么會將定界符作為字符串的一局部。 3〕假設(shè)不輸入數(shù)據(jù)直接按回車鍵,將空串賦給變量。3、WAIT命令格式:WAIT<字符表達式>]TO[<內(nèi)存變量>][WINDOW[AT<行,列>][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<數(shù)值表達式>]功能:暫停程序運行,字符表達式為提示信息,待從鍵盤輸入一個字符賦給內(nèi)存變量,程序繼續(xù)執(zhí)行。說明:1〕省略[<字符表達式>],那么顯示默認(rèn)信息,按任意鍵繼續(xù)…。2〕對于[TO<內(nèi)存變量>],假設(shè)直接回車,變量中內(nèi)容為空串,省略此項,輸入字符不保存。3〕[[WINDOW[AT<行,列>]]設(shè)置信息窗口在屏幕上的位置,省略AT<行,列>信息將顯示在屏幕的右上角。4〕[NOWAIT]不等待輸入直接往下執(zhí)行。5〕CLEAR去除提示信息窗口,NOCLEAR不去除提示信息窗口,直到執(zhí)行一條WAITWINDOW命令或WAITCLEAR命令為止。6〕[TIMEOUT<數(shù)值表達式>]由數(shù)值表達式指定等待輸入的秒數(shù)。假設(shè)超出秒數(shù),那么不等待自動往下執(zhí)行。例5.3WAIT的應(yīng)用wait"繼續(xù)?"toxwindowtime105.2.2輸出命令格式:@<行,列>[SAY<表達式>][GET<變量名>][DEFAULT<表達式>]功能:在屏幕指定行列輸出表達式的值并修改內(nèi)存變量的值。說明:1〕<行,列>中行自上而下編號,列自左至右編號,編號從0開始,行列可以使用小數(shù)精確定位。2〕省略SAY選項,GET變量值在行列指定位置開始顯示。假設(shè)選SAY選項,先顯示表達式的值,然后再顯示GET變量值。3〕GET中的變量必須有初值或用[DEFAULT<表達式>]中的<表達式>命令定值。4〕GET選項必須用READ命令激活。例5.4查找學(xué)生成績大于等于指定成績的或數(shù)學(xué)大于等于指定分?jǐn)?shù)的學(xué)生學(xué)號,姓名,入學(xué)成績,數(shù)學(xué)成績。clearopendatabase學(xué)生@10,10say"輸入入學(xué)成績:"getrxcjdefault0@10,10say"輸入數(shù)學(xué)分?jǐn)?shù):"getsxfsdefault0read@10,10say"入學(xué)成績?yōu)?+str(rxcj)+“數(shù)學(xué)為"+str(sxfs)select學(xué)生.學(xué)號,學(xué)生.姓名,學(xué)生.入學(xué)成績,學(xué)生成績.數(shù)學(xué);from學(xué)生,學(xué)生成績where學(xué)生.入學(xué)成績>=rxcjand學(xué)生成績.數(shù)學(xué)>=sxfs;and學(xué)生.學(xué)號=學(xué)生成績.學(xué)號closedatabaseallreturn5.3程序的根本結(jié)構(gòu) 程序設(shè)計一般采用順序,條件,循環(huán)這三種根本結(jié)構(gòu),這三種結(jié)構(gòu)貫穿于整個程序的設(shè)計中。5.3.1三種根本結(jié)構(gòu)1〕順序結(jié)構(gòu):程序是按語句排列的先后順序來執(zhí)行。2〕選擇結(jié)構(gòu):條件為真執(zhí)行一局部語句,否那么執(zhí)行另一局部語句。3〕循環(huán)結(jié)構(gòu):當(dāng)條件為真執(zhí)行循環(huán)體,否那么結(jié)束循環(huán)。5.3.2順序結(jié)構(gòu)程序設(shè)計例5.7求圓面積 s=0 r=0 input"輸入r:"tor s=3.14*r*r ?"s=",s return5.3.3選擇結(jié)構(gòu)程序設(shè)計1、二分支選擇結(jié)構(gòu)格式:IF<條件> <命令行列1>ELSE <命令行列2>ENDIF功能:當(dāng)條件成立時執(zhí)行命令序列1,否那么執(zhí)行命令序列2。當(dāng)不包含ELSE時,條件成立執(zhí)行命令序列1,否那么執(zhí)行ENDIF后的語句。說明:IF和ENDIF必須成對出現(xiàn),此語句可以嵌套使用,條件是邏輯表達式例5.8當(dāng)r>=0時計算圓面積否那么輸出不合題意settalkoffs=0r=0input"輸入r:"torifr>0 s=pi()*r*r ?"s=",selse ?"r<0不合題意!"endif?"程序結(jié)束"return例5.9輸入學(xué)號,在學(xué)生表中查詢學(xué)生姓名,學(xué)生入學(xué)成績,假設(shè)沒有找到,輸出無此學(xué)生clearopendatabase學(xué)生use學(xué)生input"輸入學(xué)號:"toxhlocatefor學(xué)號=xhiffound() ?"學(xué)號:"+學(xué)號+space(2)+"姓名:"+姓名+space(2)+str(入學(xué)成績,3)else ?"無此學(xué)生"endifclosedatabaseallreturn2、多分支選擇結(jié)構(gòu)格式: DOCASE CASE<條件1> <命令序列1> …… CASE<條件n> <命令序列n> [OTHERWISE] <命令序列n+1> ENDCASE功能:依次判斷條件是否成立,假設(shè)某個條件成立,那么執(zhí)行對應(yīng)的語句序列,然后執(zhí)行ENDCASE的后面語句,假設(shè)所有條件都不成立,就執(zhí)行OTHERWISE語句序列n+1。說明: 1)條件為邏輯表達式。 2)DOCASE與ENDCASE必須成對出現(xiàn)。例5.10輸入學(xué)生姓名,成績,給出成績的等級,成績?yōu)榘俜种疲煽兊牡燃壡闆r為90-100為優(yōu)秀,70-89為良好,60-69為及格,0-59為不及格name=“”number=0grade=""input"輸入學(xué)生姓名:"tonameinput"輸入學(xué)生成績:"tonumberdocasecasenumber>=90andnumber<=100grade="優(yōu)秀"casenumber>=70andnumber<=89grade="良好"casenumber>=60andnumber<=79grade="及格"casenumber>=0andnumber<=59grade="不及格"otherwisegrade="輸入錯誤"endcase?name,number,gradereturn5.3.4循環(huán)結(jié)構(gòu)程序設(shè)計 VFP有三種循環(huán)結(jié)構(gòu),它們是DOWHILE,FOR,SCAN。1、DOWHILE循環(huán)格式:DOWHILE<條件> <命令序列1> [LOOP] <命令序列2> [EXIT] <命令序列3> ENDDO功能: 1〕當(dāng)條件成立時執(zhí)行DOWHILE與ENDDO之間的命令,這些命令稱為循環(huán)體。 2〕程序執(zhí)行到ENDDO時自動返回到WHILE<條件>處重新判斷條件是否成立,以決定是否循環(huán)。 3〕當(dāng)條件不成立時,結(jié)束循環(huán),執(zhí)行ENDDO下面命令。說明: 1〕DOWhile與ENDDO必須成對出現(xiàn)。 2〕執(zhí)行LOOP命令時結(jié)束本次循環(huán),自動返回DOWHILE處重新判斷循環(huán)條件。 3〕遇到EXIT命令時結(jié)束循環(huán),執(zhí)行ENDDO下面命令。例5.11求1+2+3+…+100的值sum=0n=1dowhilen<=100sum=sum+nn=n+1enddo?"s=",sreturn例5.12對100個任意數(shù)求和,正數(shù)求和,負(fù)數(shù)不求和,當(dāng)輸入0.001時停止輸入sum=0n=1dowhilen<=100 input"x:"tox n=n+1 ifx<0 loop endif ifx=0.0001 exit endif sum=sum+xenddo?“sum=",sumreturn2、FOR循環(huán)格式:FOR<循環(huán)變量>=<初值>TO<終值>[STEP<步長>] <循環(huán)體>ENDFOR|EXIT功能:先把初值賦給循環(huán)變量,再判斷循環(huán)條件是否成立。假設(shè)不成立就結(jié)束循環(huán),執(zhí)行循環(huán)后面的命令,假設(shè)條件成立,就執(zhí)行循環(huán)體,循環(huán)再執(zhí)行一此,循環(huán)變量自動增加一個步長。再判斷循環(huán)變量是否成立,以判斷是否執(zhí)行循環(huán)體。說明:1〕循環(huán)變量為內(nèi)存變量,初值,終值,步長為數(shù)值表達式。2〕當(dāng)步長為0時循環(huán)變量無增量,將死循環(huán),步長默認(rèn)值為1。3〕在循環(huán)體內(nèi)可以改變循環(huán)變量,但這會改變循環(huán)次數(shù)。4〕在循環(huán)體內(nèi)可以包括,LOOP和EXIT。當(dāng)遇到LOOP時,本次循環(huán)結(jié)束,循環(huán)變量增加一個步長值,進入下一次循環(huán),當(dāng)遇到EXIT時,結(jié)束循環(huán),執(zhí)行下面的命令。例5.13求1+2+…+nsum=0input"輸入n:"tonfori=1ton sum=sum+iendfor?"s=",sreturn3、SCAN循環(huán)格式:SCAN[<范圍>][FOR<條件1>][WHILE<條件2>] <循環(huán)體>ENDSCAN功能:在當(dāng)前表的指定范圍內(nèi)記錄指針自動移到滿足條件1或條件2的記錄上,執(zhí)行循環(huán)體,然后再將記錄指針自動移動到下一個滿足條件1或條件2的記錄上再一次執(zhí)行循環(huán)體直至超出范圍。默認(rèn)范圍為表中所有記錄。說明:1〕循環(huán)體內(nèi)可包含LOOP與EXIT命令,當(dāng)遇到LOOP命令時,結(jié)束本次循環(huán)返回到SCAN處進入下一次循環(huán)。當(dāng)遇到EXIT時,結(jié)束循環(huán),執(zhí)行ENDSCAN后面的命令。例5.14逐條顯示學(xué)生表中入學(xué)成績大于等于490分的學(xué)生的學(xué)號,姓名,入學(xué)成績,并統(tǒng)計人數(shù)clearn=0opendatabase學(xué)生use學(xué)生scanfor入學(xué)成績>=490 dispplay學(xué)號,姓名,入學(xué)成績 n=n+1endscanclosedatabaseall?"n=",nreturn4、循環(huán)的嵌套:在循環(huán)命令的循環(huán)體中包含了其他循環(huán)。循環(huán)嵌套就是指多重循環(huán)。例5.15輸出乘法表: fori=1to9 forj=1toi ??str(j,2)+'*'+str(i,2)+spac(2)+"="+str(i*j,3) endfor ? endfor return5.4多模塊程序結(jié)構(gòu) 多模塊程序結(jié)構(gòu)是將一個大的程序劃分為一個主調(diào)程序和幾個被調(diào)程序。將主調(diào)程序稱為主程序模塊,被調(diào)程序稱為子程序模塊。由于子程序模塊可以屢次被調(diào)用又可以相互調(diào)用,提高代碼的重用率,也便于軟件修改與維護。VFP實現(xiàn)子程序模塊有三種方式:子程序、過程、自定義函數(shù)。三者主要區(qū)別:子程序無返回值,而過程和自定義函數(shù)有返回值。5.4.1子程序、過程、自定義函數(shù)一、子程序1)定義:子程序是一個程序文件,它與主程序的主要區(qū)別:主程序只能調(diào)用其他程序而不能被其他程序調(diào)用,子程序既能被主程序調(diào)用也能被其他子程序調(diào)用。2)格式: [PARAMETERS<形參表>] <命令序列> RETURN3)說明:[PARAMETERS<形參表>]中的形參用于接收DO命令發(fā)送的實參值。當(dāng)返回調(diào)用程序時把這些形參值回送給相應(yīng)的實參變量。多個形參之間用逗號隔開。4)調(diào)用格式:DO<文件名>[WITH<實參表>]功能:調(diào)用由文件名指定的程序。說明: (1)實參表中實參是傳給子程序的,實參可為常量,變量,表達式。假設(shè)實參個數(shù)少于形參個數(shù),多余的形參值取邏輯假。假設(shè)實參個數(shù)多于形參個數(shù),系統(tǒng)提示錯誤信息。(2)實參為常量或一般表達式時,系統(tǒng)將其值傳給對應(yīng)形參變量,稱為值傳遞。假設(shè)實參為變量,此時形參與實參實際上是同一個變量,稱為地址傳遞或引用傳遞。5)調(diào)用過程。主程序子程序DO子程序RETURN例5.16用主程序與子程序方式求長方形的面積,請用傳參數(shù)和不傳參數(shù)兩種方式不傳參數(shù)cleardoCZ1return*CZ1.prgx=0y=0s=0input"輸入長:"toxInput"輸入寬:“toys=x*y?"s=",sreturn傳參數(shù)x=0y=0s=0input"輸入長:"toxinput"輸入寬:"toydoCZ2withx,y,s?"s=",sreturn*CZ2.prgparametersa,b,cc=a*breturn二、過程1)概念:過程和子程序的作用根本是一樣的,調(diào)用關(guān)系也相同,主要區(qū)別:過程可以和主程序存在同一個文件中,也可以一個或多個過程存在一個文件中,而一個文件只能有一個子程序,多個子程序要存在多個文件中。子程序可直接調(diào)用,而過程如果與主調(diào)程序存在一個文件中,可直接調(diào)用,如果未與主調(diào)程序存在一個文件中,必須通過翻開過程文件才可以調(diào)用。使用完再將過程文件關(guān)閉。子程序無返回值,過程有返回值。2)格式: PROCEDURE<過程名> [PARAMETERS<形參表>] <命令行列> [RETURN<表達式>] [ENDPROC]說明: 1〕[RETURN<表達式>]子句作用是返回表達式的值,假設(shè)只有RETURN將返回邏輯真。假設(shè)無此子句,過程結(jié)果時自動執(zhí)行一條隱含的RETURN命令。2〕[ENDPROC]子句表示過程結(jié)束,一般可不選。3〕過程與子程序一樣可以嵌套調(diào)用。3)過程文件的翻開格式:SETPROVEDURETO[<過程文件名列表>][ADDITIVE]功能:翻開由過程文件名列表指定的過程文件,過程名列表是用逗號分隔的過程文件名。說明: (1)無任何選項將關(guān)閉所有翻開的過程文件。 (2)選[ADDITIVE],在新翻開過程文件時并不關(guān)閉原來翻開的過程文件。4)關(guān)閉過程文件格式1:RELEASEPROCEDURE<過程文件名列表>格式2:CLOSEPROCEDURE功能:格式1用于關(guān)閉過程文件列表中過程文件,格式2用于關(guān)閉所有過程文件5)過程的調(diào)用格式1:DO<過程名>[WITH<實參表>]格式2:

<過程名>()功能:格式1調(diào)用由<過程名>指定的過程。格式2不用傳遞參數(shù)直接調(diào)用例5.17求長方形面積。用主程序與過程在一個文件做,再用主程序與過程不在一個文件做。再用調(diào)用格式2做主程序與過程在一個文件中x=0y=0s=0input"輸入x:“toxinput"輸入y:"toydop1withx,y,s?"s=",sreturnprocedurep1PARAMETERSa,b,cc=a*breturn主程序與過程不在一個文件中setproceduretof1x=0y=0s=0input"輸入x:“toxinput"輸入y:"toydop1withx,y,s?"s=",scloseprocedureReturn*f1.prgprocedurep1parametersa,b,cc=a*breturninput"輸入x:"Toxinput"輸入y:"Toys=x*yreturns調(diào)用格式2x=0y=0s=0s=p1()?"s=",sreturnprocedurep1input"輸入x:“toxinput"輸入y:“toys=x*yreturns例5.18傳遞數(shù)組的應(yīng)用cleardimensiona(5)fori=1to5 a(i)=iendfors=0dop1witha,sfori=1to5 ??a(i),space(2)endfor?"s=",sreturnproceudrep1parametersb,sfori=1to5 b(i)=2*b(i) s=s+b(i)endforreturn三、自定義函數(shù)1)概念:函數(shù)與子程序,過程一樣,是獨立子模塊,調(diào)用關(guān)系也相同,它的程序段要和主調(diào)程序在同一文件中,它的調(diào)用與標(biāo)準(zhǔn)函數(shù)相同。它可以進行參數(shù)傳遞,可以有返回值2)格式 FUNCTION<函數(shù)名> [PARAMETERS<形參表>] <命令序列> [RETURN<表達式>] [ENDFUNC]說明: (1)[RETURN<表達式>]子句是返回函數(shù)的值,假設(shè)無表達式,RETURN返回邏輯真 (2)假設(shè)不選[RETURN<表達式>]子句,在函數(shù)結(jié)束處自動執(zhí)行一條隱含的RETURN命令 (3)[ENDFUNC]表示函數(shù)的結(jié)束,一般不用3)調(diào)用 格式:函數(shù)名([<實參表>]) 功能:調(diào)用由函數(shù)名指定的自定義函數(shù)例5.19求長方形的面積clearx=0y=0s=0input"輸入x:"toxinput"輸入y:"toys=f(x,y)?"s=",sreturnfunctionfparametersa,bc=a*breturnc5.4.2變量的作用域 變量的作用域是變量在程序中的有效區(qū)域。在多模塊程序結(jié)構(gòu)模塊中定義的變量不一定在另一個模塊中有效。按變量的作用域?qū)⒆兞糠譃楣?public)變量,私有(private)變量,局部(local)變量三種。 公有變量是在任何模塊中都能使用的變量,

溫馨提示

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

評論

0/150

提交評論