1 / 41

Visual FoxPro 程序设计教程

Visual FoxPro 程序设计教程. 第 5 章. 循环结构程序设计. 5.1 循环结构语句. ● 当型循环命令 DO WHILE. 当型循环的语法格式为: DO WHILE〈 条件 〉 [〈 命令列 〉] [EXIT] [LOOP] ENDDO. 【 例 5-1】 求 1 + 2 + 3 + … + 100 的值。如图 5-2 所示。. 设计步骤如下: 表单界面的设计参见前面章节,这里仅给出命令按钮的 Click 事件代码:. s = 0 n = 1 DO WHILE n <=100 s = s + n

amir-woods
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. 第 5章 循环结构程序设计 5.1 循环结构语句 ●当型循环命令DO WHILE 当型循环的语法格式为: DO WHILE〈条件〉 [〈命令列〉] [EXIT] [LOOP] ENDDO

  3. 【例5-1】求1 + 2 + 3 + … + 100的值。如图5-2所示。 设计步骤如下: 表单界面的设计参见前面章节,这里仅给出命令按钮的Click事件代码: s = 0 n = 1 DO WHILE n <=100 s = s + n n = n + 1 ENDDO THISFORM.Text1.Value = s 图5-2 求和 教学进程

  4. 【例5-2】非负整数n的阶乘定义如下: 输入整数n,求阶乘n!(如图5-4)。 图5-4 求阶乘n! 教学进程

  5. 设计步骤如下: 表单界面的设计参见前面章节,这里给出命令按钮的Click事件代码: n = THISFORM.Text1.Value t = 1 i = 1 DO WHILE i <= n t = t * i i = i + 1 ENDDO THISFORM.Text2.Value = t 教学进程

  6. 另外,为了防止数据溢出,限制输入的整数不超过20。为此,编写文本框Text1的事件代码如下:另外,为了防止数据溢出,限制输入的整数不超过20。为此,编写文本框Text1的事件代码如下: Valid事件代码: a = THIS.Value IF a < 0 OR a > 20 MESSAGEBOX("请输入不超过20的非负整数!") THIS.GotFocus RETURN 0 ELSE RETURN .T. ENDIF GotFocus事件代码: THIS.SelStart=0 THIS.SelLength=LEN(THIS.Text) 教学进程

  7. 【例5-3】输入两个正整数,求它们的最大公约数。如图5-6所示。【例5-3】输入两个正整数,求它们的最大公约数。如图5-6所示。 图5-6 求最大公约数 教学进程

  8. 设计步骤如下: 表单界面的设计参见前面章节,这里给出命令按钮的Click事件代码: m = THISFORM.Text1.Value n = THISFORM.Text2.Value IF n * m = 0 MESSAGEBOX("两数都不能为0!") RETURN ENDIF IF m < n t = m m = n n = t ENDIF r = m % n DO WHILE r != 0 m = n n = r r = m % n ENDDO THISFORM.Text3.Value = n 教学进程

  9. 【例5-4】输入一个正整数,利用“当型”循环判断是否素数。【例5-4】输入一个正整数,利用“当型”循环判断是否素数。 设计步骤如下: 表单界面的设计参见前面章节,这里给出命令按钮的Click事件代码: n = THISFORM.Text1.Value s = 0 i = 2 DO WHILE i <= SQRT(n) AND s = 0 IF n % i = 0 s = 1 ELSE i = i + 1 ENDIF ENDDO IF s = 0 a = '是一个素数' 教学进程

  10. ELSE a = '不是素数' ENDIF = MESSAGEBOX(ALLT(STR(n)) + a, 64 + 0 + 0, "信息") THISFORM.Text1.SetFocus ● 编写Text1的GotFocus事件代码,使文本框得到焦点后,文本立即被选中: THIS.SelStart = 0 THIS.SelLength = LEN(STR(THIS.Value)) 教学进程

  11. ● 步长型循环命令FOR 语法结构为: FOR〈内存变量〉=〈初值〉TO〈终值〉[STEP〈步长值〉] [〈命令列〉] [EXIT] [LOOP] ENDFOR | NEXT 教学进程

  12. 【例5-5】利用“步长型”循环判断素数的程序。【例5-5】利用“步长型”循环判断素数的程序。 只需修改命令按钮Command1的Click事件代码: n = THISFORM.Text1.Value s = 0 i = 2 FOR i = 2 TO SQRT(n) IF n % i = 0 s = 1 EXIT ENDIF ENDFOR IF s = 0 a = '是一个素数' ELSE a = '不是素数' ENDIF = MESSAGEBOX(ALLT(STR(n)) + a, 64 + 0 + 0, "信息") THISFORM.Text1.SetFocus 程序的运行结果同例5-4完全相同。 教学进程

  13. 【例5-6】求1! + 2! + 3! + … + 20!的值。 其中命令按钮Command1的Click事件代码为: s = 0 FOR n = 1 TO 20 t = 1 FOR m = 1 TO n t = t * m ENDFOR s = s + t ENDFOR THISFORM.Text1.Value = s 运行结果如图5-11所示。 图5-11 求和 教学进程

  14. 5.2 列表框与组合框控件 ●使用列表框 【例5-7】求从2000年到2100年之间的所有闰年。 设计步骤如下: (1) 设计表单界面和设置控件属性。 (2) 编写命令按钮Command1的Click事件代码为: THISFORM.List1.Clear FOR n = 2000 TO 2100 IF n % 4 = 0 IF n % 100 != 0 OR n % 400 = 0 L = 1 ELSE L = 0 ENDIF ELSE L = 0 ENDIF IF L = 1 教学进程

  15. 【例5-8】利用循环结构和列表框控件,设计一个“选项移动”表单。【例5-8】利用循环结构和列表框控件,设计一个“选项移动”表单。 设计步骤如下: (1) 建立应用程序用户界面。 (2) 设置对象属性 (3) 编写事件代码。 ●编写容器控件Container1的Init事件代码: THIS.List1.AddItem ("one") THIS.List1.AddItem ("two") THIS.List1.AddItem ("three") THIS.List1.AddItem ("four") THIS.List1.AddItem ("five") THIS.List1.AddItem ("six") THIS.List1.AddItem ("seven") THIS.List1.AddItem ("eight") THIS.List1.AddItem ("nine") THIS.List1.AddItem ("ten") 教学进程

  16. ●编写容器控件中命令按钮组CommandGroup1的Click事件代码:●编写容器控件中命令按钮组CommandGroup1的Click事件代码: DO CASE CASE THIS.Value = 1 I = 0 DO WHILE I <= THIS.Parent.List1.ListCount IF THIS.Parent.List1.Selected(i) THIS.Parent.List2.Additem (THIS.Parent.list1.List(i)) THIS.Parent.List1.RemoveItem(i) ELSE I = I + 1 ENDIF ENDDO CASE THIS.Value = 2 DO WHILE THIS.Parent.List1.ListCount > 0 THIS.Parent.List2.AddItem(THIS.Parent.List1.List(1)) THIS.Parent.List1.RemoveItem(1) ENDDO CASE THIS.Value = 3 教学进程

  17. I = 0 DO WHILE I <= THIS.Parent.List2.ListCount IF THIS.Parent.List2.Selected(i) THIS.Parent.List1.Additem (THIS.Parent.List2.List(i)) THIS.Parent.List2.RemoveItem(i) ELSE I = I + 1 ENDIF ENDDO CASE THIS.Value = 4 DO WHILE THIS.Parent.List2.ListCount > 0 THIS.Parent.List1.AddItem(THIS.Parent.List2.List(1)) THIS.Parent.List2.RemoveItem(1) ENDDO ENDCASE 教学进程

  18. IF THIS.Parent.List2.ListCount > 0 THIS.Command3.Enabled =.T. THIS.Command4.Enabled =.T. ELSE THIS.Command3.Enabled =.F. THIS.Command4.Enabled =.F. ENDIF IF THIS.Parent.List1.ListCount = 0 THIS.Command1.Enabled =.F. THIS.Command2.Enabled =.F. ELSE THIS.Command1.Enabled =.T. THIS.Command2.Enabled =.T. ENDIF THISFORM.Refresh 教学进程

  19. 【例5-9】显示文件目录的列表框程序。在列表框中选定文件后,用鼠标单击“打开选定文件”按钮可打开该文件进行察看或编辑。【例5-9】显示文件目录的列表框程序。在列表框中选定文件后,用鼠标单击“打开选定文件”按钮可打开该文件进行察看或编辑。 设计步骤如下: (1) 选择新建表单,进入表单设计器。增加一个列表框控件List1、一个命令按钮Command1、两个形状Shape1~Shape2、两个标签Label1~Label2和一个文本框Text1,如图 5-16所示。 图5-16 文件目录列表 教学进程

  20. (2) 设置List1和Text1的属性 (3) 编写事件代码。 ● 编写表单的Activate事件代码: THISFORM.List1.SetFocus ●编写文本框Text1的Valid事件代码: THISFORM.List1.RowSource = ALLTRIM(THIS.Value) THISFORM.List1.Requery ●编写“打开选定文件”按钮Command1的Click事件代码: a = THISFORM.List1.ListIndex MODIFY FILE (THISFORM.List1.List(2)+THISFORM.List1.List(a)) 教学进程

  21. 【例5-10】简易数学用表。显示整数1~100的平方、平方根、自然对数和e指数,如图5-18所示。【例5-10】简易数学用表。显示整数1~100的平方、平方根、自然对数和e指数,如图5-18所示。 设计步骤如下: (1) 设计程序界面与设置对象属性 (2) 编写Command1的Click事件代码: FOR n = 1 TO 100 s = ALLT(STR(n)) THISFORM.List1.AddlistItem(s,n,1) s = ALLT(STR(n^2)) THISFORM.List1.AddlistItem(s,n,2) s = ALLT(STR(sqrt(n),10,3)) THISFORM.List1.AddlistItem(s,n,3) s = ALLT(STR(LOG(n),10,4)) THISFORM.List1.AddlistItem(s,n,4) s = ALLT(STR(EXP(n),14,4)) THISFORM.List1.AddlistItem(s,n,5) ENDFOR 图5-18 简易数学用表 教学进程

  22. ●使用组合框 1、下拉列表框 【例5-11】在文本框输入数据,按回车添加到列表框中,在列表框中选定项目,按回车后可以移去选定项,如图5-19所示。 图5-19 添加或移去文本 教学进程

  23. 设计步骤如下: (1) 选择新建表单,进入表单设计器,首先增加一个形状Shape1,然后,在其中增加一个文本框Text1、一个组合框Combo1以及两个标签Label1~Label2。 (2) 设置Combo1的属性 (3) 编写代码。 编写表单的Activate事件代码: PUBLIC a a = 1 THIS.Text1.SetFocus 教学进程

  24. 编写Text1的事件代码: ▲KeyPress事件: LPARAMETERS nKeyCode, nShIFtAltCtrl IF nKeyCode = 13 IF !EMPTY(THIS.Value) THISFORM.Combo1.AddItem (THIS.Value) THISFORM.Combo1.DisplayValue = THIS.Value ENDIF THIS.SelStart = 0 THIS.SelLength = LEN(RTRIM(THIS.Text)) a = 0 ENDIF

  25. ▲Valid事件: IF a = 1 RETURN .T. ELSE a = 1 RETURN 0 ENDIF ●编写Combo1的RightClick事件代码: IF THIS.ListIndex > 0 THISFORM.Text1.Value = THIS.List(THIS.ListIndex) THIS.RemoveItem (THIS.ListIndex) THIS.Value = 1 ENDIF

  26. 2、下列组合框 【例5-12】在上例中使用下拉组合框来代替文本框和列表框,实现同样的功能:输入数据,按回车后可添加到列表中,在列表中选定项目,单击鼠标右键可移去选定项,如图5-20所示。 图5-20 下拉组合框

  27. 设计步骤如下: (1) 表单界面的设计与控件属性的设置参见图5-20。 (2) 编写代码。 编写Combo1的事件代码: ●KeyPress事件: LPARAMETERS nKeyCode, nShiftAltCtrl IF nKeyCode = 13 IF !EMPTY(THIS. DisplayValue) THIS.AddItem (THIS.DisplayValue) THISFORM.Text1.Value = THIS.ListCount ENDIF THIS.SelStart = 0 THIS.SelLength = LEN(ALLT(THIS.Text)) THIS.Tag = "N" ENDIF 教学进程

  28. ● RightClick事件: IF THIS.ListCount > 0 THIS.RemoveItem (THIS.ListIndex) THIS.Value = 1 THISFORM.Text1.Value = THIS.ListCount ENDIF ●Valid事件: IF THIS.Tag = "Y" RETURN .T. ELSE THIS.Tag = "Y" RETURN 0 ENDIF 教学进程

  29. 【例5-13】“简易抽奖机”,在组合框中输入号码。按下“开始”按钮后,组合框中将不停变换随机得到的号码。单击“停止”按钮,号码停止变动,并得到中奖的号码。【例5-13】“简易抽奖机”,在组合框中输入号码。按下“开始”按钮后,组合框中将不停变换随机得到的号码。单击“停止”按钮,号码停止变动,并得到中奖的号码。 图5-21 简易抽奖机 教学进程

  30. 设计步骤如下: (1) 表单界面的设计与控件属性的设置参见图5-21。在窗体中增加一个计时器控件Timer1,并将其Timer属性改为:50,Enabled属性改为:False。 (2) 编写代码。 编写Combo1的事件代码: ●KeyPress事件: 教学进程

  31. LPARAMETERS nKeyCode, nShiftAltCtrl DO CASE CASE nKeyCode = 13 IF !EMPTY(THIS.DisplayValue) THIS.AddItem (THIS.DisplayValue) THISFORM.Text1.Value = THIS.ListCount ENDIF THIS.SelStart = 0 THIS.SelLength = LEN(ALLT(THIS.Text)) THIS.Tag = "N" CASE nKeyCode = 27 && 按Esc键后可以移去选项 IF THIS.ListCount > 0 THIS.RemoveItem (THIS.ListIndex) THIS.Value = 1 THISFORM.Text1.Value = THIS.ListCount ENDIF ENDCASE 教学进程

  32. ● Valid事件: IF THIS.Tag = "Y" RETURN .T. ELSE THIS.Tag = "Y" RETURN 0 ENDIF ●编写计时器控件Timer1的Timer事件代码,使之可以随机地抽取奖号: n = THISFORM.Text1.Value a = INT(RAND() * n) + 1 THISFORM.Combo1.ListIndex = a 教学进程

  33. ●编写命令按钮Command1的Click事件代码: THISFORM.Timer1.Enabled = .NOT.(THISFORM.Timer1.Enabled) a = " 按“停止”按钮,可得中奖号码" b = " 中奖号码是:" + THISFORM.Combo1.Text IF THISFORM.Timer1.Enabled THIS.Caption = "停止(\<S)" THISFORM.Label1.Caption = a ELSE THIS.Caption = "开始(\<S)" THISFORM.Label1.Caption = b ENDIF 教学进程

  34. 5.3页框 ● 5.31带选项卡的表单 【例5-14】在表单中设计一个带选项卡的页框架,其中有三个页面,分别放上一些不同的控件。 设计步骤如下: (1) 选择新建表单,进入表单设计器,设计成具有三个页页的页框,编辑页框1。如下图所示 教学进程

  35. (2) 编辑Page2 ,如下图所示 (3) 编辑Page3 ,如下图所示 (4) 编写事件代码。 编写第二页中Timer1的Timer事件代码: 教学进程

  36. IF HOUR(DATETIME()) >= 12 THIS.Parent.Label1.Caption = '下午' ELSE THIS.Parent.Label1.Caption = '上午' ENDIF IF HOUR(DATETIME()) > 12 hh = HOUR(DATETIME()) – 12 ELSE hh = HOUR(DATETIME()) ENDIF THIS.Parent.Text1.Value = STR(hh) + SUBSTR(TIME(),3) 教学进程

  37. ● 5.31不带选项卡的表单 【例5-15】将例5-14中的页框架改为不带选项卡的形式,使用选项按钮组控制页面的选择。如图5-25所示。 教学进程

  38. 教学进程

  39. 设计步骤如下:(在例5-15的基础上进行修改)设计步骤如下:(在例5-15的基础上进行修改) (1) 选择“打开”表单文件,进入表单设计器,删去选项按钮组控件OptionGroup1,增加一个“命令按钮组”控件CommandGroup1,并修改其属性。其中命令按钮组中的按钮Command1和Command2的Enabled属性改为:.F. – 假,参见图5-26所示。 (2) 编写命令按钮组CommandGroup1的Click事件代码: 教学进程

  40. n = THIS.Value k = THISFORM.PageFrame1.ActivePage DO CASE CASE n=1 THISFORM.PageFrame1.Pages(1).Zorder CASE n=2 THISFORM.PageFrame1.Pages(k-1).Zorder CASE n=3 THISFORM.PageFrame1.Pages(k+1).Zorder CASE n=4 THISFORM.PageFrame1.Pages(3).Zorder ENDCASE k = THISFORM.PageFrame1.ActivePage THIS.Command1.Enabled = IIF(k = 1, .F., .T.) THIS.Command2.Enabled = IIF(k = 1, .F., .T.) THIS.Command3.Enabled = IIF(k = 3, .F., .T.) THIS.Command4.Enabled = IIF(k = 3, .F., .T.) 教学进程

  41. 课外作业 (1) 阐述矢量图形与位图图像的区别。 (2) 图像分辨率的单位是什么?阐述其意义。 (3) 哪种格式的图像文件体积最小? (4) 练习使用图像浏览器ACDSee32。 (5) 练习获取Windows界面的方法。 ▲ 把Windows Media Player界面粘贴到Word文档中。 ▲ 把任意一个下拉式菜单粘贴到Word文档中。 (6) 使用PhotoShop改变图像的几何尺寸,并保存。 END 教学进程

More Related