第一篇:VFP常用命令小結
VFP常用命令小結
表中不設合計字段的大體思路如下:(如有合計字段,當然更簡單,就用Replace All)Dimension Array Myarray(RECCOUNT())定義一個下標為記錄總數(shù)的數(shù)組 Go Top Do While!Eof()
Myarray(RECNO())=字段1+字段2+字段3…… Skip Enddo
1、CREATE 作用:建立一個新的表。
格式:CREATE [<文件>|?](注意,命令字符可取前面四個字符,后面可省略不寫,即CREA,下同;中括號表示其中的參數(shù)是可選的;|管道符號表示兩個參數(shù)只能選擇一個,不能同時選擇,下同。)說明:文件指建立以.dbf為擴展名的VFP數(shù)據(jù)庫文件,在命令后面加上一個問號表示系統(tǒng)會彈出 對話框,要求用戶輸入想要建立的表名。在命令中不加文件名或問號系統(tǒng)也會彈出對話框,要求用 戶輸入想要建立的表名。
2、MODIFY STRUCTURE 作用:顯示表文件結構,并允許修改此表的結構。格式:MODIFY STRUCTURE 說明:只有在用USE命令打開表文件以后,才能顯示或修改表文件的結構。
3、APPEND 作用:在當前表的尾部(無論表中有無記錄)追加記錄(在當前表指當前正使用的表)。格式:APPEND [BLANK] 說明:在APPEND命令后面加上BLANK參數(shù)表示在當前表的尾部添加一條空白記錄。無BLANK參數(shù)時,表示在當前表的尾部添加一條記錄并要求用戶輸入相應的字段內容。
4、INSERT 作用:在表文件中間插入一個新記錄。格式:INSERT [BEFORE] [BLANK] 說明:INSERT 在當前記錄后插入一記錄; INSERT BEFORE 在當前記錄前插入一記錄;
INSERT BEFORE BLANK 在當前記錄前插入一空記錄。
5、BROWSE 作用:主要用于打開瀏覽窗口,查閱表文件并同時進行修改。格式:BROWSE
6、USE 作用:打開和關閉表文件。格式:USE [<文件名>] USE 說明:前一個命令用來打開<文件名>指定的表文件,該表如有備注型字段,則同時打開相應的 備注文件(.fpt文件);后一個命令關閉當前打開的表文件。
7、LIST和DISPLAY 作用:顯示表(.dbf)的內容、結構或狀態(tài)。
格式:LIST|DISPLAY [OFF] [<范圍>] [FIELDS] <表達式表> [WHILE <條件>] [FOR <條件>] [TO PRINT|TO FILE <文件>] LIST|DISPLAY STRUCTURE TO PRINT|TO FILE <文件>] LIST|DISPLAY STATUS [TO PRINT|TO FILE <文件>] 說明:命令帶OFF參數(shù)表示不顯示記錄號,范圍指定對哪些記錄進行操作,范圍包括:RECORD n 第幾號記錄、NEXT n 當前記錄開始的幾個記錄、REST 自當前記錄開始至文件末尾的所有記錄、ALL 所有的記錄。不選范圍則隱含范圍為ALL;FIELDS后跟字段名,字段名與字段名之間用逗號分 隔。WHILE后跟條件,F(xiàn)OR后面也跟條件,區(qū)別是,WHILE后的條件如果滿足,便停止查找;FOR后的 條件查找所有滿足條件的記錄。TO PRINT和TO FILE <文件>分別表示將顯示結果在打印機上打印出 來和將顯示結果輸出到文件。DISPLAY命令在顯示記錄滿屏后,要求用戶按任意鍵繼續(xù)顯示,并且在 該命令中,如果省略范圍僅顯示當前記錄。格式中,下面兩個命令分別為顯示表結構(STRUCTURE)和工作狀態(tài)(STATUS)。
8、記錄的定位
作用:用記錄指針(POINTER)定位記錄。格式:GO[TO] RECORD n|TOP|BOTTOM n SKIP [+|-] 說明:第一個命令又叫絕對定位,其中,RECORD n定位到n號記錄,TOP定位到第1個記錄,BOTTOM定位到最后一個記錄。第二個命令定位到第n個記錄,n是一個數(shù)值。第三個命令又叫相對定 位,它以當前記錄為基準前移(-)或后移(+)n個記錄,不選任選項,則默認記錄指針后移一個記錄。
9、CHANGE和EDIT 作用:顯示要編輯或修改的字段。
格式:CHANGE|EDIT [<范圍>] [FIELDS <字段名表>] [WHILE <條件>] [FOR <條件>]
10、BROWSE 作用:打開一個“瀏覽”窗口,供用戶瀏覽或修改記錄。格式:BROWSE [FIELDS <字段名表>]
11、REPLACE 作用:用表達式的值代替命令中與之相對應的字段的內容。
格式:REPLACE [<范圍>] <字段1> WITH <表達式1>[,<字段2> WITH <表達式2>] [FOR <條件> ] [WHILE<條件>]
12、DELETE、PACK、ZAP和RECALL 作用:分別是給要刪除的記錄作刪除標記、徹底刪除、刪除所有記錄和取消被選中的表記錄的 刪除標志。
格式:DELETE [<范圍>] [WHILE<條件>] [FOR <條件>](特例:DELETE FILE FILENAME.DBF,該命令刪除指定的表文件)PACK ZAP RECALL [<范圍>] [FOR <條件>] [WHILE<條件>]
13、SORT和INDEX 作用:分別是建立一個其記錄以新的物理順序排列的新表文件和對當前表根據(jù)關鍵字表達式的值 從小到大排列,并存入TO后指定的索引文件名的文件或復合索引文件的一個標識中。格式:SORT TO <文件名> ON <字段名1> [/A] [/C] [/D][,<字段名2> [/A] [/C] [/D]]...[ASCENDING|DESCENDING] [<范圍>] [FOR <條件>] [WHILE<條件>] [FIELDS<字段表>] INDEX ON <關鍵字表達式> TO <文件名> INDEX ON <關鍵字表達式> TAG <標識名> [OF <文件名>] [FOR <條件>] 說明:第1個命令中,/A按字段名升序排序,/D按字段名降序排序,/C忽略大小寫,針對字符型 關鍵字而言,ASCENDING和DESCENDING分別表示升序和降序。第1個命令建立.dbf表文件,第2個命令 建立.idx單一索引文件,第3個命令建立.cdx復合索引文件(Compound Index)。
14、USE <表文件名> INDEX <索引文件名表>、SET INDEX TO和SET ORDER TO 作用:分別是打開表文件的同時打開索引文件、打開索引文件和改變主索引。格式:USE <表文件名> INDEX <索引文件名表> SET INDEX TO [<索引文件名表>] SET ORDER TO [<索引文件名>](特例:重新索引命令:REINDEX)
15、FIND、SEEK和LOCATE及CONTINUE 作用:前兩個命令FIND和SEEK是在一個已經建立了索引文件的表中,定位到關鍵字中的內容與命 令行中字符串相同的第一個記錄。后一個命令在用USE打開表文件以后,直接查詢表中字段內容。格式:FIND <“字符串”>|<字符串> SEEK <表達式> LOCATE [<范圍>] [FOR <條件>] [WHILE<條件>] CONTINUE 說明:FIND命令與SEEK命令的區(qū)別是前者后跟字符串,而后者后跟表達式。在用LOCATE命令找到 一個匹配記錄后,可用CONTINUE命令搜索表的剩余部分來尋找其他匹配的記錄。
16、COUNT 作用:統(tǒng)計當前表文件中符合條件的記錄數(shù)。
格式:COUNT [<范圍>] [FOR <條件>] [WHILE<條件>] [TO <內存變量名>] 說明:內存變量名可用除參數(shù)外的任意字符。
17、SUM 作用:對當前表中選中記錄的全部或指定的數(shù)值字段或由指定字段組成的數(shù)值表達式累加求和。格式:SUM [<范圍>] [數(shù)值<表達式>] [TO <內存變量名表>] [FOR <條件>] [WHILE<條件>]
18、AVERAGE 作用:對當前表中選中記錄的全部或部分數(shù)值型字段及其組成的表達式求平均值并顯示。格式:AVERAGE [<范圍>] [數(shù)值<表達式>] [TO <內存變量名表>] [FOR <條件>] [WHILE<條件>]
第二篇:VFP命令、函數(shù)及程序語句解讀
VFP命令、函數(shù)及程序語句大全(1 學過VFP(Microsoft Visual FoxPro的朋友都知道它是微軟公司開發(fā)的數(shù)據(jù)庫管理系統(tǒng)。它
經歷了從dBASE、FoxBASE、FoxPro直到VFP的發(fā)展過程。本文便以VFP 6.0為例介紹它的命令、函數(shù)
及程序語句,為學習VFP的朋友提供必要的學習參考,也為已經精通VFP的朋友提供復習的好機會。
一、主要命令:
1、CREATE 作用:建立一個新的表。
格式:CREATE [<文件>|?](注意,命令字符可取前面四個字符,后面可省略不寫,即CREA,下
同;中括號表示其中的參數(shù)是可選的;|管道符號表示兩個參數(shù)只能選擇一個,不能同時選擇,下
同。
說明:文件指建立以.dbf為擴展名的VFP數(shù)據(jù)庫文件,在命令后面加上一個問號表示系統(tǒng)會彈出
對話框,要求用戶輸入想要建立的表名。在命令中不加文件名或問號系統(tǒng)也會彈出對話框,要求用
戶輸入想要建立的表名。
2、MODIFY STRUCTURE
作用:顯示表文件結構,并允許修改此表的結構。格式:MODIFY STRUCTURE 說明:只有在用USE命令打開表文件以后,才能顯示或修改表文件的結構。
3、APPEND 作用:在當前表的尾部(無論表中有無記錄追加記錄(在當前表指當前正使用的表。
格式:APPEND [BLANK] 說明:在APPEND命令后面加上BLANK參數(shù)表示在當前表的尾部添加一條空白記錄。無BLANK 參數(shù)
時,表示在當前表的尾部添加一條記錄并要求用戶輸入相應的字段內容。
4、INSERT 作用:在表文件中間插入一個新記錄。格式:INSERT [BEFORE] [BLANK] 說明:INSERT 在當前記錄后插入一記錄;INSERT BEFORE 在當前記錄前插入一記錄;INSERT BEFORE BLANK 在當前記錄前插入一空記錄。INSERT-SQL命令追加記錄
INSERT INTO 表名[(字段1[,字段2…]];VALUES(表達式1[,表達式2…]
例:INSERT INTO XS(XH,XM,XB,XIMING VALUES(“950106”,“高山”,“男”,“”
5、UPDATE 作用:修改數(shù)據(jù)
update <表名> set <字段1=表達式1>,<字段2=表達式2...> where <條件> 例: update <表名> set <字段1,字段2...>=<表達式1,表達式2...> where <條件>
6、BROWSE 作用:主要用于打開瀏覽窗口,查閱表文件并同時進行修改。格式:BROWSE 作用:打開一個“瀏覽”窗口,供用戶瀏覽或修改記錄。格式:BROWSE [FIELDS <字段名表>]
7、USE 作用:打開和關閉表文件。格式:USE [<文件名>] USE 說明:前一個命令用來打開<文件名>指定的表文件,該表如有備注型字段,則同時打開相應的
備注文件(.fpt文件;后一個命令關閉當前打開的表文件。
8、LIST和DISPLAY
作用:顯示表(.dbf的內容、結構或狀態(tài)。
格式:LIST|DISPLAY [OFF] [<范圍>] [FIELDS] <表達式表> [WHILE <條件>] [FOR <條件>] [TO PRINT|TO FILE <文件>] LIST|DISPLAY STRUCTURE TO PRINT|TO FILE <文件> LIST|DISPLAY STATUS [TO PRINT|TO FILE <文件>] 說明:命令帶OFF參數(shù)表示不顯示記錄號,范圍指定對哪些記錄進行操作,范圍包括:RECORD n 第幾號記錄、NEXT n 當前記錄開始的幾個記錄、REST 自當前記錄開始至文件末尾的所有記錄、ALL 所有的記錄。不選范圍則隱含范圍為ALL;FIELDS后跟字段名,字段名與字段名之間用逗號分
隔。WHILE后跟條件,FOR后面也跟條件,區(qū)別是,WHILE后的條件如果不滿足,便停止查找;FOR后的條件查找所有滿足條件的記錄。TO PRINT和TO FILE <文件>分別表示將顯示結果在打印機上打印出
來和將顯示結果輸出到文件。
格式中,下面兩個命令分別為顯示表結構(STRUCTURE和工作狀態(tài)(STATUS。注:LIST命令一次連續(xù)顯示完所有記錄內容。DISPLAY命令在顯示記錄滿屏后,要求用戶按
任意鍵繼續(xù)顯示。如果LIST與DISPLAY都無任何選擇項時,LIST顯示文件的全部記錄, DISPLAY僅顯示當前記錄。
9、記錄的定位
作用:用記錄指針(POINTER定位記錄。格式: 1GO[TO] RECORD n|TOP|BOTTOM 命令定位 GO [RECORD] N GO BOTTOM GO TOP 2n 3SKIP [+|-] n 說明:第一個命令又叫絕對定位,其中,RECORD n定位到n號記錄,TOP定位到第1個記錄, BOTTOM定位到最后一個記錄。第二個命令定位到第n個記錄,n是一個數(shù)值。第三個命令又叫相對定
位,它以當前記錄為基準前移(-或后移(+n個記錄,不選任選項,則默認記錄指針后移一個記
錄。
LOCATE [<范圍>] FOR <表達式> 范圍: ALL NEXT N RECORD N
REST
10、CHANGE和EDIT 作用:顯示要編輯或修改的字段。
格式:CHANGE|EDIT [<范圍>] [FIELDS <字段名表>] [WHILE <條件>] [FOR <條件>]
11、REPLACE 作用:用表達式的值代替命令中與之相對應的字段的內容。
格式:REPLACE [<范圍>] <字段1> WITH <表達式1>[,<字段2> WITH <表達式2>] [FOR <條件> ] [WHILE<條件>] 例:USE B2-1 REPLACE ALL 工資 WITH 工資+200 FOR 工資<1000 BROW
12、DELETE、PACK、ZAP和RECALL 作用:分別是給要刪除的記錄作刪除標記、徹底刪除、刪除所有記錄和取消被選中的表記錄的
刪除標志。
格式:DELETE [<范圍>] [WHILE<條件>] [FOR <條件>](特例:DELETE FILE FILENAME.DBF,該命令刪除指定的表文件
PACK
ZAP RECALL [<范圍>] [FOR <條件>] [WHILE<條件>]
13、SORT和INDEX 1SORT 作用:是建立一個其記錄以新的物理順序排列的新表文件,原文件不變.格式:SORT TO <文件名> ON <字段名1> [/A] [/C] [/D][,<字段名2> [/A] [/C] [/D>...[ASCENDING|DESCENDING] [<范圍>] [FOR <條件>] [WHILE<條件>] [FIELDS<字段表>] 2INDEX 作用: 對當前表根據(jù)關鍵字表達式的值從小到大排列,并存入TO后指定的索引文件名的文件或復合索引文件的一個標識中。
格式: INDEX ON <關鍵字表達式> TO <文件名> INDEX ON <關鍵字表達式> TAG <標識名> [OF <文件名>] [FOR <條件>] 說明:第1個命令中,/A按字段名升序排序,/D按字段名降序排序,/C忽略大小寫,針對字符型
關鍵字而言,ASCENDING和DESCENDING分別表示升序和降序。第1個命令建立.dbf表文件,第2個命令建立.idx單一索引文件,第3個命令建立.cdx復合索引文件(Compound Index。
刪除索引
DELETE TAG ALL [OF 復合索引文件名]
DELETE TAG 索引標識1 [OF 復合索引文件名1][,索引標識2 [OF 復合索引文件名2>…
14、USE <表文件名> INDEX <索引文件名表>、SET INDEX TO和SET ORDER TO 作用:分別是打開表文件的同時打開索引文件、打開索引文件和改變主索引。并確定第一個索引文件為主控索引文件.(當前起作用的索引文件稱為主控索引文件, 當前起作用的索引標識稱為主控索引
格式:USE <表文件名> INDEX <索引文件名表> SET INDEX TO [<索引文件名表>] 作用:打開當前表的一個或多個索引文件并確定第一個索引文件為主控索引文件,該命令用于單索引文件.格式:SET INDEX TO [<索引文件表>] [ADDITIVE] 說明:(1[<索引文件表>]中第一個索引文件為主控索引文件.(2若缺省ADDITIVE選項,則在用本命令打開索引文件時,除結構復合索引文件以外的索引文件均被關閉
SET ORDER TO [<數(shù)值表達式>]|[<單索引文件名>]|[TAG] <索引標識> [ASCENDING|DESCENDING>(特例:重新索引命令:REINDEX 作用:對于打開表時自動打開的復合索引文件確定主索引,也能確定主索引文件.(1 數(shù)值表達式表示已打開的索引的序號.系統(tǒng)先為單索引文件編號,故結構復合索引文件的序號比單索引文件大.(2 SET ORDER TO 或 SET ORDER TO 0命令取消主索引和主索引文件,表中記錄將按物理記錄輸出.15、CLOSE INDEX 或 SET INDEX TO 單獨關閉索引文件,并不關閉與之相關的表文件
16、FIND、SEEK和LOCATE及CONTINUE 作用:前兩個命令FIND和SEEK是在一個已經建立了索引文件的表中,定位到關鍵字中的內容與命
令行中字符串相同的第一個記錄。后一個命令在用USE打開表文件以后,直接查詢表中字段內容。
格式:FIND <“字符串”>|<字符串> SEEK <表達式>(表達式的數(shù)據(jù)類型可為字符型、數(shù)字型、日期型和邏輯型。LOCATE [<范圍>] [FOR <條件>] [WHILE<條件>] CONTINUE 說明:FIND命令與SEEK命令的區(qū)別是前者后跟字符串,而后者后跟表達式。在用LOCATE命令找到
一個匹配記錄后,可用CONTINUE命令搜索表的剩余部分來尋找其他匹配的記錄。
例:SET ORDER TO NL ?確定索引關鍵字為NL(年齡 FIND 28 ?找年齡字段為“28“的記錄 DISPLAY ?顯示當前記錄
SET ORDER TO NL ?確定索引關鍵字為NL(年齡 SEEK “28”?找年齡字段為“28“的記錄
DISPLAY 17.從磁盤上刪除任意文件:(1ERASE filename|?(2DELETE FILE [filename|?]
18、COUNT 作用:統(tǒng)計當前表文件中符合條件的記錄數(shù)。
格式:COUNT [<范圍>] [FOR <條件>] [WHILE<條件>] [TO <內存變量名>] 說明:內存變量名可用除參數(shù)外的任意字符。
19、SUM 作用:對當前表中選中記錄的全部或指定的數(shù)值字段或由指定字段組成的數(shù)值表達式累加求和。
格式:SUM [<范圍>] [數(shù)值<表達式>] [TO <內存變量名表>] [FOR <條件>] [WHILE<條件>] 20、AVERAGE 作用:對當前表中選中記錄的全部或部分數(shù)值型字段及其組成的表達式求平均值并顯示。
格式:AVERAGE [<范圍>] [數(shù)值<表達式>] [TO <內存變量名表>] [FOR <條件>] [WHILE<條件>]
21、TOTAL 作用:分類匯總命令,按<表達式>做過索引或排序的表文件的數(shù)字型字段進行分類匯總。它把與<表達式>值相同的所有記錄中的數(shù)字字段的值分別進行求和,并各
自作為一條記錄存放在由文件指定的文件中去。在新生成的記錄中,還將包括與<表達式>值相同的所有記錄中的首項記錄的其他字段內容。
格式:TOTAL TO <文件名> ON <表達式>[FIELDS <數(shù)值型字段名表>][<范圍>][FOR <邏輯表達式1>][WHILE <邏輯表達式2>] 例:USE B2-1 INDEX ON 職稱 TO ZC TATOL ON 職稱 TO B2-1T FILEDS 工資 22.APPEND FROM 作用:從其他文件向表文件添加數(shù)據(jù)。數(shù)據(jù)來源文件既可以是表文件,也可是文本文件或其他符合規(guī)定的文件。
格式:APPEND FROM <文件名>|?[FIELDS <字段名表>][FOR <邏輯表達式>] FIELDS <字段名表>和FOR <邏輯表達式>,用于源文件為表文件時,指定追加記錄的字段和條件。在字段名表和邏輯表達式中的字段名,必須是在來源和目的兩個文件中公有的,共注意寬度和類型匹配。實際應用中,數(shù)據(jù)來源文件常為表文件(.DBF和ASCII碼文本文件(.TXT 對于文本文件又有標準格式(SDF和通用格式(DELIMITED之分.例: USE B2-1 APPE FROM S3-1.TXT SDF BROWSE 23.COPY(選擇表的部分內容生成一個新表
作用:把打開的表文件結構及數(shù)據(jù)復制成由<文件名>所指定的并符合規(guī)定要求的文件。如果默認全部選擇項和文件名的擴展名,則結構及全部數(shù)據(jù)都被復制,且其文件擴展名由系統(tǒng)規(guī)定為“.DBF”。
格式:COPY TO<文件名> [FIELDS <字段名表>][<范圍>][FOR <邏輯表達式1>][WHILE <邏輯表達式2>] 格式中的或用來為新表建立一個與原表相同的結構索引.例1: COPY TO B3-2 COPY TO S3-2.TXT SDF 例2: USE RS COPY TO RS3 FIELDS 姓名,基本工資,獎金 USE RS3 LIST 24.COPY FILE復制數(shù)據(jù)整表:(可用于復制任何類型文件 COPY FILE 原文件名 TO 目標文件名
注:復制表時,還應當復制和它相配的備注文件(.FPT,如有備注字段和結構復合索引文件。
當前表應關閉。(如果已打開表:COPY TO 新文件名 例:將RS.DBF復制為RS1.DBF COPY FILE RS.DBF TO RS1.DBF 或USE RS
COPY TO RS1 USE RS1 LIST 25.COPY STRUCTURE(只復制結構不復制數(shù)據(jù)
作用:表文件結構復制,生成一個指定文件名和包括指定字段的表文件結構;如有CDX或PRODUCTION選擇項還將為新表建立一個與源表相同的結構索引.格式: COPY STRUCTURE TO<文件名> [FIELDS <字段名表>] 例: COPY STRUCTURE TO B3-3 FIELDS 編號,姓名,何時工作,職稱 26.copy to建立結構擴展文件
作用:把已打開的表文件的結構作為數(shù)據(jù)記錄復制到由<文件名>指定的庫文件中去.格式: COPY TO<文件名> STRUCTURE EXTENDED 例: USE B3-3 COPY TO B3-4 STRUCTURE EXTENDED USE B3-4 BROW 該命令可以用于測試表文件結構,也可以用于順序方式建立庫文件結構.新庫文件的結構是一個由系統(tǒng)規(guī)定的標準結構,它由4個字段構成: FIELD_NAME 字段名
FIELD_TYPE 字段類型 FIELD_LEN 字段寬度 FIELD_DEC 小數(shù)位數(shù) 27.常用命令: 庫表
建立數(shù)據(jù)庫: CREATE DATABASE 庫文件名.DBC 建立表: CREATE 表文件名.DBF CREATE TABLE/DBF 表名(各個字段屬性 打開數(shù)據(jù): OPEN DATABASE 庫文件名 打開表: USE 表文件名
使用非前庫的表:USE 庫名!表名 打開索引表:USE 表名 INDEX 索引名 顯示庫信息:DISP DATABASE [TO PRINTER] 顯示記錄:LIST(快速查看 BROWSE(分屏瀏覽可修改 DISP(顯示當前記錄
關閉數(shù)據(jù)庫:CLOSE ALL(關閉所有庫、表、索引 關閉表: USE
CLOSE DATABASES(關閉當前庫、表 CLOSE TABLES(關閉當前表,不關庫 CLOSE INDEXES(關閉當前索引
修改庫:MODI DATA 庫名 [NOWAIT] [NOEDIT] 修改表結構:MODI STRU ALTER TABLE 表名 ADD 字段名 ALTER TABLE 表名 ALTER 字段名 ALTER TABLE 表名 DROP 字段名 添加表:ADD TABLE 表名追加記錄: INSERT INTO 表名(字段名列表 VALUES(對應數(shù)值 APPEND APPEND FROM 源文件 移去表:REMOVE TABLE 表名
刪除記錄:DELETE ALL FOR [條件](邏輯刪除 PACK(物理刪除 ZAP(全部徹底刪除
刪除庫:DELETE DATABASE 庫名(先關閉庫 刪除表:DELETE FILE 表名(先關閉表 VFP命令、函數(shù)及程序語句大全(2
二、常用函數(shù)
1、數(shù)學函數(shù) 函數(shù)用途
ABS(<數(shù)值表達式>絕對值,|x| CEILING(<數(shù)值表達式> >=自變量的最小整數(shù) EXP(<數(shù)值表達式>對基E的冪,e=2.71828 FLOOR(<數(shù)值表達式> <=自變量的最大整數(shù) INT(<數(shù)值表達式>取整(舍尾自變量
LOG(<數(shù)值表達式>自變量的自然對數(shù),ln x LOG10(<數(shù)值表達式>自變量的普通對數(shù),lg x MAX(<表達式1>,<表達式2>兩個值的最大值 MIN(<表達式1>,<表達式2>兩個值的最小值 MOD(<數(shù)值表達式1>,<數(shù)值表達式2>求余數(shù) RAND([<數(shù)值表達式1>]返回偽隨機數(shù)
ROUND(<數(shù)值表達式1>,<數(shù)值表達式2>四舍五入第一個自變量 SIGN(<數(shù)值表達式>自變量的符號 SQRT(<數(shù)值表達式>平方根(正根
2、字符串操作函數(shù) 函數(shù)用途
&<內存變量> 用于代替內存變量內容
LEN(<字符串表達式>返回字符串表達式的字符個數(shù) SPACE(<數(shù)值表達式>生成空格
SUBSTR(<字符串表達式>,<數(shù)值表達式n>[,<數(shù)值表達式L>]求子字符串,從指定的字符串表達式第n個開始,總長為L的字符串
LOWER(<字符串表達式>將字符串字母轉換成小寫字母 UPPER(<字符串表達式>將字符串字母轉換成大寫字母 TRIM(<字符串表達式>刪除字符串尾空格
ASC(<字符串表達式>返回字符串表達式最左邊的第一個字符的ASCII碼 CHR(<數(shù)值表達式>將數(shù)值表達式轉換成字符
AT(<字符串表達式1>,<字符串表達式2>[,<數(shù)值表達式n>] 確定字符串表達式1在字符串表達式2中的位置,n為字符串表達式第幾次出現(xiàn) STR(<數(shù)值表達式>[,<數(shù)值表達式L>][,<數(shù)值表達式n>將數(shù)值轉換為字符串,L為數(shù)值表達式總長,n為小數(shù)位數(shù)
VAL(<字符串表達式>將數(shù)字字符串轉換為數(shù)字 TYPE(<表達式>檢測表達式值的數(shù)據(jù)類型 LTRIM(<字符串表達式>刪除字符串左部空格 RTRIM(<字符串表達式>刪除字符串右部空格
LEFT(<字符串表達式>,<數(shù)值表達式n>取字符串左邊部分字符,n為返回的字符個數(shù)
RIGHT(<字符串表達式>,<數(shù)值表達式n>取字符串右邊部分字符,n從右邊截取字符個數(shù)
3、表(.dbf操作函數(shù)
函數(shù)用途
BOF([<工作區(qū)號或別名>]查表文件開始函數(shù) EOF([<工作區(qū)號或別名>]表文件結尾測試函數(shù)
RECNO([<工作區(qū)號或別名>]測試當前或指定工作區(qū)表的當前記錄號 DELETED([<工作區(qū)號或別名>]記錄刪除測試函數(shù) FILE(<“字符串”>測試文件是否存在函數(shù) DBF([<工作區(qū)號或別名>]檢測表的文件名函數(shù)
4、日期、時間函數(shù) 函數(shù)用途
DATE(查系統(tǒng)當前日期函數(shù)
TIME([<數(shù)值表達式>]查系統(tǒng)當前時間函數(shù)
YEAR(<日期型表達式>|<日期時間型表達式>由日期查年函數(shù) MONTH(<日期型表達式>|<日期時間型表達式>從日期查月份函數(shù) CMONTH(<日期型表達式>|<日期時間型表達式>由日期查月份名函數(shù) DAY(<日期型表達式>|<日期時間型表達式>從日期查當月的日函數(shù)
DOW(<日期型表達式>|<日期時間型表達式>[,<數(shù)值表達式>]由日期查星期函數(shù)
CDOW(<日期型表達式>|<日期時間型表達式>從日期查星期名函數(shù) DTOC(<日期型表達式>|<日期時間型表達式>日期轉換為字符函數(shù)
CTOD(<字符串表達式>字符串轉換為日期函數(shù) CTOT(<字符串表達式>返回日期時間值函數(shù) TTOC(<日期時間型表達式>返回字符值
5、顯示、打印位置函數(shù) 函數(shù)用途
ROW(判斷光標行位置函數(shù) COL(判斷光標列位置函數(shù)
INKEY([<數(shù)值表達式>]檢測用戶所擊鍵對應的ASCII碼函數(shù),數(shù)值表達式以秒為單位等待擊鍵的時間
6、其他函數(shù) 函數(shù)用途
DISKSPACE(返回默認磁盤驅動器中可用字節(jié)數(shù)函數(shù) OS(檢測操作系統(tǒng)名稱的函數(shù) VERSION(返回VFP版本號的函數(shù) VFP命令、函數(shù)及程序語句大全(3
三、主要程序語句
1、條件判斷語句 格式:(1IF <條件> <命令語句組>
ENDIF 說明:如果條件為真,則執(zhí)行命令語句組中的各語句,否則跳過這些命令語句不執(zhí)行, 而執(zhí)行ENDIF后的語句。(2IF <條件> <命令語句組1> ELSE <命令語句組2> ENDIF 說明:如果條件為真,執(zhí)行命令語句組1,否則執(zhí)行命令語句組2。(3IF <條件1> IF <條件2> <命令語句組1> ELSE <命令語句組2> ENDIF...ELSE <命令語句組N>
ENDIF 說明:進行多重條件的嵌套選擇。(4DO CASE CASE <條件1> <命令語句組1> CASE <條件2> <命令語句組2> CASE <條件3> <命令語句組3>......CASE <條件N> <命令語句組N> [OTHERWISE] [<命令語句組N+1>] ENDCASE 說明:依次判斷條件,轉入條件為真的命令語句組中執(zhí)行。當所有條件都不成立時,若有
OTHERWISE項,則執(zhí)行命令語句組N+1,否則執(zhí)行ENDCASE后面的語句。
2、循環(huán)語句
格式:(1DO WHILE <條件> <命令語句組> [LOOP] <命令語句組> [EXIT] <命令語句組> ENDDO 說明:判斷條件是否為真,如為真就重復執(zhí)行循環(huán)體中的命令語句組,直到條 件為假,結束循環(huán)。(2)SCAN <命令語句組> ENDSCAN 說明:在一個表中建立一個執(zhí)行命令語句組的循環(huán),并執(zhí)行對每一條記錄的操 作,直到表文件 記錄完為止。
第三篇:VFP對口高考命令-3至5
DO <查詢文件名> 功能:運行指定的查詢
例:do d:chax1.qpr 運行名為chax1的查詢文件
MODIFY QUERY <查詢文件名> 功能:打開指定的查詢文件 例:modify query d:chax1.qpr 打開名為chax1的查詢文件
注:不論用什么方法打開查詢文件,VFP都會自動打開查詢設計器
SELECT <字段列表> FROM [數(shù)據(jù)庫名!] <表名> [,[數(shù)據(jù)庫名!] <表名>,?] [WHERE 條件] [GROUP BY 分組項列表] [ORDER BY 排序項[DESC]?] [INTO 目標|TO FILE 文件名|TO PRINTER] 功能:從一個或多個表中查詢數(shù)據(jù)
例:select b1.語文,b1.數(shù)學,b1.英語 from sjk1!b1 where b1.語文>70 group by b1.語文 order by b1.學號 desc 查詢sjk1數(shù)據(jù)庫中的b1表的語文,數(shù)學,英語字段中滿足語文大于70的數(shù)據(jù),按照b1表的語文字段分組,按照b1表的學號排序,且設置排序方式為倒序。
[INTO 目標]的“目標”可以使用如下3種:“ARRAY 數(shù)組名”、“CURSOR 表名”、“DBF 表名”。
[ORDER BY[desc]]中若缺省“desc”則按升序排序。否則則按降序排序。[TO PRINTER]:將查詢結果送往打印機輸出
[TO FILE 文件名]:將查詢結果輸出到指定的文本文件中
CREATE VIEW <視圖名> AS <查詢語句> 功能:為當前數(shù)據(jù)庫創(chuàng)建視圖 例:open database d:sjk1 打開數(shù)據(jù)庫sjk1
create view st1 as select * from sjk1!b1 為當前數(shù)據(jù)庫創(chuàng)建一個視圖st1其功能為“查詢數(shù)據(jù)庫sjk1的表b1中所有字段數(shù)據(jù)”
注:使用上述命令創(chuàng)建的視圖還需要在視圖設計器中指定可更新字段,才能實現(xiàn)更新數(shù)據(jù)的功能
DROP VIEW <視圖名> 功能:刪除當前數(shù)據(jù)庫中指定的視圖 例:open database d:sjk1 打開數(shù)據(jù)庫sjk1
drop view st1 刪除視圖st1 CREATE REPORT <報表文件名> 功能:建立一個空白報表 例:create report d:bb1 建立一個報表bb1
MODIFY REPORT <報表文件名> 功能:打開指定的報表文件 例:modify report d:bb1 打開報表bb1
REPORT FORM <報表文件名> TO PRINTER 功能:打印指定的報表 例:report form d:bb1 to printer 打印報表bb1
MODIFY COMMAND <程序文件名> 功能:建立一個程序文件 例:modify command cx1 建立一個名為cx1的程序文件并打開編寫 DO <程序文件名> 功能:運行指定的程序 例:do d:cx1 運行程序cx1
注:如果在A程序中使用命令調用B程序,則B程序稱為A程序的子程序,A程序稱為B程序的主程序。
VFP中可以使用“*”號和NOTE命令可以給某一行加注釋,也可以使用“&&”在語句行后面添加注釋。
注:給某一個行加注釋就是以“*”或NOTE開頭后進行注釋,給語句行加注釋就是使用“&&”直接在語句后面加上注釋,相比來說“&&”注釋更加靈活。
例:clear &&清屏
給clear加注釋“清屏” 注:注釋的作用就是幫助理解程序的功能,以利今后修改程序時提高工作效率,一般注釋的內容在VFP中以綠色顯示。
CLEAR 功能:清除屏幕上的顯示信息 ACCEPT [提示信息] TO <內存變量>
功能:把用戶輸入的字符串保存到指定的內存變量中
例:accept to x 在屏幕上光標處輸入字符串,并將字符串保存到變量x中
accept ”請輸入x:” to x
在屏幕上”請輸入x:”后輸入字符串,并將字符串保存變量x中 INPUT [提示信息] TO <內存變量>
功能:把用戶輸入的表達式的值保存到指定的內存變量 例:input ”請輸入y:” to y 在“清輸入y:”后輸入數(shù)據(jù),并將數(shù)據(jù)保存到變量y中 注:input與accept的區(qū)別是,前者可以輸入數(shù)值型數(shù)據(jù)、邏輯型數(shù)據(jù),也可輸入字符型數(shù)據(jù),在輸入字符型數(shù)據(jù)時要加定界符,后者輸入的數(shù)據(jù)都一律被認為是字符型數(shù)據(jù),且不用加定界符。
WAIT [提示信息] [TO 內存變量] [WINDOW] [TIMEOUT 時間] 功能:等待用戶輸入一個字符
例:wait 屏幕上顯示“按任意鍵繼續(xù)?”,并要求任意輸入一個字符以繼續(xù)
wait “是否繼續(xù)(Y/N)?” to x window timeout 2 在屏幕右上角中的系統(tǒng)窗口中顯示“是否繼續(xù)(Y/N)?”系統(tǒng)窗口存在2秒,并將輸入的字符保存到變量x中
注:wait命令和accept命令中的變量的一定是字符型變量且不用加定界符,而input命令的變量的類型由輸入表達式值的數(shù)據(jù)類型決定。wait命令常用于輸入單字符和顯示信息,accept命令常用于輸入字符串,input命令常用于輸入其他類型的數(shù)據(jù)。
@<行,列> SAY <顯示信息> 功能:在指定位置輸出信息 例:@1,1 say ”你好” 在第一行第一列顯示“你好” @<行,列> [SAY 顯示信息] GET <變量> 功能:在指定位置輸入數(shù)據(jù),并把輸入的數(shù)據(jù)保存在指定的變量 例:@1,1 say”姓名:” get xm
read 在第一行第一列顯示“姓名:”并在其后面輸入數(shù)據(jù)并將數(shù)據(jù)其保存給變量xm 注:該命令需要與read命令共同使用,才能激活命令中的變量,接收輸入的數(shù)據(jù)。注:不與read命令共同使用的話,系統(tǒng)將自動將原先變量的值載入。ROW()功能:返回當前坐標的行坐標 COL()功能:返回當前坐標的列坐標 SET TALK ON|OFF
功能:設置是否顯示某些命令執(zhí)行的結果,ON為顯示,OFF為不顯示 SET SAFETY ON|OFF
功能:設置刪除文件數(shù)據(jù)時是否顯示提示信息,ON為顯示,OFF為不顯示 CLEAR ALL 功能:清除用戶自定義的內存變量和對象 IF <條件>
功能:單分支選擇結構
<語句組> ENDIF 例:if x<0 判斷x是否小于0,其返回值是.T.或.F.?”x小于0”
返回.T.時執(zhí)行,執(zhí)行后執(zhí)行endif后面的語句
endif
返回.F.時執(zhí)行endif后面的語句 IF<條件> 功能:雙分支選擇結構
<語句組1> ELSE
<語句組2> ENDIF 例:if x<0 判斷x是否小于0,其返回值是.T.或.F.?”x小于0”
返回.T.時執(zhí)行,執(zhí)行后執(zhí)行endif后面的語句
else
?”x大于等于0” 返回.F.時執(zhí)行,執(zhí)行后執(zhí)行endif后面的語句
endif 注:條件是一個邏輯表達式,其返回值為.T.或.F.。
注:if和endif必須成對使用,分別表示選擇結構開始和選擇結構結束 DO CASE
功能:多分支選擇結構
CASE <條件1>
<語句組1> CASE <條件2> <語句組2> ?
CASE <條件n> <語句組n> [OTHERWISE 語句組] ENDCASE 例:do case
case x=1
?”x等于1”
x等于1時執(zhí)行,執(zhí)行后執(zhí)行endcase后面的語句
case x=2 ?”x等于2”
x等于2時執(zhí)行,執(zhí)行后執(zhí)行endcase后面的語句
case x=3
?”x等于3”
x等于3時執(zhí)行,執(zhí)行后執(zhí)行endcase后面的語句
otherwise
? ”x是大于3的數(shù)”
x不滿足以上的所有條件時執(zhí)行,執(zhí)行后執(zhí)行endcase后面的語句 endcase 注:do case和endcase必須成對使用,分別表示選擇結構開始和選擇結構結束
DO WHILE <條件> 功能:基于條件的循環(huán)結構 <語句組>
ENDDO 例:do while x<10 判斷x是否小于10,其返回值是.T.或.F.?”x小于10”
x=x+1
返回.T.時執(zhí)行,執(zhí)行完畢后跳回循環(huán)開始處(do while <條件>)再次判斷條件是不是滿足或不滿足
enddo 返回.F.時執(zhí)行enddo后面的語句
SCAN [FOR條件] 功能:針對表記錄的循環(huán)結構 <語句組> ENDSCAN
例:use d:b1 由于是針對表記錄的循環(huán),所以需打開一張表
scan for 性別=”男”
display
每個性別字段等于“男”的記錄都會執(zhí)行一次語句組的語句,全部執(zhí)行完畢后,執(zhí)行endscan后面的語句
endscan FOR <變量>=<初值> TO <終值> [STEP 步長] 功能:指定次數(shù)的循環(huán)
<語句組> ENDFOR
例:s=0 設置累加器s
for x=1 to 11 step 2 給x賦初值1,終值11,其步長為s=s+x
因步長為2,故x的值為1、3、5、7、9、11,s將x從初值1到11的每一步的值都加起來,當x的值下一步大于其終值時,執(zhí)行endfor后面的語句
endfor 注:do while enddo,scan endscan,for endfor必須成對使用
LOOP 功能:終止本次循環(huán),使程序再次檢查是否滿足循環(huán)條件,以決定是否進行下一次循環(huán)即直接跳回循環(huán)開始處(如do while <條件>)。
EXIT 功能:結束循環(huán),使程序執(zhí)行循環(huán)結構后面的語句即直接跳到循環(huán)結束處(如 enddo)。PROCEDURE <過程名> 功能:定義一個過程 <語句組> ENDPROC 例:procedure x 定義一個過程,過程名為x
display
該過程的語句
endproc
結束過程
SET PROCEDURE TO [過程文件名] 功能 :打開指定的過程文件 例:set procedure to 關閉正在打開的過程
set procedure to d:gc1 打開過程文件gc1 注:缺省可選項則關閉已經打開的過程文件。DO <程序名|過程名> [WITH 參數(shù)表] 功能:調用指定的程序,并把指定的參數(shù)傳遞給調用的下級程序。注:缺省可選項,則不傳遞參數(shù)。
PAREMETERS <參數(shù)表> 功能:接受上級程序傳遞來的參數(shù) 例:input”你出生的年份:” to c
input”現(xiàn)在的年份:” to n
do c1 with c,n
調用過程c1并傳遞參數(shù)c和n,并執(zhí)行過程c1的語句
?”你現(xiàn)在”+alltrim(str(n))+alltrim(”歲”)
在屏幕上顯示“你現(xiàn)在n(變量)歲”,因n為數(shù)值型,所有要用str()函數(shù)轉換成字符型,用alltrim()函數(shù)消除多余的空格
return
procedure c1 定義過程c1
parameters x,y 接收上級傳遞過來的參數(shù),c對應x,n對應y
y=y-x 即用現(xiàn)在的年份減去你出生的年份,算出要計算的年齡
endproc
結束過程,并將參數(shù)y,x的值傳遞回c,n,此時執(zhí)行調用該過程之后的語句 注:在這里c,n稱為實參,即實際使用的參數(shù)。x,y稱為形參,即位置相同,形式相同的參數(shù)。
CREATE FORM <表單文件名> 功能:創(chuàng)建一個空白表單 例:create form d:bd1 建立一個名為bd1的表單 DO FORM <表單文件名> 功能:運行指定的表單 例:do form d:bd1 運行表單bd1
MODIFY FORM <表單文件名> 功能:打開指定的表單 例:modify form d:bd1 打開表單bd1 Thisform.refresh 功能:刷新表單
Thisform.release 功能:釋放并關閉表單,即從內存中清除表單
Thisform.<對象名>.<屬性名>=<屬性值> 功能:修改或設置表單對象的屬性值Thisform.text1.value=”VFP”
這個表單的text1控件的value屬性值是”VFP” DO <菜單程序名> 功能:運行指定的菜單 例:do d:cd1.mpr 運行菜單cd1
DO <菜單程序名> WITH this ,T,功能:使用表單調用菜單 例:do d:cd1 with this ,T, 在當前表單上調用菜單cd1
例:5
第四篇:mathematic命令小結
1.初等數(shù)學(1).算術函數(shù)
Plus(+)加號 Subtract(-)減號
Times(×)乘號, 用空格,* 或者×(Esc * Esc)表示 Divide(/)除號
Power(^)冪, 以上標形式輸入,使用 Ctrl+^ Sqrt平方根, 輸入 Sqrt[?] 或使用 Ctrl+@ expr 直接輸入表達式 N[expr]或 expr//N expr的近似值
N[expr,n] n位精度的expr的近似值(2).數(shù)學常數(shù)
Pi(?)圓周率?(Esc p Esc)
E(?)自然對數(shù)底數(shù)?(Esc ee Esc)Infinity(?)無窮大 ?(Esc inf Esc)I 虛數(shù)單位
Degree 度數(shù) °
GoldenRatio 黃金分割 ?=(1+Sqrt[5])/2?1.618 EulerGamma 歐拉常數(shù) ??0.577(3).復數(shù) z=x+I y Re[z] 求z的實部 Im[z] 求z的虛部 Conjugate[z] 求z的共軛 Abs[z] 求z的模 Arg[z] 求z的幅角
Sign[z] 將z單位化(z/|z|)(4).數(shù)值函數(shù)
IntegerPart[x] x的整數(shù)部分 FractionalPart[x] x的分數(shù)部分 Round[x] x的四舍五入取整 Floor[x] x的向下取整 Ceiling[x] x的向上取整 Abs[x] x的絕對值
Max[{e1,..., en}] 給出n個數(shù)的最大值 Min[{e1,..., en}] 給出n個數(shù)的最小值 Sign[x] 符號函數(shù) Boole[x] 布爾函數(shù)
UnitStep[x] 階梯函數(shù)(x>=0時為1, x<0時為0)Mod[k, n] k模n(k除 n的余數(shù))Quotient[m, n] m除n的商數(shù)(舍棄m/n的小數(shù)部分)QuotientRemainder[m,n] m除n的商數(shù)和余數(shù)的列表 GCD[n1, n2, ?] 求n1, n2,...最大公約數(shù) LCM[n1, n2, ?] 求n1, n2,...最小公倍數(shù) n!n的階乘 n(n-1)(n-2)?1 n!n的二階階乘 n(n-2)(n-4)? Binomial[n,m] 組合數(shù)(n,m)= n!/[m!(n-m)!Multinomial[n1,n2, ?]] 多重組合(n1+n2+ ?)!/(n1!n2!...)Rescale[x,{xmin,xmax}] IntegerDigits FromDigits(5).一般函數(shù) 初等函數(shù)
Log[x] 計算表達式的對數(shù)函數(shù)值 Log[b,x]
計算x以b為底的對數(shù)...Sin[x]
計算表達式的三角正弦 Cos[x] 計算表達式的三角余弦 Tan[expr]
計算表達式的三角正切 Cot[expr]
計算表達式的三角余切 Sec[expr]
計算表達式的三角余割 ArcSin[expr] 計算表達式的反三角正弦 ArcCos[expr] 計算表達式的反三角余弦 ArcTan[expr] 計算表達式的反三角正切...Sinh[expr]
計算表達式的雙曲正弦 Cosh[expr] 計算表達式的雙曲余弦 Coth[expr] 計算表達式的雙曲余切 Tanh[expr]
計算表達式的雙曲正切 ArcCosh[expr] 計算表達式的反雙曲余弦 ArcSinh[expr] 計算表達式的反雙曲正弦 ArcTanh[expr] 計算表達式的反雙曲正切 Sech[expr]
計算表達式的雙曲余割
特殊函數(shù)
Zata[expr]
計算表達式的Zata函數(shù) Bessell[expr] 計算表達式的貝賽爾函數(shù)值 Beta[expr] 計算表達式的Beta函數(shù)值 Gamma[expr] 計算表達式的伽瑪函數(shù)值 Erf[expr]
計算表達式的誤差函數(shù)
統(tǒng)計函數(shù)
NormalDistribution[?,?] 正態(tài)分布 StudentTDistribution[v] 學生分布 ChiSquareDistribution[v] ?2分布 FRatioDistribution[m,n] F分布 UniformDistribution[min,max] 均勻分布 ExponentialDistribution[?] 指數(shù)分布
LaplaceDistribution[?,?] 拉普拉斯分布 GammaDistribution?, ?] ?分布 BetaDistribution[?, ?] ?分布 CauchyDistribution[a,b] 柯西分布 BernoulliDistribution[p] 貝努利分布 BinomialDistribution[n,p] 二項分布 PoissonDistribution[?] 泊松分布
PDF 求分布的密度函數(shù) CDF 求分布的概率函數(shù) Mean 求均值 Variance 求方差 Quantile 求距 Skewness 求峰度 Kurtosis 求偏度 ExpectedValue 求期望
RandomReal 產生隨機實數(shù) RandomInteger 產生隨機整數(shù)(6).自定義函數(shù)
f[x_]:=expr 定義函數(shù)f f[x_,y_]:=expr 定義多變量函數(shù)f.Piecewise[{{val1,cond1},{val2,cond2},?}] 用于定義分段函數(shù) ?f 顯示函數(shù)的定義 Clear[f] 清除函數(shù)f x=value 給x賦值
x=.清除變量x的值
expr/.x->value 用value替換expr中的x(7).表達式化簡
Simplify[expr] FullSimplify[exper] Simplify[expr,assum] assum 選項
Element[x,Reals] 或 x?Reals Element[x,Integers] 或 x?Integers Element[x,Complexs] 或 x?Complexs Element[x,Primes] 或 x?Primes Element[x,Rationals] 或 x?Rationals Element[x,Booleans] 或 x?Booleans Assumptions Assumming
2.多項式與有理函數(shù)(1).多項式
1、多項式的普通運算 Expand[poly] 展開多項式乘積與乘方 Factor[poly] 對多項式進行因式分解 FactorTerms[poly] 提取數(shù)字公因子
FactorTerms[poly,patt] 提取關于patt的公因子
Collect[poly,x] 以x冪的形式重新排列多項式 Collect[poly,{x,y,...}] 以x、y、...冪的形式重新排列多項式 Expand[poly,patt] 展開與patt相匹配的多項式poly
2、得到多項式的結構
PolynomialQ[expr,x] 判斷expr是否為關于x 的多項式
PolynomialQ[expr,{x,y,...}] 判斷expr是否為關于x,y,...的多項式 Variables[poly] 列出多項式poly中的變量 Length[poly] 列出多項式poly的項數(shù)
Exponent[poly,x] 給出多項式poly的x的最高指數(shù) Coefficient[poly,expr] 給出多項式poly中關于expr的系數(shù)
CoefficientList[poly,{x,y,..}] 生成多項式poly中關于x、y、...的系數(shù)
3、多項式的代數(shù)運算
PolynomialQuotient[poly1,poly2,x] 求出關于x的多項式poly1除以poly2的商,忽略余式 PolynomialRemainder[poly1,poly2,x] 求出關于x的多項式poly1除以poly2的余式
PolynomialQuotientRemainder[poly1,poly2,x] 求出關于x的多項式poly1除以poly2的商和余式 PolynomialReduce[poly,{poly1,poly2,...},{x1,x2,...}] PolynomialGCD[poly1,poly2] 尋找兩個多項式的最大公因式 PolynomialLCM[poly1,poly2] 尋找兩個多項式的最小公倍式 Resultant[poly1,poly2,x] 尋找兩個多項式的消元式 Discriminant[poly, x] 給出多項式有根的判別式
PolynomialReduce[poly,{poly1,poly2,...},{x1,x2,...}] 尋找使用ployi表示poly的最小表示式(2).有理式
關于有理多項式的運算
ExpandNumerator[expr] 僅把有理表達式的分子展開 ExpandDenominator[expr] 僅把有理表達式的分母展開 Expand[expr] 僅展開分子,并把分母分成單項 ExpandAll[expr] 同時展開有理表達式的分子和分母 ExpandAll[expr,patt] 僅展開與patt匹配的項 Together[expr] 合并具有相同分母的項
Apart[expr] 以最簡分母項和的形式書寫表達式 Cancel[expr] 約去分子分母中的公因子
Factor[expr] 將有理式合并,并同時對分子分母因式分解 Numerator[expr] 獲取有理表達式的分子 Denominator[expr] 獲取有理表達式的分母(3).三角函數(shù)表達式
1、三角表達式
TrigExpand[expr] 將三角函數(shù)表達式轉化為和差
TrigFactor[expr] 將三角函數(shù)表達式和差形式轉化為乘積形式 TrigReduce[expr] 用倍角的方法化簡三角表達式 TrigToExp[expr] 將三角函數(shù)表達式轉化為指數(shù)形式 ExpToTrig[expr] 將指數(shù)形式表達式轉化為三角函數(shù)形式
2、含有復數(shù)變量的表達式
ComplexExpand[expr] 展開表達式expr,并假定所有的變量都是實數(shù) ComplexExpand[expr,{x1,x2,...}] 展開表達式expr,并假定x1,x2,...變量都是復數(shù)
3.代數(shù)方程與不等式(1)代數(shù)方程求解
Solve[eq var] 求解方程eqns中的未知變量vars Solve[{eq1,eq2,...},{var1,var2,...}] 求解方程組
Root[f,k] 求解方程f[x]=0的第k個根
Reduce[eqns vars] 給出含未知常數(shù)方程eqns所有可能的情況 Eliminate[eqns,elims], 消去方程eqns中變量elims RSolve[eqns,vars[n]] 求遞推方程eqns的通解vars[n] Resolve(2)不等式求解
Reduce[{eqns1, eqns2,...}, x] 給出滿足不等式eqnsi的x的集合
4.微積分(1).求極限
x0f(x)Limit[f,x->x0] x?limLimit[f,x?x0Limit[f,x?x0
x0,Direction->1] x?x0,Direction->-1] x?limf(x)f(x)
lim(2).求(偏)導
D[exp,x] 計算表達式一階(偏)導數(shù) D[exp,x1,x2,?xn] 計算表達式混合偏導數(shù)
D[exp,{x,n}] 計算表達式對x的n階(偏)導數(shù) D[exp,{{x1,x2,...}}] 計算向量函數(shù)(偏)導數(shù)
Derivative[n 1,n2,?][f] 對f的第一個變量求n1階導數(shù),第二個變量求n2階導數(shù),...Dt[exp] 計算表達式的全微分df Dt[exp,x] 計算表達式關于x的全導數(shù)df/dx
Dt[exp,x1,x2, ? xn] 計算表達式關于x1,x2,?xn的全導數(shù)d/dx1 d/dx2...d/dxn f Dt[exp,x,Constants->{c1,c2,?, cn}] 計算表達式關于x的全導數(shù),并指出表達式中 ci為常數(shù) Maximize[f,{x,y,?}] 求變量為x,y,?函數(shù)f的最大值.Maximize[{f,cons},{x,y,?}] 求在約束條件cons下函數(shù)f的最大值
Minimize[f,{x,y,?}] 求變量為x,y,?函數(shù)f的最小值.Minimize[{f,cons},{x,y,?}] 求在約束條件cons下函數(shù)f的最小值
FindMinimum[{f,cons},{x,x0},{y,y0}?] 求在約束條件cons下函數(shù)f的局部最小值(3).求積分 Integrate[exp,x] 求表達式關于x的不定積分
Integrate[exp,{x,a,b}] 求表達式關于x在區(qū)間[a,b]上的定積分 NIntegrate[exp,{x,a,b}] 求表達式關于x在區(qū)間[a,b]上的數(shù)值積分 Integrate[exp,{x,a,b},{y,c,d}] 求x,y在區(qū)間[a,b][c,d]上的二重積分 Integrate[Boole*ieq,{x,a,b},{y,c,d}] 求不等式所限制的區(qū)域上的二重積分(4).冪級數(shù)展開
Series[exp,{x,x0,n}] 對表達式在x0處進行n階展開
Series[exp,{x,x0,n1},{y,y0,n2}] 對二元表達式在x0,y0處進行n1,n2階展開 Series1/.x->Series2 將級數(shù)Series2代入級數(shù)Series1 Normal[exp] 將級數(shù)轉化為函數(shù)表達式(即:除去余項)Residue[exp,{x,x0}] 求exp在x=x0處的留數(shù)(5).微分方程
DSolve[eqn,y[x],x] 求解微分方程解y[x] DSolve[eqn,y,x] 求解微分方程解函數(shù) DSolve[{eqn1,eqn2,?eqnn},{y1,y2,?yn},x] 求解微分方程組的解
DSolve[eqn, y[x1,x2,...], {x1,x2,...}] 求解偏微分方程的解(6).和與積
Sum[f,{i,imin,imax}] 和式
Sum[f,{i,imin,imax,di}] 關于i求和,i的步長為di
Sum[f,{i,imin,imax},{j,min,jmax}] 多重求和
Product[f,{i,imin,imax}] 求積(7).一些用于迭代的函數(shù)
Nest[f,x,n] 對x嵌套運用f函數(shù)n次 NestList[f,x,n] 產生一n元嵌套列表{x,f(x),f(f(x)),...}。FixPoint[f,x] 求x=f(x)的不動點
FixPointList[f,x] 產生一列表{x,f(x),f(f(x)),...},直到不動點為止 FixPoint[f,x,SameTest?Comp] 求x=f(x)的迭代,直到滿足comp為止 Fold[f,x0,{a,b,...}] FoldList[f,x,{a,b,...}] 產生一列表{x,f(x,a),f(f(x,a),b),...}
5.線性代數(shù)
(1).數(shù)表與矩陣的輸入及其構造
v={a1,a2,...an} 輸入一個名為v的n維向量(表),其中ai為數(shù)值或為表達式 p={{e11,e12,?e1n},?,{em1,em2,?emn}} 輸入一個名為p的m×n矩陣(多維表),其中eij為數(shù)值或為表達式 v=Table[f,{i,m}] 輸入一個名為v的n維向量(表), 其元素f為i的函數(shù)
p=Table[f,{i,m},{j,n}] 輸入一個名為p的m×n矩陣, 其元素f為i,j的函數(shù) p=Array[f,{i,m},{j,n}] 輸入一個名為p的m×n矩陣,其元素為f[i,j] p=Range[f,{n}] 生成一列表{f[1],f[2],....f[n]} p=DiagonalMatrix[{e1,e2,?,en}] 輸入一個名為p的n階對角陣,對角元素為e1,e2,?,en
????imaxi?iminfimaxi?iminjmaxj?jminf
imaxi?iminfp=IdentityMatrix[n] 輸入一個名為t的n階單位陣 p=Table[0,{m},{n}] 輸入一個名為t的m×n零矩陣
p=Table[If[i>=j,f,0],{i,m},{j,n}] 輸入一個名為p的m×n下三角陣,其元素f為i,j的函數(shù) p=Table[If[i<=j,f,0],{i,m},{j,n}] 輸入一個名為p的m×n上三角陣其元素f為i,j的函數(shù) p=Normal[SparseArry[{{i1,j1}->v1,{i2,j2}->v2,...},{m,n}] 構造一矩陣其在ik行jk列的值為vk,其余為0。Tuples Subsets Permutations RandomChoice
(2).矩陣的剪裁
v[[i]](Part[v,i])取出向量v的第i個元素 M[[i,j]] 取出矩陣M的元素m(i,j)M[[i]] 取出矩陣M的第i行 M[[All,i]] 取出矩陣M的第i列
M[ {i1,i2?ir},{ j1,j2?js }] 取出矩陣M的一個r×s子矩陣,它由i1, 行和 j1, ?js列相交處的元素構成 M[{Range[ i0,i1],Range[ j0,j1]}] 或Take[M,{i0,i1}, {j0,j1}] 取出矩陣M的一個子塊,它由 i0到 i1行和 j0Minors[M,i] 算出矩陣M的一個i×s的i階余子式矩陣 ArrayRules[M] 矩陣M中非零元素的位置 Tr[M,List] 矩陣M對角線上的元素
M[[i,j]]=v 將矩陣M的i行j列的元素換為v。M[[i]]=v 將矩陣M的i行的元素全換為v。
M[[i]]={v1,v2,...} 將矩陣M的i行的元素全換為{v1,v2,...}。M[[All,j]]=u 將矩陣M的j列的元素全換為u。
M[[All,j]]={u1,u2,...} 將矩陣M的j列的元素全換為{u1,u2,...}。First Last Rest Most Take Drop TakeWhile Append Prepend Insert Delete AppendTo PrependTo RotateLeft RotateRight Reverse
ir 到j1列相交處的元素構成? Partition Flatten Sort Join Riffle(3).矩陣的運算
c*v 常數(shù)乘矩陣 v.u 向量內積 Norm[u] 求向量u的模
v*m 向量對應的元素相乘 m.v 矩陣乘向量 m.p 矩陣相乘 Cross[v,v] 向量差積
m*p 矩陣對應的元素相乘 VectorAngle[u,v] 求兩向量的夾角 Normalize[u] 將向量u單位化 Orthogonalize[{u,v,...}] 將向兩組正交化 Projection[u,v] 求向量u到v上的投影 Outer[Times,m,n] 求矩陣的外積 Transpose[m] 求矩陣的轉置 Inverse[m] 求矩陣的逆矩陣 Det[m] 求矩陣的行列式
Minors[m,k] 矩陣所有可能的k*k階子式 MatrixPower[m,i] 求矩陣m的i次冪
MatrixExp[m] 求以矩陣m作為指數(shù)的值 Tr[m] 求矩陣的跡
CharacteristicPolynomial[m,x] 求矩陣的特征多項式。Chop[%] 舍棄上一個輸出中的無意義的小量 MatrixPlot[M] 打印矩陣 Map Apply(4).解線性方程組
LinearSolve[m,w] 求解線性方程組m.x=w的解 NullSpace[m] 求矩陣m的零化子空間
RowReduce[m] 用Gauss消元將矩陣m化為對角形式 MatrixRank[m] 求矩陣m的秩
LeastSquares[m,w] 求線性方程組m.x=w的最小二乘解(5).特征值,特征向量及分解
Eigenvalues[m] 求矩陣m的特征值
Eigenvalues[m,k] 矩陣m的最大的前k個特征值 Eigenvectors[m] 求矩陣m的特征向量
Eigenvectors[m,k] 對應矩陣m的最大的前k個特征值的特征向量 Eigensystems[m] 求數(shù)字矩陣m的特征值和特征向量 Eigenvalules[{m,a}] 求矩陣m關于a的廣義特征值 Eigenvectors[{m,a}] 求矩陣m關于a的廣義特征向量 QRDecomposition[m] 求數(shù)字矩陣m的QR分解 SchurDecomposition[m] 求數(shù)字矩陣m的Schur分解 LUDecomposition[m] 求數(shù)字矩陣m的LU分解
CholeskyDecomposition[m] 求數(shù)字矩陣m的Cholesky分解 JordanDecomposition[m] 求數(shù)字矩陣m的Jordan分解 SingularValues[m] 求數(shù)字矩陣m的奇異值分解 PseudoInverse[m] 求數(shù)字奇異矩陣m的擬逆
6.數(shù)值計算
(1).數(shù)據(jù)擬合與插值
ff=Table[N[f[x]],{x,n}] 輸入名為ff的擬合函數(shù)表,變量x在區(qū)間[0,n]上,間距為1。fp=Fit[ff,{f1,f2,?,fn},x] 建立名為fp的擬合函數(shù),它由f1,?,fn的線性組合形成,擬合變量為x。fp=FindFit[ff,form,{pars1,pars2,...},x] 建立名為fp的擬合函數(shù),函數(shù)形式form已知,求參數(shù)parsi。fp=Fit[ff,Table[x^i,{i,0,n}],x] 多項式擬合的簡單輸入形式
ff=Flatten[Table[{x,y,f[x,y]},{x,x1,x2,dx},{y,y1,y2,dy},1] 輸入名為ff的二元擬合函數(shù)表,變量x在區(qū)間[x1,x2]上,間距為dx。變量y在區(qū)間[y1,y2]上,間距為dy。
fp=Fit[ff,{f1,f2,?,fn},{x,y}] 建立名為fp的擬合函數(shù),它由f1,?,fn的線性組合形成,擬合變量為x,y。ff={{x1,y1},{x2,y2},?,{xn,yn}} 輸入名為ff的二元插值函數(shù)表 fp=InterpolatingPolynomial[ff,x] 用牛頓法進行多項式插值
ip=Interpolation[{f1,f2,...}] 構造在整數(shù)點i處函數(shù)值為fi的插值多項式 ip=Interpolation[{{x1,f1},{x2,f2},...}] 構造在點xi處函數(shù)值為fi的插值多項式
ip=Interpolation[{{x1,y1,f1},{x2,y2,f2},...}] 對二維整數(shù)網格點上值為fij構造插值多項式
ip=ListInterpolation[List,{{xmin,xman},{ymin,ymax},...}] 對二維區(qū)域網格點值構造插值多項式
ip=ListInterpolation[List,{{x1,x2,...},{y1,y2...}}] 對二維區(qū)域上給定的網格點上值構造插值多項式(2).方程數(shù)值解與函數(shù)優(yōu)化
NSolve[poly==0,x] 求多項式方程的解
NSolve[poly==0,x,n] 求多項式方程的解,精度為n。FindRoot[f[x]==0,{x,x0}] 用牛頓方法求方程在x0附近的解
FindRoot[f[x]==0,{x,x0,x1}] 用割線方法求方程在x0、x1附近的解 FindRoot[{f1,f2,...},{{x,x0},{y,y0},...}] 用牛頓方法求方程組在x10,x20,?,附近的解 FindInstance[f[x]==0,x] 求方程的任意一特解
FindInstance[f[x]==0,x,dom] 求在給定范圍dom內任意特解 FindInstance[f[x]==0,x,dom,n] 求在給定范圍dom內任意n個特解 NIntegrate[f[x],{x,xmin,xmax}] 計算一元定積分
NIntegrate[f[z],{z,z0,z1,?,zn,z0}] 計算復變函數(shù)的回路積分 NIntegrate[f[x,y],{x,a,b},{y,c,d}] 計算二元定積分
LinearProgramming[c,m,b] 求滿足m.x>b,x>0約束使c.x最小的x LinearProgramming[c,m,b,l] 求滿足m.x>b,x>l約束使c.x最小的x FindMinimum[f[x],{x,x0}] 求函數(shù)f(x)在x0附近的局部極小值
FindMinimum[f,{{x,x0},{y,y0},...}] 求函數(shù)f在{x0,y0,...}附近的局部極小值 FindMaximum[f[x],{x,x0}] 求函數(shù)f(x)在x0附近的局部極大值
FindMaximum[f,{{x,x0},{y,y0},...}] 求函數(shù)在{x0,y0,...}附近的局部極大值 NMinimize[f,{x,y,...}] 求多元函數(shù)函數(shù)f最小
NMinimize[{f,cons} ,{x,y,...}] 求在約束cons下函數(shù)f最大值 NMaximize[f,{x,y,...}] 求多元函數(shù)函數(shù)f最大值
NMaximize[{f,cons}, {x,y,...}] 求在約束cons下函數(shù)f最大值值(3).微分方程數(shù)值解
NDSolve[equ,y,{x,xmin,xmax}] 給出方程在區(qū)間[xmin,xmax]上關于y的數(shù)值解。NDSolve[equs,{y1,y2,...},{x,xmin,xmax}] 給出方程在區(qū)間[xmin,xmax]上關于函數(shù)yi的數(shù)值解。NDSolve[equs,u,{t,tmin,tmax},{x,xmin,xmax},...] 給出偏微分方程組上關于函數(shù)u的數(shù)值解。NDSolve[equs,{u1,u2,...},{t,tmin,tmax},{x,xmin,xmax},...] 給出偏微分方程組上關于函數(shù)ui的數(shù)值解。y[x]/.solution 得到方程插值形式的解y[x].Plot[Evaluate[y[x]/.solution],{x,xmin,xmax}] 打印出微分方程解的圖形
7.繪圖
(1).平面圖形 顯函數(shù)繪圖
Plot[f, {x, x1, x2}, “選項”] 打印函數(shù)f在區(qū)間[x1, x2] 上的圖形
Plot[{f1, f2,...}, {x, x1, x2}, “選項”] 在同一幅圖上打印出函數(shù)f1, f2,...在區(qū)間[x1, x2] 上的圖形 參數(shù)方程繪圖
ParametricPlot[{x[t], y[t]}, {t, t0, t1}, “選項”] 畫出參數(shù)形式給出的函數(shù)曲線圖形 ParametricPlot[{fx, fy}, {u, u0, u1}, {v, v0, v1}, Option] 畫出參數(shù)形式給出的函數(shù)所描述的區(qū)域圖形 極坐標圖形
PolarPlot[r, {theta, theta1, theta2}] 畫出極坐標形式給出的函數(shù)曲線圖形 PolarPlot[{r1, r2,...}, {theta, theta1, theta2}] 同時畫出多個極坐標形式給出的函數(shù)曲線圖形 隱函數(shù)圖形
ContourPlot[f(x, y)== 0, {x, xmin, xmax}, {y, ymin, ymax}] 打印隱函數(shù)f == 0 所描述的曲線圖 等高線圖形
ContourPlot[f, {x, xmin, xmax}, {y, ymin, ymax}] 打印函數(shù)f所對應的等高線圖 密度圖形
DensityPlot[f, {x, xmin, xmax}, {y, ymin, ymax}] 打印函數(shù)f所對應的密度圖 區(qū)域圖形
RegionPlot[ineq, {x, xmin, xmax}, {y, ymin, ymax}] 打印不等式ineq所描述的區(qū)域圖 Show[{g1, g2,..., gn}, Option] 顯示幾個已畫出的函數(shù)圖形 離散點圖形
ListPlot[{y1, y2,..., yn}] 畫出列表形式給出的函數(shù)圖象(橫坐標為整數(shù))ListPlot[{{x1, y1}, {x2, y2},..., {xn, yn}}] 畫出表形式給出的函數(shù)圖象 ListLinePlot[list1, list2,..., Option] ListContourPlot[array] ListContourPlot[{{x1, y1, f1}, {x2, y2, f2},...}] ListDensityPlot[array] ListDensityPlot[{{x1, y1, f1}, {x2, y2, f2},...}] ArrayPlot[array] ReliefPlot[array] MatrixPlot[matrix]
Option選項常用的有: 圖形界面選項
Frame-> “True” 給圖形加上圖框 FrameLabel-> None, FrameStyle-> {}, FrameTicks-> Automatic, FrameTicksStyle-> {}, AspectRatio-> Automatic,Background-> None, GridLines-> None, GridLinesStyle-> {}, ImageSize-> Automatic, Mesh-> None, MeshShading-> None, MeshStyle-> Automatic, 坐標軸選項 Axes-> True, AxesOrigin-> Automatic, AxesStyle-> {}, AxesLabel-> “名1,名2” 是否給坐標軸加上名字 RotateLabel-> True, Ticks-> Automatic, TicksStyle-> {} 圖形選項
PlotPoints-> 數(shù)字 畫圖時計算函數(shù)的點數(shù)
PlotStyle-> RGBColor[a, b, c] 產生彩色圖, a, b, c為[0, 1] 中的值 PlotRange-> {y1, y2} 指定函數(shù)因變量的區(qū)間 PlotLabel-> “圖名” 是否給圖形加上名字 ColorFunction-> Automatic, ColorFunctionScaling-> True, ColorOutput-> Automatic, Epilog-> {}, Filling-> None, FillingStyle-> Automatic, LabelStyle-> {}, Method-> Automatic, PlotRangeClipping-> True, PlotRegion-> Automatic, Prolog-> {}
ColorFunction-> Automatic, ColorFunctionScaling-> True, ColorOutput-> Automatic, ContourLabels-> None, ContourLines-> True, Contours-> Automatic, ContourShading-> Automatic, ContourStyle-> Automatic, Exclusions-> Automatic, GridLines-> None, GridLinesStyle-> {}, ImageMargins-> 0., ImageSize-> Automatic, LabelStyle-> {}, PlotPoints-> Automatic, PlotRange-> {Full, Full, Automatic}, PlotRegion-> Automatic Prolog-> {}, RegionFunction->(True &), RotateLabel-> True, Ticks-> Automatic, TicksStyle-> {}
(2).空間圖形
Plot3D[f[x,y],{x,xmin,xmax},{y,ymin,ymax},Option] 繪制函數(shù)z=f(x,y)在給定范圍內的三維圖形。ParametricPlot3D[{x[t],y[t],z[t]},{t,t1,t2},Options] 繪制三維空間的曲線圖。
ParametricPlot3D[{fx[u,v],fy[u,v],fz[u,v]},{u,u1,u2},{v,v1,v2},Option] 繪制三維空間的曲面圖 RevolutionPlot3D SphericalPlot3D RegionPlot3D Show[圖形名,Option] 顯示已繪制好的圖形,按特別說明加以修改 CotourPlot3D[f[x,y,z],{x,xmin,xmax},{y,ymin,ymax},{z,zmin,zmax}] 繪制函數(shù)f=f(x,y,z)在給定范圍內的等值面圖。ListPlot3D ListPointPlot3D 繪制3維散點圖 ListSurfacePlot3D ListContourPlot3D 8.編程
(1).條件結構
If[cond,then,else,none] 如果cond成立,計算then;不成立,計算else;無法判定,計算none。Which[cond1,value1,cond2,value2,...,True,value] 如果條件cond1成立,計算value1,條件cond2成立,計算value2,...,全不成立,計算value。lhs:=rhs/;cond 如果cond成立,定義lhs為rhs,Switch[expr,form1,valu1,form2,value2,...,_,def] 如果條件cond1成立,計算value1,條件cond2成立,計算value2,...,都不相等,計算def。(2).循環(huán)結構
Do[expr[i],{i,min,max,id}] 計算表達式expr[i],i從min到max,步長為id。Do[expr,{n}] 計算表達式expr n次。
While[cond,expr] 只要cond為true,就計算expr。For[start,test,incr,expr] 從start開始計算expr一次,再計算incr一次,直到test為false結束.
第五篇:vfp命令、語句等說明總結
VFP命令、函數(shù)及程序語句大全
VFP提供一些簡單的程序設計語言命令,包括賦值語句、控制語句、設置命令等,我們可根據(jù)某種功能的需要,利用這些命令及數(shù)據(jù)庫操作的有關命令構成語句,分行存在文件中(稱為命令文件,以. PRG為擴展名,在項目管理器中標為“程序”)或一些對象的過程或事件處理程序中。如被調用,系統(tǒng)將一條條順序執(zhí)行各行命令,如遇到控制語句(IF,DO,CALL,F(xiàn)OR?等),依據(jù)控制語句的指定,轉移到指定語句再一條條順序執(zhí)行。
這些命令書寫時,每條語句應在一行中寫完,如不能寫完,可用分號“;”結束,表示下一行繼續(xù)。兩條語句不能寫在一行上。每條語句中命令字及選項中保留字大多數(shù)可只書寫前四個字符。
一般一個簡單的VFP應用系統(tǒng)由若干模塊組成,各自完成一定的功能,總的系統(tǒng)用一個總控模塊去控制,通過它調用子模塊,層層調用以實現(xiàn)全系統(tǒng)的功能。這種結構如圖5.4所示。這種方式便于設計、調試,保證程序的正確性,也容易實現(xiàn)模塊共亭,實現(xiàn)軟件重用,提高程序設計效率。
主模塊可由主封面表單、主命令文件和主菜單文件構成;各個模塊可由過程、自定義函數(shù)、表單、表單集、應用程序或子菜單等構成。
一個表單或一個表單集中可有一到多個用戶界面,可設置一到多個命令按鈕及其他程序控件,用戶可利用按鈕及程序控件,產生特定的消息觸發(fā)執(zhí)行一個程序,完成一個功能。應用程序是對一個模塊編譯后的. APP執(zhí)行文件,“過程”是由命令組成的程序,以RETURN語句結束,它可為另一個程序所調用,調用執(zhí)行時遇到RETURN語句將返回其調用程序。
圖 5.4 VFP程序總體結構
一.變量賦值與顯示語句
在項目管理器中選“代碼→程序→新建”或在命令框利用命令MODIFY COMMAND建立命令文件。
1.MODIFY COMMAND
意義:創(chuàng)建命令文件。
命令格式:MODIFY COMMAND 文件名
例如:MODIFY COMMAND PROC1
執(zhí)行此命令后,將進入全屏幕編輯狀態(tài)。如原已建立了該文件proc1,將調出該文件在屏幕上顯示,用戶可對之修改。如是新文件,則用戶可利用全屏幕編輯鍵,輸入自己的程序。新文件將自動加上擴展名.PRG。
2.DO
意義:執(zhí)行命令文件程序,有三種方法:①在項目管理器中選“代碼→程序→選擇程序名→運行”。②在主菜單中選“程序→運行→輸入(選擇)程序名→運行”。③在程序中或命令窗日中使用DO命令。命令格式:DO 程序名[WITH 表達式表]
程序名可以是上述方式建立的命令文件(.PRG文件)、可執(zhí)行文件(.EXE文件)、應用程序(.APP文件),及對.PRG文件編譯后的文件(.FXP文件)。如調用DO命令時不帶擴展名,則按.EXE文件、.APP文件、.FXP文件、.PRG文件的順序查找同名程序并執(zhí)行之。
例如:DO PROC1
此外,程序名還可能是菜單程序,調用時必須帶擴展名(.MPR)。例如,有菜單程序MAIN.MPR,則可如下調出執(zhí)行:
DO MAIN.MPR
程序名還可以是事件名或過程名。
其中表達式表由多個表達式組成,用逗號分開,在執(zhí)行時首先計算各表達式的值,并帶入被調程序,被調程序第一句應是LPARAMETERS形參表語句,形參表是以逗號分隔的多個內存變量名,其個數(shù)應等于調用時的表達式的個數(shù),執(zhí)行時,首先用調用語句中各表達式的值對應給它們賦值。
例如:主程序中:DO PROC1 WITH “AB”,21
被調程序:LPARAMETERS M1,X0
執(zhí)行時,首先完成賦值:M1=“AB”;X0=21,再往下執(zhí)行。
當使用DO運行一個程序時,包含在其中的命令一直執(zhí)行,直到下列某一事件發(fā)生。遇到RETURN語句,返回到調用程序DO命令的下一句,遇到了CANCEL命令,返回VFP命令狀態(tài)。遇到QUIT命令退出程序并退出VFP;到達文件尾回到調用前狀態(tài);再遇到另一個DO命令,將轉人新程序執(zhí)行。
3.PUBLIC
意義:設置全局性內存變量命令。
格式:PUBLIC 變量名1[,變量名2]?
在不同程序或過程或事件中,同名內存變量的值不一定相同,如要將一個程序(過程、事件)中變量的值傳到另一程序(過程、事件)中,可應用上述命令將它定義成全局變量。
4.PRIVATE
意義:設置局部變量的命令。
格式:PRIVATE[ALL[LIKE∣EXCEPT 通配符]∣內存變量表]
其中選項意義:ALL將所有內存變量說明為局部性變量,ALL[LIKE∣EXCEPT 通配符]將變量名能與通配符相匹配的內存變量說明為局部性變量?!癆LL EXCEPT通配符”將除了能與通配符相匹配的變量名之外的內存變量說明為局部性變量。在程序中,為了一個程序的運行結果不影響另一個程序的執(zhí)行,不希望同名變量將值從一個程序帶到另一個程序而造成干擾。為此,可將該變量定義成局部性變量。
5.DIMENSION
意義:定義內存變量數(shù)組命令,VFP中可定義一維或二維數(shù)組。
格式:DIMENSION 數(shù)組名(數(shù)字表達式1[,數(shù)字表達式2])[,數(shù)組名2(數(shù)字表達式1[,數(shù)字表達式2])]?
每個數(shù)組的每個元素都可單獨使用,如同一個內存變量,稱為下標變量,下標起始值為1。
例如,DIMENSION ARRAY1(8,20),X1(30)定義了兩個數(shù)組,數(shù)組名分別為ARRAY1和X1,前一個數(shù)組共有20×8=160個元素:ARRAY1(l,l)、ARRAY1(l,2)?? ARRAY1(l,20),ARRAY1(2,1)?ARRAY1(8,20)。對各元素也可用單下標取用其值,如用ARRAY1(l),ARRAY1(2)?ARRAY1(160)也可訪問該數(shù)組各元素,與前面雙下標表示形式一一對應。
6.PUBLIC ARRAY
意義:定義全局性內存變量數(shù)組。
格式:PUBLIC ARRAY 數(shù)組名(數(shù)字表達式1[,數(shù)字表達式2])[,數(shù)組名2(數(shù)字表達式1[,數(shù)字表達式2])]?
7.=
意義:賦值語句。
將表達式的值賦值給一個內存變量。對變量賦值后,該變量類型也即確定為表達式返回值的類型。對一個變量可重復賦值,也可改變變量的類型。但為了保證程序的清晰和結構完整,建議在一個系統(tǒng)中每個變量名應有確定的意義和數(shù)據(jù)類型。
8.STORE
意義:同時對多個變量賦值命令。
格式:STORE 表達式 TO變量1[,變量2]?
在程序運行時常要求用戶輸入控制參數(shù)或數(shù)據(jù),實現(xiàn)此功能語句我們稱為人機對話語句。在程序中如插入人機對話語句,用戶可借助鍵盤輸入參數(shù)或控制量賦值給變量??刂瞥绦蜃呦?,或用于不同數(shù)據(jù)處理。在程序執(zhí)行到這類語句時,將停止運行,在屏幕上顯示命令中附注的提示信息,同時等待用戶從鍵盤輸入數(shù)據(jù),賦給所指定的變量。完成賦值之后再接著運行下一條語句。在VFP中這類語句可在主控程序中或在調試程序時使用,在表單程序中使用文本框等各種控件及消息框代替它們。
9.INPUT
意義:輸入各種類型數(shù)據(jù)賦給內存變量
格式:INPUT “提示信息” TO 內存變量名
本命令允許輸入字符類型、數(shù)值類型、日期類型、邏輯類型等不同類型的數(shù)據(jù),要求輸入數(shù)據(jù)是字符類型時,數(shù)據(jù)兩端要加定界符,例“張平”;輸入數(shù)據(jù)是日期類型時,要按{MM/DD/YY}或設定的格式,例{12/21/00};邏輯類型按.T.、.F.格式。
用戶輸入還可以是包括變量名及函數(shù)在內的表達式,但變量必須是己賦值的,表達式是可以計算出確定值的。用戶輸入完后回車表示輸入結束。
例:INPUT“請輸入初始日期:” TO D1
屏幕上顯示:“請輸入初始日期:”,光標在此句之后。用戶可輸入{05/10/96}。
此時用戶如果執(zhí)行命令:?D1
屏幕上將顯示:05/10/96
10.ACCEPT
意義:輸入字符串賦給變量。
格式:ACCEPT[“提示內容”]TO內存變量名
該命令和INPUT命令區(qū)別有兩點:
.輸入數(shù)據(jù)均被視為字符類型。
.輸入數(shù)據(jù)兩端不需加定界符,如加了定界符,定界符被視作字符串的一部分。
11.WAIT
意義:接收單個字符賦給變量,或中斷程序,按任意鍵后繼續(xù)。
格式:WAIT [“提示信息”] TO 內存變量名
該命令與ACCEPT命令不同點在于只接收從鍵盤輸入的一個字符,用戶輸入一個字符后無須回車。該命令也可用在VFP表單程序的某個事件中,用于中斷該事件的執(zhí)行,讓屏幕顯示程序運行的中間結果,按某個鍵或單擊鼠標后再繼續(xù)執(zhí)行。
12.GET
意義:格式化輸入數(shù)據(jù),給內存變量賦值或修改表中當前記錄字段內容。
格式:@ 行號,列號 GET 內存變量名或字段名
[FUNCTION功能代碼][PICTURE格式代碼][DEFAULT表達式][MESSAGE提示信息]
[RANGE輸入值范圍下限,輸入值范圍上限][SIZE文本框高度,文本框寬度][VALID 條件表達式]
該命令可用于對內存變量賦值,也可用于修改當前打開表中當前記錄中指定字段的內容。如對內存變量賦值且省略DEFAULT選項,在使用此語句時,必須已對該內存變量賦值。否則按此選項中表達式對內存變量初始化。
本命令執(zhí)行后只顯示內存變量或字段當前值,要到執(zhí)行命令“READ”時,此語句方被激活,程序停止執(zhí)行,等待用戶從鍵盤輸入數(shù)據(jù),直待回車后才繼續(xù)執(zhí)行。行號、列號為當前窗口中字符行和列的位置號。行號與列號允許是小數(shù)。FUNCTION選項用于對輸入內容限制或變化。功能代碼:
A:只允許輸入內容由字母字符組成,包括不允許空格和標點符號。
B:數(shù)值數(shù)據(jù)左對齊,默認格式為右對齊。
I:文本居中對齊。
J:文本右對齊,默認為左對齊。
Sn:限定文本框中字符個數(shù)為n。如S20。
T:去掉前導和后綴空格。
Z:當數(shù)值數(shù)據(jù)值為0時顯示空格。
?。喊炎帜缸址D換為大寫。
PICTURE選項用于限定輸入數(shù)據(jù)的字符類型及大小。功能代碼例:
A:該位為字母或數(shù)字
L:只允許邏輯數(shù)據(jù)。
N:該位為字符或數(shù)字。
X:任何字符。
I:該位為數(shù)字,或數(shù)值數(shù)據(jù)中的符號。
-:標明小數(shù)點位置。,:用逗號分隔左右數(shù)字。
!:將小寫字母轉換為大寫字符。
例:@3,10 GET x1 DEFAULT 0 PICTURE“9999.99”
此時在屏幕第3行的第10列位置顯示方框,其中內容為DEFAULT規(guī)定的初始值0.00,如再發(fā)出命令:READ,將光標落在尚未激活的第一個方框上等待輸入,只能輸入數(shù)字和符號,且整數(shù)部分不多于4位,小數(shù)部分不多于2位,否則將提示“請您重新輸入”。
RANGE、VALID兩個選項用于保證數(shù)據(jù)完整性,輸入數(shù)據(jù)必須在預定范圍內,滿足條件表達式要求時,才可完成賦值操作。本語句還有設置字體、字形和顏色的選項。
在VFP中,綜合上述人機交互命令尤其是@? GET命令的功能和特性,設計了文本框、編輯框等類和控件,便之應用更加方便、簡單,我們將在下一章中介紹。
程序運行結果一般由輸出語句使其顯示在屏幕上或輸出到其他地方,輸出語句可將數(shù)據(jù)輸出到屏幕上顯示也可傳送給打印機或傳送存入到其他文件中。屏幕顯示語句在VFP中一般用在主控程序或調試程序時使用。在表單程序中使用各種控件、消息框代替它們。
13.?|??
意義:計算<表達式表>所指定的各表達式的值,并顯示在屏幕上。
格式:?表達式1[,表達式2]?
用?時,從下一行第一列起顯示結果。用??時,從當前行當前列起顯示結果。
14.SAY
意義:格式化輸出語句。
格式:@行號,列號 SAY表達式[FUNCTION功能代碼] [PICTURE格式代碼][SIZE高度,寬度]
有關選項的意義與@?GET命令相似,此外還有關于字體,顏色設置的選項。若發(fā)出有SET DEVICE TO PRINTER命令,輸出到打印機,否則輸出至屏幕上顯示。
本語句常與@? GET語句合用,合用時,行號、列號指SAY內容顯示所在行、列號,GET變量內容框將放置在SAY內容之后。二.程序控制命令
1.IF?ENDIF命令
意義:分支條件語句,根據(jù)邏輯表達式的值,有選擇的執(zhí)行一組命令。根據(jù)條件表達式的值是.T.還是.F.控制程序流向。
格式:
IF 條件表達式
語句序列1
[ELSE
語句序列2]
ENDIF
IF條件表達式語句是條件語句的開始,ENDIF語句是條件語句的終止。語句序列是若干條順序執(zhí)行的語句。執(zhí)行時首先計算條件表達式的值,如結果為“真”(.T.)則執(zhí)行語句序列l(wèi),執(zhí)行完后退出該語句。如條件表達式不滿足,且有ELSE語句和語句序列2,則執(zhí)行語句序列2。其程序流程圖如圖5.5所示。
圖5.5 分支結構程序流程圖
圖5.6 主控模塊程序流程圖
在一個分支控制語句塊中可以嵌套另一個IF?ENDIF語句塊。【例5.7】主控模塊的程序
程序流程圖如圖5.6所示。編寫程序清單如下: CLEAR &&清屏幕
@ 5,27 SAY “設備管理系統(tǒng)” @ 7,36 SAY “主菜單”
@10,21 PROMPT “1.各種查詢、屏幕修改”+SPAC(16)@11,21 PROMPT “2.數(shù)據(jù)編輯”+SPAC(26)@12,21 PROMPT “3.資產統(tǒng)計”+SPAC(26)@13,21 PROMPT “4.報表打印”+SPAC(26)@14,21 PROMPT “5.系統(tǒng)維護”+SPAC(26)MENU TO m_choic &&等待用戶輸入
IF LASTKEY()=27 &&按Esc鍵返回VFP
RETURN ENDIF
IF m_choic=1
DO sbcx_sc.spr
ELSE
IF m_choic=2
DO sjbj_sc.spr
ELSE
IF m_choic=3
DO zctj_sc.spr
ELSE
IF m_choic=4
DO bbdy_sc.spr
ELSE
IF m_choic=5
DO xtwh_pg
ENDIF
ENDIF
ENDIF
ENDIF ENDIF RETURN
2.CASE
意義:分情況語句,當求解一個問題存在多種情況,如要求對不同選擇執(zhí)行不同的語句序列,可采用分情況語句。該語句一句中列出許多語句成分,每個語句成分給出一個條件表達式,每次只根據(jù)具體條件找出第一個條件表達式值為.T.的語句成分,執(zhí)行該成分語句中的語句序列后退出該語句。
命令格式:
DO CASE
CASE條件表達式1
語句序列1
CASE條件表達式2
語句序列2
?
CASE條件表達式n
語句序列n
[OTHERWISE
語句序列n+1]
END CASE
執(zhí)行該語句時,系統(tǒng)逐一計算條件表達式1的值,條件表達式2的值?只要有一個條件表達式的值為.T.則執(zhí)行其后語句序列,執(zhí)行它后退出本分情況語句。
如到條件表達式n的值仍均為.F.又有OTHERWISE成分,則執(zhí)行語句序列n+l,其程序流程圖如圖5.7所示。
仍如上面主控程序的例子,程序可設計為:
CLEAR &&清屏幕
@ 5,27 SAY “設備管理系統(tǒng)”
@ 7,36 SAY “主菜單”
@10,21 PROMPT “1.各種查詢、屏幕修改”+SPAC(16)
@11,21 PROMPT “2.數(shù)據(jù)編輯”+SPAC(26)
@12,21 PROMPT “3.資產統(tǒng)計”+SPAC(26)
@13,21 PROMPT “4.明細報表打印”+SPAC(22)@14,21 PROMPT “5.系統(tǒng)維護”+SPAC(26)MENU TO m_choic &&等待用戶輸入
IF LASTKEY()=27 &&按Esc鍵返回VFP
RETURN ENDIF
DO CASE
CASE m_choic=1
DO sbcx_sc.spr
CASE m_choic=2
DO sjbj_sc.spr
CASE m_choic=3
DO zctj_sc.spr
CASE m_choic=4
DO bbdy_sc.spr
CASE m_choic=5
DO xtwh_pg
ENDCASE
RETURN
圖5.7 CASE結構程序流程圖
從上面兩段程序可見,對于同一個問題,用DO CASE ?ENDCASE 語句比IF?ENDIF語句要簡潔了并且邏輯關系清晰,因此不容易出錯。在分情況語句中也可嵌入分支條件語句及分情況。它本身也可嵌入到分支條件語句中去使用。
在對數(shù)據(jù)表中數(shù)據(jù)時,常常每條記錄被處理的過程是一樣的,處理語句也就大體相同,如果表中有多少記錄就寫多少條語句是十分困難的,為避免重復書寫,可使用循環(huán)。
3.DO WHILE?.ENDDO
意義:循環(huán)語句,可使多次重復執(zhí)行同一組語句。格式:
DO WHILE條件表達式
語句序列
[LOOP]
[EXIT]
ENDDO
其中“DO WHILE條件表達式”語句稱為循環(huán)起始語句,“ENDDO”語句稱為循環(huán)結束語句,進入此命令時首先檢查條件表達式的值是否為真(.T.)。如果是真,則執(zhí)行語句序列,然后再判斷條件表達式的結果,如仍為真,則繼續(xù)下去。如果為假(.F.)則退出循環(huán),執(zhí)行ENDDO后面的語句。如果進入本命令一開始,條件表達式的值為假,則語句序列一次也不執(zhí)行,就直接轉入執(zhí)行ENDDO后面的語句。其中LOOP意義為結束本次循環(huán),返回循環(huán)體開始。EXIT意義為結束循環(huán),轉入執(zhí)行ENDDO后面的語句。
LOOP語句和EXIT語句一般用在分支條件語句中,因而語句格式為:
DO WHILE 條件表達式1
語句序列1
[IF條件表達式2
LOOP
ELSE
語句序列2
ENDIF]
[IF條件表達式3
EXIT
ELSE
語句序列3
ENDIF]
ENDDO
其程序流程圖如圖5.8所示。
在使用時必須保證經有限次循環(huán)后條件表達式1應變?yōu)榧倩驐l件表達式3的值應變?yōu)檎?,使退出循環(huán)。否則就可能成為死循環(huán)。在條件表達式中的變量稱循環(huán)變量,在數(shù)據(jù)庫中循環(huán)變量可能是內存變量,也可能是表中的指針。必須注意在每次循環(huán)過后,循環(huán)變量的值都要改變并且是向最終使條件表達式1的值為假或條件表達式3的值變真的方向變化,否則就無法滿足前述退出條件。在VFP中有兩類特殊用法。
(1)循環(huán)變量是指針。該用法中有兩種結構①指針首先指向第一條的DO WHILE結構如圖5.9所示。②指向滿足條件記錄的第一條的DO WHILE結構如圖5.10所示。
圖5.8 DO WHILE?ENDDO結構程序流程圖
圖5.9 指針做循環(huán)變量開始指向第一條時的DO WHILE結構流程圖
圖5.10 指針做循環(huán)變量開始指向滿足條件記錄的第一條時 的DO WHILE結構流程圖
格式1:圖5.9實現(xiàn)的語句。
USE(表名)
SELECT工作區(qū)別名
GO TOP
DO WHILE NOT EOF()
語句序列
SKIP
ENDDO
在本格式中,循環(huán)變量是表中指針,首先讓指針指向表的第一條記錄,如果不是文件尾,則執(zhí)行語句序列之后讓指針下移一條,再返回判斷指針是否指向文件尾。這樣一直繼續(xù)下去直到指針指到最后一條記錄的后面,循環(huán)結束。
【例5.8】在學生表中有少數(shù)學生更換了班級,現(xiàn)要求在屏幕上一屏一屏地顯示每個學生的數(shù)據(jù),并提問是否修改班級名稱,如回答“Y”,則提供修改框。
SET TALK OFF
USE學生
KEY=“Y”
GO TOP
DO WHILE NOT EOF()
@3,10 SAY“姓名:”+姓名
@5,10 SAY“班級:”+班級
@7,10 SAY“出生日期:”+DTOC(出生日期)
@9,10 SAY“是否修改,Y/N?’GET KEY
READ
IF UPPER(KEY)=“Y”
@11,10 SAY“請輸入改后班級名稱” GET 班級
READ
ENDIF
SKIP
ENDDO
USE
SET TALK ON
格式2:如果只按某個條件查看記錄,則可用查找語句開始。圖5.10實現(xiàn)語句:
LOCATE FOR條件表達式
DO WHILE NOT EOF()
語句序列
CONTINUE
ENDDO
例5.8中如只查99級學生,顯示其姓名則:
LOCATE FOR “99”$班級
DO WHILE NOT EOF()
?姓名
CONTINUE
ENDDO
(2)當于DO UNTIL的循環(huán)結構。
有些循環(huán)要在執(zhí)行部分語句之后再根據(jù)一個條件表達式判斷是否結束,此時循環(huán)條件可用常量.T.,見圖5.11所示。
圖5.11 DO UNTIL結構程序流程圖
語句格式: DO WHILE.T.語句序列
IF 條件表達式
EXIT ENDIF
ENDDO
【例5.9】求編寫學生表錄入新數(shù)據(jù)的程序,每次錄入一條記錄,之后提問是否繼續(xù),如回答不是“Y”,就停止錄入。
SET TALK OFF
USE 學生
KEY=“ ”
DO WHILE.T.APPEND BLANK
@3,10 SAY“姓名:” GET 姓名
@5,10 SAY“班級:” GET 班級
@7,10 SAY“出生日期:”GET 出生日期
READ
@9,10 SAY“否繼續(xù)?Y/N?” GET KEY
READ
IF UPPER(KEY)<>“Y”
EXIT
ENDIF
ENDDO
USE
SET TALK ON
此語句由用戶輸入Y或N控制程序結束。
上述第一、二兩種格式可以用等價的SCAN循環(huán)取代。
4.SCAN?ENDSCAN循環(huán)語句
意義:在數(shù)據(jù)表中循環(huán)檢查或處理一條條記錄。
命令格式一:
SCAN
語句序列
ENDSCAN
此句等價于前述格式1的語句。
命令格式二:
SCAN FOR條件表達式
語句序列
ENDSCAN
本語序等價于前述格式2的語句。有一些循環(huán)次數(shù)是一定的,或者循環(huán)變量的值在每次循環(huán)中增加的量是相同的,則可應用FOR循環(huán)。
5.FOR?ENDFOR循環(huán)語句
命令格式:
FOR內存變量=初始值 TO 終了值[STEP 增量]
語句序列
ENDFOR
此循環(huán)以某個內存變量為循環(huán)變量,進入循環(huán)時首先給它賦初始數(shù)值,只要不超過終了值,則執(zhí)行語句序列。STEP語句為可選項,指示在每次循環(huán)后循環(huán)變量的增加量。前面執(zhí)行語句序列之后,將循環(huán)變量值增加增量的值,再判斷是否超過終了值,這樣繼續(xù)下去直到超過終了值。增量可為正值也可為負值,省略時默認值是1。如增量為正,則當循環(huán)變量大于終了值時,循環(huán)結柬。如增量為負,則每循環(huán)一次,循環(huán)變量均減小,減少到小于終了值時循環(huán)結束。
例5.8中修改班級名的程序也可寫為:
SET TALK OFF
USE 學生
KEY=“ ”
N=RECCOUNT()&&記錄總條數(shù)
FOR I=1 TO N
@3,10 SAY“姓名:”十姓名
@5,10 SAY“班級:”十班級
@7,10 SAY“出生日期:”+DTOC(出生日期)
@
9、10 SAY“是否修改班級名,Y/N?” GET KEY
READ
IF UPPER(KEY)=“Y”
@11,10 SAY“請輸入改后班級名稱” GET 班級
READ
ENDIF
ENDFOR
USE
SET TALK ON
使用相對指針,如果打開索引,或某些錄入、修改、查詢操作使當前指針位置改變都可能引起錯誤。不如本例中采用物理地址,比較可靠。
【例5.10】要求輸入N個學生的總分X,按總分分成優(yōu)、良、及格、不及格四個等級,統(tǒng)計每個等級的人數(shù)。等級劃分標準為:90-100分為優(yōu),75-89分為良,60-74分為及格,59分及以下為不及格。
SET TALK OFF
DIMENSION M(4)&&定義數(shù)組
STORE 0 TO M&&M所有元素初值設為0
x=0
INPUT“學生人數(shù) N=?” TO N&&計數(shù)循環(huán)
FOR I=1 TO N
?“請輸入第”,I,“人的成績”
@ROW(),20 SAY “X=?” GET X
READ
DO CASE
CASE x>=90
M(l)=M(1)+1&&統(tǒng)計優(yōu)秀生人數(shù)
CASE x>=75
M(2)=M(2)+1
CASE x>=60
M(3)=M(3)+l
CASE x<60 AND x>=0
M(4)=M(4)+1
OTHERWISE
?“輸入數(shù)據(jù)有錯,請重輸”
I=I-1
ENDCASE
ENDFOR
?“優(yōu)、良、及格、不及格人數(shù)各為”,M(1),M(2),M(3),M(4)SET TALK ON
【例5.11】設有商品表,結構為商品(商品代碼,品名,單價,數(shù)量,金額),欲對其中部分商品調動單價,為此建立一個調價表,其結構為調價(商品代碼,原單價,新單價),編寫程序用調價表中新單價數(shù)據(jù)修改商品表中單價與金額。
SET TALK OFF
SELE 1
USE商品
SELE 2
USE 調價
SCAN
代碼1=商品代碼
SELE 1
LOCATE FOR商品代碼=代碼1
IF NOT EOF()
REPL 單價 WITH 調價.新單價、金額 WITH 單價*數(shù)量
ENDIF
SELE 2
ENDSCAN
CLOSE ALL
SET TALK ON
本例中設置二個工作區(qū),分別打開二個表,首先在工作區(qū)2上利用SCAN循環(huán)遍歷調價所有記錄,對每一記錄在商品表中查找有無商品代碼標識相同的記錄,如有,則用新單價更新原單價,并修改金額。由于在非當前工作區(qū)中不能移動指針,不能查詢,不能修改數(shù)據(jù),因而在轉到商品表中查詢之前要將商品表所在工作區(qū)1設為當前工作區(qū),更新以后又轉到工作區(qū)2將調價表中指針指向下一條,再準備按第二個品種調價。
在當前工作區(qū)中可讀取非當前工作區(qū)中數(shù)據(jù),如本例中用 “調價.單價”這樣的格式從工作區(qū)2的調價表中讀取其中指針所指記錄的單價,這種方式稱為聯(lián)訪。如此對多個數(shù)據(jù)表操作十分麻煩,可采用預先建立關聯(lián)的辦法,在一個表中移動指針時,第二個表中指針按關鍵字保持一致的方式跟著移動。
三.其他常用命令
1.SET RELATION
意義:將當前數(shù)據(jù)庫和“別名”工作區(qū)中的表文件關聯(lián)在一起,當前表文件稱為主動表文件,“別名”工作區(qū)中的表文件稱為被關聯(lián)表文件,每當主動表文件中指針移動時,被關聯(lián)表文件中指針也相應移動。
命令格式:SET RELATION TO 字段名 INTO 別名[ADDITIVE]
命令中選用的“字段名”必須同時包含在兩個表文件中,且被關聯(lián)表必須以該字段建立索引文件并打開為主索引文件。每當主動表文件中記錄指針移動時,被關聯(lián)表中記錄指針根據(jù)主索引文件指引指向與之相匹配(索引字段值等于主動表當前記錄該字段的值)的第一條記錄。若找不到匹配記錄,則指針將指向文件尾,EOF()為真(.T.)
如命令無ADDITIVE選項,在建立關聯(lián)時將取消當前數(shù)據(jù)庫與其他數(shù)據(jù)庫的任何關聯(lián),僅保留一個新關聯(lián)。而選了此選項,則原有關聯(lián)均保留,增加一個新關聯(lián)。
要注意的是,如果對應主動表中某記錄在被關聯(lián)表中找不到匹配記錄時,主動表中數(shù)據(jù)被改為0。例5.11中如果調價表中商品包括商品表中全部商品,利用此命令程序可修改為:
USE 調價&&第一個打開表默認置于1號工作區(qū)
INDEX ON 商品代碼 TO INDEX1
SELECT 2
USE 商品
SET RELATION TO 商品代碼 INTO 調價
SCAN
REPLACE 單價 WITH 調價.新單價,金額 WITH 單價*數(shù)量
ENDSCAN
本例中關于被關聯(lián)表中字段名也可用“區(qū)號.字段名”形式對之訪問。
不過使用本程序要求兩表中內容必須匹配,例如例5.11中如商品只有部分調價,在調價表中只有商品表中部分商品,那么該程序將使商品表中不調價商品單價均變?yōu)?。
一般在涉及利用一個表數(shù)據(jù)修改另一個表數(shù)據(jù)時,我們以采用SQL語言中修改命令UPDATE比較好。也可采用全聯(lián)結視圖再對之操作。”
2.RUN
意義:在VFP環(huán)境中調用DOS命令?!?/p>
命令格式:RUN DOS命令或!DOS命令
3.LOAD命令
意義:把匯編或C語言編寫并編譯的二進制文件調入內存命令。
命令格式:LOAD 二進制文件名
4.CALL命令
意義:執(zhí)行由LOAD裝入內存的二進制代碼文件命令。命令格式:CALL 文件名[WITH 字符表達式/內存變量] 其中WITH選項用于向調用程序傳遞參數(shù)。
5.ON ERROR
意義:當出現(xiàn)錯誤時執(zhí)行的命令。
命令格式:ON ERROR 命令
其中命令可為任何VFP語句。在程序調試過程中,可在程序中加入此命令,并設計命令處理程序,在其中可加入顯示ERROR(),MESSAGE(),LINENO()和PROGRAM()的語句,將錯誤代碼、錯誤消息、錯誤行號及程序名稱顯示出來,以幫助發(fā)現(xiàn)錯誤所在,方便糾正錯誤。在應用程序中,有時可能出現(xiàn)一些不影響最終結果的錯誤,我們也可在程序中加入這類錯誤陷阱,所指定的命令可以是一條無效語句,不讓錯誤影響程序運行。
【例5.12】程序出錯時的處理程序及調用方法 主程序:
*---Set system enviroment------
clos data
clea
on erro do showerro with prog(),lineno(),erro(),mess()&&調用出錯程序showerro
語句序列
程序出錯時的處理程序:
para m_prog,m_line,m_num,m_mess&&傳遞參數(shù)
priv m_odcons&&定義局部變量
m_odcons=set('cons')
set cons off
defi wind erro_win from 0,0 to 14,49;
titl ' 系統(tǒng)錯誤 ';
colo gr+/b;
shad doub;
in desktop
move wind erro_win cent
acti wind erro_win
@1,4 say ' 錯誤警告' colo gr+/b
@3,8 say '當前程序無法繼續(xù),按<確定>將返回主調!' colo w+/b
@4,4 say '程序建議:稍后再試或與軟件供應商聯(lián)系.' colo w+/b
@6,4 say '出錯程序:'+m_prog colo w+/b
@7,4 say '出 錯 行:'+allt(str(m_line))colo w+/b
@8,4 say '錯誤代碼:'+allt(str(m_num))colo w+/b
@9,4 say '錯誤內容:'+iif(len(m_mess)<=28,m_mess,subs(m_mess,1,28)+'...')colo w+/b
@2,3 to 2,wcol()-4 colo w/b
@5,3 to 10,wcol()-4 colo w/b
=opendbf('errosave','errosave','shar')&&存放錯誤情況
inse into;
dbferrosave(errodate,errotime,erroprog,erroline,errocode,erromess);
valu(date(),time(),m_prog,m_line,m_num,m_mess)
use in errosave
m_readkey=20
m_cnt=1
do while m_readkey=20
if mod(m_cnt,2)=0
@1,6 say ' 錯誤警告' colo b/b
else
@1,6 say ' 錯誤警告' colo gr+/b
endi
@wrow()-2,wcol()/2-2 get mb_isee func '*th 確定' defa 1 &&colo sche 13
read cycl modal time 0.4
m_readkey=readkey()
m_cnt=m_cnt+1
endd
set cons &m_odcons
clea wind
close data
clea
retu to master&&返回主程序
6.顯示文件目錄命令
格式:DIR [<驅動器>][<路徑>][<文件名>] 功能:顯示指定的磁盤驅動器上的文件名
說明:<文件名>中可帶通配符;命令中不指定文件名,則僅僅顯示指定目錄下的數(shù)據(jù)表文件名。7.清屏命令CLEAR 格式:CLEAR 功能:清除屏幕 8.總清命令CLEAR ALL 格式:CLEAR ALL 功能:關閉所有打開的數(shù)據(jù)表文件、索引文件和其他各種文件,清除已有的內存變量 9.SET TALK ON/OFF
四.程序設計基礎
程序的概念
命令執(zhí)行方式:通過命令菜單或直接在命令窗口輸命令來執(zhí)行,執(zhí)行的結果顯示在屏幕上。程序執(zhí)行方式:以程序的方式來執(zhí)行。
程序是能夠完成一定任務的命令的有序集合,這組命令存放在程序文件(*.prg)中,執(zhí)行程序時,系統(tǒng)按一定的次序自動執(zhí)行包含在程序文件中的命令。
程序的特點
可以利用編輯器,方便地輸入、修改和保存程序??梢岳枚喾N方式、多次運行程序。可以在一個程序中調用另一個程序。
程序的基本要求
正確性,能實現(xiàn)算法的各個步驟,邏輯上正確,對輸入產生的錯誤有檢測措施。通用性,不能只解決一個問題,還考慮解決一類問題。高效率性,編寫執(zhí)行時間短,占用存儲空間少的程序??删S護性,程序應易讀、易懂、易修改。安全性,必須確保安全、可靠。
程序文件的建立
在項目管理器中和菜單中建立
用命令方式:modify command <文件名>
程序的執(zhí)行
從“ 程序” 菜單中選擇“ 運行” 命令方式:do < 文件名> <文件名>中如果沒有指定擴展名,系統(tǒng)將按下列順序尋找程序文件并執(zhí)行:.exe-->.app(應用程序)-->.fxp(編譯程序)-->.prg
當程序文件被執(zhí)行時,文件中包含的命令將被依次執(zhí)行,直到所有的命令被執(zhí)行完畢中,或者執(zhí)行到以下命令:
cancel(終止程序執(zhí)行,返回命令窗口)do(轉去執(zhí)行另一個程序)return(結束當前程序,返回到上級程序,若無上級程序則返回到命令窗口)quit(退出VFP 系統(tǒng),返回到操作系統(tǒng))
程序結構
(1)每個程序都必須有1個文件名,文件名由字符、數(shù)字或下劃線組成,第一個字符必須是字母或漢字,程序擴展名為.PRG(2)程序由若干行數(shù)據(jù)庫命令組成,每行最多寫2048個字符,1行只能寫1條命令,若把一個命令寫成若干行,需在該命令的第1行及中間各行的行尾寫“;”號,但最后一行不寫。(3)注釋行由“*”開頭,用以說明程序的名稱、功能及其他需要說明的問題,“*”是注釋命令,是非執(zhí)行語句,可以寫在程序任一位置。
(4)以“set”開頭的命令為環(huán)境設置命令,一般出現(xiàn)在可執(zhí)行語句的前面。(5)每行程序的后部可以寫由“&&”號引導的注釋。(6)“return”命令是返回命令,表示程序結束。
編寫程序的步驟
舉例:編寫一個簡單的程序:給出一個整數(shù),判斷是奇數(shù)還是偶數(shù)。(1)分析任務,確定方法;(2)分解任務,描述算法;(3)編寫程序,認真檢查;(4)上機調試,糾正錯誤
流程圖
流程圖符號的使用規(guī)則: 流程線的方向是從左到右,自上而下,非標準流向的流程線要用箭頭表示。流程線就盡量避免交叉。
流程圖符號內的文字一律從左到右,自上而下書寫。流程圖符號的注釋應寫在符號右側。
出入口處的連接符應使用相同名稱,表示把它們連接起來。
子程序、過程和自定義函數(shù)
模塊化:按適當?shù)脑瓌t把一個情況復雜、規(guī)模較大的程序系統(tǒng)劃分為一個個較小的、功能相關而又相對獨立的模塊的過程。
模塊:一個在結構上相對獨立的程序段??梢允亲映绦?、過程或自定義函數(shù)。
子程序的基本概念
子程序:總被其它程序調用的,一般不單獨運行的一個程序段。
子程序與主程序的關系:是一種調用和被調用的關系。主程序是能調用其他子程序,而不被其他程序調用的程序,凡能被調用的程序都稱為子程序。程序中至少應有一個主程序,可以有一個或若干個子程序。子程序的使用
①使用模塊化程序設計方法編寫程序時,把各個功能劃分成若干個功能子模塊,把子模塊寫成一個子程序。
②需要反復調用的情況下,可以寫成一個子程序,以節(jié)省存儲空間。
編寫子程序
調用子程序命令格式:
do <子程序名>[ WITH<參數(shù)表>] 子程序返回命令
return [ to master ] 表示返回到上一級子程序或主程序。帶參數(shù)to master表示無論在哪級子程序上,均立即返回主程序。
例
1、對任意給的正整數(shù)A、B、C,編寫程序計算S=A?。?/5)B!+(C!/2)調試子程序 聯(lián)合調試:當主程序和子程序分別編輯完成之后,直接運行主程序。若主程序或子程序有錯,再進行編輯、調試、重新運行,直到輸出正確結果為止。單獨調試:編輯一個模塊,調試一個模塊,各個模塊都調試成功后,加入主程序聯(lián)調。例
2、根據(jù)數(shù)據(jù)庫student.dbf編寫一個菜單程序main.prg,完成對數(shù)據(jù)庫查詢程序cx.prg和刪除程序sc.prg的調用
過程與過程文件
過程是一段程序,它與子程序不同之處在于,子程序是一個獨立文件,而過程是過程文件的一個組成部分,可以把多個過程寫在一個過程文件中。過程的結構:
procedure <過程名> <過程體> return [to master/to <程序名>] 過程名由用戶定義,供調用過程時使用,過程體是一個語句序列,是過程的核心部分,選擇to <程序名>表示返回到“程序名”指定的程序。過程文件的結構
procedure <過程名1> <過程體1> return [to master/to <程序名>] procedure <過程名2> <過程體2> return [to master/to <程序名>] ??
procedure <過程名n> <過程體n> return [to master/to <程序名>] 過程文件的調用
在主程序中,調用過程前,首先要打開過程文件。
命令格式:set proc to <過程文件名>
調用后,要關閉過程文件。
命令格式:set procedure to 或 close procedure 過程的調用
格式:do <過程名> 例
3、根據(jù)數(shù)據(jù)庫student.dbf編寫一個菜單程序gczxc.prg,用過程形式完成對數(shù)據(jù)庫查詢程序cx.prg和刪除程序sc.prg的調用。
自定義函數(shù)命令
命令格式:(1)function <函數(shù)名>(2)return <表達式> 基本格式:
function<函數(shù)名> parameters <參數(shù)表> <語句序列>
return <表達式>
主程序與自定義函數(shù)的組織形式:
舉例計算組合數(shù)的值
編寫K!的函數(shù)。作業(yè)
1、從鍵盤輸入五個數(shù)組,每組有六個數(shù)據(jù),分別用子程序、過程、自定義函數(shù)的方法,輸出每組數(shù)的最大值和最小值。
2、用子程序、過程、自定義函數(shù)三種不同形式對student.dbf數(shù)據(jù)庫編寫一個菜單程序:
系統(tǒng)主菜單
1??追加記錄
2??修改記錄
3??插入記錄
4??刪除記錄
5??輸出記錄
6??退
出