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

下載本文檔

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

文檔簡介

1、第 五 章VFP程序設(shè)計根底VFP 程序設(shè)計言語概述面向過程程序設(shè)計(構(gòu)造化程序設(shè)計)面向?qū)ο蟪绦蛟O(shè)計終了放映?YES(是)NO(否) VFP提供了一整套的程序設(shè)計言語,供用戶進展運用程序開發(fā)。 這些言語可以在命令窗口、程序設(shè)計、表單事件中運用。 在命令窗口僅是了解或了解各種命令的功能及語法,但有些命令在窗口中是不能運用的。 在程序設(shè)計、表單事件中運用,才干到達某種要求。 程序設(shè)計方法程序設(shè)計方法面向過程的程序設(shè)計構(gòu)造化程序設(shè)計程序由三種根本構(gòu)造組成,程序按照開發(fā)者規(guī)定的流程進展。面向?qū)ο蟮某绦蛟O(shè)計從運用程序開發(fā)者的角度來看,不再著重于代碼的全部流程,而主要思索建立對象和賦予對象怎樣的特征與行

2、為。從用戶的角度來看,運算的順序不是按運用程序開發(fā)者在設(shè)計時規(guī)定好的流程進展,而是根據(jù)用戶的需求進展。構(gòu)造化程序設(shè)計的概念 在程序設(shè)計方法學(xué)中,構(gòu)造化程序設(shè)計是程序設(shè)計的根本方法。所謂構(gòu)造化程序設(shè)計,通常是指用構(gòu)造化編程語句來編寫程序。其根本思想是逐漸求精、模塊化,其程序控制的根本構(gòu)造是順序、分支(選擇)、循環(huán),程序的流程由程序員控制,程序設(shè)計相對簡單。構(gòu)造化程序設(shè)計是面向?qū)ο蟪绦蛟O(shè)計的根底。本節(jié)主要引見程序的創(chuàng)建和保管、程序的運轉(zhuǎn)及其構(gòu)造化語句、過程和用戶自定義函數(shù)。 面向?qū)ο蟪绦蛟O(shè)計是一種系統(tǒng)化的程序設(shè)計方法,允許籠統(tǒng)化、模塊化的分層構(gòu)造。 面向?qū)ο蟮某绦蛟O(shè)計是經(jīng)過對類、子類和對象等的設(shè)計

3、來表達的。利用類可以簡化程序設(shè)計,提高程序代碼的可重用性。經(jīng)過類之所以可以簡化運用程序的設(shè)計,是由于類具有承繼性、多態(tài)性、封裝性、籠統(tǒng)性等特點。面向?qū)ο蟮某绦蛟O(shè)計概述創(chuàng)建程序方法之一:“工程管理器-“代碼選項卡-“程序項-“新建按鈕方法之二:主菜單的“文件-“新建命令-“程序項-“新建文件按鈕方法之三:常用工具欄“新建按鈕-“程序項-“新建文件按鈕方法之四:命令窗口:MODIFY COMMAND 程序名留意:1、只需方法之一,新建的程序在“工程管理器中能見到,其他三種方法都不見到,必需在“工程管理器中用“添加按鈕,才干參與在“工程管理器中。2、 創(chuàng)建程序后,留意保管文件:主菜單的“文件-“保管

4、命令3、 擴展名為:.PRG輸入以下程序段,看執(zhí)行的結(jié)果是什么CLEARNEWNUM=0FOR I=1 TO 100 NEWNUM=NEWNUM+IENDFOR? NEWNUM另一程序為:CLEARNEWNUM=0FOR I=1 TO 9 ? FOR J=1 TO 9 ?STR(I,2)+*+STR(J,1)+=+STR(I*J,2) ENDFORENDFOR修正程序修正程序前,要翻開指定的程序,其方法:方法之一:“工程管理器-“代碼選項卡-“程序項-選定要修正的程序- “修正按鈕方法之二:主菜單的“文件-“翻開命令-在對話框中選定要修正的程序-“確定按鈕方法之三:常用工具欄“翻開按鈕-選定要

5、程序的程序- “確定按鈕方法之四:命令窗口:MODIFY COMMAND 程序名/? 運轉(zhuǎn)程序方法之一:“工程管理器-選定要執(zhí)行的程序序-“運轉(zhuǎn)按鈕常用工具欄的“運轉(zhuǎn)按鈕方法之二:命令窗口:DO 程序名.PRG 面向過程程序設(shè)計 (構(gòu)造化程序設(shè)計)程序的根本構(gòu)造 順序構(gòu)造、分支(選擇)構(gòu)造、循環(huán)構(gòu)造 例題分析過程和用戶自定義函數(shù)(UDF)過程和用戶自定義函數(shù)過程和用戶自定義函數(shù)的概念UDF的創(chuàng)建、保管和調(diào)用參數(shù)傳送的兩種方式過程和用戶自定義函數(shù)(UDF)的概念 用戶自定義函數(shù)擴展了VFP言語,經(jīng)過定義UDF來為本人的運用程序建立一些公用函數(shù)。UDF包括保管在獨立程序文件.PRG中、程序中的過程

6、和函數(shù)、以及數(shù)據(jù)庫的存儲過程中。在VFP中,過程和函數(shù)的區(qū)別不大。 為了創(chuàng)建一個過程或函數(shù),需求運用PROCEDURE或FUNCTION命令給過程或函數(shù)賦予一個過程名或函數(shù)名,其后可是恣意條數(shù)的其他語句,以實現(xiàn)特定的功能。UDF的創(chuàng)建過程的定義如下: PROCEDURE 過程名 PARAMETERS 參數(shù)表 語句組 RETURN 表達式ENDPROCUDF的創(chuàng)建函數(shù)的定義如下:FUNCTION 函數(shù)名 PARAMETERS 參數(shù)表 語句組 RETURN 表達式ENDFUNC 為了使一個UDF可以接受一定的參數(shù),在PROCEDURE或FUNCTION命令后面的第一個可執(zhí)行語句必需是PARAMET

7、ERS語句。語法如下: PARAMETERS ParameterList參數(shù)ParameterList指定接納數(shù)據(jù)的內(nèi)存變量或數(shù)組的列表。其中的參數(shù)運用逗號分隔。最多可傳送27個參數(shù)。 例如: PROCEDURE myudf PARAMETERS p1,p2,p3 語句組 ENDPROC UDF的參數(shù) RETURN語句前往一個值給調(diào)用程序。省略了RETURN語句的UDF,其缺省的前往值為真(.T.)。 函數(shù)的前往值可以直接打印在活動窗口中,也可以用一個變量接納下來。如: var=myfunc()UDF的前往值UDF的保管UDF的保管將一個自定義函數(shù)以獨立文件保管文件名應(yīng)與函數(shù)名同名 例題分析保

8、管在一個程序文件的最后 例題作為過程文件將幾個函數(shù)保管在一個文件中。例題存儲在數(shù)據(jù)庫當(dāng)中,作為數(shù)據(jù)庫的存儲過程例題:求1到10的階乘的和CLEARnResult=0FOR n=1 TO 10nResult=nResult+jc(n)ENDFOR?nResult*以下部分為自定義函數(shù)FUNCTION JC PARAMETERS num &傳送一個數(shù)值參數(shù)num,前往num的階乘s=1FOR n =1 TO nums=s*nENDFORRETURN s例題:*自定義函數(shù)JC()用于計算階乘FUNCTION jcPARAMETERS num&傳送一個數(shù)值參數(shù)num,前往num的階乘s=1FOR n

9、=1 TO nums=s*nENDFORRETURN s*自定義函數(shù)LJH()用于計算累加和FUNCTION ljh PARAMETERS num&傳送一個數(shù)值參數(shù)num,前往num的累加和s=0FOR n =1 TO nums=s+nENDFORRETURN s 調(diào)用一個過程,可以運用DO命令;調(diào)用一個函數(shù),那么與VFP中的規(guī)范函數(shù)的調(diào)用完全一樣,可直接用該函數(shù)的稱號和隨后的一對括號來調(diào)用。如: DO myprocIN ProgramNameWITH ParameterList =myfunc(ParameterList)例如:DO Myudf WITH tp1,tp2,tp3Myudftp

10、1,tp2,tp3UDF的調(diào)用UDF的調(diào)用UDF的調(diào)用 假設(shè)過程或函數(shù)存在于單獨的程序文件中,那么可以運用SET PROCEDURE TO命令訪問它們。例如,保管過程或函數(shù)的文件名為PROCS.PRG,可運用如下命令來訪問它們: SET PROCEDURE TO procs.prg參數(shù)傳送的兩種方式 有兩種方式將參數(shù)傳送給UDF:按援用傳送方式和按值傳送方式。 按援用Reference傳送方式是將作為參數(shù)的變量和數(shù)組元素的地址傳送給UDF,當(dāng)一個值在被調(diào)用過程中更改時,新值傳送回調(diào)用程序中相關(guān)的變量或數(shù)組。 按值Value傳送方式是把變量和數(shù)組元素的值直接傳送給UDF,當(dāng)UDF中參數(shù)的值發(fā)生變

11、化時,原來的變量或數(shù)組元素的值不變化。系統(tǒng)默許情況下,系統(tǒng)經(jīng)過值將參數(shù)傳送給自定義函數(shù),經(jīng)過援用將參數(shù)傳送給過程。在調(diào)用之前可以運用SET UDFPARMS TO REFERENCE |VALUE命令來改動參數(shù)傳送的方式。強迫設(shè)定一種傳送方法:用括號括起一個變量,那么設(shè)定按值傳送;在變量之前加符號,設(shè)定以援用傳送方式。 例題FUNCTION plu para a a=a+1Return aSet udfparams to valueStore 1 to gnz?plu (gnz),gnzSet udfparams to refeStore 1 to gnz?plu(gnz),gnz按值傳送按地

12、址傳送Store 1 to gnz?plu (gnz),gnzStore 1 to gnz?plu (gnz),gnz 定義一個函數(shù)ntoc(),當(dāng)傳送給一個09之間的阿拉伯?dāng)?shù)字時,前往一個中文的“零九。在命令窗口中執(zhí)行MODIFY COMMAND ntoc命令,在編輯窗口中輸入如下代碼: FUNCTION ntoc PARAMETERS pDigit LOCAL cString cString=零一二三四五六七八九 return substr(cString, pDigit*2+1, 2) ENDFUNC 可以把該函數(shù)保管為獨立的程序文件ntoc.prg。以下是對該函數(shù)的調(diào)用: ? ntoc

13、(3)& 顯示“三UDF的例題分析例:把普通的日期改寫成漢語字符方式function dtocc para dedate cyear=str(year(dedate),4)+年 cmonth=str(month(dedate),2)+月 cday=str(day(dedate),2)+日 retu cyear-cmonth-cdayendfunc UDF的例題分析程序的創(chuàng)建和保管 VFP程序是包含一系列命令的文本文件??梢赃\用菜單或工具欄中的“新建命令或在命令窗口中執(zhí)行如下命令來創(chuàng)建程序: MODIFY COMMAND 或 MODIFY COMMAND 運轉(zhuǎn)程序 程序創(chuàng)建之后便可運轉(zhuǎn)。方法有:

14、 1.假設(shè)程序包含在一個工程中,那么在“工程管理器中選定它并選擇“運轉(zhuǎn)命令。 2.在“程序菜單中選擇“運轉(zhuǎn)菜單項。在程序列表中,選擇想要運轉(zhuǎn)的程序,單擊“運轉(zhuǎn)按鈕。 3.在“命令窗口中,按如下方式鍵入DO命令以及要運轉(zhuǎn)的程序名: DO 4.在程序的編輯窗口翻開的情況下,按組合鍵【Ctrl+E】。順序(sequential) 順序構(gòu)造是指一組命令按照特定的次序存放在程序文件中,程序運轉(zhuǎn)時,依次執(zhí)行程序中的各條命令行。例如:USE JSAPPEND BLANKEDITUSE例題分析例1: 知圓的半徑,求圓的周長和面積。 R=5 S=2*R*3.14159 AREA=R*2*3.14159 ? 圓的

15、周長為,S ? 圓的面積,AREA例2: 將A,B中的數(shù)對調(diào)。 A=5 B=10 C=A A=B B=C ? A,B順序構(gòu)造例題分析條件分支(conditional branching) 條件分支構(gòu)造用于程序中根據(jù)條件的測試結(jié)果執(zhí)行不同的運算。 VFP中有兩條命令實現(xiàn)條件分支: IFELSEENDIF DO CASEENDCASE 在VFP中還可運用IIF()函數(shù)實現(xiàn)條件分支。IFELSEENDIF語句語句格式:IF 條件表達式命令組1ELSE命令組2 ENDIF 該語句指定當(dāng)條件表達式結(jié)果為.T.和.F.時程序執(zhí)行語句的順序。假設(shè)含有ELSE子句,那么條件表達式結(jié)果為.T.時,執(zhí)行命令組1,

16、否那么執(zhí)行命令組2;假設(shè)不含有ELSE子句,那么條件表達式結(jié)果為.T.時,執(zhí)行命令組1,否那么執(zhí)行ENDIF后面的語句。請參見流程圖。例題分析對條件表達式求值命令組1命令組2IFENDIF.T.F.IFELSEENDIF語句流程圖 例1: 根據(jù)變量X的正負(fù)符號情況決議變量Y的值為1或-1。 X=5 IF X0 Y=1 ELSEY=-1 ENDIF ? Y例2: 求A,B兩數(shù)中的最大數(shù)。 A=5 B=10 MAX=A IF BMAX MAX=B ENDIF ? MAX或:A=5B=10IF AB MAX=AELSE MAX=BENDIF?MAXIFELSEENDIF語句例題分析例3:Dbirth

17、day=1985/10/15If dbirthday=1000 JL=JL*0.8 CASE JL=600 JL=JL*0.85 CASE JL=300 JL=JL*0.9ENDCASE? 實踐付款金額為:, JLDO CASE ENDCASE語句例題分析 例題:設(shè)購300元商品9折,購600元商品8.5折,購1000元以上商品8折,根據(jù)購物情況計算出實踐付款金額。USE JS S1=0 S2=0 S3=0 SCAN DO CASE CASE JBGZ=600 S1=S1+1例: 教師表JS.DBF中有10條記錄,且根本工資字段(JBGZ)中的值在300以下有2人,300至599之間有3人,6

18、00元及以上有5人。 case JBGZ=300 s2=s2+1 OTHERWISE S2=S2+1 ENDCASE ENDSCAN ?S1,S2,s3循環(huán)(Looping) 循環(huán)就是使得一組語句組反復(fù)執(zhí)行假設(shè)干次??梢灶A(yù)先指定要循環(huán)的次數(shù)。也可以預(yù)先不指定次數(shù),只需某個條件成立,就可以不斷循環(huán)下去,直到該條件不成立。 循環(huán)語句有三種: 1.SCANENDSCAN(掃描循環(huán)) 2.FORENDFOR(計數(shù)循環(huán)) 3.DO WHILEENDDO(條件循環(huán))SCANENDSCAN 語句 假設(shè)對表中一切記錄執(zhí)行某一運算,可以運用該語句。隨著記錄指針的挪動,SCAN循環(huán)對每條記錄執(zhí)行一樣的代碼塊。語句

19、格式為: SCAN NOOPTIMIZE范圍FOR條件 WHILE條件 命令組 LOOP 命令組 EXIT 命令組 ENDSCAN SCAN命令自動將記錄指針移到下一條滿足FOR和WHILE指定條件的記錄,并執(zhí)行相應(yīng)的命令塊,因此,在命令組中應(yīng)防止運用挪動記錄指針的命令,如GO、GO TOP、LOCAT、SEEK以及統(tǒng)計,否那么會呵斥錯誤甚至死循環(huán)。請參見例題分析。 例1:掃描JS表中全部記錄,逢記錄號為雙號的,顯示其工號和姓名: USE JS SCAN FOR RECNO()%2=0 ? JS.GH, JS.XM ENDSCANXHKCDMCJ950101019095010202859501

20、010377例2:知CJ表中含有如下3條記錄: 現(xiàn)運轉(zhuǎn)包含以下代碼的程序:CLOSE ALLUSE CJS=0CNT=0SCAN FOR CJ=60 IF CJ=80 S=S+1 ENDIF CNT=CNT+CJENDSCAN?S,CNT clear n=0 m=0 use xs scan all while xb=男 n=n+1 endscan m=reccount( )-n ?m,n例3:clearstore 0 to ;a1,a2,a3,a4,a5use cjgo topscan do case case cj60 a1=a1+1 case cj70 a2=a2+1 case cj80

21、a3=a3+1 case cj=8 S1=S1+1 CASE I=9 S2=S2+1 ENDCASEENDFOR?S1,S2例5:程序清單如下S=0P=0FOR I=1 TO 20 DO CASE CASE I%2=0 S=S+1 CASE I%3=0 P=P+1 ENDCASEENDFOR? S,PDO WHILEENDDO語句 假設(shè)循環(huán)次數(shù)不知,而是根據(jù)某一條件決議能否終了循環(huán),可以運用DO WHILEENDDO語句,其格式為: DO WHILE 條件 語句組 LOOP 語句組 EXIT 語句組 ENDDO 請參見流程圖與例題分析。DO WHILEENDDO語句流程圖對條件表達式求值語句組

22、DO WHILEENDDO.T.F.DO WHILEENDDO語句例題分析 例1:求1000以內(nèi)的奇數(shù)之和。(此題可以運用FOR循環(huán),這里用DO WHILE循環(huán)來處置。) X=0 I=1 DO WHILE I=1000 X=X+I I=I+2 ENDDO ? “1000以內(nèi)的奇數(shù)之和=:,X 例2:輸出26個字母clearSET TALK OFFCRT=AN=1DO WHILE N0cResult=LEFT(cString,1)+ cResultcString=SUBSTR(cString,2)ENDDO? cResult例4:程序功能:將非漢字字符組成的字符串反序顯示例如將Microsoft

23、顯示為tfosorciMCLEARcString=DO WHILE . ENDDO CommandcResult=space(0)DO WHILE LEN(cString)0cResult=cResult+RIGHT(cString,1)cString=SUBSTR(cString,1,LEN(cString)-1)ENDDO? cResult例5:程序功能:將含有漢字字符組成的字符串反序顯示CLEARStore “nanjing南京 to c,cp=space(0)Do while len(c)0 x=asc(left(c,1) if x127 i=2 else i=1 endif p=le

24、ft(c,i)+p c=substr(c,i+1)enddo?cc+的反序為+p 例6:程序功能:統(tǒng)計由ASCII碼字符組成的字符串中包含字母的個數(shù)CLEARcString=The United States of America is abbreviated to U.S.A.nResult=0DO WHILE LEN(cString)0c=LEFT(cString,1)IFBETWEEN(c,a,z) or BETWEEN(c,A,B)nResult=nResult+1ENDIFcString=SUBSTR(cString,2)ENDDO? 包含+ALLT(STR(nResult)+個英文

25、字母短路語句LOOP 假設(shè)循環(huán)體中含有LOOP語句,那么當(dāng)執(zhí)行到LOOP語句時,將跳過LOOP語句與循環(huán)出口語句之間的一切命令,進入下一次循環(huán)。 例如,求1100之間非3的倍數(shù)的一切奇數(shù)之和: s=0 FOR i=1 to 100 STEP 2 IF MOD(i,3)=0 LOOP ENDIF s=s + i ENDFOR ? s程序功能:統(tǒng)計由ASCII碼字符組成的字符串中包含字母的個數(shù)CLEARcString=The United States of America is abbreviated to U.S.A.nResult=0m=LEN(cString)FOR n=1 TO mc=SUBSTR(cString,n,1)IF!BETWEEN(c,a,z) AND !BETWEEN(c,A,B)LOOPENDIFnResult=nResult+1ENDFOR? 包含+ALLT(STR(nResult)+個英文字母退出語句EXIT EXIT是退出語

溫馨提示

  • 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

提交評論