440 likes | 636 Views
Visual FoxPro 程序设计教程. 第 4 章. 选择结构程序设计. 4.1 条件表达式 ■ 关系运算符与关系表达式 ■ 逻辑运算符与逻辑表达式 ■ 运算符的优先顺序 4.2 条件选择语句 ■ 单条件选择语句 IF ■ 多分支条件选择语句 DO CASE 4.3 提供简单选择的控件 ■ 命令按钮组. ■ 选项按钮组 ■ 复选框 4.4 计时器与微调器 ■ 计时器 ■ 微调器 4.4 键盘事件 ■ KeyPress 事件 ■ 响应键盘事件. 4.1 条件表达式. 4.1.1 关系运算符与关系表达式.
E N D
第 4章 选择结构程序设计 4.1条件表达式 ■ 关系运算符与关系表达式 ■ 逻辑运算符与逻辑表达式 ■ 运算符的优先顺序 4.2条件选择语句 ■ 单条件选择语句IF ■多分支条件选择语句DO CASE 4.3 提供简单选择的控件 ■ 命令按钮组 ■选项按钮组 ■ 复选框 4.4计时器与微调器 ■ 计时器 ■ 微调器 4.4键盘事件 ■KeyPress事件 ■ 响应键盘事件
4.1 条件表达式 4.1.1 关系运算符与关系表达式 • 关系运算符有8种:<、<=、>、>=、=、<>、#、 • !=、$、= = 4.1.1 逻辑运算符与逻辑表达式 • 逻辑运算符有3种:AND、OR、NOT 4.1.1 运算符的优先顺序 • 运算符的优先顺序:算术运算符、字符串运算符、 • 关系运算符、逻辑运算符 教学进程
4.2 条件选择语句 单条件选择语法结构: IF〈条件〉 [语句列1] [ELSE [语句列2]] ENDIF 教学进程
【例4-2】设计一个验证口令的表单。输入口令时文本框中只显示相同个数的“*”号,如图4-2所示。【例4-2】设计一个验证口令的表单。输入口令时文本框中只显示相同个数的“*”号,如图4-2所示。 设计步骤如下: (1) 建立应用程序用户界面。 (2) 设置对象属性。 教学进程
(3) 编写程序代码。图4-3 建立界面与设置属性 ●编写关闭按钮Command1的Click事件代码:THISFORM.Release 教学进程
●编写Text1的Valid事件代码: THISFORM.Command1.TabStop = .F. a = LOWER(THIS.Value) IF a= "abcd " THISFORM.Label1.Top = THIS.Parent.Top THISFORM.Label1.Caption="欢迎使用本程序!" THISFORM.Command1.TabStop = .T. THIS.Parent.Visible = .F. ELSE MESSAGEBOX("对不起,口令错!请重新输入!",48,"口令") THIS.SelStart=0 THIS.SelLength=LEN(RTRIM(THIS.Value)) ENDIF 教学进程
【例4-3】求函数值。输入x,计算y的值,其中:【例4-3】求函数值。输入x,计算y的值,其中: 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写程序代码。 根据流程图,可以写出命令按钮Command1的单击(Click)事件代码为: 教学进程 教学进程
x = THISFORM.Text1.Value IF x >= 0 y = 4 * x ELSE y = 15 – 2 * x ENDIF THISFORM.Text1.SelStart = 0 THISFORM.Text1.SelLength= EN(THISFORM.Text1.Text) THISFORM.Text1.SetFocus THISFORM.Text2.Value = y 教学进程 教学进程
●使用IIF函数 IIf函数的语法结构为: IIf(条件,真部分,假部分) 【例4-4】例4-3中命令按钮Command1的单击(Click)事件代码可以改为: x = THISFORM.Text1.Value y = IIF(x >= 0, 4 * x, 15 – 2 * x) THISFORM.Text2.Value = y THISFORM.Text1.SelStart = 0 THISFORM.Text1.SelLength=LEN(THISFORM.Text1.Text) THISFORM.Text1.SetFocus 教学进程
●IF语句的嵌套 【例4-5】铁路托运行李,从甲地到乙地,规定每张客票托运费计算方法是:行李重量不超过50公斤时,每公斤0.25元,超过50公斤而不超过100公斤时,其超过部分每公斤0.35元,超过100公斤时,其超过部分每公斤0.45元。编写程序,输入行李重量,计算并输出托运的费用。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 教学进程
(2) 编写程序代码。 根据流程图,可以写出命令按钮Command1的单击(Click)事件代码为: w = THISFORM.Text1.Value IF w <= 50 x = 0.25 * w ELSE IF w <= 100 x = 0.25 * 50 + 0.35 * (w – 50) ELSE x = 0.25 * 50 + 0.35 * 50 + 0.45 * (w – 100) ENDIF ENDIF THISFORM.Text2.Value = x THISFORM.Text1.SelStart = 0 THISFORM.Text1.SelLength = LEN(THISFORM.Text1.Text) THISFORM.Text1.SetFocus 教学进程
【例4-6】某百货公司为了促销,采用购物打折扣的优惠办法:每位顾客一次购物【例4-6】某百货公司为了促销,采用购物打折扣的优惠办法:每位顾客一次购物 (1) 在1000元以上者,按九五折优惠。 (2) 在2000元以上者,按九折优惠。 (3) 在3000元以上者,按八五折优惠。 (4) 在5000元以上者,按八折优惠。 编写程序,输入购物款数,计算并输出优惠价。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 教学进程
(2) 编写程序代码。 根据流程图,可以写出命令按钮Command1的单击(Click)事件代码为: x = THISFORM.Text1.Value IF x < 1000 y = x ELSE IF x < 2000 y = 0.95 * x ELSE IF x < 3000 y = 0.9 * x ELSE IF x < 5000 y = 0.85 * x ELSE y = 0.08 * x ENDIF ENDIF ENDIF ENDIF THISFORM.Text2.Value = y THISFORM.Text1.SelStart = 0 THISFORM.Text1.SelLength= LEN(THISFORM.Text1.Text) THISFORM.Text1.SetFocus 教学进程
多分支条件选择语句DO CASE 语法结构 DO CASE CASE〈条件1〉 [〈语句列1〉] [CASE〈条件2〉 [〈语句列2〉]] ... [OTHERWISE [〈其他语句列〉]] ENDCASE
【例4-7】在例4-6中使用DO CASE语句来计算优惠价, 只需将其中命令按钮Command1的Click事件代码改为: x = THISFORM.Text1.Value DO 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.08 * x ENDCASE THISFORM.Text2.Value = y THISFORM.Text1.SelStart = 0 THISFORM.Text1.SelLength=LEN(THISFORM.Text1.Text) THISFORM.Text1.SetFocus 教学进程
4.3 提供简单选择的控件 ●使用命令按钮组 【例4-8】使用命令按钮组的程序。 设银行定期存款年利率为:1年期2.25%,2年期2.43%, 3年期2.70%,5年期2.88%(不计复利)。 今有本金x元,5年以后使用,共有以下6种存法: l存一次5年期。 l存一次3年期,一次2年期。 l存一次3年期,两次1年期。 l存两次2年期,一次1年期。 l存一次2年期,三次1年期。 l存五次1年期。 分别计算各种存法5年后到期时的本息合计,如图4-12所示。 教学进程
设计步骤如下: (1) 建立应用程序用户界面。 (2) 设置对象属性。 (3) 编写程序代码。 ● 编写表单的Activate事件代码: THIS.Text1.SetFocus ● 编写命令按钮组Commandgroup1的Click事件代码: a = THISFORM.Text1.Value x1 = 0.0225 x2 = 0.0243 x3 = 0.027 x5 = 0.0288 n = THIS.Value 教学进程
DO CASE CASE n = 1 mes = "存1次5年期" y = (1 + 5 * x5) * a CASE n = 2 mes = "存1次3年期,1次2年期" y = (1 + 3 * x3) * (1 + 2 * x2) * a CASE n = 3 mes = "存1次3年期,2次1年期" y = (1 + 3 * x3) * (1 + x1)^2 * a CASE n = 4 mes = "存2次2年期,1次1年期" y = (1 + 2 * x2)^2 * (1 + x1) * a CASE n = 5mes = "存1次2年期,3次1年期" y = (1 + 2 * x2) * (1 + x2)^3 * a CASE n = 6 mes = "存5次1年期" 教学进程
y = (1 + x1)^5 * a ENDCASE mes = ALLT(STR(a)) + “元” + mes + CHR(13) + “到期时, 本息共计:" + ALLT(STR(y,12,2)) + "元" MESSAGEBOX(mes, 0 , "利息计算") 教学进程
●选项组与选项组生成器 【例4-9】利用选项组控制例4-8中存款利息的计算,如图4-16。 设计步骤如下: (1) 建立应用程序用户界面 (2) 设置对象属性。 (3) 编写程序代码。 ● 编写表单的Activate事件代码: THIS.Text1.SetFocus ●编写选项按钮组OptionGroup1的Click事件代码: 教学进程
a = THISFORM.Text1.Value x1 = 0.0225 x2 = 0.0243 x3 = 0.027 x5 = 0.0288 n = THIS.Value DO CASE CASE n = 1 mes = "存1次5年期" y = (1 + 5 * x5) * a CASE n = 2 mes = "存1次3年期,1次2年期" y = (1 + 3 * x3) * (1 + 2 * x2) * a CASE n = 3 教学进程
mes = "存1次3年期,2次1年期" y = (1 + 3 * x3) * (1 + x1)^2 * a CASE n = 4 mes = "存2次2年期,1次1年期" y = (1 + 2 * x2)^2 * (1 + x1) * a CASE n = 5 mes = "存1次2年期,3次1年期" y = (1 + 2 * x2) * (1 + x2)^3 * a CASE n = 6 mes = "存5次1年期" y = (1 + x1)^5 * a ENDCASE mes = mes + ",本息共计:"+ALLT(STR(y,12,2))+"元" THISFORM.Label3.Caption = mes 教学进程
【例4-10】利用选项组控制文本的对齐方式与字体,如图4-18。【例4-10】利用选项组控制文本的对齐方式与字体,如图4-18。 设计步骤如下: (1)建立应用程序用户界面。 (2)设置对象属性。 (3)编写程序代码。 ●编写表单的Activate事件代码: THIS.Text1.SetFocus ●编写OptionGroup1的Click事件代码: n = THIS.Value DO CASE CASE n = 1 THISFORM.Text1.Alignment = 0 CASE n = 2 THISFORM.Text1.Alignment = 2 CASE n = 3 THISFORM.Text1.Alignment = 1 ENDCASE 教学进程
●编写OptionGroup2的Click事件代码: n = THIS.Value DO CASE CASE n = 1 THISFORM.Text1.FontName = "宋体" CASE n = 2 THISFORM.Text1.FontName = "隶书" CASE n = 3 THISFORM.Text1.FontName = "黑体" CASE n = 4 THISFORM.Text1.FontName = "楷体_GB2312" ENDCASE 教学进程
●选项组的图形方式 【例4-11】修改上例中的选项组成图形按钮的形式,如图4-21。 设计步骤同上例,只介绍选项组的修改方法。 与修改命令按钮组类似,可以在“选项组生成器”中对各个选项按钮进行修改。下面我们通过属性窗口对选项按钮进行修改。 用鼠标右键单击选项组OptionGroup1,在弹出菜单中选择“编辑”,OptionGroup1的四周出现浅色边界,开始对选项组(容器)中的按钮进行编辑。 依次选中三个按钮Option1~Option3,将其标题(Cpation)属性改为:(空),自动大小(AutoSize)属性改为:.F. – 假,图片(Picture)属性通过浏览按钮“…”进行查找,并分别改为: 教学进程
\program\files\microsoft\visualstudio\common\graphics\bitmaps\tlbr_w95\lft.bmp\program\files\microsoft\visualstudio\common\graphics\bitmaps\tlbr_w95\lft.bmp \program\files\microsoft\visualstudio\common\graphics\bitmaps\tlbr_w95\ctr.bmp \program files\microsoft\visual studio\common\graphics\bitmaps \tlbr_w95\rt.bmp 最后适当调整按钮的大小与相互位置。与之相仿可以将选项组OptionGroup1改为图形方式,如图4-22所示。 教学进程
●使用复选框 1、使用单个复选框 【例4-12】在上例中,增加复选框,控制选项组是否显示,如图4-23所示。 图4-23 利用复选框控制控件的显示
设计步骤同上例,只列出增加的部分。 (1) 增加一个复选框控件Check1。 (2) 修改Check1的属性: AutoSize 属性改为:.T. – 真 标题(Caption)改为:修改 值(Value)改为:.T. (3) 编写Check1的Click事件代码: THISFORM.OptionGroup1.Visible = THIS.Value THISFORM.OptionGroup2.Visible = THIS.Value
2、使用多个复选框 【例4-13】利用复选框来控制输入或输出文本的字体风格,如图4-24所示。 图4-24 控制字体风格
设计步骤如下: (1) 选择新建表单,进入表单设计器,增加一个形状控件 Shape1、一个文本框控件Text1、一个标签控件Label1以及三个复选框控件Check1、Check2和Check3。 (2) 设置对象属性。 (3) 编写事件代码。 ●编写表单的Activate事件代码: THIS.Text1.SetFocus ●编写Check1的Click事件代码: THISFORM.Text1.FontBold = THIS.Value ●编写Check2的Click事件代码: THISFORM.Text1.FontItalic = THIS.Value ●编写Check3的Click事件代码: THISFORM.Text1.FontUnderLine = THIS.Value
3、复选框的图形按钮方式 【例4-14】图形按钮形式的复选框,如图4-25。单击锁定按钮关闭其他复选框,单击修改按钮则开放其他复选框。 图4-25 使用图形按钮形式的复选框
设计步骤如下: (1) 选择新建表单,进入表单设计器,首先增加一个形状控件Shape1,然后在其上增加一个文本框控件Text1、一个标签控件Label1以及五个复选框控件Check1、Check2、Check3、Check4和Check5(参见图4-26)。 图4-26 设计按钮形式的复选框 (2) 修改控件属性。
(3) 编写事件代码。 ●编写Check1的Click事件代码: THISFORM.Text1.FontBold = THIS.Value ●编写Check2的Click事件代码: THISFORM.Text1.FontItalic = THIS.Value ●编写Check3的Click事件代码: THISFORM.Text1.FontUnderLine = THIS.Value ●编写Check4的Click事件代码: THISFORM.Text1.FontStrikethru = THIS.Value ●编写Check5的Click事件代码: THISFORM.SetAll("Enabeld",THIS.Value,"CheckBox") THIS.Enabeld=.T. THIS.Caption=IIF(THIS.Value=1,"\<R 锁定","\<R 修改")
4.4计时器与微调器 ●使用计时器 1、计时器的计时功能 【例4-15】在表单上设计一个数字时钟,如图4-28所示。 图4-28 数字时钟
设计步骤如下: (1) 建立应用程序用户界面。 (2) 设置属性。 (3) 编写程序代码。 ● 编写表单的Activate事件代码: SET HOURS TO 12 ●编写OptionGroup1的InteractiveChange事件代码: IF THIS.Value=2 SET HOURS TO 12 THISFORM.Container1.Label1.Visible=.T. ELSE SET HOURS TO 24 THISFORM.Container1.Label1.Visible=.F. ENDIF
●编写Timer1的Timer事件代码: IF HOUR(DATETIME())>=12 THIS.Parent.Label1.Caption='下午' ELSE THIS.Parent.Label1.Caption='上午' ENDIF THIS.Parent.Text1.Value=SUBSTR(TTOC(DATETIME()),10,8)
2. 计时器的动感控制 【例4-16】设计一个电子游动标题板,标题“使用VFP设计动画”在表单的黄色区域(容器中)自右至左地反复移动。单击“暂停”按钮,标题停止移动,按钮变成“继续”。 单击“继续”按钮,标题继续移动,按钮又变回“暂停”(如图4-29所示)。 图4-29 电子标题板
设计步骤如下: (1) 建立应用程序用户界面。 (2) 设置对象属性。 (3) 编写程序代码。 ●编写Command1(开始/暂停)的Click事件代码: IF THIS.Caption = "\<S 暂停" THIS.Caption = "\<S 继续" THISFORM.Container1.Timer1.Enabled = .F. ELSE THIS.Caption = "\<S 暂停" THISFORM.Container1.Timer1.Enabled = .T. ENDIF ●编写Timer1的Timer事件代码: IF THIS.Parent.Label1.Left + THIS.Parent.Label1.Width > 0 THIS.Parent.Label1.Left = THIS.Parent.Label1.Left – 3 ELSE THIS.Parent.Label1.Left = THIS.Parent.Width ENDIF
●使用微调器 【例4-17】使用微调器改变例4-16中标题板的移动速度。 设计步骤同例4-16。此外,增加一个微调器控件Spinner1、一个标签和一个形状。如图4-31所示。 ●编写Spinner1的InteractiveChange事件代码: THISFORM.Container1.Timer1.Interval = 100 - 10 * THIS.Value 4-31 增加一个Spinner1
4.5 键盘事件 ● KeyPress事件的语法为: LPARAMETERS nKeyCode, nShiftAltCtrl ● 响应键盘事件 【例4-18】自动判断按键的程序。按下〈Enter〉键立刻开始计算面积(如图4-32)。 图4-32 自动判断按键
修改例3-4,删去窗体中的命令按钮及其事件代码,并增加事件代码如下:修改例3-4,删去窗体中的命令按钮及其事件代码,并增加事件代码如下: ● 编写文本框Text1的按键(KeyPress)事件代码: LPARAMETERS nKeyCode, nShiftAltCtrl if nkeycode=13 a = thisform.Text1.Value thisform.Text2.Value = a^2 * 3.14 thisform.Text1.SelStart = 0 thisform.Text1.SelLength = len(thisform.Text1.Text) thisform.Text1.SetFocus endif