版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
会计学1VisualFoxPro程序设计案例教程建立用户使用界面第一章本章目的简单了解有关面向对象编程的特点和基础知识掌握程序设计的基本概念和常用命令掌握窗体的运行和关闭熟悉窗体的常用事件掌握窗体中的控件属性及代码编写本章任务任务一:录入超市管理系统数据任务二:设计用户主界面任务三:程序设计初步任务四:用户登录任务五:退出窗口任务六:商品信息浏览任务七:表单的综合应用第1页/共117页5.1基础知识面向对象的程序设计(OOP) (Object-OrientedProgramming,OOP)立意于创建软件重用代码,具备更好地模拟现实世界环境的能力,这使它被公认为是自上而下编程的优胜者。面向对象的编程语言使复杂的工作条理清晰,编写容易,它是一场编程技术方面的革命。VisualFoxPro是一种混合型语言,可以使用面向对象编程,也可以使用传统的过程化编程。第2页/共117页5.1.1抽象在面向对象中的作用1.抽象的概念 一般来讲,抽象是通过从特定的实例中抽取共同的性质以形成一般化的概念的过程。抽象是对某个系统的简化的描述,即强调该系统中的某些特征,而忽略一部分细节。简单地说,抽象是人们在理解复杂现象和求解复杂问题中处理复杂事物的主要工具。2.面向对象抽象的实现 面向对象的原理有4个,分别是数据抽象、行为共享、进化和确定性。(1)数据抽象:它为程序员提供了一种对数据和为操作这些数据所需要的算法的抽象。 数据抽象包含两个概念:模块化和信息隐藏。模块化的优点是便于修改或维护,系统发现问题后,可以确定问题出在哪个模块上。在支持信息隐藏的系统中,错误的影响也通常被限制在一个模块内,增强了系统的可靠性。(2)行为共享:行为是数据抽象引进的概念,行为是由实体的外部接口进行定义的。行为共享是指许多实体具有相同的接口,这将增加系统的灵活性。(3)进化:进化是考虑到实际中的需求会很快发生变化。面向对象的方法要支持进化过程就是要适应可能发生的不断变化。(4)确定性:这里确定性是指用于描述一个系统确定的行为。一个确定的系统应该确保其中每个行为项都有一个确切的解释,系统不会因不能响应某一行为而失败。第3页/共117页5.1.2面向对象的基本特征面向对象的系统包含3个要素:对象、类和继承。1.对象在不同领域中对对象有不同的理解。一般认为,对象就是一种事物,一个实体。从概念上讲,对象是代表正在创建的系统中的一个实体。例如,一个商品销售系统,像顾客、商品、柜台、厂家等都是对象。从实现形式上讲,对象是一个状态和操作(方法)的封装体。状态是由对象的数据结构的内容和值定义的,方法是一系列的实现步骤,它是由若干操作构成的。2.类类是创建对象的样板,它包含着所创建对象的状态描述和方法的定义。一个类的所有对象都有相同的数据结构,并且共享相同的实现操作的代码,而各个对象有着各自不同的状态。类是所有对象的共同行为和不同状态的集合体。3.继承继承提供了创建新类的一种方法,这种方法就是一个新类可以通过对已有的类进行修改或扩充来满足新类的需求。新类共享已有类的行为,而自己还具有修改或额外添加的行为。从一个类继承定义的新类,将继承已有类的所有方法和属性,并且可以添加所需要的新的方法和属性。新类被称为已有类的子类,而已有类称为父类,又叫基类。新类又叫派生类。第4页/共117页5.2任务一录入超市管理系统数据5.2.1相关知识数据库的对话框在VisualFoxPro中称为“窗体”,一般还称为表单。窗体也是VisualFoxPro中的一种对象,它使用计算机屏幕将数据库中的表或查询中的数据显示出来。由于数据库软件是给用户使用的,所以要为使用的用户提供一个友好的使用界面。这是建立一个窗体的基本目标。一个设计优秀的窗体是非常必要的。不管数据库中表或查询设计得有多好,如果窗体设计得十分杂乱,而且没有任何提示,就会令使用者感觉到迷惑,甚至增加失误的概率。这样的窗体就不利于数据库软件的应用和推广。本任务将介绍如何使用VisualFoxPro编写一个简单的程序。在此之前先介绍VisualFoxPro的各个部分的功能,包括工具箱、项目管理器、“属性”窗体设计器等,下面分别介绍这几部分的功能。第5页/共117页1.工具箱
当建立一个新的表单时,或者打开表单设计器时,一般会默认显示工具箱,上面提供了VisualFoxPro表单中常用的各个控件。选中控件,然后在窗体设计器中拖动鼠标,即可在其中绘制控件。初始状态的工具箱只有一个“常用”选项卡,在工具箱上右击,在弹出的快捷菜单中选择“添加选项卡”命令,可以为工具箱添加选项卡;右击,选择相关选项,可以打开其他选项卡。第6页/共117页常用表单控件名称第7页/共117页2.项目管理器项目是VisualFoxPro的组织应用程序的方式,一般而言,一个工程包含开发一个应用程序所需要的所有文件,包括窗体文件、程序文件、数据库文件、表文件、报表文件、菜单文件、索引文件等。第8页/共117页5.2.2任务实现本小节主要技能点如下:(1)创建最基本表单。(2)用表单向导创建表单。(3)一对多表单向导第9页/共117页1.创建最基本的表单在的“项目管理器”中,选择“文档”选项卡,选择下面列表框中的“表单”选项,在右侧操作区单击“新建”按钮。在“新建表单”对话框中单击“新建表单”按钮。第10页/共117页选择“文件”菜单中的“保存”命令,选择相关的文件夹并输入正确的表单名即完成第一个表单的制作,如图所示。第11页/共117页选择要保存表单的位置第12页/共117页也可以重新命名该表单,然后单击“保存”按钮,该表单就会出现在当前项目中,如图所示。关闭设计器,选择第一个表单,在右侧的功能区单击“运行”按钮。第13页/共117页表单运行结果如图5-9所示。单击Form1右上角的关闭按钮,可以关闭Form1。再次选择第一个表单,单击“修改”按钮,可以对Form1(第一个表单)进行修改。第14页/共117页选择菜单中的“显示”→“表单控件工具栏”命令,可以控制表单控件工具栏的显示。单击工具栏中的按钮,并在第一个表单(Form1)上再次单击,则会在Form1中创建一个新的按钮。第15页/共117页双击Command1按钮,会出现该按钮的代码编辑器在Command1的click事件中输入thisform.release,即运行表单后,单击此按钮就会退出表单。关闭表单设计器,运行表单,测试按钮Command1的效果。第16页/共117页2.用表单向导创建简单表单(1)在“项目”菜单中,选择“新建”→“表单向导”命令,出现如图所示的界面。第17页/共117页(2)选择“表单向导”选项,单击“确定”按钮。(3)选择一个数据表,然后为该表建立一个表单,这里选择的是“用户”表,单击按钮可以把“用户”表的所有字段全部选中,单击按钮可以选取单个字段。单击“下一步”按钮。第18页/共117页(4)如图5-15所示,在该对话框中选择一个自己喜欢的样式,使表单更加美观,单击“下一步”按钮继续。第19页/共117页(5)该对话框主要是对“用户”表的数据进行排序的设置,这里选择“用户编号”作为索引,单击“添加”按钮,再单击“下一步”按钮第20页/共117页(6)根据该对话框的提示,可以单击“预览”,观看一下效果,也可以直接单击“完成”按钮,完成表单的制作第21页/共117页(7)单击“预览”按钮,效果如图5-18所示,返回向导,单击“完成”按钮,将表单命名为“用户”,选择一个存放表单的位置,如D:\superMarket第22页/共117页3.一对多表单向导选择“项目”菜单中的“新建”命令,选择“一对多表单向导”单击“确定”按钮,效果如图5-20所示。选择“供货商”表,然后将字段导入到“选定字段”列表框中。单击“下一步”按钮图5‑19选择“一对多表单向导”选项图5‑20父表选择第23页/共117页从子表中选择字段(这里选择“商品信息”表,导出所有字段,单击“下一步”按钮。)第24页/共117页如图5-22所示,是建立两个表单的关系,以便联动显示。单击“下一步”按钮。图5‑22建立表间关系第25页/共117页如图5-23所示,在“样式”列表框中选择自己喜欢的样式,这里选择“阴影式”,单击“下一步”按钮。图5‑23选择表单样式第26页/共117页图5-24是选择排序次序的字段,这里选择“供货商编号”,单击“下一步”按钮图5‑24数据排序方式第27页/共117页单击“完成”按钮,保存为“供货渠道”图5‑25完成及相关选项第28页/共117页单击“完成”按钮,保存为“供货渠道”,运行表单第29页/共117页课后练习1.利用向导制作一个“入库记录”的表单,并用表单设计器修改和美化产生的表单,利用此表单浏览库存商品信息,并通过此表单输入相关的记录。第30页/共117页课后练习2.利用向导分别制作以下几个数据表的表单,如“供货商”表、“会员”表、“交易”表、“商品信息”表、“生产商”表、“销售”表、“用户”表,并通过表单为相关的数据表添加数据和修改数据。第31页/共117页5.3任务二设计用户主界面
设计用户主界面,并为主界面各项按钮指定代码,用以访问相关表单。第32页/共117页5.3.1相关知识点1.容器和控件2.标签控件3.“属性”窗口4.和字体有关的属性5.命令按钮控件6.和鼠标操作相关的常用事件7.设置访问键8.设置控件的Tab键次序9.设置工具提示文本10.启用和废止控件11.定义表单行为12.指定表单的图标第33页/共117页1.容器和控件VisualFoxPro6.0的基类共分成两个大类:容器类和非容器类。一般称容器类基类为容器,而把非容器类基类称为控件,有时也把所有基类都称为控件。(1)容器类。容器类可以包含其他对象,并且允许访问这些对象。
(2)控件类。控件类的封装比容器类更为严密,但也因此丧失了一些灵活性。
(3)容器中各对象的调用。在进行容器类“子类”或“对象”的设计时,往往要调用容器中某一特定对象,这就要掌握OOP方法中对象的标识方法。
例如,在图5-12所示的代码编辑器中输入。mand1.caption="点击事件",并删除thisform.release。运行表单,单击按钮,可以看到最后的效果。其中thisform是command1的父容器,command1是其中的一个控件,caption是command1的属性。文字“点击事件”是这个属性的值。注:thisform在VisualFoxPro中用来代表当前的表单。第34页/共117页2.标签控件在设计表单界面时,几乎都要有一些提示某个控件的作用的文字,比如在注册时,就有用户名、密码等文字在某些表单控件之前进行显示,提示用户某控件可以做什么,如果不知道,用户就会不了解这个界面,注册也就无从下手,这就是标签的作用。标签第35页/共117页3.“属性”窗口“属性”窗口用于修改窗体和控件的属性,如图5-30所示,其中上方的下拉列表框中列出当前的窗体及其控件的名称,可以通过下拉列表来选择窗体或某一个控件。在窗体设计器中选择某一个对象之后,“属性”窗口也会显示该对象的属性。图5-30表单“属性”窗口在属性列表中,caption属性最为常用,用于显示文本。而为了编程方便些,还要修改name属性,即在代码中引用对象时所用的名称。
第36页/共117页在设计表单时,为了让界面更友好、更美观,通常都要对界面进行一定的美化,其中很重要的一项就是对字体属性的设置,常用的控件如标签和按钮等都会有字体属性,可以在“属性”窗口中进行设置,图5-31所示为与字体有关的属性。4.和字体有关的属性图5-31和字体有关的属性FontBold、FontItalic、FontStrikethru、Fontunderline属性:指定文本是否具有粗体、斜体、删除线或下划线等效果。FontExtend的作用是指定文本是否可扩展。FontName属性:指定显示文本的字体名,默认值为ArialFontSize属性:默认的设置是9磅FontOutline属性:作用是指定与控件相关联的文字是否显示为空心字FontShadow属性:作用是指定与控件相关联的文字是否带有阴影FontSize属性:指定对象文本的字体大小,以磅为单位,默认值为10磅ForeColor属性:指定用于显示对象中文本前景色第37页/共117页5.命令按钮控件命令按钮通常用来启动一个事件,如关闭一个表单、移动到不同记录、打印报表等动作。可使用Caption属性指定在命令按钮上显示的文本。命令按钮常用的事件是Click事件,当编辑代码时,可以选择执行的事件,如图5-33所示。图5-33命令按钮事件选择第38页/共117页(1)Click:当在程序中包含触发此事件的代码,或者将鼠标指针放在一个控件上按下并释放鼠标左键,或者更改特定控件的值,或在表单空白区单击时,此事件发生。Click事件发生在用户:①单击复选框、命令按钮、列表框或选项按钮控件时。②使用箭头键或按鼠标键在下拉列表框或列表框中选择一项时。③在命令按钮、选项按钮或复选框有焦点时按SPACEBAR键时。④表单中有Default属性设置为“真”(.T.)的命令按钮并且按回车键时。⑤按一个控件的访问键。例如,若一个命令按钮的标题为“\<Go”,则按ALT+G组合键可触发Click事件。⑥单击表单空白区。当指针位于标题栏、控制菜单框或窗口边界上时,不发生表单的Click事件。⑦单击微调控件的文本输入区。⑧单击废止的控件时,废止控件所在的表单发生Click事件。6.和鼠标操作相关的常用事件第39页/共117页(2)DblClick:当连续两次快速按下鼠标左键(主键)并释放时,此事件发生。当从列表框或组合框中选择一个选项并按回车键时,也发生DblClick事件。如果在系统指定的双击时间间隔内不发生DblClick事件,对象认为这种操作是一个Click事件。因此,当向这些相关事件中添加过程时,必须确认这些事件不冲突。另外,不响应DblClick事件的控件可能会将一个双击事件确认为两个单击事件。6.和鼠标操作相关的常用事件第40页/共117页7.设置访问键代表访问键的字符在菜单上或对话框中加有下划线或突出显示。同时按下Alt键和访问键可以激活菜单或对话框。有时用来指代热键。设置访问键的方式是在设置Caption属性时,在访问键的相关字母前加/<Close则显示的结果为Close,设置的访问键为Alt+C。第41页/共117页8.设置控件的Tab键次序按键盘上的Tab键时,焦点从一个字段或对象移向另一个字段或对象的次序。对表单中的控件来说,按照控件添加的次序指定Tab键次序,每个新建控件都位于Tab键次序的末尾。一个良好的Tab键次序,对于用户的使用以及提高用户的工作效率是至关重要的。可以通过“属性”窗口来调整个别控件的Tab键值也可以通过菜单“显示”→“Tab键次序”命令来依次指定。第42页/共117页9.设置工具提示文本ToolTipText:指定控件工具的提示文本。当在运行状态时,鼠标悬停在相关控件上方,系统会给出相关的提示。第43页/共117页10.启用和废止控件在某给定情况下,如果禁止使用某个控件,可以将该控件的Enabled属性设置为“假”(.F.)。将每个按钮的Enabled属性设置为“真”(.T.)或“假”(.F.),可以启用或废止组中单个选项按钮或命令按钮;也可通过设置组的Enabled属性来启用或废止组中的全部按钮。如下面一行代码所示: Tmand1.Enabled=.F.当控件的Enabled属性设置为“假”(.F.)时,控件的所有事件都将废止,但会显示出禁用的前景色和背景色。第44页/共117页11.定义表单属性表5-3表单行为属性(一)属性说明默认值AlwaysOnTop控制表单是否总是处在其他打开窗口之上“假”(.F.)AutoCenter控制表单初始化时是否让表单自动在VisualFoxPro主窗口中居中“假”(.F.)BackColor决定表单窗口的颜色255、255、255BorderStyle决定表单是否没有边框,还是具有单线边框、双线边框或系统边框。如果BorderStyle为3—可调边框,用户能重新改变表单大小3Caption决定表单标题栏显示的文本Form1Closable控制用户是否能通过双击“关闭”框来关闭表单“真”(.T.)DataSession控制表单或表单集里的表是否能在可全局访问的工作区中打开,或仅能在表单或表单集所属的私有工作区内打开1MaxButton控制表单是否具有最大化按钮真(.T.)第45页/共117页11.定义表单属性表5-3表单行为属性(二)属性说明默认值MinButton控制表单是否具有最小化按钮真(.T.)Movable控制表单是否能移动到屏幕的新位置真(.T.)ScaleMode控制对象的尺寸和位置属性的度量单位是pixels还是像素。由“选项”对话框中的设置决定由“选项”对话框中的设置决定Scrollbars控制表单所具有的滚动条类型0-无TitleBar控制标题栏是否显示在表单的顶部1-打开ShowWindow控制表单是否在屏幕中、悬浮在顶层表单中或作为顶层表单出现0-在屏幕中WindowState控制表单是最小化、最大化还是正常状态0-普通WindowType控制表单是非模式表单(默认)还是模式表单。如果表单是模式表单,用户在访问应用程序用户界面中任何其他单元前必须关闭这个表单0-无模式第46页/共117页12.指定表单的图标在VisualFoxProforWindows中,可指定表单的图标;当该表单在WindowsNT窗口中最小化或位于Windows95的标题栏上时显示为这个图标。如果要指定表单的图标,将表单的Icon属性设置为一个.ico文件的文件名。若要指定表单的图标,打开表单,再打开“属性”窗口,将Icon属性设置为希望显示的.ico文件。第47页/共117页5.3.2任务实现(1)效果如图5-34所示,添加按钮和图片,设置按钮的名称。各按钮的Click事件的代码分别如下:“采购商品”按钮Click事件:doform"商品信息"“生产商”按钮Click事件:doform"生产商"“供货商”按钮Click事件:doform"供货商"“会员注册”按钮Click事件:doform"会员注册"“用户注册”按钮Click事件:doform"用户注册"“采购商信息”按钮Click事件:reportform采购商信息报表preview“生产商信息”按钮Click事件:reportform生产商信息报表preview第48页/共117页5.4任务三利用程序浏览数据5.4.1相关知识1.程序设计的基本概念程序设计(Programming)是指设计、编制、调试程序的方法和过程(程序设计=数据结构+算法)。它是目标明确的智力活动。由于程序是软件的本体,软件的质量主要通过程序的质量来体现,在软件研究中,程序设计的工作非常重要,内容涉及有关的基本概念、工具、方法及方法学等。按照结构性质,有结构化程序设计与非结构化程序设计之分。前者是指具有结构性的程序设计方法与过程。它具有由基本结构构成复杂结构的层次性;后者反之。按照用户的要求,有过程式程序设计与非过程式程序设计之分。
第49页/共117页2.程序设计的过程软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法及方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。
(1)系统分析员通过和用户的沟通初步了解需求,列出系统的主要功能模块,每个主要功能模块可能会有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里可以初步定义好少量的界面。(2)系统分析员深入地了解和分析需求,根据自己的经验和需求做出一份系统的功能需求文档。文档会清楚列出系统大致的主要功能模块,主要功能模块有哪些小功能模块,并且会列出相关的界面和界面功能。(3)系统分析员和用户再次确认需求。(4)系统分析员根据确认的需求文档所列出的界面和功能需求,用迭代的方式对每个界面或功能做系统的概要设计。(5)系统分析员把写好的概要设计文档提交给程序员,程序员根据所列出的功能进行设计和编写代码。(6)测试编写好的系统,交给用户使用,用户使用后逐一确认每个功能,然后验收。第50页/共117页3.程序设计基础(1)变量。变量是在程序设计中最重要的一个要素,几乎任何一个程序设计语言中都要有变量存在。操作过程中可以改变其取值或数据类型的数据项。在VisualFoxPro系统中,变量分为字段变量、内存变量、数组变量和系统变量4类。此外,作为面向对象的程序语言,VisualFoxPro系统在进行面向对象的程序设计中引入了对象的概念,对象实质上也是一类变量。
确定一个变量,需要确定其3个要素:变量名、数据类型和变量值。命名约定:在VisualFoxPro系统中,将表示、存储数据的常量、变量、数组、字段、记录、对象、表、数据库等,都称为数据容器。所有数据容器均需命名以相互区别,为规范各类对象的命名,VisualFoxPro系统推荐若干“命名约定”供用户参考,以提高操作命令与程序的可读性和规范性。使用字母、下划线和数字命名。一般建议不采用汉字命名。命名以字母或下划线开头;除自由表中字段名、索引的TAG标识名最多只能有10个字符外,其他的命名可使用1~128个字符。避免使用VisualFoxPro的保留字。第51页/共117页①字段变量。在VisualFoxPro系统中,表由若干记录构成,每个记录包含若干数量相同的字段,而同一字段在不同记录中对应不同的值。所以字段是变量。字段变量与其他变量不同,是定义在表中的变量,随表的存取而存取,是永久性变量。字段变量的变量名即字段名,数据类型为VisualFoxPro系统中的任意数据类型,变量值即字段值。②内存变量。内存变量是用户在内存中定义的,用来存放程序运行的中间结果和最终结果,是进行数据的传递和运算的变量。有一种内存变量在全部程序、过程和自定义函数,以及它调用的程序、过程和自定义函数中都有效,这就是全局型内存变量。全局型内存变量使用Public定义,在后面的实例中会有它的应用。③系统变量。系统变量是VisualFoxPro系统特有的内存变量,由VisualFoxPro系统定义、维护。系统变量的变量名均以下划线“_”开始,如_WINDOWS、_CLIPTEXT等。因此在定义内存变量和数组变量名时,不要以下划线开始,以免与系统变量名冲突。系统变量设置、保存了很多系统的状态、特性,了解、熟悉并充分地运用系统变量,会给数据库系统的操作和管理带来很多方便,特别是开发应用程序时更为突出。
第52页/共117页a.变量的保存。VisualFoxPro提供相应命令,可用文件形式将某些变量保存起来,以便重复使用。格式:SAVETO<变量文件名>[ALLLIKE<通配符>|ALLEXCEPT<通配符>]功能:将指定变量的信息保存到指定的变量文件(*.MEM)中。
ALLLIKE<通配符>:只保存符合通配符条件的所有变量。
ALLEXCEPT<通配符>:只保存不符合通配符条件的所有变量。b.变量的恢复。需要保存在文件中的变量信息时,必须先恢复到内存后方可使用。格式:RESTOREFROM<变量文件名>[ADDITIVE]功能:将指定变量文件(*.MEM)中的变量信息恢复到内存中。ADDITIVE:省略此项,清除内存所有变量后再恢复文件中变量的信息;加选此项,将变量文件中的变量信息追加到内存现有变量信息中。c.变量的清除。VisualFoxPro系统对定义内存变量的数量是有限制的,应及时清理,尽量减少内存的占用,以定义其他变量。格式:RELEASE<变量表>RELEASEALL[LIKE<通配符>|EXCEPT<通配符>]第53页/共117页(2)分支结构。①简单的条件语句。格式:IF<条件表达式><命令序列>ENDIF说明:条件表达式可以是各种表达式的组合,其值必须是逻辑“真”或“假”。当条件表达式的值为“真”时,先执行IF与ENDIF间的语句,然后执行ENDIF后面的语句;当条件表达式的值为“假”时,直接执行ENDIF后面的语句。例1:从键盘输入一个数,若小于0,则显示“输入的是负数”。*liti1clearinput"输入一个数:"toxifx<0?"输入的是负数"endif第54页/共117页②带ELSE的条件语句。格式:IF<条件表达式><命令序列1>ELSE<命令序列2>ENDIF说明:当条件表达式的值为“真”时,先执行命令序列1,然后转去执行ENDIF后面的语句;当条件表达式的值为“假”时,先执行命令序列2,然后转去执行ENDIF后面的语句。例2:从键盘输入一个数,若小于0,显示“输入的是负数”;否则显示“输入的是非负数”。*liti2clearinput"输入一个数:"toxifx<0?"输入的是负数"else?"输入是的非负数"endif第55页/共117页③IF条件语句的嵌套。格式1:IF<条件1>IF<条件2><命令序列1>ELSE<命令序列2>ENDIFELSE<命令序列3>ENDIF当“条件1”为“真”,同时“条件2”为“真”时,执行“命令序列1”。当“条件1”为“真”,同时“条件2”为“假”时,执行“命令序列2”。当“条件1”为“假”,执行“命令序列3”。第56页/共117页格式2:IF<条件1><命令序列1>ELSEIF<条件2><命令序列2>ELSE<命令序列3>ENDIFENDIF当“条件1”为“真”,执行“命令序列1”。当“条件1”为“假”,同时“条件2”为“真”时,执行“命令序列2”。当“条件1”为“假”,同时“条件2”为“假”时,执行“命令序列3”。第57页/共117页例3:从键盘输入一个数,若小于0,显示“输入的是负数”;若等于0,显示“输入的是零”;若大于0,则显示“输入的是正数”。*liti3clearinput"输入一个数:"toxifx<0?"输入的是负数"elseifx=0?"输入的是零"else?"输入的是正数"endifendif实现过程与例2一样,都是在命令窗口中执行,只是新建的文件名要另起一个,以免重复,这里使用liti4作为文件名,读者也可以自己起一个名字。第58页/共117页④DOCASE条件语句的嵌套。DOCASECASE〈条件表达式1〉〈命令序列1〉CASE〈条件表达式2〉〈命令序列2〉...CASE〈条件表达式N〉〈命令序列N〉[OTHERWISE〈命令序列N+1〉]ENDCASE在执行DOCASE命令时,依次判断各条件,若<条件表达式>为.T.,就执行对应的<命令序列>,然后转去执行ENDCASE后面的语句。若<条件表达式>为.F.,不执行<命令序列>,继续判断下一个条件。若没有一个条件为T,则执行OTHERWISE后面的<命令序列>。若没有OTHERWISE语句,则不作任何操作就转去执行ENDCASE之后的语句。第59页/共117页例4:利用docase判断今天是星期几。*liti4input"输入一个1-7的数:"toxdocasecasex=1?"星期一"casex=2?"星期二"casex=3?"星期三"casex=4?"星期四"casex=5?"星期五"casex=6?"星期六"casex=7?"星期日"otherwise?"请输入要求输入的数字!!"endcase第60页/共117页(3)循环结构.①条件循环(“当”型循环控制语句)。a.语句格式:DOWHILE<条件表达式><命令序列>ENDDOb.执行过程:当执行到DOWHILE语句时,首先判断条件表达式的值是否为真,若为真则执行下面的命令序列,遇到ENDDO即返回到循环头,再检查条件是否为真,如果条件仍为真,则再执行<命令>序列;如此反复检查和执行,直到<条件表达式>的值为假,即退出循环,转去执行ENDDO后面的语句。c.说明。循环体:被重复执行的命令序列。DOWHILE与ENDDO必须配对使用。循环条件的改变、死循环、循环的退出。d.循环辅助语句格式:EXIT功能:用于终止本层循环,无条件转移到本层ENDDO后面的语句去执行。格式:LOOP功能:终止本次循环,返回到循环头,进行本层次的下一次循环。第61页/共117页例5:循环输出1+2+3+…+100的和。*liti5CLEAR &&清除屏幕显示信息S=0 &&设置变量S初始值为0,用于保存和N=1 &&设置变量N初始值为1,用于计数DOWHILEN<=100 &&当N<100时,执行DO和ENDDO之间的代码
S=S+N &&将S+N的值赋给SN=N+1 &&N的值增加1ENDDO?"S=",S实现过程与例2一样,都是在命令窗口中执行,只是新建的文件名要另起一个,免得重复,这里使用liti6作为文件名,读者也可以自己起一个名字。第62页/共117页②步长循环(“计数”型循环控制语句)。格式:FOR<内存变量>=<初值>TO<终值>[STEP<步长值>]<命令序列>ENDFOR功能:根据给定的次数重复执行命令序列,实现程序循环。说明:[STEP〈步长值〉]:<步长值>是循环控制变量递增或递减的步长。如果步长值为正,循环控制变量递增;如果步长值为负,则循环控制变量递减。如果缺省STEP子句,循环控制变量每次的增量为1。第63页/共117页例6:求1+2+3+…+99+100的值。*liti6s=0forx=1to100&&循环递增X的值,每次增长1s=s+xendfor?"s=",s实现过程与例2一样,都是在命令窗口中执行,只是新建的文件名要另起一个,免得重复,这里使用liti7作为文件名,读者也可以自己起一个名字。第64页/共117页5.4.2任务实现(1)在“项目”选项卡中,建立一个自定义表单,命名为“程序结果”,用来输出分支结构、循环结构和统计用户数量的结果,如图5-36所示。注:Label1为标签。图5-36程序运行及结果显示第65页/共117页(2)编写“分支结构”按钮的代码。a=5Ifa>3 &&如果a>3thisform.label1.caption="比3大" &&在标签上显示最终结果else &&如果a<=3thisform.label1.caption="比3小" &&在标签上显示最终结果endif &&判断结构结束说明:上面的代码首先为变量A赋值为5,然后通过与3进行比较,如果A>3,则在标签中显示比3小,否则显示比3大。上面的标签中,主要利用的就是caption属性,而按钮的事件就是Click事件,如图5-37所示。图5-37按钮事件选择第66页/共117页(3)编写“循环结构”按钮的代码。S=0N=1DOWHILEN<=100S=S+NN=N+1ENDDOTHISFORM.LABEL1.CAPTION=STR(S)&&LABEL1为在此表单上建立的一个标签的默认名称上面的代码还是利用命令按钮的click属性和标签的caption属性。这个命令按钮的作用就是求1+2+3+…+100的和,最终将结果显示到标签中。在代码中,str()需要注意一下,因为标签显示的是文本,而利用循环得出的值是数值型的,所以需要利用该函数将数值型数据转换为字符型。第67页/共117页(4)编写“统计用户数量”按钮的代码。USE用户 &&“用户”表是超市系统里的一个数据表N=0 &&设置变量N的初始值为0DOWHILE.NOT.EOF() &&当数据表没有到达文件尾时
Display &&显示记录
N=N+1 &&变量N+1SKIP &&转到下一条记录ENDDO &&跳回到dowhile语句THISFORM.LABEL1.CAPTION=STR(N)&&显示最后统计的结果第68页/共117页课后练习1.制作一个表单,添加一个按钮和标签,利用循环输出100以内的奇数和,代码加入到按钮的单击事件中,单击按钮后在标签上显示结果。[提示]利用modifycommand命令设计程序,利用do命令运行程序,程序名称自定义2.利用循环语句,输出数据库中交易表的某会员的交易信息。[提示]利用modifycommand命令设计程序,利用do命令运行程序,代码如下:clearuse供货商 &&“供货商”表是超市系统里的一个数据表dowhile.not.eof() &&当数据表没有到最后记录时
disp &&显示记录
skip &&转到下一条记录enddo &&跳回到dowhile语句use &&关闭此表3.利用循环显示“商品信息”表的最新10条数据。[提示]可以利用modifycommand命令设计程序和用do命令运行程序,也可以利用项目管理器设计程序并运行程序。第69页/共117页5.5任务四用户登录5.5.1相关知识1.数据环境的使用每一个使用表的表单都包括一个数据环境。数据环境是一个容器对象,它用来定义与表单相联系的数据实体(表、视图)的信息及其相互联系。数据环境容器一般包含一到多个Cursor类对象,表单中所含Cursor类对象的个数与表单关联的数据实体(表、视图)的个数相同,一个Cursor类对象与一个数据实体(表、视图)对应,如果一个表单关联多个表,在数据环境容器中还有一个Relation类对象描述这些表之间的关系。下面对数据环境容器及其可能包含的对象分别进行说明。
(1)游标(cursor)类对象(2)关系(Relation)类对象(3)数据环境设计器第70页/共117页2.Init事件对于表单集和其他容器对象来说,容器中对象的init事件在容器的init事件之前触发,因此容器的init事件可以访问容器中的对象。容器中对象的init事件的发生顺序与它们添加到容器中的顺序相同。如果不创建控制,可以在init事件中返回“假”(.F.),这时不触发Destroy事件。例如,下面的代码在Invoice表不存在时返回“假”(.F.)。第71页/共117页3.接受预先不能确定的输入该功能是一个软件必不可少的功能,举个例子来讲,用户在登录一个系统时,如果没有填写用户名和密码,直接单击登录,结果会怎么样?有两种结果:一种是进入到系统,这就是没有容错的结果,这就使得用户无须注册,进而使得注册功能失败和降低了系统的安全性和权限控制;第二种结果是提示用户输入用户名和密码,如果容错的好一些,还会限制用户输入次数,如果超过预定的次数,这个账号将被锁定。4.文本框创建一个文本框(Textbox),从中可以编辑变量、数组元素或字段的内容。所有标准的VisualFoxPro编辑功能,如剪切、复制和粘贴在文本框中都可用。使用输入掩码和Format属性,可以指定在文本框中如何输入和显示数值。例如,PasswordChar属性就可以设置成希望的任何掩码,如“*”。第72页/共117页5.组合框创建一个组合框(Combobox)后,当被选中时,组合框打开,并显示项的列表,从中可选择一项。组合框控件结合了文本框控件和列表框控件的特性。可在文本框部分输入信息或从列表框部分选择一项。通过在组合框控件中的一项前面加一个反斜杠(\),可以让该项失效。Style属性确定组合框的类型。若Style属性设为0,则创建一个下拉组合框;若Style属性设为2,则创建一个下拉列表框。6.命令按钮组前面已经提到过命令按钮,这里再讲解一下命令按钮组。使用CommandGroup控件可创建一组命令按钮,并且可以单个或作为一组操作其中的按钮。使用CommandButton控件可创建单个命令按钮。可使用ButtonCount属性指定组中的命令按钮数目,使用Caption属性指定命令按钮组的标签。第73页/共117页5.5.2任务实现(1)打开超市管理系统工程,新建一个窗体Login。(2)在窗体设计器中添加如图5-39所示的控件。图5-39用户登录表单第74页/共117页(3)添加数据环境:右键单击该表单,在弹出的快捷菜单中选择“数据环境”命令,将用户表添加到数据环境中,如图5-40所示。图5-40表单添加数据环境第75页/共117页(4)双击“确定”按钮,将会自动切换到代码编辑器,并添加以下代码:*-----------确定按钮代码------------select用户 &&选择"用户"表,当表单数据环境中只有一个表时可以省略locatfor用户名称=alltrim(thisform.text1.value) &&查找相关记录
iffound() &&如果查找到相关用户
iftrim(thisform.text2.value)=trim(用户密码) &&检验密码
releasethisform &&退出窗口
doform主窗体 &&打开主窗体
else &&密码错误
messagebox("密码有误,请确认以后重新输入",16,"错误")thisform.text1.value="" &&设置text1的值为空
thisform.text2.value="" &&设置text2的值为空
endifelse &&如果没有查找到该用户
messagebox("用户名有误,请确认以后重新输入",16,"错误")endif第76页/共117页(5)选择菜单“文件”→“保存”命令。(6)单击工具栏上的按钮或按^+E组合键即可运行窗体。注:代码说明:首先查找用户表的用户名称,是否有文本框中输入的值,如果找到则判断密码是否和输入的密码相符,相符合,则退出本表单,进入到主窗体,如果不相符则发出提示信息,将用户名和密码的文本框设置为空。如果没有查到该用户名,则发出提示信息。Alltrim():删除指定字符表达式的前后空格符,并且返回删除空格符后的字符串。Trim():返回删除全部后缀空格后的指定字符表达式。Messagebox():显示一个用户自定义对话框,其中16代表“停止”图标,依次是指定在对话框中显示的文本,对话框的高度和宽度根据cMessageText适当增大,以包含全部信息;指定对话框中的按钮和图标、显示对话框时的默认按钮及对话框的行为;指定对话框标题栏中的文本。
第77页/共117页课后练习制作一个表单如图5-41所示,当输入一种商品的编号后,核实数据库中是否存在该商品。利用文本框进行数据的输入,利用“查找结果”标签显示结果。[提示]查找结果为label,如果查找到则显示相关商品的名称;如果查不到相关商品,则显示“库中无此商品”。
第78页/共117页5.6任务五退出窗口5.6.1相关知识1.给定时间间隔执行指定操作计时器(Timer):提供计时功能,即每隔一段指定的时间就产生一次timer事件,用于控制某些进程。
图标就是计时器控件。
表5-4定时器属性设置属性作用interval计时间隔(单位为ms,即毫秒)。此属性值为0时,不产生timer事件enabled
控制计时器是否启动时间间隔一般不能太小,否则频繁产生timer事件会降低系统的效率。计时器不能自动直接实现定时中断,比如希望8点产生定时事件,应将8点时间与当前时间datetime()相减,换算成秒数后作为interval属性值。第79页/共117页2.计时器控件的初始化在使用了计时器以后,就要对它进行初始化设置,设置如图5-42所示。这里主要设置interval和enabled两个属性,具体解释如表5-4所示。3.对计时器事件的响应计时器常用的事件是timer事件,常用的方法是reset。在设计阶段,设置interval>0,enabled为.T.,则当表单启动时计时器便开始计时。若enabled为.F.,则计时器不启动,调用reset方法可使计时器重新从0开始计时。图5-42计时器属性[注]计时器控件在运行时是不可见的,所以在设计时可把它放置在表单的任意位置。
第80页/共117页4.CHR函数CHR函数,根据指定的ASCII数值代码返回其对应的字符。5.Time函数该函数主要是对时间进行操作,该类操作主要应用有:①在注册用户时,希望用户在一定时间范围内读取一些协议;②可以在某些页面进行时间的显示;③可以做一些退出的设置,如在退出某些系统时,为了避免某些错误操作,导致退出系统而尚未保存信息,可以用倒计时来提醒用户,这种方式也用到了一些大型的网络游戏,利用这种方式来存储人物数据。与日期相关的函数如表5-5所列。表5-5日期相关的函数函数名操作例结果DATE()求当前日期DATE()2001/11/12DATETIME()求当前日期和时间DATETIME()2001/11/12/0:22:33amYEAR(D)求年份YEAR(DATE())2001MONTH(D)求月份(数值)MONTH(DATETIME())11CMONTH(D)求月份字符)CMONTH(DATETIME())NovemberDAY(D)求日期DAY(DATE())12DOW(D)求星期几(数值)DOW(DATE())1CDOW(D)求星期几(英文)CDOW(DATE())sundayTIME(D)求当前时间TIME(DATE())10:20:38am第81页/共117页5.6.2任务实现:退出窗体在程序设计和软件开发中,经常需要设计计时器,如秒表、正计时器、倒计时器等。这些计时器的设计方法大同小异,本文以倒计时器设计为例介绍两种设计倒计时器的方法。VisualFoxPro中的计时器控件有一个Timer事件,每经过Interval(单位为毫秒)属性指定的时间就执行该事件一次。利用该控件的这一特点再配合一些程序,可设计各种计时器,包括倒计时器。本程序通过计时器控件和时间函数seconds()来设计倒计时器。seconds()函数可以以秒为单位返回自午夜以来经过的时间。在“开始”按钮的Click事件中加入代码:t0=seconds()。在计时器控件的Timer事件代码中加入:t1=seconds()、t2=10+t0、t3=t2-t1。t0为单击“开始”按钮时离午夜的时间,t1为计时器每次触发时距午夜的时间,t2为定时结束时距午夜的时间,t3为剩余时间。第82页/共117页(1)打开超市管理系统工程,新建立一个窗体退出系统。(2)在窗体设计器中添加如图5-43所示的控件。图5-43退出表单(3)程序清单如下。①表单Form1的Init事件代码:publict0 &&声明变量t0t0=seconds() &&设置t0为表单运行的当前时间thisform.timer1.enabled=.t.&&可以直接在属性中设置②标签Label1的属性Caption:退出系统③标签Label2的属性Caption:10秒钟第83页/共117页④计时器Timer1的属性Interval:500 &&时间间隔计时器Timer1的timer事件代码:t1=seconds() &&设置t1为表单运行后每次计时器响应的时间ift1-t0>=10 &&判断当前时间与表单运行时的时间差messagebox(″定时时间到!″)elsethisform.label5.caption=int(10-(t1-t0))endif⑤命令按钮Command1的属性Caption:退出命令按钮Command1的Click事件代码:Quit⑥命令按钮Command2的属性Caption:取消命令按钮Command2的Click事件代码:releasethisform说明:在上面的程序中,只是对倒计时的代码作一些修改,只要适当对上面的代码进行修改,就可以改变出很多的实用功能。第84页/共117页课后练习利用计时器制作一个表单,要求用户阅读注册协议,在30秒后才可以进行下一步操作。要求只有剩余时间为0时按钮才可以使用,如图5-44所示。图5‑44退出提示第85页/共117页5.7任务六商品信息浏览5.7.1相关知识
类是面向对象程序设计中非常重要的一个知识点,正是类的存在,使得面向对象程序设计变得丰富多彩。恰当地使用类不仅可以使程序更加美观,更可以减轻大量的重复性工作。利用向导实现表单可以很快速地生成数据表单。但这并不是万能的方法,对于一些有特殊功能的表单并不能完全利用这种方法来生成。在这种情况下必须手工生成表单,并对所生成的表单添加一些功能按钮和一些导航按钮。这些功能按钮和导航按钮可以用类的方式来生成。如果程序中并不涉及太多的代码的重用问题,也可以不用类的方法。第86页/共117页1.创建类在创建过程中,选择“类”,单击“新建文件”命令,弹出窗体,如图5-45所示。图5-45“新建类”对话框为新建类添加“类名”myc,选择“派生于”为CommandGroup,该选项是选择新建的类将继承于哪种类。在“存储于”中选择存储的位置,设置好相关目录,单击“确定”按钮。第87页/共117页2.将新属性添加到类在新建的类中添加4个按钮,做成导航菜单,如图5-46所示。
图5-46新建类3.在类中编辑方法编辑类中的命令按钮和编辑表单中的命令按钮是一样的,双击即可添加程序代码。4.将类添加到表单中建立完一个类后,可以重复使用,非常方便,就像使用自带的控件一样。使用时只要单击添加图标,选择“添加”命令,找到刚才新建的类,就可以使用了。第88页/共117页5.注册一个类库.从“工具”菜单中选择“选项”命令,在弹出的“选项”对话框中选择“控件”选项卡,选择“可视类库”并单击“添加”按钮,在“打开”对话框中选择要注册的类库并单击“打开”按钮,单击“确定”按钮。第89页/共117页5.7.2任务实现:类的实现(1)新建类。名称为myc,该类起数据导航的作用,4个命令按钮的名称分别是首记录、上一条、下一条和末记录。代码如下:首记录: GOTOP &&指针指到第一条记录THISFORM.Refresh &&刷新上一条:SKIP-1 &&指针指向上一条记录IFBOF() &&判断是否到达首记录
GOTOPENDIFTHISFORM.Refresh &&更新表单数据下一条:SKIP1 &指针指向下一条记录IFEOF() &&判断是否到达末记录
GOBOTTOM &&指向最后一条记录ENDIFTHISFORM.Refresh &&更新表单数据末记录:GOBOTTOMTHISFORM.Refresh第90页/共117页(2)新建一个表单“商品信息2”,右击表单,为表单添加数据环境,在数据环境中引入“商品信息”表,利用手工拖动的方式,把相关字段拖动到此表单中。并适当调整各控件的位置,在表单下留出空白,以便添加上面所生成的类。(3)添加上面所生成的类,通过生成器和类来实现浏览商品信息的功能,如图5-47所示。图5-47手工制作“商品信息”表单第91页/共117页4.添加组合框,调整表单界面的布局。最终效果如图5-48所示。图5-48为表单添加自定义类第92页/共117页(5)设置组合框,表单中的组合框主要起到浏览厂商和供货商信息的作用。这里以厂商编号为例。右击组合框combo1,在快捷菜单中选择“生成器”命令,设置如图5-49所示。图5-49为组合框设定字段第93页/共117页首先选择数据表,然后选择要显示的字段,单击“确定”按钮就可以实现要求的功能,还可以进行其他的设置:RowSourceType 设定为字段RowSource 设定为“供货商.供货商名称,供货商.供货商编号”ControlSource 设定为“商品信息.供货商编号”BoundTo 设定为.T.BoundColumn 设定为2组合框的最终效果如图5-50所示。图5-50组合框运行结果第94页/共117页课后练习利用前面制作的导航菜单,制作一个浏览会员基本信息的表单。效果如图5-51所示。图5-51会员信息浏览表单第95页/共117页5.8任务七表单的综合应用5.8.1相关知识1.在表单中添加表格表格(grid)是按行和列显示数据的容器对象,其外观与浏览窗口相似。表格是包含列对象的容器对象。列可以包含标头对象及控制。由于表格及其列、标头和控件都有各自的属性集,可以完全控制表格中的每一个元素。可以在表格生成器中交互地创建“表格”。图5-52表格的使用第96页/共117页2.设置表格列数在表格的属性中,ColumnCount属性,指定表格控件中列对象的数目。对于表格,该属性设计时可用,运行时可读写。对于表格控制,默认的属性设置为1。当ColumnCount属性设置为1时,则自动创建足够的列,以容纳数据源中的所有字段。对于表格,可使用AddColumn方法增加列的数目。3.在设计时人工调整表格的显示效果在设计表格时,开发人员可以利用AllowRowSizing属性指定能否人工调整表格中行的大小。4.设置表格中显示的数据源RecordSource指定与表格控件相绑定的数据源。设计时可用,运行时只读写。该属性指定与表格控制相绑定的主临时表。如果为一个网格指定了记录源,就可以通过设置ControlSource属性来指定网格中单独列的内容。如果没有为网格中的列设置ControlSource属性,那么列显示网格的记录源中下一个可用的不能显示的字段。第97页/共117页5.常用的表格属性Top:对于表单对象,确定表单的顶端边缘与VisualFoxPro主窗口的距离。Left:对于表单对象,确定表单的左边界与VisualFoxPro主窗口左边界之间的距离。Height:指定对象在屏幕上的高度。Width:指定对象的宽度。ColumnCount:指定表格控件中列对象的数目。LinkMaster:指定表格控件中子表所链接的父表。RecordSource:指定与表格控件相绑定的数据源。第98页/共117页6.编辑框在表单上用于接收输入文本或查看文本的控件。编辑框可以包含多行文本。编辑框控件可用来编辑字符类型的内存变量、数组元素、字段或备注字段。所有标准的VisualFoxPro编辑功能,如剪切、复制和粘贴,在编辑框中都可以使用。编辑框中的文本在垂直方向上可以滚动,在水平方向上可以自动换行。7.微调控件允许通过输入或单击上、下箭头按钮增加或减少数值的控件。8.组合框被选中时,组合框打开,并显示项的列表,从中可选择一项。组合框控件结合了文本框控件和列表框控件的特性。可在文本框部分输入信息或从列表框部分选择一项。第99页/共117页5.8.2任务实现一手工建立一对多表单本节手工建立一对多表单——供货商供货信息。首先建立一个表单,用来显示供货商供货情况,每显示一个供货商的编号,就自动显示该供货商所能提供的商品。该表单的制作需要在“供货商”表和“商品信息”表之间以供货商编号为关联条件建立关系。第100页/共117页步骤如下:(1)建立一个表单,名称为供货商供货信息。(2)在所建的表单上,右击选择“数据源”,添加供货商和生产商两个表,然后单击“关闭”按钮,接下来进行数据源的编辑,如图5-53所示。图5-53添加数据环境第101页/共117页(3)多个表建立关系:因为“商品信息”表中包含“供货商”表的主关键字“供货商编号”,因此这两个表可以建立起关系,建立关系的方法是:首先选择“供货商”表的供货商编号,然后拖拽到“商品信息”表的供货商编号上,注意拖拽的字段是在“字段”和“索引”之间的字段。具体效果如图5-54所示。图5-54建立表间关系第102页/共117页(4)利用拖拽数据环境内数据表的方式建立表单。首先,选中图5-54中“供货商”表中的供货商名称,拖拽到刚刚建立的表单上,同样,选择图5-54中“商品信息”中所需的多个字段,拖拽到表单中,自动形成表格,如图5-55所示,然后可以对表单的布局适当调整,制作一个适当的界面。图5-55界面美化第103页/共117页(5)添加导航的按钮。添加两个按钮,分别作为导航按钮的“上一条”和“下一条”,如图5-56所示。上一条:SKIP-1 &&指针指向上一条记录IFBOF() &&判断是否到达首记录
GOTOPENDIFTHISFORM.Refresh
下一条:SKIP1 &&指针指向下一条记录IFEOF() &&判断是否到达末记录
GOBOTTOM &&指针指向最后一条记录ENDIFTHISFORM.Refresh完成上面的表单之后,就可以通过导航按钮来浏览商品信息,实现这个表单的原理是当单击“下一条”按钮以后,实现一个查询,这个查询的where条件是查询供货商编号。图5-56添加导航按钮第104页/共117页5.8.3任务实现二:复杂表单设计(1)制作表单的效果如图5-57所示。goodnamegoodnumgoodpricegrid1text1text2第105页/共117页(2)编写按钮的程序代码如下:①确定按钮代码:gname=thisform.goodname.value &&将文本框的值赋给变量gnamegnum=val(thisform.goodnum.value) &&字符类型转为数字类型gprice=val(thisform.goodprice.value) saleDate=date()&&saleDate取得当前日期
insertinto销售(销售编号,商品编号,销售日期,销售数量,销售单额);values(deald,gname,date(),gnum,gprice) &&向数据表插入数据select*from销售intocursortempwhere销售编号=deald thisform.grid1.recordsource=null &&数据源为空
thisform.grid1.recordsourceType=1 &&数据源类型是查询
thisform.grid1.recordsource="temp" &&数据源为temp表的内容thisform.grid1.column1.header1.caption="发货号" &&表格第一列显示的标题
thisform.grid1.column2.header1.caption="商品编号" thisform.grid1.column3.header1.caption="销售日期" thisform.grid1.column4.header1.caption="销售数量" thisform.grid1.column5.header1.caption="价格"第106页/共117页 thisform.grid1.column2.header1.caption="商品编号" thisform.grid1.column3.header1.caption="销售日期" thisform.grid1.column4.header1.caption="销售数量" thisform.grid1.column5.header1.caption="价格" thisform.grid1.column1.width=85 &&设置表格第一列的宽度
thisform.grid1.column2.width=85 thisform.grid1.column3.width=85 thisform.grid1.column4.width=85 thisform.grid1.column5.width=85 thisform.grid1.refresh &&表格刷新
thisform.goodname.value="" &&设置goodname的值为空
thisform.goodnum.value="" thisform.goodprice.value="" thisform.goodname.setfocus②合计按钮代码:selectsum(销售数量*销售单额)astotalpfrom销售intocursortemp2;where销售编号=dealdthisform.label4.caption=str(totalp)&&标签label4的显示信息③找零按钮代码:thisform.text2.value=val(thisform.text1.value)-val(thisform.label4.caption)④结账退出按钮代码:messagebox("成功")thisform.releasedoform主窗体
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年6月福建省普通高中学业水平合格性考试化学试题(解析版)
- 西南林业大学《材料研究及分析方法》2022-2023学年第一学期期末试卷
- 西京学院《企业级应用开发》2023-2024学年期末试卷
- 高中化学:油脂
- 西京学院《电力系统分析实验》2022-2023学年期末试卷
- 人教版教育课件
- 西华师范大学《油画基础》2022-2023学年第一学期期末试卷
- 西华师范大学《宪法学》2021-2022学年期末试卷
- 西华师范大学《人体解剖生理学实验》2023-2024学年第一学期期末试卷
- 录制课件功能
- DB42T1319-2021绿色建筑设计与工程验收标准
- 市政给排水管道安装工程监理细则
- 结直肠的锯齿状病变及其肿瘤课件
- HR三支柱-人力资源转型与创新
- 《国家安全法》 详解课件
- 最新钠冷快堆中的结构材料课件
- 气切套管(金属)的护理操作考核评价标准
- 部编版小学语文六年级上册单元考点总结(全册)课件
- 海康威视内部培训教材1
- 小小银行家课件讲解学习共
- 五年级综合实践活动课件 模拟小法庭 全国通用
评论
0/150
提交评论