




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第二章 VFP程序設計根底 根據計算機系統處置數據的方式來劃分,VFP有常量、變量、表達式和函數四種方式的數據。21常量與變量 每一個數據都有一定的類型,數據類型決議了數據的存儲方式和運算方式。向表中輸入數據時,每個字段的數據類型是在表構造中定義的。常量、內存變量、函數以及表達式的類型包括字符型、數值型、貨幣型、邏輯型、日期型和日期時間型等6種。211常量 常量用以表示一個詳細的、不變的值。不同類型的常量有不同的書寫格式。 1數值型常量 數值型常量也就是常數,用來表示一個數量的大小,由數字09、小數點和正負號構成。 例如:12、3.45、-6.78 為了表示很大或很小的數值型常量,也可以運用科
2、學記數法方式書寫. 例如:用5.878E12表示5.8781012,用1.6E-12表示1.610-12。 數值型數據在內存中用8個字節表示,其取值范圍是-0.9999999999E+190.9999999999E+20。2貨幣型常量 貨幣型常量用來表示貨幣值,其書寫格式與數值型常量類似,但要加上一個前置的符號()。貨幣數據在存儲和計算時,采用4位小數。假設一個貨幣型常量多于4位小數,那么系統會自動將多余的小數位四舍五入。例如: 常量123.456789將存儲為123.4568。 貨幣型常量沒有科學記數法方式,在內存中占用8個字節.取值范圍是:-922337203685477.58079223
3、37203685477.5807。3字符型常量 字符型常量也稱為字符串,其表示方法是用半角單引號、雙引號或方括號把字符串擴起來。這里的單引號、雙引號或方括號稱為定界符。許多常量都有定界符。定界符雖然不作為常量本身的內容,但它規定了常量的類型以及常量的起始和終止界限。 字符型常量的定界符必需成對匹配,不能一邊用單引號而另一邊用雙引號。假設某種定界符本身也是字符串的內容,那么需求用另一種定界符為該字符串定界。 留意,不包含任何字符的字符串(“)叫空串。空串與包含空格的字符串( )不同。 例: 顯示幾個字符型常量。 在命令窗口鍵入以下兩條命令:? 計算機,123,abcABC? 計算機,123,ab
4、cABC ? 命令的功能是另起一行,在新的一行的開場處顯示假設干個表達式的值; ? 命令是在同一行顯示表達式的值。顯示結果:計算機 123 abcABC計算機 123 abcABC4日期型常量 日期型常量的定界符是一對花括號。花括號內包括年、月、日三部分內容,各部分內容之間用分隔符分隔。系統默許斜杠()分隔符。常用的其他日期分隔符有連字號()、句點()和空格。 日期型常量的格式有兩種: 傳統的日期格式 系統默以為美國日期格式mm/dd/yy(月/日年),傳統日期格式中的月、日各為2位數字,而年份可以是2位數字,也可以是4位數字。嚴厲的日期格式 yyyy-mm-dd用這種格式書寫的日期常量能表達
5、一個確切的日期,它不受SET DATE等語句設置的影響。這種格式的日期常量在書寫時要留意:花括號內第一個字符必需是脫字符();年份必需用4位(如2019、2019等);年月日的次序不能顛倒、不能缺省。日期型數據用8個字節表示.影響日期格式的設置命令命令格式:set mark to 日期分割符命令功能:用于指定日期分隔符,“-,“.命令格式:set date to american|ansi|british| Use:mm/dd/yy british: dd/mm/yy命令格式:set century on/off 命令功能:用于設置年份的位數; on設置年份用4位數字表示 off設置年份用2位
6、數字表示 命令格式:SET STRICTDATE TO 0|1|2 命令功能:用于設置能否對日期格式進展檢查。 0 表示不進展嚴厲的日期格式檢查,目的是與早期VFP兼容。 1 表示進展嚴厲的日期格式檢查,它是系統默許的設置。 2 表示進展嚴厲的日期格式檢查,并且對CTOD()和CTOT()函數的格式也有效。例22 設置不同的日期格式。 在命令窗口鍵入輸入以下幾條命令,并分別回車執行:set century on 設置4位數字年份set date to ymd 設置年月日格式?2000.08.08Set century offSet mark to “.Set date to mdy?2000-
7、08-105日期時間型常量 日期時間型常量包括日期和時間兩部分內容:(日期,時間)。日期部分與日期型常量類似,也有傳統的和嚴厲的兩種格式。時間部分的格式為: hh:mm:ss ap。其中hh、mm和ss分別代表時、分和秒,默許值分別為12、0和0。a和p分別代表上午和下午,默許值為a。假設指定的時間大于等于12,那么自然為下午的時間。日期時間型數據用8個字節存儲6邏輯型常量 邏輯型數據只需邏輯真和邏輯假兩個值。邏輯真的常量表示方式有:.T.(.t.) 、 .Y.(.y.)。邏輯假的常量表示方式有: .F. 、.f.、.N. 、.n.。前后兩個句點作為邏輯型常量的定界符是必不可少的,否那么會被誤
8、以為變量名。邏輯型數據只占用一個字節212變量 變量值是可以隨時更改的。VFP的變量分為字段變量和內存變量兩大類。由于表中的各條記錄對應一個個字段名,因此,表中的字段名就稱字段變量。 內存變量是內存中的一個存儲區域,變量值就是存放在這個存儲區域里的數據,變量的類型取決于變量值的類型。例如,當把一個常量賦給一個變量時,這個常量就被存放到該變量對應的存儲位置中而成為該變量新的取值。在VFP中,變量的類型可以改動,也就是說,可以把不同類型的數據賦給同一個變量。 內存變量的數據類型包括字符型(C)、數值型(N)、貨幣型(Y)、邏輯型(L)、日期 型(D)和日期時間型(T)。1簡單內存變量 每一個變量都
9、有一個名字,可以經過變量名訪問變量。假設當前表中存在一個同名的字段變量,那么在訪問內存變量時,必需在變量名前加上前綴M(或M-),否那么系統將訪問同名的字段變量。 向簡單內存變量賦值不用事先定義,變量的賦值命令有以下兩種格式:內存變量名表達式 STORE表達式TO內存變量名表功能注釋: 等號一次只能給一個內存變量賦值。 STORE可同時給假設干個變量賦一樣的值,各內存變量名之間必需用逗號分開。 在VFP中,一個變量在運用之前并不需求特別的聲明或定義。當用STORE 命令給變量賦值時,假設該變量并不存在,那么系統會自動建立它。 可以經過對內存變量重新賦值來改動其內容和類型。例2.4 內存變量和字
10、段變量的訪問。 在一個表文件“student.DBF,其構造如下: student(學號C(8),姓名C(6),性別C(2),出生日期D(8) 在命令窗口鍵入以下命令:use studentlist? 姓名,性別,學號 顯示字段變量store “王三 to 姓名 用字符串向內存變量姓名賦值y=500 xm=姓名 &用字段變量賦值內存變量XMstore 8.88 to x1,x2store .t. to q? xm,m.姓名,x1,x2,q? 姓名,m.姓名,x1,x2,q2數組 數組是內存中延續的一片存儲區域,它由一系列元素組成,每個數組元素可經過數組名及相應的下標來訪問。每個數組元素
11、相當于一個簡單變量,可以給各元素分別賦值。在VFP中,一個數組中各元素的數據類型可以不同。 與簡單內存變量不同,數組在運用之前普通要用DIMENSION或DECLARE命令顯式創建,規定數組是一維數組還是二維數組,數組名和數組大小。數組大小由下標值的上、下限決議,下限規定為1。 創建數組的命令格式為: DIMENSION數組名(下標上限1),下標上限2) DECLARE數組名(下標上限1,下標上限2) 以上兩種格式的功能完全一樣。數組創建后,系統自動給每個數組元素賦以邏輯假.F.。例如,DIME x(5),y(2,3)命令定義了兩個數組: 一維數組x含5個元素:x(1)、x(2)、x(3)、x
12、(4)、x(5)。 二維數組y含6個元素:y(1,1)、y(1,2)、y(1,3)、y(2,1)、y(2,2)、y(2,3)。 整個數組的數據類型為A(Array),而各個數組元素可以分別存放不同類型的數據。 在運用數組和數組元素時,應留意如下問題: 在一切運用簡單內存變量的地方,均可以運用數組元素。 在賦值和輸入語句中運用數組名時,表示將同一個值同時賦給該數組的全部數組元素。 在同一個運轉環境下,數組名不能與簡單變量名反復。 在賦值語句中的表達式位置不能出現數組名。 可以用一維數組的方式訪問二維數組。213內存變量常用命令1內存變量的賦值 格式1:STOR表達式TO變量名表 格式2:內存變量
13、名表達式 功能:計算表達式并將表達式值賦給一個或多個內存變量,格式2只能給一個變量賦值。2表達式值的顯示 格式1:?表達式表 格式2:?表達式表 功能:計算表達式表中的各表達式并輸出各表達式值。 不論有沒有指定表達式表,格式1都會輸出一個回車換行符。 括起來的內容表示是可選的;用括起來的內容表示是可選的;用括起來表示在實踐編括起來表示在實踐編寫語句時,用相應的內容替代;用寫語句時,用相應的內容替代;用 括起來表示是必選的;括起來表示是必選的;類似類似A|B的格式,表示的格式,表示A和和B只能選擇一個,不能同時都選。只能選擇一個,不能同時都選。3,內存變量的顯示格式1:LIST MEMORY L
14、IKE通配符 TO PRINTER| TO FILE文件名格式2:DISPLAY MEMORY LIKE通配符 TO PRINTER |To FILE文件名 功能:顯示內存變量的當前信息,包括變量名、作用域、類型、取值。 選用LIKE短語只顯示與通配符相匹配的內存變量。通配符包括*和?,*表示恣意多個字符,?表示恣意一個字符。 可選子句TO PRINTER或TO FILE文件名用于在顯示的同時送往打印機,或者存入給定文件名的文本文件中,文件的擴展名為.txt。 4,內存變量的去除 格式1:CLEAR MEMORY 格式2:RELEASE內存變量名表 格式3:RELEASE ALLEXTENDE
15、D 格式4:RELEASE ALLLIKE通配符 EXCEPT通配符功能: 格式1去除一切內存變量。 格式2去除指定的內存變量。 格式3去除一切的內存變量。在人時機話形狀其作用與格式l一樣。 格式4選用LIKE短語去除與通配符相匹配的內存變量,EXCEPT短語去除與通配符不相匹配的內存變量。例25在命令窗口中依次輸入以下命令,命令格式及屏幕顯示如下:clear memodime y(2,2)stor xxx to x1,y(1,1)y(3)=2000-03-23x2=$123.23list memo like y*rele all like y*5表中數據與數組數據之間的交換 表文件的數據內容
16、是以記錄的方式存儲和運用的,而數組是把一批數據組織在一同的數據處置方法,為了使它們之間方便地進展數據交換,以利于程序的運用,VFP提供了相互之間數據傳送的功能,可以方便地完成表記錄與內存變量之間的數據交換。 將表的當前記錄復制到數組 格式1:SCATTERFIEIDS MEMOTO數組名BLANK 格式2:SCATTERFIELDS LIKE通配符FIELDS EXCEPT通配符MEMO TO數組名BLANKl 格式1的功能是將表的當前記錄從指定字段表中的第一個字段內容開場,依次復制到數組名中的從第一個數組元素開場的內存變量中。假設不運用FIELDS短語指定字段,那么復制除備注型M和通用型G之
17、外的全部字段。 假設事先沒有創建數組,系統將自動創建;假設己創建的數組元素個數少于字段數,系統自動建立其他數組元素;假設已創建的數組元素個數多于字段數,其他數組元素的值堅持不變。 假設選用MEMO短語,那么同時復制備注型字段。 假設選用BLANK短語,那么產生一個空數組,各數組元素的類型和大小與表中當前記錄的對應字段一樣。 格式2的功能是用通配符指定包括或排除的字段。FIELDS LIKE通配符和FIELDS EXCEPT通配符可以同時運用。例:翻開表文件“student.dbf,包括9個字段: 學號(C,4)、姓名(C,6)、性別(L)、出生日期(D,8)等。當前記錄為第一記錄,把它復制到數
18、組ZG中。use studentscat to zg? zg(1),zg(2),zg(3)scat to zg memo &要求包括備注型字段scatter to bb fields like 姓*,總* &只選兩字段list memo like bb 將數組數據復制到表的當前記錄 格式1:GATHER FROMFIELDS字段名表MEMO 格式2:GATHER FROM數組名FIELDS LIKE通配符 FIEIDS EXCEPT memo 格式1的功能是將數組中的數據作為一個記錄復制到表的當前記錄中。從第一個數組元素開場,依次向字段名表指定的字段填寫數據。假設缺省FIELD
19、S選項,那么依次向各個字段復制,假設數組元素個數多于記錄中字段的個數,那么多余部分被忽略。假設選用MEMO短語,那么在復制時包括備注型字段;否那么備注型字段不予思索。格式2功能是用通配符指定包括或排除的字段。FIELDS LIKE和 fields except可以同時運用。 例:翻開表文件“student.dbf,追加一條空記錄,將數組RR中的內容復制到空記錄中。留意數組中各個數組元素的數據類型必需與字段的數據類型對應一致。dime rr(1,3)RR(1,1)=952201RR(1,2)=2019220217RR(1,3)=張三use studentappe blankgather from
20、 rrbrow22 表達式 表達式是由常量、變量和函數經過特定的運算符銜接起來的式子。在用VFP編寫的程序里,表達式幾乎無所不在。表達式的方式包括:單一的運算對象(如常量、變量或函數)。由運算符將運算對象銜接起來構成的式子。 無論是簡單的還是復雜的合法表達式,按照規定的運算規那么最終均能計算出一個結果,即表達式的值。 根據表達式值的類型,表達式可分為數值表達式、字符表達式、日期時間表達式和邏輯表達式。大多數邏輯表達式是帶比較運算符的關系表達式。221數值、字符與日期時間表達式1數值表達式 數值表達式由算術運算符將數值型數據銜接起來構成,其運算結果依然是數值型數據。 數值型數據可以是數值型常量或
21、者變量。 算術運算優先級(p56) 數值表達式中的算術運算符有些與日常運用的運算符稍有區別. *是乘, / 是除, %是求余, *或是乘方.求余運算 求余運算和取余函數MOD()的作用一樣。余數的正負號與除數一致。當表達式中出現乘*、除和求余運算時,它們具有一樣的優先級。例:求余運算 ? 10%3, 10%-3 1 -210339110-391被除數與除數同號被除數與除數異號,求得余數后再加上除數值.1(-3)-2+=-32字符表達式 字符表達式由字符串運算符將字符型數據銜接起來構成,其運算結果依然是字符型數據。字符串運算符有以下兩個,它們的優先級一樣: +: 前后兩個字符串首尾銜接構成一個新
22、的字符串。 -: 銜接前后兩個字符串,并將前字符串的尾部空格移到合并后的新字符串尾部。 例:字符串運算例如。a=hello b=everyone? a+b,a-bA+b-hell everyoneA-b-helleveryone對于表中字符型字段也可用“+,“-運算use student? 姓名-“是個男同窗? 姓名-學號-班級3日期時間表達式 日期時間表達式中可以運用的運算符也有+和-兩個。 日期時間表達式的格式有一定限制,不能恣意組合,例如,不能用運算符+將兩個銜接起來。合法的日期時間表達式格式(P57),其中的天數和秒數都是數值表達式。 222 關系表達式1關系表達式 關系表達式通常也稱
23、為簡單邏輯表達式,它由關系運算符將兩個運算對象銜接起來構成,即: 關系運算符表達式2 關系運算符的作用是比較兩個表達式的大小或前后。其運算結果是邏輯型數據。關系運算符及其含義如(P58)表24所示,它們的優先級一樣。 運算符和僅適用于字符型數據。 其他運算符適用于任何類型的數據,但前后兩個運算對象的數據類型要一致。 數值型和貨幣型數據比較 按數值的大小比較,包括負號。 日期或日期時間型數據比較 越早的日期或時間越小,越晚的日期或時間越大。 邏輯型數據比較 T大于F子串包含測試前字符型表達式$后字符型表達式為子串包含測試,假設前者是后者的一個子字符串,結果為邏輯真(T),否那么為邏輯假(F)。例
24、如:store 計算機 to s1store 微型計算機 to s2? s1$s2, s2$s1, (s1$s2)(s2$s1) t f t2設置字符的排序次序 當比較兩個字符串時,系統對兩個字符串的字符自左向右逐個進展比較,一旦發現兩個對應字符不同,就根據這兩個字符的排序序列決議兩個字符串的大小。對字符序列的排序設置有人時機話和命令兩種方式。 在人時機話方式下設置 在“工具菜單下選擇“選項,翻開“選項對話框。 單擊“數據選項卡。 從右上方的“排序序列下拉框中選擇 “Machine(機器)、“PinYin(拼音)或“Stroke(筆畫)。單擊“選項對話框上的“確定按鈕。命令方式設置: 設置字符
25、比較次序的命令是:SET COLLATE TO “排序次序名 排序次序名必需放在引號當中。次序名可以是“Machine、“PinYin或“Stroke。 Machine(機器)次序:指定的字符排序次序與xBase兼容,按照機內碼順序排序,在微機中,西文字符是按照ASCII碼值陳列的:空格在最前面,大寫ABCD字母序列在小寫abcd字母前,所以,大寫字母小于小寫字母。3字符串準確比較與EXACT設置 在用雙等號運算符比較兩個字符串時,只需當兩個字符串完全一樣(包括空格以及各字符的位置)時,運算結果才會是邏輯真.T.,否那么為邏輯假F。 在用單等號運算符比較兩個字符串時,運算結果與SET EXAC
26、T ON|OFF設置有關,該命令是設置準確匹配與否的開關。該命令可以在命令窗口或在程序中執行,也可以經過“數據選項卡設置。 系統默許OFF形狀。當處于OFF形狀時,只需右邊的字符串與左邊字符串的前面部分內容相匹配,即可得到邏輯真T的結果。也就是說,字符串的比較以右面的字符串為目的,右字符串終了即終止比較。當處于ON形狀時,比較到兩個字符串全部終了,先在較短字符串的尾部加上假設干個空格,使兩個字符串的長度相等,然后再進展比較。 223邏輯表達式1邏輯表達式 邏輯表達式由邏輯運算符將邏輯型數據銜接起來而構成,其運算結果依然是邏輯型數據。邏輯運算符有三個: NOT或!(邏輯非)、AND(邏輯與)、O
27、R(邏輯或)。 其優先級順序依次為NOT、AND、OR。 邏輯運算符的運算規那么如(P60)表25所示,其中和分別代表兩個邏輯型數據。 在許多命令和語句的格式中都有條件語法成分,這里的條件就是邏輯表達式或關系表達式。例如,查詢根本工資高于1800元 的講師和副教授,條件表達式該當寫成:根本工資1800 AND 職稱“講師 OR 根本工資=1800 AND 職稱“副教授 或者寫成:根本工資1800 AND (職稱講師OR職稱=“副教授) 23常用函數 函數是用程序來實現的一種數據運算或轉換。每一個函數都有特定的數據運算或轉換功能,它往往需求假設干個自變量,即運算對象,但只能有一個運算結果,稱為函
28、數值或前往值。 函數可以用函數名加一對圓括號加以調用,自變量放在圓括號里,如LEN(x)。 函數調用可以出如今表達式里,表達式將函數的前往值作為本人運算的對象。函數調用也可作為一條命令運用,但此時系統忽略函數的前往值。 231數值函數 數值函數是指函數值為數值的一類函數,它們的自變量和前往值往往都是數值型數據。 1絕對值和符號函數 格式:ABS(數值表達式) SIGN(數值表達式) 功能:ABS()前往指定的數值表達式的絕對值。 SIGN()前往指定數值表達式的符號。當表達式的運算結果為正、負和零時,函數值分別為1、-1和0。2求平方根函數 格式:SQRT(數值表達式) 功能:前往指定表達式的
29、平方根。自變量表達式的值不能為負。3圓周率函數 格式:PI() 功能:前往圓周率n(數值型)。該函數沒有自變量。4.求整數函數 格式:int() celling() floor() 功能:int()前往指定數值表達式的整數部分 celling()前往大于或等于指定數值表達式的最小整數 floor()前往小于或等于指定數值表達式的最大整數5. 四舍五入函數格式: round(,x=345.345? round(x,2),round(x,1),round(x,0),round(x,-1)顯示結果:345.35 345.3 345 3506. 求余數格式: mod(數值表達式1,數值表達式2)數值表
30、達式1為被除數,數值表達式2為除數.Mod(10,3) 1Mod(10,-3) -210339110-391被除數與除數同號被除數與除數異號,求得余數后再加上除數值.1(-3)-2+=-3 2.3.2 字符函數 1.求字符串長度 格式: len(字符表達式) 求“字符表達式中的一切字符個數包括空格. 一個漢字占2個字符. 2.大小寫轉換函數 格式:lower(字符表達式) Upper(字符表達式) 3.空格字符串生成函數 Space(數值表達式)4.刪除前后空格函數格式:trim(字符表達式)Ltrim(字符表達式)Alltrim(字符表達式)5.取子串函數格式: left(字符表達式,長度)
31、 right(字符表達式,長度) substr(字符表達式,起始位置 ,長度)6.計算子串出現次數函數格式:occurs(字符表達式1,字符表達式2)7.求子串位置函數格式: AT(字符表達式1,字符表達式2,數值表達式)功能:求 在 的起始位置數值。闡明: 中不包含 ,函數值為零;假設 的值含有兩個以上的 的值,那么函數給出第一個值的位置。大小寫字母在檢索中視為不同。Atc(字符表達式,字符表達式,數值表達式)8.子串交換函數格式:stuff(字符表達式1,起始位置,長度,字符表達式2)功能:從指定位置開場,用指定的字符串交換 中指定的字符串。闡明:中的字符個數與中的字符個數可以不等;假設為
32、0,那么插入;假設為空字符串,那么刪除中指定字符。舉例:例 store GOOD BYE! to s1 store morning to s2 ?stuff(s1,6,3,s2),stuff(s1,1,4,s2)9.字符交換函數格式: chrtran(字符表達式1,字符表達式2,字符表達式3)功能:當第一個字符串中的一個或多個一樣字符與第二個字符串中的某個字符相匹配時,就用第三個字符串中的對應字符與第二個字符串中的那個字符具有一樣位置交換這些字符。例 x1=chrtran(“ABCDAD,ACD,X12) y1=chrtran(“計算機ABC,計算機,電腦) z1=chrtran(“大家好,大
33、家,您)?x1,y1,z110.字符串匹配函數格式:like(字符表達式1,字符表達式2)功能:比較兩個字符串對應位置上的字符,假設一切對應字符都相匹配,函數前往邏輯真,否那么前往邏輯假。字符表達式1中可以包含通配符*和?例 store “abc to xStore “abcd to y ?like(“ab*,x),like(“ab*,y),like(x,y),like(“?b?,x),like(“Abc,x)2.3.3 日期和日期時間函數系統日期和時間格式: date() time() datetime() 07/29/02 19:10:10 07/29/02 19:10:102. 求年份、
34、月份和天數函數格式:year日期表達式|日期時間表達式 month (日期表達式|日期時間表達式) day 日期表達式|日期時間表達式 這三個函數的前往值為數值型。?year(date()-year(出生日期)2.3.4 數據類型轉換函數數值轉換成字符串 格式:str(數值表達式,長度,小數位數)如:stor -123.456 to n? str(n,9,2), str(n,6,2), str(n,3), str(n,6), str(n)顯結果: -123.46 -123.5 * -123 -1232. 字符串轉換成數值格式: val()如字符串第一個字符不是數字字符,那么前往0.00Val(
35、“123year567)-123.00Val(“year567)-0.003. 字符串轉換成日期或日期時間格式: ctod() 轉換為日期 ctot() 轉換為日期時間如:“2019/03/354. 日期或日期時間轉換成字符串格式: dtoc(| ,1 ) ttoc(,1 )如日期時間t為08/18/01 11:54:38 pm ?dtoc(t) “08/18/01?dtoc(t,1) “20190818?ttoc(t) “08/18/01 11:54:38 pm?ttoc(t,1) “201908182354385. 宏交換函數格式: &字符型變量.作用:交換出字符型變量的內容,既&
36、amp;的值是變量中的字符串.例如: a=257 m=“a+1 ?m ?&m2.3.5 測試函數值域測試函數格式:between(表達式t,表達式L,表達式h)功能: 表達式L=表達式t4,200,300)-20010. 記錄刪除測試格式:dele()功能:記錄指針所指的當前記錄能否有刪除標志“*,假設有為真,否那么為假.歷年考題1 有如下賦值語句a=“計算機,b=“微型,結果為微型機的表達式是A b+left(a,3) B b+right(a,1) C b+left(a,5,2) D b+right(a,2)2命令?LENSPACE3-SPACE2的結果是A1 B2 C3 D5 3想
37、要將日期型或日期時間型數據中的年份用4位數字顯示,該當運用設置命令ASET CENTURY ON BSET CENTURY OFFCSET CENTURY TO 4 DSET CENTURY OF 44在Visual FoxPro中,宏交換可以從變量中交換出A)字符串 B)數值C)命令 D)以上三種都能夠5在下面的Visual FoxPro表達式中,運算結果不為邏輯真的是A)EMPTY(SPACE(0) B)LIKE(xy*,xyz)C)AT(xy,abcxyz) D)ISNULL(.NUILL.) 24程序與程序文件2.4.1程序的概念 學習VFP的目的就是要運用它的命令來組織和處置數據、完
38、成一些詳細義務。 許多義務單靠一條命令是無法完成的,而是要執行一組命令來完成。假設采用在命令窗口逐條輸入命令的方式進展,不僅非常費事,而且容易出錯,這時應該采用程序的方式。 程序是可以完成一定義務的命令的有序集合。這組命令被存放在稱為程序文件或命令文件的文本文件中。當運轉程序時,系統會按照一定的次序自動執行包含在程序文件中的命令。 與在命令窗口逐條輸入命令相比,采用程序方式有如下益處: 可以利用編輯器,方便地輸入、修正和保管程序。 可以用多種方式、多次運轉程序。 可以在一個程序中調用另一個程序。 例 假定學號的前兩位為入學年份(如01代表2019年),第3、4位為專業代碼。編寫命令文件test
39、l.prg,分別統計一切學生和2019年入學,專業代碼為03的學生選修課程號為101課程的平均成果。 *分別統計一切學生和指定學生的平均成果 *分別統計一切學生和指定學生的平均成果 SET TALK OFF &決議 VFP 能否顯示命令執行形狀信息。 OPEN DATA xsxk 翻開數據庫xsxk USE 選課 IN 0 在最小號空閑任務區翻開選課表 SELECT AVG(成果) FROM 選課 WHERE 課程號=“101 ; INTo ARRAY ml SELECT AVG(成果) FROM 選課 WHERE 課程號=“101 ; AND LEFT(學號,2)=“01; AND
40、SUBS(學號,3,2)=“03 INTo ARRAY m2 CLEAR 去除VFP主窗口中顯示的全部內容 ?一切學生的平均分:,m1(1,1) ?指定學生的平均分:,m2(1,1) CLOSE DATABASE 封鎖當前數據庫 SET TALK ON RETURN在命令窗口輸入:DO test1下面是對此程序的幾點闡明: 命令注釋:(不會影響程序的功能) 以NOTE或*開頭的代碼行為注釋行。命令行后也可添加注釋,這種注釋以符號開頭。 SET TALK ON|OFF命令 許多數據處置命令(如AVERAGESUM、SQL等)在執行時都會前往一些有關執行形狀的信息,這些信息通常會顯示在VFP主窗口
41、、形狀欄或用戶自定義窗口里。SET TALK命令用以設置是(ON)、否(OFF)顯示這些信息。默許值為ON。 命令分行 程序中每條命令都以回車鍵結尾,一行只能寫一條命令。假設命令需求分行書寫,應在一行終了時鍵入續行符“;,再按回車鍵。 在VFP中,程序代碼除了可以保管在程序文件中,還可以出如今報表設計器和菜單設計器的過程代碼窗口中、表單設計器和類設計器的事件或方法代碼窗口中。 另外,還可以在命令窗口中像執行程序一樣一次執行多條命令。方法是: 在命令窗口中選擇需求執行的多條命令。 按Enter鍵,或單擊鼠標右鍵并在彈出的快捷菜單中選擇“運轉所選區域。242程序文件的建立與執行1程序文件的建立與修
42、正 程序文件的建立與修正普通是經過調用系統內置的文本編輯器來進展的。 要建立程序文件,可按以下步驟操作: 從“文件菜單中選擇“新建命令,然后在“新建對話框中選擇“程序單項選擇按鈕,并單擊“新建文件命令按鈕。 在文本編輯窗口中輸入程序內容。這里的編輯操作與普通文本文件的編輯操作沒有什么不同。當然,這里輸入的是程序內容,是一條條命令。與在命令窗口輸入命令不同,這里輸入的命令是不會被馬上執行的。 保管程序文件。從“文件菜單中選擇“保管命令或按Ctr+W鍵,然后在“另存為對話框中指定程序文件的存放位置和文件名,并單擊“保管命令按鈕。 程序文件的默許擴展名是prg要翻開、修正程序文件,可按以下方法操作:
43、 從“文件菜單中選擇“翻開命令。 在“文件類型列表框中選擇“程序。 選定要修正的文件,并單擊“確定按鈕。 編輯修正后,保管或按Ctrl十W鍵保管。 也可用命令方式建立和修正程序文件。命令格式為: MODIFY COMMAND 文件名 這里,文件名前可以指定保管文件的途徑。假設沒有給定擴展名,系統自動加上默許擴展名prg。 執行該命令時,系統首先檢索磁盤文件。假設指定文件存在,那么翻開修正;否那么,系統以為是要建立一個指定了名字的文件。2執行程序文件 建立好程序文件,就可以用多種方式、多次執行它。下面是兩種常用的方式。 菜一方式: 從“程序菜單中選擇“運轉命令,翻開“運轉對話框。 從文件列表框中
44、選擇要運轉的程序文件,并單擊“運轉命令按鈕。 命令方式: DO 文件名 (文件名可不帶擴展名 該命令既可以在命令窗口發出,也可以出如今某個程序文件中,這樣就使得一個程序在執行的過程中還可以調用執行另一個程序。 當程序文件被執行時,文件中包含的命令將被依次執行,直到一切的命令被執行終了,或者執行到以下命令: CANCAL:終止程序運轉,去除一切的私有變量,前往命令窗口。 DO:轉去執行另一個程序。 RETURN:終了當前程序的執行,前往到調用它的上級程序,假設無上級程序那么前往到命令窗口。 QUIT:退出VFP系統,前往到操作系統。 VFP程序文件經過編譯、連編,可以產生不同的目的代碼文件,這些
45、文件具有不同的擴展名。 當用DO執行程序文件時,假設沒有指定擴展名那么按.exe-.fxp-.prg順序找相應的文件名。 假設用DO命令執行查詢文件、菜單文件,那么文件名中必需求包括擴展名。243簡單的輸入輸出命令 一個程序普通都包含數據輸入、數據處置和數據輸出三個部分。數據的輸入和輸出代碼設計是編寫許多程序都要面臨的任務。1INPUT命令 命令格式: INPUT 字符表達式 TO 內存變量 該命令等待用戶從鍵盤輸入數據,用戶可以輸入恣意合法的表達式。當用戶以回車鍵終了輸入時,系統將表達式的值存入指定的內存變量,程序繼續運轉。功能注釋: 假設選用字符表達式,那么系統會首先顯示該表達式的值,作為
46、提示信息。 輸入的數據可以是常量、變量,也可以是更為普通的表達式。但不能不輸入任何內容直接按回車鍵。 輸入字符串時必需加定界符,輸入邏輯型常量時要用圓點定界(如.T.,.F.),輸入日期時間型常量時要用大括號 2019-03-01。 例 編寫命令文件test2.prg,查找指定日期以后出生的學生。 open data xsxk USE student CLEAR INPUT 請輸入日期 TO mrq SELECT 學號,姓名,出生日期 FROM student; WHERE 出生日期mrq; NOWAIT &結果顯示在查詢窗口里,并繼續往下執行 RETURN在命令窗口輸入命令:DO T
47、EST2 按回車會顯示“請輸入日期:等待用戶輸入日期 2ACCEPT命令命令格式: ACCEPT TO 該命令等待用戶從鍵盤輸入字符串。當用戶以回車鍵終了輸入時,系統將該字符串存入指定的內存變量,程序繼續運轉。 功能注釋: 假設選用,那么系統會首先顯示該表達式的值,作為提示信息。 該命令只能接納字符串。用戶在輸入字符串時不需求加定界符;否那么,系統會把定界符作為字符串本身的一部分。 假設不輸入任何內容而直接按回車鍵,系統會把空串賦給指定的內存變量。 3WAIT命令命令格式: WAIT字符表達式TO內存變量 WINDOWAT行,列 NOWAITCLEAR|NOCLEARTIMEOUT數值表達式
48、該命令顯示字符表達式的值作為提示信息,暫停程序的執行,直到用戶按恣意鍵或單擊鼠標時繼續程序的執行。 WAIT 輸入無效,請重新輸;入 WINDOW TIMEOUT 5功能注釋: 假設字符表達式值為空串,那么不顯示提示信息。假設無字符表達式,那么顯示默許的提示信息“按恣意鍵繼續。 內存變量用來保管用戶鍵入的字符,其類型為字符型。假設用戶按的是Enter鍵或單擊了鼠標,那么內存變量中保管的將是空串。 普通情況下,提示信息被顯示在VFP主窗口或當前用戶自定義窗口里。假設指定了WINDOW子句,那么會出現一個WAIT提示窗口,用以顯示提示信息。提示窗口普通定位于主窗口的右上角,也可用AT短語指定其在主
49、窗口中的位置。 假設選用NOWAIT短語,系統將不等待用戶按鍵,直接往下執行。 TIMEOUT子句用來設定等待時間(秒數)。一旦超時就不再等待用戶按鍵,自動往下執行。25程序的根本構造 程序構造是指程序中命令或語句執行的流程構造。程序的三種根本構造: 順序構造、選擇構造和循環構造。 順序構造是最簡單的程序構造,它按命令在程序中出現的先后次序依次執行。但是,絕大多數問題僅用順序構造是無法處理的,還要用到選擇構造和循環構造。251選擇構造支持選擇構造的語句包括條件語句和分支語句。 1條件語句 語句格式: IF條件語句序列1 ELSE語句序列2 ENDIF 該語句根據條件能否成立從兩組代碼中選擇一組
50、執行。 有ELSE子句時,兩組可供選擇的語句是語句序列1和語句序列2。假設條件成立,那么執行語句序列1;否那么,執行語句序列2。然后轉向ENDIF的下一條語句。 無ELSE子句時,可看作第二組代碼不包含任何命令。假設條件成立,那么執行語句序列l,然后轉向ENDIF的下一條語句;否那么直接轉向ENDIF的下一條語句去執行。 If和ENDIF必需成對出現,IF是本構造的入口,ENDIF是本構造的出口。 條件語句可以嵌套,但不能出現交叉。例 某地至北京的郵路里程為1043KM,經過郵政局向北京城區寄交“特快專遞郵件,應在24小時內到達,計費規范每克為0.05元,但超越100克后,超出每克為0.02元
51、。試編寫程序計算郵費。 w*0.05 (w100)方法1:根據郵件分量是小于等于100克還是大于100克,用不同的公式計算郵費。 INPUT 請輸入郵件分量: TO w IF W100 fW*005 ELSE f100*0.05十(w-100)* 0.02 ENDIF ?郵費為:,f方法2:先按第一個公式計算郵費,假設發現郵件分量大于100克,再按第二個公式計算郵費。 INPUT 請輸入郵件分量: TO w fW*005 IF W100 f100* 0.05十(w100)* 0.02 ENDIF ?郵費為:,f例 編寫命令文件test3.prg,請用戶輸入待查詢學生的姓名,顯示該學生根本情況。
52、 OPEN DATA 學生管理 USE student IN 1 SELECT student CLEAR ACCEPT 請輸入待查學生姓名:“ TO NAME LOCATE FOR 姓名NAME IF .NOT. EOF() ?姓名:“十姓名 ?性別:“十IIF(性別,男,女) ?出生日期:十DTOC(出生日期,1) ELSE ?查無此人! ENDIF CLOSE DATA RETURN例:編寫程序,實現如下功能: 程序運轉時首先等待用戶輸入一個分數,然后判別該分數的所對應級別,假設大于等于90,那么輸出優;假設大于等于80小于90,那么輸出良;假設大于等于60小于80,那么輸入出中等;假設
53、小于60,那么輸出差。2分支語句 分支語句實現一種擴展的選擇構造,它可以根據條件從多組代碼中選擇一組執行。 語句格式: DOCASE CASE條件1 語句序列1 CASE條件2 CASE條件n 語句序列n OTHERWISE 語句序列 ENDCASE 語句執行時,依次判別CASE后面的條件能否成立。當發現某個CASE后面的條件成立時,就執行該CASE和下一個CASE之間的命令序列,然后執行ENDCASE后面的命令。假設一切的條件都不成立,那么執行OTHERWISE與ENDCASE之間的命令序列,然后轉向ENDCASE后面的語句。 功能注釋: 不論有幾個CASE條件成立,只需最先成立的那個CAS
54、E條件的對應命令序列被執行。 假設一切CASE條件都不成立,且沒有OTHERWIS子句,那么直接跳出本構造。 DO CASE和ENDCASE必需成對出現,DO CASE是本構造的入口,ENDCASE是本構造的出口。252循環構造 循環構造也稱為反復構造,是指程序在執行的過程中,其中的某段代碼被反復執行假設干次。被反復執行的代碼段,通常稱之為循環體。VFP支持循環構造的語句包括: DO WHILEENDDO、 FORENDFOR SCAN ENDSCAN語句。 1DO WHILE-ENDDO語句語句格式: DO WHILE條件 LOOP 語句序列2 EXIT 語句序列3 ENDDO 執行該語句時
55、,先判別DOWHILE處的循環條件能否成立,假設條件為真,那么執行DO WHILE與ENDDO之間的命令序列(循環體)。當執行到ENDDO時,前往到DO WHILE,再次判別循環條件能否為真,以確定能否再次執行循環體。假設條件為假,那么終了該循環語句,執行ENDDO后面的語句。條件循環體Enddo后面語句真假條件循環體LoopExitEnddo后面語句假真功能注釋: 假設第一次判別條件時,條件即為假,那么循環體一次都不執行。 假設循環體包含LOOP命令,那么當遇到LOOP時,就終了循環體的本次執行,不再執行其后面的語句,而是轉回DOWHILE處重新判別條件。 假設循環體包含EXIT命令,那么當
56、遇到EXIT時,就終了該語句的執行,轉去執行ENDDO后面的語句。 通常LOOP或EXIT出如今循環體內嵌套的選擇語句中,根據條件來決議是LOOP回去,還是EXIT出去。例 計算S1+2+3+100。 解題的思緒歸納為兩點: 引進變量s和i。s用來保管累加的結果,初值為0;i既作為被累加的數據,也作為控制循環條件能否成立的變量,初值為1。 反復執行命令ss+i和I=I+1,直至i的值超越100。每一次執行,s的值添加i,i的添加l。 s=0 i=1 DO WHILE i=100 s=s+i i=i+1 ENDDO ?S,S例 逐條輸出1982年出生的學生記錄。 方法1:先用LOCATE命令將記
57、錄指針定位于滿足條件的第一條記錄上,然后進入循環語句。每次執行循環體,先顯示當前記錄的內容,然后用CONTINUE命令將記錄指針定位于滿足條件的下一條記錄上。 CLEAR OPEN DATA xsxk USE student IN 0 SELECT student LOCATE FOR YEAR(出生日期)=1977 DO WHILE .NOT. EOF() DISPLAY &顯示當前表當前記錄的內容 WAIT CONTINUE ENDDO CLOSE DATABASE use方法2:先運用索引,再用SEEK命令將記錄指針定位于滿足條件的第一條記錄上,然后進入循環語句。每次執行循環體,
58、先顯示當前記錄的內容,然后用SKIP命令將記錄指針挪動到下一條記錄上.留意,在索引表達式上一樣的記錄(1982年出生的記錄)一定是排在一同的。 CLEAR USE student INDEX ON YEAR(出生日期) TAG csnf SEEK l982 DO WHILE YEAR(出生日期)1977 DISPLAY WAIT SKIP ENDDO use2FORENDFOR語句 該語句通常用于實現循環次數知情況下的循環構造。 語句格式: FOR=TOSTEP步長 循環體 ENDFOR|NEXT 執行該語句時,首先將初值賦給循環變量,然后判別循環條件能否成立(與 的比較) 。假設循環條件成立
59、,那么執行循環體,然后循環變量添加一個步長值,并再次判別循環條件能否成立,以確定能否再次執行循環體。假設循環條件不成立,那么終了該循環語句,執行ENDFOR后面的語句。例 計算S1+2+3+100。 反復執行命令ss+I,并且i的值從1100。S=0。程序:S=0For i=1 to 100S=s+iEndfor?s=,s功能注釋: 步長的默許值為1。 初值、終值和步長都可以是數值表達式。但這些表達式僅在循環語句執行開場時被計算一次。在循環語句的執行過程中,初值、終值和步長是不會改動的。 可以在循環體內改動循環變量的值,但這會影響循環體的執行次數。 EXIT和LOOP命令同樣可以出如今該循環語
60、句的循環體內。當執行到LOOP命令時,終了循環體的本次執行,然后循環變量添加一個步長值,并再次判別循環條件能否成立。例 找出100999之間的一切“水仙花數。所謂“水仙花數是指一個三位數,其各位數字的立方和等于該數本身(如153=13+53+33)。 解此題的關鍵是要知道如何分別出一個三位數中的各位數字。這里給出兩種方法,其中i代表三位數,a、b和c分別代表該三位數在百位、十位和個位上的三個數字。方法1: aINT(I/100) 例如INT(153/100)等于l。 bINT(I/100*a)/10) 例如INT(153-100*a)/10)等于5。 cI-INT(I/10)*l0 例如153-INT(153/10)*l0等于3。下面程序采用的是第一種方法: CLEAR FOR i=1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 佛山市小升初數學試卷
- 董村小學二年級數學試卷
- 2025至2030城市建設規劃行業市場發展前景及供給需求與投資機會報告
- 2025至2030軌道交通安防行業市場深度研究及發展前景投資可行性分析報告
- 六安市霍邱縣新店鎮選聘村干部考試真題2024
- 2024年杭州拱墅區專職社區工作者招聘筆試真題
- 2025至2030財務軟件產業深度調研及發展趨勢與投資戰略報告
- 東山小學期中數學試卷
- 工貿單招數學試卷
- 福州初三卷子數學試卷
- 2025年中小學公開選拔校長筆試模擬試卷
- 2025屆廣東省佛山市南海中學英語八下期末考試模擬試題含答案
- 2025安全生產月活動總結模板十(19P)
- 2025吉林長春市軌道交通集團有限公司校園招聘693人筆試參考題庫附帶答案詳解析
- 小孩辦身份證的委托書范本
- XFD-系列單槽說明書-印稿
- UCLA肩關節評分系統
- 分支型室速的導管消融術ppt課件
- (完整word版)《關于同意申辦出入境證件的函》
- 廣東外運大宗散貨船舶代理業務發展研究
- 公路水泥混凝土路面養護技術規范
評論
0/150
提交評論