VisualFoxPro程序设计案例教程第5章建立用户使用界面

上传人:san****019 文档编号:16509759 上传时间:2020-10-04 格式:PPT 页数:117 大小:1.85MB
收藏 版权申诉 举报 下载
VisualFoxPro程序设计案例教程第5章建立用户使用界面_第1页
第1页 / 共117页
VisualFoxPro程序设计案例教程第5章建立用户使用界面_第2页
第2页 / 共117页
VisualFoxPro程序设计案例教程第5章建立用户使用界面_第3页
第3页 / 共117页
资源描述:

《VisualFoxPro程序设计案例教程第5章建立用户使用界面》由会员分享,可在线阅读,更多相关《VisualFoxPro程序设计案例教程第5章建立用户使用界面(117页珍藏版)》请在装配图网上搜索。

1、第5章 建立用户使用界面,第一章,本章目的 简单了解有关面向对象编程的特点和基础知识 掌握程序设计的基本概念和常用命令 掌握窗体的运行和关闭 熟悉窗体的常用事件 掌握窗体中的控件属性及代码编写 本章任务 任务一:录入超市管理系统数据 任务二:设计用户主界面 任务三:程序设计初步 任务四:用户登录 任务五:退出窗口 任务六:商品信息浏览 任务七:表单的综合应用,5.1 基础知识,面向对象的程序设计(OOP) (Object-Oriented Programming,OOP)立意于创建软件重用代码,具备更好地模拟现实世界环境的能力,这使它被公认为是自上而下编程的优胜者。 面向对象的编程语言使复杂的

2、工作条理清晰,编写容易,它是一场编程技术方面的革命。 Visual FoxPro是一种混合型语言,可以使用面向对象编程,也可以使用传统的过程化编程。,5.1.1 抽象在面向对象中的作用,1抽象的概念 一般来讲,抽象是通过从特定的实例中抽取共同的性质以形成一般化的概念的过程。抽象是对某个系统的简化的描述,即强调该系统中的某些特征,而忽略一部分细节。简单地说,抽象是人们在理解复杂现象和求解复杂问题中处理复杂事物的主要工具。 2面向对象抽象的实现 面向对象的原理有4个,分别是数据抽象、行为共享、进化和确定性。 (1)数据抽象:它为程序员提供了一种对数据和为操作这些数据所需要的算法的抽象。数据抽象包含

3、两个概念:模块化和信息隐藏。模块化的优点是便于修改或维护,系统发现问题后,可以确定问题出在哪个模块上。在支持信息隐藏的系统中,错误的影响也通常被限制在一个模块内,增强了系统的可靠性。 (2)行为共享:行为是数据抽象引进的概念,行为是由实体的外部接口进行定义的。行为共享是指许多实体具有相同的接口,这将增加系统的灵活性。 (3)进化:进化是考虑到实际中的需求会很快发生变化。面向对象的方法要支持进化过程就是要适应可能发生的不断变化。 (4)确定性:这里确定性是指用于描述一个系统确定的行为。一个确定的系统应该确保其中每个行为项都有一个确切的解释,系统不会因不能响应某一行为而失败。,5.1.2 面向对象

4、的基本特征,面向对象的系统包含3个要素:对象、类和继承。 1对象 在不同领域中对对象有不同的理解。一般认为,对象就是一种事物,一个实体。 从概念上讲,对象是代表正在创建的系统中的一个实体。例如,一个商品销售系统,像顾客、商品、柜台、厂家等都是对象。 从实现形式上讲,对象是一个状态和操作(方法)的封装体。状态是由对象的数据结构的内容和值定义的,方法是一系列的实现步骤,它是由若干操作构成的。 2类 类是创建对象的样板,它包含着所创建对象的状态描述和方法的定义。一个类的所有对象都有相同的数据结构,并且共享相同的实现操作的代码,而各个对象有着各自不同的状态。类是所有对象的共同行为和不同状态的集合体。

5、3继承 继承提供了创建新类的一种方法,这种方法就是一个新类可以通过对已有的类进行修改或扩充来满足新类的需求。新类共享已有类的行为,而自己还具有修改或额外添加的行为。 从一个类继承定义的新类,将继承已有类的所有方法和属性,并且可以添加所需要的新的方法和属性。新类被称为已有类的子类,而已有类称为父类,又叫基类。新类又叫派生类。,5.2 任务一 录入超市管理系统数据,5.2.1 相关知识 数据库的对话框在Visual FoxPro中称为“窗体”,一般还称为表单。窗体也是Visual FoxPro 中的一种对象,它使用计算机屏幕将数据库中的表或查询中的数据显示出来。由于数据库软件是给用户使用的,所以要

6、为使用的用户提供一个友好的使用界面。这是建立一个窗体的基本目标。 一个设计优秀的窗体是非常必要的。不管数据库中表或查询设计得有多好,如果窗体设计得十分杂乱,而且没有任何提示,就会令使用者感觉到迷惑,甚至增加失误的概率。这样的窗体就不利于数据库软件的应用和推广。 本任务将介绍如何使用Visual FoxPro编写一个简单的程序。在此之前先介绍Visual FoxPro的各个部分的功能,包括工具箱、项目管理器、“属性”窗体设计器等,下面分别介绍这几部分的功能。,1工具箱,当建立一个新的表单时,或者打开表单设计器时,一般会默认显示工具箱,上面提供了Visual FoxPro 表单中常用的各个控件。选

7、中控件,然后在窗体设计器中拖动鼠标,即可在其中绘制控件。初始状态的工具箱只有一个“常用”选项卡,在工具箱上右击,在弹出的快捷菜单中选择“添加选项卡”命令,可以为工具箱添加选项卡;右击,选择相关选项,可以打开其他选项卡。,常用表单控件名称,2项目管理器,项目是Visual FoxPro的组织应用程序的方式,一般而言,一个工程包含开发一个应用程序所需要的所有文件,包括窗体文件、程序文件、数据库文件、表文件、报表文件、菜单文件、索引文件等。,5.2.2 任务实现,本小节主要技能点如下: (1)创建最基本表单。 (2)用表单向导创建表单。 (3)一对多表单向导,1创建最基本的表单,在的“项目管理器”中

8、,选择“文档”选项卡,选择下面列表框中的“表单”选项,在右侧操作区单击“新建”按钮。 在“新建表单”对话框中单击“新建表单”按钮。,选择“文件”菜单中的“保存”命令,选择相关的文件夹并输入正确的表单名即完成第一个表单的制作,如图所示。,选择要保存表单的位置,也可以重新命名该表单,然后单击“保存”按钮,该表单就会出现在当前项目中,如图所示。关闭设计器,选择第一个表单,在右侧的功能区单击“运行”按钮。,表单运行结果如图5-9所示。,单击Form1右上角的关闭按钮,可以关闭Form1。再次选择第一个表单,单击“修改”按钮,可以对Form1(第一个表单)进行修改。,选择菜单中的“显示”“表单控件工具栏

9、”命令,可以控制表单控件工具栏的显示。,单击工具栏中的按钮,并在第一个表单(Form1)上再次单击,则会在Form1中创建一个新的按钮。,双击Command1按钮,会出现该按钮的代码编辑器,在Command1的click事件中输入thisform.release,即运行表单后,单击此按钮就会退出表单。关闭表单设计器,运行表单,测试按钮Command1的效果。,2用表单向导创建简单表单,(1)在“项目”菜单中,选择“新建”“表单向导”命令,出现如图所示的界面。,(2)选择“表单向导”选项,单击“确定”按钮。 (3)选择一个数据表,然后为该表建立一个表单,这里选择的是“用户”表,单击按钮可以把“用

10、户”表的所有字段全部选中,单击按钮可以选取单个字段。单击“下一步”按钮。,(4)如图5-15所示,在该对话框中选择一个自己喜欢的样式,使表单更加美观,单击“下一步”按钮继续。,(5)该对话框主要是对“用户”表的数据进行排序的设置,这里选择“用户编号”作为索引,单击“添加”按钮,再单击“下一步”按钮,(6)根据该对话框的提示,可以单击“预览”,观看一下效果,也可以直接单击“完成”按钮,完成表单的制作,(7)单击“预览”按钮,效果如图5-18所示,返回向导,单击“完成”按钮,将表单命名为“用户”,选择一个存放表单的位置,如D:superMarket,3一对多表单向导,选择“项目”菜单中的“新建”命

11、令,选择“一对多表单向导” 单击“确定”按钮,效果如图5-20所示。 选择“供货商”表,然后将字段导入到“选定字段”列表框中。单击“下一步”按钮,图519 选择“一对多表单向导”选项,图520 父表选择,从子表中选择字段(这里选择“商品信息”表,导出所有字段,单击“下一步”按钮。 ),如图5-22所示,是建立两个表单的关系,以便联动显示。单击“下一步”按钮。,图522 建立表间关系,如图5-23所示,在“样式”列表框中选择自己喜欢的样式,这里选择“阴影式”,单击“下一步”按钮。,图523 选择表单样式,图5-24是选择排序次序的字段,这里选择“供货商编号”,单击“下一步”按钮,图524 数据排

12、序方式,单击“完成”按钮,保存为“供货渠道”,图525 完成及相关选项,单击“完成”按钮,保存为“供货渠道”,运行表单,课后练习,1利用向导制作一个“入库记录”的表单,并用表单设计器修改和美化产生的表单,利用此表单浏览库存商品信息,并通过此表单输入相关的记录。,课后练习,2利用向导分别制作以下几个数据表的表单,如“供货商”表、“会员”表、“交易”表、“商品信息”表、“生产商”表、“销售”表、“用户”表,并通过表单为相关的数据表添加数据和修改数据。,5.3 任务二 设计用户主界面,设计用户主界面,并为主界面各项按钮指定代码,用以访问相关表单。,5.3.1 相关知识点,1容器和控件 2标签控件 3

13、“属性”窗口 4和字体有关的属性 5命令按钮控件 6和鼠标操作相关的常用事件 7设置访问键 8设置控件的Tab键次序 9设置工具提示文本 10.启用和废止控件 11.定义表单行为 12指定表单的图标,1容器和控件,Visual FoxPro 6.0的基类共分成两个大类:容器类和非容器类。一般称容器类基类为容器,而把非容器类基类称为控件,有时也把所有基类都称为控件。,(1)容器类。容器类可以包含其他对象,并且允许访问这些对象。,(2)控件类。控件类的封装比容器类更为严密,但也因此丧失了一些灵活性。,(3)容器中各对象的调用。在进行容器类“子类”或“对象”的设计时,往往要调用容器中某一特定对象,这

14、就要掌握OOP方法中对象的标识方法。 例如,在图5-12所示的代码编辑器中输入。mand1.caption=点击事件,并删除thisform.release。运行表单,单击按钮,可以看到最后的效果。其中thisform是command1的父容器,command1是其中的一个控件,caption是command1的属性。文字“点击事件”是这个属性的值。 注:thisform在Visual FoxPro中用来代表当前的表单。,2标签控件,在设计表单界面时,几乎都要有一些提示某个控件的作用的文字,比如在注册时,就有用户名、密码等文字在某些表单控件之前进行显示,提示用户某控件可以做什么,如果不知道,用

15、户就会不了解这个界面,注册也就无从下手,这就是标签的作用。,标签,3“属性”窗口,“属性”窗口用于修改窗体和控件的属性,如图5-30所示,其中上方的下拉列表框中列出当前的窗体及其控件的名称,可以通过下拉列表来选择窗体或某一个控件。在窗体设计器中选择某一个对象之后,“属性”窗口也会显示该对象的属性。,图5-30 表单“属性”窗口,在属性列表中,caption属性最为常用,用于显示文本。而为了编程方便些,还要修改name属性,即在代码中引用对象时所用的名称。,在设计表单时,为了让界面更友好、更美观,通常都要对界面进行一定的美化,其中很重要的一项就是对字体属性的设置,常用的控件如标签和按钮等都会有字

16、体属性,可以在“属性”窗口中进行设置,图5-31所示为与字体有关的属性。,4和字体有关的属性,图5-31 和字体有关的属性,FontBold、FontItalic、FontStrikethru、Fontunderline属性:指定文本是否具有粗体、斜体、删除线或下划线等效果。 FontExtend的作用是指定文本是否可扩展。 FontName属性:指定显示文本的字体名,默认值为 Arial FontSize属性:默认的设置是 9 磅 FontOutline属性:作用是指定与控件相关联的文字是否显示为空心字 FontShadow属性:作用是指定与控件相关联的文字是否带有阴影 FontSize属性

17、:指定对象文本的字体大小,以磅为单位,默认值为10磅 ForeColor属性:指定用于显示对象中文本前景色,5命令按钮控件,命令按钮通常用来启动一个事件,如关闭一个表单、移动到不同记录、打印报表等动作。 可使用Caption属性指定在命令按钮上显示的文本。 命令按钮常用的事件是Click事件,当编辑代码时,可以选择执行的事件,如图5-33所示。,图5-33 命令按钮事件选择,(1)Click:当在程序中包含触发此事件的代码,或者将鼠标指针放在一个控件上按下并释放鼠标左键,或者更改特定控件的值,或在表单空白区单击时,此事件发生。 Click 事件发生在用户: 单击复选框、命令按钮、列表框或选项按

18、钮控件时。 使用箭头键或按鼠标键在下拉列表框或列表框中选择一项时。 在命令按钮、选项按钮或复选框有焦点时按SPACEBAR键时。 表单中有 Default 属性设置为“真”(.T.) 的命令按钮并且按回车键时。 按一个控件的访问键。例如,若一个命令按钮的标题为“Go”,则按ALT+G组合键可触发Click事件。 单击表单空白区。当指针位于标题栏、控制菜单框或窗口边界上时,不发生表单的 Click 事件。 单击微调控件的文本输入区。 单击废止的控件时,废止控件所在的表单发生Click事件。,6和鼠标操作相关的常用事件,(2)DblClick:当连续两次快速按下鼠标左键(主键)并释放时,此事件发生

19、。 当从列表框或组合框中选择一个选项并按回车键时,也发生 DblClick 事件。如果在系统指定的双击时间间隔内不发生 DblClick 事件,对象认为这种操作是一个 Click 事件。因此,当向这些相关事件中添加过程时,必须确认这些事件不冲突。另外,不响应 DblClick 事件的控件可能会将一个双击事件确认为两个单击事件。,6和鼠标操作相关的常用事件,7设置访问键,代表访问键的字符在菜单上或对话框中加有下划线或突出显示。同时按下 Alt 键和访问键可以激活菜单或对话框。有时用来指代热键。 设置访问键的方式是在设置Caption属性时,在访问键的相关字母前加/Close则显示的结果为Clos

20、e,设置的访问键为Alt+C。,8设置控件的Tab键次序,按键盘上的Tab键时,焦点从一个字段或对象移向另一个字段或对象的次序。对表单中的控件来说,按照控件添加的次序指定Tab键次序,每个新建控件都位于Tab键次序的末尾。一个良好的Tab键次序,对于用户的使用以及提高用户的工作效率是至关重要的。可以通过“属性”窗口来调整个别控件的Tab键值也可以通过菜单“显示”“Tab键次序”命令来依次指定。,9设置工具提示文本,ToolTipText:指定控件工具的提示文本。当在运行状态时,鼠标悬停在相关控件上方,系统会给出相关的提示。,10启用和废止控件,在某给定情况下,如果禁止使用某个控件,可以将该控件

21、的Enabled属性设置为“假”(.F.)。 将每个按钮的Enabled属性设置为“真”(.T.)或“假”(.F.),可以启用或废止组中单个选项按钮或命令按钮;也可通过设置组的Enabled属性来启用或废止组中的全部按钮。 如下面一行代码所示: Tmand1.Enabled = .F. 当控件的Enabled属性设置为“假”(.F.)时,控件的所有事件都将废止,但会显示出禁用的前景色和背景色。,11.定义表单属性,表5-3 表单行为属性(一),11.定义表单属性,表5-3 表单行为属性(二),12指定表单的图标,在Visual FoxPro for Windows 中,可指定表单的图标;当该表

22、单在 Windows NT 窗口中最小化或位于 Windows 95 的标题栏上时显示为这个图标。如果要指定表单的图标,将表单的 Icon 属性设置为一个 .ico 文件的文件名。 若要指定表单的图标,打开表单,再打开“属性”窗口,将 Icon 属性设置为希望显示的 .ico 文件。,5.3.2 任务实现,(1)效果如图5-34所示,添加按钮和图片,设置按钮的名称。 各按钮的Click事件的代码分别如下: “采购商品”按钮Click事件:do form 商品信息 “生产商”按钮Click事件:do form生产商 “供货商”按钮Click事件:do form 供货商 “会员注册”按钮Click

23、事件:do form 会员注册 “用户注册”按钮Click事件:do form 用户注册 “采购商信息”按钮Click事件:report form 采购商信息报表 preview “生产商信息”按钮Click事件:report form 生产商信息报表 preview,5.4 任务三 利用程序浏览数据,5.4.1 相关知识,1程序设计的基本概念 程序设计(Programming)是指设计、编制、调试程序的方法和过程(程序设计=数据结构+算法)。它是目标明确的智力活动。由于程序是软件的本体,软件的质量主要通过程序的质量来体现,在软件研究中,程序设计的工作非常重要,内容涉及有关的基本概念、工具、方

24、法及方法学等。 按照结构性质,有结构化程序设计与非结构化程序设计之分。前者是指具有结构性的程序设计方法与过程。它具有由基本结构构成复杂结构的层次性;后者反之。按照用户的要求,有过程式程序设计与非过程式程序设计之分。,2程序设计的过程 软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法及方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。 (1)系统分析员通过和用户的沟通初步了解需求,列出系统的主要功能模块,每个主要功能模块可能会有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里可以初步定义好少量的界面。 (2)系统分析员深入地了解和分析需求,

25、根据自己的经验和需求做出一份系统的功能需求文档。文档会清楚列出系统大致的主要功能模块,主要功能模块有哪些小功能模块,并且会列出相关的界面和界面功能。 (3)系统分析员和用户再次确认需求。 (4)系统分析员根据确认的需求文档所列出的界面和功能需求,用迭代的方式对每个界面或功能做系统的概要设计。 (5)系统分析员把写好的概要设计文档提交给程序员,程序员根据所列出的功能进行设计和编写代码。 (6)测试编写好的系统,交给用户使用,用户使用后逐一确认每个功能,然后验收。,3程序设计基础 (1)变量。变量是在程序设计中最重要的一个要素,几乎任何一个程序设计语言中都要有变量存在。操作过程中可以改变其取值或数

26、据类型的数据项。在Visual FoxPro系统中,变量分为字段变量、内存变量、数组变量和系统变量4类。此外,作为面向对象的程序语言,Visual FoxPro系统在进行面向对象的程序设计中引入了对象的概念,对象实质上也是一类变量。,确定一个变量,需要确定其3个要素:变量名、数据类型和变量值。 命名约定:在Visual FoxPro系统中,将表示、存储数据的常量、变量、数组、字段、记录、对象、表、数据库等,都称为数据容器。所有数据容器均需命名以相互区别,为规范各类对象的命名,Visual FoxPro系统推荐若干“命名约定”供用户参考,以提高操作命令与程序的可读性和规范性。 使用字母、下划线和

27、数字命名。一般建议不采用汉字命名。 命名以字母或下划线开头;除自由表中字段名、索引的TAG标识名最多只能有10个字符外,其他的命名可使用1128个字符。 避免使用 Visual FoxPro的保留字。, 字段变量。 在Visual FoxPro系统中,表由若干记录构成,每个记录包含若干数量相同的字段,而同一字段在不同记录中对应不同的值。所以字段是变量。 字段变量与其他变量不同,是定义在表中的变量,随表的存取而存取,是永久性变量。字段变量的变量名即字段名,数据类型为Visual FoxPro系统中的任意数据类型,变量值即字段值。 内存变量。 内存变量是用户在内存中定义的,用来存放程序运行的中间结

28、果和最终结果,是进行数据的传递和运算的变量。 有一种内存变量在全部程序、过程和自定义函数,以及它调用的程序、过程和自定义函数中都有效,这就是全局型内存变量。全局型内存变量使用Public定义,在后面的实例中会有它的应用。 系统变量。 系统变量是Visual FoxPro系统特有的内存变量,由Visual FoxPro系统定义、维护。系统变量的变量名均以下划线“_”开始,如_WINDOWS、_CLIPTEXT等。因此在定义内存变量和数组变量名时,不要以下划线开始,以免与系统变量名冲突。系统变量设置、保存了很多系统的状态、特性,了解、熟悉并充分地运用系统变量,会给数据库系统的操作和管理带来很多方便

29、,特别是开发应用程序时更为突出。,a变量的保存。Visual FoxPro提供相应命令,可用文件形式将某些变量保存起来,以便重复使用。 格式:SAVE TO ALL LIKE | ALL EXCEPT 功能:将指定变量的信息保存到指定的变量文件(*.MEM)中。 ALL LIKE :只保存符合通配符条件的所有变量。 ALL EXCEPT :只保存不符合通配符条件的所有变量。 b变量的恢复。需要保存在文件中的变量信息时,必须先恢复到内存后方可使用。 格式:RESTORE FROM ADDITIVE 功能:将指定变量文件(*.MEM)中的变量信息恢复到内存中。 ADDITIVE:省略此项,清除内存

30、所有变量后再恢复文件中变量的信息;加选此项,将变量文件中的变量信息追加到内存现有变量信息中。 c变量的清除。Visual FoxPro系统对定义内存变量的数量是有限制的,应及时清理,尽量减少内存的占用,以定义其他变量。 格式:RELEASE RELEASE ALL LIKE | EXCEPT ,(2)分支结构。 简单的条件语句。 格式:IF ENDIF 说明:条件表达式可以是各种表达式的组合,其值必须是逻辑“真”或“假”。当条件表达式的值为“真”时,先执行IF与ENDIF间的语句,然后执行ENDIF后面的语句;当条件表达式的值为“假”时,直接执行ENDIF后面的语句。,例1:从键盘输入一个数,

31、若小于0,则显示“输入的是负数”。 *liti1 clear input 输入一个数: to x if x0 ?输入的是负数 endif,带ELSE的条件语句。 格式: IF ELSE ENDIF 说明:当条件表达式的值为“真”时,先执行命令序列1,然后转去执行ENDIF后面的语句;当条件表达式的值为“假”时,先执行命令序列2,然后转去执行ENDIF后面的语句。,例2:从键盘输入一个数,若小于0,显示“输入的是负数”;否则显示“输入的是非负数”。 *liti2 clear input 输入一个数: to x if x0 ?输入的是负数 else ?输入是的非负数 endif, IF条件语句的嵌

32、套。 格式1: IF IF ELSE ENDIF ELSE ENDIF 当“条件1”为“真”,同时“条件2”为“真”时,执行“命令序列1”。 当“条件1”为“真”,同时“条件2”为“假”时,执行“命令序列2”。 当“条件1”为“假”,执行“命令序列3”。,格式2: IF ELSE IF ELSE ENDIF ENDIF 当“条件1”为“真”,执行“命令序列1”。 当“条件1”为“假”,同时“条件2”为“真”时,执行“命令序列2”。 当“条件1”为“假”,同时“条件2”为“假”时,执行“命令序列3”。,例3:从键盘输入一个数,若小于0,显示“输入的是负数”;若等于0,显示“输入的是零”;若大于0

33、,则显示“输入的是正数”。 *liti3 clear input 输入一个数: to x if x0 ?输入的是负数 else if x=0 ?输入的是零 else ?输入的是正数 endif endif 实现过程与例2一样,都是在命令窗口中执行,只是新建的文件名要另起一个,以免重复,这里使用liti4作为文件名,读者也可以自己起一个名字。, DOCASE条件语句的嵌套。 DO CASE CASE条件表达式1 命令序列1 CASE 条件表达式2 命令序列2 . CASE 条件表达式N 命令序列N OTHERWISE 命令序列N+1 ENDCASE 在执行DO CASE命令时,依次判断各条件,若

34、为.T.,就执行对应的,然后转去执行ENDCASE后面的语句。若为.F.,不执行,继续判断下一个条件。若没有一个条件为T,则执行OTHERWISE后面的。若没有OTHERWISE语句,则不作任何操作就转去执行ENDCASE之后的语句。,例4:利用do case判断今天是星期几。 *liti4 input 输入一个1-7的数: to x do case case x=1 ?星期一 case x=2 ? 星期二 case x=3 ? 星期三 case x=4 ? 星期四 case x=5 ? 星期五 case x=6 ? 星期六 case x=7 ? 星期日 otherwise ? 请输入要求输入

35、的数字! endcase,(3)循环结构. 条件循环(“当”型循环控制语句)。 a语句格式: DO WHILE ENDDO b执行过程:当执行到DO WHILE 语句时,首先判断条件表达式的值是否为真,若为真则执行下面的命令序列,遇到ENDDO即返回到循环头,再检查条件是否为真,如果条件仍为真,则再执行序列;如此反复检查和执行,直到的值为假,即退出循环,转去执行ENDDO后面的语句。 c说明。 循环体:被重复执行的命令序列。 DO WHILE 与ENDDO必须配对使用。 循环条件的改变、死循环、循环的退出。 d循环辅助语句 格式:EXIT 功能:用于终止本层循环,无条件转移到本层ENDDO后面

36、的语句去执行。 格式:LOOP 功能:终止本次循环,返回到循环头,进行本层次的下一次循环。,例5:循环输出1+2+3+100的和。 *liti5 CLEAR&清除屏幕显示信息 S=0&设置变量S初始值为0,用于保存和 N=1&设置变量N初始值为1,用于计数 DO WHILE N=100&当N100时,执行DO 和ENDDO之间的代码 S=S+N &将S+N的值赋给S N=N+1 &N的值增加1 ENDDO ?S=,S 实现过程与例2一样,都是在命令窗口中执行,只是新建的文件名要另起一个,免得重复,这里使用liti6作为文件名,读者也可以自己起一个名字。,步长循环 (“计数”型循环控制语句)。

37、格式:FOR = TO STEP ENDFOR 功能:根据给定的次数重复执行命令序列,实现程序循环。 说明: STEP步长值:是循环控制变量递增或递减的步长。如果步长值为正,循环控制变量递增;如果步长值为负,则循环控制变量递减。如果缺省STEP子句,循环控制变量每次的增量为1。,例6:求1+2+3+99+100的值。 * liti6 s=0 for x=1 to 100 &循环递增X的值,每次增长1 s=s+x endfor ?s=,s 实现过程与例2一样,都是在命令窗口中执行,只是新建的文件名要另起一个,免得重复,这里使用liti7作为文件名,读者也可以自己起一个名字。,5.4.2 任务实现

38、,(1)在“项目”选项卡中,建立一个自定义表单,命名为“程序结果”,用来输出分支结构、循环结构和统计用户数量的结果,如图5-36所示。 注:Label1为标签。,图5-36 程序运行及结果显示,(2)编写“分支结构”按钮的代码。 a=5 If a 3&如果a3 thisform.label1.caption=比3大&在标签上显示最终结果 else&如果a3,则在标签中显示比3小,否则显示比3大。上面的标签中,主要利用的就是caption属性,而按钮的事件就是Click事件,如图5-37所示。,图5-37 按钮事件选择,(3)编写“循环结构”按钮的代码。 S=0 N=1 DO WHILE N=1

39、00 S=S+N N=N+1 ENDDO THISFORM.LABEL1.CAPTION=STR(S) & LABEL1为在此表单上建立的一个标签的默认名称 上面的代码还是利用命令按钮的click属性和标签的caption属性。这个命令按钮的作用就是求1+2+3+100的和,最终将结果显示到标签中。在代码中,str()需要注意一下,因为标签显示的是文本,而利用循环得出的值是数值型的,所以需要利用该函数将数值型数据转换为字符型。,(4)编写“统计用户数量”按钮的代码。 USE 用户 &“用户”表是超市系统里的一个数据表 N=0&设置变量N的初始值为0 DO WHILE .NOT. EOF()&当

40、数据表没有到达文件尾时 Display&显示记录 N=N+1&变量N+1 SKIP&转到下一条记录 ENDDO&跳回到do while 语句 THISFORM.LABEL1.CAPTION=STR(N)&显示最后统计的结果,课后练习,1制作一个表单,添加一个按钮和标签,利用循环输出100以内的奇数和,代码加入到按钮的单击事件中,单击按钮后在标签上显示结果。 提示利用modify command 命令设计程序,利用do命令运行程序,程序名称自定义 2利用循环语句,输出数据库中交易表的某会员的交易信息。 提示利用modify command 命令设计程序,利用do命令运行程序,代码如下: clea

41、r use 供货商 &“供货商”表是超市系统里的一个数据表 do while .not. eof()&当数据表没有到最后记录时 disp&显示记录 skip&转到下一条记录 enddo&跳回到do while 语句 use&关闭此表 3利用循环显示“商品信息”表的最新10条数据。 提示可以利用modify command 命令设计程序和用do命令运行程序,也可以利用项目管理器设计程序并运行程序。,5.5 任务四 用户登录,5.5.1 相关知识,1数据环境的使用 每一个使用表的表单都包括一个数据环境。数据环境是一个容器对象,它用来定义与表单相联系的数据实体(表、视图)的信息及其相互联系。数据环境

42、容器一般包含一到多个Cursor类对象,表单中所含Cursor类对象的个数与表单关联的数据实体(表、视图)的个数相同,一个Cursor类对象与一个数据实体(表、视图)对应,如果一个表单关联多个表,在数据环境容器中还有一个Relation类对象描述这些表之间的关系。下面对数据环境容器及其可能包含的对象分别进行说明。,(1)游标(cursor)类对象 (2)关系(Relation)类对象 (3)数据环境设计器,2Init事件 对于表单集和其他容器对象来说,容器中对象的init事件在容器的init事件之前触发,因此容器的init事件可以访问容器中的对象。容器中对象的init事件的发生顺序与它们添加到

43、容器中的顺序相同。 如果不创建控制,可以在init事件中返回“假”(.F.),这时不触发 Destroy 事件。例如,下面的代码在 Invoice 表不存在时返回“假”(.F.)。,3接受预先不能确定的输入 该功能是一个软件必不可少的功能,举个例子来讲,用户在登录一个系统时,如果没有填写用户名和密码,直接单击登录,结果会怎么样?有两种结果:一种是进入到系统,这就是没有容错的结果,这就使得用户无须注册,进而使得注册功能失败和降低了系统的安全性和权限控制;第二种结果是提示用户输入用户名和密码,如果容错的好一些,还会限制用户输入次数,如果超过预定的次数,这个账号将被锁定。 4文本框 创建一个文本框(

44、Textbox),从中可以编辑变量、数组元素或字段的内容。所有标准的 Visual FoxPro 编辑功能,如剪切、复制和粘贴在文本框中都可用。使用输入掩码和 Format 属性,可以指定在文本框中如何输入和显示数值。例如,PasswordChar属性就可以设置成希望的任何掩码,如“*”。,5组合框 创建一个组合框(Combobox)后 , 当被选中时,组合框打开,并显示项的列表,从中可选择一项。组合框控件结合了文本框控件和列表框控件的特性。可在文本框部分输入信息或从列表框部分选择一项。 通过在组合框控件中的一项前面加一个反斜杠(),可以让该项失效。 Style属性确定组合框的类型。若Styl

45、e属性设为0,则创建一个下拉组合框;若Style属性设为2,则创建一个下拉列表框。 6命令按钮组 前面已经提到过命令按钮,这里再讲解一下命令按钮组。使用CommandGroup控件可创建一组命令按钮,并且可以单个或作为一组操作其中的按钮。使用CommandButton控件可创建单个命令按钮。可使用ButtonCount属性指定组中的命令按钮数目,使用Caption属性指定命令按钮组的标签。,5.5.2 任务实现,(1)打开超市管理系统工程,新建一个窗体Login。 (2)在窗体设计器中添加如图5-39所示的控件。,图5-39 用户登录表单,(3)添加数据环境:右键单击该表单,在弹出的快捷菜单中

46、选择“数据环境”命令,将用户表添加到数据环境中,如图5-40所示。,图5-40 表单添加数据环境,(4)双击“确定”按钮,将会自动切换到代码编辑器,并添加以下代码:,*-确定按钮代码- select 用户&选择用户表,当表单数据环境中只有一个表时可以省略 locat for 用户名称=alltrim(thisform.text1.value)&查找相关记录 if found() &如果查找到相关用户 if trim(thisform.text2.value) = trim(用户密码) &检验密码 release thisform&退出窗口 do form 主窗体&打开主窗体 else &密码错

47、误 messagebox( 密码有误,请确认以后重新输入 ,16, 错误 ) thisform.text1.value= &设置text1的值为空 thisform.text2.value= &设置text2的值为空 endif else &如果没有查找到该用户 messagebox( 用户名有误,请确认以后重新输入 ,16, 错误 ) endif,(5)选择菜单“文件”“保存”命令。 (6)单击工具栏上的按钮或按+E组合键即可运行窗体。,注:代码说明:首先查找用户表的用户名称,是否有文本框中输入的值,如果找到则判断密码是否和输入的密码相符,相符合,则退出本表单,进入到主窗体,如果不相符则发出

48、提示信息,将用户名和密码的文本框设置为空。如果没有查到该用户名,则发出提示信息。,Alltrim():删除指定字符表达式的前后空格符,并且返回删除空格符后的字符串。 Trim():返回删除全部后缀空格后的指定字符表达式。 Messagebox():显示一个用户自定义对话框,其中代表“停止”图标,依次是指定在对话框中显示的文本,对话框的高度和宽度根据 cMessageText 适当增大,以包含全部信息;指定对话框中的按钮和图标、显示对话框时的默认按钮及对话框的行为;指定对话框标题栏中的文本。,课后练习,制作一个表单如图5-41所示,当输入一种商品的编号后,核实数据库中是否存在该商品。利用文本框进

49、行数据的输入,利用“查找结果”标签显示结果。,提示查找结果为label,如果查找到则显示相关商品的名称;如果查不到相关商品,则显示“库中无此商品”。,5.6 任务五 退出窗口,5.6.1 相关知识,1给定时间间隔执行指定操作 计时器(Timer):提供计时功能,即每隔一段指定的时间就产生一次timer事件,用于控制某些进程。,图标就是计时器控件。,表5-4 定时器属性设置,时间间隔一般不能太小,否则频繁产生timer事件会降低系统的效率。计时器不能自动直接实现定时中断,比如希望8点产生定时事件,应将8点时间与当前时间datetime()相减,换算成秒数后作为interval属性值。,2计时器控

50、件的初始化 在使用了计时器以后,就要对它进行初始化设置,设置如图5-42所示。这里主要设置interval和enabled两个属性,具体解释如表5-4所示。 3对计时器事件的响应 计时器常用的事件是timer事件,常用的方法是reset。在设计阶段,设置interval0,enabled为.T.,则当表单启动时计时器便开始计时。若enabled为.F.,则计时器不启动,调用reset方法可使计时器重新从0开始计时。,图5-42 计时器属性,注计时器控件在运行时是不可见的,所以在设计时可把它放置在表单的任意位置。,4CHR函数 CHR函数,根据指定的ASCII数值代码返回其对应的字符。 5Tim

51、e函数 该函数主要是对时间进行操作,该类操作主要应用有:在注册用户时,希望用户在一定时间范围内读取一些协议;可以在某些页面进行时间的显示;可以做一些退出的设置,如在退出某些系统时,为了避免某些错误操作,导致退出系统而尚未保存信息,可以用倒计时来提醒用户,这种方式也用到了一些大型的网络游戏,利用这种方式来存储人物数据。与日期相关的函数如表5-5所列。,表5-5 日期相关的函数,5.6.2 任务实现:退出窗体,在程序设计和软件开发中,经常需要设计计时器,如秒表、正计时器、倒计时器等。这些计时器的设计方法大同小异,本文以倒计时器设计为例介绍两种设计倒计时器的方法。 Visual FoxPro中的计时

52、器控件有一个Timer事件,每经过Interval(单位为毫秒)属性指定的时间就执行该事件一次。利用该控件的这一特点再配合一些程序,可设计各种计时器,包括倒计时器。,本程序通过计时器控件和时间函数seconds()来设计倒计时器。seconds()函数可以以秒为单位返回自午夜以来经过的时间。在“开始”按钮的Click事件中加入代码:t0seconds()。在计时器控件的Timer事件代码中加入:t1seconds()、t210t0、t3t2t1。t0为单击“开始”按钮时离午夜的时间,t1为计时器每次触发时距午夜的时间,t2为定时结束时距午夜的时间,t3为剩余时间。,(1)打开超市管理系统工程,

53、新建立一个窗体退出系统。 (2)在窗体设计器中添加如图5-43所示的控件。,图5-43 退出表单,(3)程序清单如下。 表单Form1的Init事件代码: public t0&声明变量t0 t0=seconds()&设置t0为表单运行的当前时间 thisform.timer1.enabled=.t.&可以直接在属性中设置 标签Label1的属性 Caption:退出系统 标签Label2的属性 Caption:10秒钟,计时器Timer1的属性 Interval:500&时间间隔 计时器Timer1的timer事件代码: t1seconds()&设置t1为表单运行后每次计时器响应的时间 if

54、t1-t0 =10&判断当前时间与表单运行时的时间差 messagebox(定时时间到!) else thisform.label5.captionint(10-(t1-t0) endif 命令按钮Command1的属性 Caption:退出 命令按钮Command1的Click事件代码: Quit 命令按钮Command2的属性 Caption:取消 命令按钮Command2的Click事件代码: release thisform 说明:在上面的程序中,只是对倒计时的代码作一些修改,只要适当对上面的代码进行修改,就可以改变出很多的实用功能。,课后练习,利用计时器制作一个表单,要求用户阅读注册

55、协议,在30秒后才可以进行下一步操作。要求只有剩余时间为0时按钮才可以使用,如图5-44所示。,图544 退出提示,5.7 任务六 商品信息浏览,5.7.1 相关知识,类是面向对象程序设计中非常重要的一个知识点,正是类的存在,使得面向对象程序设计变得丰富多彩。恰当地使用类不仅可以使程序更加美观,更可以减轻大量的重复性工作。 利用向导实现表单可以很快速地生成数据表单。但这并不是万能的方法,对于一些有特殊功能的表单并不能完全利用这种方法来生成。在这种情况下必须手工生成表单,并对所生成的表单添加一些功能按钮和一些导航按钮。这些功能按钮和导航按钮可以用类的方式来生成。如果程序中并不涉及太多的代码的重用

56、问题,也可以不用类的方法。,1创建类,在创建过程中,选择“类”,单击“新建文件”命令,弹出窗体,如图5-45所示。,图5-45 “新建类”对话框,为新建类添加“类名”myc,选择“派生于”为CommandGroup,该选项是选择新建的类将继承于哪种类。在“存储于”中选择存储的位置,设置好相关目录,单击“确定”按钮。,2将新属性添加到类,在新建的类中添加4个按钮,做成导航菜单,如图5-46所示。,图5-46 新建类,3在类中编辑方法 编辑类中的命令按钮和编辑表单中的命令按钮是一样的,双击即可添加程序代码。 4将类添加到表单中 建立完一个类后,可以重复使用,非常方便,就像使用自带的控件一样。 使用

57、时只要单击添加图标,选择“添加”命令,找到刚才新建的类,就可以使用了。,5注册一个类库. 从“工具”菜单中选择“选项”命令,在弹出的“选项”对话框中选择“控件”选项卡,选择“可视类库”并单击“添加”按钮,在“打开”对话框中选择要注册的类库并单击“打开”按钮,单击“确定”按钮。,5.7.2 任务实现:类的实现,(1)新建类。名称为myc,该类起数据导航的作用,4个命令按钮的名称分别是首记录、上一条、下一条和末记录。代码如下: 首记录: GO TOP &指针指到第一条记录 THISFORM.Refresh &刷新 上一条: SKIP -1 &指针指向上一条记录 IF BOF() &判断是否到达首记

58、录 GO TOP ENDIF THISFORM.Refresh&更新表单数据 下一条: SKIP 1 &指针指向下一条记录 IF EOF() &判断是否到达末记录 GO BOTTOM &指向最后一条记录 ENDIF THISFORM.Refresh&更新表单数据 末记录: GO BOTTOM THISFORM.Refresh,(2)新建一个表单“商品信息2”,右击表单,为表单添加数据环境,在数据环境中引入“商品信息”表,利用手工拖动的方式,把相关字段拖动到此表单中。并适当调整各控件的位置,在表单下留出空白,以便添加上面所生成的类。 (3)添加上面所生成的类,通过生成器和类来实现浏览商品信息的功

59、能,如图5-47所示。,图5-47 手工制作“商品信息”表单,4添加组合框,调整表单界面的布局。最终效果如图5-48所示。,图5-48 为表单添加自定义类,(5)设置组合框,表单中的组合框主要起到浏览厂商和供货商信息的作用。这里以厂商编号为例。右击组合框combo1,在快捷菜单中选择“生成器”命令,设置如图5-49所示。,图5-49 为组合框设定字段,首先选择数据表,然后选择要显示的字段,单击“确定”按钮就可以实现要求的功能,还可以进行其他的设置: RowSourceType设定为字段 RowSource设定为“供货商.供货商名称,供货商.供货商编号” ControlSource设定为“商品信

60、息.供货商编号” BoundTo设定为.T. BoundColumn设定为2 组合框的最终效果如图5-50所示。,图5-50 组合框运行结果,课后练习,利用前面制作的导航菜单,制作一个浏览会员基本信息的表单。效果如图5-51所示。,图5-51 会员信息浏览表单,5.8 任务七 表单的综合应用,5.8.1 相关知识,1在表单中添加表格 表格(grid)是按行和列显示数据的容器对象,其外观与浏览窗口相似。表格是包含列对象的容器对象。列可以包含标头对象及控制。由于表格及其列、标头和控件都有各自的属性集,可以完全控制表格中的每一个元素。可以在表格生成器中交互地创建“表格”。,图5-52 表格的使用,2

61、设置表格列数 在表格的属性中,ColumnCount属性,指定表格控件中列对象的数目。对于表格,该属性设计时可用,运行时可读写。对于表格控制,默认的属性设置为1。当ColumnCount属性设置为1时,则自动创建足够的列,以容纳数据源中的所有字段。对于表格,可使用AddColumn方法增加列的数目。 3在设计时人工调整表格的显示效果 在设计表格时,开发人员可以利用AllowRowSizing属性指定能否人工调整表格中行的大小。 4设置表格中显示的数据源 RecordSource指定与表格控件相绑定的数据源。设计时可用,运行时只读写。该属性指定与表格控制相绑定的主临时表。如果为一个网格指定了记录

62、源,就可以通过设置ControlSource 属性来指定网格中单独列的内容。如果没有为网格中的列设置ControlSource属性,那么列显示网格的记录源中下一个可用的不能显示的字段。,5常用的表格属性 Top:对于表单对象,确定表单的顶端边缘与Visual FoxPro主窗口的距离。 Left:对于表单对象,确定表单的左边界与Visual FoxPro主窗口左边界之间的距离。 Height:指定对象在屏幕上的高度。 Width:指定对象的宽度。 ColumnCount:指定表格控件中列对象的数目。 LinkMaster:指定表格控件中子表所链接的父表。 RecordSource:指定与表格控

63、件相绑定的数据源。,6编辑框 在表单上用于接收输入文本或查看文本的控件。编辑框可以包含多行文本。编辑框控件可用来编辑字符类型的内存变量、数组元素、字段或备注字段。 所有标准的Visual FoxPro编辑功能,如剪切、复制和粘贴,在编辑框中都可以使用。编辑框中的文本在垂直方向上可以滚动,在水平方向上可以自动换行。 7微调控件 允许通过输入或单击上、下箭头按钮增加或减少数值的控件。 8组合框 被选中时,组合框打开,并显示项的列表,从中可选择一项。组合框控件结合了文本框控件和列表框控件的特性。可在文本框部分输入信息或从列表框部分选择一项。,5.8.2 任务实现一 手工建立一对多表单,本节手工建立一

64、对多表单供货商供货信息。 首先建立一个表单,用来显示供货商供货情况,每显示一个供货商的编号,就自动显示该供货商所能提供的商品。该表单的制作需要在“供货商”表和“商品信息”表之间以供货商编号为关联条件建立关系。,步骤如下: (1)建立一个表单,名称为供货商供货信息。 (2)在所建的表单上,右击选择“数据源”,添加供货商和生产商两个表,然后单击“关闭”按钮,接下来进行数据源的编辑,如图5-53所示。,图5-53 添加数据环境,(3)多个表建立关系:因为“商品信息”表中包含“供货商”表的主关键字“供货商编号”,因此这两个表可以建立起关系,建立关系的方法是:首先选择“供货商”表的供货商编号,然后拖拽到

65、“商品信息”表的供货商编号上,注意拖拽的字段是在“字段”和“索引”之间的字段。具体效果如图5-54所示。,图5-54 建立表间关系,(4)利用拖拽数据环境内数据表的方式建立表单。首先,选中图5-54中“供货商”表中的供货商名称,拖拽到刚刚建立的表单上,同样,选择图5-54中“商品信息”中所需的多个字段,拖拽到表单中,自动形成表格,如图5-55所示,然后可以对表单的布局适当调整,制作一个适当的界面。,图5-55 界面美化,(5)添加导航的按钮。添加两个按钮,分别作为导航按钮的“上一条”和“下一条”,如图5-56所示。 上一条: SKIP -1 &指针指向上一条记录 IF BOF()&判断是否到达

66、首记录 GO TOP ENDIF THISFORM.Refresh 下一条: SKIP 1 &指针指向下一条记录 IF EOF()&判断是否到达末记录 GO BOTTOM &指针指向最后一条记录 ENDIF THISFORM.Refresh 完成上面的表单之后,就可以通过导航按钮来浏览商品信息,实现这个表单的原理是当单击“下一条”按钮以后,实现一个查询,这个查询的where条件是查询供货商编号。,图5-56 添加导航按钮,5.8.3 任务实现二:复杂表单设计,(1)制作表单的效果如图5-57所示。,text1,text2,(2)编写按钮的程序代码如下: 确定按钮代码: gname=thisform.goodname.value values

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!