VFP语言基础课件_第1页
VFP语言基础课件_第2页
VFP语言基础课件_第3页
VFP语言基础课件_第4页
VFP语言基础课件_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

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

文档简介

VFP语言基础1.字符型数据2.数值型数据4.日期型数据5.日期时间型数据*7.浮点型数据6.逻辑型数据3.货币型数据*8.双精度型数据

*9.整型数据*10.备注型数据*11.通用型数据2.1数据类型常用的数据类型1.字符型(Character)由任意字符组成(字母、汉字、数字、符号和空格等)最大长度可达254个字符看上去象数值型:学号、工号、电话号码、邮政编码2.1数据类型注意:将数字定义为字符型数据时,它不具备数学上的数值含义,不能参加数学运算。2.数值型(Numeric)一般将需要参加数学运算的数据定义成数值型。包含数字0-9、小数点与正负号例:100.12、-3.14

最大长度为20个字节对数值型字段,小数位数在创建字段时确定注意:小数点和小数位数是字段总宽度的一部分Page262.1数据类型3.货币型(Currency)表示货币量的数据,例:$100.356长度为8个字节小数位数超过4位,四舍五入到4位Page262.1数据类型4.日期型(Date)存储格式:yyyymmdd,共占用8个字节dbirthday={^1968/05/20}Dblankdate={}日期格式受SETDATE、SETMARK、SETCENTURY命令的影响工具/选项/区域Page262.1数据类型Page262.1数据类型5.日期时间型(DateTime)描述日期和时间的数据,占用8个字节tdatetime={^2000/4/178:30pm}6.逻辑型(Logical)用来进行各种逻辑判断的数据占用1个字节只有两个值,即真(.T.)和假(.F.)7.浮点型(Float):与数值型数据等价8.双精度型(Double)存储精度较高、位数固定的数值占用8个字节的存储空间9.整型(Integer)无小数部分的数值,占用4个字节Page262.1数据类型只适用于表中的数据类型:10.备注型(Memo):用于存放较长的数据固定占用4个字节的内存空间,用来指向真正的备注内容实际的数据存放在与数据表文件同名的.FPT文件中,并且所存放的内容只受磁盘空间的限制。Page262.1数据类型只适用于表中的数据类型:11.通用型(General):用于存储OLE(ObjectLinkingandEmbedding)对象(电子表格、字处理文档、图片等)的引用通用型数据长度固定为4个字节,实际数据长度仅受磁盘空间的限制。Page262.1数据类型只适用于表中的数据类型:

VFP允许使用常量、变量、数组、记录和对象来存储数据,它们也被称为存储数据的容器常量(Constants)变量(Variables)数组(Arrays)字段(Fields)对象(Objects)Page262.2数据存储容器VFP中的命名规则Page272.2数据存储容器数据容器和自定义函数、过程都需要一个名称命名规则:名称中只能包含字母、下划线“_”、数字符号和汉字符号;名称的开头只能是字母、汉字或下划线,不能是数字,表的字段名不允许以下划线开头;自由表的字段名、表的索引标识名至多只能10个字符,其余名称的长度在1-128个字符之间;避免使用VFP系统的保留字。如:c_Varx_2姓名合法

2xaver#gzx-2use不合法1.常量(Constant)定义:在数据处理过程中其值不发生变化的量类型:

数值型常量,即常数例如:538、-10.5、3.12E+18

货币型常量:数字前加符号$例如:$538、$10.5Page272.2数据存储容器1.常量(Constant)类型:字符型常量,即用定界符(单引号、双引号和方括号)括起来的字符串。例如:

"苏A-0001"

'568'[VFP]Page282.2数据存储容器注意:不能用中文标点符号必须成对匹配如果一种定界符本身是字符串的内容,则需要用另一种定界符表示该字符串。例:"'book'的中文意思是'书'。"空串""和空格串""不同字母区分大小写:"a"和"A"不同1.常量(Constant)类型:逻辑型常量,表示逻辑判断结果。例如:

.T..t..Y..y.表示“真”

.F..f..N..n.表示“假”注意:定界符不可省略Page282.2数据存储容器创建常量使用命令#Define<常量名称>常量值&&创建一个常量

…#undef<常量名称>&&释放一个常量Page282.2数据存储容器创建常量常量值所代表的数据内容,是程序运行时实际使用的值例如:

#DefinenPI3.1415926&&创建常量

r=2.3&&给半径赋值

s=nPI*r*r&&计算圆面积

?s&&输出圆面积值

#undef

nPI&&释放常量

cancel&&程序运行结束

Page282.2数据存储容器1.常量(Constant)类型:日期型常量和日期时间型常量严格日期格式:{^YYYY-MM-DDhh:mm:ssa|p}

系统默认的格式传统日期格式为:{mm/dd/yy

hh:mm:ssa|p}受SETDATE等命令影响Page282.2数据存储容器setstrictdateto0|10:不进行严格日期格式检查

1:进行严格日期格式检查2.变量()定义:在数据处理过程中其值允许随时改变的量字段变量:是在创建表结构时创建的内存变量:直接在程序中通过赋值语句创建内存变量是内存中的一个存储单元;变量名是存储单元的标识;通过变量名读写存储单元中的数据。Page292.2数据存储容器创建变量STORE<数值表达式>TO<内存变量名表>STORE1858TOA1,B1,C1STORE“计算机世界”TOASTORE“12345”TOB内存变量名=<数值表达式>A1=1858A=“计算机世界”B=“12345”Page292.2数据存储容器Store在一条命令中可以为多个变量赋同一个值,等号“=”只能为一个变量赋值访问变量

如果字段和变量同名,则字段具有更高的优先权变量的引用:m.或m->

xh="我是变量"?xh&&显示字段内容

?m.xh&&显示变量内容

?m->xh

&&显示变量内容

?xs.xh&&显示字段内容Page292.2数据存储容器3.数组定义:一种特殊的内存变量,是一组有序数据项的集合。特点:

其中的每个数据项称为数组元素

每个数组元素在数组里的位置是固定的

一般通过称为下标的序号来进行访问

Page302.2数据存储容器例1:表示一个班学生的VFP课程成绩表

a[30]例2:表示一个班学生的VFP、英语、数学课程成绩表

b[30,3]数组的声明

DECLAREX(5),Y(5,2)私有数组

DIMENSIONA(30),B(30,5)私有数组

PUBLICX(3,4)全局数组

LOCALM(9)局部数组Page302.2数据存储容器注意:数组在声明之后,每个元素被默认地赋予.F.值为数组元素赋值例:创建6×3数组,为其中一元素赋值Dimensionarrayname[6,3]Arrayname[1,2]=1113可以用一个语句为所有元素赋相同的值Arrayname=1113Page312.2数据存储容器数值运算符字符运算符日期和日期时间运算符关系运算符逻辑运算符Page322.3运算符★数值运算符

+,-,*,/,%,**,^,()

注意:按优先级高低排列运算符操作示例()子表达式分组。改变表达式中的运算顺序,()中的优先?(8-3)*(18/3)**或^乘方运算?b**2-4*a*c*、/乘、除运算?7*9/3%模运算(即取余数)?365%7+、-加、减运算?3+4-5Page322.3运算符★字符运算符

+,-,$运算符操作示例+将两个字符串连接在一起,结果仍然是字符串?"visual"+"foxpro"?"姓名:"+xs.xm?"今天是:"+DTOC(date())-删除运算符左侧字符串空格后连接起来,空格放到尾部?"ab"-"cd"?xs.ximing-xs.xm$查看左串是否包含在右串中,结果是一个逻辑值?"bc"$"abcde"?'99'$xs.xhPage322.3运算符★日期和日期时间操作符

+,-运算符操作示例+相加?{^2002-7-1}+10?{^2002-7-110:10:10}+50-相减?{^2002-7-1}-50?{^2002-7-110:10:10p}-50?{^2002-7-1}-{^2001-7-1}?{^2002-7-210:10:10a}-{^2002-7-110:10:10p}Page332.3运算符★

注意:不可以对两个日期型或日期时间型数据相加关系操作符:

<,>,=,<>,#,!=,<=,>=,==运算符操作示例<小于比较?23<50>大于比较?"A">"a"=等于比较?{^2005-4-1}=date()<>或#或!=不等于比较?.t.<>.f.<=小于或等于比较?cj.cj<=60>=大于或等于比较?"960001">="960001"==字符串精确等于比较?"李某"=="李"Page332.3运算符★

注意:关系运算符两边的表达式类型要相同1、字符的排序序列:

(1)PinYin(拼音)序列(默认):汉字按拼音序列排列;西文字母由小到大是空格、小写字母、大写字母(2)Machine(机器)序列:按机内码的顺序排列(3)Stroke(笔画)序列:汉字按笔画多少排序;西文字符同拼音序列Page332.3.4关系运算符设置:工具/选项/数据SETCOLLATETO"Machine"一、数据类型

二、数据存储容器

常量、变量、数组

三、运算符

数值、字符、日期和日期时间、关系

四、表达式

五、常用函数第2章VFP语言基础第1部分:语言概述2、字符串精确比较?"BCDE"="BC"?"BC"="BCDE"?"BC"="BC"?"BC"="BC"?"BCDE"="BCDE".F..F..T..T..T..T..F..T..F..T.==不受SETEXACT命令的影响Page342.3.4关系运算符SETEXACTOFF|ONOff:左串比右串长,取左串与右串等长On:不等时,补空格后看是否相等逻辑操作符:NOT,!,AND,ORabNOTaaANDbaORb.T..T..F..T..T..T..F..F..F..T..F..T..T..F..T..F..F..T..F..F.Page332.3运算符★

注意:按优先级高低排列,可使用()改变顺序1.字符表达式

?"教师"+js.xm+"的基本工资是:"+STR(js.jbgz)2.日期表达式?date()-{^2000/12/04}天数3.算术表达式#DEFINEPI3.1415926r=10s=PI*r*r?sPage472.5表达式表达式:通过运算符将常量、变量、函数、字段名等组合起来的可以进行运算的式子。4.逻辑表达式

?(xim='计算机科学系'ORxim='信息管理系')ANDnotxb="女"

注意:在运算过程中,当运算出某个中间结果后,若已经能够确定最终的结果,那么将终止本逻辑表达式中后面部分的运算

如:执行AND前遇到.F.则中止执行逻辑表达式(分析优先级P32)?11<2and((1<27/6)or3^2>9)?1<2or((1<27/6)or3^2>9)Page472.5表达式预先编制好的程序代码,可供VFP程序在任何地方调用;接收一个或多个参数而返回单个值,它可嵌入到一个表达式中;格式:函数名(参数)分类:系统函数和用户自定义函数

X=YEAR(DATE())Page342.4函数2.4函数Page352.4函数常用函数介绍2.字符函数1.数值函数3.日期/时间函数4.数据类型转换函数5.其他常用函数1.取绝对值函数ABS()格式:ABS(<数值表达式>)示例:ABS(-20)、ABS(10-30)2.最大值函数MAX()格式:MAX(<数值表达式1>,<数值表达式2>,……)示例:?MAX(10,20)?MAX(-10,-20)1.数值函数Page362.4函数3.最小值函数MIN()格式:MIN(<数值表达式1>,<数值表达式2>,……)示例:?MIN(10,20)?MIN(-10,-20,-30)4.取整函数INT()格式:INT(<数值表达式>)示例:?INT(5.96)?INT(-8.66)?INT(10.98-2.43)Page372.4函数计算数值表达式的值,并返回其整数部分5.求余数函数MOD()格式:MOD(<数值表达式1>,<数值表达式2>)说明:函数返回值的符号与除数的符号相同;示例:?MOD(23,5)?MOD(23,-5)?MOD(-23,5)?MOD(-23,-5)

数值部分取值:

同号:mod(abs(n1),abs(n2))

异号:abs(n2)-mod(abs(n1),abs(n2))3-22-3Page372.4函数6.四舍五入函数ROUND()格式:ROUND(<数值表达式1>,<数值表达式2>)示例:?ROUND(345.6799,3)?ROUND(345.6799,0)?ROUND(345.6799,-2)Page372.4函数345.6803463007.求平方根函数SQRT()格式:SQRT(<数值表达式>)示例:?SQRT(16)8.随机数函数RAND()格式:RAND()说明:返回一个0~1之间的随机数。示例:?RAND()Page382.4函数小数位数,默认为2位,可用SETDECIMALTO命令设置小数位数2.删除字符串尾部空格函数TRIM()格式:TRIM(<字符表达式>)示例:a="visual"?trim(a)+"foxpro"1.删除字符串最左边和最右边的所有空格函数格式:ALLTRIM(<字符表达式>)示例:a="VFP"?alltrim(a)2.字符函数Page382.4函数Ltrim()删除左侧空格3.计算字符串长度函数LEN()格式:LEN(<字符表达式>)示例:

?LEN("ABCDF")?LEN("ABCDF")X="中国矿业大学"?LEN(X)5812Page382.4函数4.返回位置函数AT()格式:AT(<字符表达式1>,<字符表达式2>,<数值表达式>)注意:数值表达式用于指定第几次出现,默认为1示例:?AT("is","nowisthetime")?AT("e","nowisthetime",1)?AT("e","nowisthetime",2)?AT("are","now

isthetime")?AT("E","nowisthetime")5101500未出现,返回0区分大小写Page392.4函数5.取子字符串函数SUBSTR()格式:SUBSTR(<字符表达式>,<数值表达式1>[,<数值表达式2>])

示例:?SUBSTR("社会经济学",5,4)

?SUBSTR("社会经济学",5,2)

?SUBSTR("社会经济学",5)经济经经济学Page392.4函数6.LEFT()格式:

LEFT(<字符表达式>,<数值表达式>)示例:?LEFT("ABDF",2)

"AB"

7.RIGHT()格式:

RIGHT(<字符表达式>,<数值表达式>)示例:?RIGHT("abde",2)"de"

8.生成空格函数SPACE()格式:SPACE(<数值表达式>)示例:?"北京"+SPACE(3)+"首都"Page392.4函数3.日期和时间处理函数1.系统当前日期函数DATE()

系统当前日期时间函数DATETIME()系统当前时间函数TIME()格式:DATE()、DATETIME()、TIME()2.第几天函数DOW()格式:DOW(<日期/日期时间表达式>)?DOW(DATE())注:星期天为1Page402.4函数3.日期函数DAY()格式:DAY(<日期表达式>/<日期时间表达式>)4.月份函数MONTH()格式:MONTH(<日期表达式>/<日期时间表达式>)5.年份函数YEAR()格式:YEAR(<日期表达式>/<日期时间表达式>)Page412.4函数4.数据类型转换函数

1.字符转换成ASCII码函数ASC()格式:ASC(<字符表达式>)示例:?ASC("ABCD")

注:A的ASC码652.ASCII码值转换成字符函数CHR()格式:CHR(<数值表达式>)示例:?CHR(67)CPage422.4函数3.字符型转换成数值型函数VAL()格式:VAL(<字符表达式>)说明:1)转换时,从左到右返回字符表达式中的数字,如果遇到非数值型字符则停止。如果字符型表达式的第一个字符即非数值型字符,则转换停止,返回0;2)转换后的小数位数,默认为2位,可用SETDECIMALTO命令设置小数位数。示例:?VAL("8769.3456")?VAL("8769AB21")?VAL("AB8769.3421")8769.358769.000.00Page422.4函数6.数值型转换为字符型函数STR()格式:STR(<数值表达式1>[,<数值表达式2>[,<数值表达式3>]])说明:1)如果缺省<数值表达式2>和<数值表达式3>,其输出结果将取固定长度为10位,且只取其整数部分;示例:?str(314.15)值:“314”

?str(1234567890123)值:“1.234E+12”

返回长度小数位数Page432.4函数2)<数值型表达式2>指定转换后的字符串长度,<数值表达式3>指定转换后的小数位数,默认为0位;总长度不够时,首先保证整数。示例:?str(314.15,5)?str(314.15,5,1)?str(314.15,5,2)3)如果<数值表达式2>的值小于整数部分的数字位数,将返回一串星号,表示数值溢出。示例:?str(12345.6789,3)值:***

314314.2314.2Page432.4函数4.字符型转换成日期型函数CTOD()格式:CTOD(<字符表达式>)说明:<字符表达式>必须是一个有效的日期格式。示例:?CTOD("09/23/01")5.日期型转换成字符型函数DTOC()格式:DTOC(<日期型表达式>/<日期时间型表达式>[,1])说明:如果有1选项,则按照年月日的格式输出,无分隔符。示例:?DTOC(date())?DTOC(date(),1)Page432.4函数当前日期格式与传统的日期格式设置要一致2.4函数常用函数数值函数

abs()、max()、min()、int()、mod()、round()、

sqrt()、rand()2.字符函数

alltrim()、trim()、len()、at()、substr()、left()、

right()、space()3.日期/时间函数

date()、datetime()、time()、dow()、day()、

month()、year()4.数据类型转换函数

asc()、chr()、val()、str()、dtoc()、ctod()Page355.其他常用函数1.BETWEEN()格式:

BETWEEN(表达式1,表达式2,表达式3)说明:判断表达式1是否在表达式2和表达式3的值之间,包含等于的情况;三个表达式为相同类型;返回逻辑型数据示例:

?BETWEEN(3,10,15)?BETWEEN(10,10,15)?BETWEEN('a','A','b')?BETWEEN('A','a','P').F..T..F..T.Page442.4函数3.数据类型函数TYPE()格式:

TYPE(<表达式>)说明:返回表达式值的类型,返回值是一个表示数据类型的大写字母,表达式必须加引号。C:字符型,D:日期型,N:数值型,L:逻辑型,M:备注型,G:通用型,U:未定义。

示例:?TYPE('12345')?TYPE('"name"')?TYPE('3>4')?TYPE('answer=42')NCLUPage442.4函数VARTYPE()不需要加引号4.条件测试函数IIF()格式:

IIF(<lExp>,<eExp1>,<eExp2>)说明:逻辑表达式lExp值为真(.T.),返回表达式eExp1的值,否则返回表达式eExp2的值。eExp1和eExp2可以是任意数据类型的表达式。示例:?IIF(DOW(DATE())=1ORDOW(DATE())=7,"今天休息","今天上班")Page452.4函数7.MESSAGEBOX()函数格式:MESSAGEBOX(显示文本[,对话框类型[,对话框标题])功能:显示一个用户自定义对话框。例如:

MessageBox("现在要输入数据吗?",4+32+256,"我的程序")注意:缩写为MESSAGEB()Page452.4函数60MESSAGEBOX()函数按钮设置

第3个按钮为默认512第2个按钮为默认256第1个按钮为默认0默认按钮信息图标64警告信息图标48询问信息图标32停止图标16图标类型重试、取消按钮5是、否按钮4是、否、取消按钮3终止、重试、忽略按钮2确定、取消按钮1确定按钮0按钮数目描述值分组Page462.4函数61MESSAGEBOX()函数所选按钮返回值7否6是5忽略4重试3终止2取消1确定返回值被单击的按钮Page462.4函数5.其他常用函数1.BETWEEN()Page442.4函数3.数据类型函数TYPE()4.条件测试函数IIF()7.MESSAGEBOX()函数2.7程序设计基础

一、VFP程序设计概述

二、顺序结构

三、分支结构

四、循环结构

五、过程和用户自定义函数Page512.7程序设计基础Page512.7程序设计基础程序是为了完成某一具体任务而编写的一系列指令程序设计是利用系统所提供的设计工具,按照程序语言的规范,编写程序代码的过程程序自动执行多条命令程序可被修改并重新运行,且可多次运行VFP程序文件是扩展名为.PRG的文本文件VFP程序设计概述Page522.7程序设计基础2.7.1创建与运行程序创建与修改:“文件”+“新建”或“打开”MODIFYCOMMAND<程序文件名>项目管理器+“代码”运行:“运行”按钮DO<程序文件名>项目管理器:“程序”+“运行”Page522.7程序设计基础

根据不同的情况和条件,控制程序去执行相应操作的语句序列。顺序

由语句行组成,执行时语句顺序执行分支

根据条件表达式的值执行不同的操作循环

使得一组语句组重复执行若干次2.7.2程序结构Page532.7程序设计基础1.顺序结构

顺序语句由语句序列组成,程序执行时,按照语句的顺序,从上而下,一条一条地顺序执行。例如:store"Mary"tonameAge=18?"Hisnameis"+name+",heis";+str(Age,2)+"yearsold."例如:编写程序,计算圆的面积

#DefinePI3.1415926&&创建常量

r=2&&给半径赋值

s=PI*r*r&&计算圆面积

?s&&输出圆面积值

#undefinePI&&释放常量

cancel&&程序运行结束Page532.7程序设计基础1.顺序结构分支语句根据一定的条件决定执行哪一部分的语句序列。有两种分支语句:If语句有一个或两个分支,由条件表达式选择执行case语句有一个或多个分支,执行第一个符合条件的分支2.分支结构Page532.7程序设计基础条件分支结构(if语句)Page532.7程序设计基础1.简单分支结构格式:IF<条件表达式><语句序列>ENDIF注意事项:条件表达式的值必须是逻辑型的语句序列可以是一个或若干个语句IF与ENDIF必须成对出现,缺一不可

例:若变量nWaterTemp(水温度)的值大于100,显示“水沸腾”,否则不执行任何操作。Page532.7程序设计基础1.简单分支结构Accept"请输入水温值:"to

nWaterTemp

IF

val(nWaterTemp)>=100?"水已沸"ENDIF条件分支结构(if语句)Accept在主窗口显示其后文本,在接受输入数据后,将其保存到to指定的变量中在主窗口输入的数据默认为字符型2.选择分支结构格式:IF<条件表达式><语句序列1>ELSE<语句序列2>ENDIFPage532.7程序设计基础条件分支结构(if语句)2.选择分支结构Page532.7程序设计基础条件表达式IF语句序列1语句序列2ENDIF.T..F.条件分支结构(if语句)2.选择分支结构Page532.7程序设计基础例:根据变量X的正负符号情况决定变量Y的值为1或-1:

accept"请输入数字X的值:"toXIFval(X)>0Y=1ELSEY=-1ENDIF?Y条件分支结构(if语句)Page532.7程序设计基础例:查找姓名是“王一平”的教师,显示其工号、姓名、性别

usejslocateforxm='王一平'iffound()displaygh,xm,xb

endifuseDisplay显示记录指针所指记录条件分支结构(if语句)Page532.7程序设计基础例:查找姓名是“王一平”的教师,如找到,显示其工号、姓名、性别,如没有找到,显示“查无此人”

usejslocateforxm='王一平'iffound()displaygh,xm,xbelse@12,6say'查无此人'

endifuse屏幕输出格式命令:@<行,列>say<表达式>条件分支结构(if语句)Page532.7程序设计基础条件分支结构(case语句)格式:DOCASECASE<条件表达式1><语句序列1>

…CASE<条件表达式N><语句序列N>[OTHERWISE<语句序列N+1>]ENDCASE条件1DOCASEENDCASE语句序列1其他语句序列语句序列2条件2语句序列n条件n…Page532.7程序设计基础条件分支结构(case语句)注意事项从第一个CASE开始,计算条件表达式的值,若某个表达式结果为.T.,则执行相应的语句组,然后跳过以后的语句,直到ENDCASE后继续执行。如果所有的条件表达式值都为.F.,则执行OtherWise部分的语句组,然后执行ENDCASE后的语句。CASE语句只执行第一个符合条件的语句组。Page542.7程序设计基础条件分支结构(case语句)例1:判断系统当前日期是星期几.Page542.7程序设计基础today=DOW(DATE())DOCASE

CASEtoday=1 weekday="星期天"

CASEtoday=2 weekday="星期一"

CASEtoday=3 weekday="星期二"

CASEtoday=4 weekday="星期三"

CASEtoday=5

weekday="星期四"

CASE

today=6

weekday="星期五"

CASE

today=7 weekday="星期六"ENDCASE?"今天是"+weekdayPage522.7程序设计基础顺序

由语句行组成,执行时语句顺序执行分支

根据条件表达式的值执行不同的操作If语句case语句

程序结构Delta=b*b-4*a*cDOCASE

CASE

delta>0?"方程有两个不等的实数根:" ??(-b+sqrt(delta))/(2*a)??(-b-sqrt(delta))/(2*a)CASE

delta=0?"方程有两个相等的实数根:"??-b/(2*a)CASE

delta<0?"方程无实数根"ENDCASEPage542.7程序设计基础例2:根据一元二次方程的系数a,b,c,判断方程根IF…ENDIF与DOCASE…ENDCASE必须配对使用条件表达式-其值必须是逻辑值语句行序列-可以是一个或多个命令组成,也可以是条件控制语句组成的嵌套结构DOCASE…ENDCASE每次只能执行一个对应的语句序列,若多个条件为真,则执行第一个后,执行ENDCASE后的语句注意:2.分支结构Page532.7程序设计基础Page542.7程序设计基础循环结构

循环语句使同一个语句组根据一定的条件执行若干次FOR……ENDFORDOWHILE……ENDDOSCAN……ENDSCAN1.FOR…ENDFOR循环语句适用场合:循环次数已知格式:FOR

<循环变量>=<初值>

TO

<终值>[STEP<步长>]<语句组>ENDFOR/NEXTPage552.7程序设计基础循环结构循环体Page552.7程序设计基础执行流程循环变量在初值与终值之间?FOR初值赋给循环变量执行循环体循环变量=循环变量+步长ENDFOR.T..F.例1:计算S=1+2+……+100

S=0&&用于存放累加和

FORI=1TO100STEP1S=S+I

ENDFOR?SPage552.7程序设计基础1.FOR…ENDFOR循环语句100以内的奇数和、偶数和?例2:计算S=1*2*……*100

P=1&&用于存放累乘积

FORI=1TO100P=P*IENDFOR?“100的阶乘=",allt(str(p))Page552.7程序设计基础1.FOR…ENDFOR循环语句例3:计算N的阶乘

Accept"N="toNP=1&&用于存放累乘积

FORI=1TOval(N)P=P*IENDFOR?N,"的阶乘=",allt(str(p))Page552.7程序设计基础1.FOR…ENDFOR循环语句例4:计算P=3*5*7*9*11*……*25

P=1FORI=3TO25STEP2P=P*IENDFOR?allt(str(p))Page552.7程序设计基础1.FOR…ENDFOR循环语句注意事项FOR与ENDFOR/NEXT必须成对出现,缺一不可步长可正可负可省略(缺省时为1)。当初值大于终值时,步长为负数例如:

FORi=10to1step-4??iENDFORPage552.7程序设计基础2.DOWHILE…ENDDO循环语句适用条件:循环次数未知格式:DOWHILE<条件表达式><语句组>ENDDOPage552.7程序设计基础循环结构循环体执行流程条件表达式执行循环体DOWHILE.T..F.ENDDO循环体中要有使得条件表达式最终为.F.的语句或通过EXIT强制退出Page562.7程序设计基础循环语句常用的条件表达式DOWHILEX>5DOWHILE.NOT.BOF():记录指针不在文件头时为.T.DOWHILEBOF():记录指针在文件头时为.T.DOWHILE.NOT.EOF():记录指针未到文件尾部DOWHILEEOF():记录指针已到文件尾部DOWHILE.T.:

永真循环,死循环,需强制退出Page562.7程序设计基础例1:计算S=1+2+……+100I=1S=0DOWHILE

I<=100

S=S+II=I+1ENDDO?SPage562.7程序设计基础2.DOWHILE…ENDDO循环语句100以内的奇数和、偶数和?例2:将ASC字符组成的字符串反序显示变量c变量pabcdeffedcbaLEFT(c,1)SUBSTR(c,2)c=+pp=LEN(c)=0退出循环!循环条件?LEN(c)>0Page562.7程序设计基础2.DOWHILE…ENDDO循环语句Store"abcdef"tocP=space(0)DoWhile

LEN(c)>0P=LEFT(c,1)+Pc=SUBSTR(c,2)Enddo?PPage562.7程序设计基础2.DOWHILE…ENDDO循环语句例3:统计教师表中女教师的人数USEjsrs=0DOWHILE

.NOT.EOF()

IF

js.xb="女"

rs=rs+1

ENDIF

SKIPENDDO@2,10SAY"女教师的人数:"@2,30SAYrsUSEPage562.7程序设计基础2.DOWHILE…ENDDO循环语句3.SCAN…ENDSCAN循环语句适用条件:仅用于处理表中的记录格式:

SCAN[<范围>][FOR<条件>]<语句组>ENDSCAN循环控制条件:EOF()的值Page562.7程序设计基础循环结构例1:扫描JS表中全部记录,显示女教师的工号和姓名。USEJSSCAN

FORXB="女" ?JS.GH,JS.XMENDSCANPage562.7程序设计基础3.SCAN…ENDSCAN循环语句USEJSDOWHILE

NOTEOF()

IFXB="女" ?JS.GH,JS.XM

ENDIF

SKIPENDDO上页的SCAN部分与下面的语句等价:Page562.7程序设计基础例2:扫描JS表中全部记录,逢记录号为双号的,显示其工号和姓名。USEJSSCAN

FORRECNO()%2=0 ?JS.GH,JS.XMENDSCANPage562.7程序设计基础3.SCAN…ENDSCAN循环语句循环结构中的EXIT命令和LOOP命令执行EXIT语句,不管程序执行到什么位置,都强制退出循环,使程序转去执行ENDDO/ENDSCAN/ENDFOR后面的部分。执行LOOP语句,直接跳过本次循环中剩余的语句,使程序转去执行下一次循环。DOWHILE循环,跳到条件表达式FOR和SCAN循环,跳到计算增量的部分Page572.7程序设计基础例,求1~100之间非3的倍数的所有奇数之和

S=0 FORI=1TO100STEP2

IFMOD(I,3)=0 LOOP ENDIF

S=S+I ENDFOR?SPage572.7程序设计基础LOOP命令(短路语句):跳出本次循环例,随机产生一个要求在70~80之间的数

DoWhile.t. x=rand()*100

ifx>70andx<80exit

endif

Enddo?xEXIT命令(循环退出语句)Page572.7程序设计基础4、结构的嵌套所谓嵌套就是在一种程序结构中包含另一种程序结构控制结构相互间可以嵌套Page572.7程序设计基础Page542.7程序设计基础循环结构

循环语句使同一个语句组根据一定的条件执行若干次FOR……ENDFORDOWHILE……ENDDOSCAN……ENDSCAN循环结构中的EXIT命令和LOOP命令Page572.7程序设计基础2.7.3过程和用户自定义函数(UDF)将经常执行的功能对应的一段代码独立出来,创建一个过程或函数(代码量、维护)过程

PROCEDURE

过程名语句组

[return[eExpression]]

ENDPROC函数

FUNCTION

函数名语句组

[return[eExpression]]

ENDFUNC向过程或函数传递参数使过程和函数可以接受参数第一个可执行语句必须为:

PARAMETERS参数表最多可传递27个参数,用逗号分隔Page582.7程序设计基础2.7.3过程和用户自定义函数(UDF)从过程或函数得到返回值用RETURN语句返回一个值给调用程序;省略RETURN,其缺省的返回值为真(.T.)过程和函数的调用DO过程名/函数名过程名/函数名()调用时使用参数

DO过程名/函数名WITH

...

(无返回值)

过程名/函数名(...

)

Page592.7程序设计基础2.7.3过程和用户自定义函数(UDF)Page582.7程序设计基础2.7.3过程和用户自定义函数(UDF)例1:定义一个函数ntoc,当传递给一个0~9之间的数字时,返回一个中文的”零~九”.FUNCTION

ntoc

PARAMETERSi

cString="零一二三四五六七八九"

RETURN

substr(cString,i*2+1,2)ENDFUNCModi

comm

ntoc执行?ntoc(3)例2:将日期型数据转换为形如“xxxx年xx月xx日”的中文日期字符串在命令窗口键入命令Modi

comm

dtocc输入以下程序段FUNCTION

dtocc

PARAMETERSdeDate

cYear=str(year(deDate),4)+"年"

cMonth=str(month(deDate),2)+"月"

cDay=str(day(deDate),2)+"日"

RETURN

cYear-cMonth-cDayENDFUNC按<ctrl>+w保存程序,返回到命令状态执行?dtocc(date())Page592.7程序设计基础过程或自定义函数存储方式位于程序文件的最后每一个保存在一个单独文件中多个保存在一个单独文件中若函数或过程存在于单独文件(过程文件)中,则应使用如下命令访问:SETPROCEDURETO过程文件名Page592.7程序设计基础2.7.3过程和用户自定义函数(UDF)Input"请输入圆的半径:"tor?"圆的面积为:",erea(r)Function

erea

ParametersiPI=3.14159S=PI*i*i

returnS

EndfuncPage592.7程序设计基础例3下列程序通过调用函数erea()来计算圆的面积Input[提示信息]to<内存变量>

将从键盘输入的数据赋值给内存变量,input可以接收任何类型的数据位于程序文件的最后s=0FORi=1TO5s=s+fjC(i)ENDFOR?sFUNCTION

fjC

PARAMETERSxp=1FORn=1TOxp=p*nENDFOR

RETURNpENDFUNC例4下列程序用于计算s=1!+2!+3!+4!+5!Page592.7程序设计基础位于程序文件的最后Wait"请输入你的选择:(1~3)"totbDOCASE

CASE

tb="1"

usejs brow

CASE

tb="2"

usexs brow

CASE

tb="3"

usecj brow

ENDCASE例5:根据选择打开不同的表(optb1.prg)Page592.7程序设计基础wait命令--显示信息并暂停VisualFoxPro的执行,按某个键或单击鼠标后继续执行。Wait"请输入你的选择:(1~3)"totbDOCASE

CASE

tb="1"

dojs1

CASE

tb="2"

doxs1CASE

tb="3"

docj1

ENDCASEusejsbrowJs1.prgxs1.prgusexsbrowusecjbrowcj1.prg例5:根据选择打开不同的表(optb1.prg)Page592.7程序设计基础每一个保存在一个单独文件中SetproceduretojsxscjWait"请输入你的选择:(1~3)"totbDOCASE

CASE

tb="1"

dojs2CASE

tb="2"

doxs2

CASEtb="3"

docj2

ENDCASEJsxscj.prgProcJs2usejsBrowendprocProcxs2usexsBrowendprocProccj2usecjBrowendproc例5:根据选择打开不同的表(optb2.prg)多个保存在一个单独文件中2.7程序设计基础

一、VFP程序设计概述

二、顺序结构

三、分支结构

四、循环结构

五、过程和用户自定义函数Page512.7程序设计基础2.7程序设计基础IF……ENDIF语句2.7程序设计基础练习题

由铁路托运行李,设每张车票托运行李不超过50kg时,运费为0.8元/kg,如果超过50kg,则超过部分的运费为1.2元/kg,编写程序,要求给出行李重量W,计算应缴纳运费X.计算公式:X=0.8×WW≤50KG0.8×50+1.2×(W-50)W>50KG2.7程序设计基础IF……ENDIF语句2.7程序设计基础练习题Input"请输入行李的重量:"toWIFW<=50X=0.8*WELSEX=0.8*50+1.2*(W-50)ENDIF?"托运费用为:",X2.7程序设计基础DOCASE

温馨提示

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

评论

0/150

提交评论