VFP语言基础课件_第1页
VFP语言基础课件_第2页
VFP语言基础课件_第3页
VFP语言基础课件_第4页
VFP语言基础课件_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VFP語言基礎1.字元型數據2.數值型數據4.日期型數據5.日期時間型數據*7.浮點型數據6.邏輯型數據3.貨幣型數據*8.雙精度型數據

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

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

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

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

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

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

"蘇A-0001"

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

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

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

…#undef<常量名稱>&&釋放一個常量Page282.2數據存儲容器創建常量常量值所代表的數據內容,是程式運行時實際使用的值例如:

#DefinenPI3.1415926&&創建常量

r=2.3&&給半徑賦值

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

?s&&輸出圓面積值

#undef

nPI&&釋放常量

cancel&&程式運行結束

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

系統默認的格式傳統日期格式為:{mm/dd/yy

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

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

如果字段和變數同名,則字段具有更高的優先權變數的引用:m.或m->

xh="我是變數"?xh&&顯示字段內容

?m.xh&&顯示變數內容

?m->xh

&&顯示變數內容

?xs.xh&&顯示字段內容Page292.2數據存儲容器3.數組定義:一種特殊的記憶體變數,是一組有序資料項目的集合。特點:

其中的每個資料項目稱為數組元素

每個數組元素在數組裏的位置是固定的

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

Page302.2數據存儲容器例1:表示一個班學生的VFP課程成績表

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

b[30,3]數組的聲明

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

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

PUBLICX(3,4)全局數組

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

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

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

+,-,$運算符操作示例+將兩個字串連接在一起,結果仍然是字串?"visual"+"foxpro"?"姓名:"+xs.xm?"今天是:"+DTOC(date())-刪除運算符左側字串空格後連接起來,空格放到尾部?"ab"-"cd"?xs.ximing-xs.xm$查看左串是否包含在右串中,結果是一個邏輯值?"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運算符★

注意:不可以對兩個日期型或日期時間型數據相加關係操作符:

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

注意:關係運算符兩邊的運算式類型要相同1、字元的排序序列:

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

二、數據存儲容器

常量、變數、數組

三、運算符

數值、字元、日期和日期時間、關係

四、運算式

五、常用函數第2章VFP語言基礎第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關係運算符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運算符★

注意:按優先順序高低排列,可使用()改變順序1.字元運算式

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

?(xim='電腦科學系'ORxim='資訊管理系')ANDnotxb="女"

注意:在運算過程中,當運算出某個中間結果後,若已經能夠確定最終的結果,那麼將終止本邏輯運算式中後面部分的運算

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

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

數值部分取值:

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

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

?LEN("ABCDF")?LEN("ABCDF")X="中國礦業大學"?LEN(X)5812Page382.4函數4.返回位置函數AT()格式:AT(<字元運算式1>,<字元運算式2>,<數值運算式>)注意:數值運算式用於指定第幾次出現,默認為1示例:?AT("is","nowisthetime")?AT("e","nowisthetime",1)?AT("e","nowisthetime",2)?AT("are","now

isthetime")?AT("E","nowisthetime")5101500未出現,返回0區分大小寫Page392.4函數5.取子字串函數SUBSTR()格式:SUBSTR(<字元運算式>,<數值運算式1>[,<數值運算式2>])

示例:?SUBSTR("社會經濟學",5,4)

?SUBSTR("社會經濟學",5,2)

?SUBSTR("社會經濟學",5)經濟經經濟學Page392.4函數6.LEFT()格式:

LEFT(<字元運算式>,<數值運算式>)示例:?LEFT("ABDF",2)

"AB"

7.RIGHT()格式:

RIGHT(<字元運算式>,<數值運算式>)示例:?RIGHT("abde",2)"de"

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

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

1.字元轉換成ASCII碼函數ASC()格式:ASC(<字元運算式>)示例:?ASC("ABCD")

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

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

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

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

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

sqrt()、rand()2.字元函數

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

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

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

month()、year()4.數據類型轉換函數

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

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

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

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

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

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

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

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

一、VFP程式設計概述

二、順序結構

三、分支結構

四、迴圈結構

五、過程和用戶自定義函數Page512.7程式設計基礎Page512.7程式設計基礎程式是為了完成某一具體任務而編寫的一系列指令程式設計是利用系統所提供的設計工具,按照程式語言的規範,編寫程式代碼的過程程式自動執行多條命令程式可被修改並重新運行,且可多次運行VFP程式檔是擴展名為.PRG的文本檔VFP程式設計概述Page522.7程式設計基礎2.7.1創建與運行程式創建與修改:“檔”+“新建”或“打開”MODIFYCOMMAND<程式檔案名>專案管理器+“代碼”運行:“運行”按鈕DO<程式檔案名>專案管理器:“程式”+“運行”Page522.7程式設計基礎

根據不同的情況和條件,控制程式去執行相應操作的語句序列。順序

由語句行組成,執行時語句順序執行分支

根據條件運算式的值執行不同的操作迴圈

使得一組語句組重複執行若干次2.7.2程式結構Page532.7程式設計基礎1.順序結構

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

#DefinePI3.1415926&&創建常量

r=2&&給半徑賦值

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

?s&&輸出圓面積值

#undefinePI&&釋放常量

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

例:若變數nWaterTemp(水溫度)的值大於100,顯示“水沸騰”,否則不執行任何操作。Page532.7程式設計基礎1.簡單分支結構Accept"請輸入水溫值:"to

nWaterTemp

IF

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

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

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

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

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

endifuse螢幕輸出格式命令:@<行,列>say<運算式>條件分支結構(if語句)Page532.7程式設計基礎條件分支結構(case語句)格式:DOCASECASE<條件運算式1><語句序列1>

…CASE<條件運算式N><語句序列N>[OTHERWISE<語句序列N+1>]ENDCASE條件1DOCASEENDCASE語句序列1其他語句序列語句序列2條件2語句序列n條件n…Page532.7程式設計基礎條件分支結構(case語句)注意事項從第一個CASE開始,計算條件運算式的值,若某個運算式結果為.T.,則執行相應的語句組,然後跳過以後的語句,直到ENDCASE後繼續執行。如果所有的條件運算式值都為.F.,則執行OtherWise部分的語句組,然後執行ENDCASE後的語句。CASE語句只執行第一個符合條件的語句組。Page542.7程式設計基礎條件分支結構(case語句)例1:判斷系統當前日期是星期幾.Page542.7程式設計基礎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程式設計基礎順序

由語句行組成,執行時語句順序執行分支

根據條件運算式的值執行不同的操作If語句case語句

程式結構Delta=b*b-4*a*cDOCASE

CASE

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

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

delta<0?"方程無實數根"ENDCASEPage542.7程式設計基礎例2:根據一元二次方程的係數a,b,c,判斷方程根IF…ENDIF與DOCASE…ENDCASE必須配對使用條件運算式-其值必須是邏輯值語句行序列-可以是一個或多個命令組成,也可以是條件控制語句組成的嵌套結構DOCASE…ENDCASE每次只能執行一個對應的語句序列,若多個條件為真,則執行第一個後,執行ENDCASE後的語句注意:2.分支結構Page532.7程式設計基礎Page542.7程式設計基礎迴圈結構

迴圈語句使同一個語句組根據一定的條件執行若干次FOR……ENDFORDOWHILE……ENDDOSCAN……ENDSCAN1.FOR…ENDFOR迴圈語句適用場合:迴圈次數已知格式:FOR

<迴圈變數>=<初值>

TO

<終值>[STEP<步長>]<語句組>ENDFOR/NEXTPage552.7程式設計基礎迴圈結構循環體Page552.7程式設計基礎執行流程迴圈變數在初值與終值之間?FOR初值賦給迴圈變數執行循環體迴圈變數=迴圈變數+步長ENDFOR.T..F.例1:計算S=1+2+……+100

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

FORI=1TO100STEP1S=S+I

ENDFOR?SPage552.7程式設計基礎1.FOR…ENDFOR迴圈語句100以內的奇數和、偶數和?例2:計算S=1*2*……*100

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

FORI=1TO100P=P*IENDFOR?“100的階乘=",allt(str(p))Page552.7程式設計基礎1.FOR…ENDFOR迴圈語句例3:計算N的階乘

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

FORI=1TOval(N)P=P*IENDFOR?N,"的階乘=",allt(str(p))Page552.7程式設計基礎1.FOR…ENDFOR迴圈語句例4:計算P=3*5*7*9*11*……*25

P=1FORI=3TO25STEP2P=P*IENDFOR?allt(str(p))Page552.7程式設計基礎1.FOR…ENDFOR迴圈語句注意事項FOR與ENDFOR/NEXT必須成對出現,缺一不可步長可正可負可省略(缺省時為1)。當初值大於終值時,步長為負數例如:

FORi=10to1step-4??iENDFORPage552.7程式設計基礎2.DOWHILE…ENDDO迴圈語句適用條件:迴圈次數未知格式:DOWHILE<條件運算式><語句組>ENDDOPage552.7程式設計基礎迴圈結構循環體執行流程條件運算式執行循環體DOWHILE.T..F.ENDDO循環體中要有使得條件運算式最終為.F.的語句或通過EXIT強制退出Page562.7程式設計基礎迴圈語句常用的條件運算式DOWHILEX>5DOWHILE.NOT.BOF():記錄指針不在檔頭時為.T.DOWHILEBOF():記錄指針在檔頭時為.T.DOWHILE.NOT.EOF():記錄指針未到檔尾部DOWHILEEOF():記錄指針已到檔尾部DOWHILE.T.:

永真迴圈,死迴圈,需強制退出Page562.7程式設計基礎例1:計算S=1+2+……+100I=1S=0DOWHILE

I<=100

S=S+II=I+1ENDDO?SPage562.7程式設計基礎2.DOWHILE…ENDDO迴圈語句100以內的奇數和、偶數和?例2:將ASC字元組成的字串反序顯示變數c變數pabcdeffedcbaLEFT(c,1)SUBSTR(c,2)c=+pp=LEN(c)=0退出迴圈!迴圈條件?LEN(c)>0Page562.7程式設計基礎2.DOWHILE…ENDDO迴圈語句Store"abcdef"tocP=space(0)DoWhile

LEN(c)>0P=LEFT(c,1)+Pc=SUBSTR(c,2)Enddo?PPage562.7程式設計基礎2.DOWHILE…ENDDO迴圈語句例3:統計教師表中女教師的人數USEjsrs=0DOWHILE

.NOT.EOF()

IF

js.xb="女"

rs=rs+1

ENDIF

SKIPENDDO@2,10SAY"女教師的人數:"@2,30SAYrsUSEPage562.7程式設計基礎2.DOWHILE…ENDDO迴圈語句3.SCAN…ENDSCAN迴圈語句適用條件:僅用於處理表中的記錄格式:

SCAN[<範圍>][FOR<條件>]<語句組>ENDSCAN迴圈控制條件:EOF()的值Page562.7程式設計基礎迴圈結構例1:掃描JS表中全部記錄,顯示女教師的工號和姓名。USEJSSCAN

FORXB="女" ?JS.GH,JS.XMENDSCANPage562.7程式設計基礎3.SCAN…ENDSCAN迴圈語句USEJSDOWHILE

NOTEOF()

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

ENDIF

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

FORRECNO()%2=0 ?JS.GH,JS.XMENDSCANPage562.7程式設計基礎3.SCAN…ENDSCAN迴圈語句迴圈結構中的EXIT命令和LOOP命令執行EXIT語句,不管程式執行到什麼位置,都強制退出迴圈,使程式轉去執行ENDDO/ENDSCAN/ENDFOR後面的部分。執行LOOP語句,直接跳過本次迴圈中剩餘的語句,使程式轉去執行下一次迴圈。DOWHILE迴圈,跳到條件運算式FOR和SCAN迴圈,跳到計算增量的部分Page572.7程式設計基礎例,求1~100之間非3的倍數的所有奇數之和

S=0 FORI=1TO100STEP2

IFMOD(I,3)=0 LOOP ENDIF

S=S+I ENDFOR?SPage572.7程式設計基礎LOOP命令(短路語句):跳出本次迴圈例,隨機產生一個要求在70~80之間的數

DoWhile.t. x=rand()*100

ifx>70andx<80exit

endif

Enddo?xEXIT命令(迴圈退出語句)Page572.7程式設計基礎4、結構的嵌套所謂嵌套就是在一種程式結構中包含另一種程式結構控制結構相互間可以嵌套Page572.7程式設計基礎Page542.7程式設計基礎迴圈結構

迴圈語句使同一個語句組根據一定的條件執行若干次FOR……ENDFORDOWHILE……ENDDOSCAN……ENDSCAN迴圈結構中的EXIT命令和LOOP命令Page572.7程式設計基礎2.7.3過程和用戶自定義函數(UDF)將經常執行的功能對應的一段代碼獨立出來,創建一個過程或函數(代碼量、維護)過程

PROCEDURE

過程名語句組

[return[eExpression]]

ENDPROC函數

FUNCTION

函數名語句組

[return[eExpression]]

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

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

DO過程名/函數名WITH

...

(無返回值)

過程名/函數名(...

)

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

ntoc

PARAMETERSi

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

RETURN

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

comm

ntoc執行?ntoc(3)例2:將日期型數據轉換為形如“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保存程式,返回到命令狀態執行?dtocc(date())Page592.7程式設計基礎過程或自定義函數存儲方式位於程式檔的最後每一個保存在一個單獨檔中多個保存在一個單獨檔中若函數或過程存在於單獨檔(過程檔)中,則應使用如下命令訪問:SETPROCEDURETO過程檔案名Page592.7程式設計基礎2.7.3過程和用戶自定義函數(UDF)Input"請輸入圓的半徑:"tor?"圓的面積為:",erea(r)Function

erea

ParametersiPI=3.14159S=PI*i*i

returnS

EndfuncPage592.7程式設計基礎例3下列程式通過調用函數erea()來計算圓的面積Input[提示資訊]to<記憶體變數>

將從鍵盤輸入的數據賦值給記憶體變數,input可以接收任何類型的數據位於程式檔的最後s=0FORi=1TO5s=s+fjC(i)ENDFOR?sFUNCTION

fjC

PARAMETERSxp=1FORn=1TOxp=p*nENDFOR

RETURNpENDFUNC例4下列程式用於計算s=1!+2!+3!+4!+5!Page592.7程式設計基礎位於程式檔的最後Wait"請輸入你的選擇:(1~3)"totbDOCASE

CASE

tb="1"

usejs brow

CASE

tb="2"

usexs brow

CASE

tb="3"

usecj brow

ENDCASE例5:根據選擇打開不同的表(optb1.prg)Page592.7程式設計基礎wait命令--顯示資訊並暫停VisualFoxPro的執行,按某個鍵或單擊滑鼠後繼續執行。Wait"請輸入你的選擇:(1~3)"totbDOCASE

CASE

tb="1"

dojs1

CASE

tb="2"

doxs1CASE

tb="3"

docj1

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

CASE

tb="1"

dojs2CASE

tb="2"

doxs2

CASEtb="3"

docj2

ENDCASEJsxscj.prgProcJs2usejsBrowendprocProcxs2usexsBrowendprocProccj2usecjBrowendproc例5:根據選擇打開不同的表(optb2.prg)多個保存在一個單獨檔中2.7程式設計基礎

一、VFP程式設計概述

二、順序結構

三、分支結構

四、迴圈結構

五、過程和用戶自定義函數Page512.7程式設計基礎2.7程式設計基礎IF……ENDIF語句2.7程式設計基礎練習題

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论