




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第7章 FoxPro程序設計Visual FoxPro的工作方式程序文件的建立與編輯程序的基本結構分支結構循環結構過程1Visual FoxPro的工作方式Visual FoxPro系統提供有三種工作方式:即單命令方式、菜單方式及程序文件方式。 1.單命令方式 所謂單命令方式,即在Command 窗口輸入一條命令,完成一個操作的工作方式。 2.菜單方式所謂菜單方式,即通過打開不同的菜單選擇并完成不同的操作。 3.程序文件方式 程序文件(簡稱程序)也叫做命令文件。將對數據庫資源進行操作管理的命令和對系統環境進行設置的命令,集中在一個以(.PRG)為擴展名的命令文件中,然后再通過菜單方式或命令方式
2、運行該命令文件。所謂命令方式,即通過程序文件中的命令完成不同的操作。27.1.1 程序的概念有關此Visual FoxPro程序的幾點說明 :1注釋語句【格式1】NOTE 【格式2】* 【格式3】& 【功能】增強程序文件的易讀性或放棄中語句的執行 2對話開關語句【格式】SET TALK OFF|ON【功能】關閉或打開命令執行時的對話開關3命令的分行Visual FoxPro程序是命令行的序列,每個命令都以回車鍵結束,一行只能寫一條命令;若一條命令太長,一行寫不下,也可分行書寫,并在分行處加上續行符“;”,再按回車鍵。37.1.2 程序文件的建立、修改與執行1建立或修改程序文件 可用兩種方式調用
3、系統內置的文本編輯器建立或修改程序文件 : 命令方式 MODIFY COMMAND 程序文件名或 MODIFY FILE 程序文件名菜單方式 打開“文件”菜單,選擇“新建”;在“新建”窗口,選擇“程序”,再選擇“新建文件”2保存程序 程序輸入、編輯完畢,單擊【文件】|【保存】菜單項,或按Ctrl+W復合鍵,在“另存為”對話框中指定程序文件的存放位置和文件名,并單擊“保存”按鈕保存程序文件并退出文本編輯器。程序文件的默認擴展名是.PRG。43執行程序程序文件建立后,可以用多種方式、多次執行它。下面是兩種常用的方式。(1)菜單方式 單擊【程序】|【運行】菜單項,打開“運行”對話框; 從文件列表框中
4、選擇要運行的程序文件,并單擊“運行”命令按鈕,啟動運行該程序文件 (2)命令方式【格式】DO 【功能】執行指定、下的程序文件 注:執行程序文件時,將依次執行文件中的命令,直到所有命令執行完畢,或者執行到以下命令: CANCAL:終止程序運行,清除所有的私有變量,返回命令窗口; RETURN:結束程序執行,返回調用它的上級程序,若無上級程序則返回命令窗口; QUIT:結束程序執行并退出Visual FoxPro系統,返回操作系統 57.1.3 簡單的輸入輸出命令1ACCEPT命令【格式】ACCEPT TO 【功能】在程序執行過程中,將用戶交互式輸入的內容作為字符串賦值給指定內存變量。 該命令只接
5、受字符型數據,輸入的字符串不需要加定界符2INPUT命令 【格式】INPUT TO 【功能】在程序執行過程中,將用戶交互式輸入的內容賦值給指定內存變量 可以輸入字符型、數值型、邏輯型、日期型和日期時間型等類型數據,而且可以是常量、變量、函數或表達式等形式,按回車鍵結束輸入,系統將輸入的數據賦值給。6【例】編程從鍵盤輸入某數據庫的文件名,要求打開該數據庫并顯示其內容。程序文件名為PROG2.PRG。MODI COMMAND PROG2SET TALK OFFCLEARACCEPT “請輸入數據庫名:” TO AAAOPEN DATABASE &AAAACCEPT 請輸入表名 TO BBBUSE
6、&BBBLISTUSESET TALK ONRETURN(p1.prg)7【例】從鍵盤輸入兩個任意正數,編程求以兩數為邊長的長方形面積。程序文件名為PROG4.PRGSET TALK OFFCLEARINPUT “長方形一邊的長為:” TO AINPUT “長方形另一邊的長為:” TO BS=A*B? “長方形的面積為:” , SSET TALK ONRETURN(p2.prg)83WAIT命令【格式】WAIT TO WINDOW AT, NOWAIT CLEAR|NOCLEAR TIMEOUT【功能】顯示提示信息,暫停程序執行,直到用戶按任意鍵或單擊鼠標時繼續執行程序。 若選擇可選項TO ,
7、將輸入的單個字符作為字符型數據賦給指定的;若用戶是按Enter鍵或單擊鼠標,的值為空串。 若省略所有可選項,屏幕顯示“鍵入任意鍵繼續”默認提示信息 9【例】在STUDENT數據庫的STUD表中顯示任意一個系學生的情況。程序文件名為PROG6.PRGSET TALK OFFCLEAROPEN DATABASE STUDENTUSE STUDWAIT “請輸入待查學生的系號(13):” TO NIF VAL(N)3WAIT “輸入無效,結束程序運行!” WINDOW TIMEOUT 5RETURNELSESTORE “0”+N TO AAALIST FOR 系別號=AAAENDIFCLOSE DA
8、TABASESET TALK ONRETURN 104三條輸入命令的異同ACCEPT命令只能接受字符型數據,不需定界符,輸入完畢按回車鍵結束; WAIT命令只能輸入單個字符,且不需定界符,輸入完畢不需按回車鍵; INPUT命令可接受數值型、字符型、邏輯型、日期型和日期時間型數據,數據形式可以是常量、變量、函數和表達式,如果是字符串,需用定界符,輸入完畢按回車鍵結束。11程序的基本結構 Visual FoxPro系統提供的命令豐富,且功能強大,把這些命令和程序設計語句有效地組織在一起,就形成了實現某一特定功能的程序。 Visual FoxPro系統的程序有兩個特點:一是程序控制流模式(面向過程)
9、,由順序、分支、循環三種基本結構構成。二是面向對象可視化的結構程序模塊,在每個模塊的內部也是由程序控制流組成。常見的控制結構如下: 1順序結構 2分支結構 3循環結構 4過程(函數)結構12分支結構1單向分支 【格式1】 IF條件表達式 命令行序列1 ELSE 命令行序列2 ENDIF語句功能: 該語句首先計算條件表達式的值,當條件表達式的值為真時,執行命令行序列1;否則,執行命令行序列2。13【例】編寫一密碼校驗程序(假設密碼為ABC)。程序文件名為P3.PRG。SET TALK OFFCLEARACCEPT “請輸入您的密碼:” TO AAAIF AAA=”ABC”CLEAR? ”歡迎使用
10、本系統!”ELSE?”密碼錯誤!”WAITQUITENDIFSET TALK ON(p3.prg)14【例】編寫一查詢學生基本情況的程序,P4.PRG。set talk offopen database jsjdjksuse t_bmbclearaccept 請輸入學生的準考證號: to zzzlocate for zkzh=zzzif .not. eof()?姓名: + xm?性別: + IIF(xb,男,女)?出生日期: + DTOC(csrq,1)else?查無此人!endifclose databasereturn153多向分支 多向分支語句,即根據多個條件表達式的值,選擇執行多個操作
11、中的一個對應執行 。語句格式: DO CASE CASE條件表達式1 命令行序列1 CASE條件表達式2 命令行序列2 CASE條件表達式N命令行序列N OTHERWISE 命令行序列N+1 ENDCASE16【例】假設收入(P)與稅率(R)的關系如下表,編程求稅金。程序文件名為P5.PRG。 0 P800R= 0.05 800 P2000 0.08 2000P5000 0.1 P5000 SET TALK OFFCLEARINPUT “請輸入收入:” TO PDO CASECASE P800 R=0CASE P2000 R=0.05CASE P5000 R=0.08OTHERWISE R=0
12、.1ENDCASETAX=P*R? ”稅金為:”,TAXSET TALK ON RETURN (p5.prg) 174使用分支語句應注意的幾點 (1)IF ENDIF和DO CASE ENDCASE 必須配對使用,DO CASE與第一個CASE條件表達式之間不應有任何命令。 (2)條件表達式可以是各種表達式或函數的組合,其值必須是邏輯值。 (3)命令行序列可以由一個或多個命令組成,可以是條件控制語句組成的嵌套結構。 (4)DO CASE ENDCASE 命令,每次最多只能執行一個命令行序列。在多個CASE項的條件表達式值為真時,只執行第一個條件表達式值為真的命令行序列,然后執行ENDCASE的
13、后面的第一條命令。18循環結構1DO WHILE循環語句【格式1】DO WHILE ENDDO一個循環結構一般應具備如下的條件:(1)循環的初始條件:一般為給循環控制變量賦初值;(2)循環頭:循環語句的起始,設置、判斷循環條件;(3)循環尾:循環語句的結尾;(4)循環體:位于循環頭和循環尾之間、循環控制重復執行的語句序列 19【格式2】DO WHILE LOOP EXIT ENDDO LOOP語句:強行返回到循環開始語句。EXIT語句:強行跳出循環,接著執行ENDDO后的語句 20【例】編程求123100之和。程序文件名為P6.PRG。SET TALK OFFCLEARS=0I=1DO WHI
14、LE I=90的所有記錄。程序文件名為P7.PRG。(p71.prg)SET TALK OFFCLEAROPEN DATABASE jsjdjksUSE t_cjbDO WHILE .NOT. EOF()IF bscj=90DISPLAYENDIFSKIPENDDOCLOSE DATABASESET TALK ONRETURN SET TALK OFFCLEAROPEN DATABASE jsjdjksUSE t_cjbLOCATE FOR bscj=90DO WHILE .NOT. EOF()DISPLAYWAITCONTINUEENDDOCLOSE DATABASESET TALK ONR
15、ETURN22【例】編程顯示STUDENT數據庫的STUD表中除“李寧”以外的所有記錄。SET TALK OFFCLEAROPEN DATABASE STUDENTUSE STUDDO WHILE .NOT. EOF() IF 姓名=”李寧” SKIP LOOP ENDIF DISPLAY SKIPENDDOCLOSE DATABASESET TALK ONRETURN23 2FOR循環語句 【格式】FOR = TO STEP ENDFOR|NEXT 使用FOR循環語句的有關說明: 省略STEP ,則步長為默認值1;初值、終值和步長都可以是數值表達式,但這些表達式僅在循環語句開始執行時計算一次
16、。循環語句執行過程中,初值、終值和步長是不會改變的,并由此確定循環的次數; 可以在循環體內改變循環變量的值,但會改變循環執行次數; EXIT和LOOP命令可以出現在循環體內。執行LOOP命令時,結束本次循環,循環變量增加一個步長值,返回FOR循環頭判斷循環條件是否成立。執行EXIT命令時,程序跳出循環,執行循環尾后面的語句 24【例6-23】從鍵盤輸入10個數,編程找出其中的最大值和最小值。程序文件名為P8.PRG。SET TALK OFFCLEARINPUT “請從鍵盤輸入”+alltrim(str(i)+“個數: TO ASTORE A TO MAX,MINFOR I=2 TO 10? “
17、請從鍵盤輸入”+I+?i?“個數:” TO AIF MAXA MIN=AENDIFENDFOR? “最大值為:” , MAX? “最小值為:” , MINSET TALK ONRETURN254使用循環語句時應注意的幾點 (1)DO WHILE和ENDDO、FOR和ENDFOR必須配對使用。 (2)命令行序列可以是任何FoxPro命令或語句,也可以是循環語句,即可以為多重循環。 (3)循環變量應是數值型的內存變量或數組元素。 (4)EXIT和LOOP命令嵌入在循環體內,可以改變循環次數,但是不能單獨使用。EXIT的功能是跳出循環,轉去執行ENDDO、ENDFOR后面的第一條命令;LOOP的功能
18、是轉回到循環的開始處,重新對“條件”進行判斷,相當于執行了一次ENDDO、ENDFOR命令,它可以改變命令行序列中部分命令的執行次數。EXIT、LOOP可以出現在命令行序列的任意位置。265多重循環多重循環即循環的嵌套,是在一個循環結構的循環體中又包含另一個循環。我們稱外層循環為外循環,被包含的循環為內循環。嵌套層數一般沒有限制,但內循環的循環體必須完全包含在外循環的循環體中,不能相互交叉。正確的嵌套關系如:DO WHILE DO WHILE DO WHILE ENDDO ENDDO ENDDO 27【例】編程輸出下三角形乘法口訣表。程序文件名為P9.PRG。SET TALK OFFCLEAR
19、X=1DO WHILE X=9Y=1DO WHILE Y=XS=X*Y? STR(Y,1)+*+STR(X,1)+=+STR(S,2)+ Y=Y+1ENDDO?X=X+1ENDDOSET TALK ONRETURN287.3 多模塊程序應用程序一般都是包含多個程序模塊,模塊是一個相對獨立的程序段,它可以被其他模塊所調用,也可以去調用其他的模塊。通常被其他模塊調用的模塊稱為子程序,后之為主程序。7.3.1 模塊的定義和調用格式:PROCEDURE|FUNCTION RETURN 表達式 ENDPROC、ENDFUNC注意:過程執行到RETURN時將跳轉到調用程序,并返回表達式的值。如果缺少RET
20、URN時,將默認返回一個邏輯真.T.。291 過程/模塊文件的建立 過程文件的建立方法與程序文件相同。可用MODIFY COMMAND 命令或調用其他文字編輯軟件來建立。2 過程/模塊的調用格式1:DO |格式2:( ) &即在名字后加一對小括號注:格式2即可以作為命令使用(返回值被忽略),也可以作為函數出現在表達式里。30&p10.prgset procedure to p12clear* p11()do f1?流程序結束* 過程f1procedure f1?過程f1開始?調用f3( )?返回值:,f3( )?過程f1結束endproc&p11.prg? 子程序p11開始?調用f3( )x=
21、f2()?返回值為:,x?子程序p11結束return&p12.prgprocedure f2returnprocedure f3return 100312過程文件的打開 如果被調用某過程文件與主程序不在同一同件中時,必須先打開該過程文件,打開過程文件命令為: 【格式】SET PROCEDURE TO ADDITIVE 任何時候系統只能打開一個過程文件,當打開一個新的過程文件時,原已打開的過程文件自動關閉。如果選用ADDITIVE,那么在打開過程文件時,并不關閉原先已打開的過程文件。3過程文件的關閉關閉過程文件可用下列命令: 【格式一】SET PROCEDURE TO 【格式二】CLOSE P
22、ROCEDURE 過程文件327.3.3 過程調用中的參數傳遞過程可以接收調用程序傳遞過來的參數,并能夠根據接收到的參數控制程序流程或對接收的參數進行處理,從而大提供了模塊程序功能設計的靈活性1有參過程中的形式參數定義有參過程中的形式參數定義語句為: 【格式】PARAMETERS|LPARAMETERS 該語句必需是過程中第一條語句。中的參數可以是任意合法的內存變量名,用PARAMETERS命令聲明的形參變量被看作過程程序的私有變量。而LPARAMETERS則被看成是局部變量。332程序與被調用過程間的參數傳遞程序與被調用過程間的參數傳遞是通過過程調用命令DO WITH 來實現的。【說明】(1
23、)DO命令中參數稱為實際參數,PARAMATERS命令中的參數稱為形式參數。兩個中的參數必須相容,即個數相同,類型和位置一一對應;(2)Visual FoxPro的參數傳遞規則為:如果實際參數是常數或表達式則傳值,如果實際參數是變量則傳址,即傳遞的不是實參變量的值而是實參變量的地址,這樣,過程中對形參變量值的改變也將使實參變量值改變。如果實參是內存變量而又希望進行值傳遞,可以用圓括號將該內存變量括起來,強制該變量以值方式傳遞數據 34【例】用參數傳遞編程,計算圓的面積。* 主程序名P13.prgSET TALK OFFCLEARS=0INPUT ”請輸入圓的半徑:” TO RDO AREA WITH R,S? ”圓的面積為:”,SSET TALK ONPROCEDURE AREA & 計算面積的過程PARAMETER X,Y & 形參說明Y=3.1416*X*2RETURN35SET TALK OFFCLEARS=0INPUT 請輸入圓的半徑: TO RDO AREA WITH R,(S) &強制按傳值方式? 圓的面積為:,SSET TALK ON?PROCEDURE AREA & 計算
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論