第2章语言概述及程序设计基础_第1页
第2章语言概述及程序设计基础_第2页
第2章语言概述及程序设计基础_第3页
第2章语言概述及程序设计基础_第4页
第2章语言概述及程序设计基础_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、第二章 VFP程序设计基础2.1 数据类型及数据容器1. 数据类型:数据对象的取值集合。VFP的基本数据类型字段类型代号说明字段宽度 使用示例字符型C由任意字母、数字,空格,汉字和符号组成每个字符为1个字节,最多可有 254 个字符学生的学号或姓名, "8199101" 或 '李立',ss货币型Y货币单位8 个字节工资, $1246.89日期型D包含有年、月,日的数据8 个字节出生日期,02/25/2000日期时间型T包含有年、月、日、时、分、秒的数据8 个字节上班时间,02/25/2000 9:15:15 AM逻辑型L“真”或“假”的布尔值1 个字节课程是

2、否为必修课,.T. 或 .F.数值型N整数或小数在内存中占 8 个字节;在表中占1 至20个字节考试成绩, 83.5通用型GOLE 对象在表中占 4 个字节图片或声音备注型M不定长度的一段文字在表中占 4 个字节学生简历2. 数据容器VFP中用来存储数据的容器有:常量、变量、数组、记录和对象。(1) 常量(constants):一个在操作过程中保持不变的数值或字符串。常量类型数值型常量字符型常量逻辑型常量日期型常量表示方式-25.36"abc","123","中国".T. .F.03/07/2000(2)内存变量(variables)

3、:是内存中的一个存储单元的位置,其中的内容可以变化,但标识该存储位置的名称(即变量名)不变。u 变量的赋值方式: 1) 用 STORE 命令 如:STORE "王兰" TO c1,c2,c3 2) 用赋值操作符 “=” 如:c1 = "王兰" u 变量的作用域: 即变量起使用的有效范围。变量作用域定义作用域的关键字特点局部变量LOCAL只能在一个函数或过程中被访问,其他过程或函数不能访问此变量的数据。当其所属程序停止运行时,局部变量将被释放。私有变量PRIVATE私有变量在 VFP 中是默认的,不需要特殊的关键字定义。但是,如果在更高一级例程(routi

4、ne)中已经有同名变量,可以用PRIVATE 关键字予以声明,以限定其范围。当定义此变量的例程结束时,此变量也被相应释放。可使用私有变量在被调用的函数中共享数据。公共变量PUBLIC可用于所有过程和函数,而不限于定义该变量的过程和函数。可使用全局变量在多个过程或函数之间共享数据,在命令窗口中创建的任何变量自动具有全局属性。u 变量的访问:当变量和字段同名时,字段有优先被访问权。要在变量名前加 m. 或 m -> 以示区别,如 m.cStud 例:对学生表中字段进行访问。u 内存变量的保存与恢复内存变量是系统在内存中设置的临时存储单元,当退出VFP时数据自动丢失,可以使用SAVE TO 命

5、令将变量保存到文件中。Save to filename all like 通配符 |all except 通配符Restore from filename additive(3)数组(array):是存储在一个变量中由单个变量名引用的有序数据集合。在 VFP中,一个数组中的数据不必是同一种数据类型。常用的有一维数组,二维数组。u 数组元素的标识:通过一个数值下标来引用,如 AA(2),AA(2,3)u 数组类型的声明:私有数组 用DECLARE 或 DIMENSION定义全局数组 用PUBLIC定义局部数组 用LOCAL定义DIMENSION/DECLARE/PUBLIC/LOCAL AA(2

6、,5)u 数组元素的赋值:AA=45 &&给数组的名字赋值相当于给数组中所有元素赋值。AA(1)=45 &&给数组中元素赋值。补充:将二维数组转化为一维数组。(4) 记录:表中的一行,由字段组成。 使用命令输出表中的一条记录。Browse/display/list for 2.2 运算符及其表达式1. 命令 即:由用户发出的、指示VFP进行某种操作的指令。如 USE aaa && 打开 一个名为 aaa.dbf 的数据表2. 运算符数值运算符( ) 或 */%(取余数)+ -关系运算符<<=> >=<> 或 !

7、= 或 # = =逻辑运算符()NOT或!(非)AND(和)OR (或)日期和时间运算符+- 注意: 日期型: 天数 时间型: 秒数字符运算符:+- $两个特殊的运算符圆点操作符(.):用于分隔对象的名称以及分隔对象中的属性、事件、方法。范围转变操作符(:):提供了从一个子类中调用一个父类的方法。3. 表达式即:变量、运算符、常量、函数、字段名、控制以及属性的组合,求值结果为单个值。Ø 算术表达式:由算术操作符和数值型数据构成的表达式,结果为数值型。例 ?15%4+1 &&结果为4Ø 字符表达式:由字符操作符和字符型数据构成的表达式结果为字符型。注意:“+”

8、,“-”,“$”Ø 日期表达式:由日期操作符和日期、时间型数据构成的表达式。 注意:1 Dexpression Expression 结果为日期型2 Dexpression-Dexpression 结果为数值型Ø 逻辑表达式:由逻辑操作符和逻辑型数据构成的表达式,结果为逻辑型。ABA.AND.BA.OR.B.NOT.AFFFFTFTFTTTFFTFTTTTFØ 关系表达式:用于对同类型的数据的比较,其运算结果为逻辑型例:?2001/01/12>2001/02/15 &&结果为.F. ? 5>2 &&结果为.T. ? “a

9、bc”>”bcd” &&结果为.F.(1) 设置字符的排序顺序set collate to machine:按照机内码顺序排序空格 <大写字母<小写字母<一级汉字<二级汉字pinyin:(默认)汉字按拼音排序,对于西文字符大小关系空格 <小写字母<大写字母stroke:按汉字书写笔画的多少排序,对于西文字符大小关系空格 <小写字母<大写字母(2) 字符串精确比较 使用“=”进行精确比较会受到SET EXACT ON/OFF的影响:1 . set exact off:如果右边比左边长,则为假,如果右边比左边短,则从左边取与右边

10、等长的字符串与右边进行比较。Set exact off?”bcde”=”bc”, ”bc”=”bcde”, ”bc ”=”bc”? ”bc”=”bc ”, ”bcde”=”bcde”2. set exact on:通过在字符后加空格的方法使两个字符串的长度相等,然后进行比较。Set exact off?”bcde”=”bc”, ”bc”=”bcde”, ”bc ”=”bc”? ”bc”=”bc ”, ”bcde”=”bcde”Ø 名称表达式:由圆括号括起来的一个字符表达式,用来替换命令或函数中的名称。例: DBF_NAME="xs" USE (DBF_NAME)&

11、#216; 宏替换:用宏替换符号 & 表示,并用一个点符号(.)来结束这个宏替换表达式,它与名称表达式具有相似的作用。例: 已知 A="1", B="2", C12="GOOD" 则 C&A&B= nvar=100nvarb=100var_name=”nvar”store 123.4 to &var_namestore 200 to &var_name.b例题:阅读下列程序,并填写运行结果。CLEARx=”OK”STORE “学习” TO yok=努力?&x+(y) 运行以上程序后,屏幕

12、显示的结果时 。2.3 函数 (按照书本的顺序讲解)即:一个预先编制好的模块,可由VFP程序在任何地方调用。函数的使用方法:名称、功能、参数、返回值自定义函数:由用户为自己的应用程序创建的专用函数,可作为独立的程序文件保存在磁盘上也可作为过程文件存放在其他程序中。2.4 程序设计基础1. 基本概念程序:为解决某一问题而设计的一系列指令。主程序:通常被用户直接执行的程序。子程序:在程序中被调用的程序。2.创建与运行程序u 创建程序:VFP程序是包含一系列命令的文本文件,扩展名为.Prg(1) 项目管理器创建(2) Modify Command 程序名u 运行程序(1)在项目管理器中运行(2)Do

13、 程序名 with 参数注意点:程序文件(.prg),编译后的程序文件(.fxp)3. 程序结构:顺序结构,分支结构,循环结构,子程序结构 (1) 顺序结构 :即按程序中的语句顺序依次执行。 举例:计算圆的面积*计算园面积*p=3.1415926 &&园周率r=10&&园的半径s=p*r2l=2*p*r? '园面积为'+alltrim(str(s,10,2)? '园周长为'+alltrim(str(l,10,2)(2) 分支结构条件语句:情况语句:IF 条件 命令组1 ELSE命令组2 ENDIFDO CASE CASE 情况1

14、命令组1 CASE 情况2 命令组2 OTHERWISE其它命令组 ENDCASE举例:1.根据 X的正负情况决定Y的值(1,-1)*根据 X的正负情况决定Y的值(1,-1)if x>0 y=1else y=-1endif?y2根据成绩输出等级X=82Do case Case x>=90 ?”优秀” Case x>=80 ?”良好” Case x>=70 ?”中等” Case x>=60 ?”及格” Case x<60?”不及格”Endcase(3). 循环结构FOR 循环语句(预知循环次数)FOR 变量 = 初值 TO 终值 STEP 步长 命令组ENDF

15、OR | NEXTDO WHILE 循环语句(未知循环次数)DO WHILE 条件 命令组 ENDDOSCAN循环语句(针对全部记录)SCAN 范围 FOR | WHILE 条件 命令组ENDSCAN举例:1。求1到100的所有整数的和(奇数之和)*求100以内的整数之和n=100s=0for I=1 to n step 1 s=s+Iendfor?alltrim(str(n)+”以内的整数和s=”,s2求100的阶乘*100的阶乘p=1for I=1 to n p=p*Iendfor?alltrim(str(n)+”以内的阶乘p=”,p3将由ASSCII码字符组成的字符串进行反序显示,任意字

16、符呢?*将由ASSCII码字符组成的字符串进行反序显示store “abcdefg” to c,ccp=space(0)do while len(c)>0 p=left(c,1)+p c=substr(c,2)enddo?cc+”的反序为:”+p*将由任意字符(包括汉字)组成的字符串进行反序显示store “abcdefg汉语” to c,ccp=space(0)do while len(c)>0 x=asc(left(c,1) if x>127 I=2ElseI=1endifp=left(c,i)+p if i=1 c=substr(c,2) else c=substr(c

17、,3)endifenddo?cc+”的反序为:”+p4. 统计学生籍贯为江苏南京的学生人数*统计学生籍贯为江苏南京的学生人数use xss=0scan if xs.jg=”江苏南京”s=s+1endifendscan?” 籍贯为江苏南京的学生人数”,s循环结构中的LOOP命令和EXIT命令:Ø LOOP是短路语句,表示从此开始下一次循环;Ø EXIT是退出语句,表示跳出循环。举例:1.求1100之间非3的倍数的所有奇数之和。*求1-100之间非3的倍数的所有奇数之和s=0for I=1 to 100 step 2 if mod(I,3)=0loop endif s=s+Ie

18、ndfor?” 1-100之间非3的倍数的所有奇数之和为”,s2随机产生一个要求在70到80之间的数。*随机产生70-80之间的数x=0do while .t. x=rand()*100 if x>70 and x<80exit endifenddo?x(4). 子程序 子程序的的形式可以是一个程序文件,也可以是一个过程或自定义函数。子程序自定义函数过程特点总是被其他程序调用而不单独执行,可以调用其他子程序,不一定要返回一个值。能以一个独立的文件储存,也可包含在调用程序中,必须返回一个值。是一个程序段,是程序的组成部分,一般放在程序的最后。定义方法与程序相同,只是在子程序的结尾加需

19、一条返回命令: RETURN 表达式 |TO MASTER |TO 程序文件名FUNCTION 函数名 PARAMETERS 参数表 命令组RETURN 表达式注:用此命令定义的函数以独立的文件形式储存。PROCEDURE 过程名 PARAMETRS 参数表命令组 RETURN调用方法DO 子程序名WITH 参数表 = 函数名 ( 参数表 )DO 过程名 WITH 参数表 3.过程与用户自定义函数 用户可以将经常执行的具有某种功能的一段代码独立出来,创建一个过程或用户自定义函数。如果需要多次用到该功能,就不必多次编写代码,而只需调用这个过程或自定义函数。(1)过程与自定义函数的定义 过程定义语

20、法: PROCEDURE 过程名 Parameters 参数列表 命令组return 表达式 ENDPROC 函数定义语法: FUNCTION 函数名 Parameters 参数列表 命令组return 表达式 ENDFUNC说明:1。Parameters 用来传递参数 2Return 用于指定过程或自定义函数的返回值,缺省时,返回值为真(.T.)(2) 过程与函数的创建方法方法一: 在命令窗口中输入: MODIFY COMMAND 程序名方法二: 单击文件菜单 新建 程序 新文件 在编辑窗口中编辑程序 完成后关闭 给出合适的程序名及保存位置 。程序的注释:方法1: * | NOTE <

21、注释内容> 可出现在程序中的任何地方方法2: && <注释内容> 一般用于命令的尾部给程序加注释的目的是为了提高程序的可读性。用户创建的过程或自定义函数可以存储在数据库的存储过程中,或以一个程序文件保存一个或多个过程或自定义函数,如果过程或自定义函数存在于单独的程序文件中,该程序文件称为过程文件。(3).过程与自定义函数的调用方法一: 用DO命令do 过程名 in 程序文件名 with 实际参数列表 方法二:用函数的调用方法。Functionname(实际参数列表)方法三:利用SET PROCEDURE TO 命令打开程序文件。 SET PROCEDURE T

22、O programname1do procedurename with parameterlist2.4程序设计事例*以下部分为自定义函数*自定义函数ntocfunction ntoc parameters pdigit local cstring cstring=”零一二三四五六七八九” return substr(cstring,pdigit*2+1,2)endfunc*自定义函数dtocc():将日期型数据转换为“XXXX年XX月XX日”Function dtocc Parameters dedate Cyear=str(year(dedate),4)+”年” Cmonth=str(mo

23、nth(dedate),2)+”月” Cday=str(day(dedate),2)+”日” Return cyear-cmonth-cdayEndfunc FUNCTION JCPARAMETERS num&&传递一个数值参数num,返回num的阶乘s=1FOR n =1 TO nums=s*nENDFORRETURN s*程序功能:计算数列1,1/2,1/3,1/4,1/n之和,当某一项的值与前一项的值之差小于0.001时停止计算。CLEARn=1m=1nSum=0DO WHILE .T.nSum=nSum+1/nm=1/nn=n+1IF m-1/n<0.001exi

24、tENDIFENDDO?"该数列的和为:",nSum*程序功能:统计由ASCII码字符组成的字符串中包含字母的个数CLEARcString="The United States of America is abbreviated to U.S.A."nResult=0DO WHILE LEN(cString)>0c=LEFT(cString,1)IFBETWEEN(c,"a","z") or BETWEEN(c,"A","Z")nResult=nResult+1ENDI

25、FcString=SUBSTR(cString,2)ENDDO? "包含"+ALLT(STR(nResult)+"个英文字母"*以下部分为自定义函数计算S=1!+2!+3!+4!+。+10!s=0FOR n =1 TO 10s=s+fjk(n)ENDFOR ?s*自定义函数fjk()用于计算阶乘FUNCTION sjkPARAMETERS x&&传递一个数值参数x,返回x的阶乘p=1FOR n =1 TO xp=p*nENDFORRETURN pEndfunc历年考试试题示例:1在 Visual FoxPro 系统中,下列命名中不能作为变

26、量名的是 _ 。 姓名 2004姓名 姓名2004 _2004 学生 2在 Visual FoxPro 系统中,下列表示中不属于常量的是 _ 。 .T. T T T 3函数 INT(-3.14) 的返回值是 _ 。 -4 -3 3 4 4执行下列命令后,屏幕上显示的结果是 _ 。 X=ARE YOU Ok? Y=are ?AT(Y,X) 1 .F. .T. 0 5.运行以下程序后,VFP主窗口显示的结果是_。CLEARN=0DO WHILE n10     IF INT(n/2)=n/2     

27、0;  ?”W”     ENDIF     ? “Fox”     n=n+1ENDDOA.显示5行,内容均为WFoxFox              B.显示5行,内容均为WfoxWFoxC.显示4行,内容均为WFoxFox         &#

28、160;    D.显示4行,内容均为FoxFoxW6 .完善下列程序,以显示71000以内能被7整除且含有数字5的所有整数(例如35、 56、 105等)。          FOR n=7 TO 1000                         

29、ch=ALLT(STR(n)              IF   "5"$ch                  ?n            

30、;   ENDIF          ENDFOR7.运行下列程序后,显示的运行结果的第二行为         SET TALK OFFCLEAR        Y="11111111"         FOR I=1 TO LEN(y)         X=LEFT(y, i)         ?SPACE(20-i*2)+x+"*"+x+"="+ALLT(STR(VAL(x)*VAL(x)         END

温馨提示

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

评论

0/150

提交评论