程序設計基礎_第1頁
程序設計基礎_第2頁
程序設計基礎_第3頁
程序設計基礎_第4頁
程序設計基礎_第5頁
已閱讀5頁,還剩65頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第五章程序設計基礎2023/1/19第5章程序設計基礎25.1程序設計概述什么是程序?

程序是利用系統所提供的設計工具、按照程序設計語言的規范描述解決問題的算法并進行程序編寫的過程VFP程序由一系列代碼組成,代碼可以包括以命令形式出現的指令、函數或VFP可以理解的任何操作。

程序設計方法主要有兩類:

結構化程序設計(StructuredProgramming,SP)面向對象程序設計(Object-orientedProgramming,OOP)2023/1/19第5章程序設計基礎35.1程序設計概述結構化程序的原則

自頂向下、逐步求精、模塊化、限制使用轉移語句。結構化程序三種基本結構:

順序、分支、循環結構化程序設計本質

功能設計:以功能為主進行設計,其方法是自頂向下、功能分解,它從外部功能上模擬客觀世界,其開發過程通常是從“做什么”到“如何做”。優點:系統結構性強,便于設計和理解缺點:該功能模型較難與現實世界的實際系統相吻合。2023/1/19第5章程序設計基礎45.1程序設計概述面向對象程序設計思想

世界由各種對象組成,任何事物都是對象,是某個對象類的實例,負載的對象可由簡單的對象組合而成。對象:對象是數據及作用于這些數據之上的操作結合在一起所構成的獨立實體的總稱。類:是一組具有相同數據結構和相同操作的對象的描述。

面向對象程序設計的三個重要特性:

封裝性、繼承性、多態性2023/1/19第5章程序設計基礎55.1程序設計概述面向對象程序設計的三個重要特性:封裝性:指對象是數據和處理該數據的方法所構成的整體,外界只能看到其外部特性(消息模式、處理能力),其內部特性(私有數據、處理方式)對外不可見。繼承性:反映的是類與類之間不同的抽象級別,根據繼承與被繼承的關系,類可分為基類和衍生類,基類也稱為父類,衍生類也稱為子類。多態性:在形式上表現為一個方法根據傳遞給它的參數的不同,可以調用不同的方法體,實現不同的操作。2023/1/19第5章程序設計基礎65.2結構化程序設計5.2.1創建、修改和運行程序5.2.2順序結構5.2.3分支結構5.2.4循環結構5.2.5過程與用戶自定義函數2023/1/19第5章程序設計基礎75.2結構化程序設計5.2.1創建、修改和運行程序

創建、修改和運行程序的方法有很多,以下為命令的方式。創建程序的命令:MODIFYCOMMAND文件名(擴展名為*.PRG)

修改程序的命令:MODIFYCOMMAND運行程序的命令:

DOProgramName

[WITHParameterList

]2023/1/19第5章程序設計基礎85.2結構化程序設計一旦運行程序文件,系統會自動地對程序文件(.prg)進行編譯(包括對程序的詞法檢查、語法檢查),生成“偽編譯”程序(.fxp)。執行程序時,系統實質上是執行.fxp文件。程序結構:順序、分支、循環2023/1/19第5章程序設計基礎95.2.2順序結構5.2.2順序結構創建、修改和運行程序例5.1

下列程序的功能是計算圓的面積,其半徑為4.12。

STORE4.12TOPS=P*P*3.14?‘圓的面積為’,SAB2023/1/19第5章程序設計基礎105.2.2順序結構5.2.2順序結構創建、修改和運行程序例5.2

下列程序的功能是顯示一個字符串在另一個字符串中的位置。

C=“VisualFoxPro”CC=“Fox”?AT(CC,C)AB2023/1/19第5章程序設計基礎115.2.3分支結構_單分支結構(1)單分支結構

IF條件語句1ENDIF說明:當“條件”成立時執行“語句1”,否則執行ENDIF后面的語句例:n=1X=0IFn<=3X=2ENDIF?X條件成立?語句1yNENDIF后面的語句2023/1/19第5章程序設計基礎125.2.3分支結構_雙分支結構(2)雙分支結構IF…ELS…ENDIF語句IF條件

語句組1ELSE

語句組2ENDIF說明:條件滿足執行語句組1,否則執行語句組2例:X=1Y=1IFX>2Y=0ELSEY=3ENDIF?Y條件成立?語句1語句2ENDIF后面的語句YN2023/1/19第5章程序設計基礎135.2.3分支結構_雙分支結構例5.3下列程序的功能是根據變量X決定變量Y的值(-1或1)。X=5IFx>0y=1ELSEy=-1ENDIF?y2023/1/19第5章程序設計基礎145.2.3分支結構_多分支結構(3)多分支結構

DO

CASE

CASE

條件1

語句體1CASE

條件2

語句體2

………CASE

條件n

語句體nOTHERWISE

語句體n+1ENDCASE

條件1條件2條件n語句1語句n語句2YYY語句n+1ENDCASE后面的語句NNN……2023/1/19第5章程序設計基礎155.2.3分支結構_多分支結構例:X=85Y=space(0)DocasecaseX>=90Y=“優秀”

caseX>=80Y=“良好”

caseX>=70Y=“中等”

caseX>=60Y=“及格”

otherwiseY=“不及格”EndCase?Y說明:case的個數與需要判斷的情況有關2023/1/19第5章程序設計基礎165.2.4循環結構循環(Looping)是指同一語句組反復執行若干次;循環必須設定循環條件,也就是說循環必須有出口語句2023/1/19第5章程序設計基礎175.2.4循環結構

VFP中循環語句包括:

(1)FOR…ENDFOR(2)DOWHILE…ENDDO

(3)SCAN…ENDSCAN2023/1/19第5章程序設計基礎185.2.4循環結構_FOR語句(1)FOR語句的格式:(預先知道循環的次數)FOR循環變量賦初值

to終值

[step步長]

循環體

ENDFOR|next注意:當步長為正數時,循環變量的初值要小于等于終值。當步長為負數時,循環變量的初值要大于等于終值。當步長為1時,[step步長]可以省略。

2023/1/19第5章程序設計基礎195.2.4循環結構_FOR語句FOR語句的執行流程為:1)將初值賦給循環變量2)判斷循環變量是否超出終值,若超出則結束循環,否則執行循環體。3)計算循環變量的值:循環變量=循環變量+步長注意:循環變量加步長的操作是系統自動完成的不需要在循環體中再出現該操作循環變量賦初值條件成立?執行循環體循環變量加步長YN2023/1/19第5章程序設計基礎205.2.4循環結構_FOR語句

fori=1to10step1

?i

endfor例1:在屏幕上輸出1到10。例2:求1+2+3+…+10=?

s=0

fori=1to10step1s=s+i

endfor

?s2023/1/19第5章程序設計基礎215.2.4循環結構_FOR語句例3:求100以內的3的倍數的和

sum=0

forn=0to100step3sum=sum+n

endfor?sum

a=1

forn=10to1step-2a=n**2?a

endfor例4:求10以內偶數的平方(見P143例5.6,例5.7,例5.8,例5.9

)2023/1/19第5章程序設計基礎225.2.4循環結構_DOWHILE語句(2)DOWHILE語句的格式:

DO

WHILE條件

循環體

ENDDO注意:1.如果預先不能確定循環次數,而是根據某一條件決定是否結束循環。2.當條件=.T.時執行循環體,否則結束循環3.在循環體中要有改變循環條件的語句。循環體條件成立?ENDDO后面語句YESNO2023/1/19第5章程序設計基礎235.2.4循環結構_DOWHILE語句例:Store“abcdef”tocP=space(0)Dowhile

len(c)>0P=left(c,1)+Pc=substr(c,2)Enddo?p說明:對于任意給定的字符串反序顯示如:“abcdef”變成“fedcba”2023/1/19第5章程序設計基礎245.2.4循環結構_DOWHILE語句例:用DOWHILE循環求1到100的和。

S=0A=1

DOWHILEA<=100S=S+AA=A+1

ENDDO?S(見P143例5.10,例5.11,例5.12,例5.13

)2023/1/19第5章程序設計基礎255.2.4循環結構_

SCAN語句(2)SCAN語句的格式:

SCAN條件循環體

ENDSCAN注意:SCAN循環又稱為表記錄掃描循環,此語句僅限于處理表的記錄

2023/1/19第5章程序設計基礎265.2.4循環結構_

SCAN語句例5.14:統計右表中江蘇學生的人數,顯示學號和籍貫。

N=0

Usexs

Scanfor’江蘇’$xs.jg?xs.xh,xs.jgN=N+1

Endscan?N

2023/1/19第5章程序設計基礎275.2.4循環結構_

SCAN語句北京9905145江蘇9905104江蘇9905113上海9905082江蘇9905011籍貫學號序號例如:統計右表中江蘇學生的人數,顯示學號和籍貫。√990501江蘇N=1√990511江蘇N=2√990510江蘇N=32023/1/19第5章程序設計基礎285.2.4循環結構_

三種語句總結

(1)FOR…ENDFOR(2)DOWHILE…ENDDO

(3)SCAN…ENDSCAN知道循環次數,用FOR循環用于表記錄掃描循環不知道循環次數,一般采用DOWHILE循環2023/1/19第5章程序設計基礎295.2.4循環結構_

LOOP命令和EXIT命令LOOP命令:當執行到LOOP語句時,將跳過LOOP后面的所有語句,即結束本次循環,重新開始下一次循環。(見P143例5.7)EXIT命令:當執行到EXIT語句時,將跳過EXIT后面的所有語句,強行退出循環。(見P146例5.13)

2023/1/19第5章程序設計基礎305.2.4循環結構_

LOOP和EXIT例子Sum=0forn=1to100Ifmod(n,2)=0loop

endifIfsum+n>200exitelseSum=sum+nendif

Endfor?sum

?n

例:求連續奇數的和,并且和小于200。2023/1/19第5章程序設計基礎315.2.5過程與用戶自定義函數

我們可以將經常執行的具有某一功能的一段代碼獨立出來,將其作為一個過程(Procedure)或用戶自定義函數(UserDefinedFunction,簡稱UDF),在需要改功能的時候調用這個過程或函數。

目的:減少了程序的代碼量,也使程序更易讀、更易維護。這也是結構化程序設計方法的精髓。2023/1/19第5章程序設計基礎325.2.5過程與用戶自定義函數1過程定義的語法格式

PROCEDURE

過程名

[PARAMETERS參數列表]

過程體

[RETURN[返回值]]

ENDPROC注意:當缺省RETURN時,返回值為.T.2023/1/19第5章程序設計基礎335.2.5過程與用戶自定義函數2.函數的定義和調用:函數定義的語法:FUNCTION函數名

[PARAMETERS參數列表]

函數體

[RETURN[返回值]]ENDFUNC注意:當缺省RETURN時,返回值為.T.2023/1/19第5章程序設計基礎345.2.4過程與用戶自定義函數例如:定義一函數求兩個數的立方和

Functionc_sum

parametersa,bLocalcc=a*a*a+b*b*b

Returnc

endfun2023/1/19第5章程序設計基礎355.2.4函數_函數、過程調用的執行流程SettalkoffX=5Y=6Z=c_sum(x,y)?zFunctionc_sum

parametersa,blocalcc=a*a*a+b*b*bReturnc2023/1/19第5章程序設計基礎365.2.4過程與用戶自定義函數注意:如果調用某過程文件中的過程和自定義函數,則在調用之前運行:

SETPROCEDURETO(過程或自定義)文件名重點掌握:1、完善程序2、寫出程序運行結果2023/1/19第5章程序設計基礎37例題SETTALKOFFS=“ABCDEF”N=LEN(S)K=1DOWHILEK<=N?SUBS(S,K,N-K)K=K+1ENDDO結果:——————、——————1.運行下列程序以后,顯示運行的前二次結果:2023/1/19第5章程序設計基礎385.2結構化程序設計_讀程序題目2.執行下列程序后,屏幕上顯示的運行結果為

。CLEARSTORE3.14TOPIr=4S=PI*r*r?INT(S)2023/1/19第5章程序設計基礎395.2結構化程序設計_讀程序題目3.運行下列程序,運行結果的第二行為

。SETTALKOFFCLEARY="111111111"FORI=1TO8 X=LEFT(Y,I)?SPAC(20-I*2)+X+"*"+X+"="+ALLT(STR(VAL(X)*VAL(X)))ENDFOR2023/1/19第5章程序設計基礎405.2結構化程序設計_讀程序題目4.執行下列程序后,屏幕上顯示的運行結果為

。CLEARx=10y=4IFx<0y=2*x-2elsey=x**2ENDIF?y2023/1/19第5章程序設計基礎415.2結構化程序設計_讀程序題目5.執行下列程序后,屏幕上顯示的運行結果為

。S=0N=1DoWhileN<=5 S=S+NN=N+1ENDDO?S

2023/1/19第5章程序設計基礎425.2結構化程序設計_完善程序題目1.下列程序的功能是求100以內的偶數之和及奇數之和。P=0Q=0FORN=1TO100

IF_____________P=P+N

ELSE_____________

ENDIFENDFOR?“偶數和為”,P?“奇數和為”,Q2023/1/19第5章程序設計基礎435.2結構化程序設計_完善程序題目2.下列程序用來求0~100偶數之和,請完善。STORE0TON,SDOWHILE.T.

IFN>100_________

ELSES=S+N

ENDIFN=N+2ENDDO2023/1/19第5章程序設計基礎445.2結構化程序設計_完善程序題目3.下列程序是隨機產生一個70-80之間的數,請完善x=0DOWHILE.T.X=RAND()*100IFx>70ANDx<80_________ENDIFENDDO?x2023/1/19第5章程序設計基礎455.2結構化程序設計_完善程序題目4.下列程序功能是計算1!+2!+…+10!的和,請完善。Result=0nMult=_________

FORn=1TO10

nMult=nMult*n

nResult=_________

ENDFOR?nResult2023/1/19第5章程序設計基礎465.2結構化程序設計_完善程序題目5.完善下列程序,使其計算一個整數的各位數字之和:SETTALKOFFINPUT”x=”TOxs=0DOWHILEx!=0s=s+MOD(x,10)x=INT(__________)ENDDO?sSETTALKON2023/1/19第5章程序設計基礎475.2結構化程序設計_完善程序題目6.dtocc()函數實現將一個日期型數據轉換為形如“XXXX年XX月XX日”的中文日期字符串,請完善。FUNCTIONdtoccPARAMETERSdeDate

cYear=

+’年’

cMonth=STR(Month(deDate),2)+’月’

cDay=STR(Day(deDate),2)+’日’RETURN

ENDFUNC2023/1/19第5章程序設計基礎485.2結構化程序設計_完善程序題目7.完善下列程序,是其可用來求長方形的面積。

X=3

Y=5

S=AREA(X,Y)

?S

FUNCTION

AREA

_______

S1=X*YRETURN

________ENDFUNCTION2023/1/19第5章程序設計基礎495.2結構化程序設計_編程序題目1.編程求1—100之間所有非3的倍數的和。2.編程求1到100的平方和,如果平方和超過1000則跳出循環。3.編程計算數列1!,3!,5!……n!的前5項之和。4.查找教師表(JS.DBF)中出生日期在1960年之前的教師的姓名、性別和系科。5.編程實現自定義函數NX(),該函數的功能是將任意給定的一個字符串逆序返回。如執行該函數NX(“ABCDE”),則返回結果為”EDCBA”。6.編函數ntoc,實現其功能將傳送過來的阿拉伯數字“0~9”轉換為中文的“零~九”。2023/1/19第5章程序設計基礎505.3面向對象程序設計基礎

面向對象的程序設計(Object-OrientedProgramming,簡稱

OOP)是基于問題對象的自底向上的功能綜合,從內部結構上模擬客觀世界,其開發過程是從“用什么做”到“要做什么”。

傳統的結構化程序設計的本質是功能設計,進行功能分解,從外觀功能上模擬客觀世界,其開發過程通常是從“做什么”到“如何做”。2023/1/19第5章程序設計基礎515.3.1類和對象概述類(class):具有相同的結構、操作,并遵守相同規則的對象聚合在一起的對象。對象:是基于類所創建的一個實例。每個對象都具有屬性、事件和方法,通過對象的屬性、事件和方法來處理對象。區別聯系:類包含了有關對象的特征和行為信息,它是對象的藍圖和框架,對象包括了數據和過程。在采用面向對象程序設計方法設計程序中,程序時由一個或多個類組成,在程序運行時,用戶需要創建該類的各個對象(實例),因此,類是靜態概念,而對象是動態概念。2023/1/19第5章程序設計基礎525.3.1類和對象概述_對象屬性(Property):對象的特征或某一方面的行為。屬性是可自定義的。事件(Event):由對象識別的一個動作,可以編寫相應的代碼對此動作進行響應。事件是不可自定義的。方法(Method):對象能夠執行的一個操作。方法是可自定義的。每個對象都具有屬性,以及與之相關的事件和方法,通過對象的屬性、事件和方法來處理對象。2023/1/19第5章程序設計基礎535.3.2基類類分為三大類:基類、子類和用戶自定義類基類(baseclass):是VFP系統提供的內部定義的類,可用作其他用戶自定義類的基礎。子類(Subclass):是以其他類定義為起點,為某一種對象所建立的新類。用戶自定義類(User-definedClass):與VFP基類相似,但由用戶定義,并且可用來派生子類2023/1/19第5章程序設計基礎545.3.2基類_常用基類容器編輯框列表框標簽控件文本框組合框圖像表單集微條框復選框形狀表單表格選項按鈕組線條工具欄標頭*選項按鈕*分隔符*自定義列*計時器命令按鈕組頁框OLE綁定型控件命令按鈕頁面*OLE容器控件注:*表示該類是容器的集成部分,在類設計器中不能基于它們創建子類2023/1/19第5章程序設計基礎555.3.2基類_容器類、控件類基類分為兩大類:容器類、控件類。容器類(ContainerClasses):包容其他類的基類。VFP的容器類有:容器、工具欄、表單集、表單、表格、表格列、頁框、頁面、命令按鈕組、選項按鈕組。控件類(ControlClasses):可以包含在容器類中的基類。VFP的控件類就是基類除去容器類剩下的部分。2023/1/19第5章程序設計基礎565.3.2基類_最小屬性集、最小事件集基類的最小屬性集:Class、BaseClass、ClassLibrary、ParentClass基類的最小事件集:Init、Destroy、Error2023/1/19第5章程序設計基礎575.3.3處理對象_引用對象在引用對象時,首先要弄清該對象相對于容器層次的關系。引用對象的格式為:引用地址.對象名稱絕對引用絕對引用是從最頂層對象開始,逐層引用,直到所指定的對象的方式。相對引用相對引用是指在容器層次中相對于某個容器層次的引用。2023/1/19第5章程序設計基礎58*相對引用通常用于某個事件處理代碼或方法程序代碼中對所包容的對象的引用,引用時可以直接使用其對象名。表5-5VFP中相對引用對象時所用的關鍵字ActiveForm當前活動表單Activepage當前活動表單中的活動頁面ActiveContro當前活動表單中具有焦點的控件PARENT該對象的直接容器THIS該對象THISFORM包含該對象的表單THISFORMSET包含該對象的表單集2023/1/19第5章程序設計基礎595.3.3處理對象_設置對象屬性每個對象都有許多屬性。通過對對象屬性的設置,可以定義對象的特征或某一方面的行為。在采用可視化的方法進行對象設計時,可以在屬性窗口中對對象屬性進行設置在程序代碼中,可以使用如下的語法對對象屬性進行設置:引用對象.屬性=值比如將命令按鈕組中的第一個按紐(“上一條”)的前景色改為紅色:This.cmd1.forecolor=rgb(255,0,0)該命令按鈕組“上一條”按鈕的name屬性前景色屬性綠色rgb(0,255,0)藍色rgb(0,0,255)白色rgb(255,255,255)黑色rgb(0,0,0)2023/1/19第5章程序設計基礎605.3.3處理對象_調用對象的方法程序方法程序是對象能夠執行的一個操作,是和對象相聯系的過程。調用方法程序的語法如下:引用對象.方法程序

例刷新表單的語法:Thisform.refresh釋放表單的語法:Thisform.release設置焦點的語法:Thisform.text1.SetFocus2023/1/19第5章程序設計基礎615.3.3處理對象_對象對事件的響應當對象的某個事件發生時,該事件的處理程序代碼將被執行。如果事件沒有與之相關聯的處理程序,則當事件發生時不會發生任何操作比如當用戶單擊某命令按鈕時,該命令按鈕的Click事件的程序代碼將被執行。比如運動員踢足球,足球被踢出。比如運動員踢足球,足球滾了。在這個過程當中,對象是足球,事件是踢,足球被踢出是對踢事件的響應。在這個過程當中,對象是足球,事件是踢,足球滾了是方法。202

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論