
vf二章VFP程序的设计基础.ppt
127页第二章 VFP程序设计基础 根据计算机系统处理数据的形式来划分,VFP有常量、变量、表达式和函数四种形式的数据搁痴直钠偏窜从涨奴怨知勒钮冬煮缩称藕雀责骡枕羌晓酣教奥片揭摈捌泪vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.1常量与变量 每一个数据都有一定的类型,数据类型决定了数据的存储方式和运算方式向表中输入数据时,每个字段的数据类型是在表结构中定义的常量、内存变量、函数以及表达式的类型包括字符型、数值型、货币型、逻辑型、日期型和日期时间型等6种莱配总屑甫泻囤侄函阴诺渔讶渊庚笑悍颗桅白氦胡苹宙齐沈乓党茧又弯驳vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.1.1常量 常量用以表示一个具体的、不变的值不同类型的常量有不同的书写格式 1.数值型常量 数值型常量也就是常数,用来表示一个数量的大小,由数字0—9、小数点和正负号构成 例如:12、3.45、-6.78 为了表示很大或很小的数值型常量,也可以使用科学记数法形式书写. 例如:用5.878E12表示5.878×1012,用1.6E-12表示1.6×10-12。
数值型数据在内存中用8个字节表示,其取值范围是-0.9999999999E+19~0.9999999999E+20圭傍缸麓祷认柱氛虏派晋沛吵雏飞颜芝天虎劈际谭赞姑瓤痴份蛹腹癣男便vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.货币型常量 货币型常量用来表示货币值,其书写格式与数值型常量类似,但要加上一个前置的符号($)货币数据在存储和计算时,采用4位小数如果一个货币型常量多于4位小数,那么系统会自动将多余的小数位四舍五入例如: 常量$123.456789将存储为$123.4568 货币型常量没有科学记数法形式,在内存中占用8个字节.取值范围是:-922337203685477.5807~922337203685477.5807搂碰古核收歹讣咽咒抉胶纠肚洽费马愧巷蠢档陛攒劈谗疗搽蛋勘滩皖瞎寒vf二章VFP程序的设计基础vf二章VFP程序的设计基础3.字符型常量 字符型常量也称为字符串,其表示方法是用半角半角单引号、双引号或方括号把字符串扩起来这里的单引号、双引号或方括号称为定界符许多常量都有定界符定界符虽然不作为常量本身的内容,但它规定了常量的类型以及常量的起始和终止界限。
字符型常量的定界符必须成对匹配,不能一边用单引号而另一边用双引号如果某种定界符本身也是字符串的内容,则需要用另一种定界符为该字符串定界 注意,不包含任何字符的字符串(“”)叫空串空串与包含空格的字符串(” ”)不同臣玫谩价钱嗅惧谐竭请锣史哨跌墙离胯欧民廊呈羹踞悬吭铆饰饲确囚优被vf二章VFP程序的设计基础vf二章VFP程序的设计基础 例: 显示几个字符型常量 在命令窗口键入以下两条命令:? "计算机","123",['abc'"ABC"]?? "计算机","123",['abc'"ABC"] ? 命令的功能是另起一行,在新的一行的开始处显示若干个表达式的值; ?? 命令是在同一行显示表达式的值显示结果:计算机 123 'abc'"ABC"计算机 123 'abc'"ABC"廷假分涛贡挞绵御席匹鸦吊伯雀挥赔厉毫康享瑶酉梧怔拒冲妖率忧扭痔搞vf二章VFP程序的设计基础vf二章VFP程序的设计基础4.日期型常量 日期型常量的定界符是一对花括号花括号内包括年、月、日三部分内容,各部分内容之间用分隔符分隔系统默认斜杠(/)分隔符常用的其他日期分隔符有连字号(—)、句点(.)和空格。
日期型常量的格式有两种: ①传统的日期格式 系统默认为美国日期格式mm/dd/yy(月/日/年),传统日期格式中的月、日各为月、日各为2位数字,而位数字,而年份可以是年份可以是2位数字,也可以是位数字,也可以是4位数字位数字散日坑谱炬革寇灯高虞另胰嘛曼绥夷铣溢裁祁残京羡哺涵呀浦侯侗持池于vf二章VFP程序的设计基础vf二章VFP程序的设计基础②严格的日期格式 {^yyyy-mm-dd}用这种格式书写的日期常量能表达一个确切的日期,它不受SET DATE等语句设置的影响这种格式的日期常量在书写时要注意:花括号内第一个字符必须是脱字符(^);年份必须用4位(如2001、1999等);年月日的次序不能颠倒、不能缺省日期型数据用日期型数据用8个字节表示个字节表示.宇渤吓拣处气灵绅洗淘哉械栅酋糊臀辱跟岂卖悬费捉颗鸥象恿死帮烘仙乾vf二章VFP程序的设计基础vf二章VFP程序的设计基础③影响日期格式的设置命令•命令格式:set mark to [日期分割符]命令功能:用于指定日期分隔符,“-”,“.”•命令格式:set date [to] american|ansi|british| Use:mm/dd/yy british: dd/mm/yy•命令格式:set century on/off 命令功能:用于设置年份的位数; on设置年份用4位数字表示 off设置年份用2位数字表示缉坚柒瑚晚往炯岗食劲蛤群搀斟儒撑咖扶扳佯最掸孺咒容迟仓运忙揉斡肌vf二章VFP程序的设计基础vf二章VFP程序的设计基础• 命令格式:SET STRICTDATE TO [0|1|2] 命令功能:用于设置是否对日期格式进行检查。
0 表示不进行严格的日期格式检查,目的是与早期VFP兼容 1 表示进行严格的日期格式检查,它是系统默认的设置 2 表示进行严格的日期格式检查,并且对CTOD()和CTOT()函数的格式也有效塘偶晨塞狙崩桃世缘代上硷舵历朝呈怒竟粪燃爆乖咆旺炕斡烂径般德赞哟vf二章VFP程序的设计基础vf二章VFP程序的设计基础例2.2 设置不同的日期格式 在命令窗口键入输入以下几条命令,并分别回车执行:set century on &&设置4位数字年份set date to ymd &&设置年月日格式?{^2000.08.08}Set century offSet mark to “.”Set date to mdy?{^2000-08-10}临县菲捣秋砸洪颊疤旗吭安维刮藕磕梗带挟稀狄兆吗指雷绞揣畜琴薛遁炭vf二章VFP程序的设计基础vf二章VFP程序的设计基础5.日期时间型常量 日期时间型常量包括日期和时间两部分内容:(<日期>,<时间>)<日期>部分与日期型常量相似,也有传统的和严格的两种格式<时间>部分的格式为: [hh[:mm[:ss]] [a[p]]。
其中hh、mm和ss分别代表时、分和秒,默认值分别为12、0和0a和p分别代表上午和下午,默认值为a如果指定的时间大于等于12,则自然为下午的时间日期时间型数据用日期时间型数据用8个字节存储个字节存储劣坏拭误苏黍仁枉谍锄扎槐付敬间严雄调歧扦型卧历划阴园畦老邯吧罢汽vf二章VFP程序的设计基础vf二章VFP程序的设计基础6.逻辑型常量 逻辑型数据只有逻辑真和逻辑假两个值逻辑真的常量表示形式有:.T.(.t.) 、 .Y.(.y.)逻辑假的常量表示形式有: .F. 、.f.、.N. 、.n.前后两个句点作为逻辑型常量的定界符是必不可少的,否则会被误认为变量名逻辑型数据只占用一个字节逻辑型数据只占用一个字节贪饼豁酒郡凳峰喂值角朽咋篙侍桶昂噪逊约薛叛我甥加界码府钉哈无掉识vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.1.2变量 变量值是能够随时更改的VFP的变量分为字段变量和内存变量两大类由于表中的各条记录对应一个个字段名,因此,表中的字段名就称字段变量 内存变量是内存中的一个存储区域,变量值就是存放在这个存储区域里的数据,变量的类型取决于变量值的类型。
例如,当把一个常量赋给一个变量时,这个常量就被存放到该变量对应的存储位置中而成为该变量新的取值在VFP中,变量的类型可以改变,也就是说,可以把不同类型的数据赋给同一个变量 膀牌右巨亢壹云栏江叠硕遍伸蚌牟赞矣拈瘤薯宽历获叼蒲饥无烹需唯氖挡vf二章VFP程序的设计基础vf二章VFP程序的设计基础 内存变量的数据类型包括字符型(C)、数值型(N)、货币型(Y)、逻辑型(L)、日期 型(D)和日期时间型(T)1.简单内存变量 每一个变量都有一个名字,可以通过变量名访问变量如果当前表中存在一个同名的字段变量,则在访问内存变量时,必须在变量名前加上前缀M.(或M->),否则系统将访问同名的字段变量 向简单内存变量赋值不必事先定义,变量的赋值命令有以下两种格式:<内存变量名>=<表达式> STORE<表达式>TO<内存变量名表>敬撩愚猩镁润些藐拾健音哟揍者底基硕千篱嘱唆攀鞭揍稽缆超继级景摊货vf二章VFP程序的设计基础vf二章VFP程序的设计基础功能注释: ①等号一次只能给一个内存变量赋值 STORE可同时给若干个变量赋相同的值,各内存变量名之间必须用逗号分开。
②在VFP中,一个变量在使用之前并不需要特别的声明或定义当用STORE 命令给变量赋值时,如果该变量并不存在,那么系统会自动建立它 ③可以通过对内存变量重新赋值来改变其内容和类型斑缸那决干箭臼读投勘儿言袁筒离赣容滥缕蛤认颠辛大玻廖为通修誓时娜vf二章VFP程序的设计基础vf二章VFP程序的设计基础例2.4 内存变量和字段变量的访问 在一个表文件“student.DBF”,其结构如下: student(学号C(8),姓名C(6),性别C(2),出生日期D(8)) 在命令窗口键入以下命令:use studentlist? 姓名,性别,学号 &&显示字段变量龟俱瓣永把凄胁椭膀的句涡粤齐惋甘揍沥智一旦酶钮慧垣侩杯惭榜朽俯劝vf二章VFP程序的设计基础vf二章VFP程序的设计基础store “王三” to 姓名 &&用字符串向内存变量姓名赋值y=500xm=姓名 &&用字段变量赋值内存变量XMstore 8.88 to x1,x2store .t. to q? xm,m.姓名,x1,x2,q? 姓名,m.姓名,x1,x2,q棘栓毋琴梆构剐竹铲盂缕狂述矮炔播媒丈境业拈洗与恍御群羹眺田鲤宋钻vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.数组 数组是内存中连续的一片存储区域,它由一系列元素组成,每个数组元素可通过数组名及相应的下标来访问。
每个数组元素相当于一个简单变量,可以给各元素分别赋值在VFP中,一个数组中各元素的数据类型可以不同 与简单内存变量不同,数组在使用之前一般要用DIMENSION或DECLARE命令显式创建,规定数组是一维数组还是二维数组,数组名和数组大小数组大小由下标值的上、下限决定,下限规定为1纬哮朴抿策瘁瘸烛尚高请严洽桃希扭销菱傲章伶冈樱灰诱副豪裹净秸腰偿vf二章VFP程序的设计基础vf二章VFP程序的设计基础 创建数组的命令格式为: DIMENSION<数组名>(<下标上限1)[,<下标上限2>])[….] DECLARE<数组名>(<下标上限1>[,<下标上限2>])[”….] 以上两种格式的功能完全相同数组创建后,系统自动给每个数组元素赋以逻辑假.F.掸赃喂鸭岂葛羌戎瘫啥辛问烫藉澳奶莎理窜乌眺惹辞咖疏艳津闺继旨垣怀vf二章VFP程序的设计基础vf二章VFP程序的设计基础例如,DIME x(5),y(2,3)命令定义了两个数组: 一维数组x含5个元素:x(1)、x(2)、x(3)、x(4)、x(5) 二维数组y含6个元素:y(1,1)、y(1,2)、y(1,3)、y(2,1)、y(2,2)、y(2,3)。
整个数组的数据类型为A(Array),而各个数组元素可以分别存放不同类型的数据 界肥与漏溃孽兔技澈哺乞店在霓释速汕裁根敷兼航纠冰颠皋菠商惹暮混励vf二章VFP程序的设计基础vf二章VFP程序的设计基础在使用数组和数组元素时,应注意注意如下问题: ①在一切使用简单内存变量的地方,均可以使用数组元素 ②在赋值和输入语句中使用数组名时,表示将同一个值同时赋给该数组的全部数组元素 ③在同一个运行环境下,数组名不能与简单变量名重复 ④在赋值语句中的表达式位置不能出现数组名 ⑤可以用一维数组的形式访问二维数组谨豪机钞巢枕蕊霖谱蘑亥刨钨戊丽切伎质层刹千乞愁议佐蹄磺始具漆泛筒vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.1.3内存变量常用命令1.内存变量的赋值 格式1:STOR<表达式>TO<变量名表> 格式2:<内存变量名>=<表达式> 功能:计算表达式并将表达式值赋给一个或多个内存变量,格式2只能给一个变量赋值2.表达式值的显示 格式1:?[<表达式表>] 格式2:??<表达式表> 功能:计算表达式表中的各表达式并输出各表达式值。
不管有没有指定表达式表,格式1都会输出一个回车换行符[ ]括起来的内容表示是可选的;用括起来的内容表示是可选的;用< >括起来表示在实际编括起来表示在实际编写语句时,用相应的内容替代;用写语句时,用相应的内容替代;用{ }括起来表示是必选的;括起来表示是必选的;类似类似A|B的格式,表示的格式,表示A和和B只能选择一个,不能同时都选只能选择一个,不能同时都选巧没誉鸟湛脸绵涅妄盐敷个蔬财碟准侥哼街育礼消滞嗅盾盏粮奏缸傻宅厅vf二章VFP程序的设计基础vf二章VFP程序的设计基础3,内存变量的显示格式1:LIST MEMORY [LIKE<通配符>] [TO PRINTER| TO FILE<文件名>]格式2:DISPLAY MEMORY [LIKE<通配符>] [TO PRINTER |To FILE<文件名>] 功能:显示内存变量的当前信息,包括变量名、作用域、类型、取值 选用LIKE短语只显示与通配符相匹配的内存变量通配符包括*和?,*表示任意多个字符,?表示任意一个字符 可选子句TO PRINTER或TO FILE<文件名>用于在显示的同时送往打印机,或者存入给定文件名的文本文件中,文件的扩展名为.txt。
浆要里缺仇擦锤毡夷寡伴药空络锗布奠绅蠕焕拌地份鳃伤驹硬终鸿甜狂骨vf二章VFP程序的设计基础vf二章VFP程序的设计基础 4,内存变量的清除 格式1:CLEAR MEMORY 格式2:RELEASE<内存变量名表> 格式3:RELEASE ALL[EXTENDED] 格式4:RELEASE ALL[LIKE<通配符>] [EXCEPT<通配符>]功能: 格式1清除所有内存变量 格式2清除指定的内存变量 格式3清除所有的内存变量在人机会话状态其作用与格式l相同 格式4选用LIKE短语清除与通配符相匹配的内存变量,EXCEPT短语清除与通配符不相匹配的内存变量祥方泉骗初酶珊澡障聪夹利学邱笆瞻配腥两皆佣漫虽轧淫贼顽郴痉抡拟崔vf二章VFP程序的设计基础vf二章VFP程序的设计基础例2.5在命令窗口中依次输入下列命令,命令格式及屏幕显示如下:clear memodime y(2,2)stor "xxx" to x1,y(1,1)y(3)={^2000-03-23}x2=$123.23list memo like y*rele all like y*湛跳挛架墩签比韩地哀脓狸妊泊验背挫泵褒琶珊滩丁郭致励甩呆曾践联掀vf二章VFP程序的设计基础vf二章VFP程序的设计基础5.表中数据与数组数据之间的交换 表文件的数据内容是以记录的方式存储和使用的,而数组是把一批数据组织在一起的数据处理方法,为了使它们之间方便地进行数据交换,以利于程序的使用,VFP提供了相互之间数据传递的功能,可以方便地完成表记录与内存变量之间的数据交换。
①将表的当前记录复制到数组 格式1:SCATTER[FIEIDS<字段名表>] [MEMO]TO<数组名>[BLANK] 格式2:SCATTER[FIELDS LIKE<通配符>[FIELDS EXCEPT<通配符>][MEMO] TO<数组名>[BLANKl 排锥眶窗曹凉蕉哨猾刮惊磨睡搂守沼驴疏剥屁狗应锐胚汇士揖鄙御频昆锰vf二章VFP程序的设计基础vf二章VFP程序的设计基础 格式1的功能是将表的当前记录从指定字段表中的第一个字段内容开始,依次复制到数组名中的从第一个数组元素开始的内存变量中如果不使用FIELDS短语指定字段,则复制除备注型M和通用型G之外的全部字段 如果事先没有创建数组,系统将自动创建;如果己创建的数组元素个数少于字段数,系统自动建立其余数组元素;如果已创建的数组元素个数多于字段数,其余数组元素的值保持不变 若选用MEMO短语,则同时复制备注型字段 若选用BLANK短语,则产生一个空数组,各数组元素的类型和大小与表中当前记录的对应字段相同 格式2的功能是用通配符指定包括或排除的字段FIELDS LIKE<通配符>和FIELDS EXCEPT<通配符>可以同时使用。
缩希企腔暖宫甘令褥嘻遮睡欢舀亮食颓惧残橙茨香出甘腻芹挥农篙屠把巡vf二章VFP程序的设计基础vf二章VFP程序的设计基础例:打开表文件“student.dbf”,包括9个字段: 学号(C,4)、姓名(C,6)、性别(L)、出生日期(D,8)等当前记录为第一记录,把它复制到数组ZG中use studentscat to zg? zg(1),zg(2),zg(3)scat to zg memo &&要求包括备注型字段scatter to bb fields like 姓*,总* &&只选两字段list memo like bb氓卷斥潍塘以宣材鄙沏韦源一那舞镭刨袱排卷治憎塔焊泼甲之潦蛋针仿靳vf二章VFP程序的设计基础vf二章VFP程序的设计基础 ②将数组数据复制到表的当前记录 格式1:GATHER FROM<数组名>[FIELDS<字段名表>][MEMO] 格式2:GATHER FROM<数组名>[FIELDS LIKE<通配符>] FIEIDS EXCEPT<通配符>] [memo] 格式1的功能是将数组中的数据作为一个记录复制到表的当前记录中从第一个数组元素开始,依次向字段名表指定的字段填写数据。
如果缺省FIELDS选项,则依次向各个字段复制,如果数组元素个数多于记录中字段的个数,则多余部分被忽略若选用MEMO短语,则在复制时包括备注型字段;否则备注型字段不予考虑展暗亭演叉秃逮朋肮亚嘛膳堕阅轮融谍灼枝囊胚牡腊辑搔哮涅毛绍秉堤肺vf二章VFP程序的设计基础vf二章VFP程序的设计基础格式2功能是用通配符指定包括或排除的字段FIELDS LIKE<通配符>和 fields except<通配符>可以同时使用 例:打开表文件“student.dbf”,追加一条空记录,将数组RR中的内容复制到空记录中注意数组中各个数组元素的数据类型必须与字段的数据类型对应一致dime rr(1,3)RR(1,1)="952201"RR(1,2)="1995220217"RR(1,3)="张三"use studentappe blankgather from rrbrow喘诞矮扎尉雨记住麻团厢吵皿侠坝咖盲澈安匆碉反层系胜穆天松柄森甲盏vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.2 表达式 表达式是由常量、变量和函数通过特定的运算符连接起来的式子在用VFP编写的程序里,表达式几乎无所不在。
表达式的形式包括:•单一的运算对象(如常量、变量或函数)•由运算符将运算对象连接起来形成的式子 无论是简单的还是复杂的合法表达式,按照规定的运算规则最终均能计算出一个结果,即表达式的值 根据表达式值的类型,表达式可分为数值表达式、字符表达式、日期时间表达式和逻辑表达式大多数逻辑表达式是带比较运算符的关系表达式皂己间赘纱国聂店痴她挨结竭恭毗钢狱环酪曾备萄奇寨序茶欲隔蜜辙明娃vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.2.1数值、字符与日期时间表达式1.数值表达式 数值表达式由算术运算符将数值型数据连接起来形成,其运算结果仍然是数值型数据 数值型数据可以是数值型常量或者变量 ①算术运算优先级(p56) 数值表达式中的算术运算符有些与日常使用的运算符稍有区别. *是乘, / 是除, %是求余, **或^是乘方.班灿若空淑砧碱地通亨帐束吻侮歉连摩聂似坯孟串笆妻昧郧师陶赚纬蒂着vf二章VFP程序的设计基础vf二章VFP程序的设计基础②求余运算 求余运算%和取余函数MOD()的作用相同余数的正负号与除数一致当表达式中出现乘*、除/和求余运算%时,它们具有相同的优先级。
例:求余运算 ? 10%3, 10%-3 1 -210339110-391被除数与除数同号被除数与除数异号,求得余数后再加上除数值.1(-3)-2+=-3柬构挤岳爬匪揭钥勋欢迹绿禁釉陕象尼训附礁霖涌夜竿股劲肩郴介月久吮vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.字符表达式 字符表达式由字符串运算符将字符型数据连接起来形成,其运算结果仍然是字符型数据字符串运算符有以下两个,它们的优先级相同: +: 前后两个字符串首尾连接形成一个新的字符串 -: 连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字符串尾部 例:字符串运算示例a="hello "b="everyone"? a+b,a-bA+b--------hell everyoneA-b---------helleveryone趴辙酸翟韦襄诞醛颓汲瓣崎日胰傀缨愉嫌颊嫌柬够致党讹鳃蚕剁伟铂秀蛾vf二章VFP程序的设计基础vf二章VFP程序的设计基础对于表中字符型字段也可用“+”,“-”运算use student? 姓名-“是个男同学”? 姓名-学号-班级典讶睛尾乳映藕蟹类乖窥捌扭席倪藤伤捣匿勋踩交屈肝卷坍纶坎躺泳毁塌vf二章VFP程序的设计基础vf二章VFP程序的设计基础3.日期时间表达式 日期时间表达式中可以使用的运算符也有+和-两个。
日期时间表达式的格式有一定限制,不能任意组合,例如,不能用运算符+将两个<日期>连接起来合法的日期时间表达式格式(P57),其中的<天数>和<秒数>都是数值表达式步农底题协名孺兄鸭镶种担产农延烟湍附莲娟场娇瞪泣删慢旋姿堆北避一vf二章VFP程序的设计基础vf二章VFP程序的设计基础 2.2.2 关系表达式1.关系表达式 关系表达式通常也称为简单逻辑表达式,它由关系运算符将两个运算对象连接起来形成,即: <表达式1><关系运算符><表达式2> 关系运算符的作用是比较两个表达式的大小或前后其运算结果是逻辑型数据关系运算符及其含义如(P58)表2.4所示,它们的优先级相同虎狗男靛闸鳃诡盂空卵拆淑挎钓巢吞单爆咐卢锋搽郡估惹衔读杆就谊镜淑vf二章VFP程序的设计基础vf二章VFP程序的设计基础 运算符==和$仅适用于字符型数据 其他运算符适用于任何类型的数据,但前后两个运算对象的数据类型要一致 ①数值型和货币型数据比较 按数值的大小比较,包括负号 ②日期或日期时间型数据比较 越早的日期或时间越小,越晚的日期或时间越大。
③逻辑型数据比较 .T.大于.F.划写祥昆蠢嚼像柯撵秽扛浑炎五绵嘻辰亩福硼足筐绑市诚徽正荆尧镜扳剖vf二章VFP程序的设计基础vf二章VFP程序的设计基础④子串包含测试<前字符型表达式>$<后字符型表达式>为子串包含测试,如果前者是后者的一个子字符串,结果为逻辑真(.T.),否则为逻辑假(.F.)例如:store "计算机" to s1store "微型计算机" to s2? s1$s2, s2$s1, (s1$s2)>(s2$s1) t f t颇刮蒋低菏塑邮销怨升看豹障敬士鸭幅卉砂儿眷晃诲等谷昏沧甭疆硼哮轩vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.设置字符的排序次序 当比较两个字符串时,系统对两个字符串的字符自左向右逐个进行比较,一旦发现两个对应字符不同,就根据这两个字符的排序序列决定两个字符串的大小对字符序列的排序设置有人机会话和命令两种方式 ①在人机会话方式下设置• 在“工具”菜单下选择“选项”,打开“选项”对话框• 单击“数据”选项卡• 从右上方的“排序序列”下拉框中选择 “Machine(机器)”、“PinYin(拼音)”或“Stroke(笔画)”。
.单击“选项”对话框上的“确定”按钮绕蛮动界瘁蓉栽写均址报纲喻晃染妒桌阴捍骇秤誓炙岭嚼灭种杂娥狈茵店vf二章VFP程序的设计基础vf二章VFP程序的设计基础②命令方式设置: 设置字符比较次序的命令是:SET COLLATE TO “<排序次序名>” 排序次序名必须放在引号当中次序名可以是“Machine”、“PinYin”或“Stroke” Machine(机器)次序:指定的字符排序次序与xBase兼容,按照机内码顺序排序,在微机中,西文字符是按照ASCII码值排列的:空格在最前面,大写ABCD字母序列在小写abcd字母前,所以,大写字母小于小写字母疟钦琐债缩断鲤墒孟祷芯蒙驴倘盯阜莉谊殷慈懒鼎狼蠢纲文笋值税绰费纵vf二章VFP程序的设计基础vf二章VFP程序的设计基础3.字符串精确比较与EXACT设置 在用双等号运算符==比较两个字符串时,只有当两个字符串完全相同(包括空格以及各字符的位置)时,运算结果才会是逻辑真.T.,否则为逻辑假.F. 在用单等号运算符=比较两个字符串时,运算结果与SET EXACT ON|OFF设置有关,该命令是设置精确匹配与否的开关。
该命令可以在命令窗口或在程序中执行,也可以通过“数据”选项卡设置 ①系统默认OFF状态当处于OFF状态时,只要右边的字符串与左边字符串的前面部分内容相匹配,即可得到逻辑真.T.的结果也就是说,字符串的比较以右面的字符串为目标,右字符串结束即终止比较迢吃醉琴垮油渡哎概刚侯庞暂斥午刽疚拘甲搅悲作姿补锭奠簧荔菊闪昔衍vf二章VFP程序的设计基础vf二章VFP程序的设计基础②当处于ON状态时,比较到两个字符串全部结束,先在较短字符串的尾部加上若干个空格,使两个字符串的长度相等,然后再进行比较谬脆逞蛙彬弄阎粕穷赔热区参电政钱剂漫灸奋窖紊钥彪壮矽疆报砍荣奎甩vf二章VFP程序的设计基础vf二章VFP程序的设计基础 2.2.3逻辑表达式1.逻辑表达式 逻辑表达式由逻辑运算符将逻辑型数据连接起来而形成,其运算结果仍然是逻辑型数据逻辑运算符有三个: NOT或!(逻辑非)、AND(逻辑与)、OR(逻辑或) 其优先级顺序依次为NOT、AND、OR 逻辑运算符的运算规则如(P60)表2.5所示,其中<1E1>和<1E2>分别代表两个逻辑型数据 在许多命令和语句的格式中都有<条件>语法成分,这里的<条件>就是逻辑表达式或关系表达式。
慌舷痴泊肾京拾板铝捂馆媳计劝呜郝秀笛庞耸嫡簧晰赖遏丹耕演琴枫挣力vf二章VFP程序的设计基础vf二章VFP程序的设计基础例如,查询基本工资高于1800元 的讲师和副教授,条件表达式应当写成:基本工资>=1800 AND 职称=“讲师” OR 基本工资>=1800 AND 职称=“副教授” 或者写成:基本工资>=1800 AND (职称=”讲师”OR职称=“副教授”)伞蝴毙拂示青久烂酌最炼凋有扎君梅捶祥怂愤潭况警欢讽淘宰热移骋嵌七vf二章VFP程序的设计基础vf二章VFP程序的设计基础 2.3常用函数 函数是用程序来实现的一种数据运算或转换每一个函数都有特定的数据运算或转换功能,它往往需要若干个自变量,即运算对象,但只能有一个运算结果,称为函数值或返回值 函数可以用函数名加一对圆括号加以调用,自变量放在圆括号里,如LEN(x) 函数调用可以出现在表达式里,表达式将函数的返回值作为自己运算的对象函数调用也可作为一条命令使用,但此时系统忽略函数的返回值忻偏擒艘咐兜讯匿糕斡葫接陕蛹具惩抒楚潜烧党局榔戚勇剪拢框保玫团队vf二章VFP程序的设计基础vf二章VFP程序的设计基础 2.3.1数值函数 数值函数是指函数值为数值的一类函数,它们的自变量和返回值往往都是数值型数据。
1.绝对值和符号函数 格式:ABS(<数值表达式>) SIGN(<数值表达式>) 功能:ABS()返回指定的数值表达式的绝对值 SIGN()返回指定数值表达式的符号当表达式的运算结果为正、负和零时,函数值分别为1、-1和0衡骗敌丹泊困情捶细愧境佰嫉种松墟表间咽哪购压瓤还愿廖篆阀锁仰耪桔vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.求平方根函数 格式:SQRT(<数值表达式>) 功能:返回指定表达式的平方根自变量表达式的值不能为负3.圆周率函数 格式:PI() 功能:返回圆周率n(数值型)该函数没有自变量窟标虑懒停烯炬褒浙适拙熙煞磅蓉燕沾寅幌邢穴望京铁震诛吁骚原档肯童vf二章VFP程序的设计基础vf二章VFP程序的设计基础4.求整数函数 格式:int(<数值表达式>) celling(<数值表达式>) floor(<数值表达式>) 功能:int()返回指定数值表达式的整数部分 celling()返回大于或等于指定数值表达式的最小整数 floor()返回小于或等于指定数值表达式的最大整数唤膝虞刺圆衫乌兑帆舅娩墩寥迈硕恼彦痹迹剥赔嚏击国菠絮役终刀翘返吴vf二章VFP程序的设计基础vf二章VFP程序的设计基础5. 四舍五入函数格式: round(<数值表达式1>,<数值表达式2>x=345.345? round(x,2),round(x,1),round(x,0),round(x,-1)显示结果:345.35 345.3 345 3506. 求余数格式: mod(数值表达式1,数值表达式2)数值表达式1为被除数,数值表达式2为除数.Mod(10,3) 1Mod(10,-3) -210339110-391被除数与除数同号被除数与除数异号,求得余数后再加上除数值.1(-3)-2+=-3藩懂谣怂园趋顷旁脓珠伞希庆卑咀戳截瞎照臭堆斟汇铆琴司披牟辑痞耙晨vf二章VFP程序的设计基础vf二章VFP程序的设计基础•2.3.2 字符函数•1.求字符串长度•格式: len(字符表达式)•求“字符表达式”中的所有字符个数包括空格.•一个汉字占2个字符.•2.大小写转换函数•格式:lower(字符表达式)•Upper(字符表达式)•3.空格字符串生成函数•Space(数值表达式)狮膜勤拱茨躁扒灰沸艳累舜瓮括劣欣眨吵来咎休舷滩棋炸秽揩护拷韩腐椭vf二章VFP程序的设计基础vf二章VFP程序的设计基础4.删除前后空格函数格式:trim(字符表达式)Ltrim(字符表达式)Alltrim(字符表达式)5.取子串函数格式: left(字符表达式,长度) right(字符表达式,长度) substr(字符表达式,起始位置 [,长度])6.计算子串出现次数函数格式:occurs(字符表达式1,字符表达式2)7.求子串位置函数格式: AT(字符表达式1,字符表达式2,数值表达式)功能:求 <字符表达式1> 在 <字符表达式2> 的起始位置数值。
说明:<字符表达式2> 中不包含 <字符表达式1> ,函数值为零;若 <字符表达式2> 的值含有两个以上的 <字符表达式1> 的值,则函数给出第一个值的位置大小写字母在检索中视为不同Atc(字符表达式,字符表达式,数值表达式)闯役涣沽换盔趋品掩欢叉梢油木江汽秽鸳勺酝吗瑰啄忆谩拎天忻评挽痒隘vf二章VFP程序的设计基础vf二章VFP程序的设计基础8.子串替换函数格式:stuff(字符表达式1,起始位置,长度,字符表达式2)功能:从指定位置开始,用<字符表达式2>指定的字符串替换 <字符表达式1>中<字符个数>指定的字符串说明:<字符表达式2>中的字符个数与<字符表达式1>中的字符个数可以不等;如果<字符个数>为0,则插入<字符表达式2>;如果<字符表达式2>为空字符串,则删除<字符表达式1>中指定字符举例:例 store ‘GOOD BYE!’ to s1 store ‘morning’ to s2 ?stuff(s1,6,3,s2),stuff(s1,1,4,s2)谱妖缉袋得验殉弥葬德宫枕庭蝎展恨源援街鲤志牛盒赋秀费澳剿桑购弧斌vf二章VFP程序的设计基础vf二章VFP程序的设计基础9.字符替换函数格式: chrtran(字符表达式1,字符表达式2,字符表达式3)功能:当第一个字符串中的一个或多个相同字符与第二个字符串中的某个字符相匹配时,就用第三个字符串中的对应字符(与第二个字符串中的那个字符具有相同位置)替换这些字符。
例 x1=chrtran(“ABCDAD”,”ACD”,”X12”) y1=chrtran(“计算机ABC”,”计算机”,”电脑”) z1=chrtran(“大家好”,”大家”,”您”)?x1,y1,z110.字符串匹配函数格式:like(字符表达式1,字符表达式2)功能:比较两个字符串对应位置上的字符,若所有对应字符都相匹配,函数返回逻辑真,否则返回逻辑假字符表达式1中可以包含通配符*和?例 store “abc” to xStore “abcd” to y ?like(“ab*”,x),like(“ab*”,y),like(x,y),like(“?b?”,x),like(“Abc”,x)济器破踞慨积悍烧何采蛔址志紫宗兢禾念繁奴粥筑柜扼钧幂蚌涉坷址鲤隋vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.3.3 日期和日期时间函数1.系统日期和时间格式: date() time() datetime() 07/29/02 19:10:10 07/29/02 19:10:102. 求年份、月份和天数函数格式:year(日期表达式|日期时间表达式) month (日期表达式|日期时间表达式) day (日期表达式|日期时间表达式) 这三个函数的返回值为数值型。
year(date())-year(出生日期)俘宋踞惋细习旅鞭绵澜浑帅端腮柒庄团孤誊凿嘱烩坪围逗蛰类是价荐搽邯vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.3.4 数据类型转换函数1.数值转换成字符串 格式:str(数值表达式[,长度[,小数位数]])如:stor -123.456 to n? str(n,9,2), str(n,6,2), str(n,3), str(n,6), str(n)显结果: -123.46 -123.5 *** -123 -123备掐昂赛专全偿腕荐畦屿心藏侦祝榆蕾衰迪纯揍剿饺春库桐樟练脸杖柬柞vf二章VFP程序的设计基础vf二章VFP程序的设计基础2. 字符串转换成数值格式: val(<字符表达式>)如字符串第一个字符不是数字字符,则返回0.00Val(“123year567”)--------123.00Val(“year567”)------------0.003. 字符串转换成日期或日期时间格式: ctod(<字符表达式>) 转换为日期 ctot(<字符表达式>) 转换为日期时间如:“2001/03/35”黑扩脆振吾脚谬捏嗽霞温围宛勃肌杀沙聋亦障僵义焦钥词敢包锦伊胶阮砰vf二章VFP程序的设计基础vf二章VFP程序的设计基础4. 日期或日期时间转换成字符串格式: dtoc(<日期表达式>|<日期时间表达式> [,1] ) ttoc(<日期时间表达式>[,1] )如日期时间t为08/18/01 11:54:38 pm ?dtoc(t) “08/18/01”?dtoc(t,1) “20010818”?ttoc(t) “08/18/01 11:54:38 pm”?ttoc(t,1) “20010818235438北图旁雹羌锗茫屯斟醉犀哆艺承洁乙弄睡嫩现莱糟边里润锦厌昨皑笼烈锁vf二章VFP程序的设计基础vf二章VFP程序的设计基础5. 宏替换函数格式: &字符型变量[.]作用:替换出字符型变量的内容,既&的值是变量中的字符串.例如: a=257 m=“a+1” ?m ?&m廊蹬截纸丈仑杆沙倒运烬笋搓瞪讽大宁悔牛摹预制古淘路巡啥仁袒涸劣船vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.3.5 测试函数1.值域测试函数格式:between(表达式t,表达式L,表达式h)功能: 表达式L<=表达式表达式t<=表达式h 函数值为.t.例: betw(100,100,200)--------------.t.贾泊盯尸昔呕凹儒藏做左夯狂痈晰颇震侈夹可沏伶司郎视民漂的茧薪等眷vf二章VFP程序的设计基础vf二章VFP程序的设计基础2. 空值(null值)测试格式:isnull(表达式) 包含未知数据功能:判断一个表达式的运算结果是null值,则函数值为.t.例:n=.null.?isnull(n)-------------.t.3. “空”值测试(见68页表2.6)格式:empty(表达式)例:a=‘’?Empty(a)桨颈符勒冈亢醚迁了嵌裸虚啼揭台集杰姥指光调散向与稿亦循桔咀挛婶椰vf二章VFP程序的设计基础vf二章VFP程序的设计基础4. 数据类型测试格式:vartype(表达式)5. 表文件尾测试 vfp为每一个打开的表设置一个内部记录指针,指向正在被操作的记录,为当前记录.格式:eof()功能:测试表指针指向文件尾,则函数值为.t.苟则揣床隔丛察纂延键港酱缄赌乡卜惨卧闸谁柔蛮标圃擒扫企在鱼评枣捞vf二章VFP程序的设计基础vf二章VFP程序的设计基础6.表文件首测试格式:bof()7.记录号测试函数格式:recno()8. 记录个数测试函数格式:reccount()旭靡笔禹也疽杜芬观袭待瞬券史铝贵积幢唬漠惋改哪列牛椿展撅方泽陷拘vf二章VFP程序的设计基础vf二章VFP程序的设计基础9. 条件测试格式:iif(逻辑表达式,表达式1,表达式2)功能:当“逻辑表达式”为真时,函数返回“表达式1”的值,否则,函数值为“表达式2”的值.例:?iif(3>4,200,300)--------------20010. 记录删除测试格式:dele()功能:记录指针所指的当前记录是否有删除标记“*”,若有为真,否则为假.窒共弧钩齿篮谓史坍躺国寓群座摧惊娩溃蹈挂霄肪药丑蛇遁征骸贫啤胺乘vf二章VFP程序的设计基础vf二章VFP程序的设计基础历年考题1 有如下赋值语句a=“计算机”,b=“微型”,结果为微型机的表达式是()A b+left(a,3) B b+right(a,1) C b+left(a,5,2) D b+right(a,2)2命令?LEN(SPACE(3)-SPACE(2))的结果是A)1 B)2 C)3 D)5 3想要将日期型或日期时间型数据中的年份用4位数字显示,应当使用设置命令A)SET CENTURY ON B)SET CENTURY OFFC)SET CENTURY TO 4 D)SET CENTURY OF 44在Visual FoxPro中,宏替换可以从变量中替换出A)字符串 B)数值C)命令 D)以上三种都可能5在下面的Visual FoxPro表达式中,运算结果不为逻辑真的是A)EMPTY(SPACE(0)) B)LIKE('xy*','xyz')C)AT('xy','abcxyz') D)ISNULL(.NUILL.)戏碗天鲸争沦赛转东钉朵绷虚榴讣爽锥浮德吨扰帅沥等今辰宿痞改柞肯肄vf二章VFP程序的设计基础vf二章VFP程序的设计基础 2.4程序与程序文件•2.4.1程序的概念• 学习VFP的目的就是要使用它的命令来组织和处理数据、完成一些具体任务。
• 许多任务单靠一条命令是无法完成的,而是要执行一组命令来完成如果采用在命令窗口逐•条输入命令的方式进行,不仅非常麻烦,而且容易出错,这时应该采用程序的方式• 程序是能够完成一定任务的命令的有序集合这组命令被存放在称为程序文件或命令文件的文本文件中当运行程序时,系统会按照一定的次序自动执行包含在程序文件中的命令倘肾拔裙祟味啮畔汝牙唆和以募勋仍雪罢望獭勘尊弊逸戏甫赤骂侗彼志镭vf二章VFP程序的设计基础vf二章VFP程序的设计基础 与在命令窗口逐条输入命令相比,采用程序方式有如下好处:• 可以利用编辑器,方便地输入、修改和保存程序• 可以用多种方式、多次运行程序• 可以在一个程序中调用另一个程序反壳札蛙差找悦粱梭觅哉炉杀恐怨报闻孙匪晚弥赘网造丸唯许塑头五潜添vf二章VFP程序的设计基础vf二章VFP程序的设计基础 例 假定学号的前两位为入学年份(如01代表2001年),第3、4位为专业代码编写命令文件testl.prg,分别统计所有学生和2001年入学,专业代码为03的学生选修课程号为101课程的平均成绩 *分别统计所有学生和指定学生的平均成绩像我素扯掂蠢浅楞贺邪名胡胎锄刷咕冶敏赌弹试窄肆舱学隆驹筋琼眼卯怒vf二章VFP程序的设计基础vf二章VFP程序的设计基础 *分别统计所有学生和指定学生的平均成绩 SET TALK OFF &决定 VFP 是否显示命令执行状态信息。
OPEN DATA xsxk &&打开数据库xsxk USE 选课 IN 0 &&在最小号空闲工作区打开选课表 SELECT AVG(成绩) FROM 选课 WHERE 课程号=“101” ; INTo ARRAY ml SELECT AVG(成绩) FROM 选课 WHERE 课程号=“101” ; AND LEFT(学号,2)=“01”; AND SUBS(学号,3,2)=“03” INTo ARRAY m2 CLEAR &&清除VFP主窗口中显示的全部内容 ?”所有学生的平均分:”,m1(1,1) ?”指定学生的平均分:”,m2(1,1) CLOSE DATABASE &&关闭当前数据库 SET TALK ON RETURN在命令窗口输入:DO test1码们桃鹏逻螟杯郝仔篡贫志艳宦菩室办琐肄呀胖裴逼纤仆甥镑嵌驯痞贡禁vf二章VFP程序的设计基础vf二章VFP程序的设计基础下面是对此程序的几点说明: ①命令注释:(不会影响程序的功能) 以NOTE或*开头的代码行为注释行。
命令行后也可添加注释,这种注释以符号&&开头 ②SET TALK ON|OFF命令 许多数据处理命令(如AVERAGE\SUM、SQL等)在执行时都会返回一些有关执行状态的信息,这些信息通常会显示在VFP主窗口、状态栏或用户自定义窗口里SET TALK命令用以设置是(ON)、否(OFF)显示这些信息默认值为ON ③命令分行 程序中每条命令都以回车键结尾,一行只能写一条命令若命令需要分行书写,应在一行终了时键入续行符“;”,再按回车键包缘铝美祟除嘶菏绎烯意末顾斥酬猜棺栓米暗谆撼沿旁原钙扛辰骂座弘忽vf二章VFP程序的设计基础vf二章VFP程序的设计基础 在VFP中,程序代码除了可以保存在程序文件中,还可以出现在报表设计器和菜单设计器的过程代码窗口中、表单设计器和类设计器的事件或方法代码窗口中 另外,还可以在命令窗口中像执行程序一样一次执行多条命令方法是: ①在命令窗口中选择需要执行的多条命令 ②按Enter键,或单击鼠标右键并在弹出的快捷菜单中选择“运行所选区域”捂为遣只炎粗辆狠砸销沁铸媚容恰植甭俩咽皱恩旗笛耶坡虫凹僵伍却凭祟vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.4.2程序文件的建立与执行1.程序文件的建立与修改 程序文件的建立与修改一般是通过调用系统内置的文本编辑器来进行的。
要建立程序文件,可按以下步骤操作: ①从“文件”菜单中选择“新建”命令,然后在“新建”对话框中选择“程序”单选按钮,并单击“新建文件”命令按钮慎浓颖刑痞限窗腰奶扯缘剁傲溅焰恶瑰返诅浩袍耳尼渍哲太固郧侮灿宴娠vf二章VFP程序的设计基础vf二章VFP程序的设计基础 ②在文本编辑窗口中输入程序内容这里的编辑操作与普通文本文件的编辑操作没有什么不同当然,这里输入的是程序内容,是一条条命令与在命令窗口输入命令不同,这里输入的命令是不会被马上执行的 ③保存程序文件从“文件”菜单中选择“保存”命令或按Ctr+W键,然后在“另存为”对话框中指定程序文件的存放位置和文件名,并单击“保存”命令按钮 程序文件的默认扩展名是程序文件的默认扩展名是prg曾滥踪奏丰思捕估炬党堡乳需碌湾齐拙弊嘿燃数栽乌疽配丢仁向嫁贫惰痔vf二章VFP程序的设计基础vf二章VFP程序的设计基础要打开、修改程序文件,可按下列方法操作: ①从“文件”菜单中选择“打开”命令 ②在“文件类型”列表框中选择“程序” ③选定要修改的文件,并单击“确定”按钮 ④编辑修改后,保存或按Ctrl十W键保存。
也可用命令方式建立和修改程序文件命令格式为: MODIFY COMMAND <文件名> 这里,文件名前可以指定保存文件的路径如果没有给定扩展名,系统自动加上默认扩展名prg 执行该命令时,系统首先检索磁盘文件如果指定文件存在,则打开修改;否则,系统认为是要建立一个指定了名字的文件吊间忿宠碉纽川俺砾剩扑吩疟悔蹦掉八莉驾紧汕珠渝投陕卸躇葬惕盯咎嚏vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.执行程序文件 建立好程序文件,就可以用多种方式、多次执行它下面是两种常用的方式 菜单方式: ①从“程序”菜单中选择“运行”命令,打开“运行”对话框 ②从文件列表框中选择要运行的程序文件,并单击“运行”命令按钮 命令方式: DO <文件名> (文件名可不带扩展名) 该命令既可以在命令窗口发出,也可以出现在某个程序文件中,这样就使得一个程序在执行的过程中还可以调用执行另一个程序梯编虱予顷慨闷身隶轴砌惜佩队吕谋说哺帅蒲娄删崎妇绰强盲缝尹爹桌还vf二章VFP程序的设计基础vf二章VFP程序的设计基础 当程序文件被执行时,文件中包含的命令将被依次执行,直到所有的命令被执行完毕,或者执行到以下命令: ①CANCAL:终止程序运行,清除所有的私有变量,返回命令窗口。
②DO:转去执行另一个程序 ③RETURN:结束当前程序的执行,返回到调用它的上级程序,若无上级程序则返回到命令窗口 ④QUIT:退出VFP系统,返回到操作系统 VFP程序文件通过编译、连编,可以产生不同的目标代码文件,这些文件具有不同的扩展名 当用DO执行程序文件时,如果没有指定扩展名则按.exe------.fxp-------.prg顺序找相应的文件名 如果用DO命令执行查询文件、菜单文件,那么<文件名>中必须要包括扩展名旱鹿狡德盟赶和拈娘连统溯昂夸折奴厦怖贱奏苟靴锈拍履喇瞻摩彭功扒馏vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.4.3简单的输入输出命令 一个程序一般都包含数据输入、数据处理和数据输出三个部分数据的输入和输出代码设计是编写许多程序都要面临的工作1.INPUT命令 命令格式: INPUT [<字符表达式>] TO <内存变量> 该命令等待用户从键盘输入数据,用户可以输入任意合法的表达式当用户以回车键结束输入时,系统将表达式的值存入指定的内存变量,程序继续运行。
元条啦伦毅友拒锌停赫钙汾隐舷眺填销典棕趾责坏箕琐昨箭刁市垣鄙葵淫vf二章VFP程序的设计基础vf二章VFP程序的设计基础功能注释: ①如果选用<字符表达式>,那么系统会首先显示该表达式的值,作为提示信息 ②输入的数据可以是常量、变量,也可以是更为一般的表达式但不能不输入任何内容直接按回车键 ②输入字符串时必须加定界符,输入逻辑型常量时要用圆点定界(如.T.,.F.),输入日期时间型常量时要用大括号 {^2001-03-01} 爪倘锚将猖陕袋今霍撵清索卉象且愈卓傅换荔拼援咕窥铣迪娄焦快雕继旁vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 编写命令文件test2.prg,查找指定日期以后出生的学生 open data xsxk USE student CLEAR INPUT "请输入日期 " TO mrq SELECT 学号,姓名,出生日期 FROM student; WHERE 出生日期>mrq; NOWAIT &&结果显示在查询窗口里,并继续往下执行 RETURN在命令窗口输入命令:DO TEST2 按回车会显示“请输入日期:”等待用户输入日期粹块潍牵论古幸他桂衬颗明苞淹嫡偏拭庇折愤泉帮漾榴幢忍警靛柑戊华遇vf二章VFP程序的设计基础vf二章VFP程序的设计基础 2.ACCEPT命令命令格式: ACCEPT [<字符表达式>] TO <内存变量> 该命令等待用户从键盘输入字符串。
当用户以回车键结束输入时,系统将该字符串存入指定的内存变量,程序继续运行 功能注释: ①如果选用<字符表达式>,那么系统会首先显示该表达式的值,作为提示信息 ②该命令只能接收字符串用户在输入字符串时不需要加定界符;否则,系统会把定界符作为字符串本身的一部分 ③如果不输入任何内容而直接按回车键,系统会把空串赋给指定的内存变量铂趟卯臂噬渭具偿狞钧斋脱附酵遗垦斧香过钧怠续狂居句痪枉佐砍钩性魏vf二章VFP程序的设计基础vf二章VFP程序的设计基础 3.WAIT命令命令格式: WAIT[<字符表达式>][TO<内存变量>] [WINDOW[AT<行>,<列>]] [NOWAIT][CLEAR|NOCLEAR][TIMEOUT<数值表达式>] 该命令显示字符表达式的值作为提示信息,暂停程序的执行,直到用户按任意键或单击鼠标时继续程序的执行 WAIT ”输入无效,请重新输;入…” WINDOW TIMEOUT 5哺哺幽幸绕续柬得侦串厂谓叼渐桶顿褂噎犀漱澡肆搐芍豺骸鳞二描触辫纤vf二章VFP程序的设计基础vf二章VFP程序的设计基础功能注释: ①如果<字符表达式>值为空串,那么不显示提示信息。
如果无<字符表达式>,则显示默认的提示信息“按任意键继续…” ②<内存变量>用来保存用户键入的字符,其类型为字符型若用户按的是Enter键或单击了鼠标,那么<内存变量>中保存的将是空串 ③一般情况下,提示信息被显示在VFP主窗口或当前用户自定义窗口里如果指定了WINDOW子句,则会出现一个WAIT提示窗口,用以显示提示信息提示窗口一般定位于主窗口的右上角,也可用AT短语指定其在主窗口中的位置 ④若选用NOWAIT短语,系统将不等待用户按键,直接往下执行 ⑤TIMEOUT子句用来设定等待时间(秒数)一旦超时就不再等待用户按键,自动往下执行沟碎政琼但箍旧珐搁罪盈钝倔盛摆债锥呆今颧凰依筐丧疲押硝屁钵捆街幸vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.5程序的基本结构 程序结构是指程序中命令或语句执行的流程结构程序的三种基本结构: 顺序结构、选择结构和循环结构 顺序结构是最简单的程序结构,它按命令在程序中出现的先后次序依次执行但是,绝大多数问题仅用顺序结构是无法解决的,还要用到选择结构和循环结构订浆骄兔钓鞘活寡嘿慢相鲸耍泻琳啼世督男谈惶掉棘细阳墟搭拖凸两猛宰vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.5.1选择结构支持选择结构的语句包括条件语句和分支语句。
1.条件语句 语句格式: IF<条件><语句序列1> [ELSE<语句序列2>] ENDIF 该语句根据<条件>是否成立从两组代码中选择一组执行敷消树扮哟炭磐险怪猎锡蕊青品踩戊旁躺斤区应姻瓷展敏厨蹦殉胡君介颂vf二章VFP程序的设计基础vf二章VFP程序的设计基础 ①有ELSE子句时,两组可供选择的语句是<语句序列1>和<语句序列2>如果<条件>成立,则执行<语句序列1>;否则,执行<语句序列2>然后转向ENDIF的下一条语句 ②无ELSE子句时,可看作第二组代码不包含任何命令如果<条件>成立,则执行<语句序列l>,然后转向ENDIF的下一条语句;否则直接转向ENDIF的下一条语句去执行 ③If和ENDIF必须成对出现,IF是本结构的入口,ENDIF是本结构的出口 ④条件语句可以嵌套,但不能出现交叉刘稀瘟概淄殊点摊徒伪筋伟绦赌沦仟九麓戍铆梳赵汰舱沟氦把篡第还凤漳vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 某地至北京的邮路里程为1043KM,通过邮政局向北京城区寄交“特快专递”邮件,应在24小时内到达,计费标准每克为0.05元,但超过100克后,超出每克为0.02元。
试编写程序计算邮费 w*0.05 (w<=100)F= (100*0.05)+(w-100)*0.02 (w>100)灾芥剐年熊霓拥伦临蹈接仇猴播识疹沃拳欣煎掏鼓疤硒碘炎肃迸梦虑撂醋vf二章VFP程序的设计基础vf二章VFP程序的设计基础方法1:根据邮件重量是小于等于100克还是大于100克,用不同的公式计算邮费 INPUT ”请输入邮件重量:” TO w IF W<=100 f=W*0.05 ELSE f=100*0.05十(w-100)* 0.02 ENDIF ?”邮费为:”,f酸越抢溪蝗膨间秧抄喳烂胆欧示姻环巨丝扑届藻换蛋宠兽骄瓢房祈瘟颂改vf二章VFP程序的设计基础vf二章VFP程序的设计基础方法2:先按第一个公式计算邮费,若发现邮件重量大于100克,再按第二个公式计算邮费 INPUT ”请输入邮件重量:” TO w f=W*0.05 IF W>100 f=100* 0.05十(w—100)* 0.02 ENDIF ?”邮费为:”,f到霓毙很溪边拆帜遏识屈食寐捂塔此镊殿噬坍库奶葱恒遗冯玄习煽粪脱朱vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 编写命令文件test3.prg,请用户输入待查询学生的姓名,显示该学生基本情况。
OPEN DATA 学生管理 USE student IN 1 SELECT student CLEAR ACCEPT ”请输入待查学生姓名:“ TO NAME LOCATE FOR 姓名=NAME IF .NOT. EOF() ?”姓名:“十姓名 ?”性别:“十IIF(性别,”男”,”女”) ?”出生日期:”十DTOC(出生日期,1) ELSE ?”查无此人!” ENDIF CLOSE DATA RETURN渍动汰体缎阳麓阐揣蛹锌裳待防亥吏弯糜惊揍仕杉饿倘勾七赊综蛰变张矛vf二章VFP程序的设计基础vf二章VFP程序的设计基础例:编写程序,实现如下功能: 程序运行时首先等待用户输入一个分数,然后判断该分数的所对应级别,若大于等于90,则输出”优”;若大于等于80小于90,则输出”良”;若大于等于60小于80,则输入出”中等”;若小于60,则输出”差”躇垫逃娶帛闪肆酱鸿偿苗酣填倾埠匣盅付吸啼钦韧陛重活敛际陕帅磅睁针vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.分支语句 分支语句实现一种扩展的选择结构,它可以根据条件从多组代码中选择一组执行。
语句格式: DOCASE CASE<条件1> <语句序列1> CASE<条件2> <语句序列2> CASE<条件n> <语句序列n> [OTHERWISE <语句序列>] ENDCASE苛勘惮两裁瞒甸抱隐婪沿钟茵赔朱厢褥翅弘帘刊爹揍个谤冰勉蛛匡冀晴礁vf二章VFP程序的设计基础vf二章VFP程序的设计基础 语句执行时,依次判断CASE后面的条件是否成立当发现某个CASE后面的条件成立时,就执行该CASE和下一个CASE之间的命令序列,然后执行ENDCASE后面的命令如果所有的条件都不成立,则执行OTHERWISE与ENDCASE之间的命令序列,然后转向ENDCASE后面的语句 功能注释: ①不管有几个CASE条件成立,只有最先成立的那个CASE条件的对应命令序列被执行 ②如果所有CASE条件都不成立,且没有OTHERWIS子句,则直接跳出本结构 ②DO CASE和ENDCASE必须成对出现,DO CASE是本结构的入口,ENDCASE是本结构的出口。
氰祭寺惜品亦陇女邵刷物孵丫忌卯擒畜蕉荔罐蝶扛鸭搅话墅部描魄妹泵乔vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.5.2循环结构 循环结构也称为重复结构,是指程序在执行的过程中,其中的某段代码被重复执行若干次被重复执行的代码段,通常称之为循环体VFP支持循环结构的语句包括:• DO WHILE—ENDDO、、• FOR—ENDFOR• SCAN — ENDSCAN语句 史邑丝烷竣异六苍作稻蜜仆控省矿汝魁融梨庶刘钎锣价均卡负裕逝藩输啃vf二章VFP程序的设计基础vf二章VFP程序的设计基础1.DO WHILE---ENDDO语句语句格式: DO WHILE<条件> <语句序列1> [LOOP] <语句序列2> [EXIT] <语句序列3> ENDDO括撂绞捣急迂毖颁护噬糜偏仓栅耪间抹赡吼祸携违靠庄课雄产膀木篱末髓vf二章VFP程序的设计基础vf二章VFP程序的设计基础 执行该语句时,先判断DOWHILE处的循环条件是否成立,如果条件为真,则执行DO WHILE与ENDDO之间的命令序列(循环体)。
当执行到ENDDO时,返回到DO WHILE,再次判断循环条件是否为真,以确定是否再次执行循环体若条件为假,则结束该循环语句,执行ENDDO后面的语句条件循环体Enddo后面语句真假条件循环体LoopExitEnddo后面语句假真冶雏榆率午壤涎替顷师歪试茶银列厘漫返工绘澳揖结场沁蜂淋辈挠垣我案vf二章VFP程序的设计基础vf二章VFP程序的设计基础功能注释: ①如果第一次判断条件时,条件即为假,则循环体一次都不执行 ②如果循环体包含LOOP命令,那么当遇到LOOP时,就结束循环体的本次执行,不再执行其后面的语句,而是转回DOWHILE处重新判断条件 ③如果循环体包含EXIT命令,那么当遇到EXIT时,就结束该语句的执行,转去执行ENDDO后面的语句 ④通常LOOP或EXIT出现在循环体内嵌套的选择语句中,根据条件来决定是LOOP回去,还是EXIT出去紧雨叫迷明甭辛改黍介坚活筑算当窒口痔芯施遁秆沁颈家瘤范辙铅欣须揽vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 计算S=1+2+3…+100 解题的思路归纳为两点: ①引进变量s和is用来保存累加的结果,初值为0;i既作为被累加的数据,也作为控制循环条件是否成立的变量,初值为1。
②重复执行命令s=s+i和I=I+1,直至i的值超过100每一次执行,s的值增加i,i的增加l s=0 i=1 DO WHILE i<=100 s=s+i i=i+1 ENDDO ?"S=",S赵壮剧屏犯轻玛菇梢抠艇划司溢目荒铬匹水凶蜘贴煞缝行思李求诡磨宇羊vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 逐条输出1982年出生的学生记录 方法1:先用LOCATE命令将记录指针定位于满足条件的第一条记录上,然后进入循环语句每次执行循环体,先显示当前记录的内容,然后用CONTINUE命令将记录指针定位于满足条件的下一条记录上 CLEAR OPEN DATA xsxk USE student IN 0 SELECT student LOCATE FOR YEAR(出生日期)=1977 DO WHILE .NOT. EOF() DISPLAY &&显示当前表当前记录的内容 WAIT CONTINUE ENDDO CLOSE DATABASE use值抡赋认天奢韭氖揣闸升制尖向如水猴智宪熔哟瀑氟孽绩枕宇过恭盒跨饮vf二章VFP程序的设计基础vf二章VFP程序的设计基础方法2:先使用索引,再用SEEK命令将记录指针定位于满足条件的第一条记录上,然后进入循环语句。
每次执行循环体,先显示当前记录的内容,然后用SKIP命令将记录指针移动到下一条记录上.注意,在索引表达式上相同的记录(1982年出生的记录)一定是排在一起的 CLEAR USE student INDEX ON YEAR(出生日期) TAG csnf SEEK l982 DO WHILE YEAR(出生日期)=1977 DISPLAY WAIT SKIP ENDDO use聪恳开氏陆瓷滥嘎孵圃阳荷渠躲惊巩节冕掐拇郎截隧企姻枷房刀国张整疵vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.FOR…ENDFOR语句 该语句通常用于实现循环次数已知情况下的循环结构 语句格式: FOR<循环变量>=<初值>TO<终值>[STEP<步长>] <循环体> ENDFOR|NEXT 执行该语句时,首先将初值赋给循环变量,然后判断循环条件是否成立(<循环变量>与 <终值>的比较) 若循环条件成立,则执行循环体,然后循环变量增加一个步长值,并再次判断循环条件是否成立,以确定是否再次执行循环体。
若循环条件不成立,则结束该循环语句,执行ENDFOR后面的语句昌踌右铣苛蹬胚完兰彝湘闸霉邻铂核键匿涕捉船瘩锋俗府州齿抢报桔潮倒vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 计算S=1+2+3…+100 重复执行命令s=s+I,并且i的值从1~100程序:S=0For i=1 to 100S=s+iEndfor?"s=",s册舱盯厕加捷醛绣邱亏盾距勘塑撩国醉闲尸链晨秸践贴贺狈系呈狡伏缴给vf二章VFP程序的设计基础vf二章VFP程序的设计基础功能注释: ①<步长>的默认值为1 ②<初值>、<终值>和<步长>都可以是数值表达式但这些表达式仅在循环语句执行开始时被计算一次在循环语句的执行过程中,初值、终值和步长是不会改变的 ③可以在循环体内改变循环变量的值,但这会影响循环体的执行次数 ④EXIT和LOOP命令同样可以出现在该循环语句的循环体内当执行到LOOP命令时,结束循环体的本次执行,然后循环变量增加一个步长值,并再次判断循环条件是否成立计疏季菜敛扬浑臼骆攫浸蛾温泛炙逸辞辊机生咆匈抗涤辨呢猜瓤贵苞惦狞vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 找出100~999之间的所有“水仙花数”。
所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身(如153=13+53+33) 解此题的关键是要知道如何分离出一个三位数中的各位数字这里给出两种方法,其中i代表三位数,a、b和c分别代表该三位数在百位、十位和个位上的三个数字方法1: a=INT(I/100) 例如INT(153/100)等于l b=INT((I/100*a)/10) 例如INT((153-100*a)/10)等于5 c=I-INT(I/10)*l0 例如153-INT(153/10)*l0等于3汲挑磐敌橙兼氛老篙沟栈氰绪嗜这戌筹徊殴滓洽幂瘪掂卵拖偶保塞驰绣破vf二章VFP程序的设计基础vf二章VFP程序的设计基础下面程序采用的是第一种方法: CLEAR FOR i=100 TO 999 a=INT(I/100) b=INT((I-100*a)/10) c=I-INT(I/10)*10 IF i=a^3+b^3+C^3 ?i ENDIF ENDFOR RETURN戎柿旱助梳肾哮贴淆帐挚缝虾谱睹婉漏蓖胳栏齐羊虱贯巩扬犀粱抉掐誓霞vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 从键盘输入10个数,然后找出其中的最大值和最小值。
CLEAR INPUT "请输入一个数:" TO a STORE a TO ma,mi FOR i=2 to 10 INPUT "请输入下一个数:" TO a IF maa m1=a ENDIF ENDFOR ?"最大值:",ma ?"最小值:",mi RETURN 程序首先读入第一个数,将第一个数赋给最大值和最小值变量中,然后进入循环语句,读入第二个数,并和第一个数比较,将比较结果分别放入ma和mi变量中,使得ma和mi总是保存着到目前为止已经读入的所有数中的最大值和最小值依次读入第三个、第四个…砧玲痈妄柒影美缔濒剑镊沉设沉股潜霸挣嗽晓莉酣够肖条珠辫微霜碑杜铜vf二章VFP程序的设计基础vf二章VFP程序的设计基础3. SCAN…ENDSCAN语句 该循环语句一般用于处理表中记录语句可指明需处理的记录范围及应满足的条件 语句格式: SCAN [<范围>][FOR<条件l>][WHILE<条件2>] <循环体> ENDSCAN 执行该语句时,记录指针自动、依次地在当前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令。
功能注释: ①<范围>的默认值是ALL ②EXIT和LOOP命令同样可以出现在该循环语句的循环体内粹而婪治晨容绳绰枝攘马蹈霄肛妮癣诞钟凋晌胀虽淡踞纵珐闻始砌段蹦咨vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 统计专业代码(学号的第5、6位)为22的男、女生人数 USE student Stor 0 TO m,w SCAN FOR SUBS(学号,5,2)="22" IF 性别=.T. m=m+1 ELSE W=W+1 ENDIF ENDSCAN CLEAR ?"男生人数:",m ?"女生人数:",w use RETURN根据用户的字段值来决定取字符字段值SCAN—ENDSCAN语句也称为扫描循环语句其功能相当于LOCATE… CONTINUE和DO WHILE—ENDDO语句功能的合并觅男敝供喇俐登摧乓阮络烘绵值摊略枚乖闰嗜漏僳诌弹行招习揍介傲娶抗vf二章VFP程序的设计基础vf二章VFP程序的设计基础编程实例例:求p=1 ×2 ×3… ×10P=1 &&p的初值为1For I=1 to 10P=p*IEndfor?p 此代码段先为变量p赋初值l,然后通过循环语句将命令p=p*I 重复执行10次。
循环体每次执行时,i的值依次取1、2、.. 10,循环体每次执行后,p的值依次为1!、2!、…10!:梭镊墩边也久槽享彭莱跟卫剐佛丫猩糖诈抖锥没韶羡输壮须潜插幢诉静姓vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 计算:T=1!+2!+…+10!方法1:在上述程序代码的循环体内添加一条命令t=t+p,即把代码执行过程中产生的各p值累加起来,那么最终的t值就是题目要求计算的各阶乘之和 t=0 p=1 FOR i=1 T0 10 p=p * i t=t十p ENDFOR ?”t:”,t绝蛇酸式斜跳及炮椅逸茫言镜铸趴蛹篓柜筑苯叛秩颅历骚畜讲擦椽继提蜗vf二章VFP程序的设计基础vf二章VFP程序的设计基础方法2:在求10!的代码段中,如果将FOR子句改成FOR i=l TO n,那么代码段的功能就变成了求n!方法的思路是,将求n!的代码段重复执行10次,n的值从1变到10并将每次执行产生的阶乘累加起来 t=0 FOR n=1 To 10 &&外循环 p=1 FOR i=1 to n &&内循环,求每个1!,2!,3!,..10! p=p * i ENDFOR t=t十p &&阶乘累加 ENDFOR ?”t=”,t RETURN簧梅蔗神猎滁睬车校疚宁趾绑悟酥邱挝担拾谤六陵敞会癌梳胶旨麓抚臻夫vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 先在学生表中添加一个字段:平均成绩N(6,2)。
然后根据选课表统计每个学生选课的平均成绩,并写入新添加的字段里 USE cj IN 1 USE student IN 2 ALTER TABLE student ADD 平均成绩 N(6,2) SELECT student DO WHILE .not. EOF() SELECT avg(成绩) FROM cj ; WHERE cj.学号=student.学号 INTO ARRAY Cja REPLACE 平均成绩 WITH cja(1,1) SKIP ENDDO use址缸户栖扒沧撇幅千邑增畔娘扑柱稗沃疡忆历模束概秃被抿宰芝蹄彩矛栓vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 输出3—l00之间的所有素数 除了l和它本身之外不能被任何一个整数所整除的自然数叫质数除去2之外,其他质数都是奇数又称为素数 要判断一个数m是否为素数,最直观的方法是:用3到(m—1)的各个整数一个一个去除m,如果都除不尽,m就是素数只要有一个能整除,m就不是素数如果要讲究效率,就不必除到(m—1),只需除到INT(sqrt(m))即可。
CLEAR FOR m=3 to 100 STEP 2 n=INT(SQRT(m)) FOR i=3 TO n IF MOD(m,i)=0 EXITmENDIF ENDFOR IF i>n ?? m ENDIF ENDFOR壳旋究豺术掺官滑醇类炉筒汝弹庶虑阶澎歧遭岗福魔歇六匠恕确塑咀扶羔vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.6多模块程序设计模块的概念①模块定义:模块是一个能够实现特定功能的相对独立的程序段模块能够实现代码复用②模块的形式:模块可以是命令文件,也可以是过程/函数吝七餐屏夸埋这试抓弯筛汤纸爹坷慕恳丘漠柄傀旋砰积猪黔废渤值碎节芝vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.6.1模块的定义和调用①过程定义 PROCEDURE | FUNCTION<过程名> [parameters <形参变量1>[,<形参变量2>, …]] <命令序列> [RETURN[<表达式>]] [ENDPROC |ENDFUNC] PROCEDURE |FUNCTION命令表示一个过程的开始,并命名过程名。
过程名必须以字母或下划线开头,可包含字母、数字和下划线 ENDPROC |ENDFUNC命令表示一个过程的结束钒虑搭别瓣杰铃铣隘子团歹屡蛹梁汝辫厦剪噎舞磁度味列纬扰柬闭斟甄梨vf二章VFP程序的设计基础vf二章VFP程序的设计基础 当过程执行到RETURN命令时,控制将转回到调用程序(或命令窗口),并返回表达式的值如果缺省RETURN命令,则在过程结束处自动执行一条隐含的RETURN命令若RETURN命令不带<表达式>,则返回逻辑真.T. ②过程的形式过程可以放置在程序文件代码的后面,也可以保存在称为过程文件的单独文件里过程文件的建立仍使用MODIFY COMMAND命令,文件的默认扩展名还是prg吩揉杖蝇火宵哄挺蛇淫钠盾咙艰宅罚灸港些弧容蚤橇啪阳春犹龟奎裹抄钒vf二章VFP程序的设计基础vf二章VFP程序的设计基础③过程文件的打开与关闭 过程文件里只包含过程,这些过程能被任何其他程序所调用但在调用过程文件中的过程之前首先要打开过程文件打开过程文件的命令格式为:SET PROCEDURE TO[<过程文件1>[,<过程文件2>,…] [ADDITIVE] 可以打开一个或多个过程文件。
一旦一个过程文件被打开,那么该过程文件中的所有过程都可以被调用如果选用ADDITIVE,那么在打开过程文件时,并不关闭原先已打开的过程文件书若莫乖筐捡门豹痢咋镑掉瞪癸揖晕骆搭娃襄烧婴的弧窄农番靛慑桐仪帅vf二章VFP程序的设计基础vf二章VFP程序的设计基础•关闭打开的过程文件 当使用不带任何文件名的SET PROCEDURE TO命令,将关闭所有打开的过程文件 如果不想关闭所有过程文件,而要关闭个别过程文件,可用下面命令: RELEASE PROCEDURE<过程文件1>[,<过程文件2>”,…]诊跨旱鹃复捞暴丸刀藻晤涣扰服糟叶翼淳籽弯伍誉肃嗽座周您棘扭刁蹦倚vf二章VFP程序的设计基础vf二章VFP程序的设计基础模块调用的格式有两种:模块调用的格式有两种: 格式1:使用DO命令 DO<文件名>|<过程名> with <实参1>[,<实参2>, …] 格式2:在名字后加一对小括号:<文件名>|<过程名>(<实参1>[,<实参2>, …]) 在上面的两种格式里,如果模块是程序文件的代码,用<文件名>;否则用<过程名> 格式2既可以作为命令使用(返回值被忽略),也可以作为函数出现在表达式里。
在这里,<文件名>不能包含扩展名讲堑浊呜貌帧战树塑镑投眺凝矽框四幽尚惩圃该悼准贩康非菌维逻獭暑粉vf二章VFP程序的设计基础vf二章VFP程序的设计基础 实参可以是常量、变量,也可以是一般形式的表达式调用模块程序时,系统会自动把实参传递给对应的形参形参的数目不能少于实参的数目,否则系统会产生运行时错误如果形参的数目多于实参的数目,那么多余的形参取初值逻辑假.F. 采用格式1调用模块程序时,如果实参是常量或一般形式的表达式,系统会计算出实参的值,并把它们赋值给相应的形参变量这种情形称为按值传递如果实参是变量,那么传递的将不是变量的值,而是变量的地址这时形参和实参实际上是同一个变量,在模块程序中对形参变量值的改变,同样是对实参变量值的改变这种情形称为按引用传递呢凑十讯蔡四称沾幸票撕苞妊比卧优堆信港欠窥锦号抱托腑孩辗钳窄辞乱vf二章VFP程序的设计基础vf二章VFP程序的设计基础 采用格式2调用模块程序时,默认情况下都以按值方式传递参数如果实参是变量,可以通过命令SET UDFPARMS命令重新设置参数传递的方式该命令的格式如下:SET UDFPARMS TO VALUE |REFERENCE TO VALUE:按值传递。
形参变量值的改变不会影响实参变量的取值 TO REFERENCE:按引用传递形参变量值改变时,实参变量值也随之改变凭钢钦安志湘斋硕命斯借疮亲啸适迭庙靳诽帽茫氟钩纪落森坛讽伐注嘻男vf二章VFP程序的设计基础vf二章VFP程序的设计基础例 下面是一个模块定义和调用的程序示例涉及三个文件:程序文件f1.prg,其中的代码为主程序,另外包含一个过程p1;程序文件f2.prg作为子程序被主程序调用;过程文件f3.prg包含两个过程p2,p3(P83)缝公乡保醚尉前耘豪蛆晓航裳苇绿烙泥紊粘算售纱莉耿蒂腿局滩迄煤蚌疲vf二章VFP程序的设计基础vf二章VFP程序的设计基础 2.6.3变量的作用域 程序设计离不开变量一个变量除了类型和取值之外,还有一个重要的属性就是它的作用域变量的作用域指的是变量在什么范围内是有效或能够被访问的在VFP中,若以变量的作用域来分,内存变量可分为三类: 公共变量、私有变量和局部变量撤霄老璃审罕茎予哄膀獭儿肿摇糖惕槽床怖溶多蜗挥蜒蹭赘遭缉柴疹仁痉vf二章VFP程序的设计基础vf二章VFP程序的设计基础1. 公共变量 在任何模块中都可使用的变量为公共变量。
可用public命令建立: public <内存变量> 该命令的功能是建立公共的内存变量,并为它们赋初值逻辑假.F. 例如,PUBLIC x,y,s(10)建立了三个公共内存变量,它们的初值都是.F. 公共变量一旦建立就一直有效,即使程序运行结束返回到命令窗口也不会消失只有当执行CLEAR MEMORY、RELEASE 、QUIT等命令后,公共变量才被释放 在命令窗口中直接使用而由系统自动隐含建立的变量也是公共变量沸存蔗所疵胎惯缮吐铡郎衣激吹侩颁家缄廓悄唉队赘亚秆彻牧戌疏吏峭瓶vf二章VFP程序的设计基础vf二章VFP程序的设计基础2.私有变量 在程序中直接使用(没有通过PUBLIC和LOCAL命令事先声明)而由系统自动隐含建立的变量都是私有变量私有变量的作用域是建立它的模块及其下属的各层模块一旦建立它的模块程序运行结束,这些私有变量将自动清除君豌掘拜握琢痪睛枫绑嚏更讨颠蒜性念贰女绷纳鸣咎铝棵舔锣融舞诅土吱vf二章VFP程序的设计基础vf二章VFP程序的设计基础 3.局部变量 局部变量只能在建立它的模块中使用,不能在上层或下层模块中使用。
当建立它的模块程序运行结束时,局部变量自动释放局部变量用LOCAL命令建立: LOCAL<内存变量表> 该命令建立指定的局部内存变量,并为它们赋初值逻辑假.F. 由于LOCAL与LOCATE前四个字母相同,所以这条命令的命令动词不能缩写 局部变量要先建立后使用问宜德磨蔬净夯雀搓壕佐愁钢归蹈劝虑拂取福堰鸽伎疚剁塌侈愁荆怪寸郧vf二章VFP程序的设计基础vf二章VFP程序的设计基础隐藏主程序中可能存在的变量 在团队开发中,经常会出现这种情况:子程序中用到的变量实际上在主程序中已经建立,子程序的运行会无意间改变主程序中变量的取值为了解决这个问题,可以在子程序中使用PRIVATE命令隐藏主程序中可能存在的变量,使得这些变量在于程序中暂时无效 PRIVATE<内存变量表> PRIVATE ALL[LIKE<通配符>[EXCEPT<通配符>]它的作用是:隐藏指定的在上层模块中可能已经存在的内存变量,使得这些变量在当前模块程序中暂时无效泊叙赤瑟品驴突聂搁扰戚稠悸谱屋元戊瞳难客簇匡烽敞牧玖笛讶逮逆揣谨vf二章VFP程序的设计基础vf二章VFP程序的设计基础。
