程序設(shè)計基礎(chǔ)課程課件_第1頁
程序設(shè)計基礎(chǔ)課程課件_第2頁
程序設(shè)計基礎(chǔ)課程課件_第3頁
程序設(shè)計基礎(chǔ)課程課件_第4頁
程序設(shè)計基礎(chǔ)課程課件_第5頁
已閱讀5頁,還剩177頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第五章程序設(shè)計基礎(chǔ)第五章程序設(shè)計基礎(chǔ)1§5、1程序設(shè)計概述一、程序的概念程序:完成一定任務(wù)的一組命令的有序集合。程序設(shè)計:計算機用戶將解決某一實際問題所用的命令按一定的邏輯順序編制成程序,并以文件的形式存放于磁盤的過程。優(yōu)點:(1)可以利用編輯器,方便的輸入、修改、保存文件。(2)可用多種方式,多次運行程序。(3)可在一個程序中調(diào)用另一個程序?!?、1程序設(shè)計概述一、程序的概念2VisualFoxPro的工作方式{{程序文件方式交互式方式單命令方式菜單方式菜單方式、命令方式、程序方式、工具方式VisualFoxPro的工作方式{{程序文件方式交互式31.單命令方式單命令方式:輸入一條命令,完成一個操作的工作方式。注:(1)VFP單命令方式:利用Command窗口來實現(xiàn)的。(2)Command窗口不僅是VFP命令的執(zhí)行窗口,也是VFP命令文件的編輯窗口。2.菜單方式通過打開不同的菜單選擇并完成不同的操作。3.程序文件方式

程序文件(簡稱程序)也叫做命令文件。命令方式:通過程序文件中的命令完成不同的操作。1.單命令方式4二、程序文件的建立、執(zhí)行與編輯說明:程序由命令語句、函數(shù)、過程等程序代碼組成;

通過調(diào)用系統(tǒng)內(nèi)置的文本編輯器進行建立和修改;

程序文件的擴展名為.prg1、建立程序文件A、菜單方式B、項目管理器中創(chuàng)建C、命令方式格式:MODIFYCOMMAND[<文件名>]|?2、保存程序二、程序文件的建立、執(zhí)行與編輯說明:程序由命令語句、函數(shù)、過53、編輯、修改程序文件格式:MODIFYCOMMAND<程序名>|?4、運行程序格式:DO<程序名>[WITH<實參表>]5、使用VFP設(shè)計工具編寫代碼三、程序文件的注釋命令與程序結(jié)束命令1、注釋命令格式:NOTE|*|&&[<注釋內(nèi)容>]

注釋行:以*、NOTE開頭的命令行(獨成一行)

且只能出現(xiàn)在一行的開始

命令行后的注釋:&&(在其他命令行之后)3、編輯、修改程序文件62、程序結(jié)束命令格式:CANCEL說明:執(zhí)行CANCEL將釋放所有私有內(nèi)存變量

程序中的常用命令程序開頭常用命令:CLEARSETTALKOFF程序末尾常用命令:RETURNCANCELSETTALKONQUIT輸入輸出命令2、程序結(jié)束命令7(1)標題部:通常由注釋語句組成,說明程序的名稱,功能,作者等。(2)初始化部:通常由各種SET命令及CLEAR命令等組成,用于設(shè)定程序運行時的初始環(huán)境。(3)程序主體:為完成特定任務(wù)所需的命令的有序集合。(4)結(jié)束返回部:由關(guān)閉文件命令,恢復程序運行前的環(huán)境的SET命令及RETURN,QUIT等返回語句組成。程序的幾個部分(1)標題部:通常由注釋語句組成,程序的幾個部分8(1)、首先遵守命令的基本書寫規(guī)則;(2)、命令分行書寫,一行只能寫一條命令,若命令較長需分行書寫,要在一行結(jié)束時輸入‘;’程序中每條命令都以回車鍵結(jié)尾;(3)、擅長使用注釋語句,提高程序的可讀性。

程序書寫規(guī)則程序書寫規(guī)則9§

5、2基本輸入輸出命令

一、交互式輸入命令交互式輸入:根據(jù)屏幕的提示,通過鍵盤等輸入設(shè)備輸入數(shù)據(jù)。1、INPUT命令

格式:INPUT[<字符型表達式>]TO<內(nèi)存變量>說明:(1)以表達式的值作為提示信息

(2)[<提示信息>]可以是含有變量的字符型表達式

(3)內(nèi)存變量可接受任何類型的表達式的值(4)不能不輸入任何內(nèi)容按回車鍵(5)輸入字符串時,必須加定界符L常量要加圓點定界符T型常量要用大括號§5、2基本輸入輸出命令

一、交互式輸入命令102、ACCEPT命令格式:ACCEPT[<字符型表達式>]TO<內(nèi)存變量>功能:等待用戶從鍵盤輸入字符串說明:(1)在輸入字符串時不需要加定界符,(2)可以不輸入任何內(nèi)容直接按回車鍵。3、WAIT命令格式:WAIT[<字符型表達式>][TO<內(nèi)存變量>][WINDOW[AT<行>,<列>]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<數(shù)值表達式>]說明:該命令只接收字符型數(shù)據(jù)2、ACCEPT命令11說明:(1)若字符串表達式為空,不會顯示任何提示信息;若沒有指定字符串表達式,則默認為‘按任意鍵繼續(xù)…’(2)若用戶按的是Enter鍵或單擊了鼠標,內(nèi)存變量中保存空串;若沒有TO<內(nèi)存變量>項,輸入的單字符不保留。(3)WAIT提示窗口(默認在主窗口的右上角)(4)同時選用NOWAIT短語和WINDOWS子句,系統(tǒng)不等待用戶按鍵,直接往下執(zhí)行說明:(1)若字符串表達式為空,不會顯示任何提示信息;124、INKEY函數(shù)格式:INKEY([<數(shù)值表達式>][,<功能字符>])功能:等待用戶輸入內(nèi)容,等待時間由數(shù)值表達式確定(單位為秒),返回由按鍵而產(chǎn)生的一個整數(shù)值。說明:(1)INKEY函數(shù)只能返回用戶按鍵的ASCII碼值,還能接受鍵盤上各種不可打印的控制鍵、功能鍵等。(2)關(guān)于等待時間:超過預定的等待時間用戶仍未按鍵,則返回0;數(shù)值表達式為0,則無限期等待,直到用戶按鍵為止;格式中缺少可選項,則不等待,直接返回0。(3)功能字符:S、H、M控制光標的顯示或隱藏,檢查鼠標器按鈕的狀態(tài)。

4、INKEY函數(shù)13二、一般輸出命令1、文本行輸出命令格式:\|\\<文本行>功能:將<文本行>信息的內(nèi)容按原樣顯示出來。說明:?/??<表達式>2、文本輸出命令格式:TEXT<文本信息>ENDTEXT說明:該命令只能在程序設(shè)計中用,不能在命名窗口中用;屏幕畫面;<文本信息>中允許出現(xiàn)變量、函數(shù)、表達式,

二、一般輸出命令14本命令能識別他們不顯示其值,但需事先設(shè)定狀態(tài)SETTEXTMERGEON,并用<<和>>將其括起來,以區(qū)別其他一般的文本信息。三、格式化輸入輸出命令格式:@<行,列>SAY<字符表達式>如:@6,8SAY“請輸入查詢條件:”格式:@<行,列>[SAY<提示信息>]GET<變量>[DEFAULT<表達式>]說明:變量必須事先賦初值(類型、長度);

GET<變量>必須要READ命令激活;READ命令的格式:READ[SAVE]本命令能識別他們不顯示其值,但需事先設(shè)定狀15例:SETTALKOFFUSERCDAACCEPT“請輸入編號:”TOBHLOCATEFOR編號=BH?“工資:”+STR(工資)INPUT“請輸入工資:”TOGZLOCATEFOR工資=GZ??‘姓名:’+姓名@4,10SAY“工資為1000的人的編號為:”@4,25SAYBHUSESETTALKONRETURN例:SETTALKOFF16§

5、3程序設(shè)計的控制結(jié)構(gòu)程序結(jié)構(gòu):程序中命令或語句執(zhí)行的流程結(jié)構(gòu)。VisualFoxPro系統(tǒng)的程序有兩個特點:一是程序控制流模式,由順序、分支(選擇)、循環(huán)三種基本結(jié)構(gòu)構(gòu)成。二是面向?qū)ο罂梢暬慕Y(jié)構(gòu)程序模塊,在每個模塊的內(nèi)部也是由程序控制流組成。

§5、3程序設(shè)計的控制結(jié)構(gòu)程序結(jié)構(gòu):程序中命令或語句執(zhí)17常見的控制結(jié)構(gòu)如下:1.順序結(jié)構(gòu)順序結(jié)構(gòu):在程序執(zhí)行時,根據(jù)程序中語句的書寫順序依次執(zhí)行的命令序列。2.分支結(jié)構(gòu)分支結(jié)構(gòu):在程序執(zhí)行時,根據(jù)不同的條件,選擇執(zhí)行不同的程序語句,用來解決有選擇、有轉(zhuǎn)移的諸多問題。常見的控制結(jié)構(gòu)如下:183.循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu):能夠使某些語句或程序段重復執(zhí)行若干次。如果某些語句或程序段需要在一個固定的位置上重復操作,使用循環(huán)是最好的選擇。4.過程結(jié)構(gòu)(可讀性、模塊化)

過程:具有獨立功能而且可以被其它程序調(diào)用的程序序列在許多應用程序中,有一些程序段需要反復執(zhí)行多次,這些程序段不在一個固定的位置上,而是分散在程序的許多位置上重復執(zhí)行,可將其與嵌入它的程序分開,形成獨立的程序序列,待使用時再調(diào)入程序中,以實現(xiàn)不同位置上的重復操作。3.循環(huán)結(jié)構(gòu)19一、順序結(jié)構(gòu)

例:程序A1.PRGSETTALKOFFZ=0INPUT“輸入X的值:”TOXINPUT“輸入Y的值:”TOYZ=X+Y?‘Z=’,ZSETTALKONRETURN一、順序結(jié)構(gòu)

例:程序A1.PRG20二、選擇結(jié)構(gòu)支持選擇結(jié)構(gòu)的語句:條件語句、分支語句1、條件語句(單分支、雙分支)格式:IF<條件><語句序列1>[ELSE<語句序列2>]ENDIF二、選擇結(jié)構(gòu)支持選擇結(jié)構(gòu)的語句:條件語句、分支語句21真條件語句序列1ENDIF后面語句假條件語句序列2ENDIF后面語句假真語句序列1有ELSE的選擇語句無ELSE的選擇語句真條件語句序列1ENDIF后面語句假條件語句序列2ENDIF22

例:A2.PRGSETTALKOFFZ=0INPUT“輸入X的值:”TOXINPUT“輸入Y的值:”TOYIFX>YZ=X+YENDIF?‘Z=’,ZRETURN例:A3.PRGSETTALKOFFZ=0INPUT“輸入X的值:”TOXINPUT“輸入Y的值:”TOYIFX>YZ=X+YELSEZ=X*YENDIF?‘Z=’,ZRETURN例:A3.PRG232、分支語句

DOCASECASE〈條件表達式1〉〈命令行序列1〉[CASE〈條件表達式2〉〈命令行序列2〉……CASE〈條件表達式N〉〈命令行序列N〉][OTHERWISE〈命令行序列N+1〉]ENDCASE2、分支語句24條件1條件2OTHERWISE條件n…語句序列1語句序列2語句序列3語句序列4…ENDCASE后面的語句條件1條件2OTHERWISE條件n…語句序列1語句序列2語25例:A4.PRG設(shè)X代表貨物重量,Y代表運費,其關(guān)系如下式:

X*15X<=50X*1050<X<=100Y=X*8100<X<=1000X*5X>1000{例:A4.PRG{26SETTALKOFFINPUT“輸入貨物重量:”TOXIFX<=50Y=X*15ELSE

IFX<=100Y=X*10ELSE

IFX<=1000Y=X*8ELSEY=X*5ENDIF

ENDIFENDIF?”運費為:”+STR(Y,8,2)RETURNSETTALKOFFINPUT“輸入貨物重量:”TOXDOCASECASEX<=50Y=X*15CASEX>50.AND.X<=100Y=X*10CASEX>100.AND.X<=1000Y=X*8CASEX>1000Y=X*5ENDCASE?“運費為:”+STR(Y,8,2)RETURNSETTALKOFFSETTALKOFF27例:A5、PRG求一元二次方程AX2+BX+C=0的實根。SETTALKOFFINPUT“請輸入二次項系數(shù):”TOAINPUT“請輸入一次項系數(shù):”TOBINPUTTO“請輸入常數(shù)項:”CK=B*B-4*A*CS=IIF(K>0,SQRT(K),0)例:A5、PRG求一元二次方程AX2+BX+C=0的實根。28

DOCASECASEA=0?“唯一實根:”,-C/BCASEA<>0.AND.K=0?“兩個相等實根:”,B/(2*A)CASEA<>0.AND.K>0?“第一個實根:”,(-B+S)/(2*A)?“第二個實根:”,(-B-S)/(2*A)OTHERWISE?“本方程無實根!”ENDCASEDOCASE29

使用分支語句應注意的問題:(1)IF……ENDIF和DOCASE……ENDCASE必須

配對使用,DOCASE與第一個CASE〈條件表達式〉之間不應有任何命令。(2)〈條件表達式〉可以是各種表達式或函數(shù)的組合,其值必須是邏輯值。(3)〈命令行序列〉可以由一個或多個命令組成,可以是條件控制語句組成的嵌套結(jié)構(gòu)。(4)DOCASE……ENDCASE命令,

每次最多只能執(zhí)行一個〈命令行序列〉。在多個CASE項的〈條件表達式〉值為真時,只執(zhí)行第一個〈條件表達式〉值為真的〈命令行序列〉,然后執(zhí)行ENDCASE的后面的第一條命令。使用分支語句應注意的問題:30三、循環(huán)結(jié)構(gòu)(重復結(jié)構(gòu))

1、DOWHILE…ENDDO語句(“當”循環(huán)、條件循環(huán))根據(jù)條件表達式的值,決定循環(huán)體內(nèi)語句的執(zhí)行次數(shù)。格式:DOWHILE<條件><語句序列1>

[LOOP]<語句序列2>

[EXIT]<語句序列3>ENDDO三、循環(huán)結(jié)構(gòu)(重復結(jié)構(gòu))

1、DOWHILE…ENDDO31條件循環(huán)體ENDDO后面的語句假真條件LOOPEXITENDDO后面的語句真假條件循環(huán)體ENDDO后面的語句假真條件LOOPEXITEN32說明:(1)若第一次判斷條件為假,循環(huán)體一次都不執(zhí)行(2)若循環(huán)體中包含LOOP命令,遇到LOOP時,結(jié)束循環(huán)體的本次執(zhí)行,不再執(zhí)行其后面的語句,而是轉(zhuǎn)回DOWHILE處重新判斷條件(3)若循環(huán)體中包含EXIT命令,遇到EXIT時,結(jié)束該語句的執(zhí)行,

轉(zhuǎn)去執(zhí)行ENDDO后面的語句說明:(1)若第一次判斷條件為假,循環(huán)體一次都不執(zhí)行33例:SETTALKOFF?“開始跑步”N=0DOWHILEN<=10?”開始的圈數(shù)是:”,NN=N+1ENDDO?”你可以休息了!”?”呼呼…累死人了?。?!”例:SETTALKOFF34例:SETTALKOFFSTORE0TOS,N

DOWHILE.T.N=N+1S=S+N

IFN>=10EXITENDIF

ENDDO?’S=‘+STR(S,2)RETURN例:SETTALKOFF35SETTALKOFFINPUT‘請輸入一個大于1的自然數(shù)’TONK=0&&K=0表示輸入的數(shù)為質(zhì)數(shù),K=1不是質(zhì)數(shù)J=2DOWHILEJ<N

IFMOD(N,J)<>0J=J+1

LOOP

ELSEK=1

EXIT

ENDIFENDDO

IFK=0?N,’是質(zhì)數(shù)‘ENDIFSETTALKONRETURNSETTALKOFFIFK=0362、FOR…ENDFOR語句(“計數(shù)”循環(huán)、步長循環(huán))根據(jù)用戶設(shè)置的循環(huán)變量的初值、終值和步長,決定循環(huán)體內(nèi)語句的執(zhí)行次數(shù)據(jù)。格式:FOR<循環(huán)變量>=<初值>TO<終值>[STEP<步長>]<循環(huán)體>ENDFOR|NEXT2、FOR…ENDFOR語句(“計數(shù)”循環(huán)、步長循環(huán))37注:(1)當無STEP語句時,默認步長為1。(2)初值、終值、步長都可以是數(shù)值表達式,卻僅在循環(huán)語句執(zhí)行開始時被計算一次。(3)可在循環(huán)體內(nèi)改變循環(huán)變量的值,但會影響循環(huán)體的執(zhí)行次數(shù)

(4)步長為零時,F(xiàn)OR循環(huán)為死循環(huán),步長可以是正值,也可以是負值。(5)步長是正值時,超過的含義是大于步長是負值時,超過的含義是小于。(6)ENDFOR可以換成NEXT。(7)LOOP、EXIT注:(1)當無STEP語句時,默認步長為1。38例:對給定的自然數(shù)K,求不大于K的奇數(shù)之和SETTALKOFFCLEARINPUT‘請輸入一個自然數(shù):’TOKS=0FORI=1TOKSTEP2S=S+IENDFOR?‘S=’,SSETTALKONRETURN例:對給定的自然數(shù)K,求不大于K的奇數(shù)之和393、SCAN…ENDSCANE語句(“指針”型循環(huán)控制語句)根據(jù)用戶設(shè)置的表中的當前記錄指針,決定循環(huán)體內(nèi)語句的執(zhí)行次數(shù)據(jù)。格式:SCAN[<范圍>][FOR<條件1>][WHILE<條件2>]<循環(huán)體>ENDSCAN執(zhí)行該語句時,記錄指針自動、依次地在制定范圍內(nèi)滿足條件的記錄上移動,對每一條記錄執(zhí)行循環(huán)體內(nèi)的命令。3、SCAN…ENDSCANE語句(“指針”型循環(huán)控制語句40注:(1)SCAN···ENDSCAN循環(huán)結(jié)構(gòu)隱含EOF()和

SKIP處理。(2)無范圍選項則默認值為所有記錄ALL。(3)如使用WHILE選項,遇到該選項的條件為假時,便結(jié)束循環(huán)。(4)LOOP和EXIT選項可以在該循環(huán)中使用,使用方法同DO循環(huán)。注:(1)SCAN···ENDSCAN循環(huán)結(jié)構(gòu)隱含EOF()41

使用循環(huán)語句時應注意的幾點

(1)DOWHILE和ENDDO、FOR和ENDFOR、SCAN和ENDSCAN必須配對使用。(2)〈命令行序列〉可以是任何FoxPro命令或語句,也可以是循環(huán)語句,即可以為多重循環(huán)。(3)〈循環(huán)變量〉應是數(shù)值型的內(nèi)存變量或數(shù)組元素。(4)EXIT和LOOP命令嵌入在循環(huán)體內(nèi),可以改變循環(huán)次數(shù),但是不能單獨使用。EXIT:跳出循環(huán),轉(zhuǎn)去執(zhí)行ENDDO、ENDFOR、ENDSCAN后面的第一條命令;LOOP:轉(zhuǎn)回到循環(huán)的開始處,重新對“條件”進行判斷,相當于執(zhí)行了一次ENDDO、ENDFOR、ENDSCAN命令,可改變〈命令行序列〉中部分命令的執(zhí)行次數(shù)。

EXIT、LOOP可以出現(xiàn)在〈命令行序列〉的任意位置。程序設(shè)計基礎(chǔ)課程課件42四、編程實例B1.PRG**a,b,c從大到小排序settalkoffClearinput"請輸入數(shù)值a:"toainput"請輸入數(shù)值b:"tobinput"請輸入數(shù)值c:"tocifa<btemp=aa=bb=tempendififa<ctemp=aa=cc=tempendif

ifb<ctemp=bb=cc=tempendifsettalkon?a,b,creturn四、編程實例B1.PRGifa<bifb<c43B2.PRG**求n個數(shù)中的最大數(shù)settalkoffclearinput"請輸入要比較的數(shù)值個數(shù)n:"ton

dimensiona(n)fori=1toninput"請輸入數(shù)值:"toa(i)endforfori=2tonifa(1)<a(i)temp=a(1)a(1)=a(i)a(i)=tempendifendfor?"最大數(shù)為:"??a(1)returnB2.PRGfori=2ton44例:B3、PRG求0---10之間奇數(shù)之和。SETTALKOFFI=0&&用于表示數(shù)值大小S=0&&用于求和DOWHILEI〈10I=I+1

IFINT(I/2)=I/2

&&MOD(I,2)=0I為偶數(shù)

LOOPELSES=S+IENDIFENDDO?“S=”,SRETURN

例:B3、PRG求0---10之間奇數(shù)之和。45例:B4、PRGSETTALKOFFSTORE0TOX,YDOWHILE.T.X=X+1

DOCASECASEMOD(X,2)<>0

&&奇數(shù)

?XY=Y+X

&&奇數(shù)之和

CASEX>=10EXITOTHERWISE

&&不是10以內(nèi)的奇數(shù)

LOOP

&&10以內(nèi)的偶數(shù)

ENDCASEENDDO?“Y=”??YSETTALKONRETURN例:B4、PRG46例:B5.PRG求4!SETTALKOFFCLEARJ=1R=1DOWHILEJ<=4R=R*J&&求階乘J=J+1&&改變數(shù)值的大小ENDDO?“R=”,RRETU例:B5.PRG47例21:A21·PRG求1!+2!+3!+4!+5!的和。SETPROCTOPROC1SETTALKOFFI=1S=0DOWHILEI<=5Y=1

DOSUBWITHI,YS=S+YI=I+1ENDDORETU**PROC1·PRG**PROCSUB&&J的階乘PARAP,RJ=1DOWHILEJ<=PR=R*JJ=J+1ENDDORETU例21:A21·PRG求1!+2!+3!+4!+5!的和。48例:B6.PRG用戶從鍵盤上任意輸入一個字符串,并以相反順序顯示出來settalkoffclearaccept"任意輸入一字符串:"tozfs=0dowhiles<len(zf)a=substr(zf,len(zf)-s,1)@4,ssayas=s+1enddoreturn例:B6.PRG用戶從鍵盤上任意輸入一個字符串,并以相反順49方法2:CLEAACCEPT“請輸入字符串:”TOZFFORI=LEN(ZF)TO1STEP-1A=SUBS(A,I,1)@8,LEN(ZF)-ISAYAENDFOR方法2:50

SETTALKOFFUSERCDAI=0DOWHILE.NOT.EOF()IF性別=‘男’I=I+1ENDIFSKIPENDDO?‘I=’,IUSERETURNSETTALKOFFUSERCDACOUNTALLTONGOTOPM=0FORI=1TONIF性別=‘男’M=M+1ENDIFSKIPENDFOR?‘M=’,MUSERETURN例:B7、PRG統(tǒng)計‘RCDA’數(shù)據(jù)表中男性人數(shù)。(3種方法)SETTALKOFFSETTALKOFF例51例:B8·PRG用FOR語句改寫例B7.PRG。SETTALKOFFUSERCDAS=0SCANALL

FOR性別=‘男’S=S+1ENDSCAN@4,5SAY‘男性人數(shù)為:’@4,20saysUseretu例:B8·PRG用FOR語句改寫例B7.PRG。52例:B9·PRG在‘RCDA’數(shù)據(jù)表中,對60年以后出生的女職工,輸出其編號,姓名。SETTALKOFFCLEARUSERCDASCANFOR出生日期>CTOD(“01/01/60”)IF性別=‘女’?編號,姓名ELSELOOPENDIFENDSCANRETU例:B9·PRG在‘RCDA’數(shù)據(jù)表中,53例:B10·PRG打開‘RCDA’表,只顯示3位男性的記錄。SETTALKOFFCLEARUSERCDAN=0SCANFOR性別=‘男’WHILEN<3?編號,姓名N=N+1ENDSCANUSERETU例:B10·PRG打開‘RCDA’表,只顯示3位男性的記錄。54§5、4模塊化程序設(shè)計應用程序一般是多模塊程序,包含多個模塊程序。模塊:一個相對獨立的程序段??梢允侵鞒绦?、子程序、過程或自定義函數(shù)。VFP中,模塊可以是命令文件,也可以是過程。主程序:調(diào)用其他程序而自身不被其它程序調(diào)用的程序。子程序:被調(diào)用的以·PRG為擴展名的獨立的程序文件。

是有相對獨立性、通用性的程序?!?、4模塊化程序設(shè)計應用程序一般是多模塊程序,包含多55子程序與主程序的區(qū)別(1)子程序的第一條語句可以是PARAMETERS命令,用來實現(xiàn)參數(shù)的傳遞,主程序中不包含此語句。(2)主程序里必須包含調(diào)用子程序的語句。子程序的大致結(jié)構(gòu)

PARA<參數(shù)表><命令序列>RETURN|RETRY子程序與主程序的區(qū)別56一、子程序和參數(shù)傳遞1、子程序的建立、調(diào)用和返回建立:MODIFYCOMMAND<程序文件名>|?調(diào)用:DO<程序1>[WITH<參數(shù)表>][<程序2>]返回:RETURN[<表達式>|TO<程序名>|TOMASTER]一、子程序和參數(shù)傳遞572、子程序調(diào)用中的參數(shù)傳遞說明:當調(diào)用命令含參數(shù)時,子程序中一定要有參數(shù)說明語句發(fā)送數(shù)據(jù)命令:主程序、調(diào)用程序DO<子程序名>WITH<參數(shù)表>DO<文件名>|<過程名>(<實參1>,[<實參2>,…])默認按值傳遞如果實參是變量,可通過命令重新設(shè)置參數(shù)傳遞的方式

SETUDFPARMSTOVALUE|REFERENCE程序設(shè)計基礎(chǔ)課程課件58接收數(shù)據(jù)命令:子程序、被調(diào)用程序PARAMETERS<形參變量1>[,<形參變量2>,…](私有變量)LPARAMETERS<形參變量1>[,<形參變量2>,…](局部變量)以上兩條命令都是模塊程序的第一條可執(zhí)行命令。(1)PARAMETERS出現(xiàn)在它定義的參數(shù)被使用前,

先定義,后使用(2)參數(shù)的位置、個數(shù)、類型實參類型:常量、變量、一般格式的表達式形參的數(shù)目不能少于實參的數(shù)目(3)主程序中的參數(shù)是

單個變量:按地址傳遞

表達式或常量:按值傳遞。接收數(shù)據(jù)命令:子程序、被調(diào)用程序59主程序:Parameterssonv?sonvSonv=‘son’returnMainv=‘main’Dosonwithmainv?mainvCancel子程序:主程序:ParameterssonvMainv=‘mai60二、自定義函數(shù)和過程1、自定義函數(shù)的設(shè)計(1)定義[FUNCTION<函數(shù)名>][PARAMETERS<參數(shù)表>]<命令行序列>RETURN<表達式>ENDFUNC說明:如果用一個獨立文件形式存儲,

FUNCTION<過程名>語句可省略;函數(shù)名就是程序文件名。二、自定義函數(shù)和過程1、自定義函數(shù)的設(shè)計61說明:(1)若無ENDFUNC,過程結(jié)束于下一條PROCEDURE|FUNCTION命令或文件結(jié)尾處。(2)執(zhí)行到RETURN語句,則返回到調(diào)用程序(或命令窗口)若缺省RETURN命令,則在過程結(jié)束處自動執(zhí)行一條

隱含的RETURN命令。若RETURN命令不帶<表達式>,則返回邏輯真.T.說明:62(2)調(diào)用函數(shù)名(參數(shù)表)說明:A、自定義函數(shù)能以一個獨立的文件存儲,也可包含在調(diào)用它的程序中作為它的一部分出現(xiàn);B、自定義函數(shù)名不能與VFP的系統(tǒng)函數(shù)同名,也不能與內(nèi)存變量同名;最多由10個字符組成,以字母或下劃線開頭,可含字母、數(shù)字和下劃線。(2)調(diào)用632、過程的設(shè)計[PROCEDURE<過程名>][PARAMETERS<參數(shù)表>]<命令行序列>ENDPROC例:SETTALKOFFCLEA?’這是主程序’DOPROC1RETURNPROCDUREPROC1?’調(diào)用過程PROC1’ENDPROCSETTALKON2、過程的設(shè)計PROCDUREPROC164過程返回語句:返回過程的調(diào)用處(1)語句格式:

RETURN[TOMASTER|TO過程]|RETRY(2)語句功能:將控制返回到調(diào)用程序中調(diào)用命令的下一語句。RETURNTOMASTER:執(zhí)行到該語句時控制返回到最高層命令文件—主程序。RETURNTO<過程>:使控制返回到指定的過程。RETRY:使控制返回到調(diào)用語句本身。過程返回語句:返回過程的調(diào)用處653、存放為單獨文件的函數(shù)與過程的調(diào)用過程:VFP中,程序是獨立存放在磁盤上的程序文件,使用時用戶通過文件名調(diào)用并執(zhí)行。為實現(xiàn)用戶的某種目的,很可能要由多個程序完成。(1)過程可放在程序文件代碼的后面,也可保存在稱為過程文件的單獨文件里。(2)過程文件建立的命令(.PRG):MODIFYCOMMAND(3)在調(diào)用過程文件中的過程之前先要打開過程文件

3、存放為單獨文件的函數(shù)與過程的調(diào)用66打開過程文件語句VFP系統(tǒng)規(guī)定,任何時刻只能打開一個過程文件,當新的過程文件打開時,自動關(guān)閉原來打開的過程文件。(1)語句格式

SETPROCEDURETO<過程文件1>[,<過程文件2>,…][ADDITIVE](2)語句功能打開一個以過程文件名為名的過程文件。打開過程文件語句67模塊調(diào)用的格式:調(diào)用過程語句:執(zhí)行已有的過程格式一:使用DO命令:

DO〈過程名〉|<過程名>[WITH<參數(shù)表>]注:WITH中參數(shù)與PARAMETERS中的參數(shù)一致。格式二:在名字后加一對小括號

<文件名>|<過程名>()說明:格式二可作為命令使用(返回值被忽略),也可作為函數(shù)出現(xiàn)在表達式里。這里,<文件名>不能包含擴展名模塊調(diào)用的格式:調(diào)用過程語句:執(zhí)行已有的過程68關(guān)閉過程文件語句關(guān)閉過程文件語句,就是將已打開的過程文件關(guān)閉。(1)語句格式

CLOSEPROCEDURE或SETPROCEDURETO(2)語句功能關(guān)閉當前打開的過程文件。關(guān)閉所有打開的過程文件:SETPROCEDURETO關(guān)閉個別過程文件:RELEASEPROCEDURE<過程文件1>[,<過程文件2>,…]關(guān)閉過程文件語句694、過程和函數(shù)的參數(shù)傳遞過程和函數(shù)都是子程序數(shù)組在傳遞時是按地址傳遞,傳遞的是數(shù)組的首地址。5、接收函數(shù)的返回值說明:函數(shù)默認返回值是.T.,可通過RETURN命令返回任意值。例:FUNCTIONPLUS3PARANUMRETURNNUM+3ENDFUNCM=PLUS(33)?PLUS(33)?M

4、過程和函數(shù)的參數(shù)傳遞70子程序與過程的區(qū)別*子程序必須獨立于調(diào)用程序,以.PRG文件存盤。過程是存放在過程文件(·PRG)中。*過程的第一條語句必須是以PROC<過程名>語句開頭。*子程序的調(diào)用同過程的調(diào)用子程序與過程的區(qū)別71**主程序main.prgsettalkoffpublica,b,cstore1toa,b,c

setproceduretoproc1

dopc1?a

dopc2?b,c

closeprocsettalkonreturn**proc1.prgprocedurepc1a=a*2+1returnprocedurepc2b=b*4+1c=a*2+1dopc3returnprocedurepc3c=c*2+5return

**主程序main.prg**proc1.prg72例2:A2·PRGS=0FORI=1TO5K=1

DOBSUBS=S+KENDFOR?‘S=’,SRETU**BSUB·PRG**FORJ=1TOIK=K*J

&&I的階乘ENDFORRETU

例2:A2·PRG**BSUB·PRG**73三、變量的作用域變量的屬性:類型、取值、作用域變量的作用域:變量在什么范圍內(nèi)是有效或能夠被訪問的。VFP中,根據(jù)變量的作用域分內(nèi)存變量可分為:公共變量、私有變量、局部變量1、公共變量(全局變量)定義格式:PUBLIC<內(nèi)存變量表>

初始值:.F.內(nèi)存變量:簡單變量、數(shù)組變量三、變量的作用域變量的屬性:類型、取值、作用域74功能:變量的作用域貫穿整個程序,即使程序執(zhí)行完畢返回到命令窗口它仍然存在。只有當執(zhí)行CLEARMEMORY、RELEASE、QUIT等命令后,公共變量才被釋放。說明:公共變量要先建立后使用命令窗口中直接使用而由系統(tǒng)自動隱含建立的變量是公共變量2、私有變量(局部變量)在程序中直接使用(沒有通過PUBLIC和LOCAL命令事先聲明)而由系統(tǒng)自動隱含建立的變量是私有變量。功能:作用域是建立它的模塊及其下屬的各層模塊,一旦建立它的模塊程序運行結(jié)束,私有變量將被刪除。功能:變量的作用域貫穿整個程序,753、局部變量(本地變量)格式:LOCAL<內(nèi)存變量表>功能:變量的作用域局限于建立它的模塊,不能在上層或下層模塊中使用。一旦建立它的程序執(zhí)行完畢,它也自動地被系統(tǒng)刪除說明:局部變量要先建立后使用4、變量屏蔽私有變量和上級程序的變量可以同名。當同名時,在定義私有變量的程序內(nèi),將隱藏上級程序的同名變量;返回上級程序時,恢復隱藏的上級同名變量。3、局部變量(本地變量)76變量屏蔽語句:PRIVATE<內(nèi)存變量表>PRIVATEALL[LIKE|EXCEPT<通配符>]功能:隱藏當前程序中某些與上層調(diào)用程序中同名的變量,使這些變量的作用范圍局限在當前程序內(nèi)。說明:*局部變量既可用PRIVATE定義,也可不用PRIVATE定義。*若局部變量不用PRIVATE定義,

下層中和上層中同名的變量的操作結(jié)果將會帶回到上層。5、有關(guān)全局變量和局部變量問題(1)定義局部變量的好處:節(jié)約內(nèi)存空間,避免重名變量被修改其內(nèi)容(2)PUBLIC屏蔽變量命令變量屏蔽語句:PRIVATE<內(nèi)存變量表>77例:A25·PRGSTETALKOFFCLEARPUBLICXX=7Y=6Z=5DOCSUB?“X=”,X,“Y=”,Y,“Z=”,Z**7,6,10RETU

**CSUB·PRG**PRIVATEX,YX=0X=X+3Y=X+1Z=Z+5?“X=”,X,“Y=”,Y,“Z=”,Z**3,4,10RETU例:A25·PRG**CSUB·PRG**78例:A26·PRGSETTALKOFFCLEAR

SETPROCTOPROC3PUBLICX,Y,MSTORE1TOX,YM=0

DOSUB1?M,X,Y324Z=1

DOSUB2?X,Y,Z

SETPROCRETU

**PROC3·PRG**PROCSUB1M=1DOWHILEM<=2X=X*M12Y=Y+M24

DOSUB3M=M+1ENDDORETU

PROCSUB2X=X*MY=Y+MRETUPROCSUB3PRIVATEZZ=X+Y?“Z=”,Z36

RETU例:A26·PRG**PROC3·PRG79SETTALKOFFSETSAFETYOFFCLEARPUBLICA,B,CA=1B=2C=3DOSUB1WITHA,B?A,B,C3203RETURNSUB1.PRGPARAMETERSA1,B1B1=10*B120A1=A1+23DOSUB2WITHA1,B1RETURNSUB2.PRGPARAMETERSX,Y

A=4+X7

B=5+Y25?A,B725WAITRETURNSETTALKOFFSUB1.PRGSUB2.PRG80

**MAIN.PRGSETTALKOFFCLEARA=1B=2C=3D0SUB1WITHA,B?A,B,C3203RETURN**SUB1.PRGPARAA1,B1B1=10*B120A1=A1+23C1=A1*B160DOSUB2?A1,B1,C1

32018RETURN

**SUB2.PRGPRIVATEA1,B1A1=4B1=5C1=9+A1+B1?A1,B1,C14518RETURN**MAIN.PRG**SUB1.PRG**SUB2.P81SETPROCTOPROC2SETTALKOFFCLEARST=“0123456789”STT=“”DOSUB1WITHST,STTDOSUB2WITHSTT,5SETPROCTORETU**PROC2·PRG**PROCSUB1PARAX,YK=LEN(X)DOWHILEK>0Y=Y+SUBSTR(X,K,1)K=K-1ENDDO?YRETUPROCSUB2K=LEN(XX)I=0?DOWHILEK>NSTART=I*N+1??SUBSTR(XX,START,N)I=I+1K=K-NENDDOSTART=I*N+1??SUBSTR(XX,START)RETU例22:A22·PRGSETPROCTOPROC2**PROC2·PRG82

SETTALKOFFPUBLICX1X1=‘中國’Y1=‘反對’Z=‘’DOSUB1WITHZ?X1+’人’+ZSETTALKONRETURN

*SUB1.PRGPARAYPRIVATEX1X1=‘中國共產(chǎn)黨’X3=‘臺獨’Y=X2+X3?X1+YRETURNSETTALKOFF*SUB1.PRG83設(shè)有如下主程序和子程序段,請寫出N=2,A分別為2和5時的結(jié)果*主程序SETTALKOFFPUBLICYCLEAR=1S=0INPUT‘N=‘TON*子程序PARAXY=(X+1)*(X+1)RETURNDOWHILER<=NINPUT‘A=‘TOADOSQWITHAS=S+Y?A,YR=R+1ENDDO?’S=‘+STR(S,5)RETURN設(shè)有如下主程序和子程序段,請寫出N=2,A分別為2和5時的結(jié)84SETTALKOFFDIMENA(2,2)I=1DOWHILEI<3J=1DOWHILEJ<3A(I,J)=I*J??A(I,J)J=J+1ENDDO?I=I+1ENDDORETURNSETTALKOFFSTORE0TOXSTORE‘ABCDEF’TON@1,1SAY‘請選擇:’GETXREADA=SUBSTR(N,X,X)B=LEFT(N,X)?A,SPACE(2),B,SPACE(2),CSETTALKONSETTALKOFFSETTALKOFF85習題1、某數(shù)據(jù)庫TEACHER.DBF姓名性別年齡唐光女42李紅女55張兵男50王偉男32李真男40陳明女28下面程序的運行結(jié)果是找出年齡相差不小于16歲的教師姓名習題1、某數(shù)據(jù)庫TEACHER.DBF86SETTALKOFFCLEARUSETEACHERGOTOPDOWHILENOTEOF()

NL=年齡XM=姓名DOWHILENOTEOF()NL1=年齡XM1=姓名IFABS(NL-NL1)>=16?XM+’與’+XM1+‘相差不小于16歲‘ENDIFSKIPENDDOLOCAFOR姓名=XMSKIPENDDOUSERETURNSETTALKOFFIFABS(NL-NL1872、有一個主程序和一個過程文件如下:運行該程序后,輸出變量A,B,C的值分別是3,5,19。請按要求在以下程序中填上適當?shù)恼Z句。*主程序MAIN.PRGSETTALKOFFPUBLICA,B,CSTORE1TOA,B,C__________DOPC1?ADOPC2?B,CCLOSEPROCEDURESETTALKONRETURN*PROC1.PRG過程文件PROCEDUREPC1A=A*2+1RETURNPROCEDUREPC2B=B*4+1C=A*2+1__________RETURNPROCEDUREPC3C=C*2+5RETURN2、有一個主程序和一個過程文件如下:運行該程序后,輸出變量A883、數(shù)據(jù)庫文件GRADE.DBF的內(nèi)容如下:Record#學號姓名成績198104張三78298102李四90398101王五82498103周六64598105鄭七85寫出執(zhí)行以下程序的運行結(jié)果SETTALKOFFCLEARUSEGRADEN=1ZD=成績SCANIF成績<ZDZD=成績N=RECNO()ENDIFENDSCANGON?學號,姓名,成績USESETTALKONRETURN3、數(shù)據(jù)庫文件GRADE.DBF的內(nèi)容如下:SETTAL894、SETTALKOFFCLEARS=0S=1DOWHILEX<=11IFMOD(X,2)<>0??’‘+STR(X,2)+’‘+STR(X*X,4)S=S+XENDIFX=X+1ENDDO?’S=‘+STR(S,4)RETURN5、SETTALKOFFT=‘申奧成功了’Y=‘’DOWHILELEN(T)>=4Y=Y+SUBSTR(T,1,2)+’*’T=SUBSTR(T,3)ENDDO?Y+TWAITSETTALKONRETURN4、SETTALKOFF5、SETTALKOF90演講完畢,謝謝觀看!演講完畢,謝謝觀看!91第五章程序設(shè)計基礎(chǔ)第五章程序設(shè)計基礎(chǔ)92§5、1程序設(shè)計概述一、程序的概念程序:完成一定任務(wù)的一組命令的有序集合。程序設(shè)計:計算機用戶將解決某一實際問題所用的命令按一定的邏輯順序編制成程序,并以文件的形式存放于磁盤的過程。優(yōu)點:(1)可以利用編輯器,方便的輸入、修改、保存文件。(2)可用多種方式,多次運行程序。(3)可在一個程序中調(diào)用另一個程序?!?、1程序設(shè)計概述一、程序的概念93VisualFoxPro的工作方式{{程序文件方式交互式方式單命令方式菜單方式菜單方式、命令方式、程序方式、工具方式VisualFoxPro的工作方式{{程序文件方式交互式941.單命令方式單命令方式:輸入一條命令,完成一個操作的工作方式。注:(1)VFP單命令方式:利用Command窗口來實現(xiàn)的。(2)Command窗口不僅是VFP命令的執(zhí)行窗口,也是VFP命令文件的編輯窗口。2.菜單方式通過打開不同的菜單選擇并完成不同的操作。3.程序文件方式

程序文件(簡稱程序)也叫做命令文件。命令方式:通過程序文件中的命令完成不同的操作。1.單命令方式95二、程序文件的建立、執(zhí)行與編輯說明:程序由命令語句、函數(shù)、過程等程序代碼組成;

通過調(diào)用系統(tǒng)內(nèi)置的文本編輯器進行建立和修改;

程序文件的擴展名為.prg1、建立程序文件A、菜單方式B、項目管理器中創(chuàng)建C、命令方式格式:MODIFYCOMMAND[<文件名>]|?2、保存程序二、程序文件的建立、執(zhí)行與編輯說明:程序由命令語句、函數(shù)、過963、編輯、修改程序文件格式:MODIFYCOMMAND<程序名>|?4、運行程序格式:DO<程序名>[WITH<實參表>]5、使用VFP設(shè)計工具編寫代碼三、程序文件的注釋命令與程序結(jié)束命令1、注釋命令格式:NOTE|*|&&[<注釋內(nèi)容>]

注釋行:以*、NOTE開頭的命令行(獨成一行)

且只能出現(xiàn)在一行的開始

命令行后的注釋:&&(在其他命令行之后)3、編輯、修改程序文件972、程序結(jié)束命令格式:CANCEL說明:執(zhí)行CANCEL將釋放所有私有內(nèi)存變量

程序中的常用命令程序開頭常用命令:CLEARSETTALKOFF程序末尾常用命令:RETURNCANCELSETTALK

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論