




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第七章
程序設計基礎1第七章
程序設計基礎1
本章要點VisualFoxPro的工作方式程序文件的建立與編輯程序的基本結構分支結構循環結構過程2本章要點VisualFoxPro的工作方式2VisualFoxPro的工作方式
VisualFoxPro系統提供有三種工作方式:即單命令方式、菜單方式及程序文件方式。
1.單命令方式VisualFoxPro單命令方式是利用Command窗口來實現的。用戶通過Command窗口輸入命令,并執行操作。在Command窗口中,可以輸入單個的操作命令和系統命令,完成對數據庫的操作管理和系統環境的設置;也可以建立命令文件及運行命令文件。Command窗口不僅是VisualFoxPro命令的執行窗口,也是VisualFoxPro命令文件的編輯窗口。所謂單命令方式,即輸入一條命令,完成一個操作的工作方式。3VisualFoxPro的工作方式Vis
2.菜單方式在VisualFoxPro環境下,也可以通過系統提供的菜單選項,對數據庫資源進行操作管理和對系統環境進行設置;并通過菜單建立命令文件及運行命令文件。所謂菜單方式,即通過打開不同的菜單選擇并完成不同的操作。我們在以前各章所講的內容其實都可說是菜單方式。
3.程序文件方式程序文件(簡稱程序)也叫做命令文件。運用程序文件方式進行數據庫管理,是通過程序文件編輯工具,將對數據庫資源進行操作管理的命令和對系統環境進行設置的命令,集中在一個以(.PRG)為擴展名的命令文件中,然后再通過菜單方式或命令方式運行該命令文件。所謂命令方式,即通過程序文件中的命令完成不同的操作。42.菜單方式4*功能說明:求圓形的面積。*文件名:L501.PRGCLEARCTALK=SET("TALK")SETTALKOFFINPUT"請輸入圓的半徑,半徑="TORS=PI()*R*R?"半徑為"+ALLTRIM(STR(R))+"的圓,面積=",SSETTALK&CTALKRETURN
5*功能說明:求圓形的面積。56.1.1程序的概念
有關此VisualFoxPro程序的幾點說明:1.注釋語句【格式1】NOTE<注釋內容>【格式2】*<注釋內容>【格式3】&&<注釋內容>【功能】增強程序文件的易讀性或放棄<注釋內容>中語句的執行
2.對話開關語句【格式】SETTALKOFF|ON【功能】關閉或打開命令執行時的對話開關,許多命令在執行時會返回一些有關執行狀態的信息,這些信息通常會顯示在VF主窗口、狀態欄或用戶自定義窗口里。SETTALK命令用以設置是(ON)否(OFF)顯示這些信息。默認值為ON。3.命令的分行(續行符);66.1.1程序的概念有關此Visual6.1.2程序文件的建立、修改與執行
1.建立或修改程序文件可用兩種方式調用系統內置的文本編輯器建立或修改程序文件:命令方式MODIFYCOMMAND[<盤符>][<路徑>]〈程序文件名〉菜單方式打開“文件”菜單,選擇“新建”;在“新建”窗口,選擇“程序”,再選擇“新建文件”76.1.2程序文件的建立、修改與執行1.建立或修改程程序文件的建立與執行一.建立建立:文件新建程序保存:文件保存命令:MODIFYCOMMAND<文件名>注:若指定文件存在,則打開修改;否則系統認為是要建立一個指定了名字的文件。8程序文件的建立與執行注:若指定文件存在,則打開修改;否則系統(2)運行程序下面的任一方法均可運行程序:■選擇【程序】菜單下的“運行”菜單,利用“運行”對話框選擇要運行的程序;■在命令窗口中輸入如下命令:DO<程序文件名>
系統就會運行這個程序。如果文件不加擴展名,系統會假定它具有.PRG的擴展名,如果想運行一個具有其它擴展名的命令文件時,在輸入命令時必須給出這個命令文件的全名。如:要運行上例中編輯的程序,可以在命令窗口中輸入:
DOL501然后按回車鍵執行。9(2)運行程序下面的任一方法均可運行程序:DO<程序文件2.保存程序程序輸入、編輯完畢,單擊【文件】|【保存】菜單項,在“另存為”對話框中指定程序文件的存放位置和文件名,并單擊“保存”按鈕保存程序文件并退出文本編輯器。程序文件的默認擴展名是.PRG。
102.保存程序103.執行程序程序文件建立后,可以用多種方式、多次執行它。下面是兩種常用的方式。(1)菜單方式①
單擊【程序】|【運行】菜單項,打開“運行”對話框;②
從文件列表框中選擇要運行的程序文件,并單擊“運行”命令按鈕,啟動運行該程序文件
(2)命令方式【格式】DO[<盤符>][<路徑>\]<文件名>【功能】執行指定<盤符>、<路徑>下的程序文件
113.執行程序11執行程序文件時,將依次執行文件中的命令,直到所有命令執行完畢,或者執行到以下命令:①CANCAL:終止程序運行,清除所有的私有變量,返回命令窗口;③RETURN:結束程序執行,返回調用它的上級程序,若無上級程序則返回命令窗口;④QUIT:結束程序執行并退出VisualFoxPro系統,返回操作系統
12執行程序文件時,將依次執行文件中的命令,直到所有命令執行完畢6.1.3簡單的輸入輸出命令6.1.3簡單的輸入輸出命令1.字符接收語句ACCEPT命令【功能】在程序執行過程中,將用戶交互式輸入的內容作為字符串賦值給指定內存變量。該命令只接受字符型數據,輸入的字符串不需要加定界符,否則,系統會把定界符作為字符串本身的一部分。
格式:ACCEPT[<字符表達式>]TO<內存變量名>
136.1.3簡單的輸入輸出命令6.1.3簡單的輸入【例6-2】編程從鍵盤輸入某數據庫的文件名,要求打開該數據庫并顯示其內容。程序文件名為PROG2.PRGSETTALKOFFCLEARACCEPT“請輸入數據庫名:”TOAAAOPENDATABASE&AAAACCEPT“請輸入表名”TOBBBUSE&BBBLISTUSESETTALKONRETURN14【例6-2】編程從鍵盤輸入某數據庫的文件名,要求打開注:ACCEPT語句只能給字符型內存變量提供數據。如果用戶想給其它類型的內存變量提供數據,可以使用下列命令:2.通用數據接收命令----INPUT命令
該命令等待用戶從鍵盤輸入數據,用戶可以輸入任意合法的表達式。當用戶以回車鍵結束輸入時,系統將表達式的值存入指定的內存變量,程序繼續運行。功能:(1)若選用<字符表達式>,系統會首先顯示該表達式的值,作為提示信息。(2)輸入的數據可以是常量、變量等,但不能不輸入任何內容直接按回車鍵。INPUT語句與ACCEPT語句的區別是:ACCEPT命令只能接收字符串,而INPUT語句可以接收任意類型的VFP表達式;如果輸入的是字符串,ACCEPT語句不要使用字符型定界符,而INPUT語句必須用定界符括起來。格式:INPUT[<字符表達式>]TO<內存變量名>15注:ACCEPT語句只能給字符型內存變量提供數據。如果用戶【例6-4】從鍵盤輸入兩個任意正數,編程求以兩數為邊長的長方形面積。程序文件名為PROG4.PRGSETTALKOFFCLEARinput“長方形一邊的長為:”TOAINPUT“長方形另一邊的長為:”TOBS=A*B?“長方形的面積為:”,SSETTALKONRETURN16【例6-4】從鍵盤輸入兩個任意正數,編程求以兩數為邊長的長方3.輸入一個字符語句----WAIT命令【功能】顯示提示信息,暫停程序執行,直到用戶按任意鍵或單擊鼠標時繼續執行程序。若選擇可選項[TO<內存變量>],將輸入的單個字符作為字符型數據賦給指定的<內存變量>;若用戶是按Enter鍵或單擊鼠標,<內存變量>的值為空串。若省略所有可選項,屏幕顯示“鍵入任意鍵繼續……”默認提示信息
格式:WAIT[<字符表達式>][TO<內存變量名>]173.輸入一個字符語句----WAIT命令格式:WAIT[例:wait"輸入無效,請重新輸入!"window timeout5 命令執行時,在主窗口右上角出現一個提示窗口,其中顯示提示信息“輸入無效,請重新輸入!"。之后,程序暫停執行。當用戶按任意鍵或超過5秒鐘時,提示窗口關閉,程序繼續執行。18例:18【例6-6】在STUDENT數據庫的STUD表中顯示任意一個系學生的情況。程序文件名為PROG6.PRGSETTALKOFFCLEAROPENDATABASESTUDENTUSESTUDWAIT“請輸入待查學生的系號(1—3):”TONIFVAL(N)<1.OR.VAL(N)>3WAIT“輸入無效,結束程序運行!”WINDOWTIMEOUT5RETURNELSESTORE“0”+NTOAAALISTFOR系別號=AAAENDIFCLOSEDATABASESETTALKONRETURN19【例6-6】在STUDENT數據庫的STUD表中顯示任意一個4.三條輸入命令的異同ACCEPT命令只能接受字符型數據,不需定界符,輸入完畢按回車鍵結束;WAIT命令只能輸入單個字符,且不需定界符,輸入完畢不需按回車鍵;INPUT命令可接受數值型、字符型、邏輯型、日期型和日期時間型數據,數據形式可以是常量、變量、函數和表達式,如果是字符串,需用定界符,輸入完畢按回車鍵結束。
204.三條輸入命令的異同20練習:在INPUT、ACCEPT和WAIT三個命令中,必須要以回車鍵表示輸入結束的命令是A)INPUT、ACCEPTB)INPUT、WAITC)ACCEPT、WAITD)INPUT、ACCEPT和WAIT21練習:在INPUT、ACCEPT和WAIT三個命令中,必須要二、結構化的程序設計三大結構:順序結構、選擇結構、循環結構。1、順序結構 按命令在程序中出現的先后次序依次執行。22二、結構化的程序設計22
分支結構形式有如下三種:1.單向分支單向分支語句,即根據用戶設置的條件表達式的值,決定某一操作是否執行。(1)語句格式:IF〈條件表達式〉〈命令行序列〉ENDIF(2)語句功能:該語句首先計算〈條件表達式〉的值,當〈條件表達式〉的值為真時,執行〈命令行序列〉;否則,執行ENDIF后面的第一條命令。分支結構
23分支結構形式有如下三種:分支結構23【例6-7】求一元二次方程AX2+BX+C=0的實根。程序文件名為PROG7.PRG。SETTALKOFFCLEARINPUTTOA2INPUTTOB3INPUTTOC4Z=B^2-4*A*CIFZ>=0X1=(-B+SQRT(Z))/(2*A)X2=(-B-SQRT(Z))/(2*A)?X1,X2ENDIFSETTALKONRETURN24【例6-7】求一元二次方程AX2+BX+C=0的實根。程序文
2.雙向分支雙向分支語句,即根據用戶設置的條件表達式的值,選擇兩個操作中的一個來執行。(1)語句格式:IF〈條件表達式〉〈命令行序列1〉ELSE〈命令行序列2〉ENDIF(2)語句功能:該語句首先計算〈條件表達式〉的值,當〈條件表達式〉的值為真時,執行〈命令行序列1〉中的命令;否則,執行〈命令行序列2〉中的命令;執行完〈命令行序列1〉或〈命令行序列2〉后都將執行ENDIF后面的第一條命令。252.雙向分支25【例6-10】編寫一密碼校驗程序(假設密碼為ABC)。程序文件名為PROG10.PRG。SETTALKOFFCLEARACCEPT“請輸入您的密碼:”TOAAAIFAAA=”ABC”CLEAR?“歡迎使用本系統!”ELSE?”密碼錯誤!”WAITreturnENDIFSETTALKON26【例6-10】編寫一密碼校驗程序(假設密碼為ABC)。程序文例1:從屏幕輸入你的身份,如果是學生,則顯示“好好學習,天天向上”ClearAccept“請輸入你的身份”toSFIFSF=“學生”??“好好學習,天天向上!”Endif例2:從屏幕輸入一個數字型數據到變量X中,如果x≤200,則給其加500;如果200<x≤300,則加300;否則加100在屏幕上輸出x的值。Clearinput“請輸入一個數字型數據:”toxIfx<=200X=x+500ElseIfx>200andx<=300X=x+300ElseX=x+100EndifEndifClear?x27例1:從屏幕輸入你的身份,如果是學生,則顯示“好好學習,天天P186頁一、選擇題4、有如下程序:Inputtoa100Ifa=10s=0EndifS=1?s假定在鍵盤輸入的A的值一定是數值型,那么上面條件選擇程序的執行結果是:A、0B、1C、由A的值決定D、程序出錯28P186頁一、選擇題28P187頁第二填空題1、有一分支程序為:Ifs>100dop1.prgElseifs>10dop2.prgelseifs>1dop3.prgelsedop4.prgendifendifendif分別寫出執行P·,P3,P4子程序的條件表達式Dop1.prg條件為S>10Dop2.prg條件為()Dop3.prg條件為()Dop4.prg條件為()29P187頁第二填空題Dop1.prg條件為S>1029
3.多向分支
多向分支語句,即根據多個條件表達式的值,選擇執行多個操作中的一個對應執行。(1)語句格式:
格式:DOCASECASE<條件表達式1> <語句序列1>[CASE<條件表達式2> <語句序列2> …CASE<條件表達式N> <語句序列N>][OTHERWISE <語句序列N+1>]ENDCASE
303.多向分支格式:DOB)分支語句語句序列1條件1格式: DOCASE CASE<條件1><語句序列2>
CASE<條件2> <語句序列2> ……CASE<條件n> <語句序列n>[OTHERWISE<語句序列>] ENDCASE31B)分支語句31注:(1)不管有幾個CASE條件成立,只有最先成立的那個CASE條件的對應命令序列被執行。(2)若所有CASE條件都不成立,且沒有OTHERWISE子句,則直接跳出本結構。(3)DOCASE和ENDCASE必須成對出現,DOCASE是本結構的入口,ENDCASE是本結構的出口32注:32【例6-12】假設收入(P)與稅率(R)的關系如下表,編程求稅金。程序文件名為PROG12.PRG。
0 P<800 R=0.05 800≤P<2000 0.08 2000≤P<5000 0.1P≥5000
SETTALKOFFCLEARINPUT“請輸入收入:”TOPDOCASECASEP<800R=0CASEP<2000R=0.05CASEP<5000R=0.08OTHERWISER=0.1ENDCASETAX=P*R?”稅金為:”,TAXSETTALKONRETURN33
例:計算分段函數值: 2x-1 (x<0) 3x+5 (0<=x<3) y= x+1 (3<=x<5) 5x-3 (5<=x<10) 7x+2 (x>=10) 若輸入5,分析程序如何執行?34例:34SETTALKOFFINPUT"輸入X值:"TOXDOCASECASEX<0 F=2*X-1CASEX<3 F=3*X+5CASEX<5 F=X+1CASEX<10 F=5*X-3OTHERWISE F=7*X+2ENDCASE?ySETTALKONRETURN35SETTALKOFF35例:從鍵盤輸入學生成績,判斷輸出:優秀,良好,一般,差。ClearInput“請輸入你的成績:”tocjDocaseCasecj>90??“你是優秀學生”Casecj>=80??”你的成績良好”Casecj>=60??“你的成績一般,需要繼續努力!”Otherwise??“你的成績太差,趕緊努力!”Endcasereturn36例:從鍵盤輸入學生成績,判斷輸出:優秀,良好,一般,差。363、循環結構 循環結構也稱為重復結構,是指程序在執行的過程中,其中的某段代碼被重復執行若干次。被重復執行的代碼段,通常稱之為循環體。VF中的循環結構語句包括:DOWHILE-ENDDO、FOR-ENDFOR和SCAN-ENDSCAN語句。373、循環結構37循環結構
1.DOWHILE循環語句【格式1】DOWHILE<條件表達式><語句序列>ENDDO
一個循環結構一般應具備如下的條件:(1)循環的初始條件:一般為給循環控制變量賦初值;(2)循環頭:循環語句的起始,設置、判斷循環條件;(3)循環尾:循環語句的結尾;(4)循環體:位于循環頭和循環尾之間、循環控制重復執行的語句序列38循環結構1.DOWHILE循環語句一個循環結構一般應具【格式2】DOWHILE<條件表達式> <語句序列1>[LOOP]<語句序列2>[EXIT]<語句序列3>
ENDDOLOOP語句:強行返回到循環開始語句。EXIT語句:強行跳出循環,接著執行ENDDO后的語句39【格式2】DOWHILE<條件表達式>LOO功能:
(1)若第一次判斷條件時,條件即為假,則循環體一次都不執行。(2)若循環體包含LOOP命令,那么當遇到LOOP時,就結束循環體的本次執行,不再執行其后面的語句,而是轉回DOWHILE處重新判斷條件。(3)若循環體包含EXIT命令,那么當遇到EXIT時,就結束該語句的執行,轉去執行ENDDO后面的語句(4)通常LOOP或EXIT出現在循環體內嵌套的選擇語句中,根據條件決定是LOOP回去,還是EXIT出去。【格式2】DOWHILE<條件表達式> <語句序列1>[LOOP]<語句序列2>[EXIT]<語句序列3>ENDDO40功能: 【格式2】DOWHILE<條件表達式>執行該語句時,先判斷DOWHILE處的循環條件是否成立,如果條件為真,則執行DOWHILE 與ENDDO之間的命令序列(循環體)。當執行到ENDDO時,返回到DOWHILE,再次判斷循環條件是否為真,以確定是否再次執行循環體。若條件為假,則結束該循環語句,執行ENDDO后面的語句。【格式2】DOWHILE<條件表達式> <語句序列1>[LOOP]<語句序列2>[EXIT]<語句序列3>
ENDDO41執行該語句時,先判斷DOWHILE處的循例:計算S=1+2+…+100。(test5.prg)分析:(1)引進變量s和i。s用來保存累加的結果,初值為0;i既作為被累加的數據,也作為控制循環條件是否成立的變量,初值為1。(2)重復執行命令s=s+i和i=i+1,直至i的值超過100。每一次執行,s的值增加i,i的值增加1
42例:計算S=1+2+…+100。(test5.prg)424343【例6-20】逐條顯示在STUDENT數據庫的STUD表中性別為“男”的所有記錄。程序文件名為PROG20.PRG。SETTALKOFFCLEAROPENDATABASESTUDENTUSESTUDDOWHILE.NOT.EOF()IF性別=”男”DISPLAYENDIFSKIPENDDOCLOSEDATABASESETTALKONRETURN44【例6-20】逐條顯示在STUDENT數據庫的STUD表中性B)步長型循環語句:FOR-ENDFOR語句 該語句通常用于實現循環次數已知情況下的循環結構。格式:FOR<循環變量>=<初值>TO<終值>[STEP<步長>] <循環體>ENDFOR|NEXT45B)步長型循環語句:45
2.FOR循環語句格式:FOR<內存變量>=<1>TO<10>step2 <語句序列> [EXIT] [LOOP] ENDFOR/NEXT
462.FOR循環語句格式:FOR<內存變量>=<1>T功能: (1)<步長>的默認值為1。(2)<初值>、<終值>和<步長>都是數值表達式。但這些表達式僅在循環語句執行開始時被計算一次。在循環語句的執行過程中,初值、終值和步長是不會改變的。(3)可以在循環體內改變循環變量的值,但這會影響循環體的執行次數。(4)EXIT和LOOP命令同樣可以出現在該循環語句的循環體內。當執行到LOOP命令時,結束循環體的本次執行,然后循環變量增加一個步長值,并再次判斷條件是否成立。47功能: 47求1到100中偶數的和48求1到100中偶數的和48例:從鍵盤輸入10個數,然后找出其中的最大值和最小值。CLEAR &&(test9.prg)INPUT“請輸入一個數:”TOaA=5 STOREaTOma,miMa=5mi=5 FORi=2TO10A=4mi=4 INPUT“請輸入另一個數:”TOaA=6ma=6 IFma<a ma=a ENDIF IFmi>a mi=a ENDIF ENDFOR ?“最大值:”,ma ?“最小值:”,mi RETURN
49例:從鍵盤輸入10個數,然后找出其中的最大值和最小值。49P1883、寫出下列程序的運行結果SettalkoffDIMENSIONA(6)FORK=1TO6A(K)20-2*KENDFORK=5DOWHILEK>=1A(K)=A(K)-A(K+1)K=K-1ENDDO?A(1),A(3),A(5)SETTALKON運行結果:?50
C)數據表掃描循環語句:SCAN-ENDSCAN語句格式:SCAN[<范圍>][FOR<條件1>][WHILE<條件2>] <循環體>ENDSCAN 執行該語句時,記錄指針自動、依次地在當前表的指定范圍內滿足條件的記錄上移動,對每一條記錄執行循環體內的命令。2)語句功能:該語句在指定的范圍內,默認范圍為ALL,用數據記錄指針來控制循環次數。執行語句時,首先判斷函數EOF()的值,若其值為“真”,則結束循環,否則,結合〈條件表達式1〉或〈條件表達式2〉,執行〈命令行序列〉,記錄指針移到指定的范圍和條件內的下一條記錄,重新判斷函數EOF()的值,直到函數EOF()的值為真時結束循環。51C)數據表掃描循環語句:51【例6-30】輸出STUDENT數據庫的STUD表中所有團員的姓名和地址。程序文件名為PROG30.PRG。SETTALKOFFCLEAROPENDATABASESTUDENTUSESTUDSCANFOR是否團員?姓名,地址ENDSCANCLOSEDATABASESETTALKONRETURN52【例6-30】輸出STUDENT數據庫的STUD表中所有團員多重循環結構程序設計在一個循環體中再包含有循環結構,稱之為二重循環結構(或二重循環嵌套);在二重循環結構的循環體中,若還包含循環結構,稱為三重循環結構。二重及其以上的循環結構統稱為多重循環結構。這里我們主要介紹二重循環結構。53多重循環結構程序設計53多重循環的基本結構DOWHILE<條件1><循環體1>DOWHILE<條件2> <循環體2> ENDDO<循環體3> ENDDO A=0ForI=1to3 Forj=1to3 A=A+1 Endforendfor答案為:954多重循環的基本結構54FOR<變量1>=<初值1>TO<終值1>STEP<步長1><循環體1> FOR<變量2>=<初值2>TO<終值2>STEP<步長2> <循環體2> ENDFOR <循環體3> ENDFOR55FOR<變量1>=<初值1>TO<終值1>STEP多重循環的執行過程執行過程的總體原則是:外層循環變量每取一次值,內層循環要完整地循環一遍。若<循環體1>、<循環體2>或<循環體3>中包含有LOOP或EXIT命令,它們會改變循環程序的執行順序。56多重循環的執行過程執行過程的總體原則是:56i=0dowhilei<10ifint(i/2)=i/2?"偶數"else?"奇數"endifi=i+1enddo57i=0576.3過程及過程調用
VisualFoxPro與其他高級語言一樣,支持結構化程序設計方法,允許將若干命令或語句組合在一起作為整體調用,這些可獨立存在并可整體調用的命令語句組合稱為過程。
1.調用過程語句,即執行已有的過程。語句格式:DO〈過程名〉WITH<參數表>WITH用于主程序和子程序間參數的傳遞。語句功能:執行以〈過程名〉為名的過程。
2.過程返回語句,即返回過程的調用處。語句格式:RETURN語句功能:將控制返回到調用程序中調用命令的下一語句。586.3過程及過程調用VisualFox6.3.1外部過程
外部過程也叫子程序,和主程序一樣是以程序文件(.PRG)的形式單獨存儲在磁盤上【例】分別建立如下程序文件,*MAIN.PRGSETTALKOFF?”正在執行主程序”DOSUB1SETTALKON
*SUB1.PRG?”正在執行SUB1”RETURN
596.3.1外部過程外部過程也叫子程序,和將若干個過程按一定的規定放在一個大文件中,這個文件稱為過程文件。(1)過程文件的建立命令格式與建立程序文件一樣:格式:MODIFYCOMMAND<過程文件名>
過程文件的格式要求每個過程文件的開頭必須用下列語句:格式:PROCEDURE<過程名>
功能:標明是一個過程。參數描述:<過程名>:指定過程名稱。命名方法與文件名的命名方法相同。2、過程與過程文件
60將若干個過程按一定的規定放在一個大文件中,這個文件稱為過程文6.3.2內部過程
內部過程:把多個過程組織在一個文件中(這個文件稱之為過程文件),或者把過程放在調用它的程序文件的末尾。VisualFoxPro為了識別過程文件或者程序文件中的不同過程,規定過程文件或者程序文件中的過程必需用PROCEDURE語句說明。其格式為:PROCEDURE<過程名><命令序列>[RETURN[<表達式>]]
616.3.2內部過程內部過程:把多個過程組織在一個文件過程放在程序文件中【例】建立如下程序文件,*MAIN.PRGSETTALKOFF?”正在執行主程序”DOSUB1SETTALKON
ProcedureSUB1?”正在執行SUB1”RETURN62過程放在程序文件中【例】建立如下程序文件,62例: 下面是一個模塊定義和調用的程序。涉及三個文件:程序文件f1.prg,其中的代碼為主程序,另外包含一個過程p1;程序文件f2.prg作為子程序被主程序調用;過程文件f3.prg包含兩個過程p2和p3。63例:63setprocetof3?"主程序開始“f2()dop1?"主程序結束“*過程procep1?"過程p1開始“?"調用p3()“?"返回值:",p3()?"過程p1結束“endproc?"子程序f2開始“?"調用p2()“x=p2()?"返回值:",x?"子程序f2結束“returnprocep2returnprocep3return100
f1.prg
f2.prgf3.prg
64?"子程序f2開始“procep2f1.prgf2.p過程文件的建立過程文件的建立方法與程序文件相同。可用MODIFYCOMMAND<過程文件名>命令或調用其他文字編輯軟件來建立。過程文件的結構一般為:PROCEDURE<過程名1><命令序列1>RETURN
PROCEDURE<過程名2><命令序列2>RETURN…PROCEDURE<過程名N><命令序列N>RETURN65過程文件的建立過程文件的建立方法與程序文件6.3.3過程調用中的參數傳遞
1.有參過程中的形式參數定義有參過程中的形式參數定義語句為:
【格式】PARAMETERS<參數表>該語句必需是過程中第一條語句。<參數表>中的參數可以是任意合法的內存變量名
666.3.3過程調用中的參數傳遞1.有參過程中的形式參【例5-11】計算圓面積的主程序為MYMAIN.PRG,子程序為MYSUB.PRG*MYMAIN.PRGCTALK=SET("TALK")SETTALKOFFCLEARSTORE0TORR,AREADOWHILE.T. INPUT"請輸入圓的半徑:"TORR DOMYSUBWITHRR,AREA ?"半徑為"+ALLTRIM(STR(RR))+"的圓的面積是:",AREA WAIT"還要繼續計算嗎(Y/N)?"TOANSWER IFUPPER(ANSWER)="Y" LOOP ELSE EXIT ENDIFENDDOSETTALK&CTALK調用過程并向過程傳遞參數該過程接收參數并計算*MYSUB.PRGPROCEDUREMYSUBPARAMETERSRS=PI()*R^2RETURN接收參數語句67【例5-11】計算圓面積的主程序為MYMAIN.PRG,子程【例6-34】用參數傳遞編程,計算圓的面積。*主程序名PROG34SETTALKOFFCLEARS=0INPUT”請輸入圓的半徑:”TORdoAREAwithr,s?”圓的面積為:”,SSETTALKON
PROCEDUREAREA &&計算面積的過程PARAMETERX,Y &&形參說明Y=3.1416*X**2RETURN68【例6-34】用參數傳遞編程,計算圓的面積。68變量的作用域程序設計離不開變量。一個變量除了類型和取值之外,還有一個重要的屬性就是它的作用域,變量的作用域指的是變量在什么范圍內是有效或能夠被訪問的。在VF中,若以變量的作用域來分,內存變量可分為公共變量、私有變量和局部變量三類。69變量的作用域691、公共變量在任何模塊中都可使用的變量稱為公共變量。公共變量要先建立后使用,公共變量可用PUBLIC命令建立。PUBLIC<內存變量表>該命令的功能是建立公共的內存變量,并為它們賦初值邏輯假.F.。
例如:PUBLICx,y,s(10)建立了三個公共內存變量;簡單變量x和y以及一個含10個元素的數組s,它們的初值都是.F.。701、公共變量70注:公共變量一旦建立就一直有效,即使程序運行結束返回到命令窗口也不會消失。只有執行CLEARMEMORY、RELEASE、QUIT等命令后,公共變量才被釋放。在命令窗口中直接使用而由系統自動隱含建立的變量也是公共變量。71注:公共變量一旦建立就一直有效,即使程序運行結束返回到命令窗2、局部變量局部變量只能在建立它的模塊中使用,不能在上層或下層模塊中使用。當建立它的模塊程序運行結束時,局部變量自動釋放。局部變量用LOCAL命令建立:LOCAL<內存變量表> 該命令建立指定的局部內存變量,并為它們賦初值邏輯假.F.。由于LOCAL與LOCATE前四個字母相同,所以這條命令的命令動詞不能縮寫。局部變量也要先建立后使用。722、局部變量723、私有變量 在程序中直接使用(沒有通過PUBLIC和LOCAL命令事先聲明)而由系統自動隱含建立的變量都是私有變量。私有變量的作用域是建立它的模塊及其下屬的各層模塊。一旦建立它的模塊程序運行結束,這些私有變量將自動清除。733、私有變量73*14.prg clearPUBLICX1 &&公共變量:在所有模塊均有效x1=”aaa”LOCALX2&&局部變量:僅在本模塊有效(不能在上層或下層模塊中使用)x2="bbb"STORE"ccc"TOX3 &&私有變量:僅在本模塊及其下屬模塊DOP6?"X1=",X1?"X2=",X2?"X3=",X3RETURN*過程P6PROCEDUREP6?"主程序中…"?"X1=",X1?"X3=",X3RETURN在命令窗口輸入下列命令:RELEASEALL&&清除所有用戶定義的內存變量DO14?”返回命令窗口時:”?”x1=”,x174*14.prg 在命令窗口輸入下列命令:746.3.6內存變量的作用域
1.全局變量全局變量是指在所有程序模塊中都有效的內存變量
在程序或過程中定義全局變量的語句為:【格式】PUBLIC<內存變量表>756.3.6內存變量的作用域1.全局變量75【說明】(1)當定義多個變量時,各變量名之間用逗號隔開;(2)用PUBLIC語句定義過的內存變量,在程序執行期間可以在任何層次的程序模塊中使用;(3)變量定義語句要放在使用此變量的語句之前,否則會出錯;(4)任何已經定義為全局變量的變量,可以用PUBLIC語句再定義,但不允許重新定義為局部變量;(5)使用全局變量可以增強模塊間的通信,但會降低模塊間的獨立性。
76【說明】762.局部變量局部變量是指在建立它的程序以及被此程序調用的程序中有效的內存變量
在程序中沒有被說明為全局變量的內存變量都被看作是局部變量。局部變量也可以用PRIVATE說明,命令格式為:【格式1】PRIVATE<內存變量表>【格式2】PRIVATEALL[LIKE|EXCEPT<通配符>]【說明】(1)用PRIVATE語句說明的內存變量,只能在本程序及其下屬過程中使用,退出程序時,變量自動釋放;(2)用PRIVATE語句在過程中說明的局部變量,可以與上層調用程序出現的內存變量同名,但它們是不同的變量,在執行被調用過程期間,上層過程中的同名變量將被隱藏。
772.局部變量77例:P179*1114.prgPUBLICx1LOCALx2STORE‘F’TOx3DOp6?’主程序中…’?‘x1=’,x1?‘x2=’,x2?‘x3=’,x3RETURN*過程P6PROCEDURE怕?’子程序中…’?‘x1=’,x1?‘x3=’,x3Return然后在命令窗口中輸入:Do111478
5、表文件圖書。DBF如下記錄號總編號書名出版單位單價1113388高等數學清華大學出版社24。002445501數據庫導論科學出版社27。903332211計算機基礎高等教育出版社23。004665544VFP6。0電子工業出版社28。605456788操作系統原理電子工業出版社25。006456728操作系統概論高等教育出版社21。007375666計算機網絡清華大學出版社37。008245682計算機原理高等教育出版社25。00use圖書Update圖書set單價=單價+5where出版單位=“科學出版社”Select出版單位,avg(單價)as平均價from圖書groupby出版單位intocursorlsbSelect*fromlsbwhere平均價<30orderby平均價intocursorlsb1Gobottom?left(出版單位,8)ClosedatabaseA、清華大學 高等教育 電子工業 出錯信息79 5、表文件圖書。DBF如下79CLEARSETTALKOFFcloseallmx="VisualFoxPro"my="二級"DOsum1withmy?my+mxRETURN*子程序:sum1.prgPROCEDUREsum1parametersmymy="計算機等級"+myRETURN執行命令dotest后,屏幕的顯示結果為A)二級VisualFoxProB)計算機等級二級VisualFoxProC)計算機等級VisualFoxProD)計算機等級二級80CLEAR執行命令dotest后,屏幕的顯示結果為80s=0forn=1to10p=1fori=1ton
endfors=s+pendfor?"sum=",ss=1!+2!+......+10!81s=0s=1!+2!+......+10!81第七章
程序設計基礎82第七章
程序設計基礎1
本章要點VisualFoxPro的工作方式程序文件的建立與編輯程序的基本結構分支結構循環結構過程83本章要點VisualFoxPro的工作方式2VisualFoxPro的工作方式
VisualFoxPro系統提供有三種工作方式:即單命令方式、菜單方式及程序文件方式。
1.單命令方式VisualFoxPro單命令方式是利用Command窗口來實現的。用戶通過Command窗口輸入命令,并執行操作。在Command窗口中,可以輸入單個的操作命令和系統命令,完成對數據庫的操作管理和系統環境的設置;也可以建立命令文件及運行命令文件。Command窗口不僅是VisualFoxPro命令的執行窗口,也是VisualFoxPro命令文件的編輯窗口。所謂單命令方式,即輸入一條命令,完成一個操作的工作方式。84VisualFoxPro的工作方式Vis
2.菜單方式在VisualFoxPro環境下,也可以通過系統提供的菜單選項,對數據庫資源進行操作管理和對系統環境進行設置;并通過菜單建立命令文件及運行命令文件。所謂菜單方式,即通過打開不同的菜單選擇并完成不同的操作。我們在以前各章所講的內容其實都可說是菜單方式。
3.程序文件方式程序文件(簡稱程序)也叫做命令文件。運用程序文件方式進行數據庫管理,是通過程序文件編輯工具,將對數據庫資源進行操作管理的命令和對系統環境進行設置的命令,集中在一個以(.PRG)為擴展名的命令文件中,然后再通過菜單方式或命令方式運行該命令文件。所謂命令方式,即通過程序文件中的命令完成不同的操作。852.菜單方式4*功能說明:求圓形的面積。*文件名:L501.PRGCLEARCTALK=SET("TALK")SETTALKOFFINPUT"請輸入圓的半徑,半徑="TORS=PI()*R*R?"半徑為"+ALLTRIM(STR(R))+"的圓,面積=",SSETTALK&CTALKRETURN
86*功能說明:求圓形的面積。56.1.1程序的概念
有關此VisualFoxPro程序的幾點說明:1.注釋語句【格式1】NOTE<注釋內容>【格式2】*<注釋內容>【格式3】&&<注釋內容>【功能】增強程序文件的易讀性或放棄<注釋內容>中語句的執行
2.對話開關語句【格式】SETTALKOFF|ON【功能】關閉或打開命令執行時的對話開關,許多命令在執行時會返回一些有關執行狀態的信息,這些信息通常會顯示在VF主窗口、狀態欄或用戶自定義窗口里。SETTALK命令用以設置是(ON)否(OFF)顯示這些信息。默認值為ON。3.命令的分行(續行符);876.1.1程序的概念有關此Visual6.1.2程序文件的建立、修改與執行
1.建立或修改程序文件可用兩種方式調用系統內置的文本編輯器建立或修改程序文件:命令方式MODIFYCOMMAND[<盤符>][<路徑>]〈程序文件名〉菜單方式打開“文件”菜單,選擇“新建”;在“新建”窗口,選擇“程序”,再選擇“新建文件”886.1.2程序文件的建立、修改與執行1.建立或修改程程序文件的建立與執行一.建立建立:文件新建程序保存:文件保存命令:MODIFYCOMMAND<文件名>注:若指定文件存在,則打開修改;否則系統認為是要建立一個指定了名字的文件。89程序文件的建立與執行注:若指定文件存在,則打開修改;否則系統(2)運行程序下面的任一方法均可運行程序:■選擇【程序】菜單下的“運行”菜單,利用“運行”對話框選擇要運行的程序;■在命令窗口中輸入如下命令:DO<程序文件名>
系統就會運行這個程序。如果文件不加擴展名,系統會假定它具有.PRG的擴展名,如果想運行一個具有其它擴展名的命令文件時,在輸入命令時必須給出這個命令文件的全名。如:要運行上例中編輯的程序,可以在命令窗口中輸入:
DOL501然后按回車鍵執行。90(2)運行程序下面的任一方法均可運行程序:DO<程序文件2.保存程序程序輸入、編輯完畢,單擊【文件】|【保存】菜單項,在“另存為”對話框中指定程序文件的存放位置和文件名,并單擊“保存”按鈕保存程序文件并退出文本編輯器。程序文件的默認擴展名是.PRG。
912.保存程序103.執行程序程序文件建立后,可以用多種方式、多次執行它。下面是兩種常用的方式。(1)菜單方式①
單擊【程序】|【運行】菜單項,打開“運行”對話框;②
從文件列表框中選擇要運行的程序文件,并單擊“運行”命令按鈕,啟動運行該程序文件
(2)命令方式【格式】DO[<盤符>][<路徑>\]<文件名>【功能】執行指定<盤符>、<路徑>下的程序文件
923.執行程序11執行程序文件時,將依次執行文件中的命令,直到所有命令執行完畢,或者執行到以下命令:①CANCAL:終止程序運行,清除所有的私有變量,返回命令窗口;③RETURN:結束程序執行,返回調用它的上級程序,若無上級程序則返回命令窗口;④QUIT:結束程序執行并退出VisualFoxPro系統,返回操作系統
93執行程序文件時,將依次執行文件中的命令,直到所有命令執行完畢6.1.3簡單的輸入輸出命令6.1.3簡單的輸入輸出命令1.字符接收語句ACCEPT命令【功能】在程序執行過程中,將用戶交互式輸入的內容作為字符串賦值給指定內存變量。該命令只接受字符型數據,輸入的字符串不需要加定界符,否則,系統會把定界符作為字符串本身的一部分。
格式:ACCEPT[<字符表達式>]TO<內存變量名>
946.1.3簡單的輸入輸出命令6.1.3簡單的輸入【例6-2】編程從鍵盤輸入某數據庫的文件名,要求打開該數據庫并顯示其內容。程序文件名為PROG2.PRGSETTALKOFFCLEARACCEPT“請輸入數據庫名:”TOAAAOPENDATABASE&AAAACCEPT“請輸入表名”TOBBBUSE&BBBLISTUSESETTALKONRETURN95【例6-2】編程從鍵盤輸入某數據庫的文件名,要求打開注:ACCEPT語句只能給字符型內存變量提供數據。如果用戶想給其它類型的內存變量提供數據,可以使用下列命令:2.通用數據接收命令----INPUT命令
該命令等待用戶從鍵盤輸入數據,用戶可以輸入任意合法的表達式。當用戶以回車鍵結束輸入時,系統將表達式的值存入指定的內存變量,程序繼續運行。功能:(1)若選用<字符表達式>,系統會首先顯示該表達式的值,作為提示信息。(2)輸入的數據可以是常量、變量等,但不能不輸入任何內容直接按回車鍵。INPUT語句與ACCEPT語句的區別是:ACCEPT命令只能接收字符串,而INPUT語句可以接收任意類型的VFP表達式;如果輸入的是字符串,ACCEPT語句不要使用字符型定界符,而INPUT語句必須用定界符括起來。格式:INPUT[<字符表達式>]TO<內存變量名>96注:ACCEPT語句只能給字符型內存變量提供數據。如果用戶【例6-4】從鍵盤輸入兩個任意正數,編程求以兩數為邊長的長方形面積。程序文件名為PROG4.PRGSETTALKOFFCLEARinput“長方形一邊的長為:”TOAINPUT“長方形另一邊的長為:”TOBS=A*B?“長方形的面積為:”,SSETTALKONRETURN97【例6-4】從鍵盤輸入兩個任意正數,編程求以兩數為邊長的長方3.輸入一個字符語句----WAIT命令【功能】顯示提示信息,暫停程序執行,直到用戶按任意鍵或單擊鼠標時繼續執行程序。若選擇可選項[TO<內存變量>],將輸入的單個字符作為字符型數據賦給指定的<內存變量>;若用戶是按Enter鍵或單擊鼠標,<內存變量>的值為空串。若省略所有可選項,屏幕顯示“鍵入任意鍵繼續……”默認提示信息
格式:WAIT[<字符表達式>][TO<內存變量名>]983.輸入一個字符語句----WAIT命令格式:WAIT[例:wait"輸入無效,請重新輸入!"window timeout5 命令執行時,在主窗口右上角出現一個提示窗口,其中顯示提示信息“輸入無效,請重新輸入!"。之后,程序暫停執行。當用戶按任意鍵或超過5秒鐘時,提示窗口關閉,程序繼續執行。99例:18【例6-6】在STUDENT數據庫的STUD表中顯示任意一個系學生的情況。程序文件名為PROG6.PRGSETTALKOFFCLEAROPENDATABASESTUDENTUSESTUDWAIT“請輸入待查學生的系號(1—3):”TONIFVAL(N)<1.OR.VAL(N)>3WAIT“輸入無效,結束程序運行!”WINDOWTIMEOUT5RETURNELSESTORE“0”+NTOAAALISTFOR系別號=AAAENDIFCLOSEDATABASESETTALKONRETURN100【例6-6】在STUDENT數據庫的STUD表中顯示任意一個4.三條輸入命令的異同ACCEPT命令只能接受字符型數據,不需定界符,輸入完畢按回車鍵結束;WAIT命令只能輸入單個字符,且不需定界符,輸入完畢不需按回車鍵;INPUT命令可接受數值型、字符型、邏輯型、日期型和日期時間型數據,數據形式可以是常量、變量、函數和表達式,如果是字符串,需用定界符,輸入完畢按回車鍵結束。
1014.三條輸入命令的異同20練習:在INPUT、ACCEPT和WAIT三個命令中,必須要以回車鍵表示輸入結束的命令是A)INPUT、ACCEPTB)INPUT、WAITC)ACCEPT、WAITD)INPUT、ACCEPT和WAIT102練習:在INPUT、ACCEPT和WAIT三個命令中,必須要二、結構化的程序設計三大結構:順序結構、選擇結構、循環結構。1、順序結構 按命令在程序中出現的先后次序依次執行。103二、結構化的程序設計22
分支結構形式有如下三種:1.單向分支單向分支語句,即根據用戶設置的條件表達式的值,決定某一操作是否執行。(1)語句格式:IF〈條件表達式〉〈命令行序列〉ENDIF(2)語句功能:該語句首先計算〈條件表達式〉的值,當〈條件表達式〉的值為真時,執行〈命令行序列〉;否則,執行ENDIF后面的第一條命令。分支結構
104分支結構形式有如下三種:分支結構23【例6-7】求一元二次方程AX2+BX+C=0的實根。程序文件名為PROG7.PRG。SETTALKOFFCLEARINPUTTOA2INPUTTOB3INPUTTOC4Z=B^2-4*A*CIFZ>=0X1=(-B+SQRT(Z))/(2*A)X2=(-B-SQRT(Z))/(2*A)?X1,X2ENDIFSETTALKONRETURN105【例6-7】求一元二次方程AX2+BX+C=0的實根。程序文
2.雙向分支雙向分支語句,即根據用戶設置的條件表達式的值,選擇兩個操作中的一個來執行。(1)語句格式:IF〈條件表達式〉〈命令行序列1〉ELSE〈命令行序列2〉ENDIF(2)語句功能:該語句首先計算〈條件表達式〉的值,當〈條件表達式〉的值為真時,執行〈命令行序列1〉中的命令;否則,執行〈命令行序列2〉中的命令;執行完〈命令行序列1〉或〈命令行序列2〉后都將執行ENDIF后面的第一條命令。1062.雙向分支25【例6-10】編寫一密碼校驗程序(假設密碼為ABC)。程序文件名為PROG10.PRG。SETTALKOFFCLEARACCEPT“請輸入您的密碼:”TOAAAIFAAA=”ABC”CLEAR?“歡迎使用本系統!”ELSE?”密碼錯誤!”WAITreturnENDIFSETTALKON107【例6-10】編寫一密碼校驗程序(假設密碼為ABC)。程序文例1:從屏幕輸入你的身份,如果是學生,則顯示“好好學習,天天向上”ClearAccept“請輸入你的身份”toSFIFSF=“學生”??“好好學習,天天向上!”Endif例2:從屏幕輸入一個數字型數據到變量X中,如果x≤200,則給其加500;如果200<x≤300,則加300;否則加100在屏幕上輸出x的值。Clearinput“請輸入一個數字型數據:”toxIfx<=200X=x+500ElseIfx>200andx<=300X=x+300ElseX=x+100EndifEndifClear?x108例1:從屏幕輸入你的身份,如果是學生,則顯示“好好學習,天天P186頁一、選擇題4、有如下程序:Inputtoa100Ifa=10s=0EndifS=1?s假定在鍵盤輸入的A的值一定是數值型,那么上面條件選擇程序的執行結果是:A、0B、1C、由A的值決定D、程序出錯109P186頁一、選擇題28P187頁第二填空題1、有一分支程序為:Ifs>100dop1.prgElseifs>10dop2.prgelseifs>1dop3.prgelsedop4.prg
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 比亞迪售后外包合同協議
- 商場幫忙租店鋪合同協議
- 武威商品房預售合同協議
- 2025全日制勞動合同書(無錫版)新 - 2025版無錫全日制勞動合同樣本
- 2025廢棄物處理協議合同模板
- 2025精簡版廣告投放合同范本
- 商品冷藏運輸合同協議
- 2025地區授權代理合同范本示例
- 2025建筑材料供銷合同協議書
- 商城購物卡合同協議
- 礦山水災事故處理
- 2024年煙臺棲霞市考選畢業生考試真題
- 2025北京九年級(上)期末語文匯編:現代文閱讀2
- 2025-2030中國晶圓轉移機器人末端執行器行業市場發展趨勢與前景展望戰略研究報告
- 2025年經濟學基礎知識試題及答案
- 2025屆廣東省廣州市普通高中高三下學期二模物理試卷含答案
- 2025年定向鉆機操作工培訓考試題(附答案)
- 中外航海文化知到課后答案智慧樹章節測試答案2025年春中國人民解放軍海軍大連艦艇學院
- 湖南省炎德英才名校聯考聯合體2024年4月春季高一年級下學期第二次(期中)聯考數學試卷
- OVATION培訓教材資料
- 財綜[2001]94號
評論
0/150
提交評論