




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
講師:徐紅波E-mail:VisualFoxPro程序設計教程第5章程序設計根底VFP的工作方式: 1)交互式工作方式是直接在命令窗口中執行命令或用菜單及工具欄按鈕執行命令。
2)自動化工作方式是用編寫的程序或用各種生成器生成程序文件再執行。
5.1程序文件的建立、修改、執行
5.1.1程序 程序是能夠完成一定任務的命令集合。程序文件的擴展名為prg。5.1.2程序文件的建立和修改1)用界面方式建立和修改程序2)用命令方式建立和修改程序 格式:MODIFYCOMMAND[<文件名>|?] 功能:翻開程序編輯器,用于建立或修改程序文件5.1.3程序文件的執行1〕用界面方式執行程序文件2〕用命令方式執行程序文件 格式:DO<程序名> 功能:執行<程序名>指定的程序5.1.4程序的書寫規那么 一個程序是由假設干行組成,每行由回車鍵結束1〕命令行:一個命令可以寫在一行也可以分多行書寫,分行書寫時應該在行尾加續行符“;”2〕命令的注釋:注釋符有&&,*,NOTE三種 格式1:&&[<注釋內容>] 格式2:*[<注釋內容>] 格式3:NOTE[<注釋內容>] 功能:程序注釋 說明:格式1為行尾注釋,即可寫在命令行的尾部。格式2與格式3為行首注釋,即以*和NOTE開始的行都為注釋例5.1在學生庫中查找VFP與C的成績大于90分的學生的學號,姓名以及課程VFP與C語言的成績opendatabase學生 &&翻開學生數據庫select學生.學號,學生.姓名,學生成績.vfp,學生成績f.c;where學生.學號=學生成績.學號and學生.學號=學生成績f.學號and;學生成績.vfp>=90AND學生成績f.c>=90; &&命令分行書寫要加分號from學生,學生成績,學生成績f &&select命令結束closedatabaseall &&關閉數據庫return5.1.5調試命令與輔助命令1、SETTALK命令格式:SETTALKON|OFF功能:設置是否顯示命令在執行過程中的狀態信息,ON為顯示信息〔默認值〕,OFF為不顯示信息。如:命令copyfiles學生.*to學生1.*,假設選ON,那么顯示復制過程中復制的幾個文件的信息。假設選OFF,那么無信息。2、CANCEL命令格式:CANCEL功能:終止程序運行,去除所有私有變量,返回到命令窗口3、RETURN命令格式:RETURN功能:結束當前程序執行,返回到調用它的上級程序,假設無上級調用程序,那么返回到命令窗口4、QUIT命令格式:QUIT功能:退出VFP系統,返回WINDOWS操作系統5.2輸入與輸出命令
5.2.1輸入命令1〕INPUT命令格式:INPUT[<字符表達式>]TO[<內存變量>]功能:從鍵盤輸入數據,回車后將數據賦給內存變量說明: 1)<字符表達式>為提示信息。 2)輸入的數據可為,常量,變量,表達式。 3)輸入C,L,D型常量時要用定界符。例5.2查找指定姓名對應學生的學號,性別和數學成績。opendatabase學生input"輸入姓名:"tonameselect學生.學號,學生.姓名,學生成績.數學from學生,學生成績;where學生.姓名=nameand學生成績.學號=學生.學號closedatabaseallreturn2〕ACCEPT命令格式:ACCEPT[<字符表達式>]TO[<內存變量>]功能:從鍵盤輸入字符串數據,賦給內存變量說明: 1〕<字符表達式>為提示信息。 2〕輸入的字符串不需加定界符,否那么會將定界符作為字符串的一局部。 3〕假設不輸入數據直接按回車鍵,將空串賦給變量。3、WAIT命令格式:WAIT<字符表達式>]TO[<內存變量>][WINDOW[AT<行,列>][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<數值表達式>]功能:暫停程序運行,字符表達式為提示信息,待從鍵盤輸入一個字符賦給內存變量,程序繼續執行。說明:1〕省略[<字符表達式>],那么顯示默認信息,按任意鍵繼續…。2〕對于[TO<內存變量>],假設直接回車,變量中內容為空串,省略此項,輸入字符不保存。3〕[[WINDOW[AT<行,列>]]設置信息窗口在屏幕上的位置,省略AT<行,列>信息將顯示在屏幕的右上角。4〕[NOWAIT]不等待輸入直接往下執行。5〕CLEAR去除提示信息窗口,NOCLEAR不去除提示信息窗口,直到執行一條WAITWINDOW命令或WAITCLEAR命令為止。6〕[TIMEOUT<數值表達式>]由數值表達式指定等待輸入的秒數。假設超出秒數,那么不等待自動往下執行。例5.3WAIT的應用wait"繼續?"toxwindowtime105.2.2輸出命令格式:@<行,列>[SAY<表達式>][GET<變量名>][DEFAULT<表達式>]功能:在屏幕指定行列輸出表達式的值并修改內存變量的值。說明:1〕<行,列>中行自上而下編號,列自左至右編號,編號從0開始,行列可以使用小數精確定位。2〕省略SAY選項,GET變量值在行列指定位置開始顯示。假設選SAY選項,先顯示表達式的值,然后再顯示GET變量值。3〕GET中的變量必須有初值或用[DEFAULT<表達式>]中的<表達式>命令定值。4〕GET選項必須用READ命令激活。例5.4查找學生成績大于等于指定成績的或數學大于等于指定分數的學生學號,姓名,入學成績,數學成績。clearopendatabase學生@10,10say"輸入入學成績:"getrxcjdefault0@10,10say"輸入數學分數:"getsxfsdefault0read@10,10say"入學成績為"+str(rxcj)+“數學為"+str(sxfs)select學生.學號,學生.姓名,學生.入學成績,學生成績.數學;from學生,學生成績where學生.入學成績>=rxcjand學生成績.數學>=sxfs;and學生.學號=學生成績.學號closedatabaseallreturn5.3程序的根本結構 程序設計一般采用順序,條件,循環這三種根本結構,這三種結構貫穿于整個程序的設計中。5.3.1三種根本結構1〕順序結構:程序是按語句排列的先后順序來執行。2〕選擇結構:條件為真執行一局部語句,否那么執行另一局部語句。3〕循環結構:當條件為真執行循環體,否那么結束循環。5.3.2順序結構程序設計例5.7求圓面積 s=0 r=0 input"輸入r:"tor s=3.14*r*r ?"s=",s return5.3.3選擇結構程序設計1、二分支選擇結構格式:IF<條件> <命令行列1>ELSE <命令行列2>ENDIF功能:當條件成立時執行命令序列1,否那么執行命令序列2。當不包含ELSE時,條件成立執行命令序列1,否那么執行ENDIF后的語句。說明:IF和ENDIF必須成對出現,此語句可以嵌套使用,條件是邏輯表達式例5.8當r>=0時計算圓面積否那么輸出不合題意settalkoffs=0r=0input"輸入r:"torifr>0 s=pi()*r*r ?"s=",selse ?"r<0不合題意!"endif?"程序結束"return例5.9輸入學號,在學生表中查詢學生姓名,學生入學成績,假設沒有找到,輸出無此學生clearopendatabase學生use學生input"輸入學號:"toxhlocatefor學號=xhiffound() ?"學號:"+學號+space(2)+"姓名:"+姓名+space(2)+str(入學成績,3)else ?"無此學生"endifclosedatabaseallreturn2、多分支選擇結構格式: DOCASE CASE<條件1> <命令序列1> …… CASE<條件n> <命令序列n> [OTHERWISE] <命令序列n+1> ENDCASE功能:依次判斷條件是否成立,假設某個條件成立,那么執行對應的語句序列,然后執行ENDCASE的后面語句,假設所有條件都不成立,就執行OTHERWISE語句序列n+1。說明: 1)條件為邏輯表達式。 2)DOCASE與ENDCASE必須成對出現。例5.10輸入學生姓名,成績,給出成績的等級,成績為百分制,成績的等級情況為90-100為優秀,70-89為良好,60-69為及格,0-59為不及格name=“”number=0grade=""input"輸入學生姓名:"tonameinput"輸入學生成績:"tonumberdocasecasenumber>=90andnumber<=100grade="優秀"casenumber>=70andnumber<=89grade="良好"casenumber>=60andnumber<=79grade="及格"casenumber>=0andnumber<=59grade="不及格"otherwisegrade="輸入錯誤"endcase?name,number,gradereturn5.3.4循環結構程序設計 VFP有三種循環結構,它們是DOWHILE,FOR,SCAN。1、DOWHILE循環格式:DOWHILE<條件> <命令序列1> [LOOP] <命令序列2> [EXIT] <命令序列3> ENDDO功能: 1〕當條件成立時執行DOWHILE與ENDDO之間的命令,這些命令稱為循環體。 2〕程序執行到ENDDO時自動返回到WHILE<條件>處重新判斷條件是否成立,以決定是否循環。 3〕當條件不成立時,結束循環,執行ENDDO下面命令。說明: 1〕DOWhile與ENDDO必須成對出現。 2〕執行LOOP命令時結束本次循環,自動返回DOWHILE處重新判斷循環條件。 3〕遇到EXIT命令時結束循環,執行ENDDO下面命令。例5.11求1+2+3+…+100的值sum=0n=1dowhilen<=100sum=sum+nn=n+1enddo?"s=",sreturn例5.12對100個任意數求和,正數求和,負數不求和,當輸入0.001時停止輸入sum=0n=1dowhilen<=100 input"x:"tox n=n+1 ifx<0 loop endif ifx=0.0001 exit endif sum=sum+xenddo?“sum=",sumreturn2、FOR循環格式:FOR<循環變量>=<初值>TO<終值>[STEP<步長>] <循環體>ENDFOR|EXIT功能:先把初值賦給循環變量,再判斷循環條件是否成立。假設不成立就結束循環,執行循環后面的命令,假設條件成立,就執行循環體,循環再執行一此,循環變量自動增加一個步長。再判斷循環變量是否成立,以判斷是否執行循環體。說明:1〕循環變量為內存變量,初值,終值,步長為數值表達式。2〕當步長為0時循環變量無增量,將死循環,步長默認值為1。3〕在循環體內可以改變循環變量,但這會改變循環次數。4〕在循環體內可以包括,LOOP和EXIT。當遇到LOOP時,本次循環結束,循環變量增加一個步長值,進入下一次循環,當遇到EXIT時,結束循環,執行下面的命令。例5.13求1+2+…+nsum=0input"輸入n:"tonfori=1ton sum=sum+iendfor?"s=",sreturn3、SCAN循環格式:SCAN[<范圍>][FOR<條件1>][WHILE<條件2>] <循環體>ENDSCAN功能:在當前表的指定范圍內記錄指針自動移到滿足條件1或條件2的記錄上,執行循環體,然后再將記錄指針自動移動到下一個滿足條件1或條件2的記錄上再一次執行循環體直至超出范圍。默認范圍為表中所有記錄。說明:1〕循環體內可包含LOOP與EXIT命令,當遇到LOOP命令時,結束本次循環返回到SCAN處進入下一次循環。當遇到EXIT時,結束循環,執行ENDSCAN后面的命令。例5.14逐條顯示學生表中入學成績大于等于490分的學生的學號,姓名,入學成績,并統計人數clearn=0opendatabase學生use學生scanfor入學成績>=490 dispplay學號,姓名,入學成績 n=n+1endscanclosedatabaseall?"n=",nreturn4、循環的嵌套:在循環命令的循環體中包含了其他循環。循環嵌套就是指多重循環。例5.15輸出乘法表: fori=1to9 forj=1toi ??str(j,2)+'*'+str(i,2)+spac(2)+"="+str(i*j,3) endfor ? endfor return5.4多模塊程序結構 多模塊程序結構是將一個大的程序劃分為一個主調程序和幾個被調程序。將主調程序稱為主程序模塊,被調程序稱為子程序模塊。由于子程序模塊可以屢次被調用又可以相互調用,提高代碼的重用率,也便于軟件修改與維護。VFP實現子程序模塊有三種方式:子程序、過程、自定義函數。三者主要區別:子程序無返回值,而過程和自定義函數有返回值。5.4.1子程序、過程、自定義函數一、子程序1)定義:子程序是一個程序文件,它與主程序的主要區別:主程序只能調用其他程序而不能被其他程序調用,子程序既能被主程序調用也能被其他子程序調用。2)格式: [PARAMETERS<形參表>] <命令序列> RETURN3)說明:[PARAMETERS<形參表>]中的形參用于接收DO命令發送的實參值。當返回調用程序時把這些形參值回送給相應的實參變量。多個形參之間用逗號隔開。4)調用格式:DO<文件名>[WITH<實參表>]功能:調用由文件名指定的程序。說明: (1)實參表中實參是傳給子程序的,實參可為常量,變量,表達式。假設實參個數少于形參個數,多余的形參值取邏輯假。假設實參個數多于形參個數,系統提示錯誤信息。(2)實參為常量或一般表達式時,系統將其值傳給對應形參變量,稱為值傳遞。假設實參為變量,此時形參與實參實際上是同一個變量,稱為地址傳遞或引用傳遞。5)調用過程。主程序子程序DO子程序RETURN例5.16用主程序與子程序方式求長方形的面積,請用傳參數和不傳參數兩種方式不傳參數cleardoCZ1return*CZ1.prgx=0y=0s=0input"輸入長:"toxInput"輸入寬:“toys=x*y?"s=",sreturn傳參數x=0y=0s=0input"輸入長:"toxinput"輸入寬:"toydoCZ2withx,y,s?"s=",sreturn*CZ2.prgparametersa,b,cc=a*breturn二、過程1)概念:過程和子程序的作用根本是一樣的,調用關系也相同,主要區別:過程可以和主程序存在同一個文件中,也可以一個或多個過程存在一個文件中,而一個文件只能有一個子程序,多個子程序要存在多個文件中。子程序可直接調用,而過程如果與主調程序存在一個文件中,可直接調用,如果未與主調程序存在一個文件中,必須通過翻開過程文件才可以調用。使用完再將過程文件關閉。子程序無返回值,過程有返回值。2)格式: PROCEDURE<過程名> [PARAMETERS<形參表>] <命令行列> [RETURN<表達式>] [ENDPROC]說明: 1〕[RETURN<表達式>]子句作用是返回表達式的值,假設只有RETURN將返回邏輯真。假設無此子句,過程結果時自動執行一條隱含的RETURN命令。2〕[ENDPROC]子句表示過程結束,一般可不選。3〕過程與子程序一樣可以嵌套調用。3)過程文件的翻開格式:SETPROVEDURETO[<過程文件名列表>][ADDITIVE]功能:翻開由過程文件名列表指定的過程文件,過程名列表是用逗號分隔的過程文件名。說明: (1)無任何選項將關閉所有翻開的過程文件。 (2)選[ADDITIVE],在新翻開過程文件時并不關閉原來翻開的過程文件。4)關閉過程文件格式1:RELEASEPROCEDURE<過程文件名列表>格式2:CLOSEPROCEDURE功能:格式1用于關閉過程文件列表中過程文件,格式2用于關閉所有過程文件5)過程的調用格式1:DO<過程名>[WITH<實參表>]格式2:
<過程名>()功能:格式1調用由<過程名>指定的過程。格式2不用傳遞參數直接調用例5.17求長方形面積。用主程序與過程在一個文件做,再用主程序與過程不在一個文件做。再用調用格式2做主程序與過程在一個文件中x=0y=0s=0input"輸入x:“toxinput"輸入y:"toydop1withx,y,s?"s=",sreturnprocedurep1PARAMETERSa,b,cc=a*breturn主程序與過程不在一個文件中setproceduretof1x=0y=0s=0input"輸入x:“toxinput"輸入y:"toydop1withx,y,s?"s=",scloseprocedureReturn*f1.prgprocedurep1parametersa,b,cc=a*breturninput"輸入x:"Toxinput"輸入y:"Toys=x*yreturns調用格式2x=0y=0s=0s=p1()?"s=",sreturnprocedurep1input"輸入x:“toxinput"輸入y:“toys=x*yreturns例5.18傳遞數組的應用cleardimensiona(5)fori=1to5 a(i)=iendfors=0dop1witha,sfori=1to5 ??a(i),space(2)endfor?"s=",sreturnproceudrep1parametersb,sfori=1to5 b(i)=2*b(i) s=s+b(i)endforreturn三、自定義函數1)概念:函數與子程序,過程一樣,是獨立子模塊,調用關系也相同,它的程序段要和主調程序在同一文件中,它的調用與標準函數相同。它可以進行參數傳遞,可以有返回值2)格式 FUNCTION<函數名> [PARAMETERS<形參表>] <命令序列> [RETURN<表達式>] [ENDFUNC]說明: (1)[RETURN<表達式>]子句是返回函數的值,假設無表達式,RETURN返回邏輯真 (2)假設不選[RETURN<表達式>]子句,在函數結束處自動執行一條隱含的RETURN命令 (3)[ENDFUNC]表示函數的結束,一般不用3)調用 格式:函數名([<實參表>]) 功能:調用由函數名指定的自定義函數例5.19求長方形的面積clearx=0y=0s=0input"輸入x:"toxinput"輸入y:"toys=f(x,y)?"s=",sreturnfunctionfparametersa,bc=a*breturnc5.4.2變量的作用域 變量的作用域是變量在程序中的有效區域。在多模塊程序結構模塊中定義的變量不一定在另一個模塊中有效。按變量的作用域將變量分為公有(public)變量,私有(private)變量,局部(local)變量三種。 公有變量是在任何模塊中都能使用的變量,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年云計算服務模式創新案例分析報告:市場競爭格局與機遇
- 2025年醫院信息化建設醫院物資管理系統初步設計評估報告
- 九大文化娛樂產業人才培養與職業發展規劃研究報告
- 特色小鎮產業培育資金申請政策導向與產業集聚效應報告
- 2025年房地產行業房地產企業數字化轉型戰略研究報告
- 2025新能源汽車制造產業布局下的汽車產業鏈整合報告
- 2025年數字貨幣對金融行業數字貨幣金融監管的監管政策與監管實踐分析報告
- 2025年醫藥流通供應鏈優化與成本控制技術創新趨勢報告
- 2025年K2教育STEM課程實施與教育信息化融合研究報告
- 2025年廣播媒體融合發展中的跨界合作與生態構建報告
- 《外科微創技術》課件
- 產品審核VDA6.5培訓課件
- 如何建立與客戶良好的關系
- 邊防派出所知識講座
- 消防安全隱患排查投標方案(技術標)
- 刑事案件模擬法庭劇本完整版五篇
- PSSE軟件操作說明
- 教科版科學三年級下冊實驗報告單
- 22S803 圓形鋼筋混凝土蓄水池
- 人力資源管理概論第三章員工招聘、篩選與錄用-董克用
- (完整版)新醫療器械分類目錄(舊分類對應新分類)
評論
0/150
提交評論