數(shù)據(jù)庫系統(tǒng)與Visual FoxPro第四章課件_第1頁
數(shù)據(jù)庫系統(tǒng)與Visual FoxPro第四章課件_第2頁
數(shù)據(jù)庫系統(tǒng)與Visual FoxPro第四章課件_第3頁
數(shù)據(jù)庫系統(tǒng)與Visual FoxPro第四章課件_第4頁
數(shù)據(jù)庫系統(tǒng)與Visual FoxPro第四章課件_第5頁
已閱讀5頁,還剩121頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章

程序設(shè)計基礎(chǔ)

11/19/20221第四章第四章程序設(shè)計基礎(chǔ)

11/10/20221第四章4.1程序的建立、修改和運行

一、程序文件的建立與修改

1.方法一:用命令方式命令格式:MODIFYCOMMAND<文件名>功能:打開文本編輯窗口,用來建立或修改程序文件。2.方法二:用菜單方式11/19/20222第四章4.1程序的建立、修改和運行

一、程序文件的建立與修改11/二、程序的運行

1.方法一:用命令方式命令格式:DO<文件名>功能:執(zhí)行由<文件名>表示的程序。2.方法二:用菜單方式如要運行的程序沒有打開,可單擊主窗口中的“程序”菜單下的“運行”命令,彈出運行對話框,選擇要運行的程序,單擊“運行”按鈕。11/19/20223第四章二、程序的運行11/10/20223第四章4.2結(jié)構(gòu)化程序設(shè)計

4.2.1程序文件中的常用命令一、程序結(jié)尾的專用命令1.RETURN命令格式:RETURN[<表達式>][TOMASTER]功能:程序、過程或函數(shù)的末尾可放一條RETURN命令,它能使程序執(zhí)行結(jié)束,并返回到調(diào)用它的上級程序繼續(xù)執(zhí)行,若無上級程序則返回到命令窗口。說明:表達式指定返回調(diào)用程序的表達式;TOMASTER將返回最高層次的調(diào)用程序。11/19/20224第四章4.2結(jié)構(gòu)化程序設(shè)計

4.2.1程序文件中的常用命令11/2.CANCEL命令格式:CANCEL功能:CANCEL能使程序運行終止,清除程序的私有變量,并返回到命令窗口。3.QUIT命令格式:QUIT功能:該命令與文件菜單的退出命令功能相同,使系統(tǒng)正常退出VisualFoxPro6.0,返回到Windows。11/19/20225第四章2.CANCEL命令11/10/20225第四章二、注釋命令格式1:NOTE|*<注釋字符串>格式2:&&<注釋字符串>說明:注釋命令不做任何操作,只是注釋標(biāo)記,用于說明程序或命令的功能。NOTE或*用于整行注釋,它必須寫在每一個注釋行的開頭;而&&用于注釋一行的部分內(nèi)容,它可以寫在行中(命令的尾部)。11/19/20226第四章二、注釋命令11/10/20226第四章三、程序中兩個常用命令1.清屏命令格式:CLEAR功能:清除屏幕上的顯示內(nèi)容。一般用于程序開頭。2.SETTALKON|OFF功能:用于設(shè)置一些非輸出語句(如APPEND、SORT、GO等)是否顯示命令的執(zhí)行結(jié)果。ON為允許顯示,OFF為不允許顯示。一般在程序開始設(shè)置為OFF狀態(tài)。11/19/20227第四章三、程序中兩個常用命令11/10/20227第四章四、輸入輸出專用命令1.字符接收命令格式:ACCEPT[<提示信息>]TO<內(nèi)存變量名>功能:將從鍵盤上接收的字符串存入指定的內(nèi)存變量中。說明:執(zhí)行此語句時,先在屏幕上顯示<提示信息>,光標(biāo)緊跟其后,然后暫停程序運行,等待用戶從鍵盤上輸入信息。例:ACCEPT“請輸入姓名:”TOXM11/19/20228第四章四、輸入輸出專用命令11/10/20228第四章格式:INPUT[<提示信息>]TO<內(nèi)存變量名>功能:用于接收從鍵盤上輸入的表達式,并將計算結(jié)果存入指定的內(nèi)存變量中。說明:INPUT語句與ACCEPT語句的執(zhí)行過程相同,功能相似。INPUT語句與ACCEPT語句的區(qū)別是:ACCEPT命令只能接收字符串,而INPUT語句可以接收任意類型的數(shù)據(jù);如果輸入的是字符串,ACCEPT語句在接受數(shù)據(jù)時,不用使用字符型定界符;而INPUT接受字符型數(shù)據(jù)時,必須用定界符括起來。11/19/20229第四章格式:INPUT[<提示信息>]TO<內(nèi)存變量名>113.輸入一個字符語句格式:WAIT[<信息文本>][TO<內(nèi)存變量>][WINDOW[AT<行>,<列>]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<數(shù)值表達式>]功能:暫停程序的運行,直到用戶輸入一個字符。也可只用于輸出一條提示信息。例:WAIT“請檢查輸人內(nèi)容!”WINDOW11/19/202210第四章3.輸入一個字符語句11/10/202210第四章(二)定位輸入輸出命令格式:@<行,列>[SAY<表達式1>][GET<變量名>][DEFAULT<表達式2>]功能:在屏幕的指定行列輸出SAY子句的表達式值,并可修改GET子句的變量值。說明:(1)<行,列>表示數(shù)據(jù)在窗口中顯示的位置。(2)SAY子句用來輸出數(shù)據(jù),GET子句用來輸入及編輯數(shù)據(jù)。11/19/202211第四章(二)定位輸入輸出命令11/10/202211第四章(3)GET子句中的變量必須具有初值,或用DEFAULT子句的<表達式2>指定初值。(4)GET子句的變量必須用READ命令來激活。例:@3,10SAY姓名@4,10SAY“成績:”GETCJDEFAULT0READ11/19/202212第四章(3)GET子句中的變量必須具有初值,或用DEFAULT子句4.2.2程序的控制結(jié)構(gòu)

1.順序結(jié)構(gòu)在程序執(zhí)行時,按程序中命令的書寫順序依次執(zhí)行。2.分支結(jié)構(gòu)能根據(jù)指定條件的不同當(dāng)前值,在兩條或多條程序路徑中選擇一條執(zhí)行。3.循環(huán)結(jié)構(gòu)能使循環(huán)體中的語句(或命令)序列重復(fù)執(zhí)行若干次。4.過程結(jié)構(gòu)

11/19/202213第四章4.2.2程序的控制結(jié)構(gòu)

1.順序結(jié)構(gòu)11/10/2024.2.3順序結(jié)構(gòu)

例4-1:從鍵盤隨機輸入某個表的文件名,要求打開并顯示此表的內(nèi)容。CLEARSETTALKOFFACCEPT“請輸入表文件名”TOFILENAMEUSE(FILENAME)LISTUSE11/19/202214第四章4.2.3順序結(jié)構(gòu)

例4-1:從鍵盤隨機輸入某個表的文件名例:圓的面積計算程序為SETTALKOFFCLEARINPUT“請輸入圓半徑:”TORS=3.1416*R*R?“圓面積=”,S上述3條命令的先后次序不能顛倒:只有執(zhí)行INPUT后才能計算S,隨后才能輸出S,否則會因變量找不到而無法繼續(xù)下去。11/19/202215第四章例:圓的面積計算程序為11/10/202215第四章4.2.4分支結(jié)構(gòu)

一、簡單的條件語句語句格式:IF<邏輯表達式><語句序列>ENDIF功能:首先計算<邏輯表達式>的值,若其值為真,對IF與ENDIF之間的語句順序執(zhí)行,然后執(zhí)行ENDIF后面的語句;若其值為假,直接執(zhí)行ENDIF后面的語句。11/19/202216第四章4.2.4分支結(jié)構(gòu)

一、簡單的條件語句11/10/2022例4-3:將商品銷售表.DBF中第一個單價在2500元以上的商品價格降低5%。USE商品銷售表LOCATEFOR單價>2500IFFOUND()DISPLAY商品編號,單價REPLACE單價WITH單價*0.95DISPLAY商品編號,單價ENDIFUSERETURN11/19/202217第四章例4-3:將商品銷售表.DBF中第一個單價在2500元以二、帶ELSE的條件語句語句格式:IF<邏輯表達式><語句序列l(wèi)>ELSE<語句序列2>ENDIF功能:若<邏輯表達式>值為真,先執(zhí)行<語句序列1>,然后再執(zhí)行ENDIF后面的語句;若其值為假,先執(zhí)行<語句序列2>,然后再執(zhí)行ENDIF后面的語句。11/19/202218第四章二、帶ELSE的條件語句11/10/202218第四章例4-4:鐵路托運行李,假設(shè)每張車票可按每千克0.5元托運50千克以內(nèi)的行李,如果超過50千克時,超過部分每千克加價0.3元。計算公式和程序如下:

0.5*W(W<=50,W為行李重量)X=0.5*50+0.8*(W-50)(W>50)

11/19/202219第四章例4-4:鐵路托運行李,假設(shè)每張車票可按每千克0.5元托運5SETTALKOFFINPUT“請輸入行李的重量:”TOWIFW<=50X=0.5*WELSEX=0.5*50+0.8*(W-50)ENDIF?“行李重量為”+STR(W,6,2)+“千克,運費為”+STR(X,6,2)+“元”CANCEL11/19/202220第四章SETTALKOFF11/10/202220第四章語句格式:IF<條件表達式1><語句序列1>ELSEIF<條件表達式2><語句序列2>ELSE<語句序列3>ENDIFENDIF11/19/202221第四章語句格式:IF<條件表達式1>11/10/202221第例4-5:上例托運行李的計算公式改為:

0.5*W(W<=50)X=0.5*50+0.8*(W-50)(100>=W>50)0.5*50+0.8*50+1.0*(W-100)(W>100)11/19/202222第四章例4-5:上例托運行李的計算公式改為:11/10/20222STETALKOFFINPUT“輸入行李重量”TOWIFW<=50X=0.5*WELSEIFW<=100X=0.5*50+0.8*(W-50)ELSEX=0.5*50+0.8*50+1.0*(W-100)ENDIFENDIF?“行李運費為:”,XCANCEL

11/19/202223第四章STETALKOFF11/10/202223第四章三、多分支語句

DOCASECASE<邏輯表達式1><語句序列l(wèi)>CSAE<邏輯表達式2><語句序列2>…………CASE<邏輯表達式n><語句序列n>[OTHERWISE<語句序列n+l>]ENDCASE11/19/202224第四章三、多分支語句11/10/202224第四章功能:執(zhí)行多分支語句時,系統(tǒng)將依次判斷邏輯表達式值是否為真,若某個邏輯表達式值為真,則執(zhí)行該CASE段的語句序列,然后執(zhí)行ENDCASE后面的語句。在各邏輯表達式值均為假的情況下,若有OTHERWISE子句,就執(zhí)行<語句序列n+1>,然后結(jié)束多分支語句,否則直接結(jié)束多分支語句。11/19/202225第四章功能:執(zhí)行多分支語句時,系統(tǒng)將依次判斷邏輯表達式值是否為真,我們用DOCASE語句來實現(xiàn)例4-5的計算,只要將IF語句的嵌套部分改為:DOCASECASEW<=50X=0.5*WCASEW<=100.AND.W>50X=0.5*50+0.8*(W-50)CASEW>100X=0.5*50+0.8*50+1.0*(W-100)ENDCASE11/19/202226第四章我們用DOCASE語句來實現(xiàn)例4-5的計算,只要將IF語句的例4-6:顯示當(dāng)前季節(jié)程序CLEARYue=MONTH(DATE())DOCASECASEINLIST(yue,3,4,5)JJ=“春”CASEINLIST(yue,6,7,8)JJ=“夏”CASEINLIST(yue,9,10,11)JJ=“秋”CASEINLIST(yue,12,1,2)JJ=“冬”ENDCASEWAITJJWINDOW11/19/202227第四章例4-6:顯示當(dāng)前季節(jié)程序11/10/202227第四章在構(gòu)成分支結(jié)構(gòu)時需注意:(1)條件語句中的IF和ENDIF必須配對出現(xiàn);同樣,多分支語句中的DOCASE和ENDCASE也須配對出現(xiàn)。(2)為使程序清晰易讀,對分支、循環(huán)等結(jié)構(gòu)應(yīng)使用縮格書寫方式,見上述例。(3)分支、循環(huán)的每種語句都不允許在一個命令行中輸入完,必須按本書所示語句格式一行一個回車分行鍵人。由此可見,這些語句不能用于命令窗口中。11/19/202228第四章在構(gòu)成分支結(jié)構(gòu)時需注意:11/10/202228第四章4.2.4循環(huán)結(jié)構(gòu)

一、條件循環(huán)語句格式:DOWHILE<邏輯表達式><語句序列>ENDDO功能:若DOWHILE子句的循環(huán)條件為假循環(huán)就結(jié)束,執(zhí)行ENDDO子句后面的語句;條件為真則執(zhí)行循環(huán)體,一旦遇到ENDDO就自動返回到DOWHILE重新判斷循環(huán)條件是否成立,以決定是否繼續(xù)循環(huán)。11/19/202229第四章4.2.4循環(huán)結(jié)構(gòu)

一、條件循環(huán)11/10/202229第說明:1.語句格式中的<邏輯表達式>稱為循環(huán)條件,<語句序列>稱為循環(huán)體,循環(huán)體可以是一個語句或一組語句。2.ENDDO語句是循環(huán)終止語句,表示循環(huán)以此語句為終點。但執(zhí)行到ENDDO語句時并不是直接退出循環(huán),而是轉(zhuǎn)到DOWHILE語句去判斷<邏輯表達式>的值的真假。3.循環(huán)語句本身不會修改執(zhí)行條件,因此循環(huán)體內(nèi)一定要設(shè)置修改循環(huán)條件的語句。否則,可能出現(xiàn)死循環(huán),無法退出循環(huán)。11/19/202230第四章說明:11/10/202230第四章例4-7:試編一程序,顯示商品銷售表.DBF中所有單價超過2000元的商品編號。CLEARUSE商品銷售表DOWHILE.NOT.EOF()IF單價>2000?商品編號ENDIFSKIPENDDOUSE11/19/202231第四章例4-7:試編一程序,顯示商品銷售表.DBF中所有單價超過例4-8:STORE0TOK1,K2,K3ZS=1DOWHILEZS<=200ACCEPT“請輸入選票代號”TOXPDOCASECASEXP=“1”K1=K1+1CASEXP=“2”K2=K2+lCASEXP=“3”K3=K3+1ENDCASEZS=ZS+1ENDDO?“甲得票數(shù):”+STR(K1)?“乙得票數(shù):”+STR(K2)?“丙得票數(shù):”+STR(K3)RETURN11/19/202232第四章例4-8:STORE0TOK1,K2,K31二、步長循環(huán)語句格式:FOR<內(nèi)存變量>=<數(shù)值表達式1>TO<數(shù)值表達式2>[SETP<數(shù)值表達式3>]<語句序列>ENDFOR|NEXT說明:語句格式中的<內(nèi)存變量>稱為循環(huán)變量,<數(shù)值表達式l>、<數(shù)值表達式2>、<數(shù)值表達式3>分別稱為初值、終值、步長。步長的缺省時值為1。11/19/202233第四章二、步長循環(huán)11/10/202233第四章功能:語句執(zhí)行時,通過比較循環(huán)變量值與終值來決定是否執(zhí)行<語句序列>。步長為正數(shù)時,若循環(huán)變量值不大于終值就執(zhí)行循環(huán)體;步長為負(fù)數(shù)時,若循環(huán)變量值不小于終值就執(zhí)行循環(huán)體。執(zhí)行一旦遇到ENDFOR或NEXT,循環(huán)變量值即加上步長,然后返回到FOR重新與終值比較。注意:循環(huán)體中不需要改變循環(huán)變量語句。因為,ENDFOR或NEXT語句會改變循環(huán)變量的值。這一點與DOWHILE…ENDDO語句不同。11/19/202234第四章功能:語句執(zhí)行時,通過比較循環(huán)變量值與終值來決定是否執(zhí)行<語例4-9:編寫計算S=1+2+3+…+100的程序。SETTALKOFFCLEARS=0&&S為累加器,初值為0FORI=1TO100&&I為計數(shù)器,初值為1S=S十I&&累加NEXT?“S=”,SRETURN11/19/202235第四章例4-9:編寫計算S=1+2+3+…+100的程序。1三、掃描循環(huán)語句格式:SCAN[〈范圍〉][FOR〈邏輯表達式〉]〈語句序列〉ENDSCAN功能:SCAN循環(huán)針對當(dāng)前表進行循環(huán),〈范圍〉子句表示記錄范圍,缺省值為ALL。語句執(zhí)行時在〈范圍〉中依次尋找滿足FOR條件的記錄,并對找到的記錄執(zhí)行〈語句序列〉。執(zhí)行到ENDSCAN語句,指針就指向下一條滿足條件的記錄,繼續(xù)執(zhí)行循環(huán)體,直到所有的記錄都執(zhí)行完,就結(jié)束循環(huán)。11/19/202236第四章三、掃描循環(huán)11/10/202236第四章

例4-10:根據(jù)例4-7的要求,用掃描循環(huán)語句編程。CLEARUSE商品銷售表SCANFOR單價>2000?商品編號ENDSCANUSE11/19/202237第四章例4-10:根據(jù)例4-7的要求,用掃描循環(huán)語句編程。1四、循環(huán)輔助語句1.跳轉(zhuǎn)語句格式:LOOP功能:該語句能中斷本次循環(huán)體的執(zhí)行,回到循環(huán)開始處,重新對條件表達式進行判斷。說明:LOOP語句一定放在循環(huán)體內(nèi)才有意義,2.出口語句格式:EXIT功能:終止正常循環(huán),無條件地轉(zhuǎn)到循環(huán)終止語句后去執(zhí)行后續(xù)語句。11/19/202238第四章四、循環(huán)輔助語句11/10/202238第四章例4-11:SETTALKOFFCLEARSTORE0TOI,S,TDOWHILEI<=100I=I+1S=S+I&&累加I值IFINT(I/2)=I/2LOOPENDIFT=T+I&&累加奇數(shù)ENDDO?“l(fā)+2+3+…+100=”,S?”1~100奇數(shù)和為:”,TRETURN11/19/202239第四章例4-11:SETTALKOFF11/10/202例4-12:

@4,10SAY“請輸入一自然數(shù):”GETXDEFAULT0

READN=0DOWHILEN<=XIFINT(X/N)=X/NEXITENDIFN=N+1ENDDOIFN=X@6,10SAYSTR(X)+“為素數(shù)”ELSE@6,10SAYSTR(X)+“不為素數(shù)”ENDIF11/19/202240第四章例4-12:11/10/202240第四章例4-13:編程修改商品表.DBF中的商品名稱和生產(chǎn)單位,要求能修改多個商品。程序如下:CLEARUSE商品表DOWHILE.T.SPBH=SPACE(6)@4,10SAY“請輸入要修改的商品編號:”GETSPBHREADLOCATEFOR商品編號=SPBH11/19/202241第四章例4-13:編程修改商品表.DBF中的商品名稱和生產(chǎn)單位,要IFFOUND()@6,10SAY“商品名稱”GET商品名稱@7,10SAY“生產(chǎn)單位”GET生產(chǎn)單位READELSE@6,10SAY“無此商品!”ENDIFWAIT“是否繼續(xù)修改?”TOXGIFUPPER(XG)=“Y”LOOPELSEEXITENDIFENDDORETURN11/19/202242第四章IFFOUND()11/10/202242第四章五、多重循環(huán)若一個循環(huán)語句的循環(huán)體內(nèi)又包含其它循環(huán),就構(gòu)成了多重循環(huán),也稱為循環(huán)嵌套。較為復(fù)雜的問題往往要用多重循環(huán)來處理。例4-14:編一程序在屏幕上顯示九九乘法表。11/19/202243第四章五、多重循環(huán)11/10/202243第四章CLEARA=1DOWHILEA<=9B=1DOWHILEB<=AC=A*B??LTRIM(STR(A,2)),“*”,LTRIM(STR(B,2)),“=”,LTRM(STR(C,2)),“”B=B+1ENDDO?A=A+1ENDDORETURN11/19/202244第四章CLEAR11/10/202244第四章4.3過程與函數(shù)

4.3.1子程序一、調(diào)用與返回對于兩個具有調(diào)用關(guān)系的程序文件,常稱調(diào)用程序為主程序,被調(diào)用程序為子程序。主程序執(zhí)行時遇到DO命令,執(zhí)行就轉(zhuǎn)向子程序,稱為調(diào)用子程序。子程序執(zhí)行到RETURN語句(或缺省該語句),就會返回到主程序繼續(xù)執(zhí)行程序,稱為從子程序返回,或簡稱返主。11/19/202245第四章4.3過程與函數(shù)

4.3.1子程序11/10/2022二、帶參數(shù)子程序的調(diào)用與返回DO<程序名l>[WITH<參數(shù)表>][IN<程序名2>]功能:帶參數(shù)調(diào)用子程序。說明:(1)<參數(shù)表>中的參數(shù)可以是常量、變量或表達式,但若為內(nèi)存變量必須具有初值。(2)當(dāng)<程序名1>是IN子句<程序名2>中的一個過程時,DO命令調(diào)用該過程,請參閱以下過程部分內(nèi)容。11/19/202246第四章二、帶參數(shù)子程序的調(diào)用與返回11/10/202246第四章調(diào)用子程序時參數(shù)表中的參數(shù)要傳送給子程序,子程序中也必須設(shè)置相應(yīng)的參數(shù)接收語句。PARAMETERS<參數(shù)表>功能:指定內(nèi)存變量以接收DO命令發(fā)送的參數(shù)值,返主時把內(nèi)存變量值回送給調(diào)用程序中相應(yīng)的內(nèi)存變量。說明:(l)PARAMETERS必須是被調(diào)用程序的第一個語句。(2)命令中的參數(shù)被默認(rèn)為私有變量,返主時回送參數(shù)值后即被清除。(3)命令中的參數(shù)依次與調(diào)用命令WITH子句中的參數(shù)相對應(yīng),故兩者參數(shù)個數(shù)必須相同,類型必須匹配。11/19/202247第四章調(diào)用子程序時參數(shù)表中的參數(shù)要傳送給子程序,子程序中也必須設(shè)置例4-15:設(shè)計一個計算圓面積的子程序,并要求在主程序中帶參數(shù)調(diào)用它。主程序:(文件名MAIN.PRG)CLEARYMJ=0@5,10SAY“請輸人半徑:”GETBJDEFAULT0READDOJSWITHBJ,YMJ?“YMJ=”,YMJ&&顯示圓面積RETURN11/19/202248第四章例4-15:設(shè)計一個計算圓面積的子程序,并要求在主程序中帶子程序:文件名為JS.PRGPARAMETERSR,SS=PI()*R*R&&PI()函數(shù)返回3.14RETURN&&返主三、子程序嵌套主程序與子程序的概念是相對的,子程序還可調(diào)用它自己的子程序,即子程序可以嵌套調(diào)用。RETURN[TOMASTER|TO<程序文件名>]11/19/202249第四章子程序:文件名為JS.PRG11/10/202249第四章4.3.2過程

一、過程文件及過程的概念VisualFoxPro6.0允許在一個.PRG文件中設(shè)置多個程序模塊,將主程序以外的每個模塊定義為一個過程。這種包含多個過程的文件稱為“過程文件”?!斑^程文件”實質(zhì)仍是命令文件,仍使用.PRG為擴展名。其建立的方法與一般命令文件一樣用命令:MODIFYCOMMAND<過程文件名>11/19/202250第四章4.3.2過程

一、過程文件及過程的概念11/10/202一個過程文件可包含128個過程。每個過程都有一個過程名進行標(biāo)識。過程名的約定與內(nèi)存變量名的約定一樣。過程文件中的每一個過程結(jié)構(gòu)如下:PROCEDURE<過程名><命令序列>[RETURN]注意:每一個過程能完成某一獨立的功能,像子程序一樣被其它程序調(diào)用。但過程不是一個獨立的.PRG文件,它只是一個過程文件中的一段程序。而每一個子程序是一個獨立的命令文件。因此,過程與過程文件不是同一概念,不可混淆。11/19/202251第四章一個過程文件可包含128個過程。每個過程都有一個過程名進行標(biāo)二、過程的調(diào)用:過程也用DO命令調(diào)用。1.過程可作為程序的一部分,列在程序的最后,例4-16:SETDECIMALSTO2YMJ=0@5,10SAY“請輸人半徑:”GETBJDEFAULT0READDOJSWITHBJ,YMJ&&調(diào)用過程JS?“YMJ=”,YMJRETURNPROCEDUREJS&&過程JS開始語句PARAMETERSr,sS=PI()*R*RRETURN11/19/202252第四章二、過程的調(diào)用:過程也用DO命令調(diào)用。11/10/202252.過程有可能不在調(diào)用程序中,而是被包含在某一個過程文件中,在調(diào)用過程文件中的過程時,必須打開包含該過程的過程文件,再用DO命令調(diào)用。打開過程文件的命令如下:格式:SETPROCEDURETO<過程文件名>功能:打開指定的過程文件。過程文件使用完畢后,要關(guān)閉。過程文件關(guān)閉的命令是:格式一:CLOSEPROCEDURE格式二:SETPROCEDURETO功能:關(guān)閉當(dāng)前打開的過程文件。11/19/202253第四章2.過程有可能不在調(diào)用程序中,而是被包含在某一個過程文件中,例4-17:CLEARR=5MJ=0TJ=0SETPROCEDURETOQMJTJDOQMJ&&調(diào)用過程QMJ?“球的表面積為:”,MJDOQTJ&&調(diào)用過程QTJ?“球體積為:”,TJSETPROCEDURETO&關(guān)閉過程文件RETURN11/19/202254第四章例4-17:CLEAR11/10/202254第四章*過程文件:文件名為QMJTJ.PRGPROCEDUREQMJMJ=4*PI()*R*RRETURNPROCDUERQTJTJ=4*PI()*R*R*R/3RETURN11/19/202255第四章*過程文件:文件名為QMJTJ.PRG11/10/20224.3.3自定義函數(shù)

一、自定義函數(shù)的建立自定義函數(shù)的格式如下:FUNCTION<函數(shù)名>[PARAMETERS<參數(shù)表>]<語句序列>[RETURN<表達式>]功能:定義一個函數(shù),供調(diào)用。11/19/202256第四章4.3.3自定義函數(shù)

一、自定義函數(shù)的建立11/10/20說明:(1)自定義函數(shù)的函數(shù)名不能和VisualFoxPro6.0系統(tǒng)函數(shù)同名,也不能和內(nèi)存變量同名。(2)<語句序列>組成為函數(shù)體,用于進行各種處理;簡單的函數(shù)其函數(shù)體也可為空。(3)RETURN語句用于返回函數(shù)值,其中的<表達式>值就是函數(shù)值。若缺省該語句,則返回的函數(shù)值為.T.。(4)自定義函數(shù)與系統(tǒng)函數(shù)調(diào)用方法相同,其形式為:函數(shù)名(<參數(shù)表>)11/19/202257第四章說明:11/10/202257第四章例4-18:設(shè)計一個自定義函數(shù),用來求一元一次方程AX+B=0的根。*root.prgCLEAR@5,10SAY“一次項系數(shù):”GETaDEFAULT1@7,10SAY“常數(shù)項:”GETbDEFAULT0READ?“x:”,root(a,b)&&調(diào)用函數(shù)ROOTFUNCTIONROOTPARAMETERSu,vRETURNIIF(u=0,“無解”,-v/u)11/19/202258第四章例4-18:設(shè)計一個自定義函數(shù),用來求一元一次方程AX+B4.3.4變量的作用域

一、公共變量在任何模塊中都可使用的變量稱為公共變量,公共變量可用下述命令來建立。命令格式:PUBLIC<內(nèi)存變量表>功能:將<內(nèi)存變量表>指定的變量設(shè)置為公共變量,并將這些變量的初值均賦以.F.。

11/19/202259第四章4.3.4變量的作用域

一、公共變量11/10/2022說明:(1)若下層模塊中建立的內(nèi)存變量要供上層模塊使用,或某模塊中建立的內(nèi)存變量要供并列模塊使用,必須將這種變量說明成公共變量。(2)VisualFoxPro6.0默認(rèn)命令窗口中定義的變量都是公共變量,但這樣定義的變量不能在程序方式下利用。(3)程序終止執(zhí)行時公共變量不會自動清除,而只能用命令來清除。前面提到過的RELEASE命令可用來清除公共變量。

11/19/202260第四章說明:11/10/202260第四章二、私有變量VisualFoxPro6.0默認(rèn)程序中定義的變量是私有變量,也就是凡是未用PUBLIC定義過的變量都是私有變量。私有變量僅在定義它的模塊及其下層模塊中有效,而在定義它的模塊運行結(jié)束時自動清除。私有變量允許與上層模塊的變量同名,但此時為分清兩者是不同的變量,需要采用暫時屏蔽上級模塊變量的辦法。下述命令聲明的私有變量就能起這樣的作用。

11/19/202261第四章二、私有變量11/10/202261第四章命令格式:PRIVATE[<內(nèi)存變量表>][ALL[LIKE|EXCEPT<通配符>]功能:聲明私有變量并隱藏上級模塊的同名變量,直到聲明它的程序、過程或自定義函數(shù)執(zhí)行結(jié)束后,才恢復(fù)使用先前隱藏的變量。11/19/202262第四章命令格式:11/10/202262第四章三、本地變量本地變量只能在建立它的模塊中使用,而且不能在高層或底層模塊使用,該模塊運行結(jié)束時本地變量就自動釋放。命令格式:LOCAL<內(nèi)存變量表>功能:將<內(nèi)存變量表>指定的變量設(shè)置為本地變量,并將這些變量的初值均賦以.F.。注意:LOCAL與LOCATE前4個字母相同,故不可縮寫。

11/19/202263第四章三、本地變量11/10/202263第四章第四章

程序設(shè)計基礎(chǔ)

11/19/202264第四章第四章程序設(shè)計基礎(chǔ)

11/10/20221第四章4.1程序的建立、修改和運行

一、程序文件的建立與修改

1.方法一:用命令方式命令格式:MODIFYCOMMAND<文件名>功能:打開文本編輯窗口,用來建立或修改程序文件。2.方法二:用菜單方式11/19/202265第四章4.1程序的建立、修改和運行

一、程序文件的建立與修改11/二、程序的運行

1.方法一:用命令方式命令格式:DO<文件名>功能:執(zhí)行由<文件名>表示的程序。2.方法二:用菜單方式如要運行的程序沒有打開,可單擊主窗口中的“程序”菜單下的“運行”命令,彈出運行對話框,選擇要運行的程序,單擊“運行”按鈕。11/19/202266第四章二、程序的運行11/10/20223第四章4.2結(jié)構(gòu)化程序設(shè)計

4.2.1程序文件中的常用命令一、程序結(jié)尾的專用命令1.RETURN命令格式:RETURN[<表達式>][TOMASTER]功能:程序、過程或函數(shù)的末尾可放一條RETURN命令,它能使程序執(zhí)行結(jié)束,并返回到調(diào)用它的上級程序繼續(xù)執(zhí)行,若無上級程序則返回到命令窗口。說明:表達式指定返回調(diào)用程序的表達式;TOMASTER將返回最高層次的調(diào)用程序。11/19/202267第四章4.2結(jié)構(gòu)化程序設(shè)計

4.2.1程序文件中的常用命令11/2.CANCEL命令格式:CANCEL功能:CANCEL能使程序運行終止,清除程序的私有變量,并返回到命令窗口。3.QUIT命令格式:QUIT功能:該命令與文件菜單的退出命令功能相同,使系統(tǒng)正常退出VisualFoxPro6.0,返回到Windows。11/19/202268第四章2.CANCEL命令11/10/20225第四章二、注釋命令格式1:NOTE|*<注釋字符串>格式2:&&<注釋字符串>說明:注釋命令不做任何操作,只是注釋標(biāo)記,用于說明程序或命令的功能。NOTE或*用于整行注釋,它必須寫在每一個注釋行的開頭;而&&用于注釋一行的部分內(nèi)容,它可以寫在行中(命令的尾部)。11/19/202269第四章二、注釋命令11/10/20226第四章三、程序中兩個常用命令1.清屏命令格式:CLEAR功能:清除屏幕上的顯示內(nèi)容。一般用于程序開頭。2.SETTALKON|OFF功能:用于設(shè)置一些非輸出語句(如APPEND、SORT、GO等)是否顯示命令的執(zhí)行結(jié)果。ON為允許顯示,OFF為不允許顯示。一般在程序開始設(shè)置為OFF狀態(tài)。11/19/202270第四章三、程序中兩個常用命令11/10/20227第四章四、輸入輸出專用命令1.字符接收命令格式:ACCEPT[<提示信息>]TO<內(nèi)存變量名>功能:將從鍵盤上接收的字符串存入指定的內(nèi)存變量中。說明:執(zhí)行此語句時,先在屏幕上顯示<提示信息>,光標(biāo)緊跟其后,然后暫停程序運行,等待用戶從鍵盤上輸入信息。例:ACCEPT“請輸入姓名:”TOXM11/19/202271第四章四、輸入輸出專用命令11/10/20228第四章格式:INPUT[<提示信息>]TO<內(nèi)存變量名>功能:用于接收從鍵盤上輸入的表達式,并將計算結(jié)果存入指定的內(nèi)存變量中。說明:INPUT語句與ACCEPT語句的執(zhí)行過程相同,功能相似。INPUT語句與ACCEPT語句的區(qū)別是:ACCEPT命令只能接收字符串,而INPUT語句可以接收任意類型的數(shù)據(jù);如果輸入的是字符串,ACCEPT語句在接受數(shù)據(jù)時,不用使用字符型定界符;而INPUT接受字符型數(shù)據(jù)時,必須用定界符括起來。11/19/202272第四章格式:INPUT[<提示信息>]TO<內(nèi)存變量名>113.輸入一個字符語句格式:WAIT[<信息文本>][TO<內(nèi)存變量>][WINDOW[AT<行>,<列>]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<數(shù)值表達式>]功能:暫停程序的運行,直到用戶輸入一個字符。也可只用于輸出一條提示信息。例:WAIT“請檢查輸人內(nèi)容!”WINDOW11/19/202273第四章3.輸入一個字符語句11/10/202210第四章(二)定位輸入輸出命令格式:@<行,列>[SAY<表達式1>][GET<變量名>][DEFAULT<表達式2>]功能:在屏幕的指定行列輸出SAY子句的表達式值,并可修改GET子句的變量值。說明:(1)<行,列>表示數(shù)據(jù)在窗口中顯示的位置。(2)SAY子句用來輸出數(shù)據(jù),GET子句用來輸入及編輯數(shù)據(jù)。11/19/202274第四章(二)定位輸入輸出命令11/10/202211第四章(3)GET子句中的變量必須具有初值,或用DEFAULT子句的<表達式2>指定初值。(4)GET子句的變量必須用READ命令來激活。例:@3,10SAY姓名@4,10SAY“成績:”GETCJDEFAULT0READ11/19/202275第四章(3)GET子句中的變量必須具有初值,或用DEFAULT子句4.2.2程序的控制結(jié)構(gòu)

1.順序結(jié)構(gòu)在程序執(zhí)行時,按程序中命令的書寫順序依次執(zhí)行。2.分支結(jié)構(gòu)能根據(jù)指定條件的不同當(dāng)前值,在兩條或多條程序路徑中選擇一條執(zhí)行。3.循環(huán)結(jié)構(gòu)能使循環(huán)體中的語句(或命令)序列重復(fù)執(zhí)行若干次。4.過程結(jié)構(gòu)

11/19/202276第四章4.2.2程序的控制結(jié)構(gòu)

1.順序結(jié)構(gòu)11/10/2024.2.3順序結(jié)構(gòu)

例4-1:從鍵盤隨機輸入某個表的文件名,要求打開并顯示此表的內(nèi)容。CLEARSETTALKOFFACCEPT“請輸入表文件名”TOFILENAMEUSE(FILENAME)LISTUSE11/19/202277第四章4.2.3順序結(jié)構(gòu)

例4-1:從鍵盤隨機輸入某個表的文件名例:圓的面積計算程序為SETTALKOFFCLEARINPUT“請輸入圓半徑:”TORS=3.1416*R*R?“圓面積=”,S上述3條命令的先后次序不能顛倒:只有執(zhí)行INPUT后才能計算S,隨后才能輸出S,否則會因變量找不到而無法繼續(xù)下去。11/19/202278第四章例:圓的面積計算程序為11/10/202215第四章4.2.4分支結(jié)構(gòu)

一、簡單的條件語句語句格式:IF<邏輯表達式><語句序列>ENDIF功能:首先計算<邏輯表達式>的值,若其值為真,對IF與ENDIF之間的語句順序執(zhí)行,然后執(zhí)行ENDIF后面的語句;若其值為假,直接執(zhí)行ENDIF后面的語句。11/19/202279第四章4.2.4分支結(jié)構(gòu)

一、簡單的條件語句11/10/2022例4-3:將商品銷售表.DBF中第一個單價在2500元以上的商品價格降低5%。USE商品銷售表LOCATEFOR單價>2500IFFOUND()DISPLAY商品編號,單價REPLACE單價WITH單價*0.95DISPLAY商品編號,單價ENDIFUSERETURN11/19/202280第四章例4-3:將商品銷售表.DBF中第一個單價在2500元以二、帶ELSE的條件語句語句格式:IF<邏輯表達式><語句序列l(wèi)>ELSE<語句序列2>ENDIF功能:若<邏輯表達式>值為真,先執(zhí)行<語句序列1>,然后再執(zhí)行ENDIF后面的語句;若其值為假,先執(zhí)行<語句序列2>,然后再執(zhí)行ENDIF后面的語句。11/19/202281第四章二、帶ELSE的條件語句11/10/202218第四章例4-4:鐵路托運行李,假設(shè)每張車票可按每千克0.5元托運50千克以內(nèi)的行李,如果超過50千克時,超過部分每千克加價0.3元。計算公式和程序如下:

0.5*W(W<=50,W為行李重量)X=0.5*50+0.8*(W-50)(W>50)

11/19/202282第四章例4-4:鐵路托運行李,假設(shè)每張車票可按每千克0.5元托運5SETTALKOFFINPUT“請輸入行李的重量:”TOWIFW<=50X=0.5*WELSEX=0.5*50+0.8*(W-50)ENDIF?“行李重量為”+STR(W,6,2)+“千克,運費為”+STR(X,6,2)+“元”CANCEL11/19/202283第四章SETTALKOFF11/10/202220第四章語句格式:IF<條件表達式1><語句序列1>ELSEIF<條件表達式2><語句序列2>ELSE<語句序列3>ENDIFENDIF11/19/202284第四章語句格式:IF<條件表達式1>11/10/202221第例4-5:上例托運行李的計算公式改為:

0.5*W(W<=50)X=0.5*50+0.8*(W-50)(100>=W>50)0.5*50+0.8*50+1.0*(W-100)(W>100)11/19/202285第四章例4-5:上例托運行李的計算公式改為:11/10/20222STETALKOFFINPUT“輸入行李重量”TOWIFW<=50X=0.5*WELSEIFW<=100X=0.5*50+0.8*(W-50)ELSEX=0.5*50+0.8*50+1.0*(W-100)ENDIFENDIF?“行李運費為:”,XCANCEL

11/19/202286第四章STETALKOFF11/10/202223第四章三、多分支語句

DOCASECASE<邏輯表達式1><語句序列l(wèi)>CSAE<邏輯表達式2><語句序列2>…………CASE<邏輯表達式n><語句序列n>[OTHERWISE<語句序列n+l>]ENDCASE11/19/202287第四章三、多分支語句11/10/202224第四章功能:執(zhí)行多分支語句時,系統(tǒng)將依次判斷邏輯表達式值是否為真,若某個邏輯表達式值為真,則執(zhí)行該CASE段的語句序列,然后執(zhí)行ENDCASE后面的語句。在各邏輯表達式值均為假的情況下,若有OTHERWISE子句,就執(zhí)行<語句序列n+1>,然后結(jié)束多分支語句,否則直接結(jié)束多分支語句。11/19/202288第四章功能:執(zhí)行多分支語句時,系統(tǒng)將依次判斷邏輯表達式值是否為真,我們用DOCASE語句來實現(xiàn)例4-5的計算,只要將IF語句的嵌套部分改為:DOCASECASEW<=50X=0.5*WCASEW<=100.AND.W>50X=0.5*50+0.8*(W-50)CASEW>100X=0.5*50+0.8*50+1.0*(W-100)ENDCASE11/19/202289第四章我們用DOCASE語句來實現(xiàn)例4-5的計算,只要將IF語句的例4-6:顯示當(dāng)前季節(jié)程序CLEARYue=MONTH(DATE())DOCASECASEINLIST(yue,3,4,5)JJ=“春”CASEINLIST(yue,6,7,8)JJ=“夏”CASEINLIST(yue,9,10,11)JJ=“秋”CASEINLIST(yue,12,1,2)JJ=“冬”ENDCASEWAITJJWINDOW11/19/202290第四章例4-6:顯示當(dāng)前季節(jié)程序11/10/202227第四章在構(gòu)成分支結(jié)構(gòu)時需注意:(1)條件語句中的IF和ENDIF必須配對出現(xiàn);同樣,多分支語句中的DOCASE和ENDCASE也須配對出現(xiàn)。(2)為使程序清晰易讀,對分支、循環(huán)等結(jié)構(gòu)應(yīng)使用縮格書寫方式,見上述例。(3)分支、循環(huán)的每種語句都不允許在一個命令行中輸入完,必須按本書所示語句格式一行一個回車分行鍵人。由此可見,這些語句不能用于命令窗口中。11/19/202291第四章在構(gòu)成分支結(jié)構(gòu)時需注意:11/10/202228第四章4.2.4循環(huán)結(jié)構(gòu)

一、條件循環(huán)語句格式:DOWHILE<邏輯表達式><語句序列>ENDDO功能:若DOWHILE子句的循環(huán)條件為假循環(huán)就結(jié)束,執(zhí)行ENDDO子句后面的語句;條件為真則執(zhí)行循環(huán)體,一旦遇到ENDDO就自動返回到DOWHILE重新判斷循環(huán)條件是否成立,以決定是否繼續(xù)循環(huán)。11/19/202292第四章4.2.4循環(huán)結(jié)構(gòu)

一、條件循環(huán)11/10/202229第說明:1.語句格式中的<邏輯表達式>稱為循環(huán)條件,<語句序列>稱為循環(huán)體,循環(huán)體可以是一個語句或一組語句。2.ENDDO語句是循環(huán)終止語句,表示循環(huán)以此語句為終點。但執(zhí)行到ENDDO語句時并不是直接退出循環(huán),而是轉(zhuǎn)到DOWHILE語句去判斷<邏輯表達式>的值的真假。3.循環(huán)語句本身不會修改執(zhí)行條件,因此循環(huán)體內(nèi)一定要設(shè)置修改循環(huán)條件的語句。否則,可能出現(xiàn)死循環(huán),無法退出循環(huán)。11/19/202293第四章說明:11/10/202230第四章例4-7:試編一程序,顯示商品銷售表.DBF中所有單價超過2000元的商品編號。CLEARUSE商品銷售表DOWHILE.NOT.EOF()IF單價>2000?商品編號ENDIFSKIPENDDOUSE11/19/202294第四章例4-7:試編一程序,顯示商品銷售表.DBF中所有單價超過例4-8:STORE0TOK1,K2,K3ZS=1DOWHILEZS<=200ACCEPT“請輸入選票代號”TOXPDOCASECASEXP=“1”K1=K1+1CASEXP=“2”K2=K2+lCASEXP=“3”K3=K3+1ENDCASEZS=ZS+1ENDDO?“甲得票數(shù):”+STR(K1)?“乙得票數(shù):”+STR(K2)?“丙得票數(shù):”+STR(K3)RETURN11/19/202295第四章例4-8:STORE0TOK1,K2,K31二、步長循環(huán)語句格式:FOR<內(nèi)存變量>=<數(shù)值表達式1>TO<數(shù)值表達式2>[SETP<數(shù)值表達式3>]<語句序列>ENDFOR|NEXT說明:語句格式中的<內(nèi)存變量>稱為循環(huán)變量,<數(shù)值表達式l>、<數(shù)值表達式2>、<數(shù)值表達式3>分別稱為初值、終值、步長。步長的缺省時值為1。11/19/202296第四章二、步長循環(huán)11/10/202233第四章功能:語句執(zhí)行時,通過比較循環(huán)變量值與終值來決定是否執(zhí)行<語句序列>。步長為正數(shù)時,若循環(huán)變量值不大于終值就執(zhí)行循環(huán)體;步長為負(fù)數(shù)時,若循環(huán)變量值不小于終值就執(zhí)行循環(huán)體。執(zhí)行一旦遇到ENDFOR或NEXT,循環(huán)變量值即加上步長,然后返回到FOR重新與終值比較。注意:循環(huán)體中不需要改變循環(huán)變量語句。因為,ENDFOR或NEXT語句會改變循環(huán)變量的值。這一點與DOWHILE…ENDDO語句不同。11/19/202297第四章功能:語句執(zhí)行時,通過比較循環(huán)變量值與終值來決定是否執(zhí)行<語例4-9:編寫計算S=1+2+3+…+100的程序。SETTALKOFFCLEARS=0&&S為累加器,初值為0FORI=1TO100&&I為計數(shù)器,初值為1S=S十I&&累加NEXT?“S=”,SRETURN11/19/202298第四章例4-9:編寫計算S=1+2+3+…+100的程序。1三、掃描循環(huán)語句格式:SCAN[〈范圍〉][FOR〈邏輯表達式〉]〈語句序列〉ENDSCAN功能:SCAN循環(huán)針對當(dāng)前表進行循環(huán),〈范圍〉子句表示記錄范圍,缺省值為ALL。語句執(zhí)行時在〈范圍〉中依次尋找滿足FOR條件的記錄,并對找到的記錄執(zhí)行〈語句序列〉。執(zhí)行到ENDSCAN語句,指針就指向下一條滿足條件的記錄,繼續(xù)執(zhí)行循環(huán)體,直到所有的記錄都執(zhí)行完,就結(jié)束循環(huán)。11/19/202299第四章三、掃描循環(huán)11/10/202236第四章

例4-10:根據(jù)例4-7的要求,用掃描循環(huán)語句編程。CLEARUSE商品銷售表SCANFOR單價>2000?商品編號ENDSCANUSE11/19/2022100第四章例4-10:根據(jù)例4-7的要求,用掃描循環(huán)語句編程。1四、循環(huán)輔助語句1.跳轉(zhuǎn)語句格式:LOOP功能:該語句能中斷本次循環(huán)體的執(zhí)行,回到循環(huán)開始處,重新對條件表達式進行判斷。說明:LOOP語句一定放在循環(huán)體內(nèi)才有意義,2.出口語句格式:EXIT功能:終止正常循環(huán),無條件地轉(zhuǎn)到循環(huán)終止語句后去執(zhí)行后續(xù)語句。11/19/2022101第四章四、循環(huán)輔助語句11/10/202238第四章例4-11:SETTALKOFFCLEARSTORE0TOI,S,TDOWHILEI<=100I=I+1S=S+I&&累加I值IFINT(I/2)=I/2LOOPENDIFT=T+I&&累加奇數(shù)ENDDO?“l(fā)+2+3+…+100=”,S?”1~100奇數(shù)和為:”,TRETURN11/19/2022102第四章例4-11:SETTALKOFF11/10/202例4-12:

@4,10SAY“請輸入一自然數(shù):”GETXDEFAULT0

READN=0DOWHILEN<=XIFINT(X/N)=X/NEXITENDIFN=N+1ENDDOIFN=X@6,10SAYSTR(X)+“為素數(shù)”ELSE@6,10SAYSTR(X)+“不為素數(shù)”ENDIF11/19/2022103第四章例4-12:11/10/202240第四章例4-13:編程修改商品表.DBF中的商品名稱和生產(chǎn)單位,要求能修改多個商品。程序如下:CLEARUSE商品表DOWHILE.T.SPBH=SPACE(6)@4,10SAY“請輸入要修改的商品編號:”GETSPBHREADLOCATEFOR商品編號=SPBH11/19/2022104第四章例4-13:編程修改商品表.DBF中的商品名稱和生產(chǎn)單位,要IFFOUND()@6,10SAY“商品名稱”GET商品名稱@7,10SAY“生產(chǎn)單位”GET生產(chǎn)單位READELSE@6,10SAY“無此商品!”ENDIFWAIT“是否繼續(xù)修改?”TOXGIFUPPER(XG)=“Y”LOOPELSEEXITENDIFENDDORETURN11/19/2022105第四章IFFOUND()11/10/202242第四章五、多重循環(huán)若一個循環(huán)語句的循環(huán)體內(nèi)又包含其它循環(huán),就構(gòu)成了多重循環(huán),也稱為循環(huán)嵌套。較為復(fù)雜的問題往往要用多重循環(huán)來處理。例4-14:編一程序在屏幕上顯示九九乘法表。11/19/2022106第四章五、多重循環(huán)11/10/202243第四章CLEARA=1DOWHILEA<=9B=1DOWHILEB<=AC=A*B??LTRIM(STR(A,2)),“*”,LTRIM(STR(B,2)),“=”,LTRM(STR(C,2)),“”B=B+1ENDDO?A=A+1ENDDORETURN11/19/2022107第四章CLEAR11/10/202244第四章4.3過程與函數(shù)

4.3.1子程序一、調(diào)用與返回對于兩個具有調(diào)用關(guān)系的程序文件,常稱調(diào)用程序為主程序,被調(diào)用程序為子程序。主程序執(zhí)行時遇到DO命令,執(zhí)行就轉(zhuǎn)向子程序,稱為調(diào)用子程序。子程序執(zhí)行到RETURN語句(或缺省該語句),就會返回到主程序繼續(xù)執(zhí)行程序,稱為從子程序返回,或簡稱返主。11/19/2022108第四章4.3過程與函數(shù)

4.3.1子程序11/10/2022二、帶參數(shù)子程序的調(diào)用與返回DO<程序名l>[WITH<參數(shù)表>][IN<程序名2>]功能:帶參數(shù)調(diào)用子程序。說明:(1)<參數(shù)表>中的參數(shù)可以是常量、變量或表達式,但若為內(nèi)存變量必須具有初值。(2)當(dāng)<程序名1>是IN子句<程序名2>中的一個過程時,DO命令調(diào)用該過程,請參閱以下過程部分內(nèi)容。11/19/2022109第四章二、帶參數(shù)子程序的調(diào)用與返回11/10/202246第四章調(diào)用子程序時參數(shù)表中的參數(shù)要傳送給子程序,子程序中也必須設(shè)置相應(yīng)的參數(shù)接收語句。PARAMETERS<參數(shù)表>功能:指定內(nèi)存變量以接收DO命令發(fā)送的參數(shù)值,返主時把內(nèi)存變量值回送給調(diào)用程序中相應(yīng)的內(nèi)存變量。說明:(l)PARAMETERS必須是被調(diào)用程序的第一個語句。(2)命令中的參數(shù)被默認(rèn)為私有變量,返主時回送參數(shù)值后即被清除。(3)命令中的參數(shù)依次與調(diào)用命令WITH子句中的參數(shù)相對應(yīng),故兩者參數(shù)個數(shù)必須相同,類型必須匹配。11/19/2022110第四章調(diào)用子程序時參數(shù)表中的參數(shù)要傳送給子程序,子程序中也必須設(shè)置例4-15:設(shè)計一個計算圓面積的子程序,并要求在主程序中帶參數(shù)調(diào)用它。主程序:(文件名MAIN.PRG)CLEARYMJ=0@5,10SAY“請輸人半徑:”GETBJDEFAULT0READDOJSWITHBJ,YMJ?“YMJ=”,YMJ&&顯示圓面積RETURN11/19/2022111第四章例4-15:設(shè)計一個計算圓面積的子程序,并要求在主程序中帶子程序:文件名為JS.PRGPARAMETERSR,SS=PI()*R*R&&PI()函數(shù)返回3.14RETURN&&返主三、子程序嵌套主程序與子程序的概念是相對的,子程序還可調(diào)用它自己的子程序,即子程序可以嵌套調(diào)用。RETURN[TOMASTER|TO<程序文件名>]11/19/2022112第四章子程序:文件名為JS.PRG11/10/202249第四章4.3.2過程

一、過程文件及過程的概念VisualFoxPro6.0允許在一個.PRG文件中設(shè)置多個程序模塊,將主程序以外的每個模塊定義為一個過程。這種包含多個過程的文件稱為“過程文件”?!斑^程文件”實質(zhì)仍是命令文件,仍使用.PRG為擴展名。其建立的方法與一般命令文件一樣用命令:MODIFYCOMMAND<過程文件名>11/19/2022113第四章4.3.2過程

一、過程文件及過程的概念11/10/202一個過程文件可包含128個過程。每個過程都有一個過程名進行標(biāo)識。過程名的約定與內(nèi)存變量名的約定一樣。過程文件中的每一個過程結(jié)構(gòu)如下:PROCEDURE<過程名><命令序列>[RETURN]注意:每一個過程能完成某一獨立的功能,像子程序一樣被其它程序調(diào)用。但過程不是一個獨立的.PRG文件,它只是一個過程文件中的一段程序。而每一個子程序是一個獨立的命令文件。因此,過程與過程文件不是同一概念,不可混淆。11/19

溫馨提示

  • 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

提交評論