



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VFP常用命令详解VFP命令、函数及程序语句大全(1)VFP命令是ー种实现对数据库系统进行操作的动词或短语。VFP命令可在VFP命令窗口中单独运行,也可编制成程序成批运行,由命令和函数编制的程序可对数据库系统进行自动、复杂的操作,使数据库系统应用起来更加友好、方便。〇VFP常用命令分类表类别命令建立文件类CREATE,MODIFY,COPY,SAVE等数据库操作类USE,CLOSE,COPY,MODIFYSTRUCTURE等数据编辑类BROWSE,EDIT,CHANG,REPLACE,UPDATE等记录指针操作类GOTO,LOCATE,SEEK,FIND,SKIP等记录操作类APPEND,DELETE,INSERT等数据显示类BROWSE,LIST,DISPLAY等数据统计类SUM,COUNT,AVERAGE,TOTAL等存变量操作类ACCEPT,INPUT,READ,SAVE等程序控制类DO,DOWHILE-ENDDO,IF-ENDIF等系统设置类SETTALK,SETDEFAULTTO等□命令格式VFP命令一般由命令动词和控制短语构成。一般格式:命令动词[FROMく源文件〉][TOく目标文件>][记录范围][FOR/WHILEく条件》][FIELDSく字段名表〉][]表示可选,く〉表示必选,/表示或选例如:APPENDFROMC:\RSDA.DBFFOR基本工资>100FIELDS编号,姓名,职称,基本工资。从C:\RSDA.DBF表中把基本工资大于100元的记录添加到当前表添加字段为:编号,姓名,职称,基本工资。COUNTFOR职称="高工"TOGG统计高工的记录数到内存变量GG。控制短语规定了对数据库操作的限制条件:.指向输入输出目标FROM/TOAPPENDFROM,COPYFILETOく目标文件〉.限制记录范围(SCOPE)ALL所有记录NEXT<n>本记录后的第几个记录RECORD<1>第1个记录REST当前记录之后所有记录.选择字段FIELDSく字段表>选择输入/输出的字段。.限制条件FOR/WHILEく条件》FOR基本工资>100.AND.基本工资く200□命令格式规则命令的行为单位,・行书写不完,在未尾加上“;”第二行接着写。必须以命令动词开头,动词后的短语顺序不限。命令中大小写字母等效。命令动词和关键字可以只写前4个字符。不得用命令动词或关键字作为自定义变量、函数、程序名。一.表结构的操作.创建表结构命令1:CREATE[路径][表名]例子:在A盘创建GZ2数据表。CREATEA:GZ2命令2:CREATE[新表名]FROM[旧表名]例子:在A盘由GZ!仓リ建GZ3数据表。CREATEA:GZ3FROMA:GZ1命令3:COPYSTRUCTRUETO潞径][表名]例子:在D盘生成一个与正在使用的表结构相同的新表文件MYCOPYSTRUCTRUETOD:\MY.表结构的显示命令:USTSTRUCTUREDISPLAYSTRUCTURE例子:显示当前数据表在结构。□STSTRUCTURE.表结构的修改命令:MODIFYSTRUCTURE作用:显示表文件结构,并允许修改此表的结构说明:只有在用USE命令打开表文件以后,才能显示或修改表文件的结构。例子:修改当前数据表的结构。MODIFYSTRUCTURE.表文件的打开和关闭.打开命令:USE表名[INDEX索引文件名][EXCLUSIVE]例子:打开A盘GZ1数据表。USEA:\GZ1例子:以独占方式打开当前表文件XXUSEXXEXCLUSIVE.关闭命令:USE例子:关闭当前打开的表。USE.记录指针的定位.绝对定位命令:GO[TO]n|TOP|BOTTOM说明:n定位到第n条记录,TOP定位到最上面一条记录,BOTTOM定位到最下端一条记录.相对定位命令:SKIP[+|-]n说明:它以当前记录为基准前移(-)或后移(+)n个记录,不选任选项,则默认记录指针后移一条记录..表数据的添加.记录的追加命令:APPEND[BLANK]例子:向当前数据表尾部追加记录。APPEND例子:向当前数据表尾部追加一条空记录。APPENDBLANK.记录的插入命令:INSERT[BLANK][BEFORE]例子:在当前记录后插入一条空记录。INSERTBLANK例子:在第3条记录前插入一条记录.GO3INSERTBEFORE.用复制方法建新表记录命令:COPYTO新表名[范围][FIELDS字段表][FOR条件]例子:把当前表中"应发合计”大于1000元的记录复制到新数据表GZ2中。COPYTOA:GZ2FOR应发的>1000.从其他表取数据命令:APPENDFROM表名[FOR条件]例子:把GZ1表中“应发合计”大于1000的记录复制到当前的表后面。APPENDFROMGZ1FOR应发合计>1000.表记录的显示.浏览显示命令:BROWSE[FIELDS字段表][FOR条件]例子:显示当前表中"应发合计"大于io。。元的记录的职エ编号、姓名、应发合计三个字段。BROWSEFIELDS职エ编号,姓名,应发合计FOR应发合计>1000说明:此命令的结果以浏览窗口的形式出现,具有修改功能.2•显示输出命令:LIST|DISPLAY[OFF][<范围>][FIELDS]く表达式表〉[WHILE〈条件>][FOR(条件〉][TOPRINT|TOFILEく文件〉]说明:(1)命令带OFF参数表示不显示记录号(2)范围指定对哪些记录进行操作,(范围包括:RECORDn:第几号记录;NEXTn:当前记录开始的几个记录;REST:自当前记录开始至文件末尾的所有记录;ALL所有的记录。不选范围则隐含范围为ALL)(3)字段名表指在结果中需要出现的字段名,字段名与字段名之间用逗号分隔。不带时指显示所有字段。(4)WHILE后跟条件,FOR后面也跟条件,区别是,WHILE后的条件如果满足,便停止査找;FOR后的条件查找所有满足条件的记录.(5)T0PRINT和TOFILEく文件〉分别表示将显示结果在打印机上打印出来和将显示结果输出到文件。(6)DISPLAY命令在显示记录满屏后,要求用户按任意键继续显示,并且在该命令中,如果省略范围仅显示当前记录。LIST不分屏,如果省略范围显示所有记录。.修改记录内容.编辑或修改的特定记录命令:CHANG|EDIT[范围田FIELDS]字段表][FOR条件][WHILE(条件〉]例子:修改第五条记录CHANGE|EDITRECORD5.成批自动替换记录命令:REPLACE虚围]字段WITH表达式[FOR条件]例子:计算各记录"应发合计”字段的值。REPLACEALL应发合计WITH职务エ资+岗位津贴+保留奖金+保留津贴.删除记录.逻辑删除命令:DELETE[范围][FOR条件](打删除标记).物理删除命令:PACK(删除有删除标记的记录)ZAP(删除所有记录)例子:删除“职エ编号"空白的记录。DELETEALLFOR职エ编号=""PACKハ.数据表排序.物理排序,生成一个新的表文件。命令:SORTTO新表名ON字段名[/A][/D][范围[[FOR条件]例子:把当前表中记录按"应发合计"从大到小重新排序。SORTTOA:GZ3ON应发酎/D.逻辑排序,生成一个索引文件。(-)标准索引文件:IDX命令:新建索引:INDEXON字段名表达式TO索引文件名同时打开:USE表名!NDEX索引文件名之后打开:SETINDEXTO索引文件名重新索引:INDEXON字段名表达式TO索引文イ牛名关闭索引:SETINDEXTO例子:对当前数据表以“应发合计"从大到小排列。INDEXONー应发的TOGZ(二)复合索引文件:CDX命令:新建索弓I:INDEXON字段名TAG标记[ASCEDING|DESCENDING]同时打开:USE表名ORDER[TAG]标记改变索引:SETORDERTO[TAG]标记重新索引:INDEXON字段名TAG标记关闭索引:SETORDERTO删除索引:DELETETAG标记例子:对当前数据表以“应发合计"从大到小排列.INDEXON应发酎TAGHJDESC九.查找记录.顺序查找命令:LOCATEFOR条件[范围]继续查找命令:CONTINUE例子:在当前的表中查找姓"张"的记录。LOCATEFOR姓名="张”.索引查找说明:根据当前的索引来査找记录。在使用命令前先要按准备査找的字段建立索引或排序命令:FIND字符串SEEK表达式用FOUND。检査找到否例子:在当前的表中查找姓"张"的记录。FIND张SEEK"张".査找函数说明:在使用命令前先要按准备查找的字段建立索引或排序函数:SEEKQ例子:在当前的表中査找姓"张"的记录。SEEK("张")十.统计数据表记录个数命令:COUNT[范围][FOR条件][TO变量]例子:统计当前表中"应发合计"大于1000元的人数。COUNTFOR应发合计>1000十一.数据表数值字段的求和命令:SUM[范围][FOR条件][TO变量]例子:统计当前表中"应发合计”字段的总和。SUM应发合计十二.算术平均值的计算命令:AVERAGE[范围][FOR条件][TO变量]例子:统计当前表中"应发合计”字段的平均值。AVERAGE应发合计十三.多功能计算命令:CALCULATE表达式【范围][FOR条件][TO变量]例子:分别统计当前表中"应发合计”字段的人数、总和、平均值。CALCULATECNT(应发等十),SUM(应发酎),AVG(应发封)VFP命令、函数及程序语句大全(2)一.数值运算函数函数操作例结果SQRT(x)求平方根SQRT(9)3INT(x)取整数INT(3.14)3ROUND(x)四舍五入ROUND(3.14159,4)3.1416MOD(x,y)求X除以Y的余数MOD(25,4)1MAX(x,y)求X,Y中的最大值MAX(7,8)8MIN(x,y)求X,Y中的最小值MIN(1,2,3)1二.字符中操作函数函数名操作例结果UPPER(S)小写字母UPPER(abc)ABCLOWER(S)大写字母LOWER(ACD)acdLEN(S)求字符串的长度LEN("中国1号")7AT(S1,S2)在字符串S2,找字符串S1AT("H","CHINA")2SUBSTR(S,I,N)在S字符串中的第I个字符起取N个字符SUBSTRCTECHNOLO',3,3)CHNLEFT(S,N)从字符串S左边取N个字符LEFT(“中国人”,4)中国RIGHT(S,N)从字符串S右边取N个字符S='12345,RIGHT(S,3)345SPACE(N)生成N个空格"合计"+SPACE(2)+"123"合计123TRIM(S)消除字符串尾部空格TRIM("姓名 ")姓名ALLTRI(S)消除字符串中所有空格ALLTRIM("李 丽")李丽STUFF(S1,N1,N2,S2)用字符串S2替换S1中第N1个字符起的N2个字符STUFF("NOW",2,1,"E")NEW
&宏替换P=“G2”USE&PUSEG2三.日期和时间函数函数名操作例结果DATE()求当前日期DATE()2001/11/12DATETIME()求当前日期和时间DATETIME()2001/11/12/0:22:33amYEAR(D)求年份YEAR(DATE0)2001MONTH(D)求月份(数值)MONTH(DATETIME())11CMONTH(D)求月份(字符)MONTH(DATETIME0)NovenberDAY(D)求日期DAY(DATE0)12DOW(D)求星期儿(数值)DOW(DATE())1CDOW(D)求星期几(英文)CDOW(DATE())sundayTIME(D)求当前时间TIME(DATE())10:20:38am四.数据类型转换函数函数名操作例结果ASC(S)求第一个字符串的ASCII码ASC(〃what")87CHR(N)求ASCII码的字符CHR(87)wSTR(R,L,D)数值转换成字符,L为长度,D为小数位数X=3.1415STR(X,6,2)3.14VAL(S)字符串转换为数值VAL("123”)123.00CTOD(S)字符串转日期CTODC11/01/2002")11/01/2002DTOC(D)日期转换成字符串DTOC(DATE())11/01/2002DTOS(D)把日期转成年月日式的字符串DTOS(DATE())20021101CTOT(C)字符串转成日期时间型CTOT(11/01/200211/01/2002
10:30:50am)10:30:50amDTOT(D)日期型转为日期时间型DTOT(DATE())11/25/200100:00:01amTTOC(T)日期时间型转为字符型TTOC(DATETIME())11/25/200100:00:01amTTOD(T)日期时间型转为日期型TTOD(DATETIME())11/25/2001IIF(LE,E1,E2)逻辑判断IIF(A>0,"YES","NO")YES五.检测函数函数名操作例结果RECNO()检测当前记录号RECNO〇1RECCOUNT()检测当前记录数RECCOUNT〇12BOF()开始记录BOF〇1EOF()最后记录EOF()12FOUND()返回查找结果FOUND().T.ROW()返回当前行坐标ROW〇1COL()返回当前列坐标COL〇1SYS(N)返回系统状态SYS(13)联机状态VFP命令、函数及程序语句大全(3)VFP提供ー些简单的程序设计语言命令,包括赋值语句、控制语句、设置命令等,我们可根据某种功能的需要,利用这些命令及数据库操作的有关命令构成语句,分行存在文件中(称为命令文件,以.PRG为扩展名,在项目管理器中标为“程序”)或ー些对象的过程或事件处理程序中。如被调用,系统将一条条顺序执行各行命令,如遇到控制语句(IF,DO,CALL,FOR…等),依据控制语句的指定,转移到指定语句再一条条顺序执行。这些命令书写时,每条语句应在一行中写完,如不能写完,可用分号“;”结束,表示下一行继续。两条语句不能写在一行上。每条语句中命令字及选项中保留字大多数可只书写前四个字符。一般ー个简单的VFP应用系统由若干模块组成,各自完成一定的功能,总的系统用ー个总控模块去捽制,通过它调用子模块,层层调用以实现全系统的功能。这种结构如图5.4所示。这种方式便于设计、调试,保证程序的正确性,也容易实现模块共亭,实现软件重用,提高程序设计效率。主模块可由主封面表单、主命令文件和主菜单文件构成;各个模块可由过程、自定义函数、表单、表单集、应用程序或子菜单等构成。ー个表单或ー个表单集中可有一到多个用户界面,可设置到多个命令按钮及其他程序控件,用户可利用按钮及程序控件,产生特定的消息触发执行ー个程序,完成一个功能。应用程序是对一个模块编译后的.APP执行文件,“过程”是由命令组成的程序,以RETURN语句结束,它可为另一个程序所调用,调用执行时遇到RETURN语句将返冋其调用程序。图5.4VFP程序总体结构--变量赋值与显示语句在项目管理器中选“代码ー程序一新建”或在命令框利用命令MODIFYCOMMAND建立命令文件。MODIFYCOMMAND意义:创建命令文件。命令格式:MODIFYCOMMAND文件名例如:MODIFYCOMMANDPROCI执行此命令后,将进入全屏幕编辑状态。如原已建立了该文件prod,将调出该文件在屏幕上显示,用户可对之修改。如是新文件,则用户可利用全屏幕编辑键,输入自己的程序。新文件将自动加上扩展名.PRGoDO意义:执行命令文件程序,有三种方法:①在项目管理器中选“代码f程序f选择程序名f运行”。②在主菜单中选“程序f运行f输入(选择)程序名一运行”。③在程序中或命令窗日中使用DO命令。命令格式:DO程序名[WITH表达式表]程序名可以是上述方式建立的命令文件(.PRG文件)、可执行文件(.EXE文件ハ应用程序(.APP文件),及对.PRG文件编译后的文件(.FXP文件)。如调用DO命令时不带扩展名,则按•EXE文件、.APP文件、.FXP文件、.PRG文件的顺序查找同名程序并执行之。例如:DOPROC1此外,程序名还可能是菜单程序,调用时必须带扩展名(.MPR)。例如,有菜单程序MAIN.MPR,则可如下调出执行:DOMAIN.MPR程序名还可以是事件名或过程名。其中表达式表由多个表达式组成,用逗号分开,在执行时首先计算各表达式的值,并带入被调程序,被调程序第一句应是LPARAMETERS形参表语句,形参表是以逗号分隔的多个内存变量名,其个数应等于调用时的表达式的个数,执行时,首先用调用语句中各表达式的值对应给它们赋值。例如:主程序中:DOPROCIWITH“AB”,21被调程序:LPARAMETERSMl,XO执行时,首先完成赋值:M1="AB”;X0=21,再往下执行。当使用DO运行ー个程序时,包含在其中的命令一直执行,直到下列某一事件发生。遇到RETURN语句,返回到调用程序DO命令的下一句,遇到了CANCEL命令,返回VFP命令状态。遇到QUIT命令退出程序并退出VFP5到达文件尾回到调用前状态;再遇到另ー个DO命令,将转人新程序执行。PUBLIC意义:设置全局性内存变量命令。格式:PUBLIC变量名1[,变量名2]-在不同程序或过程或事件中,同名内存变量的值不一定相同,如要将一个程序(过程、事件)中变量的值传到另ー程序(过程、事件)中,可应用上述命令将它定义成全局变量。PRIVATE意义:设置局部变量的命令。格式:PRIVATE[ALL[LIKE|EXCEPT通配符]!内存变量表]其中选项意义:ALL将所有内存变量说明为局部性变量,ALL[LIKEIEXCEPT通配符]将变量名能与通配符相匹配的内存变量说明为局部性变量。"ALLEXCEPT通配符”将除了能与通配符相匹配的变量名之外的内存变量说明为局部性变量。在程序中,为了一个程序的运行结果不影响另ー个程序的执行,不希望同名变量将值从ー个程序带到另ー个程序而造成干扰。为此,可将该变量定义成局部性变量。DIMENSION意义:定义内存变量数组命令,VFP中可定义ー维或二维数组。格式:DIMENSION数组名(数字表达式1[,数字表达式2])[,数组名2(数字表达式1[,数字表达式2])]…每个数组的每个元素都可单独使用,如同一个内存变量,称为下标变量,下标起始值为lo例如,DIMENSIONARRAY1(8,20),XI(30)定义了两个数组,数组名分别为ARRAY1和XI,前・・个数组共有20X8=160个元素:ARRAY1(1,I)、ARRAY1(1,2)ARRAY1(1,20),ARRAY1(2,1)-ARRAY1(8,20)〇对各元素也可用单下标取用其值,如用ARRAY1(1),ARRAY1(2)-ARRAY1(160)也可访问该数组各元素,与前面双下标表示形式ーー对应。PUBLICARRAY意义:定义全局性内存变量数组。格式:PUBLICARRAY数组名(数字表达式1[,数字表达式2])[,数组名2(数字表达式1[,数字表达式2])]•••=意义:赋值语句。将表达式的值赋值给ー个内存变量。对变量赋值后,该变量类型也即确定为表达式返回值的类型。对ー个变量可重复赋值,也可改变变量的类型。但为了保证程序的清晰和结构完整,建议在ー个系统中每个变量名应有确定的意义和数据类型。STORE意义:同时对多个变量赋值命令。格式:STORE表达式T0变量”,变量2]…在程序运行时常要求用户输入控制参数或数据,实现此功能语句我们称为人机对话语句。在程序中如插入人机对话语句,用户可借助键盘输入参数或控制量赋值给变量。控制程序走向,或用于不同数据处理。在程序执行到这类语句时,将停止运行,在屏幕上显示命令中附注的提示信息,同时等待用户从键盘输入数据,赋给所指定的变量。完成赋值之后再接着运行下一条语句。在VFP中这类语句可在主控程序中或在调试程序时使用,在表单程序中使用文本框等各种捽件及消息框代替它们。INPUT意义:输入各种类型数据赋给内存变量格式:INPUT"提示信息”TO内存变量名本命令允许输入字符类型、数值类型、日期类型、逻辑类型等不同类型的数据,要求输入数据是字符类型时,数据两端要加定界符,例“张平”;输入数据是日期类型时,要按{MM/DD/YY}或设定的格式,例{12/21/00};逻辑类型按.T.、.F.格式。用户输入还可以是包括变量名及函数在内的表达式,但变量必须是己赋值的,表达式是可以计算出确定值的。用户输入完后回车表示输入结束。例:INPUT”请输入初始日期:"TOD1屏幕上显示:“请输入初始日期:”,光标在此句之后。用户可输入{05/10/96}〇此时用户如果执行命令:?D1屏幕上将显不:05/10/96ACCEPT意义:输入字符串赋给变量。格式:ACCEPT[“提示内容”]TO内存变量名该命令和INPUT命令区别有两点:.输入数据均被视为字符类型。,输入数据两端不需加定界符,如加了定界符,定界符被视作字符串的一部分。WAIT意义:接收单个字符赋给变量,或中断程序,按任意键后继续。格式:WAIT[“提示信息”]T0内存变量名该命令与ACCEPT命令不同点在于只接收从键盘输入的ー个字符,用户输入・ー个字符后无须回车。该命令也可用在VFP表单程序的某个事件中,用于中断该事件的执行,让屏幕显示程序运行的中间结果,按某个键或单击鼠标后再继续执行。GET意义:格式化输入数据,给内存变量赋值或修改表中当前记录字段内容。格式:@行号,列号GET内存变量名或字段名[FUNCTION功能代码][PICTURE格式代码エDEFAULT表达式][MESSAGE提示信息][RANGE输入值范围下限,输入值范围上限][SIZE文本框高度,文本框宽度][VALID条件表达式]该命令可用于对内存变量赋值,也可用于修改当前打开表中当前记录中指定字段的内容。如对内存变量赋值且省略DEFAULT选项,在使用此语句时,必须已对该内存变量赋值。否则按此选项中表达式对内存变量初始化。本命令执行后只显示内存变量或字段当前值,要到执行命令“READ”时,此语句方被激活,程序停止执行,等待用户从键盘输入数据,直待回车后オ继续执行。行号、列号为当前窗口中字符行和列的位置号。行号与列号允许是小数。FUNCTION选项用于对输入内容限制或变化。功能代码:A:只允许输入内容由字母字符组成,包括不允许空格和标点符号。B:数值数据左对齐,默认格式为右对齐。I:文本居中对齐。J:文本右对齐,默认为左对齐。Sn:限定文本框中字符个数为n。如S20。T:去掉前导和后缀空格。Z:当数值数据值为〇时显示空格。!:把字母字符转换为大写。PICTURE选项用于限定输入数据的字符类型及大小。功能代码例:A:该位为字母或数字L:只允许逻辑数据。N:该位为字符或数字。X:任何字符。I:该位为数字,或数值数据中的符号。标明小数点位置。,:用逗号分隔左右数字。!:将小写字母转换为大写字符。例:@3,10GETxlDEFAULT0PICTURE“9999.99”此时在屏幕第3行的第10列位置显示方框,其中内容为DEFAULT规定的初始值〇.〇〇,如再发出命令:READ,将光标落在尚未激活的第一个方框上等待输入,只能输入数字和符号,且整数部分不多于4位,小数部分不多于2位,否则将提示“请您重新输入”。RANGE.VALID两个选项用于保证数据完整性,输入数据必须在预定范围内,满足条件表达式要求时,オ可完成赋值操作。本语句还有设置字体、字形和颜色的选项。在VFP中,综合上述人机交互命令尤其是0…GET命令的功能和特性,设计了文本框、编辑框等类和控件,便之应用更加方便、简单,我们将在下一章中介绍。程序运行结果一般由输出语句使其显示在屏幕上或输出到其他地方,输出语句可将数据输出到屏幕上显示也可传送给打印机或传送存入到其他文件中。屏幕显示语句在VFP中・般用在主控程序或调试程序时使用。在表单程序中使用各种控件、消息框代替它们。?1??意义:计算〈表达式表〉所指定的各表达式的值,并显示在屏幕上。格式:?表达式1[»表达式2]…用?时,从下一行第一列起显示结果。用??时,从当前行当前列起显示结果。SAY意义:格式化输出语句。格式:@行号,列号SAY表达式[FUNCTION功能代码][PICTURE格式代码][SIZE高度,宽度]有关选项的意义与@-GET命令相似,此外还有关于字体,颜色设置的选项。若发出有SETDEVICETOPRINTER命令,输出到打印机,否则输出至屏幕上显示。本语句常与Q…GET语句合用,合用时,行号、列号指SAY内容显示所在行、列号,GET变量内容框将放置在SAY内容之后。二.程序控制命令.IF...ENDIF命令意义:分支条件语句,根据逻辑表达式的值,有选择的执行ー组命令。根据条件表达式的值是.T.还是•F,控制程序流向.格式:IF条件表达式语句序列1[ELSE语句序列2]ENDIFIF条件表达式语句是条件语句的开始,ENDIF语句是条件语句的终止。语句序列是若干条»质序执行的语句。执行时首先计算条件表达式的值,如结果为"真"(.T.)则执行语句序列I,执行完后退出该语句。如条件表达式不满足,且有ELSE语句和语句序列2,则执行语句序列2„其程序流程图如图5.5所示。图5.5分支结构程序流程图图5.6主控模块程序流程图在ー个分支控制语句块中可以嵌套另一个IF-ENDIF语句块。【例5.7]主控模块的程序程序流程图如图5.6所示。编写程序清单如下:CLEAR&&清屏幕@5,27SAY“设备管理系统”@7,36SAY“主菜单”@10,21PROMPT“1.各种查询、屏幕修改"+SPAC(16)@11,21PROMPT"2.数据编辑”+SPAC数6)@12,21PROMPT”3.资产统计”+SPAC(26)@13,21PROMPT”4.报表打印"+SPAC(26)@14,21PROMPT“5.系统维护”+SPAC(26)MENUTOm_choic &&等待用户输入IFLASTKEY()=27 &&按Esc键返回VFPRETURNENDIFIFm_choic=lDOsbcxsc.sprELSEIFm_choic=2DOsjbj_sc.sprELSEIFm_choic=3DOzctj_sc.sprELSEIFm_choic=4DObbdy_sc.sprELSEIFm_choic=5DOxtwh_pgENDIFENDIFENDIFENDIFENDIFRETURN
CASE意义:分情况语句,当求解ー个问题存在多种情况,如要求对不同选择执行不同的语句序列,可采用分情况语句。该语句一句中列出许多语句成分,每个语句成分给出ー个条件表达式,每次只根据具体条件找出第一个条件表达式值为的语句成分,执行该成分语句中的语句序列后退出该语句。命令格式:DOCASECASE条件表达式1语句序列1CASE条件表达式2语句序列2CASE条件表达式n语句序列n[OTHERWISE语句序列n+1]ENDCASE执行该语句时,系统逐一计算条件表达式1的值,条件表达式2的值…只要有一个条件表达式的值为.T.则执行其后语句序列,执行它后退出本分情况语句。如到条件表达式n的值仍均为.F,又有OTHERWISE成分,则执行语句序列n+I,其程序流程图如图5.7所示。仍如上面主控程序的例子,程序可设计为:CLEAR&&清屏幕@5,27@7,36@10,21@11,21@12,21@13,21@14,21SAY“设备管理系统”SAY“主菜单”PROMPTPROMPTPROMPTPROMPTPROMPT“1.各种査询、屏幕修改"+SPAC(16)”2.数据编辑”+SPAC(26)“3.资产统计”+SPAC(26)“4.明细报表打印"+SPAC(22)“5.系统维护"+SPAC(26)MENUTOm_choic&&等待用户输入IFLASTKEY()=27&&按Esc键返回VFPRETURNENDIFDOCASECASEmchoic=lDOsbcx_sc.sprCASEm_choic=2DOsjbj_sc.sprCASEm_choic=3DOzctj_sc.sprCASEm_choic=4DObbdy_sc.sprCASEm_choic=5DOxtwh_pgENDCASERETURN图5.7CASE结构程序流程图从上面两段程序可见,对于同一个问题,用DOCASE-ENDCASE语句比IF…ENDIF语句要简洁了并且逻辑关系清晰,因此不容易出错。在分情况语句中也可嵌入分支条件语句及分情况。它本身也可嵌入到分支条件语句中去使用。在对数据表中数据时,常常每条记录被处理的过程是ー样的,处理语句也就大体相同,如果表中有多少记录就写多少条语句是十分困难的,为避免重复书写,可使用循环。DOWHILE-.ENDDO意义:循环语句,可使多次重复执行同一组语句。格式:DOWHILE条件表达式语句序列[LOOP][EXIT]ENDDO其中“DOWHILE条件表达式”语句称为循环起始语句,“ENDDO”语句称为循环结束语句,进入此命令时首先检查条件表达式的值是否为真(.T.)〇如果是真,则执行语句序列,然后再判断条件表达式的结果,如仍为真,则继续下去。如果为假(.F.)则退出循环,执行ENDDO后面的语句。如果进入本命令一开始,条件表达式的值为假,则语句序列一次也不执行,就直接转入执行ENDDO后面的语句。其中LOOP意义为结束本次循环,返回循环体开始。EXIT意义为结束循环,转入执行ENDDO后面的语句。LOOP语句和EXIT语句一般用在分支条件语句中,因而语句格式为:DOWHILE条件表达式I语句序列1[IF条件表达式2LOOPELSE语句序列2ENDIF][IF条件表达式3EXITELSE语句序列3ENDIF]ENDDO其程序流程图如图5.8所示。在使用时必须保证经有限次循环后条件表达式I应变为假或条件表达式3的值应变为真,使退出循环。否则就可能成为死循环。在条件表达式中的变量称循环变量,在数据库中循环变量可能是内存变量,也可能是表中的指针。必须注意在每次循环过后,循环变量的值都要改变并且是向最终使条件表达式1的值为假或条件表达式3的值变真的方向变化,否则就无法满足前述退出条件。在VFP中有两类特殊用法。(1)循环变量是指针。该用法中有两种结构①指针首先指向第一条的DOWHILE结构如图5.9所示。②指向满足条件记录的第一条的DOWHILE结构如图5.10所示。图5.8DOWHILE-ENDDO结构程序流程图图5.9指针做循环变量开始指向第一条时的DOWHILE结构流程
图图5.10指针做循环变量开始指向满足条件记录的第一条时的DOWHILE结构流程图格式1:图5.9实现的语句。USE(表名)SELECT工作区别名GOTOPDOWHILENOTEOF()语句序列SKIPENDDO在本格式中,循环变量是表中指针,首先让指针指向表的第一条记录,如果不是文件尾,则执行语句序列之后让指针下移一条,再返回判断指针是否指向文件尾。这样一直继续下去直到指针指到最后一条记录的后面,循环结束。【例5.8]在学生表中有少数学生更换了班级,现要求在屏幕上ー屏ー屏地显示每个学生的数据,并提问是否修改班级名称,如回答“Y”,则提供修改框。SETTALKOFFUSE学生KEY="Y"GOTOPDOWHILENOTEOF()@3,10SAY”姓名:"+姓名@5,10SAY"班级:”+班级@7,10SAY“出生日期:“+DTOC(出生日期)@9,10SAY“是否修改,Y/N?'GETKEYREADIFUPPER(KEY)=“Y”@11,10SAY“请输入改后班级名称"GET班级READENDIFSKIPENDDOUSESETTALKON格式2:如果只按某个条件查看记录,则可用查找语句开始。图5.10实现语句:LOCATEFOR条件表达式DOWHILENOTEOF〇语句序列CONTINUEENDDO例5.8中如只查99级学生,显示其姓名则:LOCATEFOR“99"$班级DOWHILENOTEOF()?姓名CONTINUEENDDO(2)当于DOUNTIL的循环结构。有些循环要在执行部分语句之后再根据•个条件表达式判断是否结束,此时循环条件可用常量.T.,见图5.II所示。图5.11DOUNTIL结构程序流程图语句格式:DOWHILE.T.语句序列IF条件表达式EXITENDIFENDDO【例5.9】求编写学生表录入新数据的程序,每次录入一条记录,之后提问是否继续,如回答不是“Y”,就停止录入。SETTALKOFFUSE学生KEY="”DOWHILE.T.APPENDBLANK@3,10SAY"姓名:"GET姓名@5,10SAY“班级:”GET班级@7,10SAY“出生日期:”GET出生日期READ@9,10SAY“否继续?Y/N?”GETKEYREADIFUPPER(KEY)<〉“Y"EXITENDIFENDDOUSESETTALKON此语句由用户输入丫或N控制程序结束。上述第一、二两种格式可以用等价的SCAN循环取代。SCAN-ENDSCAN循环语句意义:在数据表中循环检查或处理一条条记录。命令格式ー:SCAN语句序列ENDSCAN此句等价于前述格式1的语句。命令格式二:SCANFOR条件表达式语句序列ENDSCAN本语序等价于前述格式2的语句。有一些循环次数是一定的,或者循环变量的值在每次循环中增加的量是相同的,则可应用FOR循环。FOR-ENDFOR循环语句命令格式:FOR内存变量=初始值TO终了值[STEP增量]语句序列ENDFOR此循环以某个内存变量为循环变量,进入循环时首先给它赋初始数值,只要不超过终了值,则执行语句序列。STEP语句为可选项,指示在每次循环后循环变量的增加量。前面执行语句序列之后,将循环变量值增加增量的值,再判断是否超过终了值,这样继续下去直到超过终了值。增量可为正值也可为负值,省略时默认值是1。如增量为正,则当循环变量大于终了值时,循环结柬。如增量为负,则每循环一次,循环变量均减小,减少到小于终了值时循环结束。例5.8中修改班级名的程序也可写为:SETTALKOFFUSE学生KEY="”N=RECCOUNT()&&记录总条数FOR1=1TON@3,10SAY"姓名:"十姓名@5,10SAY“班级:”十班级@7,10SAY“出生日期:“+DT0C(出生日期)@9、10SAY“是否修改班级名,Y/N?”GETKEYREADIFUPPER(KEY)=“Y”@11,10SAY"请输入改后班级名称"GET班级READENDIFENDFORUSESETTALKON使用相对指针,如果打开索引,或某些录入、修改、查询操作使当前指针位置改变都可能引起错误。不如本例中采用物理地址,比较可靠。【例5.10】要求输入N个学生的总分X,按总分分成优、良、及格、不及格四个等级,统计每个等级的人数。等级划分标准为:90—100分为优,75—89分为良,60-74分为及格,59分及以下为不及格。SETTALKOFFDIMENSIONM(4)&&定义数组STORE0TOM&&M所有元素初值设为〇x=0INPUT"学生人数N=?”TON&&计数循环FOR1=1TON?“请输入第”,I,“人的成绩”@ROW〇,20SAY“X=?”GETXREADDOCASECASEx>=90M(1)=M(1)+1&&统计优秀生人数CASEx>=75M(2)=M(2)+1CASEx>=60M(3)=M(3)+1CASEx<60ANDx>=0M(4)=M(4)+1OTHERWISE?“输入数据有错,请重输”1=1-1ENDCASEENDFOR?“优、良、及格、不及格人数各为",M(1),M(2),M(3),M(4)SETTALKON【例5.11】设有商品表,结构为商品(商品代码,品名,单价,数量,金额),欲对其中部分商品调动单价,为此建立一个调价表,其结构为调价(商品代码,原单价,新单价),编写程序用调价表中新单价数据修改商品表中单价与金额。SETTALKOFFSELE1USE商品SELE2USE调价SCAN代码1=商品代码SELE1LOCATEFOR商品代码=代码1IFNOTEOF〇REPL单价WITH调价.新单价、金额WITH单价・数量ENDIFSELE2ENDSCANCLOSEALLSETTALKON本例中设置二个工作区,分别打开二个表,首先在工作区2上利用SCAN循环遍历调价所有记录,对每ー记录在商品表中査找有无商品代码标识相同的记录,如有,则用新单价更新原单价,并修改金额。由于在非当前工作区中不能移动指针,不能査询,不能修改数据,因而在转到商品表中查询之前要将商品表所在工作区1设为当前工作区,更新以后又转到工作区2将调价表中指针指向下一条,再准备按第二个品种调价。在当前工作区中可读取非当前工作区中数据,如本例中用“调价.单价”这样的格式从工作区2的调价表中读取其中指针所指记录的单价,这种方式称为联访。如此对多个数据表操作十分麻烦,可采用预先建立关联的办法,在一个表中移动指针时,第二个表中指针按关键字保持一致的方式跟着移动。三.其他常用命令SETRELATION意义:将当前数据库和“别名”工作区中的表文件关联在ー起,当前表文件称为主动表文件,“别名”工作区中的表文件称为被关联表文件,每当主动表文件中指针移动时,被关联表文件中指针也相应移动。命令格式:SETRELATIONTO字段名!NTO别名[ADDITIVE]命令中选用的“字段名”必须同时包含在两个表文件中,且被关联表必须以该字段建立索引文件并打开为主索引文件。每当主动表文件中记录指针移动时,被关联表中记录指针根据主索引文件指引指向与之相匹配(索引字段值等于主动表当前记录该字段的值)的第一条记录。若找不到匹配记录,则指针将指向文件尾,EOF()为真(.T.)如命令无ADDITIVE选项,在建立关联时将取消当前数据库与其他数据库的任何关联,仅保留・个新关联。而选了此选项,则原有关联均保留,增加一个新关联。要注意的是,如果对应主动表中某记录在被关联表中找不到匹配记录时,主动表中数据被改为〇。例5.II中如果调价表中商品包括商品表中全部商品,利用此命令程序可修改为:USE调价&&第一个打开表默认置于I号工作区INDEXON商品代码TOINDEX1SELECT2USE商品SETRELATIONTO商品代码INTO调价SCANREPLACE单价WITH调价.新单价,金额WITH单价・数量ENDSCAN本例中关于被关联表中字段名也可用“区号.字段名”形式对之访问。不过使用本程序要求两表中内容必须匹配,例如例5.11中如商品只有部分调价,在调价表中只有商品表中部分商品,那么该程序将使商品表中不调价商品单价均变为〇〇•般在涉及利用ー个表数据修改另一•个表数据时,我们以采用SQL语言中修改命令UPDATE比较好。也可采用全联结视图再对之操作。”RUN意义:在VFP环境中调用DOS命令。•命令格式:RUNDOS命令或!DOS命令LOAD命令意义:把汇编或C语言编写并编译的二进制文件调入内存命令。命令格式:LOAD二进制文件名CALL命令意义:执行由LOAD装入内存的二进制代码文件命令。命令格式:CALL文件名[WITH字符表达式/内存变量]其中WITH选项用于向调用程序传递参数。ONERROR意义:当出现错误时执行的命令。命令格式:ONERROR命令其中命令可为任何VFP语句。在程序调试过程中,可在程序中加入此命令,并设计命令处理程序,在其中可加入显示ERROR〇,MESSAGE〇,LINENO〇和PROGRAM〇的语句,将错误代码、错误消息、错误行号及程序名称显示出来,以帮助发现错误所在,方便纠正错误。在应用程序中,有时可能出现一些不影响最终结果的错误,我们也可在程序中加入这类错误陷阱,所指定的命令可以是一条无效语句,不让错误影响程序运行。【例5.12】程序出错时的处理程序及调用方法主程序:* Setsystemenviroment closdatacleaonerrodoshowerrowithprog(),lineno(),erro(),mess()&&调用出错程序showerro语句序列程序出错时的处理程序:param_prog,m_line,m_num,mmess&&传递参数privm_odcons&&定义局部变量m_odcons=set('cons,)setconsoffdefiwinderro_winfrom0,0to14,49;titl'系统错误’;cologr+/b;shaddoub;indesktopmovewinderro_wincentactiwinderro_win@1,4say‘错误警告‘cologr+/b@3,8say’当前程序无法继续,按く确定》将返回主调!’colow+/b@4,4say'程序建议:稍后再试或与软件供应商联系.‘colow+/b@6,4say’出错程序:'+m_progcolow+/b@7,4say'出错行:'+allt(str(m_line))colow+/b@8,4say'错误代码:'+allt(str(m_num))colow+/b@9,4say'错误内容:'+iif(len(m_mess)<=28,m_mess,subs(m_mess,1,28)colow+/b@2,3to2,wcol()-4colow/b@5,3to10,wcol()-4colow/b=opendbf('errosave','errosave','shar')&&存放错误情况inseinto;dbf\errosave(errodate,errotime,erroprog,erroline,errocode,erromess);valu(date(),time(),m_prog,m_line,m_num,m_mess)useinerrosavem_readkey=20m_cnt=ldowhilem_readkey=20ifmod(m_cnt,2)=0@1,6say‘错误警告‘colob/belse@1,6say,错误警告‘cologr+/bendi©wrow()-2,wcol()/2-2getmb_iseefunc?*th确定'defa1&&colosche13readcyclmodaltime0.4m_readkey=readkey()m_cnt=m_cnt+lenddsetcons&m_odconscleawindclosedataclearetutomaster&&返回主程序.显示文件目录命令格式:DIR[く驱动器>][〈路径>][〈文件名〉]功能:显示指定的磁盘驱动器上的文件名说明:〈文件名〉中可带通配符;命令中不指定文件名,则仅仅显示指定目录下的数据表文件名。.清屏命令CLEAR格式:CLEAR功能:清除屏幕.总清命令CLEARALL格式:CLEARALL功能:关闭所有打开的数据表文件、索引文件和其他各种文件,清除已有的内存变量.SETTALKON/OFF四.程序设计基础程序的概念命令执行方式:通过命令菜单或直接在命令窗口输命令来执行,执行的结果显示在屏幕上.程序执行方式:以程序的方式来执行。程序是能够完成一定任务的命令的有序集合,这组命令存放在程序文件(*.prg)中,执行程序时,系统按一定的次序自动执行包含在程序文件中的命令。程序的特点可以利用编辑器,方便地输入、修改和保存程序.可以利用多种方式、多次运行程序。可以在ー个程序中调用另ー个程序。程序的基本要求正确性,能实现算法的各个步骤,逻辑上正确,对输入产生的错误有检测措施。通用性,不能只解决一个问题,还考虑解决ー类问题。高效率性,编写执行时间短,占用存储空间少的程序。可维护性,程序应易读、易懂、易修改。安全性,必须确保安全、可靠。程序文件的建立在项目管理器中和菜单中建立用命令方式:modifycommand(文件名〉程序的执行从"程序”菜单中选择“运行"命令方式:do<文件名〉<文件名>中如果没有指定扩展名,系知
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025公司项目部管理人员安全培训考试试题及答案 完整
- 2025年厂里厂里安全培训考试试题【含答案】
- 2025年岗位安全培训考试试题含答案(满分必刷)
- 2025通信设备采购合同范本
- 2025工业用地转让代理合同
- 2025临时电源租赁合同
- 2025授权投资协议合同范本
- 2025商场柜台租赁合同模板
- 2025建筑工程施工合同示范本
- 2025电子产品销售合同模板大全
- 采购合规培训
- 安徽省森林抚育技术导则
- 楼宇保洁员工作流程和标准
- 南京信息工程大学《数理统计》2021-2022学年第一学期期末试卷
- 机场跑道沥青混凝土施工工艺及方案
- DB35T 1844-2019 高速公路边坡工程监测技术规程
- 医院感染相关法律法规课件
- 个人理财-形考作业3(第6-7章)-国开(ZJ)-参考资料
- 2024年上海客运驾驶员从业资格证
- 人教版小学数学五年级下册《分数加减混合运算》教学设计
- 环保材料使用管理规定
评论
0/150
提交评论