VFP語言基礎(chǔ)課件_第1頁
VFP語言基礎(chǔ)課件_第2頁
VFP語言基礎(chǔ)課件_第3頁
VFP語言基礎(chǔ)課件_第4頁
VFP語言基礎(chǔ)課件_第5頁
已閱讀5頁,還剩122頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

VFP語言基礎(chǔ)1.字符型數(shù)據(jù)2.數(shù)值型數(shù)據(jù)4.日期型數(shù)據(jù)5.日期時間型數(shù)據(jù)*7.浮點型數(shù)據(jù)6.邏輯型數(shù)據(jù)3.貨幣型數(shù)據(jù)*8.雙精度型數(shù)據(jù)

*9.整型數(shù)據(jù)*10.備注型數(shù)據(jù)*11.通用型數(shù)據(jù)2.1數(shù)據(jù)類型常用的數(shù)據(jù)類型1.字符型(Character)由任意字符組成(字母、漢字、數(shù)字、符號和空格等)最大長度可達254個字符看上去象數(shù)值型:學(xué)號、工號、電話號碼、郵政編碼2.1數(shù)據(jù)類型注意:將數(shù)字定義為字符型數(shù)據(jù)時,它不具備數(shù)學(xué)上的數(shù)值含義,不能參加數(shù)學(xué)運算。2.數(shù)值型(Numeric)一般將需要參加數(shù)學(xué)運算的數(shù)據(jù)定義成數(shù)值型。包含數(shù)字0-9、小數(shù)點與正負號例:100.12、-3.14

最大長度為20個字節(jié)對數(shù)值型字段,小數(shù)位數(shù)在創(chuàng)建字段時確定注意:小數(shù)點和小數(shù)位數(shù)是字段總寬度的一部分Page262.1數(shù)據(jù)類型3.貨幣型(Currency)表示貨幣量的數(shù)據(jù),例:$100.356長度為8個字節(jié)小數(shù)位數(shù)超過4位,四舍五入到4位Page262.1數(shù)據(jù)類型4.日期型(Date)存儲格式:yyyymmdd,共占用8個字節(jié)dbirthday={^1968/05/20}Dblankdate={}日期格式受SETDATE、SETMARK、SETCENTURY命令的影響工具/選項/區(qū)域Page262.1數(shù)據(jù)類型Page262.1數(shù)據(jù)類型5.日期時間型(DateTime)描述日期和時間的數(shù)據(jù),占用8個字節(jié)tdatetime={^2000/4/178:30pm}6.邏輯型(Logical)用來進行各種邏輯判斷的數(shù)據(jù)占用1個字節(jié)只有兩個值,即真(.T.)和假(.F.)7.浮點型(Float):與數(shù)值型數(shù)據(jù)等價8.雙精度型(Double)存儲精度較高、位數(shù)固定的數(shù)值占用8個字節(jié)的存儲空間9.整型(Integer)無小數(shù)部分的數(shù)值,占用4個字節(jié)Page262.1數(shù)據(jù)類型只適用于表中的數(shù)據(jù)類型:10.備注型(Memo):用于存放較長的數(shù)據(jù)固定占用4個字節(jié)的內(nèi)存空間,用來指向真正的備注內(nèi)容實際的數(shù)據(jù)存放在與數(shù)據(jù)表文件同名的.FPT文件中,并且所存放的內(nèi)容只受磁盤空間的限制。Page262.1數(shù)據(jù)類型只適用于表中的數(shù)據(jù)類型:11.通用型(General):用于存儲OLE(ObjectLinkingandEmbedding)對象(電子表格、字處理文檔、圖片等)的引用通用型數(shù)據(jù)長度固定為4個字節(jié),實際數(shù)據(jù)長度僅受磁盤空間的限制。Page262.1數(shù)據(jù)類型只適用于表中的數(shù)據(jù)類型:

VFP允許使用常量、變量、數(shù)組、記錄和對象來存儲數(shù)據(jù),它們也被稱為存儲數(shù)據(jù)的容器常量(Constants)變量(Variables)數(shù)組(Arrays)字段(Fields)對象(Objects)Page262.2數(shù)據(jù)存儲容器VFP中的命名規(guī)則Page272.2數(shù)據(jù)存儲容器數(shù)據(jù)容器和自定義函數(shù)、過程都需要一個名稱命名規(guī)則:名稱中只能包含字母、下劃線“_”、數(shù)字符號和漢字符號;名稱的開頭只能是字母、漢字或下劃線,不能是數(shù)字,表的字段名不允許以下劃線開頭;自由表的字段名、表的索引標識名至多只能10個字符,其余名稱的長度在1-128個字符之間;避免使用VFP系統(tǒng)的保留字。如:c_Varx_2姓名合法

2xaver#gzx-2use不合法1.常量(Constant)定義:在數(shù)據(jù)處理過程中其值不發(fā)生變化的量類型:

數(shù)值型常量,即常數(shù)例如:538、-10.5、3.12E+18

貨幣型常量:數(shù)字前加符號$例如:$538、$10.5Page272.2數(shù)據(jù)存儲容器1.常量(Constant)類型:字符型常量,即用定界符(單引號、雙引號和方括號)括起來的字符串。例如:

"蘇A-0001"

'568'[VFP]Page282.2數(shù)據(jù)存儲容器注意:不能用中文標點符號必須成對匹配如果一種定界符本身是字符串的內(nèi)容,則需要用另一種定界符表示該字符串。例:"'book'的中文意思是'書'。"空串""和空格串""不同字母區(qū)分大小寫:"a"和"A"不同1.常量(Constant)類型:邏輯型常量,表示邏輯判斷結(jié)果。例如:

.T..t..Y..y.表示“真”

.F..f..N..n.表示“假”注意:定界符不可省略Page282.2數(shù)據(jù)存儲容器創(chuàng)建常量使用命令#Define<常量名稱>常量值&&創(chuàng)建一個常量

…#undef<常量名稱>&&釋放一個常量Page282.2數(shù)據(jù)存儲容器創(chuàng)建常量常量值所代表的數(shù)據(jù)內(nèi)容,是程序運行時實際使用的值例如:

#DefinenPI3.1415926&&創(chuàng)建常量

r=2.3&&給半徑賦值

s=nPI*r*r&&計算圓面積

?s&&輸出圓面積值

#undef

nPI&&釋放常量

cancel&&程序運行結(jié)束

Page282.2數(shù)據(jù)存儲容器1.常量(Constant)類型:日期型常量和日期時間型常量嚴格日期格式:{^YYYY-MM-DDhh:mm:ssa|p}

系統(tǒng)默認的格式傳統(tǒng)日期格式為:{mm/dd/yy

hh:mm:ssa|p}受SETDATE等命令影響Page282.2數(shù)據(jù)存儲容器setstrictdateto0|10:不進行嚴格日期格式檢查

1:進行嚴格日期格式檢查2.變量()定義:在數(shù)據(jù)處理過程中其值允許隨時改變的量字段變量:是在創(chuàng)建表結(jié)構(gòu)時創(chuàng)建的內(nèi)存變量:直接在程序中通過賦值語句創(chuàng)建內(nèi)存變量是內(nèi)存中的一個存儲單元;變量名是存儲單元的標識;通過變量名讀寫存儲單元中的數(shù)據(jù)。Page292.2數(shù)據(jù)存儲容器創(chuàng)建變量STORE<數(shù)值表達式>TO<內(nèi)存變量名表>STORE1858TOA1,B1,C1STORE“計算機世界”TOASTORE“12345”TOB內(nèi)存變量名=<數(shù)值表達式>A1=1858A=“計算機世界”B=“12345”Page292.2數(shù)據(jù)存儲容器Store在一條命令中可以為多個變量賦同一個值,等號“=”只能為一個變量賦值訪問變量

如果字段和變量同名,則字段具有更高的優(yōu)先權(quán)變量的引用:m.或m->

xh="我是變量"?xh&&顯示字段內(nèi)容

?m.xh&&顯示變量內(nèi)容

?m->xh

&&顯示變量內(nèi)容

?xs.xh&&顯示字段內(nèi)容Page292.2數(shù)據(jù)存儲容器3.數(shù)組定義:一種特殊的內(nèi)存變量,是一組有序數(shù)據(jù)項的集合。特點:

其中的每個數(shù)據(jù)項稱為數(shù)組元素

每個數(shù)組元素在數(shù)組里的位置是固定的

一般通過稱為下標的序號來進行訪問

Page302.2數(shù)據(jù)存儲容器例1:表示一個班學(xué)生的VFP課程成績表

a[30]例2:表示一個班學(xué)生的VFP、英語、數(shù)學(xué)課程成績表

b[30,3]數(shù)組的聲明

DECLAREX(5),Y(5,2)私有數(shù)組

DIMENSIONA(30),B(30,5)私有數(shù)組

PUBLICX(3,4)全局數(shù)組

LOCALM(9)局部數(shù)組Page302.2數(shù)據(jù)存儲容器注意:數(shù)組在聲明之后,每個元素被默認地賦予.F.值為數(shù)組元素賦值例:創(chuàng)建6×3數(shù)組,為其中一元素賦值Dimensionarrayname[6,3]Arrayname[1,2]=1113可以用一個語句為所有元素賦相同的值A(chǔ)rrayname=1113Page312.2數(shù)據(jù)存儲容器數(shù)值運算符字符運算符日期和日期時間運算符關(guān)系運算符邏輯運算符Page322.3運算符★數(shù)值運算符

+,-,*,/,%,**,^,()

注意:按優(yōu)先級高低排列運算符操作示例()子表達式分組。改變表達式中的運算順序,()中的優(yōu)先?(8-3)*(18/3)**或^乘方運算?b**2-4*a*c*、/乘、除運算?7*9/3%模運算(即取余數(shù))?365%7+、-加、減運算?3+4-5Page322.3運算符★字符運算符

+,-,$運算符操作示例+將兩個字符串連接在一起,結(jié)果仍然是字符串?"visual"+"foxpro"?"姓名:"+xs.xm?"今天是:"+DTOC(date())-刪除運算符左側(cè)字符串空格后連接起來,空格放到尾部?"ab"-"cd"?xs.ximing-xs.xm$查看左串是否包含在右串中,結(jié)果是一個邏輯值?"bc"$"abcde"?'99'$xs.xhPage322.3運算符★日期和日期時間操作符

+,-運算符操作示例+相加?{^2002-7-1}+10?{^2002-7-110:10:10}+50-相減?{^2002-7-1}-50?{^2002-7-110:10:10p}-50?{^2002-7-1}-{^2001-7-1}?{^2002-7-210:10:10a}-{^2002-7-110:10:10p}Page332.3運算符★

注意:不可以對兩個日期型或日期時間型數(shù)據(jù)相加關(guān)系操作符:

<,>,=,<>,#,!=,<=,>=,==運算符操作示例<小于比較?23<50>大于比較?"A">"a"=等于比較?{^2005-4-1}=date()<>或#或!=不等于比較?.t.<>.f.<=小于或等于比較?cj.cj<=60>=大于或等于比較?"960001">="960001"==字符串精確等于比較?"李某"=="李"Page332.3運算符★

注意:關(guān)系運算符兩邊的表達式類型要相同1、字符的排序序列:

(1)PinYin(拼音)序列(默認):漢字按拼音序列排列;西文字母由小到大是空格、小寫字母、大寫字母(2)Machine(機器)序列:按機內(nèi)碼的順序排列(3)Stroke(筆畫)序列:漢字按筆畫多少排序;西文字符同拼音序列Page332.3.4關(guān)系運算符設(shè)置:工具/選項/數(shù)據(jù)SETCOLLATETO"Machine"一、數(shù)據(jù)類型

二、數(shù)據(jù)存儲容器

常量、變量、數(shù)組

三、運算符

數(shù)值、字符、日期和日期時間、關(guān)系

四、表達式

五、常用函數(shù)第2章VFP語言基礎(chǔ)第1部分:語言概述2、字符串精確比較?"BCDE"="BC"?"BC"="BCDE"?"BC"="BC"?"BC"="BC"?"BCDE"="BCDE".F..F..T..T..T..T..F..T..F..T.==不受SETEXACT命令的影響Page342.3.4關(guān)系運算符SETEXACTOFF|ONOff:左串比右串長,取左串與右串等長On:不等時,補空格后看是否相等邏輯操作符:NOT,!,AND,ORabNOTaaANDbaORb.T..T..F..T..T..T..F..F..F..T..F..T..T..F..T..F..F..T..F..F.Page332.3運算符★

注意:按優(yōu)先級高低排列,可使用()改變順序1.字符表達式

?"教師"+js.xm+"的基本工資是:"+STR(js.jbgz)2.日期表達式?date()-{^2000/12/04}天數(shù)3.算術(shù)表達式#DEFINEPI3.1415926r=10s=PI*r*r?sPage472.5表達式表達式:通過運算符將常量、變量、函數(shù)、字段名等組合起來的可以進行運算的式子。4.邏輯表達式

?(xim='計算機科學(xué)系'ORxim='信息管理系')ANDnotxb="女"

注意:在運算過程中,當運算出某個中間結(jié)果后,若已經(jīng)能夠確定最終的結(jié)果,那么將終止本邏輯表達式中后面部分的運算

如:執(zhí)行AND前遇到.F.則中止執(zhí)行邏輯表達式(分析優(yōu)先級P32)?11<2and((1<27/6)or3^2>9)?1<2or((1<27/6)or3^2>9)Page472.5表達式預(yù)先編制好的程序代碼,可供VFP程序在任何地方調(diào)用;接收一個或多個參數(shù)而返回單個值,它可嵌入到一個表達式中;格式:函數(shù)名(參數(shù))分類:系統(tǒng)函數(shù)和用戶自定義函數(shù)

X=YEAR(DATE())Page342.4函數(shù)2.4函數(shù)Page352.4函數(shù)常用函數(shù)介紹2.字符函數(shù)1.數(shù)值函數(shù)3.日期/時間函數(shù)4.數(shù)據(jù)類型轉(zhuǎn)換函數(shù)5.其他常用函數(shù)1.取絕對值函數(shù)ABS()格式:ABS(<數(shù)值表達式>)示例:ABS(-20)、ABS(10-30)2.最大值函數(shù)MAX()格式:MAX(<數(shù)值表達式1>,<數(shù)值表達式2>,……)示例:?MAX(10,20)?MAX(-10,-20)1.數(shù)值函數(shù)Page362.4函數(shù)3.最小值函數(shù)MIN()格式:MIN(<數(shù)值表達式1>,<數(shù)值表達式2>,……)示例:?MIN(10,20)?MIN(-10,-20,-30)4.取整函數(shù)INT()格式:INT(<數(shù)值表達式>)示例:?INT(5.96)?INT(-8.66)?INT(10.98-2.43)Page372.4函數(shù)計算數(shù)值表達式的值,并返回其整數(shù)部分5.求余數(shù)函數(shù)MOD()格式:MOD(<數(shù)值表達式1>,<數(shù)值表達式2>)說明:函數(shù)返回值的符號與除數(shù)的符號相同;示例:?MOD(23,5)?MOD(23,-5)?MOD(-23,5)?MOD(-23,-5)

數(shù)值部分取值:

同號:mod(abs(n1),abs(n2))

異號:abs(n2)-mod(abs(n1),abs(n2))3-22-3Page372.4函數(shù)6.四舍五入函數(shù)ROUND()格式:ROUND(<數(shù)值表達式1>,<數(shù)值表達式2>)示例:?ROUND(345.6799,3)?ROUND(345.6799,0)?ROUND(345.6799,-2)Page372.4函數(shù)345.6803463007.求平方根函數(shù)SQRT()格式:SQRT(<數(shù)值表達式>)示例:?SQRT(16)8.隨機數(shù)函數(shù)RAND()格式:RAND()說明:返回一個0~1之間的隨機數(shù)。示例:?RAND()Page382.4函數(shù)小數(shù)位數(shù),默認為2位,可用SETDECIMALTO命令設(shè)置小數(shù)位數(shù)2.刪除字符串尾部空格函數(shù)TRIM()格式:TRIM(<字符表達式>)示例:a="visual"?trim(a)+"foxpro"1.刪除字符串最左邊和最右邊的所有空格函數(shù)格式:ALLTRIM(<字符表達式>)示例:a="VFP"?alltrim(a)2.字符函數(shù)Page382.4函數(shù)Ltrim()刪除左側(cè)空格3.計算字符串長度函數(shù)LEN()格式:LEN(<字符表達式>)示例:

?LEN("ABCDF")?LEN("ABCDF")X="中國礦業(yè)大學(xué)"?LEN(X)5812Page382.4函數(shù)4.返回位置函數(shù)AT()格式:AT(<字符表達式1>,<字符表達式2>,<數(shù)值表達式>)注意:數(shù)值表達式用于指定第幾次出現(xiàn),默認為1示例:?AT("is","nowisthetime")?AT("e","nowisthetime",1)?AT("e","nowisthetime",2)?AT("are","now

isthetime")?AT("E","nowisthetime")5101500未出現(xiàn),返回0區(qū)分大小寫Page392.4函數(shù)5.取子字符串函數(shù)SUBSTR()格式:SUBSTR(<字符表達式>,<數(shù)值表達式1>[,<數(shù)值表達式2>])

示例:?SUBSTR("社會經(jīng)濟學(xué)",5,4)

?SUBSTR("社會經(jīng)濟學(xué)",5,2)

?SUBSTR("社會經(jīng)濟學(xué)",5)經(jīng)濟經(jīng)經(jīng)濟學(xué)Page392.4函數(shù)6.LEFT()格式:

LEFT(<字符表達式>,<數(shù)值表達式>)示例:?LEFT("ABDF",2)

"AB"

7.RIGHT()格式:

RIGHT(<字符表達式>,<數(shù)值表達式>)示例:?RIGHT("abde",2)"de"

8.生成空格函數(shù)SPACE()格式:SPACE(<數(shù)值表達式>)示例:?"北京"+SPACE(3)+"首都"Page392.4函數(shù)3.日期和時間處理函數(shù)1.系統(tǒng)當前日期函數(shù)DATE()

系統(tǒng)當前日期時間函數(shù)DATETIME()系統(tǒng)當前時間函數(shù)TIME()格式:DATE()、DATETIME()、TIME()2.第幾天函數(shù)DOW()格式:DOW(<日期/日期時間表達式>)?DOW(DATE())注:星期天為1Page402.4函數(shù)3.日期函數(shù)DAY()格式:DAY(<日期表達式>/<日期時間表達式>)4.月份函數(shù)MONTH()格式:MONTH(<日期表達式>/<日期時間表達式>)5.年份函數(shù)YEAR()格式:YEAR(<日期表達式>/<日期時間表達式>)Page412.4函數(shù)4.數(shù)據(jù)類型轉(zhuǎn)換函數(shù)

1.字符轉(zhuǎn)換成ASCII碼函數(shù)ASC()格式:ASC(<字符表達式>)示例:?ASC("ABCD")

注:A的ASC碼652.ASCII碼值轉(zhuǎn)換成字符函數(shù)CHR()格式:CHR(<數(shù)值表達式>)示例:?CHR(67)CPage422.4函數(shù)3.字符型轉(zhuǎn)換成數(shù)值型函數(shù)VAL()格式:VAL(<字符表達式>)說明:1)轉(zhuǎn)換時,從左到右返回字符表達式中的數(shù)字,如果遇到非數(shù)值型字符則停止。如果字符型表達式的第一個字符即非數(shù)值型字符,則轉(zhuǎn)換停止,返回0;2)轉(zhuǎn)換后的小數(shù)位數(shù),默認為2位,可用SETDECIMALTO命令設(shè)置小數(shù)位數(shù)。示例:?VAL("8769.3456")?VAL("8769AB21")?VAL("AB8769.3421")8769.358769.000.00Page422.4函數(shù)6.數(shù)值型轉(zhuǎn)換為字符型函數(shù)STR()格式:STR(<數(shù)值表達式1>[,<數(shù)值表達式2>[,<數(shù)值表達式3>]])說明:1)如果缺省<數(shù)值表達式2>和<數(shù)值表達式3>,其輸出結(jié)果將取固定長度為10位,且只取其整數(shù)部分;示例:?str(314.15)值:“314”

?str(1234567890123)值:“1.234E+12”

返回長度小數(shù)位數(shù)Page432.4函數(shù)2)<數(shù)值型表達式2>指定轉(zhuǎn)換后的字符串長度,<數(shù)值表達式3>指定轉(zhuǎn)換后的小數(shù)位數(shù),默認為0位;總長度不夠時,首先保證整數(shù)。示例:?str(314.15,5)?str(314.15,5,1)?str(314.15,5,2)3)如果<數(shù)值表達式2>的值小于整數(shù)部分的數(shù)字位數(shù),將返回一串星號,表示數(shù)值溢出。示例:?str(12345.6789,3)值:***

314314.2314.2Page432.4函數(shù)4.字符型轉(zhuǎn)換成日期型函數(shù)CTOD()格式:CTOD(<字符表達式>)說明:<字符表達式>必須是一個有效的日期格式。示例:?CTOD("09/23/01")5.日期型轉(zhuǎn)換成字符型函數(shù)DTOC()格式:DTOC(<日期型表達式>/<日期時間型表達式>[,1])說明:如果有1選項,則按照年月日的格式輸出,無分隔符。示例:?DTOC(date())?DTOC(date(),1)Page432.4函數(shù)當前日期格式與傳統(tǒng)的日期格式設(shè)置要一致2.4函數(shù)常用函數(shù)數(shù)值函數(shù)

abs()、max()、min()、int()、mod()、round()、

sqrt()、rand()2.字符函數(shù)

alltrim()、trim()、len()、at()、substr()、left()、

right()、space()3.日期/時間函數(shù)

date()、datetime()、time()、dow()、day()、

month()、year()4.數(shù)據(jù)類型轉(zhuǎn)換函數(shù)

asc()、chr()、val()、str()、dtoc()、ctod()Page355.其他常用函數(shù)1.BETWEEN()格式:

BETWEEN(表達式1,表達式2,表達式3)說明:判斷表達式1是否在表達式2和表達式3的值之間,包含等于的情況;三個表達式為相同類型;返回邏輯型數(shù)據(jù)示例:

?BETWEEN(3,10,15)?BETWEEN(10,10,15)?BETWEEN('a','A','b')?BETWEEN('A','a','P').F..T..F..T.Page442.4函數(shù)3.數(shù)據(jù)類型函數(shù)TYPE()格式:

TYPE(<表達式>)說明:返回表達式值的類型,返回值是一個表示數(shù)據(jù)類型的大寫字母,表達式必須加引號。C:字符型,D:日期型,N:數(shù)值型,L:邏輯型,M:備注型,G:通用型,U:未定義。

示例:?TYPE('12345')?TYPE('"name"')?TYPE('3>4')?TYPE('answer=42')NCLUPage442.4函數(shù)VARTYPE()不需要加引號4.條件測試函數(shù)IIF()格式:

IIF(<lExp>,<eExp1>,<eExp2>)說明:邏輯表達式lExp值為真(.T.),返回表達式eExp1的值,否則返回表達式eExp2的值。eExp1和eExp2可以是任意數(shù)據(jù)類型的表達式。示例:?IIF(DOW(DATE())=1ORDOW(DATE())=7,"今天休息","今天上班")Page452.4函數(shù)7.MESSAGEBOX()函數(shù)格式:MESSAGEBOX(顯示文本[,對話框類型[,對話框標題])功能:顯示一個用戶自定義對話框。例如:

MessageBox("現(xiàn)在要輸入數(shù)據(jù)嗎?",4+32+256,"我的程序")注意:縮寫為MESSAGEB()Page452.4函數(shù)60MESSAGEBOX()函數(shù)按鈕設(shè)置

第3個按鈕為默認512第2個按鈕為默認256第1個按鈕為默認0默認按鈕信息圖標64警告信息圖標48詢問信息圖標32停止圖標16圖標類型重試、取消按鈕5是、否按鈕4是、否、取消按鈕3終止、重試、忽略按鈕2確定、取消按鈕1確定按鈕0按鈕數(shù)目描述值分組Page462.4函數(shù)61MESSAGEBOX()函數(shù)所選按鈕返回值7否6是5忽略4重試3終止2取消1確定返回值被單擊的按鈕Page462.4函數(shù)5.其他常用函數(shù)1.BETWEEN()Page442.4函數(shù)3.數(shù)據(jù)類型函數(shù)TYPE()4.條件測試函數(shù)IIF()7.MESSAGEBOX()函數(shù)2.7程序設(shè)計基礎(chǔ)

一、VFP程序設(shè)計概述

二、順序結(jié)構(gòu)

三、分支結(jié)構(gòu)

四、循環(huán)結(jié)構(gòu)

五、過程和用戶自定義函數(shù)Page512.7程序設(shè)計基礎(chǔ)Page512.7程序設(shè)計基礎(chǔ)程序是為了完成某一具體任務(wù)而編寫的一系列指令程序設(shè)計是利用系統(tǒng)所提供的設(shè)計工具,按照程序語言的規(guī)范,編寫程序代碼的過程程序自動執(zhí)行多條命令程序可被修改并重新運行,且可多次運行VFP程序文件是擴展名為.PRG的文本文件VFP程序設(shè)計概述Page522.7程序設(shè)計基礎(chǔ)2.7.1創(chuàng)建與運行程序創(chuàng)建與修改:“文件”+“新建”或“打開”MODIFYCOMMAND<程序文件名>項目管理器+“代碼”運行:“運行”按鈕DO<程序文件名>項目管理器:“程序”+“運行”Page522.7程序設(shè)計基礎(chǔ)

根據(jù)不同的情況和條件,控制程序去執(zhí)行相應(yīng)操作的語句序列。順序

由語句行組成,執(zhí)行時語句順序執(zhí)行分支

根據(jù)條件表達式的值執(zhí)行不同的操作循環(huán)

使得一組語句組重復(fù)執(zhí)行若干次2.7.2程序結(jié)構(gòu)Page532.7程序設(shè)計基礎(chǔ)1.順序結(jié)構(gòu)

順序語句由語句序列組成,程序執(zhí)行時,按照語句的順序,從上而下,一條一條地順序執(zhí)行。例如:store"Mary"tonameAge=18?"Hisnameis"+name+",heis";+str(Age,2)+"yearsold."例如:編寫程序,計算圓的面積

#DefinePI3.1415926&&創(chuàng)建常量

r=2&&給半徑賦值

s=PI*r*r&&計算圓面積

?s&&輸出圓面積值

#undefinePI&&釋放常量

cancel&&程序運行結(jié)束Page532.7程序設(shè)計基礎(chǔ)1.順序結(jié)構(gòu)分支語句根據(jù)一定的條件決定執(zhí)行哪一部分的語句序列。有兩種分支語句:If語句有一個或兩個分支,由條件表達式選擇執(zhí)行case語句有一個或多個分支,執(zhí)行第一個符合條件的分支2.分支結(jié)構(gòu)Page532.7程序設(shè)計基礎(chǔ)條件分支結(jié)構(gòu)(if語句)Page532.7程序設(shè)計基礎(chǔ)1.簡單分支結(jié)構(gòu)格式:IF<條件表達式><語句序列>ENDIF注意事項:條件表達式的值必須是邏輯型的語句序列可以是一個或若干個語句IF與ENDIF必須成對出現(xiàn),缺一不可

例:若變量nWaterTemp(水溫度)的值大于100,顯示“水沸騰”,否則不執(zhí)行任何操作。Page532.7程序設(shè)計基礎(chǔ)1.簡單分支結(jié)構(gòu)Accept"請輸入水溫值:"to

nWaterTemp

IF

val(nWaterTemp)>=100?"水已沸"ENDIF條件分支結(jié)構(gòu)(if語句)Accept在主窗口顯示其后文本,在接受輸入數(shù)據(jù)后,將其保存到to指定的變量中在主窗口輸入的數(shù)據(jù)默認為字符型2.選擇分支結(jié)構(gòu)格式:IF<條件表達式><語句序列1>ELSE<語句序列2>ENDIFPage532.7程序設(shè)計基礎(chǔ)條件分支結(jié)構(gòu)(if語句)2.選擇分支結(jié)構(gòu)Page532.7程序設(shè)計基礎(chǔ)條件表達式IF語句序列1語句序列2ENDIF.T..F.條件分支結(jié)構(gòu)(if語句)2.選擇分支結(jié)構(gòu)Page532.7程序設(shè)計基礎(chǔ)例:根據(jù)變量X的正負符號情況決定變量Y的值為1或-1:

accept"請輸入數(shù)字X的值:"toXIFval(X)>0Y=1ELSEY=-1ENDIF?Y條件分支結(jié)構(gòu)(if語句)Page532.7程序設(shè)計基礎(chǔ)例:查找姓名是“王一平”的教師,顯示其工號、姓名、性別

usejslocateforxm='王一平'iffound()displaygh,xm,xb

endifuseDisplay顯示記錄指針所指記錄條件分支結(jié)構(gòu)(if語句)Page532.7程序設(shè)計基礎(chǔ)例:查找姓名是“王一平”的教師,如找到,顯示其工號、姓名、性別,如沒有找到,顯示“查無此人”

usejslocateforxm='王一平'iffound()displaygh,xm,xbelse@12,6say'查無此人'

endifuse屏幕輸出格式命令:@<行,列>say<表達式>條件分支結(jié)構(gòu)(if語句)Page532.7程序設(shè)計基礎(chǔ)條件分支結(jié)構(gòu)(case語句)格式:DOCASECASE<條件表達式1><語句序列1>

…CASE<條件表達式N><語句序列N>[OTHERWISE<語句序列N+1>]ENDCASE條件1DOCASEENDCASE語句序列1其他語句序列語句序列2條件2語句序列n條件n…Page532.7程序設(shè)計基礎(chǔ)條件分支結(jié)構(gòu)(case語句)注意事項從第一個CASE開始,計算條件表達式的值,若某個表達式結(jié)果為.T.,則執(zhí)行相應(yīng)的語句組,然后跳過以后的語句,直到ENDCASE后繼續(xù)執(zhí)行。如果所有的條件表達式值都為.F.,則執(zhí)行OtherWise部分的語句組,然后執(zhí)行ENDCASE后的語句。CASE語句只執(zhí)行第一個符合條件的語句組。Page542.7程序設(shè)計基礎(chǔ)條件分支結(jié)構(gòu)(case語句)例1:判斷系統(tǒng)當前日期是星期幾.Page542.7程序設(shè)計基礎(chǔ)today=DOW(DATE())DOCASE

CASEtoday=1 weekday="星期天"

CASEtoday=2 weekday="星期一"

CASEtoday=3 weekday="星期二"

CASEtoday=4 weekday="星期三"

CASEtoday=5

weekday="星期四"

CASE

today=6

weekday="星期五"

CASE

today=7 weekday="星期六"ENDCASE?"今天是"+weekdayPage522.7程序設(shè)計基礎(chǔ)順序

由語句行組成,執(zhí)行時語句順序執(zhí)行分支

根據(jù)條件表達式的值執(zhí)行不同的操作If語句case語句

程序結(jié)構(gòu)Delta=b*b-4*a*cDOCASE

CASE

delta>0?"方程有兩個不等的實數(shù)根:" ??(-b+sqrt(delta))/(2*a)??(-b-sqrt(delta))/(2*a)CASE

delta=0?"方程有兩個相等的實數(shù)根:"??-b/(2*a)CASE

delta<0?"方程無實數(shù)根"ENDCASEPage542.7程序設(shè)計基礎(chǔ)例2:根據(jù)一元二次方程的系數(shù)a,b,c,判斷方程根IF…ENDIF與DOCASE…ENDCASE必須配對使用條件表達式-其值必須是邏輯值語句行序列-可以是一個或多個命令組成,也可以是條件控制語句組成的嵌套結(jié)構(gòu)DOCASE…ENDCASE每次只能執(zhí)行一個對應(yīng)的語句序列,若多個條件為真,則執(zhí)行第一個后,執(zhí)行ENDCASE后的語句注意:2.分支結(jié)構(gòu)Page532.7程序設(shè)計基礎(chǔ)Page542.7程序設(shè)計基礎(chǔ)循環(huán)結(jié)構(gòu)

循環(huán)語句使同一個語句組根據(jù)一定的條件執(zhí)行若干次FOR……ENDFORDOWHILE……ENDDOSCAN……ENDSCAN1.FOR…ENDFOR循環(huán)語句適用場合:循環(huán)次數(shù)已知格式:FOR

<循環(huán)變量>=<初值>

TO

<終值>[STEP<步長>]<語句組>ENDFOR/NEXTPage552.7程序設(shè)計基礎(chǔ)循環(huán)結(jié)構(gòu)循環(huán)體Page552.7程序設(shè)計基礎(chǔ)執(zhí)行流程循環(huán)變量在初值與終值之間?FOR初值賦給循環(huán)變量執(zhí)行循環(huán)體循環(huán)變量=循環(huán)變量+步長ENDFOR.T..F.例1:計算S=1+2+……+100

S=0&&用于存放累加和

FORI=1TO100STEP1S=S+I

ENDFOR?SPage552.7程序設(shè)計基礎(chǔ)1.FOR…ENDFOR循環(huán)語句100以內(nèi)的奇數(shù)和、偶數(shù)和?例2:計算S=1*2*……*100

P=1&&用于存放累乘積

FORI=1TO100P=P*IENDFOR?“100的階乘=",allt(str(p))Page552.7程序設(shè)計基礎(chǔ)1.FOR…ENDFOR循環(huán)語句例3:計算N的階乘

Accept"N="toNP=1&&用于存放累乘積

FORI=1TOval(N)P=P*IENDFOR?N,"的階乘=",allt(str(p))Page552.7程序設(shè)計基礎(chǔ)1.FOR…ENDFOR循環(huán)語句例4:計算P=3*5*7*9*11*……*25

P=1FORI=3TO25STEP2P=P*IENDFOR?allt(str(p))Page552.7程序設(shè)計基礎(chǔ)1.FOR…ENDFOR循環(huán)語句注意事項FOR與ENDFOR/NEXT必須成對出現(xiàn),缺一不可步長可正可負可省略(缺省時為1)。當初值大于終值時,步長為負數(shù)例如:

FORi=10to1step-4??iENDFORPage552.7程序設(shè)計基礎(chǔ)2.DOWHILE…ENDDO循環(huán)語句適用條件:循環(huán)次數(shù)未知格式:DOWHILE<條件表達式><語句組>ENDDOPage552.7程序設(shè)計基礎(chǔ)循環(huán)結(jié)構(gòu)循環(huán)體執(zhí)行流程條件表達式執(zhí)行循環(huán)體DOWHILE.T..F.ENDDO循環(huán)體中要有使得條件表達式最終為.F.的語句或通過EXIT強制退出Page562.7程序設(shè)計基礎(chǔ)循環(huán)語句常用的條件表達式DOWHILEX>5DOWHILE.NOT.BOF():記錄指針不在文件頭時為.T.DOWHILEBOF():記錄指針在文件頭時為.T.DOWHILE.NOT.EOF():記錄指針未到文件尾部DOWHILEEOF():記錄指針已到文件尾部DOWHILE.T.:

永真循環(huán),死循環(huán),需強制退出Page562.7程序設(shè)計基礎(chǔ)例1:計算S=1+2+……+100I=1S=0DOWHILE

I<=100

S=S+II=I+1ENDDO?SPage562.7程序設(shè)計基礎(chǔ)2.DOWHILE…ENDDO循環(huán)語句100以內(nèi)的奇數(shù)和、偶數(shù)和?例2:將ASC字符組成的字符串反序顯示變量c變量pabcdeffedcbaLEFT(c,1)SUBSTR(c,2)c=+pp=LEN(c)=0退出循環(huán)!循環(huán)條件?LEN(c)>0Page562.7程序設(shè)計基礎(chǔ)2.DOWHILE…ENDDO循環(huán)語句Store"abcdef"tocP=space(0)DoWhile

LEN(c)>0P=LEFT(c,1)+Pc=SUBSTR(c,2)Enddo?PPage562.7程序設(shè)計基礎(chǔ)2.DOWHILE…ENDDO循環(huán)語句例3:統(tǒng)計教師表中女教師的人數(shù)USEjsrs=0DOWHILE

.NOT.EOF()

IF

js.xb="女"

rs=rs+1

ENDIF

SKIPENDDO@2,10SAY"女教師的人數(shù):"@2,30SAYrsUSEPage562.7程序設(shè)計基礎(chǔ)2.DOWHILE…ENDDO循環(huán)語句3.SCAN…ENDSCAN循環(huán)語句適用條件:僅用于處理表中的記錄格式:

SCAN[<范圍>][FOR<條件>]<語句組>ENDSCAN循環(huán)控制條件:EOF()的值Page562.7程序設(shè)計基礎(chǔ)循環(huán)結(jié)構(gòu)例1:掃描JS表中全部記錄,顯示女教師的工號和姓名。USEJSSCAN

FORXB="女" ?JS.GH,JS.XMENDSCANPage562.7程序設(shè)計基礎(chǔ)3.SCAN…ENDSCAN循環(huán)語句USEJSDOWHILE

NOTEOF()

IFXB="女" ?JS.GH,JS.XM

ENDIF

SKIPENDDO上頁的SCAN部分與下面的語句等價:Page562.7程序設(shè)計基礎(chǔ)例2:掃描JS表中全部記錄,逢記錄號為雙號的,顯示其工號和姓名。USEJSSCAN

FORRECNO()%2=0 ?JS.GH,JS.XMENDSCANPage562.7程序設(shè)計基礎(chǔ)3.SCAN…ENDSCAN循環(huán)語句循環(huán)結(jié)構(gòu)中的EXIT命令和LOOP命令執(zhí)行EXIT語句,不管程序執(zhí)行到什么位置,都強制退出循環(huán),使程序轉(zhuǎn)去執(zhí)行ENDDO/ENDSCAN/ENDFOR后面的部分。執(zhí)行LOOP語句,直接跳過本次循環(huán)中剩余的語句,使程序轉(zhuǎn)去執(zhí)行下一次循環(huán)。DOWHILE循環(huán),跳到條件表達式FOR和SCAN循環(huán),跳到計算增量的部分Page572.7程序設(shè)計基礎(chǔ)例,求1~100之間非3的倍數(shù)的所有奇數(shù)之和

S=0 FORI=1TO100STEP2

IFMOD(I,3)=0 LOOP ENDIF

S=S+I ENDFOR?SPage572.7程序設(shè)計基礎(chǔ)LOOP命令(短路語句):跳出本次循環(huán)例,隨機產(chǎn)生一個要求在70~80之間的數(shù)

DoWhile.t. x=rand()*100

ifx>70andx<80exit

endif

Enddo?xEXIT命令(循環(huán)退出語句)Page572.7程序設(shè)計基礎(chǔ)4、結(jié)構(gòu)的嵌套所謂嵌套就是在一種程序結(jié)構(gòu)中包含另一種程序結(jié)構(gòu)控制結(jié)構(gòu)相互間可以嵌套Page572.7程序設(shè)計基礎(chǔ)Page542.7程序設(shè)計基礎(chǔ)循環(huán)結(jié)構(gòu)

循環(huán)語句使同一個語句組根據(jù)一定的條件執(zhí)行若干次FOR……ENDFORDOWHILE……ENDDOSCAN……ENDSCAN循環(huán)結(jié)構(gòu)中的EXIT命令和LOOP命令Page572.7程序設(shè)計基礎(chǔ)2.7.3過程和用戶自定義函數(shù)(UDF)將經(jīng)常執(zhí)行的功能對應(yīng)的一段代碼獨立出來,創(chuàng)建一個過程或函數(shù)(代碼量、維護)過程

PROCEDURE

過程名語句組

[return[eExpression]]

ENDPROC函數(shù)

FUNCTION

函數(shù)名語句組

[return[eExpression]]

ENDFUNC向過程或函數(shù)傳遞參數(shù)使過程和函數(shù)可以接受參數(shù)第一個可執(zhí)行語句必須為:

PARAMETERS參數(shù)表最多可傳遞27個參數(shù),用逗號分隔Page582.7程序設(shè)計基礎(chǔ)2.7.3過程和用戶自定義函數(shù)(UDF)從過程或函數(shù)得到返回值用RETURN語句返回一個值給調(diào)用程序;省略RETURN,其缺省的返回值為真(.T.)過程和函數(shù)的調(diào)用DO過程名/函數(shù)名過程名/函數(shù)名()調(diào)用時使用參數(shù)

DO過程名/函數(shù)名WITH

...

(無返回值)

過程名/函數(shù)名(...

)

Page592.7程序設(shè)計基礎(chǔ)2.7.3過程和用戶自定義函數(shù)(UDF)Page582.7程序設(shè)計基礎(chǔ)2.7.3過程和用戶自定義函數(shù)(UDF)例1:定義一個函數(shù)ntoc,當傳遞給一個0~9之間的數(shù)字時,返回一個中文的”零~九”.FUNCTION

ntoc

PARAMETERSi

cString="零一二三四五六七八九"

RETURN

substr(cString,i*2+1,2)ENDFUNCModi

comm

ntoc執(zhí)行?ntoc(3)例2:將日期型數(shù)據(jù)轉(zhuǎn)換為形如“xxxx年xx月xx日”的中文日期字符串在命令窗口鍵入命令Modi

comm

dtocc輸入以下程序段FUNCTION

dtocc

PARAMETERSdeDate

cYear=str(year(deDate),4)+"年"

cMonth=str(month(deDate),2)+"月"

cDay=str(day(deDate),2)+"日"

RETURN

cYear-cMonth-cDayENDFUNC按<ctrl>+w保存程序,返回到命令狀態(tài)執(zhí)行?dtocc(date())Page592.7程序設(shè)計基礎(chǔ)過程或自定義函數(shù)存儲方式位于程序文件的最后每一個保存在一個單獨文件中多個保存在一個單獨文件中若函數(shù)或過程存在于單獨文件(過程文件)中,則應(yīng)使用如下命令訪問:SETPROCEDURETO過程文件名Page592.7程序設(shè)計基礎(chǔ)2.7.3過程和用戶自定義函數(shù)(UDF)Input"請輸入圓的半徑:"tor?"圓的面積為:",erea(r)Function

erea

ParametersiPI=3.14159S=PI*i*i

returnS

EndfuncPage592.7程序設(shè)計基礎(chǔ)例3下列程序通過調(diào)用函數(shù)erea()來計算圓的面積Input[提示信息]to<內(nèi)存變量>

將從鍵盤輸入的數(shù)據(jù)賦值給內(nèi)存變量,input可以接收任何類型的數(shù)據(jù)位于程序文件的最后s=0FORi=1TO5s=s+fjC(i)ENDFOR?sFUNCTION

fjC

PARAMETERSxp=1FORn=1TOxp=p*nENDFOR

RETURNpENDFUNC例4下列程序用于計算s=1!+2!+3!+4!+5!Page592.7程序設(shè)計基礎(chǔ)位于程序文件的最后Wait"請輸入你的選擇:(1~3)"totbDOCASE

CASE

tb="1"

usejs brow

CASE

tb="2"

usexs brow

CASE

tb="3"

usecj brow

ENDCASE例5:根據(jù)選擇打開不同的表(optb1.prg)Page592.7程序設(shè)計基礎(chǔ)wait命令--顯示信息并暫停VisualFoxPro的執(zhí)行,按某個鍵或單擊鼠標后繼續(xù)執(zhí)行。Wait"請輸入你的選擇:(1~3)"totbDOCASE

CASE

tb="1"

dojs1

CASE

tb="2"

doxs1CASE

tb="3"

docj1

ENDCASEusejsbrowJs1.prgxs1.prgusexsbrowusecjbrowcj1.prg例5:根據(jù)選擇打開不同的表(optb1.prg)Page592.7程序設(shè)計基礎(chǔ)每一個保存在一個單獨文件中SetproceduretojsxscjWait"請輸入你的選擇:(1~3)"totbDOCASE

CASE

tb="1"

dojs2CASE

tb="2"

doxs2

CASEtb="3"

docj2

ENDCASEJsxscj.prgProcJs2usejsBrowendprocProcxs2usexsBrowendprocProccj2usecjBrowendproc例5:根據(jù)選擇打開不同的表(optb2.prg)多個保存在一個單獨文件中2.7程序設(shè)計基礎(chǔ)

一、VFP程序設(shè)計概述

二、順序結(jié)構(gòu)

三、分支結(jié)構(gòu)

四、循環(huán)結(jié)構(gòu)

五、過程和用戶自定義函數(shù)Page512.7程序設(shè)計基礎(chǔ)2.7程序設(shè)計基礎(chǔ)IF……ENDIF語句2.7程序設(shè)計基礎(chǔ)練習(xí)題

由鐵路托運行李,設(shè)每張車票托運行李不超過50kg時,運費為0.8元/kg,如果超過50kg,則超過部分的運費為1.2元/kg,編寫程序,要求給出行李重量W,計算應(yīng)繳納運費X.計算公式:X=0.8×WW≤50KG0.8×50+1.2×(W-50)W>50KG2.7程序設(shè)計基礎(chǔ)IF……ENDIF語句2.7程序設(shè)計基礎(chǔ)練習(xí)題Input"請輸入行李的重量:"toWIFW<=50X=0.8*WELSEX=0.8*50+1.2*(W-50)ENDIF?"托運費用為:",X2.7程序設(shè)計基礎(chǔ)DOCASE

溫馨提示

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

最新文檔

評論

0/150

提交評論