1 / 43

Visual FoxPro 程序设计教程

Visual FoxPro 程序设计教程. 第 4 章. 选择结构程序设计. 4.1 条件表达式 ■ 关系运算符与关系表达式 ■ 逻辑运算符与逻辑表达式 ■ 运算符的优先顺序 4.2 条件选择语句 ■ 单条件选择语句 IF ■ 多分支条件选择语句 DO CASE 4.3 提供简单选择的控件 ■ 命令按钮组. ■ 选项按钮组 ■ 复选框 4.4 计时器与微调器 ■ 计时器 ■ 微调器 4.4 键盘事件 ■ KeyPress 事件 ■ 响应键盘事件. 4.1 条件表达式. 4.1.1 关系运算符与关系表达式.

Download Presentation

Visual FoxPro 程序设计教程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Visual FoxPro 程序设计教程

  2. 第 4章 选择结构程序设计 4.1条件表达式 ■ 关系运算符与关系表达式 ■ 逻辑运算符与逻辑表达式 ■ 运算符的优先顺序 4.2条件选择语句 ■ 单条件选择语句IF ■多分支条件选择语句DO CASE 4.3 提供简单选择的控件 ■ 命令按钮组 ■选项按钮组 ■ 复选框 4.4计时器与微调器 ■ 计时器 ■ 微调器 4.4键盘事件 ■KeyPress事件 ■ 响应键盘事件

  3. 4.1 条件表达式 4.1.1 关系运算符与关系表达式 • 关系运算符有8种:<、<=、>、>=、=、<>、#、 • !=、$、= = 4.1.1 逻辑运算符与逻辑表达式 • 逻辑运算符有3种:AND、OR、NOT 4.1.1 运算符的优先顺序 • 运算符的优先顺序:算术运算符、字符串运算符、 • 关系运算符、逻辑运算符 教学进程

  4. 4.2 条件选择语句 单条件选择语法结构: IF〈条件〉 [语句列1] [ELSE [语句列2]] ENDIF 教学进程

  5. 【例4-2】设计一个验证口令的表单。输入口令时文本框中只显示相同个数的“*”号,如图4-2所示。【例4-2】设计一个验证口令的表单。输入口令时文本框中只显示相同个数的“*”号,如图4-2所示。 设计步骤如下: (1) 建立应用程序用户界面。 (2) 设置对象属性。 教学进程

  6. (3) 编写程序代码。图4-3 建立界面与设置属性 ●编写关闭按钮Command1的Click事件代码:THISFORM.Release 教学进程

  7. ●编写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 教学进程

  8. 【例4-3】求函数值。输入x,计算y的值,其中:【例4-3】求函数值。输入x,计算y的值,其中: 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写程序代码。 根据流程图,可以写出命令按钮Command1的单击(Click)事件代码为: 教学进程 教学进程

  9. 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 教学进程 教学进程

  10. ●使用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 教学进程

  11. ●IF语句的嵌套 【例4-5】铁路托运行李,从甲地到乙地,规定每张客票托运费计算方法是:行李重量不超过50公斤时,每公斤0.25元,超过50公斤而不超过100公斤时,其超过部分每公斤0.35元,超过100公斤时,其超过部分每公斤0.45元。编写程序,输入行李重量,计算并输出托运的费用。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 教学进程

  12. (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 教学进程

  13. 【例4-6】某百货公司为了促销,采用购物打折扣的优惠办法:每位顾客一次购物【例4-6】某百货公司为了促销,采用购物打折扣的优惠办法:每位顾客一次购物 (1) 在1000元以上者,按九五折优惠。 (2) 在2000元以上者,按九折优惠。 (3) 在3000元以上者,按八五折优惠。 (4) 在5000元以上者,按八折优惠。 编写程序,输入购物款数,计算并输出优惠价。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 教学进程

  14. (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 教学进程

  15. 多分支条件选择语句DO CASE 语法结构 DO CASE CASE〈条件1〉 [〈语句列1〉] [CASE〈条件2〉 [〈语句列2〉]] ... [OTHERWISE [〈其他语句列〉]] ENDCASE

  16. 【例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 教学进程

  17. 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所示。 教学进程

  18. 设计步骤如下: (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 教学进程

  19. 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年期" 教学进程

  20. y = (1 + x1)^5 * a ENDCASE mes = ALLT(STR(a)) + “元” + mes + CHR(13) + “到期时, 本息共计:" + ALLT(STR(y,12,2)) + "元" MESSAGEBOX(mes, 0 , "利息计算") 教学进程

  21. ●选项组与选项组生成器 【例4-9】利用选项组控制例4-8中存款利息的计算,如图4-16。 设计步骤如下: (1) 建立应用程序用户界面 (2) 设置对象属性。 (3) 编写程序代码。 ● 编写表单的Activate事件代码: THIS.Text1.SetFocus ●编写选项按钮组OptionGroup1的Click事件代码: 教学进程

  22. 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 教学进程

  23. 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 教学进程

  24. 【例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 教学进程

  25. ●编写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 教学进程

  26. ●选项组的图形方式 【例4-11】修改上例中的选项组成图形按钮的形式,如图4-21。 设计步骤同上例,只介绍选项组的修改方法。 与修改命令按钮组类似,可以在“选项组生成器”中对各个选项按钮进行修改。下面我们通过属性窗口对选项按钮进行修改。 用鼠标右键单击选项组OptionGroup1,在弹出菜单中选择“编辑”,OptionGroup1的四周出现浅色边界,开始对选项组(容器)中的按钮进行编辑。 依次选中三个按钮Option1~Option3,将其标题(Cpation)属性改为:(空),自动大小(AutoSize)属性改为:.F. – 假,图片(Picture)属性通过浏览按钮“…”进行查找,并分别改为: 教学进程

  27. \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所示。 教学进程

  28. ●使用复选框 1、使用单个复选框 【例4-12】在上例中,增加复选框,控制选项组是否显示,如图4-23所示。 图4-23 利用复选框控制控件的显示

  29. 设计步骤同上例,只列出增加的部分。 (1) 增加一个复选框控件Check1。 (2) 修改Check1的属性: AutoSize 属性改为:.T. – 真 标题(Caption)改为:修改 值(Value)改为:.T. (3) 编写Check1的Click事件代码: THISFORM.OptionGroup1.Visible = THIS.Value THISFORM.OptionGroup2.Visible = THIS.Value

  30. 2、使用多个复选框 【例4-13】利用复选框来控制输入或输出文本的字体风格,如图4-24所示。 图4-24 控制字体风格

  31. 设计步骤如下: (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

  32. 3、复选框的图形按钮方式 【例4-14】图形按钮形式的复选框,如图4-25。单击锁定按钮关闭其他复选框,单击修改按钮则开放其他复选框。 图4-25 使用图形按钮形式的复选框

  33. 设计步骤如下: (1) 选择新建表单,进入表单设计器,首先增加一个形状控件Shape1,然后在其上增加一个文本框控件Text1、一个标签控件Label1以及五个复选框控件Check1、Check2、Check3、Check4和Check5(参见图4-26)。 图4-26 设计按钮形式的复选框 (2) 修改控件属性。

  34. (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 修改")

  35. 4.4计时器与微调器 ●使用计时器 1、计时器的计时功能 【例4-15】在表单上设计一个数字时钟,如图4-28所示。 图4-28 数字时钟

  36. 设计步骤如下: (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

  37. ●编写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)

  38. 2. 计时器的动感控制 【例4-16】设计一个电子游动标题板,标题“使用VFP设计动画”在表单的黄色区域(容器中)自右至左地反复移动。单击“暂停”按钮,标题停止移动,按钮变成“继续”。 单击“继续”按钮,标题继续移动,按钮又变回“暂停”(如图4-29所示)。 图4-29 电子标题板

  39. 设计步骤如下: (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

  40. ●使用微调器 【例4-17】使用微调器改变例4-16中标题板的移动速度。 设计步骤同例4-16。此外,增加一个微调器控件Spinner1、一个标签和一个形状。如图4-31所示。 ●编写Spinner1的InteractiveChange事件代码: THISFORM.Container1.Timer1.Interval = 100 - 10 * THIS.Value 4-31 增加一个Spinner1

  41. 4.5 键盘事件 ● KeyPress事件的语法为: LPARAMETERS nKeyCode, nShiftAltCtrl ● 响应键盘事件 【例4-18】自动判断按键的程序。按下〈Enter〉键立刻开始计算面积(如图4-32)。 图4-32 自动判断按键

  42. 修改例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

More Related