




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Visual Foxpro程序設計程序設計第第8章程序設計基礎章程序設計基礎本章主要內容本章主要內容8.1 程序設計的基本概念與步驟程序設計的基本概念與步驟8.2 程序中的常用命令程序中的常用命令 8.3 程序控制結構程序控制結構8.4 多模塊程序設計多模塊程序設計總頁第2頁8.3.3 循環結構程序設計循環結構程序設計在程序設計中,經常需要對某一個程序段(即在程序設計中,經常需要對某一個程序段(即一條或多條命令)反復執行,這種程序結構稱為循一條或多條命令)反復執行,這種程序結構稱為循環結構。環結構。 循環結構的特點是:當給出的循環條件為真時,循環結構的特點是:當給出的循環條件為真時,反復執行一
2、組命令,這組被重復執行的命令序列稱反復執行一組命令,這組被重復執行的命令序列稱為循環體。當循環條件為假時,則終止循環體的執為循環體。當循環條件為假時,則終止循環體的執行。循環結構也就是由循環條件控制循環體是否重行。循環結構也就是由循環條件控制循環體是否重復執行的一種語句結構,它可以簡化程序,提高程復執行的一種語句結構,它可以簡化程序,提高程序效率。常用的循環語句有以下幾種形式:序效率。常用的循環語句有以下幾種形式:條件型循環:條件型循環:DO WHILEDO WHILEENDDOENDDO計數型循環計數型循環:FORFORTOTOENDFORENDFOR掃描型循環:掃描型循環:SCANSCAN
3、ENDSCANENDSCAN總頁第3頁一、條件循環一、條件循環條件循環是根據條件表達式的值,決定循環體內語句的執條件循環是根據條件表達式的值,決定循環體內語句的執行次數,也稱為當型循環。一般用于未知循環次數的循行次數,也稱為當型循環。一般用于未知循環次數的循環。環。【格式【格式】DO WHILE LOOP EXIT ENDDO【功能【功能】 語句執行時,先判斷語句執行時,先判斷 的值,若為真,的值,若為真,則執行循環體內的命令,即則執行循環體內的命令,即DO DO 與與ENDDOENDDO之間的命令;若之間的命令;若為假,則執行為假,則執行ENDDOENDDO后面的命令。后面的命令。總頁第4頁
4、【說明【說明】1.DO WHILE 1.DO WHILE 和和ENDDOENDDO要配對使用;要配對使用;2.DO WHILE 2.DO WHILE 是循環語句的入口,是循環語句的入口, 一般為邏輯型,一般為邏輯型, ENDDOENDDO是循環語句的出口,中間是循環語句的出口,中間 是重復執行的循環體;是重復執行的循環體;3.LOOP3.LOOP和和EXITEXIT只能在循環體中使用,是循環跳轉和控制語句。其中只能在循環體中使用,是循環跳轉和控制語句。其中LOOPLOOP是轉到循環的入口語句,是轉到循環的入口語句,EXITEXIT是強行退出循環的語句,它們一是強行退出循環的語句,它們一般都放在
5、分支結構中;般都放在分支結構中;4.4.循環結構允許嵌套。這種嵌套不僅限于循環結構自身的嵌套,而且循環結構允許嵌套。這種嵌套不僅限于循環結構自身的嵌套,而且還可以是和選擇結構的相互嵌套;還可以是和選擇結構的相互嵌套;5.5.循環一般要有退出機制,否則,會形成死循環。循環一般要有退出機制,否則,會形成死循環。總頁第5頁條件循環流程圖條件循環流程圖無跳轉流程圖無跳轉流程圖跳轉及控制流程圖跳轉及控制流程圖總頁第6頁例:例:編寫程序,其功能是循環查找學編寫程序,其功能是循環查找學生姓名,并根據用戶選擇確定是否繼生姓名,并根據用戶選擇確定是否繼續查找。續查找。CleaCleause use 學生學生Do
6、 while .t.Do while .t.cleacleatexttext根據姓名查找記錄根據姓名查找記錄endtextendtext? ?accepaccep 請輸入查詢學生姓名請輸入查詢學生姓名: to xm: to xmLocaLoca for for 姓名姓名=xm=xmif found()if found()row()+1,15 say row()+1,15 say 學號學號get get 學號學號row(),30 sayrow(),30 say姓名姓名get get 姓名姓名row()+1,15sayrow()+1,15say性別性別 get get 性別性別row(),30sa
7、yrow(),30say出生日期出生日期get get 出生日期出生日期elseelse?查無查無+xm+xm+姓名姓名!EndifEndifwait wait 是否繼續查詢是否繼續查詢?(Y/N) ?(Y/N) to cxto cx window at 20,10 window at 20,10 if uppe(cxif uppe(cx)=Y)=YlooploopelseelseexitexitendifendifenddoenddouseuseSet talk onSet talk onreturnreturn總頁第7頁二、計數型循環語句二、計數型循環語句計數型循環語句適用于循環次數已知的
8、情況下,它是根據用計數型循環語句適用于循環次數已知的情況下,它是根據用戶設置的循環變量的初值、終值和步長來決定循環體的執戶設置的循環變量的初值、終值和步長來決定循環體的執行次數。計數型循環語句又稱行次數。計數型循環語句又稱FORFOR循環語句。循環語句。【格式【格式】 FOR FOR = TO TO STEP STEP LOOP LOOP EXIT EXIT ENDFOR | NEXT ENDFOR | NEXT【功能【功能】通過比較通過比較 與與 來決定是否執行來決定是否執行 。執行。執行FORFOR語句時,首先將循環初值賦給循環變量,語句時,首先將循環初值賦給循環變量,然后將循環變量與循環
9、終值比較,當然后將循環變量與循環終值比較,當 為正數時,若為正數時,若 的值不大于的值不大于 ,執行循環體;當,執行循環體;當 為為負數時,若負數時,若 的值不小于的值不小于 ,執行循環體。,執行循環體。一旦遇到一旦遇到ENDFORENDFOR或或NEXTNEXT語句,語句, 值自動加上值自動加上 ,然后返回到,然后返回到FORFOR語句,重新與語句,重新與 進行比較。直到進行比較。直到循環變量大于或小于循環終值時,結束循環。步長的默認循環變量大于或小于循環終值時,結束循環。步長的默認值為值為1 1。總頁第8頁【說明【說明】1.1.步長值省略時,系統默認步長值為步長值省略時,系統默認步長值為1
10、 1。當初值小于終值時,。當初值小于終值時,步長值為正值;當初值大于終值時,步長值為負值。步步長值為正值;當初值大于終值時,步長值為負值。步長值不能為長值不能為0 0,否則造成死循環;,否則造成死循環;2.2.在循環體內不要隨便改變循環變量的值,否則會引起循在循環體內不要隨便改變循環變量的值,否則會引起循環次數發生改變;環次數發生改變;3.LOOP3.LOOP和和EXITEXIT命令的功能和用法與條件循環中該命令命令的功能和用法與條件循環中該命令的用法相同。的用法相同。 總頁第9頁計數循環流程圖計數循環流程圖總頁第10頁例:例:編寫程序,其功能是用計編寫程序,其功能是用計數循環統計學生表中入校
11、總分數循環統計學生表中入校總分在在570570分以上的學生人數。分以上的學生人數。CleaCleaSet talk offSet talk offuse use 學生學生coun to zrscoun to zrsrsrs=0=0list for list for 入校總分入校總分=570=570go topgo topfor i=1 to zrsfor i=1 to zrsif if 入校總分入校總分=570=570rsrs=rs+1=rs+1endifendifskipskipendforendfor?入校總分不低于入校總分不低于570570的學的學生人數是:生人數是:,rs,rsuseu
12、seset talk onset talk onreturetu總頁第11頁三、指針型循環語句三、指針型循環語句指針型循環語句是在數據表中建立的循環,它是根據用戶在指針型循環語句是在數據表中建立的循環,它是根據用戶在表中設置的當前記錄指針來對一組記錄進行的循環操作,表中設置的當前記錄指針來對一組記錄進行的循環操作,是是Visual FoxProVisual FoxPro中特有的一種循環語句。中特有的一種循環語句。【格式【格式】SCAN SCAN FOR FOR WHILE WHILE 2 LOOP LOOP EXIT EXIT ENDSCAN ENDSCAN【功能【功能】針對當前表進行循環操作
13、,用記錄指針控制循環次針對當前表進行循環操作,用記錄指針控制循環次數。在指定的數。在指定的 中依次尋找滿足中依次尋找滿足 FORFOR條件或條件或 WHILE WHILE 條件的記錄,并對找到的記錄執行條件的記錄,并對找到的記錄執行 中的命令。中的命令。總頁第12頁【說明【說明】1.SCANENDSCAN1.SCANENDSCAN循環語句中隱含函數循環語句中隱含函數EOF()EOF()和命令和命令SKIPSKIP的的處理;處理;2.2.執行執行SCAN語句時,首先判斷函數語句時,首先判斷函數EOF() 的值,若為的值,若為“真真”,則結束循環,執行,則結束循環,執行ENDSCAN后面的語句;否
14、則,后面的語句;否則,結合結合或或,記錄指針移到指,記錄指針移到指定的范圍和條件內的第一條記錄,定的范圍和條件內的第一條記錄,執行執行 中的中的命令;命令;3.3.執行執行ENDSCANENDSCAN時,記錄指針自動移到下一條記錄,轉到時,記錄指針自動移到下一條記錄,轉到SCANSCAN重新判斷,直到重新判斷,直到EOF()EOF()函數值為真或到指定范圍末尾函數值為真或到指定范圍末尾, ,退出循環退出循環, ,執行執行ENDSCAN后面的語句后面的語句;3.3.無無 選項時,則表示對所有記錄進行處理;選項時,則表示對所有記錄進行處理;4.LOOP4.LOOP和和EXITEXIT命令的功能和用
15、法與條件循環中該命令的命令的功能和用法與條件循環中該命令的用法相同。用法相同。總頁第13頁指針循環流程圖指針循環流程圖總頁第14頁例:例:編寫程序,其功能是編寫程序,其功能是用指針循環統計學生表中用指針循環統計學生表中入校總分在入校總分在570570分以上的學分以上的學生人數。生人數。CleaCleaSet talk offSet talk offuse use 學生學生list for list for 入校總分入校總分=570=570rsrs=0=0scan for scan for 入校總分入校總分=570=570rsrs=rs+1=rs+1endscanendscan?入校總分不低于入
16、校總分不低于570570的學的學生人數是:生人數是:,rs,rsuseuseset talk onset talk onreturetu總頁第15頁四、多重循環四、多重循環多重循環是指在一個循環語句內又包含另一個循環語句,多重循環是指在一個循環語句內又包含另一個循環語句,多重循環也稱為循環嵌套。下面以條件循環為例,進行多重循環也稱為循環嵌套。下面以條件循環為例,進行說明。說明。【格式【格式】 DO WHILE DO WHILE 1 11DO WHILE DO WHILE 2 21 ENDDO ENDDO 12ENDDOENDDO總頁第16頁【功能【功能】 在多重循環中,首先從外循環進入內循環,
17、執行在多重循環中,首先從外循環進入內循環,執行內循環的語句。當內循環的條件為假時,返回到外循環內循環的語句。當內循環的條件為假時,返回到外循環;當外循環的條件為真時,又進入內循環;否則,退出;當外循環的條件為真時,又進入內循環;否則,退出循環。循環。 【說明【說明】1.1.循環嵌套層次不限,但內循環的所有語句必須完全嵌套循環嵌套層次不限,但內循環的所有語句必須完全嵌套在外層循環之中。否則,就會出現循環的交叉,造成邏在外層循環之中。否則,就會出現循環的交叉,造成邏輯上的混亂;輯上的混亂;2.2.循環結構和分支結構允許混合嵌套使用,但不允許交叉。循環結構和分支結構允許混合嵌套使用,但不允許交叉。其
18、入口語句和相應的出口語句必須成對出現。其入口語句和相應的出口語句必須成對出現。總頁第17頁例例: : 編寫程序,其功能是使用多重循環打印一個九九乘法口訣表。編寫程序,其功能是使用多重循環打印一個九九乘法口訣表。SET TALK OFFSET TALK OFFCLEARCLEARFOR I=1 TO 9 &IFOR I=1 TO 9 &I循環為外層,共循環九次,控制循環為外層,共循環九次,控制“九九表九九表”的行的行 FOR j=1 TO I &JFOR j=1 TO I &J循環為內層,共循環循環為內層,共循環4545次(次(I I從從1 1到到9 9), ,控
19、制列控制列 ? SPACE(2) +STR(j,1)+? SPACE(2) +STR(j,1)+STR(I,1)+=+STR(I+STR(I,1)+=+STR(I* *J,2)+SPACE(2) &?J,2)+SPACE(2) &?輸輸出不換行出不換行 ENDFORENDFOR? ? & &每輸出九九表一行要換行每輸出九九表一行要換行 ENDFORENDFORSET TALK ONSET TALK ON RETURN RETURN思考:如果改用條件循環,程序應作如何修改?思考:如果改用條件循環,程序應作如何修改?總頁第18頁相關概念相關概念模塊化是結構化程序的重
20、要原則,所謂模塊化就是模塊化是結構化程序的重要原則,所謂模塊化就是把大程序按照功能分為較小的程序,具有一定功能的每把大程序按照功能分為較小的程序,具有一定功能的每個小程序即為模塊。一般來講,一個程序是由一個主控個小程序即為模塊。一般來講,一個程序是由一個主控模塊和若干子模塊組成的,主控模塊用來完成某些公用模塊和若干子模塊組成的,主控模塊用來完成某些公用操作及功能選擇,而子模塊用來完成某項特定的功能。操作及功能選擇,而子模塊用來完成某項特定的功能。這種設計風格便于分工合作,將一個龐大的模塊這種設計風格便于分工合作,將一個龐大的模塊分解為若干個子模塊分別完成,然后用主控模塊調用子分解為若干個子模塊
21、分別完成,然后用主控模塊調用子模塊。這種程序的模塊化結構如下圖所示。模塊。這種程序的模塊化結構如下圖所示。結構化程序的設計過程就是將問題求解由抽象逐結構化程序的設計過程就是將問題求解由抽象逐步具體化的過程。這種方法符合人們解決復雜問題遵循步具體化的過程。這種方法符合人們解決復雜問題遵循的普遍規律,可以顯著提高程序設計的效率。的普遍規律,可以顯著提高程序設計的效率。 8.4 多模塊程序設計多模塊程序設計 總頁第19頁程序的模塊化結構程序的模塊化結構 總頁第20頁總39頁第20頁 在編制程序時,經常會遇到有些運算或某段程序在在編制程序時,經常會遇到有些運算或某段程序在程序運行中被多次調用的情況,為
22、了有效解決上述重復程序運行中被多次調用的情況,為了有效解決上述重復調用,有必要設計相對獨立并能完成特定功能的程序段,調用,有必要設計相對獨立并能完成特定功能的程序段,這種程序段稱為這種程序段稱為子程序子程序( (該程序段單獨保存為一個程序文該程序段單獨保存為一個程序文件件) )或或過程過程( (該程序段附在調用程序末尾或放在過程文件該程序段附在調用程序末尾或放在過程文件中中) )。調用子程序的程序稱為。調用子程序的程序稱為調用程序調用程序。對于一個子程序。對于一個子程序來說,除了被調用以外,還可以調用其他子程序來說,除了被調用以外,還可以調用其他子程序( (子程序子程序的嵌套調用的嵌套調用)
23、)。此時,該子程序便成為其被調用程序的調。此時,該子程序便成為其被調用程序的調用程序。在一個應用系統中,處于最高層次的調用程序用程序。在一個應用系統中,處于最高層次的調用程序稱為稱為主程序主程序。總頁第21頁總39頁第21頁 在應用系統的開發中,一般會根據實際的需要將整個系在應用系統的開發中,一般會根據實際的需要將整個系統劃分成若干個模塊,然后在主控模塊的控制下,調用各個統劃分成若干個模塊,然后在主控模塊的控制下,調用各個功能模塊以實現系統的各種功能操作,通常將這些可調用的功能模塊以實現系統的各種功能操作,通常將這些可調用的功能模塊也設計成過程或子程序。功能模塊也設計成過程或子程序。特點:特點
24、:(1)(1)過程或子程序一般不單獨運行,而是通過上級程序調用過程或子程序一般不單獨運行,而是通過上級程序調用; ;(2)(2)過程可以附在調用程序的末尾過程可以附在調用程序的末尾, ,也可以放在單獨的文件中也可以放在單獨的文件中(過程文件)(過程文件); ;(3)(3)子程序可以嵌套調用。子程序可以嵌套調用。總頁第22頁總39頁第22頁8.4.1 8.4.1 子程序子程序1 1子程序的建立子程序的建立 子程序作為一個獨立程序,與其他程序一樣可以用子程序作為一個獨立程序,與其他程序一樣可以用MODIFY COMMANDMODIFY COMMAND命令、菜單或項目管理器等多種方法建立和命令、菜單
25、或項目管理器等多種方法建立和調試,也是以程序文件名調試,也是以程序文件名.PRG.PRG的形式獨立存盤。的形式獨立存盤。總頁第23頁總39頁第23頁2 2子程序的調用子程序的調用子程序的調用是通過調用語句實現的。子程序的調用是通過調用語句實現的。【格式【格式】DO DO 或或 ( )( )【功能【功能】執行執行DODO調用命令時,將指定的子程序調入內存并執行,調用命令時,將指定的子程序調入內存并執行,當執行到當執行到RETURNRETURN命令時,返回到該命令指定位置。命令時,返回到該命令指定位置。【說明【說明】調用程序可以調用任何子程序。子程序還可以調用下一調用程序可以調用任何子程序。子程序
26、還可以調用下一級子程序,但子程序不能調用自己上層的調用程序。子程序級子程序,但子程序不能調用自己上層的調用程序。子程序可以返回到調用它的調用程序中,也可以直接返回到主程序可以返回到調用它的調用程序中,也可以直接返回到主程序中。中。總頁第24頁總39頁第24頁子程序調用子程序調用嵌套調用嵌套調用總頁第25頁總39頁第25頁3 3子程序的返回子程序的返回 子程序執行后,可以采用下面語句返回到調用程序。子程序執行后,可以采用下面語句返回到調用程序。【格式【格式】RETURN RETURN |TO |TO |TO |TO MASTERMASTER【功能【功能】該語句終止子程序執行,返回到調用程序中調該
27、語句終止子程序執行,返回到調用程序中調用語句的下一個語句執行用語句的下一個語句執行( (或到指定位置或到指定位置) )。如無調用。如無調用程序,則返回命令窗口。程序,則返回命令窗口。總頁第26頁總39頁第26頁【說明【說明】(1 1)子程序的一個重要標志是:以)子程序的一個重要標志是:以RETURNRETURN語句作為結束語句,語句作為結束語句,而一般在主程序和無上一級調用程序的程序尾部用而一般在主程序和無上一級調用程序的程序尾部用CANCELCANCEL語語句作為結束語句;句作為結束語句;(2 2)在返回語句中,若選擇可選項在返回語句中,若選擇可選項 ,將表達式的值,將表達式的值返回給調用程
28、序。選擇可選項返回給調用程序。選擇可選項TOTO,可直接返,可直接返回指定的程序文件。選擇可選項回指定的程序文件。選擇可選項TO MASTERTO MASTER,則不論前面,則不論前面有多少級調用而直接返回到主程序。有多少級調用而直接返回到主程序。總頁第27頁總39頁第27頁8.4.2 8.4.2 過程及過程文件過程及過程文件把多個子程序合并成一個大的文件,在該文件中,每把多個子程序合并成一個大的文件,在該文件中,每個子程序仍然是獨立的,這個大的公用程序文件被稱作個子程序仍然是獨立的,這個大的公用程序文件被稱作過過程文件程文件。其中的每個子程序模塊稱為過程。在系統執行過。其中的每個子程序模塊稱
29、為過程。在系統執行過程中,只需打開相應的過程文件即可調用其中的多個過程,程中,只需打開相應的過程文件即可調用其中的多個過程,從而大大減少了訪問磁盤的次數,可提高程序運行效率。從而大大減少了訪問磁盤的次數,可提高程序運行效率。過程文件的擴展名仍然是過程文件的擴展名仍然是.PRG.PRG。【格式【格式】PROCEDURE PROCEDURE PARAMETERS PARAMETERS RETURN RETURN ENDPROC ENDPROC總頁第28頁總39頁第28頁1 1過程定義過程定義【命令【命令】 MODIFY COMMAND MODIFY COMMAND 過程文件的基本書寫格式:過程文件
30、的基本書寫格式:PROCEDURE PROCEDURE 1 1RETURNRETURNENDPROCENDPROCPROCEDURE PROCEDURE N NRETURNRETURNENDPROCENDPROC總頁第29頁總39頁第29頁【功能【功能】建立過程。建立過程。【說明【說明】過程名和過程文件名是兩個不同的概念,過程名和過程文件名是兩個不同的概念,每個過程是具有獨立功能的一段程序,過程名是一每個過程是具有獨立功能的一段程序,過程名是一個沒有擴展名的過程名稱。一個過程文件可以由一個沒有擴展名的過程名稱。一個過程文件可以由一個或多個過程構成,個或多個過程構成,擴展名是擴展名是.PRG.P
31、RG。在在PROCEDURE與與ENDPROC之間如果使用之間如果使用RETURN命令,可以返回到上一層程序。命令,可以返回到上一層程序。2調用(執行)過程調用(執行)過程【格式【格式】DO 【功能【功能】用于調用用于調用指定的過程。指定的過程。總頁第30頁總39頁第30頁3 3過程文件的打開和關閉過程文件的打開和關閉 調用過程時,首先打開包含被調用過程的過程文件。調用過程時,首先打開包含被調用過程的過程文件。過程文件使用后需要及時關閉。過程文件使用后需要及時關閉。(1 1)打開過程文件)打開過程文件【命令【命令】 SET PROCEDURE TO SET PROCEDURE TO 【功能【功
32、能】 打開指定的過程文件,將過程文件中所包含打開指定的過程文件,將過程文件中所包含的過程全部調入內存。的過程全部調入內存。【說明【說明】 系統在同一時刻只能打開一個過程文件,打系統在同一時刻只能打開一個過程文件,打開新過程文件的同時將關閉原來打開的過程文件。若開新過程文件的同時將關閉原來打開的過程文件。若要修改過程文件的內容,一定要先關閉該過程文件。要修改過程文件的內容,一定要先關閉該過程文件。(2 2)關閉過程文件)關閉過程文件【命令【命令】 CLOSE PROCEDURECLOSE PROCEDURE 或或 SET PROCEDURE TOSET PROCEDURE TO【功能【功能】 關
33、閉已打開的過程文件。關閉已打開的過程文件。總頁第31頁總39頁第31頁8.4.3 8.4.3 內存變量的作用域及帶參數調用子程序內存變量的作用域及帶參數調用子程序1 1內存變量作用域內存變量作用域 在程序設計中,特別是模塊程序中,往往會用到許在程序設計中,特別是模塊程序中,往往會用到許多內存變量,這些內存變量有的在整個程序運行過程中多內存變量,這些內存變量有的在整個程序運行過程中起作用,而有的僅在某些程序模塊中起作用,內存變量起作用,而有的僅在某些程序模塊中起作用,內存變量的這些作用范圍稱為內存變量的這些作用范圍稱為內存變量作用域作用域。內存變量的作用。內存變量的作用域根據作用范圍可以分為三類
34、:域根據作用范圍可以分為三類:全局變量全局變量、局部變量局部變量和和本地變量本地變量。2.2.內存變量的一般性質內存變量的一般性質在多模塊程序設計中在多模塊程序設計中, ,不同的程序塊分為主程序、調用程不同的程序塊分為主程序、調用程序、子程序,程序調用時有上下級關系,在不同的程序序、子程序,程序調用時有上下級關系,在不同的程序中的變量有其一般如下性質:中的變量有其一般如下性質:(1)(1)上級程序生成的變量,調用的下級程序可以使用,反之上級程序生成的變量,調用的下級程序可以使用,反之下級程序生成的變量,在上級程序中不可使用。下級程序生成的變量,在上級程序中不可使用。(2)(2)上級程序中已有的
35、變量,如果在下級程序中未重新定義,上級程序中已有的變量,如果在下級程序中未重新定義,則返回上級程序時,保留下級程序重新賦的值。則返回上級程序時,保留下級程序重新賦的值。總頁第32頁總39頁第32頁3 3全局變量全局變量 全局變量又稱為公共變量,在程序運行中,上下各級全局變量又稱為公共變量,在程序運行中,上下各級程序或任何程序模塊中都可以使用該內存變量。當程序執程序或任何程序模塊中都可以使用該內存變量。當程序執行完畢,回到命令窗后,其值仍然保存。行完畢,回到命令窗后,其值仍然保存。【格式【格式】PUBLIC PUBLIC 【功能【功能】將將 中指定的變量定義為全局內存變量。中指定的變量定義為全局
36、內存變量。總頁第33頁總39頁第33頁【說明【說明】(1 1)用)用PUBLICPUBLIC語句定義的內存變量系統設置初值為邏輯型語句定義的內存變量系統設置初值為邏輯型.F.F.;(2 2)一個)一個PUBLICPUBLIC語句可以定義多個內存變量,可以是簡單變量,也可語句可以定義多個內存變量,可以是簡單變量,也可以是下標變量,每個內存變量之間均用以是下標變量,每個內存變量之間均用“,”隔開;隔開;(3 3)全局變量必須先定義后賦值,故稱為建立全局型變量;)全局變量必須先定義后賦值,故稱為建立全局型變量;(4 4)在程序中已被定義成全局變量的變量也可以在下一級程序中進一)在程序中已被定義成全局
37、變量的變量也可以在下一級程序中進一步定義成局部變量;但已定義成局部變量的,卻不可反過來再定義成步定義成局部變量;但已定義成局部變量的,卻不可反過來再定義成全局變量;全局變量;(5 5)若下層模塊中建立的內存變量要供上層模塊使用,或某模塊中建)若下層模塊中建立的內存變量要供上層模塊使用,或某模塊中建立的內存變量要供并列模塊使用,必須將這種變量設置成全局變量立的內存變量要供并列模塊使用,必須將這種變量設置成全局變量; ;(6 6)在)在Visual FoxProVisual FoxPro的命令窗口中所定義的內存變量,系統默認為的命令窗口中所定義的內存變量,系統默認為是全局變量是全局變量, ,但不能
38、在程序方式下利用但不能在程序方式下利用 ;(7 7)由于全局變量的作用范圍為整個系統,當程序執行完畢后,全局)由于全局變量的作用范圍為整個系統,當程序執行完畢后,全局變量仍占用內存,不會自動被清除。因此,不再使用全局變量時,可變量仍占用內存,不會自動被清除。因此,不再使用全局變量時,可以使用下列語句清除:以使用下列語句清除:RELEASE RELEASE 、CLEAR ALLCLEAR ALL總頁第34頁總39頁第34頁4 4局部變量局部變量 局部變量又稱私有變量。在局部變量又稱私有變量。在Visual FoxProVisual FoxPro的程序中,的程序中,未加未加PUBLICPUBLIC
39、語句定義的內存變量,系統默認為局部變量,局語句定義的內存變量,系統默認為局部變量,局部變量的作用域限制在定義它的程序和被該程度所調用的下部變量的作用域限制在定義它的程序和被該程度所調用的下級程序過程中,一旦定義它的程序運行完畢,局部變量將從級程序過程中,一旦定義它的程序運行完畢,局部變量將從內存中自動被清除。內存中自動被清除。【格式【格式】PRIVATE PRIVATE 內存變量表內存變量表ALLLIKE|EXCEPTALLLIKE|EXCEPT【功能【功能】聲明局部變量并隱藏上級程序中的同名內存變量。將聲明局部變量并隱藏上級程序中的同名內存變量。將 中所列的內存變量定義為本級程序和下一級程中
40、所列的內存變量定義為本級程序和下一級程序中專用的局部變量。序中專用的局部變量。總頁第35頁總39頁第35頁【說明【說明】(1 1)在同一過程中,用隱式或顯式定義的局部變量的)在同一過程中,用隱式或顯式定義的局部變量的作用域完全相同。在主程序或上級過程中未經作用域完全相同。在主程序或上級過程中未經PRIVATEPRIVATE語句定義的局部變量,在下級過程中也未經顯式定義,語句定義的局部變量,在下級過程中也未經顯式定義,那么它的新值可以帶回主程序或上級過程;若在下級那么它的新值可以帶回主程序或上級過程;若在下級過程中進行了顯式定義,其新值不能帶回主程序或上過程中進行了顯式定義,其新值不能帶回主程序
41、或上級過程中使用;級過程中使用;(2 2)用)用PRIVATEPRIVATE定義的局部變量只對本級程序及下級定義的局部變量只對本級程序及下級子程序有效,當返回上級程序時,這種局部型變量便子程序有效,當返回上級程序時,這種局部型變量便自動被消除;自動被消除;(3 3)當下級程序或過程中顯式定義了與上級程序中同)當下級程序或過程中顯式定義了與上級程序中同名的局部變量時,上級程序中的名的局部變量時,上級程序中的 同名變量將被隱藏起同名變量將被隱藏起來,一旦含有來,一旦含有PRIVATEPRIVATE的內存變量程序運行完畢,上級的內存變量程序運行完畢,上級程序被隱藏的同變量自行恢復原來的狀態;程序被隱
42、藏的同變量自行恢復原來的狀態;總頁第36頁總39頁第36頁(4 4)用用PRIVATE定義的內存變量僅指明變量的類型,定義的內存變量僅指明變量的類型,沒有賦初值;沒有賦初值;(5 5)PRIVATE ALL:表示將所有位于本級程序中的內:表示將所有位于本級程序中的內存變量定義為局部型量;存變量定義為局部型量;(6 6)PRIVATE ALL LIKE :將位于本級程序:將位于本級程序中符合中符合的變量定義為局部型變量;的變量定義為局部型變量;(7 7)PRIVATE ALL EXCEPT :將位于本級程:將位于本級程序中不符合序中不符合的變量定義為局部型變量。的變量定義為局部型變量。總頁第37
43、頁總39頁第37頁5 5本地變量本地變量 本地變量只能在定義它的程序中使用,一旦定義它本地變量只能在定義它的程序中使用,一旦定義它的程序運行完畢,本地變量將從內存中釋放。的程序運行完畢,本地變量將從內存中釋放。【格式【格式】LOCAL LOCAL 【功能【功能】將將 中指定的變量定義為本地變量。中指定的變量定義為本地變量。【說明【說明】(1 1)用)用LOCALLOCAL定義的本地變量,系統自動將其初值賦以定義的本地變量,系統自動將其初值賦以邏輯型邏輯型.F.F.;(2 2)LOCALLOCAL與與LOCATELOCATE前前4 4個字母相同,故不可縮寫。本地個字母相同,故不可縮寫。本地型內存
44、變量只能在定義它的程序中使用,不能在上級或型內存變量只能在定義它的程序中使用,不能在上級或下級的調用程序中使用。下級的調用程序中使用。總頁第38頁總39頁第38頁例:例:建立一個程序,內容是子程序的嵌套調用及在過程調用建立一個程序,內容是子程序的嵌套調用及在過程調用中查看變量值的變化。中查看變量值的變化。程序如下:程序如下: * *主程序主程序GCCS.PRGGCCS.PRG SET TALK OFF SET TALK OFF CLEAR CLEAR PUBLIC X,Z PUBLIC X,Z X=1 X=1 Y=1 Y=1 Z=1 Z=1 DO SUB1 DO SUB1 ?“SUB1 ?“S
45、UB1結束后結束后:”:” ? MAIN-X=,X ? MAIN-X=,X ? MAIN-Y=,Y ? MAIN-Y=,Y WAIT WAIT DO SUB2 DO SUB2 ?“SUB2 ?“SUB2結束后結束后:”:” ? MAIN-Z=,Z ? MAIN-Z=,Z RETURN RETURNPROCEDURE SUB1 X=X+1 Y=Y*X RETURN &過程 SUB1結束PROCEDURE SUB2 PRIVATE Z Z=4 X=Z+2DO SUB3 ?“SUB2中中” ? SUB2-X=,XWAITRETURN &過程SUB2結束PROCEDURE SUB3LO
46、CAL X X=4Z=Z+3 ?”SUB3中中” ? SUB3-X=,X? SUB3-Z=,ZWAITRETURN&過程過程SUB3結束結束總頁第39頁總39頁第39頁6. 6. 子程序或過程的帶參調用子程序或過程的帶參調用 在調用過程時,有時需要將數據傳遞到被調用過程,在調用過程時,有時需要將數據傳遞到被調用過程,有時又需要從被調用過程將數據返回,實現數據相互傳有時又需要從被調用過程將數據返回,實現數據相互傳遞。遞。Visual FoxProVisual FoxPro為此提供了過程的帶參調用方法。為此提供了過程的帶參調用方法。 在調用過程的命令和被調用過程的相關語句中,分在調用過程的
47、命令和被調用過程的相關語句中,分別設置數量相同、數據類型一致且排列順序相互對應的別設置數量相同、數據類型一致且排列順序相互對應的參數表。調用過程的命令將一系列參數的值傳遞給被調參數表。調用過程的命令將一系列參數的值傳遞給被調用過程中的對應參數,被調用過程運行結束時,再將參用過程中的對應參數,被調用過程運行結束時,再將參數的值返回到調用它的上一級過程或主程序中。數的值返回到調用它的上一級過程或主程序中。總頁第40頁總39頁第40頁(1)(1)帶參調用帶參調用【命令【命令】 DO DO WITH WITH 【功能【功能】 調用指定過程,并為被調用過程提供參數。調用指定過程,并為被調用過程提供參數。
48、【說明【說明】 該命令只用在調用過程的程序中。此處該命令只用在調用過程的程序中。此處 又稱為實參表,其中的參數可以是常量、已賦值的變量又稱為實參表,其中的參數可以是常量、已賦值的變量或數值表達式,參數之間用逗號分開。或數值表達式,參數之間用逗號分開。總頁第41頁總39頁第41頁(2)(2)接受參數接受參數【命令【命令】 PARAMETERS PARAMETERS 【功能【功能】 接受調用過程的命令傳遞過來的參數。接受調用過程的命令傳遞過來的參數。【說明【說明】 該命令必須位于被調用過程的第一條可執行語句該命令必須位于被調用過程的第一條可執行語句處。此處處。此處 又稱為形參表,其中的參數一般為內
49、又稱為形參表,其中的參數一般為內存變量。形參與實參的個數應相等、數據類型和個數要存變量。形參與實參的個數應相等、數據類型和個數要對應相同。對應相同。總頁第42頁總39頁第42頁(3) (3) 參數的傳遞形式參數的傳遞形式 在在VF VF 的過程及自定義函數中都涉及參數傳遞。參數的的過程及自定義函數中都涉及參數傳遞。參數的傳遞形式分為傳遞形式分為值參數傳遞值參數傳遞和和引用參數傳遞引用參數傳遞( (傳地址傳地址) )。值參數傳遞值參數傳遞: : 在調用過程或自定義函數時在調用過程或自定義函數時, , 先計算出實先計算出實參的值參的值, , 并將其按位置對應關系傳遞給形式參數變量并將其按位置對應關
50、系傳遞給形式參數變量, , 形式形式參數變量值的改變不影響實際參數;參數變量值的改變不影響實際參數;引用參數傳遞引用參數傳遞: : 在調用過程或自定義函數時在調用過程或自定義函數時, , 將實際參將實際參數的地址傳遞給形式參數數的地址傳遞給形式參數, , 形式參數值的改變會影響實際參形式參數值的改變會影響實際參數。數。總頁第43頁總39頁第43頁在過程調用中的參數傳遞方式在過程調用中的參數傳遞方式: : VF VF 中的過程在調用時中的過程在調用時: : 當實參是常數、當實參是常數、( (變量變量) )或表達式時或表達式時, , 實參傳遞給形參屬于值傳實參傳遞給形參屬于值傳遞遞; ;當實參是變
51、量時當實參是變量時, , 實參傳遞給形參屬于引用實參傳遞給形參屬于引用傳遞。傳遞。總頁第44頁總39頁第44頁例例: :cleacleacleaclea all allset talk offset talk offx=5x=5y=10y=10?主程序未調用過程時變量的值主程序未調用過程時變量的值:?X=+str(X,2),Y=+str(Y,2)?X=+str(X,2),Y=+str(Y,2)do sub with x,(ydo sub with x,(y) )?主程序調用過程后變量的值主程序調用過程后變量的值:?X=+str(X,2),Y=+str(Y,2)?X=+str(X,2),Y=+s
52、tr(Y,2)set talk onset talk onreturnreturnprocedure subprocedure subparameters a,bparameters a,ba=a+5a=a+5b=b+10b=b+10?過程中變量的值過程中變量的值:?A=+str(a,2),B=+str(b,2)?A=+str(a,2),B=+str(b,2)returnreturn總頁第45頁總39頁第45頁8.4.4 8.4.4 自定義函數自定義函數Visual FoxProVisual FoxPro除了提供許多系統函數外,也允許用戶自定除了提供許多系統函數外,也允許用戶自定義函數(義函數(User Defined FuntionUser Defined Funtion),簡稱),簡稱UDFUDF。自定義。自定義函數既可以放在主程序中,只對主程序有效,也可以作函數既可以放在主程序中,只對主程序有效,也可以作為獨立文件保存,其擴展名為為獨立文件保存,其擴展名為. . PRG。在。在Visual FoxProVisual FoxPro中中UDFUDF可以分為:獨立可以分為:獨立UDFUDF和依附和依附UDFUDF。1 1獨立獨立UDFUDF獨立自定義函數和子程序的區別在于自定義函數必須有返獨立自定義函數和子程序的區別在于自定義函
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報書教師建議
- 夫妻財產分割合同協議模板
- 項目進展跟蹤系統的必要性試題及答案
- 項目管理資格考試的應考心態與復習技巧分享試題及答案
- 注冊會計師公司價值管理試題及答案
- 課題申報書數學
- 提升財務知識的途徑計劃
- 項目管理優先級排序試題及答案
- 新年職業素養提升計劃
- 2025年資本市場基礎試題及答案
- DZ∕T 0215-2020 礦產地質勘查規范 煤(正式版)
- 浙江省紡織服裝出口面臨的問題及應對措施
- MOOC 數據結構-西北大學 中國大學慕課答案
- 日本抵押貸款市場調研和分析報告(英文版)-2024年1月上傳培訓課件
- 多圖中華民族共同體概論課件第十一講 中華一家與中華民族格局底定(清前中期)根據高等教育出版社教材制作
- 人教版(部編版)小學語文五年級下冊期中復習課件1
- 牙周病學全套教學課件
- 酒店合作協議書酒店工程維修
- 《化解沖突收獲友誼》心理健康課件
- DB42-T 2185-2024 高速公路運營管理服務規范
- 寧德時代社招測評試題
評論
0/150
提交評論