第2章 VF程序设计基础.doc_第1页
第2章 VF程序设计基础.doc_第2页
第2章 VF程序设计基础.doc_第3页
第2章 VF程序设计基础.doc_第4页
第2章 VF程序设计基础.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

Vf程序设计基础(数据类型:数据有不同类型,不同地方用的数据类型是不一样,C,N,D(8),L(1),I(4),T(8),Y(8),M(4)注意有些字段的宽度是系统规定的)21常量与变量 P481、常量(P48)值不变字符型(C):1、三种定界符,单引号、双引号、中括号 (英文的标点符号) ,“”, 必须成对出现,两边一致 2、空串与包含空格的字符串不同 与 要点3、定界符本身也是字符串内容时,需用另外一种定界符为该字符串定界 合法:K“ABC”S,DDD,五一庆祝会非法:ABC,“AAN”, “五一”庆祝会”数值型(N):1、注意科学记数法 5.878E12等于5.878*1012整型 I 宽度系统定义4个字节(不含小数)货币型(Y):1、小数自动四舍五入取4位 2、用8个字节表示(宽度) ? $12345.67896=12345.6790日期型(D):称定界符,称脱字符,分隔符有3种(/,-,.)用8个字节表示(宽度)1、严格的日期格式:2006/09/01 ,任何情况下可以用 2、传统的日期格式受SET STRI TO 0|1的设置影响 3、日期格式的设置命令SET CENTURY ON|OFF 年份用4位|2位 (2010年9月11小题) SET MARK TO 用什么分隔符, -, .如:SET MARK TO - (注意一定加定界符) SET DATE TO YMD 按年月日的格式 Y:年 M:月 D:日 (默认显示是“月/日/年”)日期时间型(T)逻辑型(L):1、用一个字节表示 2、真、假值(.T.和.F.或.Y.和.N.)3、.T.F.为真2、变量(P52)值可以随时更改,变量有内存变量(及数组变量)和字段变量1 命名规则:名字组成可以是字符(包括汉字)、下划线、数字要点:但不能以数字开头,只能以字符(英文、中文)或下划线开头。2010(15)题 合法:A12,AB,_AB 非法:1A,2B2 变量赋值“=“:单个变量赋值 (“=”也可以是关系(比较)运算符,注意区别)STORE TO :多个变量赋相同值A=56 &把数值型常量56赋给变量ASTORE 80 TO D,B,C变量的值是最后一次赋的值(要点)A=24 &把24这个数值型常量赋给变量A,A是数值型变量,其值为24A=BNM &把BNM这个字符型常量赋给变量A,A是字符型变量,其值为BNM? A &结果是BNM字符 Accept to A IF A=123 S=0 ENDIF S=1 ? S A)0 B)1 C)123 D)由A的值确定 (2010年3月笔试29题)内存变量的数据类型由其值决定(要点) A=12 则变量A是一个数值型的内存变量。B=ABC,则变量B是一个字符型的内存变量。3、输出变量的值:?,? A=12 ? A要点:当内存变量和字段变量同名时,优先输出字段变量的值,如要输出内存变量的值,应指明是内存变量 ? M-内存变量或M. 内存变量举例:假设职员表已在当前工作区打开,其当前记录的“姓名”字段值为“李彤”(C型字段)。在命令窗口输入并执行如下命令:姓名=姓名-“出勤”? 姓名屏幕上会显示 AA) 李彤 B) 李彤 出勤 C) 李彤出勤 D) 李彤-出勤(2010年3月笔试27题)4、内存变量其他命令显示(DISP MEMO 或LIST MEMO)LIKE 模糊匹配,*、?表示任意一串或一个(通配符)清除 CLEAR MEMO 例:LIST MEMO LIKE A* 显示以字母A开头的内存变量数组:一般先定义,后使用 P52二维数组F(A,B) F:数组名,A、B是下标,A、B的最小值是 1,共有A*B个元素,每个元素初值都为.F.1、创建或定义数组 DIME F(2,3)或DECLARE F(2,3) 定义一维数组 DIME F(9) 定义二维数组 DIME F(2,3)2、定义数组后,每个元素初值为.F. (要点)3、F=3,则所有元素的值都赋值34、用一维数组的形式访问二维数组:(按行的顺序访问)二维F(1,1)F(1,2)F(1,3)F(2,1)F(2,2)F(2,3)一维F(1)F(2)F(3)F(4)F(5)F(6)(要点)表与数组表当前记录复制到数组元素中:SCATTER TO 数组名 USE CHENGJI &打开数据表CHENGJI GO 6 &指针指向第6条记录 SCATTER TO F & 自动定义一个数组,数组名F,元素和数据表的字段个数相同 ? F(1),F(2)数组复制到表当前记录:GATHER FROM 数组名 2010(12题)2.2表达式 P55 常量、变量、函数通过特定的运算符连接起来 P56 特别注意:数据类型匹配数字表达式:同数学的算术表达式,运算符,()、*、+ 结果:数值 注意:如A是变量,则 (A)是表达式字符表达式:+(完全连接),-(不完全连接)?ABC -ABC 结果:字符日期表达式: 日期-日期,日期+N,日期-N 结果:日期或数值要点:日期+日期是非法 关系表达式: 运算符号P58 结果:逻辑型数值、货币、日期数据比较(先比较“年”,再比较“月”,最后比较“天”)字串包含测试:A、B是字符型变量,A$B,A是B的子串,则为真,否则为假。 ? 女$男女 .t. ? 学生$大学生-.t.假设有一个字段变量:姓名 姓名中含有“张“字,则 张$姓名.t. 姓“张”的记录,则 姓名=张.t. 或 SUBST(姓名,1,2)= 张 -.T. 或 LEFT(姓名,2)= 张 -.T.字符排序:工具选项数据排序序列中设置ASCII码:? MAX(2,12,05), MAX(2,12,05)拼音: ? MIN(章,柳,陈),字符比较: ? 人人民,人ab , abc .F. .F. .T. 要点:1、相等比较运算时,右边字符串同左边字符串的开始部分,为真 2、关系运算符的两边数据一定要匹配 3、和$运算的区别,例查找姓王的同学(=),查找名字中有“王”字的同学($)假设数据表中有字段:姓名,用VF命令LIST FOR 条件,则判定姓王的同学的条件:姓名=王 -.T. 判定姓名中有“王”字的同学的条件:王$姓名-.T. 特别注意:姓名是字段变量,因此不能加定界符字符串精确比较与EXAC设置(要点)P59=:精确比较(绝对等于)SET EXAC ON|OFF:是|否严格 OFF是默认设置1、“=”:不管EXAC 的设置,精确比较“=“要两边完全相同(含空格),则.t.,否则为.f.2、“=”: (1)SET EXAC OFF(非严格比较):右边的字符串同左边字符串的开始部分,.T.(2)SET EXAC ON(严格比较):等长(短的尾部补空格)再进行精确比较(左右是否完全一样) 例: A=AB B=AB C=ABC SET EXAC OFF ? A=B,A=B,B=A,B=C,C=B 结果:.F. .T. .F. .F. .T. SET EXAC ON ? A=B,A=B,B=A,B=C,C=B 结果:.F. .T. .T. .F. .F.逻辑表达式: .T.F. 为真 结果:逻辑型优先级(高低):非(NOT),与(AND),或(OR)与: 且, 两边必须都为真结果才是.T. ,其他都是.F. 。或: 或者, 两边的表达式结果都为.F.时才是.F.,其他都是.T.运算符优先级:算术字符日期关系逻辑例子: ? (10%3=1) AND 15-2=0) OR 电脑!=计算机 ? (1=1) and 13=0) OR 电脑!=计算机 (.T. AND .F. ) OR .T. .F. OR .T. .T.2.3 函数 P61(带*或*和加粗的是要点,其他函数要弄清楚大概功能)数值函数 P61-621、绝对值函数和符号函数 ABS() SIGN()2、平方根函数 SQRT()*4、取整函数 INT() 5、四舍五入函数 ROUND(, )6、余数函数 MOD(, )字符函数 P62-63*1、字符串长度函数 LEN() ? len(space(10)-space(10)2、大小写转换函数upper()、lower()*3、空格字符生成函数 SAPCE()*4、删除前后空格函数 ALLTRIM()A= abcdefg ? len(a)? len(allt(a)*5、取子串函数 SUBSTR、LEFT、RIGHT A=计算机科学技术 ? SUBSTR(A,7,4) -科学 ? LEFT(A,6)- 计算机 ? RIGHT(A,4)- 技术 有如下赋值语句,结果为”大家好”的表达式是 a=”你好” b=”大家”A)b+at(a,1) B)b+right(a,1) C)b+left(a,3,4) D)b+right(a,2)(笔试试卷出现多次)6、计算字串出现次数函数 OCCURS(,) ? OCCU(计,计算机是计算的机器)*7、求子串位置函数AT()结果:数值型 ? AT(is,this is book,1)-3 ? AT(is,this is book,2)-6 ? AT(人民,中华人民共和国)-58、子串替换函数STUFF() ? STUFF(GOOD BYE,6,3,MORNING)9、字符替换函数 CHRTRAN() ? CHRTRAN(ABACAD,ACD,X12)*11、日期时间函数 P65*年份、月份、天函数 ? year(2005/06/28) A=2008/06/28? year(a),MONTH(A),DAY(A) -数值型数据数据类型转换函数 P66*12、数值转换字符 STR(数值表达式,) 数字字符 A=-123.456? STR(A,9,2),STR(A,6,2),STR(A)字符转换数值 VAL(字符表达式) 字符数值 A=-3212B12 ? VAL(A)*13、字符转换成日期 CTOD()*日期转换成字符 DTOC() A=DATE() ? DTOC(A) &转换后输出的格式MM/DD/YYYY ? DTOC(A,1) &带参数1,则转换后输出的格式是YYYYMMDD,没有分隔符 ? LEFT(DTOC(A,1),4) -2010*14、宏替换函数 &,替换出字符型变量的内容 P67 A=10+90 ? a ? &a ,&a+500X=50Y=100Z=”x+y”? 50+&z例:2010年9月笔试16题*15、测试函数 P68-701)值域测试函数 BETWEEN ? BETWEEN(50,50,200) 包含两头 2)空值测试函数 ISNULL .null.相当于不确定(输入CTRL+0)3)“空值”测试函数 EMPTY() ? EMPTY(0) “空值”对于不同的数据类型不同例:? EMPTY(.null.),EMPTY(45),EMPTY(),EMPTY(0)? ISNULL(SPACE(0), ISNULL(.null.), ISNULL(45)4)数据类型测试函数 VARTYPE() ? VARTYPE(TIME() -c &时间函数的数据类型返回值是字符? VARTYPE(123)-n &返回数据类型是数值? vartype(.null.)-X &“空值”的返回值是X*16、表文件头BOF()、尾EOF()、记录号RECNO()、记录个数RECCOUNT()测试函数 例:数据表ABC 有20条记录 USE ABC ? BOF() -.F. SKIP -1 ? BOF() -.T. ? RECNO() - 当前记录号的值是1 GO BOTTOM ? EOF() -.F. Skip ? eof() -.T. ? recno() -注意,当前记录号的值是21 注意:空表的bof()和eof()函数都为真 理解:DO WHILE NOT EOF() 这个循环语句的条件是什么意思 推导: EOF()-尾,值真。 NOT EOF()-非尾,真。要点理解:当指针不是指向文件尾时,运行循环体,直到指针指向文件尾止 USE BMK DO WHILE NOT EOF() DISP &显示当前记录 SKIP &指针下移 ENDDO*17、条件测试函数? IIF(LEN(SPACE(5)5,1,-1) -?例:2010年笔试考试填空第8小题2.4程序与程序文件 P711、注释 &2010/9笔试笔试28题3月11题续行(分号) ;2、程序文件的建立与修改命令 P72MODI COMM 建立以.prg为扩展名的命令文件 运行:DO 文件名,真正运行的是经过编译的文件:.FXP MODI FILE 建立以.txt为扩展名的文本文件 运行:DO 文件名.txt 两者区别,都要求熟练3、简单的输入、输出命令命令输入是否保存数据类型否回车其他INPUT保存N,C,L,D C是字符型数据加定界符ACCE保存C是字符型数据不加定界符WAIT否保存C否字符型数据不加定界符例:input 请输入一个数 to x2.5程序的基本结构 P75结构化程序三种基本结构:顺序结构、选择结构、循环(重复)结构 (笔试要点)一、顺序结构:依次运行程序中的语句二、选择结构:IF-ENDIF 语句和DO CASE-ENDCASE 语句 SET TALK OFF SET TALK OFF CLEAR CLEAR INPU输入一个正整数 to x INPU输入一个正整数 to xIF X=300 do case ? A case x=300ELSE ? A IF X=200 CASE X=200 ?B ? B ELSE CASE X=100 IF X=100 ? C ? C OTHERWISE ELSE ? D ? D ENDCASE ENDIF ENDIFENDIF输入一个数 80 结果是: 输入一个数 120 结果是:要使输出结果为B,X要满足什么条件?改成DO CASE 语句怎么实现?三、循环结构1、条件循环DO WHILEENDDO 语句,注意循环体中的LOOP和EXITI=5DO WHILE I0 ? I I=I-1ENDDO2、FOR -ENDFOR 语句(记数循环),注意循环体中的LOOP和EXIT输入10个数,找出最大的和最小的数 见P81面例子:从键盘输入十个数,找出最大和最小的数3、SCANENDSCAN 语句(扫描循环,针对数据表) P81格式:SCAN FOR 条件 ENDSCAN执行该语句时,记录指针自动、依次在指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令(指针自动向下移动,直到文件尾) 类似 DO WHILE .not. eof() 循环体 SKIP ENDDO例 根据一个“成绩“表的分数填写字段“等级”,分别用上面两个语句设计程序假设“成绩”表有“分数”、“等级”等字段,分数60或以上,等级填“及格”,否则填“不及格”,用DO WHILE 循环设计程序: USE 成绩 &打开成绩表,指针指向第1条记录 DO WHILE NOT EOF() IF 分数=60 REPL 等级 WITH “及格” ELSE REPL 等级 WITH “不及格” ENDIF SKIP &指针下移一条记录 ENDDO 用SCAN FOR 循环设计程序: USE 成绩 &打开成绩表,指针指向第1条记录 SCAN FOR 分数=60 REPL 等级 WITH “及格” ENDS 例 1、把成绩表中所有成绩=60(及格)的记录显示出来 2、把不及格的记录做删除标记(逻辑删除)2.6 多模块程序设计 P82为什么要用到模块设计:将大的应用程序划分为一个个功能单一的模块程序,便于开发、阅读和维护模块:可以是命令文件、子程序、过程文件、过程、(函数)主程序过程有什么作用?&主程序 set talk off inpu请输入一个自然数: to a ? JSJC(a)过程SET TALK ON &下面是过程proc JSJCpara ns=1for x=1 to n s=s*xendforreturn s&过程返回 S的值过程作用:重复调用,精简主程序便于开发、阅读和维护(签名与盖章的关系)过程的定义:PROC 过程名 命令序列 ENDPROC过程可以放在主程序的后面参 数 传 递 P84下面程序ABC.PRG:&主程序开始CLEARSTORE 100 TO X1,X2P4(X1,X2)? “调用过程后X1,X2的值是:”,X1,X2&主程序结束&过程开始PROC P4PARA A,BSTORE A+1 TO ASTORE B+1 TO BENDPROC&过程结束1、过程调用有两种格式:1)DO P4 WITH X1,X2 2)P4(X1,X2)2、认识形参(形式参数),实参(实际参数),形参数目不能少于实参(要点)3、参数传递有:按值传递:SET UDFP TO value 形参变量值的改变不影响实参(单向) X1A X2B按引用传递:SET UDFP TO REFE 形参变量值改变时,实参值也随之改变(双向) X1AX1 X2BX24、怎么传递?(要点)1)如果实参是表达式(变量加括号就是表达式)无论哪一种过程调用格式,形参不影响实参,单向传递2)如果实参是变量1、DO 过程名 WITH 实参1,实参2 双向传递2、过程名(实参1,实参2) 单向传递(默认SET UDFP TO value) 双向传递(设置 SET UDFP TO REFE) (笔试原题)假设有程序ABC.PRG,代码如下:输出结果是什么?&主程序clearsto

温馨提示

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

评论

0/150

提交评论