




已閱讀5頁,還剩104頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Visual Foxpro 6.0,程序設計基礎,要點: 1.算法的概念及特點 2.掌握程序3種基本結構的表示 3.掌握利用分支結構編程 4.掌握利用循環結構編程 5.常用控件,第三、四、五講 程序設計(1),算法及算法的表示,一、算法的概念及特點 所謂算法就是對解決問題所采用的方法和步驟的描述。,二、算法的描述 算法的描述方法有很多,為直觀、準確地表示一個問題的處理方法和步驟,通常采用流程圖的方法。 流程圖是用一些幾何圖形符號、線條及文字說明來表征一個問題的處理過程。 一般采用傳統流程圖和N-S圖來描述算法。,(教材P51) 【例3-1】設計如圖所示表單,在文本框text1中輸入華氏溫度,單擊“計算”按鈕可以求出對應的攝氏溫度,并在文本框text2中顯示。,“計算”按鈕的“Click”事件代碼如下: fas=thisform.text1.value cels=5*(fas-32)/9 thisform.text2.value=round(cels,1),什么意思?,描述方法1用自然語言表示 步驟1:輸入華氏溫度fas。 步驟2:按照公式,計算攝氏溫度cels。,步驟3:輸出攝氏溫度。,描述方法2 用流程圖表示如圖所示。,描述方法3用N-S流程圖如圖所示。,一個算法應該具有以下特點:教材P52 確定性。 有窮性。 有效性。 輸入。 輸出。,任何一個問題能否讓計算機處理,關鍵在于能否設計出合理的算法,有了合適的算法,再使用合適的計算機語言來編寫程序。 VFP就是一種語言工具。要用VFP編寫出高質量的程序,一方面要構建合理的算法,另一方面要掌握VFP的語法規則,它是實現算法的基礎。,命令有一定的書寫規則: 1、命令分行。 程序中每條命令都以回車鍵結尾,一行只能寫一條命令。若命令需分行書寫,應在一行終了時鍵入續行符“;”,然后按回車鍵。,2、命令注釋。 程序中可以插入注釋,以提高程序的可讀性。 注釋語句,NOTE|* 注釋部分 & 注釋部分,格式:,行首注釋,單命令的行尾注釋,三、3種基本結構的表示 程序的3種基本結構:順序結構、選擇(或分支)結構、循環結構,它們構成了實現一個算法的基本單元。,順序結構:是一種最基本、最簡單的程序結構。如下圖所示,先執行A,再執行B,A與B按照順序執行。,選擇(或分支)結構:根據條件是否成立而執行不同的程序模塊。,循環結構:是指重復執行某些操作,重復執行的部分稱為循環體。,常用輸入輸出控件,1)輸入控件,2)輸出控件,文本框,標簽、文本框,fas=thisform.text1.value,thisform.text2.value=round(cels,1),R=thisform.text1.value,thisform.label3.caption= alltrim(str(s,8,1),程序設計實例,順序結構程序實例 分支(選擇)結構程序實例 循環結構程序實例,1順序結構 順序結構是在程序執行時,根據程序中語句的書寫順序依次執行的命令序列。Visual FoxPro系統中的大多數命令都可以作為順序結構中的語句。,教材P53,(教材P52) 【例3-2】設計如圖3-5所示表單,在文本框text1、text2、text3中輸入三角形的三邊,單擊“計算”按鈕可以在文本框text4中顯示三角形的面積。其計算公式為,(其中a,b,c為三角形的三邊,area為三角形的面積),“計算”按鈕的“Click”事件代碼如下: a=thisform.text1.value b=thisform.text2.value c=thisform.text3.value =(a+b+c)/2 area=sqrt( *( -a)*( -b)*( -c) thisform.text4.value=round(area,1),2分支(選擇)結構 分支結構是在程序執行時,根據不同的條件,選擇執行不同的程序語句,用來解決有選擇、有轉移的諸多問題。,多路分支語句,常見的分支結構有:,IF語句,單分支語句ifendif,雙分支語句 Ifelseendif,流程圖,1)IF語句 格式:,見教材P57,條件?,語句序列1,語句序列2,Y,N,ENDIF之后的命令,(教材P53) 【例3-3】修改【例3-2】,在文本框text1、text2、text3中輸入三角形的三邊,單擊“計算”按鈕,如果輸入的三邊能構成三角形,則在文本框text4中顯示三角形的面積;否則用提示框給出提示信息:不能構成三角形,重新輸入!。如圖所示。,“計算”按鈕的“Click”事件代碼如下: a=thisform.text1.value b=thisform.text2.value c=thisform.text3.value if a+bc and a+cb and b+ca =(a+b+c)/2 area=sqrt( *( -a)*( -b)*( -c) thisform.text4.value=round(area,1) else messagebox(“不能構成三角形,重新輸入!“) thisform.text1.value=0 thisform.text2.value=0 thisform.text3.value=0 thisform.text4.value=0 thisform.text1.setfocus endif,(教材P54) 【例3-4】設計如圖3-13所示表單,其中文本框Text1中可以接受日期型數據,運行表單后在Text1中輸入日期:08/25/11,單擊命令按鈕“Command1”,則標簽Label2顯示什么?其中command1控件的click事件代碼: d=thisform.text1.value y=year(d) IF y/4=int(y/4) AND y/100int(y/100) OR int(y/400) =y/400 y1=“是“ ELSE y1=“不是“ ENDIF thisform.label2.caption=y1,判斷某一年是否是閏年,假如年份用y表示,判斷y是否是閏年的方法是:若y能夠被400整除或y能夠被4整除并且不能夠被100整除,提示:判斷一個整數M能否被另一個整數N整除,一般采用三種方法,判斷: MOD(M,N)是否等于0 INT(M/N) 是否等于M/N M%N=0 若等于,則表明M能被N整除。,EXM2:輸入兩個數,比較大小,并輸出較大數。,方法一:雙分支,方法二:單分支,EXM3:輸入兩個數,比較大小,并按從大到小的順序輸出。,使用單分支結構:,容器A,容器B,容器C,1,3,1、C = A 2、A = B 3、B = C,交換,思考:輸入3個數a,b,c,比較大小,并按從大到小的順序輸出。,“求解”命令按鈕的“Click”事件代碼如下: a=thisform.text1.value b=thisform.text2.value c=thisform.text3.value if ab t=a a=b b=t endif if ac t=a a=c c=t endif,if bc t=c c=b b=t endif thisform.text1.value=a thisform.text2.value=b thisform.text3.value=c,(教材P53) 【例3-5】已知一元二次方程的3個系數,求一元二次方程的根。求根公式 :,分支的嵌套,“求解”命令按鈕的“Click”事件代碼如下: a=thisform.text1.value b=thisform.text2.value c=thisform.text3.value if a=0 messagebox(“二次項系數為0,這不是一個一元二次方程“) thisform.text1.setfocus else d=b2-4*a*c if d=0 x1=round(-b+sqrt(d)/(2*a),2) x2=round(-b-sqrt(d)/(2*a),2) thisform.text4.value=x1 thisform.text5.value=x2 else messagebox(“該方程沒有實數根!“) endif endif,EXM 4:比較任意三個數的大小,并輸出較大數。,輸入三個數a,b,c,ab?,ca?,cb?,輸出c,輸出a,輸出c,輸出b,結束,N,Y,Y,N,N,Y,4)多分支語句 格式: (見教材58頁) 流程圖:,ENDCASE后面的語句,【修改例3-6】輸入月份值,顯示對應季節的中文名字(3,4,5月為春季,6,7,8月為夏季,9,10,11月為秋季;12,1,2月為冬季)。,“輸出”命令按鈕的click事件代碼: yf=val(thisform.text1.value) do case case yf=3 or yf=4 or yf=5 jj=“春季“ case yf=6 or yf=7 or yf=8 jj=“夏季“ case yf=9 or yf=10 or yf=11 jj=“秋季“ case yf=12 or yf=1 or yf=2 jj=“冬季“ endcase thisform.label3.caption=jj,注意: ifendif,do caseendcase必須配對出現,表示分支的開始和結束。 為使程序清晰易讀,對分支、循環等結構應使用縮格書寫方式。,表達分支、循環的每種語句都不允許在一個命令行中輸完,必須按格式一行一行地鍵入,因此,不能出現在命令窗口中。 三種選擇結構之間可以相互嵌套,但不能交叉。,循環結構能夠使某些語句或程序段重復執行若干次。 如果某些語句或程序段需要在一個固定的位置上重復操作,使用循環是最好的選擇。,3循環結構,常見的循環結構有:,條件循環,步長循環,掃描循環,涉及數據表的循環,第6章介紹,1)條件循環(do while循環) 格式: 流程圖:,條件,語句序列,Enddo之后的語句,N,Y,循環體,教材P62,【例】計算1+2+3+100,第 1 步, 計算 0+1; 第 2 步, 計算 (0+1)+2; 第 3 步, 計算 (0+1+2)+3; 第 i 步, 計算 (0+1+i-1)+i; . 第 100 步,計算 (0+1+99)+100;,遞推算法,前i-1次累加和,第i次累加項,基本方法:,屬于“累加器”類型問題,(1)在進入累加前先給累加器賦初值(求和一般為0) (2)用循環語句實現累加 循環變量賦初值;循環條件;循環變量的改變規律 (3)循環體語句的設計 累加器當前值=累加器原值+循環當前值,三個“確定” 循環三要素,算法: 確定循環變量i并賦初值為1 定義s存放累加和,初值為0 確定循環條件 i=100 s=s+i 確定循環變量的變化趨勢i=i+1 輸出結果s,遞推公式,在條件循環中如何體現的?,s=1+2+3+100,“計算”按鈕的click事件代碼: s=0 i=1 do while i=100 s=s+i i=i+1 enddo Thisform.text1.value=s,循環體,【修改例3-8】計算s=1+2+3+n,“計算”命令按鈕的“click”事件代碼: n=thisform.text1.value s=0 x=1 do while x=n s=s+x enddo thisform.text2.value=s,說明: 循環結構從do while開始,到enddo結束,兩者必須成對出現;在enddo后面可以書寫注釋。 循環是否繼續取決于條件的當前取值,一般情況下循環體中應含有改變條件取值的命令或語句,否則將造成死循環。 循環結構能自身嵌套(多重循環),還能與選擇結構的各種形式嵌套。,2)步長循環(forendfor計數循環) 格式:,教材P62,計算1+2+3+100,s=0 for i=1 to 100 s=s+i endfor Thisform.text1.value=s,step 1,(教材P60) 【例3-9】設計如圖所示表單,在文本框text1中輸入N的值,求N!。,(1)給累乘器賦初值(一般為1) (2)用循環語句實現累乘 循環變量賦初值;循環條件;循環變量改變規律 (3)循環體設計 累乘器當前值=累乘器原值*循環當前值,如:123.100,基本方法:,屬于“累乘器”類型問題,“計算”命令按鈕的“Click”事件代碼: p=1 for i=1 to thisform.text1.value p=p*i endfor thisform.text2.value=p,說明: 步長可正可負,缺省為1。 循環體中不應包含改變循環變量值的命令,否則循環次數將隨之改變。 如果循環可以通過計數來控制,則本循環比條件循環更為方便。,當循環 步長循環 在文本框Text1中輸入終值n 在文本框Text2中輸入步長k i=1 for i=1 to n step k do while i endfor|next i=i+k endddo,【例】求100以內的奇數和。,A=1+3+5+99,循環變量 初值n=1,循環條件n100,循環變量的變化 趨勢n=n+2,請同學們自己寫出程序,循環體累加語句:A=A+n,【例】求,循環變量 初值x=1,循環條件xn,循環變量的變化 趨勢x=x+1,請同學們自己寫出程序,循環體累加語句:K=K+x2,思考:計算e的近似值。其公式為:e1+1/1!1/2!1/3!1/N!,直到1/N!0.000001為止。,“計算”命令按鈕的“click”事件代碼: s=1 i=2 p=1 do while 1/p=0.000001 s=s+1/p p=p*i i=i+1 enddo thisform.text1.value=s,階乘,累加,【例】求所有的水仙花數。(所謂水仙花數是指一個三位數,其各位數字的立方和等于該數本身。,編程方法: “枚舉法” 按問題本身的性質,一一列舉出該問題所有可能的解,并在逐一列舉的過程中,檢驗每個可能解是否是問題的真正解,若是,我們采納這個解,否則拋棄它。對于所列舉的值,既不能遺漏也不能重復。,查找范圍:,三位數100999,任意一個三位數,判斷這個三位數x是水仙花數的條件: X=x13+x23+x33,例:1+2+n 1到n的奇數和、偶數和 100以內能夠被X整除的數之和。,請同學們自己寫出程序,命令按鈕的“click”事件代碼: s=0 for i=1 to 100 s=s+(-1)(i+1)/i endfor thisform.text1.value=s,方法1:,命令按鈕的“click”事件代碼: s=0 k=1 for i=1 to 100 s=s+k/i k=-k endfor thisform.text1.value=s,方法2:,命令按鈕的“click”事件代碼: s1=0 s2=0 for i=1 to 99 step 2 s1=s1+1/i endfor for i=2 to 100 step 2 s2=s2+1/i endfor thisform.text1.value=s1-s2,方法3:,(教材P60-61) 【例3-10】設計如圖1所示表單。運行該表單,在文本框Text1中輸入一串字符,單擊“逆序顯示”命令按鈕后,逆序顯示該字符串,如圖2所示。,圖1,圖2,x=“Av56:YijB8“,8,B,j,i,Y,:,6,5,v,A,c=c+substr(x,i,1),確定變量: x:存任意字符串x=“ Av56:YijB8 “ i:存截取次數(1len(x) c:存逆序字符串 c=c+substr(x,i,1),確定算法:用循環在原字符串中從右到左逐個截取字符,重新組裝成逆序字符串,確定循環三要素: 循環變量 : i (i初值為len(x),終值為1) 循環條件: i=1 循環條件改變:i=i-1(從右到左截取),【例】輸入一串ASCII字符,顯示數字字符串。假設輸入:Av56:YijB8 顯示:568。,請同學們自己寫出程序,從左到右逐個取出字符x,判斷x是數字的條件:,Asc(x)asc(0) and Asc(x)asc(9),【例】輸入一串ASCII字符,顯示大寫字母串。假設輸入:Av56:YijB8 顯示: AYB 。 輸入一串ASCII字符,顯示小寫字母串。假設輸入: Av56:YijB8 顯示:vij 。,請同學們自己寫出程序,【例】如圖所示一程序界面。文本框TEXT1已經輸入一串文字,單擊“轉換”命令按鈕后,文本框的值將變為什么?,“轉換” 命令按鈕的CLICK 事件代碼: N=LEN(THISFORM.TEXT1.VALUE) Y= DO WHILE N0 X=SUBSTR(THISFORM.TEXT1.VALUE,N,1) IF ASC(X)=ASC(a) X=UPPER(X) ELSE X=LOWER(X) ENDIF Y=X+Y N=N-1 ENDDO THISFORM.TEXT1.VALUE=Y,tHIS IS A cpu.,對象的事件和方法,1、事件(Event)教科書P9 事件是作用于對象的某些行為和動作。 事件(Event) 是預先定義好的特定的動作,不能修改、增加和刪除,由用戶或系統激活。 對象不同,事件也不完全相同。,圓面積程序修改1,文本框text2獲得焦點,即光標移到文本框text2中,輸入半徑后,按Tab鍵,光標移到文本框text2中顯示圓面積,圓面積程序修改2,文本框text1失去焦點,即在文本框text1中輸入面積后,敲回車鍵(該事件可以換成Lostfocus),輸入半徑后,按回車鍵,在文本框text2中顯示圓面積,2、方法(Event)教科書P10 方法是指對象自身可以進行的動作或行為。它實際上是對象本身所內含的一些特殊的函數或過程,以便實現對象的一些固有功能。可以通過調用對象的方法實現該對象的動作及行為。,直接調用的對象方法程序不多,主要有:刷新(Refresh)、釋放(Release)、設置焦點(setfocus)。 在面向對象的程序設計過程中,可為對象創建新的屬性和方法程序。,(教材P6) 【例1-2】設計如圖1-11所示表單,表單運行后,在兩個文本框中分別輸入一個數,比較大小,光標移到文本框text3時,在其中顯示最大數;單擊“關閉”按鈕,可以關閉表單。,文本框text3的“GotFocus”事件代碼: Thisform.text3.value=max(thisform.text1.value,thisform.text2.value) “關閉”按鈕的“Click”事件的程序代碼: Thisform.release,表單設計中的常用控件,Vfp的基類有兩類: 控件類 容器類,產生控件類對象,產生容器類對象,標簽(label),主要屬性:Caption、BackStyle、WordWrap,控件類,標簽沒有Value屬性,教材P16,仔細體會教科書P12【例1-3】,命令按鈕(command),主要屬性:Caption、Enabled 主要事件:Click,控件類,教材P17,該屬性值為.F.,則命令按鈕呈灰色顯示, 表示暫時不可用。表示為: Tmand1.enabled=.f. 該屬性值為.T.,則命令按鈕呈深色顯示, 表示可用。表示為: Tmand1.enabled=.t.,Click事件代碼: if mand2.caption=“可用“ mand2.caption=“不可用“ Tmand2.enabled=.f. else mand2.caption=“可用“ Tmand2.enabled=.t. endif,文本框(text),主要屬性:PasswordChar、Value、ControlSource 主要事件:Valid、GotFocus、 Lostfocus 主要方法:setfocus,控件類,要讓文本框接收小數, 可以將其屬性值設置 為:0.0,教材P16,仔細體會教科書P6【例1-2 】 、P14 【例1-4】,改寫圓面積程序(1) 改寫圓面積程序(2),注意:這兩個圓面積程序中的This, 表示當前編寫代碼的對象。這是一 種相對引用。見教材P13 第一個程序是對text1編寫代碼, This就表示text1;第一個程序是 對text2編寫代碼,This就表示 Text2。,組合框(Combo),主要屬性: ControlSource、RowSource、 RowSourceType 、 ColumnCount 主要事件:InteractiveChange,控件類,教材P28,仔細體會教科書P26【例2-4 】 、P38 【例2-12】,組合框中數據源的類型,組合框中的數據源,【例】設計如圖所示的簡易登錄表單,表單運行后用戶可以在組合框中錄入或選擇用戶名,輸入密碼后敲回車鍵,驗證登錄是否成功(密碼顯示為“*”)。驗證成功以后關閉表單。 說明:預設兩個用戶:“王平”的密碼為“ABC”;“劉梅”的密碼為“123456”。,注意:關閉表單的代碼為 Thisform.release,編輯框(edit),主要屬性:ReadOnly、ScrollBars,控件類,接收的是字符型的值,教材P63-64,仔細體會教科書P62【例3-11 】,其值為.T.,編輯框不能修改(只讀),【例】設計如圖所示的圓面積計算表單,表單運行后能將計算過的所有數據都顯示在編輯框中,編輯框內的文字只讀。,P88實驗4.2任務1,計時器(timer),主要屬性: Enabled、Interval 主要事件:timer,控件類,值為.t.,計時器運行 值為.f.,計時器不運行,單位為:毫秒,教材P41,仔細體會教科書P40【例2-13 】,P98自主實驗任務1,Timer事件代碼: ThisForm.Label1.Left=ThisForm.Label1.Left+1 IF ThisForm.Label1.Left200 ThisForm.Label1.Left= 0-ThisForm.Label1.Width ENDIF Click事件代碼: ThisForm.Release,命令按鈕組(commandGroup),主要屬性:ButtonCount、Value 主要事件:Click,容器類,包含command1、command2等, 設置每個按鈕的caption屬性: 單擊右鍵,選擇“編輯”,Tmandgroup1.value=i i=1,表示鼠標單擊第一個命令按鈕;i=2,表示 鼠標單擊第二個命令按鈕。,教材P119,DO CASE CASE This.Value=1 ThisForm.Timer1.Enabled=.t. CASE This.Value=2 ThisForm.Timer1.Enabled=.f. CASE This.Value=3 ThisForm.Timer1.Enabled=.f. STORE 0 TO f,m,bfm ThisForm.Label1.Caption=“ 0: 0: 0” CASE This.Value=4 ThisForm.Release ENDCASE,P94實驗4.3任務1,1表示邏輯真,0表示邏輯假,復選框(check),主要屬性:Caption、Value,控件類,選項按鈕組(OptionGroup),主要屬性:ButtonCount、Caption、ControlSource、valu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網絡員考試試題及答案
- 2025年機械設備維護與保養協議書
- 規避環保問題對企業運營的影響
- 2025年合作方分手協議書范文
- 事業單位房屋管理的現狀及總體形勢
- 推進綠色發展助力經開區可持續發展
- 土壤改良對油菜產量的影響
- 贛州市章貢區三年級2024-2025學年上學期英語期末試卷:詞匯拼寫與語法綜合能力挑戰2025
- 多元化發展:出版業跨界創新的新機遇
- 健美操教育體系改革與創新思考
- 小區裝修工程安全協議書
- 陜西省西安市碑林區鐵一中學2024-2025學年下學期七年級第二次月考數學試卷
- 人教版小學數學3三年級下冊(全冊)教案
- ktv包房公主協議書
- 公路應急搶險協議書
- 國家中醫藥管理局直屬事業單位招聘筆試真題2024
- 2025年計算機Photoshop功能分析試題及答案
- 國際貿易銷售業務流程合規管理
- 2025年政治理論時政熱點知識試題庫(附含答案)
- 2025年輔導員競聘考試題庫:學生思想政治教育方法與心理健康教育相結合在實踐中的應用試題
- 2025年全球經濟風險試題及答案
評論
0/150
提交評論