1、 5.1 条件表达式条件表达式 在条件语句中作为判断依据的表达式称为在条件语句中作为判断依据的表达式称为“条件表达式条件表达式”,条件表达式的取值为逻辑值:真(,条件表达式的取值为逻辑值:真(.T.、.t.)或假()或假(.F.、.f.)。)。根据根据“条件条件”的简单或复杂程度,条件表达式可以分为的简单或复杂程度,条件表达式可以分为两类:关系表达式与逻辑表达式。两类:关系表达式与逻辑表达式。5.1.1 关系运算符与关系表达式关系运算符与关系表达式VFP提供的关系运算符有提供的关系运算符有8种,见表种,见表5-1。运算符名称例子说明小于3 4值为:.T.=小于或等于4 大于0 1值为:.F.=
2、大于或等于aa=ab 值为:.F.=等于、#、!=不等于$包含于Fox$FoxPro值为:.T.=等同于 5.1.2 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式 逻辑运算符的运算规则,见表5-3。aba AND ba OR bNOT a.T.T.T.T.F.T.F.F.T.F.F.T.F.T.T.F.F.F.F.T.5.2 条件选择语句条件选择语句对给定的条件进行分析、比较和判断,根据结果采取不同对给定的条件进行分析、比较和判断,根据结果采取不同的操作。让计算机具有智能性。的操作。让计算机具有智能性。分支结构分支结构 或称或称“选择结构选择结构”一、分支结构一、分支结构(选择结构)选择结构)
3、IF 语句或命令语句或命令 语句或命令语句或命令 .ELSE 语句或命令语句或命令 语句或命令语句或命令 .ENDIF语句组语句组A语句组B 语句序列语句序列A.T.条件条件语句序列语句序列B ENDIF.F.条件为真条件为真 执执行语句组行语句组A,再再执行执行ENDIF之之后语句。后语句。条件为假条件为假 执执行语句组行语句组B,再再执行执行ENDIF之之后语句。后语句。各占一行。各占一行。ELSE分支可分支可没有。没有。编写求绝对值程序编写求绝对值程序 A(当当A=0时时)F=|A|=-A(当当A=0 IF A=0 F=A F=AELSEELSE F=-A F=-AENDIFENDIF?
4、A?A的绝对值为的绝对值为:,F:,F 文本框(文本框(TextBox)控件)控件事件事件:GotFocus:获得焦点时发生的事件。:获得焦点时发生的事件。对象获得对象获得“光标光标”时,要处理的代码过程。时,要处理的代码过程。LostFocus:失去焦点时发生的事件:失去焦点时发生的事件。对象失去对象失去“光标光标”之前时,要处理的代码过程。之前时,要处理的代码过程。InteractiveChange:更改数据时发生的事件:更改数据时发生的事件。When:获得焦点时发生的事件。做合法检查。:获得焦点时发生的事件。做合法检查。Valid:失去焦点之前发生的事件:失去焦点之前发生的事件。做合法检
5、查,做合法检查,RETURN.F.(RETURN 0)不能失去光标。多不能失去光标。多用于密码的验证。用于密码的验证。【例例5-2】设计一个验证口令的表单。输入口令时文本框中只显示相同个数的设计一个验证口令的表单。输入口令时文本框中只显示相同个数的“*”号,如图号,如图5-2所示。所示。【例例5-3】求函数值(如图求函数值(如图5-4所示)。输入所示)。输入x,计,计算算y的值,其中:的值,其中:分析:该题是数学中的一个分段函数,在选择条件分析:该题是数学中的一个分段函数,在选择条件时,既可以选择时,既可以选择x 0作为条件,也可以选择作为条件,也可以选择x=0真真y 4*xx=0时的时的y值
6、值假假y 15 2*xx=0,4*x,15 2*x)THISFORM.Text2.Value=yTHISFORM.Text1.SelStart=0THISFORM.Text1.SelLength=LEN(THISFORM.Text1.Text)THISFORM.Text1.SetFocus3.使用IIF函数 4.IF语句的嵌套语句的嵌套 如果在如果在IF语句中操作块语句中操作块a1块(语句列块(语句列1)或)或a2块(语句列块(语句列2)本身又是一个)本身又是一个IF语句,则称为语句,则称为IF语句的嵌套。语句的嵌套。【例例5-5】某百货公司为了促销,采用购物打折扣的优惠办法:每位顾客一次购某
7、百货公司为了促销,采用购物打折扣的优惠办法:每位顾客一次购物物 在在1000元以上者,按九五折优惠。元以上者,按九五折优惠。在在2000元以上者,按九折优惠。元以上者,按九折优惠。在在3000元以上者,按八五折优惠。元以上者,按八五折优惠。在在5000元以上者,按八折优惠。元以上者,按八折优惠。编写程序,输入购物款数,计算并输出优惠价。编写程序,输入购物款数,计算并输出优惠价。分析:设购物款数为分析:设购物款数为x元,优惠价为元,优惠价为y元,则计算优惠价的流程图如图元,则计算优惠价的流程图如图5-6所示。所示。输入输入x输入购物款数输入购物款数如果如果x 1000真真y xx 1000假假如
8、果如果x 20001000 x 2000真真y 0.95*x假假如果如果x 30002000 x 3000真真y 0.9*x假假如果如果x 50003000 x 5000输出输出y输出优惠价输出优惠价 多分支条件选择语句多分支条件选择语句DO CASE语法结构语法结构 DO CASE语句的语法格式为:语句的语法格式为:DO CASE CASE 条件条件1 语句列语句列1 CASE 条件条件2 语句列语句列2 .OTHERWISE 其他语句列其他语句列ENDCASE 5.2.2 多分支条件选择语句多分支条件选择语句DO CASE 【例例5-6】在例在例5-5中使用中使用DO CASE语句来计算优
9、惠价,只需将其中命令按钮语句来计算优惠价,只需将其中命令按钮Command1的的Click事件代码改为事件代码改为x=THISFORM.Text1.ValueDO CASE CASE x 1000 y=x CASE x 2000 y=0.95*x CASE x 3000 y=0.9*x CASE x 5000 y=0.85*x OTHERWISE y=0.8*xENDCASETHISFORM.Text2.Value=yTHISFORM.Text1.SelStart=0THISFORM.Text1.SelLength=LEN(THISFORM.Text1.Text)THISFORM.Text1.
10、SetFocus 说明:程序运行结果与例说明:程序运行结果与例5-5相同,但是代码却清晰多了。相同,但是代码却清晰多了。5.3 提供简单选择的控件提供简单选择的控件 命令按钮组与选项按钮组都属于容器类控件,它们分别包含一些命令按钮和命令按钮组与选项按钮组都属于容器类控件,它们分别包含一些命令按钮和选项按钮,为我们执行多种任务或提供选择。复选框也是经常成组使用,以实现选项按钮,为我们执行多种任务或提供选择。复选框也是经常成组使用,以实现多项选择。多项选择。5.3.1 使用命令按钮组使用命令按钮组Commandgroup 如果表单上有多个命令按钮,可以考虑使用命令按钮组(如果表单上有多个命令按钮,
11、可以考虑使用命令按钮组(Commandgroup)。)。使用命令按钮组可以使代码更为简洁,界面更加整齐。使用命令按钮组可以使代码更为简洁,界面更加整齐。1.命令按钮组命令按钮组 命令按钮组是一个容器对象,命令按钮组是一个容器对象,常用属性:常用属性:ButtonCount属性:设置按钮的个数,属性:设置按钮的个数,ButtonCount属性的默认值为属性的默认值为2。Value属性:指示单击了那个按钮。属性:指示单击了那个按钮。常用事件常用事件:Click2.按钮组生成器按钮组生成器 使用按钮组生成器可以方便我们设计命令按钮组。使用按钮组生成器可以方便我们设计命令按钮组。命令按钮组(命令按钮组
12、(CommandGroup)控件)控件 Thisform.Commandgroup1.Command1.xxxx Thisform.Commandgroup1.buttons(1).xxxx【例例5-7】使用命令按钮组的程序。设银行使用命令按钮组的程序。设银行定期存款年利率为定期存款年利率为1年期年期2.25%,2年期年期2.79%,3年期年期3.33%,5年期年期3.60%(不(不计复利)。今有本金计复利)。今有本金a元,元,5年以后使用,年以后使用,共有以下共有以下6种存法:种存法:存一次存一次5年期。年期。存一次存一次3年期,一次年期,一次2年期。年期。存一次存一次3年期,两次年期,两次
13、1年期。年期。图图5-10 使用命令按钮组使用命令按钮组存两次存两次2年期,一次年期,一次1年期。年期。存一次存一次2年期,三次年期,三次1年期。年期。存五次存五次1年期。年期。分别计算各种存法分别计算各种存法5年后到期时的本息合计,如图年后到期时的本息合计,如图5-12所示。所示。分析:设分析:设x1、x2、x3、x5分别表示分别表示1年、年、2年、年、3年、年、5年定期储蓄的利率,年定期储蓄的利率,a表示本金,则定期的本息计算公式分别为:表示本金,则定期的本息计算公式分别为:(1+x1)a、(1+2x2)a、(1+3x3)a、(1+5x5)a。选项按钮组是一组相互排斥的选项按钮(或选项按钮
14、组是一组相互排斥的选项按钮(或称为单选按钮)。称为单选按钮)。常用属性:常用属性:ButtonCount属性:设置按钮的个数,属性:设置按钮的个数,ButtonCount属性的默认值为属性的默认值为2。Value属性:指示单击了那个按钮。属性:指示单击了那个按钮。常用事件常用事件:Click选项按钮组是一个容器类控件选项按钮组是一个容器类控件1.选项组与选项组生成器选项组与选项组生成器【例例5-8】利用选项组控制例利用选项组控制例5-7中存款利息的计算,如图中存款利息的计算,如图5-14所示。所示。设计步骤如下:设计步骤如下:建立应用程序用户界面。选择新建表单,进入表单建立应用程序用户界面。选
15、择新建表单,进入表单设计器,增加一个选项按钮组控件设计器,增加一个选项按钮组控件OptionGroup1、一个文本框、一个文本框Text1、一、一个形状控件个形状控件Shape1、3个标签控件个标签控件Label1Label3。将选项按钮组控件将选项按钮组控件OptionGroup1的的ButtonCount属性改为属性改为6,将形状控,将形状控件件Shape1的的SpecialEffect属性改为属性改为0 3维,如图维,如图5-15所示。所示。5.3.2 使用选项按钮组使用选项按钮组OptionGroup 2.选项组的图形方式选项组的图形方式 在表单中,可以同时使用不同的选项按钮组来控制不
16、同的在表单中,可以同时使用不同的选项按钮组来控制不同的选择,并且可以将选项组设计成图形按钮的形式。选择,并且可以将选项组设计成图形按钮的形式。【例例5-9】利用图形选项组控制文本的对齐方式与字体,如图利用图形选项组控制文本的对齐方式与字体,如图5-16所示。所示。.选项按钮组属于多项中选择一项的选择,若需要选择多项的情况,可选项按钮组属于多项中选择一项的选择,若需要选择多项的情况,可以采用多个复选框控件。以采用多个复选框控件。复选框的状态由其复选框的状态由其Value属性决定:属性决定:0或或.F.假假 1或或.T.真真 2或或.NULL.暗暗 Value属性反映最近一次指定的数据类型,可以设
17、置为逻辑型或是数属性反映最近一次指定的数据类型,可以设置为逻辑型或是数值型。值型。1.使用复选框使用复选框 【例例5-10】利用复选框来控制输入或输出文利用复选框来控制输入或输出文本的字体风格,如图本的字体风格,如图5-18示。示。5.3.3 使用复选框使用复选框【例例5-11】同同5-10说明:说明:SetAll()方法可以在容器对象中给所有或一部分控件同时方法可以在容器对象中给所有或一部分控件同时设置属性。代码:设置属性。代码:THISFORM.SetAll(Enabeld,THIS.Value,CheckBox)表示将所有复选框(表示将所有复选框(CheckBox)的)的Enabeld属
18、性设置为本属性设置为本复选框的值(复选框的值(THIS.Value)。)。可以设计仅有文字或仅有图形的复选框按钮。可以设计仅有文字或仅有图形的复选框按钮。5.4.1 使用计时器使用计时器 计时器(计时器(Timer)控件由系统时钟控制,用于按)控件由系统时钟控制,用于按时间决定是否启动一个定时事件,可以在指定的时时间决定是否启动一个定时事件,可以在指定的时间间隔执行操作和检查数值。计时器控件在设计时间间隔执行操作和检查数值。计时器控件在设计时显示为一个小时钟图标,而在运行表单时则不可见,显示为一个小时钟图标,而在运行表单时则不可见,常用来做一些后台处理。常用来做一些后台处理。如:如:滚动字幕的
19、表单、动画表单。滚动字幕的表单、动画表单。以属性以属性Interval值为间隔,执行值为间隔,执行Timer 事件的代码。事件的代码。Interval:毫秒为时间间隔单位,调用计时器:毫秒为时间间隔单位,调用计时器(Timer)事件的时间间隔。置)事件的时间间隔。置0计时器不工作。计时器不工作。Enabled:计时器是否工作计时器是否工作5.4 计时器与微调器计时器与微调器 1.计时器的计时功能计时器的计时功能 利用利用VFP的计时器控件,可以很方便的设计一个的计时器控件,可以很方便的设计一个电子表。电子表。【例例5-12】在表单上设计一个数字时钟,如图在表单上设计一个数字时钟,如图5-22所
20、示。所示。【例例5-13】设计一个电子游动标题板,标题设计一个电子游动标题板,标题“使用使用VFP设设计动画计动画”在表单的黄色区域(容器中)自右至左地反复移在表单的黄色区域(容器中)自右至左地反复移动。单击动。单击“暂停暂停”按钮,标题停止移动,按钮变成按钮,标题停止移动,按钮变成“继续继续”。单击单击“继续继续”按钮,标题继续移动,按钮又变回按钮,标题继续移动,按钮又变回“暂暂停停”(如图(如图5-23所示)。所示)。微调器(调器(Spinner)控件可以在一定范围内控制数据的变化。)控件可以在一定范围内控制数据的变化。微调器的微调器的KeyboardHighValue和和Keyboard
21、LowValue属性属性用来控制用户通过键盘输入的值,用来控制用户通过键盘输入的值,SpinnerHighValue和和SpinnerLowValue属性用来控制用户通属性用来控制用户通过鼠标单击箭头获得的值。过鼠标单击箭头获得的值。Increment属性用来设定数值增加或减少的量属性用来设定数值增加或减少的量【例例5-14】使用微调器改变例使用微调器改变例5-13中标题板中标题板的移动速度。的移动速度。设计步骤同例设计步骤同例5-13。此外,增加一个微调。此外,增加一个微调器控件器控件Spinner1、一个标签和一个形状,、一个标签和一个形状,如图如图5-25所示。所示。修改修改Spinne
22、r1的属性,见表的属性,见表5-10。5.4.2 使用微调器使用微调器 5.5 键盘事件键盘事件 在在VFP中使用键盘事件(中使用键盘事件(KeyPress)来响应各种按键操作。通过编写键盘事件)来响应各种按键操作。通过编写键盘事件的代码,可以响应和处理大多数的按键操作、解释并处理的代码,可以响应和处理大多数的按键操作、解释并处理ASCII字符。字符。5.5.1 KeyPress事件事件 KeyPress事件当用户按下并松开某个键时发生。其语法为:事件当用户按下并松开某个键时发生。其语法为:LPARAMETERS nKeyCode,nShiftAltCtrl 说明:说明:nKeyCode是一个
23、数值,一般表示被按下字符键的是一个数值,一般表示被按下字符键的ASCII码。特殊键和组合码。特殊键和组合键的编码,见表键的编码,见表5-11。nShiftAltCtrl参数表示按下的组合键(参数表示按下的组合键(Shift、Ctrl、Alt)。表)。表5-12列出单独的列出单独的组合键在组合键在nShiftAltCtrl中返回的值。中返回的值。键名值Shift1Ctrl2Alt4 键名单键ShiftCtrlAltIns2222146162Del77147163Home15529151End64923159PgUp185731153PgDn35130161上箭头上箭头556141152下箭头下箭
24、头2450145160左箭头左箭头195226155右箭头右箭头4542157Esc27-/27-/27-/1Enter131310-/166BackSpace12712712714Tab9SpaceBar323232/-57 具有焦点的对象才能接收该事件。具有焦点的对象才能接收该事件。任何与任何与Alt键的组合键,不发生键的组合键,不发生KeyPress事事件。件。【例例5-15】自动判断按键的程序。按下自动判断按键的程序。按下Enter键立刻开始计算面积(如图键立刻开始计算面积(如图5-26所示)所示)。编写文本框编写文本框Text1的按键(的按键(KeyPress)事件代)事件代码:码:
25、LPARAMETERS nKeyCode,nShiftAltCtrl if nkeycode=13 a=thisform.Text1.Value thisform.Text2.Value=a2*3.14 thisform.Text1.SelStart=0 thisform.Text1.SelLength=len(thisform.Text1.Text)thisform.Text1.SetFocus endif 其中,第一行代码是原有的,无需重复输入。其中,第一行代码是原有的,无需重复输入。习题习题5一、选择题 1.在SET EXACT OFF时,结果为真的表达式是:A)BCD$ABCD.AND
26、.ABCD=ABB)BCD$ABCD.AND.ABCD$ABC)ABCD$AB.AND.ABCD=ABD)ABCD$AB.AND.ABCD=AB 2.设变量x中的值为15,变量y中的值为21,则表达式(x=y).OR.(x y)的值为:A).T.B).F.C)1D)0 3.“x是小于100的非负数”,用VFP表达式表示正确的是A)0 x 100 B)0=x 100C)0=x AND x 100 D)0=x OR x 100 4.连续执行以下命令:SET EXACT OFFX=AY=IIF(A=X,X-BCD,X+BCD)此时,变量Y中的值为:A)AB)BCDC)ABCDD)A BCD 二、填空
27、题 1.闰年的条件是:年号(year)能被4整除,但不能被100整除;或者能被400整除。其逻辑表达式为(year%4=0 AND year%1000)or(YEAR%400=0)。2.一元二次方程ax2+bx+c=0有实根的条件为:a 0,并且b2-4ac 0。其逻辑表达式为A0 AND B2-4*A*C=0。3.征兵的条件是:男性(sex)年龄(age)在1820岁之间,身高(size)在1.65m以上;或者女性(sex)年龄(age)在1618岁之间,身高(size)在1.60m以上。其逻辑表达式为_。4.表达式2*4=9的值为_。5.表达式BCDX BCE的值为_。6.表达式12345
28、 12345+AB的值为_。7.表达式8 5 OR NOT 10 12+3的值为_。8.表达式23 3 AND 5 10的值为_。9.命题“n是m的倍数”用逻辑表达式表示为_n%m=0_。10.命题“n是小于正整数k的偶数”用逻辑表达式表示为_nkand n%2=0_。11.命题“|x|y|或x=abs(y)or xy。12.命题“x,y其中有一个小于z”用逻辑表达式表示为_xzoryz 13.命题“x,y都小于z”用逻辑表达式表示为_xz and yz_。三、编程题 1.输入3个不同的数,将它们从大到小排序。2.任给3个实数,求其中间数(即其值大小居中者)。3.输入一个整数,判断它是否能同时
29、被3、5、7整除。4.键盘输入a、b、c的值,判断它们能否构成三角形的3个边。如果能构成一个三角形,则计算三角形的面积。5.输入一个数字(06),用中英文显示星期几。6.若基本工资大于等于600元,增加工资20%;若小于600元大于等于400元,则增加工资15%;若小于400元则增加工资10%。请根据用户输入的基本工资,计算出增加后的工资。7 设计个人纳税计算程序。“税法”规定,工资、薪金所得,使用超额累进税率。以每月收入额减去800元后的余额,为应纳税所得额。其税率表见表5-13。级数全月应纳税所得额税率(%)级数全月应纳税所得额税率(%)1不超过500元564000060000元3025002000元1076000080000元35320005000元15880000100000元404500020000元209超过100000元4552000040000元25 8 输入圆的半径r,利用选项按钮,选择运算:计算面积、计算周长等。9 设计一个计时器,能够设置倒计时的时间,并进行倒计时。10 使用命令按钮组的设计简易计算器程序(如图5-27所示)。