版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章数据库基础概述1.1.1数据处理的基本概念1.数据
数据是指存储在某种介质上用来记录客观事物的性质、形态和持征的符号,是对客观存在的实体的一种描述和记载。2.信息
信息是经过加工处理后获得的有用的数据,是对数据按一定的目的,采用一定的方法加工处理后的结果。3.数据处理
数据处理就是将原始数据转化为信息的过程。1.1.2数据处理的发展过程
1.人工管理阶段
计算机数据处理的人工管理阶段有以下缺点:(1)数据与程序不具有独立性。(2)数据存在大量的冗余。2.文件系统阶段
操作系统中的文件系统是专门管理外存数据的管理软件。计算机开始大量地用于数据处理工作。这时的数据处理,程序和数据可以分别存储为程序文件和数据文件,因而程序与数据不再是一体。计算机数据处理的文件系统阶段虽然比人工管理阶段有了很大的进步,但仍有以下缺点:(1)程序与数据相互依赖性。(2)数据的冗余大。(3)数据独立性差。3.数据库系统阶段
数据库系统管理数据的特点如下:(1)实现了数据共享、减少了数据冗余。(2)数据结构化。(3)提高了数据的独立性。(4)数据统一管理与控制。数据库技术1.2.1数据库所谓数据库是按照一定的组织方式,相互有关的数据的集合称为数据库(DataBase,简称DB)。1.2.2数据库管理系统
数据库管理系统(DataBaseManagementSystem,简称DBMS)是为数据库的建立、使用和维护而配置的软件。1.21.数据库管理系统的功能
(1)数据定义功能。(2)数据操作功能。(3)控制和管理功能。(4)数据字典。2.常用的数据库管理系统Oracle的功能比较强大,一般用于超大型管理系统软件的建立,现在的应用范围也已经比较广泛。1.2.3数据库系统1.计算机硬件系统
计算机硬件系统是指存储数据库和运行数据库系统的硬件资源,包括计算机运算器、控制器、存储器、输入设备、输出设备等。2.数据库存储在计算机外存储器上的若干设计合理、满足实际应用需要的数据库。3.数据库管理系统
数据库管理系统软件是计算机系统软件中的一种,帮助用户创建、维护和使用数据库,是数据库系统的核心。4.相关软件
相关软件包括操作系统、编译系统、应用开发工具软件和计算机网络软件等。5.人员人员包括数据库管理员和用户。数据描述与数据模型1.31.3.1数据描述
1.现实世界现实世界即客观存在的世界。现实世界中存在着各种各样的事物及事物之间的联系。2.信息世界
现实世界中的事物及事物之间的联系由人们的感官感知,经过人们的头脑分析、归纳、抽象,形成信息。1.3.2概念模型1.概念模型涉及的术语3.机器世界
信息世界中的信息经过抽象和组织,以数据形式存储在计算机中,形成了所谓的机器世界,机器世界又称数据世界。(1)实体和实体集(Entity,EntitySet)。(2)属性(Attribute)。(3)域(Domain)。
(4)实体型(EntityType)。
2.实体联系
实体内部的联系通常是指组成实体的各属性之间的联系,实体之间的联系通常是指不同实体集之间的联系。两个实体型之间的联系可以分为三类:(1)一对一联系(1:1):
实体集A中的一个实体至多与实体集B中的一个实体相对应,反之,实体集B中的一个实体至多与实体A中的一个实体相对应。(2)一对多联系(1:n):实体集A中的一个实体与实体集B中的多个实体相对应,而实体集B中的一个实体至多与实体A中的一个实体相对应。(3)多对多联系(m:n):实体集A中的每一个实体与实体集B中的多个实体相对应,并且实体集B中的每一个实体也与实体A中的多个实体相对应。3.建立实体联系模型教学管理系统的实体模型如图1-4所示。
1.3.3数据模型
1.层次模型利用树型结构表示实体及其之间联系的模型称为层次模型,该模型体现实体间的一对多联系。2.网状模型利用网状结构表示实体及其之间联系的模型称为网状模型,该模型体现实体间的多对多联系,具有很大的灵活性。3.关系模型利用二维表格表示实体及其之间联系的模型称为关系模型,该模型把实体的属性和联系都统一用二维表格描述,这样的一个二维表格称为一个关系。表1-1就是一个关系
关系模型结构简单,但描述能力强,还有严格的数学理论基础,因此基于关系模型的数据库是当今使用最为广泛的数据库。1.4关系数据库1.4.1关系的概念
1.字段(Field)关系中的一列称为一个字段,或称为一个属性。2.记录(Record)
关系中的一行称为一个记录,或称为一个元组。3.表(Table)
若干条记录的集合构成了表。表往往由两部分组成,一是表的结构(包含哪些字段),二是表中包含的一行行数据记录。4.关系数据库(RelationalDataBase)
关系数据库是由若干表组成的集合,即关系数据库中至少应有一个表。5.关键字(Key)
关系中为了确定一条记录,通常使用一种称之为关键字的术语来描述,即一个关系中的某一字段或字段的组合,若它的值能唯一地标识了一条记录,则称该字段或字段的组合为关键字。6.主关键字(PrimaryKey)
若一个关系有多个关键字,若选定其中的一个作为当前标识记录的依据,则该关键字为主关键字。7.外部关键字(ForeignKey)若某个字段不是本表的主关键字,但它却是另外一个表的主关键字,则称这样的字段为表的外部关键字。1.4.2关系的性质
在关系模型中,以二维表表示的关系有如下的性质:(1)每一个列不能再分,即表中不能包含表。见表1-6所示的工资表不是关系。(2)列是同质的,即每一列是同一类型的数据,来自同一个域。(3)同一个关系中,不能有相同的字段名。(4)同一个关系中,不能有内容完全相同的行。(5)行或列的次序可以任意交换,不影响关系的实际含义。1.4.3关系的运算
1.选择(Select)
选择是指从一个关系中选出满足给定条件记录的操作,选择是从记录的角度进行的运算,选出满足条件的那些记录构成原关系中的一个子集。2.投影(Project)
投影是指从一个关系中选择若干字段(属性)组成新的关系,投影是从字段的角度进行的运算,所得到的字段个数通常比原关系中的字段少。3.连接(Join)
连接是指把两个关系中的记录按一定条件横向结合,生成一个新的关系。最常用的连接运算是自然连接,它是利用两个关系中的公共字段,把该字段相等的记录连接起来。1.4.4关系的完整性
1.域完整性
域完整性是指字段的取值应满足相应的条件。2.实体完整性
实体完整性是指表的主关键字的值必须是唯一的,且不允许取空值。3.参照完整性
现实世界中实体之间往往存在某种联系。4.用户自定义完整性用户定义的完整性是针对某一具体数据库的约束条件,由应用环境决定。通常用户定义的完整性主要包括以下几个方法:(1)字段有效性约束。(2)记录有效性约束。(3)表约束。4.用户自定义完整性
练习一见书第2章
VisualFoxPro6.0开发环境VisualFoxPro6.0简介2.12.1.1FoxPro发展过程1986年,Fox公司推出了与dBASEIIIplus全兼容的FoxBASE1.0,特别是随后推出的FoxBASE+2.1版本,其功能和性能都大大提高,给微机关系数据库产品带来了巨大影响;1989年Fox公司又推出FoxPro1.0。2.1.2VisualFoxPro6.0的功能
1.数据定义功能
2.数据操纵功能
通过VisualFoxPro6.0中数据库设计器,用户可以方便地定义自己的数据库,可以在数据库中添加、移去、修改数据表,建立数据表之间的联系。利用VisualFoxPro6.0提供的命令和菜单等,用户可以方便地操纵数据表中的数据,如添加、删除、修改、查询、统计等。3.数据控制功能
4.程序编辑、运行与调试功能5.界面设计功能
VisualFoxPro6.0能够自动检查数据表的完整性,以保证数据的正确性、有效性和相容性,同时还能控制多用户的并发操作。通过VisualFoxPro6.0提供的命令,用户可以方便地建立和运行自己的程序,如果程序中有错误,系统还提供了调试功能,帮助用户排除程序中的错误。利用VisualFoxPro6.0的表单设计器,用户可以快速、方便地建立漂亮实用的用户界面,大大提高开发速度。2.1.3VisualFoxPro6.0的特点
1.强大的查询与管理功能
VisualFoxPro6.0除了把数据库和表的概念严格区分之外,还引入了视图等概念。3.扩大了对SQL语言的支持SQL语言是关系数据库的标准语言,其查询语句不仅功能强大,而且使用灵活。2.全新的数据库表概念VisualFoxPro6.0除了把数据库和表的概念严格区分之外,还引入了视图等概念。4.丰富的可视化辅助工具VisualFoxPro6.0提供了向导(wizard)、设计器(designer)、生成器(builder)等可视化辅助工具,大大方便了用户的使用。
5.支持面向对象的程序设计VisualFoxPro6.0除了继续支持传统的结构化程序设计外,还支持面向对象程序设计,加快软件开发的过程,提高软件开发的质量。6.支持网络应用VisualFoxPro6.0既可以开发单机环境的数据库应用系统,又可以开发网络环境的数据库应用系统。
VisualFoxPro6.0的使用2.22.2.1VisualFoxPro6.0的启动
正确安装了VisualFoxPro6.0后,在Windows桌面“开始”菜单的“程序”选项中自动建立一个“MicrosoftVisualFoxPro6.0”程序组,在该组中有一个“MicrosoftVisualFoxPro6.0”命令,执行该命令就可启动VisualFoxPro6.0。
图2-1VisualFoxPro6.0用户界面2.2.2VisualFoxPro6.0的界面
图2-1所示的VisualFoxPro6.0用户界面是一个标准的Windows应用程序窗口,包括标题栏、菜单栏、工具栏、窗口工作区、命令窗口和状态栏。1.标题栏
标题栏位于窗口的顶部,有一个标题“MicrosoftVisualFoxPro”,标题栏的右边是最小化、最大化和关闭按钮。2.菜单栏
菜单栏位于标题栏的下面,有“文件”、“编辑”、“显示”、“格式”、“工具”、“程序”、“窗口”和“帮助”等菜单项。3.工具栏工具栏位于菜单栏的下面,以命令按钮的形式给出了常用的命令。当用户将鼠标指针停留在工具栏中的某个命令按钮上时,屏幕上将弹出一个文本框,显示该命令按钮的名字。图2-2“工具栏”对话框图2-3快捷菜单4.窗口工作区窗口工作区位于“常用”工具栏的下面,又称主窗口,用于显示命令或程序的执行结果。5.命令窗口命令窗口位于主窗口内,其主要作用是输入和显示命令。6.状态栏状态栏位于主窗口的底部,用来显示系统的当前状态(如打开的数据表名、记录数等),用户选择菜单命令,或鼠标移动到工具按钮上时,在状态栏内给出相应的命令提示。2.2.3VisualFoxPro6.0的操作方式
VisualFoxPro6.0支持两种工作方式:交互操作方式和程序执行方式。1.交互操作方式
(1)命令方式。命令方式是指用户在命令窗口中输入或选择一条命令,并按回车键,系统立即执行该命令,若有显示结果则在窗口工作区中显示,如图2-4所示。图2-4命令执行方式(2)可视化操作方式。可视化操作主要包括菜单操作、设计器、向导、生成器等工具类操作。可视化操作方式实际上是执行了相应的菜单命令或打开了系统提供的辅助工具后(如向导、设计器等),系统会弹出一个可视化的界面,通过对界面的操作完成某些要求。2.程序执行方式
程序执行方式是用户先建立程序,然后再运行该程序,步骤如下:(1)通过“MODIFYCOMMANDMAIN.PRG”命令,建立一个程序文件MAIN.PRG。(2)通过“DOMAIN.PRG”命令,运行MAIN.PRG程序。2.2.4VisualFoxPro6.0的退出
一般地,退出VisualFoxPro6.0的常用方法有以下三种:(1)单击窗口右上角的关闭按钮;(2)在命令窗口中键入命令“QUIT”,按回车键;(3)执行“文件”菜单中的“退出”命令。VisualFoxPro6.0的辅助工具2.32.3.1向导
向导是一种快捷设计工具,它通过一系列对话框向用户提示每一步操作,引导用户选择所需要的选项,回答系统提出的询问,一步步地完成某项任务。VisualFoxPro6.0提供了20多个向导,若干工作都可使用相应的向导来完成。表2-1列出了VisualFoxPro6.0常用向导的名称以及功能。2.3.2设计器
每种设计器有一个或多个工具栏,使用这些工具栏可以很方便地完成设计任务。例如“数据库设计器”就有“数据库设计器”工具栏,如图2-6所示。设计器在VisualFoxPro6.0中的应用非常广泛,许多工作需要靠设计器来完成。表2-2列出了VisualFoxPro6.0常用设计器的名称以及功能。图2-6数据库设计器2.3.3生成器图2-7是编辑框生成器。图2-7数据库设计器VisualFoxPro6.0提供了若干生成器,表2-3列出了VisualFoxPro6.0常用生成器的名称以及功能。
VisualFoxPro6.0的系统设置2.42.4.1设置工作目录
(1)执行“工具”菜单中的“选项”命令,弹出“选项”对话框,在对话框中选择“文件位置”选项卡,结果如图2-8所示。(2)在“文件位置”选项卡中,选中“默认目录”项,然后单击“修改”按钮,系统弹出“更改文件位置”对话框,在其中输入自己的工作目录“d:\\人事档案管理系统”,或者单击对话框按钮,从弹出的“选定目录”对话框中选择需要的工作目录,并选中“使用默认目录”复选框,如图2-9所示。(3)在“更改文件位置”对话框中,设定完默认的目录后,单击“确定”按钮,系统返回“文件位置”选项卡。(4)在“文件位置”选项卡中依次单击“设置为默认值”按钮和“确定”按钮,默认工作目录设置完成。
在最后一步中,如果不单击“设置为默认值”按钮,这种设置为临时设置,即再次启动VisualFoxPro6.0后,这些设置不起作用。图2-8数据库设计器图2-9数据库设计器2.4.2设置日期格式(1)单击“选项”对话框中的“区域”选项卡,打开“日期格式”下拉列表框,如图2-10所示。(2)单击“日期格式”下拉列表中的“ANSI”选项,“日期格式”下拉列表框右侧的文字框中效果为“98.11.2305:45:35PM”。(3)选中“年份”复选框,年份显示4位。(4)在“区域”选项卡中依次单击“设置为默认值”按钮和“确定”按钮,日期格式设置完成。图2-10数据库设计器2.4.3设置字符比较方式
(1)单击“选项”对话框中的“数据”选项卡,如图2-11所示。
图2-11数据库设计器(2)从“排序序列“下拉列表框中选择所需要的字符比较方式。如果选择“PinYin”,进行比较时,汉字按照拼音顺序比较大小,字符的大小顺序为:’’<’0’<’9’<’a’<’z’<’A’<’Z’;如果选择“Machine”,进行比较时,汉字和字符按照其存储的机器码的大小进行比较,其中字符的大小顺序为:’’<’0’<’9’<’A’<’Z’<’a’<’z’。(3)如果选择了“SETNEARon”复选框(对应于“SETNEARON”命令),当FIND或SEEK命令查找不到记录时,系统将记录指针定位在匹配程度最大的记录上。如果清除了“SETNEARon”复选框(对应于“SETNEAROFF”命令),当FIND或SEEK命令查找不到记录时,记录指针定位在文件尾,即查找失败。(4)如果选择了“SETEXACTon”复选框(对应于“SETEXACTON”命令),两个字符串用等号(=)进行比较时,只有它们完全相同结果才为真,即相当于(==)比较,如“123”=“12”为假。如果清除了“SETEXACTon”复选框(对应于“SETEXACTOFF”命令),两个字符串用等号(=)进行比较时,只要等号右侧的字符串是等号左侧字符串的头部(或全部),比较结果就为真,如“123”=“12”为真。(5)如果选择了“SETANSIon”复选框(对应于“SETANSION”命令),用SQL的=操作符比较字符串时,用空格填充短的字符串,使两个字符串长度相等,然后比较,如“123”=“12”结果为假。如果清除了“SETANSIon”复选框(对应于“SETANSIOFF”命令),用SQL的=操作符比较字符串时,比较到短字符串结束为止,如“123”=“12”结果为真,“12”=“123”的结果也为真。(6)在“数据”选项卡中依次单击“设置为默认值”按钮和“确定”按钮,字符串比较方式设置完成。项目管理器2.52.5.1创建和打开项目
1.创建项目
(1)执行VisualFoxPro系统“文件”菜单下的“新建”命令,则会出现选择新建文件类型的“新建”窗口。(2)在“新建”窗口中,单击“项目”选项,然后单击“新建文件”按钮,则弹出“创建”对话框窗口,如图2-12所示。
(3)在“创建”对话框窗口的“项目文件”文本框中输入项目文件名,例如“学生信息管理”,然后单击“保存”按钮,则打开“项目管理器”窗口,如图2-13所示。图2-12“创建”对话框图2-13“项目管理器”窗口2.打开项目
(1)执行系统“文件”菜单下的“打开”命令,则会出现选择打开文件类型和指定打开文件的“打开”窗口,如图2-14所示。(2)在“打开”窗口中的“文件类型”列表中单击其右侧的按钮,选择“项目”,从“搜寻”列表中选择项目文件的保存位置,最后在文件列表中单击选定项目文件。(3)最后,单击“确定”按钮,即可打开“项目管理器”窗口,打开选定的项目文件。
图2-14“打开”对话框窗口2.5.2项目管理器窗口
“项目管理器”是VisualFoxPro系统提供的数据库应用程序开发的平台,如图2-15所示,提供了6个选项卡。图2-15“数据”选项卡(1)“数据”选项卡。“数据”选项卡主要用于组织和管理项目中包含的所有数据,如数据库、数据表和查询等。(2)“文档”选项卡。“文档”选项卡中包含了用于数据处理所涉及的3种类型的文件:表单、报表和标签,如图2-16所示。(3)“类”选项卡。一般情况下,通过VisualFoxPro的基类就可以创建一个可靠的面向对象的事件驱动程序。若为了实现特殊功能而创建了新类,则可在项目管理器中修改。方法是在“类”图2-16“文档”选项卡(4)“代码”选项卡。“代码”选项卡中包含了用于管理数据库应用系统的程序文件(.PRG)、API库和应用程序文件,如图2-17所示。选项卡中选择要修改的类,然后单击“修改”按钮即可打开系统提供的“类设计器”。图2-17“代码”选项卡(5)“其他”选项卡。“其他”选项卡主要用于应用程序中其他文件的管理,包括文本文件、菜单文件、位图文件和图标文件等。(6)“全部”选项卡。“全部”选项卡集中了上述所有类型的文件,用于对应用系统所涉及的全部文件进行管理。
2.5.3项目管理1.新建文件
(1)打开“教务管理.PJX”项目文件,在“项目管理器”窗口中选择“数据”选项卡,单击列表框中“数据库”选项前的“+”号展开数据库列表,如图2-18所示。图2-18数据库列表(2)单击“表”,选择新建的文件类型,然后单击“新建”按钮,将会出现“新建表”对话框,单击“新建文件”按钮,即可启动系统提供的“表设计器”,进入新表的设计过程。2.添加文件
(1)首先在项目管理器中选定需要添加的文件类型。例如,若要添加一个数据库至项目文件中,则应在项目管理器的“数据”选项卡中选择数据库。(2)单击“添加”按钮,则系统会弹出“打开”对话框,然后在“打开”对话框中选择要添加的文件。(3)最后,单击“确定”按钮,系统便将选择的文件添加到项目中。3.修改文件
利用项目管理器可以随时修改项目文件中的指定文件,具体的操作步骤如下:(1)在项目管理器中打开项目,选择需要修改的文件。例如,“教学管理.DBC”数据库中的表Student.dbf。(2)单击“修改”按钮,系统将根据要修改的文件类型打开相应的设计器。图2-19是为修改表而打开的是“表设计器”窗口。图2-19“表设计器”窗口4.移去文件
项目中所包含的文件往往是项目中需要的,若不需要项目中的某一个文件,可及时将其从项目中移去,以保证项目的整洁。具体的操作过程如下:(1)首先在项目管理器中选择项目中需要移去的文件。(2)单击“移取”按钮,则系统将出现如图2-20所示的提示框。图2-20“移去”提示框(3)若单击“移去”按钮,则系统仅仅从项目中移去所选择的文件,但移去的文件仍存在于原目录中。若单击“删除”按钮,系统不仅从项目中移去所选文件,还将其从磁盘中删除。5.连编应用程序
连编是将数据库应用系统的全部程序和文件连接并编译在一起,这是大多数程序设计者都要进行的工作。若需要在项目管理器中连编窗口中的项目,生成相应的“.EXE”文件,其操作步骤如下:(1)打开项目,在项目管理器中选择主程序,单击“连编”按钮,打开如图2-21所示的“连编选项”对话框。图2-21“连编选项”对话框(2)在“连编选项”对话框中选择“连编可执行文件”选项,最后单击“确定”按钮即可。6.其他操作在“项目管理器”的右侧,除了上面介绍的“新建”、“添加”、“修改”、“移去”及“连编”按钮之外,随着所选文件类型的不同,按钮所显示的名称将随之发生改变练习二见书第3章数据及数据运算3.1
数据类型、常量、变量与数组3.1.1数据类型
1.字符型(C型)
字符型由字母、数字、字符、空格、符号和汉字构成,通常表示用于显示或打印的信息,如学生的姓名,家庭地址等。2.数值型(N型)
数值型由数字0~9以及小数点、正负号和E组成。长度不超过20个字节,其中负号和小数点各占一位。3.逻辑型(L型)逻辑型只有两个数据值:逻辑真(.T.)和逻辑假(.F.),多用于表示逻辑判断结果。4.日期型(D型)存储日期型数据,其存储格式为“YYYYMMDD”,占8个字节。5.日期时间型(T型)日期时间型既包含日期又包含时间的数据,由年、月、日、时、分、秒组成,存储时占用8个字节。6.货币型(Y型)货币型数据表示货币金额,小数位固定为4位,若超过4位,系统会自动对其进行舍入处理。7.备注型(M型)备注型数据用来存放简历、注释等不定长的内容。8.通用型(G型)通用型数据用于存储OLE对象,固定宽度为4个字节。9.整数型(I型)整型用于对整数的表示,仅适用于字段的定义。10.双精度型(B型)
与一般的数值类型相比,双精度型提供了更高的数值精度,用于对数值精度要求较高的场合,存储位数固定(16位有效数字),但只用于字段的定义,双精度型数据存储时占用8个字节。11.浮点型(F型)浮点型与数值型是完全等价的,主要是为了和不同版本的FoxPro兼容所设。3.1.2常量
1.数值型常量
由整数、小数或科学记数法表示的数都是数值型常量,例如100、-88、3.14159、1.23E6、2.34E-4等。2.字符型常量
字符型常量是用定界符括起来的字符串。3.逻辑型常量逻辑型常量只有两个值:真和假。4.日期型常量日期型常量表示日期,默认格式是:{^yyyy-mm-dd}或{^yyyy/mm/dd},其中{}、^、-(或/)为西文半角字符。5.日期时间型常量表示既有日期又有时间的日期时间类型数据,默认格式是为{^yyyy-mm-dd\[,\]\[hh\[:mm\[:ss\]\]\[a|p|am|pm\]\]}或{^yyyy/mm/dd\[,\]\[hh\[:mm\[:ss\]\]\[a|p|am|pm\]\]}。6.货币型常量
货币型常量以$开头,后面是整数或小数,但不能是用科学计数法表示的数,小数部分如果超过4位,则四舍五入取4位小数。3.1.3变量1.字段变量字段变量是指数据表中已定义的任意一个字段。2.内存变量内存变量用于保存程序执行过程中的中间结果与最终结果,或用于保存对数据库进行某种分析处理后的结果。3.系统变量系统变量是VisualFoxPro自动定义生成和维护的变量。3.1.4数组
1.数组的定义数组必须先定义后使用,定义数组的命令格式是:【格式1】DECLARE<数组名1>(下标1\[,下标2\])\[,<数组名2>(下标1\[,下标2\])……\]【格式2】DIMENSION<数组名1>(下标1\[,下标2\])\[,<数组名2>(下标1\[,下标2\])……\]【功能】定义一个或多个一维或二维数组。【说明】①数组名的命名规则与简单内存变量一样,但应注意不要与已经存在的简单内存变量重名。②下标为数值表达式,用来确定数组中元素的数目。引用数组元素时,数组的下标从1开始。③数组名后面的括号既可以用圆括号“()”,也可以用方括号“\[\]”2.数组的赋值数组被定义了以后,系统为每一个数组元素赋了一个初值.F.。若要改变数组元素的值,可以使用赋值命令。给数组赋值的赋值命令与简单变量类似。【格式1】STORE<表达式>TO数组名【功能】给整个数组赋同一个表达式的值。
【例】DECLAREA(5)STORE5TOA&&将5赋给数组A中的每个元素【格式2】数组名(下标1\[,下标2\])=表达式【功能】给指定数组元素赋值。【说明】在VisualFoxPro6.0中,一个数组中的数据不必是同一种数据类型【例】DECLAREB(2)B(1)=201&&B(1)的类型为数值型B(2)=张三”&&B(2)的类型为字符型
运算符与表达式3.23.2.1运算符1.算术运算符
算术运算符用于处理数值型数据,运算结果仍为数值型。表3-1给出了算术运算符及其优先级。
若计算中包含有多个算术运算符时,运算规则是:先乘方,后乘除,再加减;同一级别从左到右依次运算;如果有括号“()”,先计算括号内,后计算括号外。
2.字符运算符字符运算符用于对字符型数据进行处理,运算结果为字符型或逻辑型。字符运算符只有3个:“+”、“-”和“$”,如表3-2所示。3.日期时间运算符日期时间运算符对日期和日期时间型数据进行处理,日期(或日期时间)型数据加减一个整数,结果仍为日期(或日期时间)型,两个日期(或日期时间)型数据相减,结果为整数,如表3-3所示。4.关系运算符关系运算符主要用来对两个同类型数据进行比较运算,运算结果为逻辑型,如表3-4所示。关系运算符的有关注意事项如下:①关系运算符左右两端的数据必须是相同类型的数据,否则将导致语法错误。②数值型数据按其数值大小进行比较。③字符型数据的大小由字符比较方式(详见第2.4.3节)决定。④日期、日期时间型数据的大小是:日期早的其值小,日期晚的其值大。
5.逻辑运算符逻辑运算符用于进行逻辑型数据的处理,运算结果仍为逻辑型,表3-5给出了逻辑运算符及优先级。表3-6给出了各种逻辑运算的规则。3.2.2表达式
所谓的表达式是指用VisualFoxPro运算符将若干运算量(常量、变量、数组元素、函数、字段名等)连接起来的“合法”的式子。3.3常用内部函数3.3.1数值处理函数
1.平方根函数SQRT()【格式】SQRT(<数值表达式>)【功能】首先计算数值表达式的值,然后求平方根并将其作为函数的返回值。【说明】表达式的值必须为正数。【例】?SQRT(24-8)&&显示结果为:4.002.取对值函数ABS()
【格式】ABS(<数值表达式>)【功能】计算数值表达式的值并返回数值表达式的绝对值。【例】A=10B=30?ABS(2*A-B)&&显示结果为:103.取整函数INT【格式】INT(<数值表达式>)【功能】计算数值表达式并返回数值表达式值的整数部分。【例】?INT(28.48*2)&&显示结果为:56?INT(-56.98)&&显示结果为:-564.四舍五入函数ROUND()【格式】ROUND(<数值表达式>,<小数位数>)【功能】按指定的小数位数对<数值表达式>的值进行四舍五入处理。【说明】返回指定的<数值表达式>在指定位置四舍五入后的结果。<小数位数>指定四舍五入的位置。若<小数位数>大于等于0,那么它表示的是要保留的小数位数;若<小数位数>小于0,那么它表示的是整数部分的舍入位数。【例】?ROUND(1234.8654,2)&&显示结果为:1234.87?ROUND(1234.8654,0)&&显示结果为:1235?ROUND(1234.8654,-2)&&显示结果为:12005.取余函数MOD()【格式】MOD(<数值表达式1>,<数值表达式2>)【功能】返回两个数相除后的余数。【说明】<数值表达式1>是被除数,<数值表达式2>是除数。余数的正负号与除数相同。若被除数与除数同号,则函数值即为两个数相除的余数;若被除数与除数异号,则函数值即为两个数相除的余数再加上除数的值。【例】?MOD(3*4,7)&&显示结果为:5?MOD(7,-2)&&显示结果为:-1
6.圆周率函数PI()【格式】PI()【功能】返回圆周率π的值(数值型)。【例】计算半径为2的圆面积:?2**2*PI()&&显示结果为:12.5664?2^2*3.14&&显示结果为:12.567.最大值函数MAX()【格式】MAX(表达式1,表达式2,…,表达式n)【功能】计算各表达式的值,并返回其中的最大值。【说明】表达式1、表达式2、…类型可以是数值型(N)、日期型(D)或字符型(C),但所有表达式的类型必须相同。
【例】?MAX(12,45,76,3)&&显示结果为:76?MAX({^1999/12/01},{^1998/12/01}&&显示结果为:12/01/99?MAX(,,a,z)&&显示结果为:z8.最小值函数MIN()【格式】MIN(表达式1,表达式2,…,表达式N)【功能】计算各表达式的值,并且返回表达式中的最小值。【说明】表达式1、表达式2、…类型可以是数值型(N)、日期型(D)或字符型(C),但所有表达式的类型必须相同。【例】?MIN(12,45,76,3)&&显示结果为:3?MIN({^1999/12/01},{^1998/12/01})&&显示结果为:12/01/98?MIN(,,a,z)&&显示结果为:13.3.2字符处理函数
1.子字符串查找函数AT|ATC()【格式】AT|ATC(<字符表达式1>,<字符表达式2>\[,<数值表达式>\])【功能】返回<字符表达式1>在<字符表达式2>中第<数值表达式>次出现的位置。【说明】①若<字符表达式1>是<字符表达式2>的子串,则返回<字符表达式1>中的首字符在<字符表达式2>中的位置。②ATC与AT的功能类似,区别在于ATC函数不区分字母的大小写,返回值亦为数值型。③<数值表达式>指定<字符表达式1>在<字符表达式2>中第几次出现。缺省<数值表达式>时,系统默认为1。④若在<字符表达式2>中未找到<字符表达式1>,则函数返回0。【例】?AT(“as”,“Assoonaspossible”)&&显示结果为:9?AT(“青大”,“青岛大学商学院”)&&显示结果为:0?AT(“s”,“Assoonaspossible”,2)&&显示结果为:4?AT(“学”,“青岛大学商学院”,2)&&显示结果为:11?ATC(“as”,“Assoonaspossible”,2)&&显示结果为:12.字符串长度测试函数LEN()
【格式】LEN(<字符表达式>)【功能】返回字符表达式的长度值,即所包含的字符个数(字节数),函数的返回值为数值型。【例】?LEN(“VisualFoxPro6.0”)&&显示结果为:17?LEN(“青岛大学”)&&显示结果为:8注意:一个汉字占两个字节,字符串中的一个空格亦占一个字节3.截取子字符串函数SUBSTR()【格式】SUBSTR(<字符表达式>,<数值表达式1>\[,<数值表达式2>\])【功能】从<字符表达式>中的<数值表达式1>位置开始取出<数值表达式2>个字符,函数的返回值为字符型数据,即子字符串。【说明】如果缺省<数值表达式2>,则返回从<数值表达式1>位置开始到<字符表达式>最后的所有字符。【例】?SUBSTR(“青岛大学”,3,2)&&显示结果为:岛?SUBSTR(“Qingdao”,3,2)&&显示结果为:ng?SUBSTR(“青岛大学”,5)&&显示结果为:大学4.左取或右取子字符串函数LEFT()|RIGHT()【格式】LEFT|RIGHT(<字符表达式>,<数值表达式>)【功能】从<字符表达式>最左边或最右边开始取出含有<数值表达式>指定字符个数的子字符串。【说明】①参数<数值表达式>以字节为单位,函数返回值为字符型数据。②若<数值表达式>的值大于<字符表达式>的长度,返回<字符表达式>;若<数值表达式>的值≤0,则返回空字符串。【例】?LEFT(“青岛大学”,2)&&显示结果为:青?LEFT(“Qingdao”,2)&&显示结果为:Qi?RIGHT(“青岛大学”,2)&&显示结果为:学?RIGHT(“Qingdao”,2)&&显示结果为:ao5.删除前导和尾随空格函数【格式】LTRIM|RTRIM|TRIM(<字符表达式>)【功能】LTRIM删除<字符表达式>的前导空格,返回值仍为字符型;RTRIM|TRIM删除<字符表达式>的尾部空格,返回值仍为字符型。【例】?“1”+LTRIM(“2”)+“3”&&显示结果为:123?“1”+RTRIM(“2”)+“3”&&显示结果为:1236.删除前导和尾随空格ALLTRIM()【格式】ALLTRIM(<字符表达式>)【功能】删除<字符表达式>的前导和尾部空格。【例】?“1”+ALLTRIM(“2”)+“3”&&显示结果为:1237.产生空格字符串函数SPACE()【格式】SPACE(<数值表达式>)【功能】返回包含<数值表达式>个空格的字符串。【例】?“1”+SPACE(2)+“3”&&显示结果为:138.大小写转换函数UPPER|LOWER()【格式】UPPER|LOWER(<字符表达式>)【功能】UPPER将<字符表达式>中的小写字母转换为大写字母,LOWER将<字符表达式>中的大写字母转换为小写字母。【例】?UPPER(“Visual”)&&显示结果为:VISUAL?LOWER(FoxPro)&&显示结果为:foxpro3.3.3日期及日期时间函数
1.获取系统当前日期函数【格式】DATE()【功能】返回系统当前日期,函数值为日期型。2.获取系统当前时间函数【格式】TIME()【功能】返回当前系统时间(24小时制),函数值为字符型。3.获取系统当前日期时间函数【格式】DATETIME()【功能】返回系统当前日期和时间,函数值为日期时间型?4.获取年号函数【格式】YEAR(<日期表达式>|<日期时间表达式>)【功能】返回<日期表达式>或<日期时间表达式>中的年份值,函数值为数值型。【例】?MONTH({^1999-02-12})&&显示结果为:26.获取日号函数【格式】DAY(<日期表达式>|<日期时间表达式>)【功能】返回<日期表达式>或<日期时间表达式>中的日号,函数值为数值型。【例】?DAY({^1999-02-12})&&显示结果为:123.3.4数据类型转换函数
1.字符转换为数值函数VAL()【格式】VAL(<字符表达式>)【功能】将<字符表达式>转换为数值型数据。【说明】①VAL函数按从左到右的顺序处理字符表达式,直到遇到一个非数值字符(不包括科学计数法指示符E)。②如果<字符表达式>中的第一个字符不是数字,VAL函数将返回数值0。【例】?VAL(“3.1415926PI36”)&&显示结果为:3.14?VAL(“3.1415926e36”)&&显示结果为:3.14159260E+36?VAL(“a36”)&&显示结果为:0.002.数值转换为字符
【格式】STR(<数值表达式1>\[,<数值表达式2>\]\[,<数值表达式3>\]))【功能】把<数值表达式1>的值转换为字符型数据,即字符串。【说明】①<数值表达式2>的值决定转换后的字符串总长度(包括小数点),<数值表达式3>决定转换时要保留的小数位数。②如果<数值表达式2>的值大于<数值表达式1>的实际长度,则在数字串左边补充空格。③如果<数值表达式2>小于<数值表达式1>的实际长度,但大于等于<数值表达式1>的整数部分(包括负号)
的长度,则优先满足整数部分而自动调整小数部分(四舍五入)④若<数值表达式2>值小于<数值表达式1>的整数部分长度,则函数将输出星号“*”。⑤若缺省<数值表达式3>或同时缺省<数值表达式2>和<数值表达式3>,则函数只转换整数部分(包括负号)。【例】?STR(356.14159,8,4)&&显示结果为:356.1416?STR(356.14159,14,4)&&显示结果为:356.1416?STR(356.14159,5,4)&&显示结果为:356.1?STR(356.14159,2,4)&&显示结果为:**?STR(-356.14159,8)&&显示结果为:-356?STR(-356.14159)&&显示结果为:-3563.字符型转换为日期型函数
【格式】CTOD(<字符表达式>)【功能】把<字符表达式>转换为日期型数据。【说明】①<字符表达式>的格式可以是:“^YY/MM/DD”、“^YY-MM-DD”、“^YY.MM.DD”,年份可以带有世纪,也可不带有世纪。②如果年份不带世纪,默认为当前世纪。【例】?YEAR(CTOD(“^1999/10/13”)&&显示结果为:19994.日期型转换为字符型函数【格式】DTOC(<日期表达式>|<日期时间表达式>\[,1\])【功能】把<日期表达式>或<日期时间表达式>中的日期转换为字符串。【说明】①缺省可选项1时,函数返回的字符格式为“MM/DD/YY”;选择可选项1时,返回的字符格式为“YYYYMMDD”。②若设置了显示世纪(使用SETCENTURYON命令),则年份用4位表示。【例】?DTOC({^2002/12/27})&&显示结果为:12/27/02?DTOC({^2002/12/2715:20:38})&&显示结果为:12/27/02?DTOC({^2002/12/27},1)&&显示结果为:20021227?DTOC({^2002/12/2715:20:38},1)&&显示结果为:20021227
3.3.5其他函数
1.逻辑函数IIF()【格式】IIF(<逻辑表达式>,<表达式1>,<表达式2>)【功能】根据<逻辑表达式>的值,返回<表达式1>和<表达式2>值中的某一个。【说明】①<逻辑表达式>指定了要计算的逻辑表达式。若其值为.T.(真),则返回<表达式1>的值,否则返回<表达式2>的值。②函数的返回值类型可以是字符型、数值型、货币型、日期型或日期时间型等,取决于<表达式1>或<表达式2>的类型。【例】x=5y=7z=IIF(x>y,x-y,y-x)?z&&显示结果为22.宏替换函数【格式】&<字符型存变量>\[.\]【功能】替换出字符型变量的内容,即&的值是变量中的字符串。【说明】①&的作用是将字符型内存变量(包括数组元素)的内容替换出来,它的返回值的类型与字符型内存变量的值去掉字符定界符后的值的类型一致,可以是各种数据类型。②若宏替换函数与其后的字符无明确分界,则要用“.”作函数结束标记,并且宏替换可以嵌套使用。③宏替换函数对实现程序的自动生成和自动变换非常有用。【例】cName=李小明XM=cName?&XM+你好!&&相当于cName+你好!c_nVar=254?&c_nVar+6&&相当于254+6cVar=Fox?Visual&cVar.Pro&&结果显示为字符串“VisualFoxPro”3.返回当前默认目录函数CURDIR()【格式】CURDIR()【功能】返回当前系统默认目录,返回值类型为字符型。【例】Path=CURDIR()?Path4.搜索指定文件函数LOCFILE()【格式】LOCFILE(<文件名>\[,<扩展名>\])【功能】查找指定的文件,返回文件所在的目录。【例】cFileName=LOCFILE(Fox,bmp)?cFileName5.信息显示函数MESSAGEBOX()若希望程序运行过程中,按Windows对话框的形式显示一些相关信息,如提示信息、错误信息等,则可使用系统提供的MESSAGEBOX函数。【格式】MESSAGEBOX(<对话框提示文本>\[,<对话框类型>\]\[,<对话框标题>\])【功能】暂停程序的执行,弹出Windows提示窗口,等待用户做出选择,返回值为数字。【说明】①<对话框提示文本>指定对话框中输出的文本信息,而<对话框标题>指定了对话框窗口标题栏的标题文字。②<对话框类型>有多种选择,常用类型值来指定,表3-7给出了不同对话类型值的含义。【例】下列两个MESSAGEBOX函数执行结果如图3-1和图3-2所示。图3-1图3-2nMessage=MESSAGEBOX(“单击“确定”继续!”,0,“提示信息”)?nMessage&&打开对话框时,默认按钮为第1个nMessage=MESSAGEBOX(“文档已被更改,是否保存!”,3+16+256,“警告!”)?nMessage&&打开对话框时,默认按钮为第2个注意:执行第2个MESSAGEBOX函数所出现的对话框中有3个按钮,单击“是”按钮返回6,单击“否”按钮返回7,单击“取消”按钮返回2。6.空值测试函数EMPTY()【格式】EMPTY(<表达式>)【功能】测试<表达式>的值是否为空,返回值为逻辑型值真.T.或假.F.。【说明】表达式的数据类型可以是字符、数值、日期或者逻辑型数据;各种类型数据当出现表3-8的情况时,该函数返回.T.,否则都为假.F.。【例】?EMPTY(0)&&显示结果为:.T.?EMPTY(1)&&显示结果为:.F.?EMPTY(“”)&&显示结果为:.T.?EMPTY({/})&&显示结果为:.T.Visual0FoxPro6.0系统提供了几百个函数,前面只介绍了进行数据处理时最常用的几个,另外一些与数据库操作有关的常用函数放在后面相应的章节中介绍。练习三见书第4章结构化程序设计4.1VisualFoxPro程序的建立与运行4.1.1VisualFoxPro程序
利用VisualFoxPro对数据进行处理时,许多任务单靠执行一两条命令难以完成,往往需要执行一组命令才能完成。4.1.2建立程序文件1.命令方式创建程序文件
【格式】MODIFYCOMMAND\[<程序文件名>\]【功能】打开VisualFoxPro文本编辑器窗口,输入程序代码。【说明】①运行该命令时,系统先在磁盘上搜索是否已有该文件,若文件尚未建立,则由该命令自动创建一个新文件,若该文件已经存在,则打开该文件供用户编辑修改。②如果命令中没有给出<程序文件名>,系统会自动创建一个新程序文件。系统默认的程序文件名为程序1.prg、程序2.prg……,用户可以在关闭编辑窗口或执行保存程序文件操作时指定文件的存放位置和文件名。③<程序文件名>中可以只输入文件主名。2.菜单方式创建程序文件利用VisualFoxPro系统窗口的菜单同样可以创建新的程序文件。方法是:执行“文件”菜单下的“新建”命令,在“新建”对话框中选择文件类型为“程序”,然后单击“新建文件”按钮。无论采用哪种方式创建新的程序文件,均会打开程序编辑窗口,如图4-1所示,直接在窗口中输入、修改程序代码。
图4-1程序编辑窗口在程序编辑器窗口中,无论是修改或新建程序文件都应注意:一行只能写一条命令,并用回车键结束。一条命令可分几行书写,但在前一行的结尾必须用“;”续行标记,表示一条命令未完,转入下一行。4.1.3保存程序文件
程序编辑窗口中保存文件有两种方法:(1)执行菜单“文件”/“保存”命令。(2)按下组合健“Ctrl+W”。如果创建的新程序还没有专门指定程序文件名,系统会弹出“另存为”对话框,如图4-2所示。图4-2“另存为”对话框4.1.4运行程序文件
1.边编译边执行指定VisualFoxPro源程序按边编译边执行有多种方法:(1)执行系统菜单“程序”中的“运行”命令,在随后弹出的对话框中选取要运行的程序文件,单击“运行”按钮。(2)若程序文件正处于打开状态,即在程序编辑窗口中,可以直接单击常用工具栏上的“运行”按钮。(3)若在命令窗口或程序中,按DO<程序文件名>的格式调用程序文件并执行。程序执行过程中如果出现错误,系统会给出程序错误提示窗口,并提示错误信息,如图4-3所示。图4-3程序错误提示窗口2.先编译后执行
源程序文件编译的方法是:执行“程序”/“编译”菜单命令。如果程序编辑窗口中打开了一个程序,系统自动编译该程序,否则系统弹出“编译”对话框,如图4-4所示,选择需要编译的程序文件,单击“编译”按钮进行编译。图4-4“编译”对话框在编译过程中,如果出现错误,同样系统会给出错误提示窗口,并提示错误信息。单击“取消”按钮,返回到程序编辑窗口,修改出现错误的地方,存盘后再编译修改过的程序,直到没有错误为止,这时系统会自动生成扩展名为.FXP的文件。
程序设计的一些常用命令4.24.2.1常用的基本语句
1.注释语句编写程序的过程中,在程序的适当位置上添加上相应的注释语句是一种良好的习惯,不仅有利于自己,而且也有利于程序的交流。注释语句只起注释作用,程序运行的时候,被忽略。变量只是存放数据的容器,必须往其中存放数据才有意义,这称之为赋值。2.赋值语句3.清屏命令
【格式】CLEAR【功能】清除当前系统主窗口中的所有信息,但不清除内存变量。4.SETTALKON|OFF命令
【格式】SETTALKON|OFF【功能】打开/关闭返回相关命令执行状态信息的提示。【说明】①许多数据处理命令(如AVERAGE、SUM、SELECT等)在执行时都会返回一些有关执行状态的信息并显示在系统窗口、状态栏等处。SETTALK命令用于设置是(ON)、否(OFF)显示这些信息,默认为ON。②通常在程序头部用SETTALKOFF关闭状态信息的显示,以保持系统窗口的整洁,而在程序尾部用SETTALKON设置状态信息的显示。5.RETURN语句【格式】RETURN【功能】结束当前程序的执行,返回到命令窗口。通常作为程序中的最后一条语句。4.2.2输入和输出命令
1.输入一个字符命令(WAIT)【格式】WAIT\[<字符表达式>\]\[TO<内存变量名>\]\[WINDOW\[AT<行>,<列>\]\]\[NOWAIT\]\[TIMEOUT<数值表达式>\]【功能】暂停程序执行,在屏幕上给出提示信息,并等待用户输入一个字符给<内存变量名>中指定的变量。【说明】①<字符表达式>是程序暂停时在屏幕上显示的提示信息,缺省为“按任意键继续……”。②若选TO短语,内存变量只能接收由键盘输入的单个字符,即使用户按了回车键,命令也认为接收到一个空字符(长度为0,ASCII码值为0)。③提示信息一般显示在VisualFoxPro主窗口或当前用户自定义的窗口中。如指定了WINDOW短语,则将会出现一个提示窗口,用以显示提示信息;而AT短语选项指定提示窗口在屏幕上的位置,若无则系统默认窗口在系统主窗口的右上角。④选NOWAIT后,系统将不等待用户按键,直接往下执行。选TIMEOUT短语后,<数值表达式>给出以秒为单位的时间,若在此时间内用户不键入任何数据,WAIT语句将自动终止,继续往下执行。图4-5“WAIT”使用示例【例】下述代码将显示如图4-5所示的提示信息:WAIT“注意:现在暂停”+CHR(13)+CHR(10)+“程序的执行10秒钟”;WINDOWSAT10,10TIMEOUT102.输入字符串命令(ACCEPT)
【格式】ACCEPT\[<字符表达式>\]TO<内存变量名>【功能】暂停程序执行,在屏幕上给出提示信息,并等待用户从键盘上输入一个字符串常量给内存变量。【说明】①<字符表达式>是用户指定的在屏幕上显示的提示信息。②从键盘上输入的字符串不得用定界符括起来,否则定界符本身也被当作字符串的一部分而输入到内存变量中。【例】ACCEPT“请输入字符数据:”TOCH1?CH13.输入其他类型数据命令(INPUT)
【格式】INPUT\[<字符表达式>\]TO<内存变量名>【功能】暂停程序的执行,在屏幕上显示提示信息,并等待用户输入数据。【说明】①<字符表达式>是屏幕显示的提示信息。②可以通过键盘输入数值型、字符型、日期型、逻辑型、货币型等数据给内存变量。③若输入字符型数据,一定要加定界符。4.屏幕格式化输入输出命令【格式】@<行,列>\[SAY<表达式1>\]\[GET<变量名>\]\[DEFAULT<表达式2>\]\[VALID<关系/逻辑表达式>\]\[RANGE<下限>,<上限>\]【功能】用于在屏幕的指定位置上输出、输入和编辑数据。【说明】①若选SAY而不GET短语,则在规定的坐标处输出<表达式1>的值;若选GET短语,则<表达式1>一般是字符串,作为提示信息。当执行其后的READ命令后,可以激活GET后的变量,并进行编辑或重新输入。②<变量名>通常是已存在的内存变量或字段变量。对于字段变量,必须打开相应的数据表。若变量事先不存在,需要有<表达式2>定义变量的初值,初值的大小和类型直接影响以后的编辑与输入。③VALID<关系/逻辑表达式>用来控制有效数据的输入。除非用户按Esc键退出字段的编辑状态,否则当退出编辑区时,系统判断<关系/逻辑表达式>的值,若值为.T.时,系统才认为输入数据正确,否则系统提示“无效输入”,直到输入正确数据为止。④RANGE短语用来指定对输入数据上、下限的限制。若输入数据不在范围之内,系统将给出警告框并提示应输入的数【格式一】?\[<表达式1>\[,<表达式2>\]…\]【格式二】??<表达式1>\[,<表达式2>\]…【功能】计算各表达式的值,并显示结果。【说明】①表达式可以是常量、变量、函数或一般表达式。N型值的整数部分占10位,超出10位时按需分配,小数部分按需分配。C型值占用位数与串长相同,其他各类数据按定义的位数输出。②“?”和“??”的区别是:“?”后可以没有表达式,表示换行,当有<表达式>时,则换行后输出表达式的值。“??”将不换行显示表达式的值。4.2.3程序的基本控制结构
1.顺序结构
顺序结构是最简单的一种基本结构,按照语句在源程序中书写的前后顺序依次执行,如图4-6所示。图4-6顺序结构2.分支结构分支结构是根据指定的条件表达式的取值来选择执行方向的。由图4-7可以看出,如果条件成立就执行语句序列A,否则,执行语句序列B。图4-7分支结构3.循环结构
如图4-8所示,当条件成立时,循环结构会重复执行语句序列A直到条件不成立为止。图4-8循环结构
分支结构4.34.3.1IFELSEENDIF结构IF语句比较适合于组织两分支的选择结构,即根据条件从两个语句序列中选择执行其中的一个语句序列。语句格式:【格式】IF<条件><语句序列1>\[ELSE<语句序列2>\]ENDIF【功能】根据<条件>的不同值,使程序有条件地执行相应的语句序列。【说明】①IF、ELSE、ENDIF必须各占一行。每一个IF都必须有一个ENDIF与其对应,即IF和ENDIF必须成对出现。②<条件>必须是关系或逻辑表达式,根据<条件>的逻辑值,进行判断。如果<条件>的逻辑值为.T.,就执行<语句序列1>,完成后转到ENDIF之后的语句。如果<条件>的逻辑值为.F.,当ELSE子句存在时,执行<语句序列2>,完成后转去执行ENDIF之后的命令;当ELSE子句不存在时,则不执行IF和ENDIF之间的所有命令,而直接转到ENDIF之后的语句,形成了单分支结构。③<语句序列>是由一个或多个语句组成,其中也可以再包含若干个IF语句,但每一个IF语句都必须有一个ENDIF与其对应。4.3.2IF语句的嵌套
IF语句的嵌套要注意IF、ELSE和ENDIF的匹配。为了提高程序的可阅读性,输入源程序代码时,最好采用缩进的书写格式。4.3.3DOCASEENDCASE结构
在一个DOCASE结构中,最多只能执行一个CASE下的语句组。如果所有条件都不满足,在没有OTHERWISE的情况下,不执行任何语句组,转去执行ENDCASE后面的语句;如果有OTHERWISE选项,则执行OTHERWISE下面的语句组,然后再执行ENDCASE后面的语句。多分支的控制流程如图4-9所示。图4-9多分支的控制流程循环结构4.44.4.1DOWHILE…ENDDO(当型)循环
当型循环的特点是:当所给定循环条件为真时,就反复执行其循环体中的语句;当该条件为假时,则终止执行其循环体,而去执行循环结构后面的语句。4.4.2FOR…ENDFOR(步长型)循环
与当型循环相比,步长型循环特别适于构造已知循环次数的循环。4.4.3SCAN…ENDSCAN(指针型)循环指针型循环是指根据当前表中记录指针的位置,决定是否执行循环体,语句格式如下:【格式】SCAN\[<范围>\]\[FOR|WHILE<条件>\]\[语句序列\]ENDSCAN【功能】在当前表中移动记录指针,如果遇到符合条件的记录就执行语句序列。【说明】①<范围>选项用于指定记录的查找范围,即只查找指定<范围>内的记录。<范围>子句有:ALL、NEXTn、RECORDn和REST。若省略<范围>,则默认为ALL。②FOR|WHILE<条件>指定只有符合条件的记录执行语句序列,利用该子句可以过滤掉用户不需要的记录。③SCANENDSCAN必须成对使用,语句序列中可以嵌套任何控制结构的命令语句。过程和自定义函数4.54.5.1过程
过程是完成某一功能的一段程序,可供主程序调用。这样,我们可以将一个复杂的任务分解成若干个小问题,分别写成过程。过程既可以放在主程序的后面,也可以单独存放在一个文件中。1.过程的编写2.过程的调用过程只是一个程序片段,必须通过过程调用的方式来执行它。在调用时,可能需要通过参数向过程传递一些数据,这些可以传递数据的参数就是实际参数,简称实参。4.5.2用户自定义函数
1.自定义函数的编写VisualFoxPro中编写自定义函数的格式如下所示:【格式一】FUNCTION<函数名>\[(<形式参数列表>)\]<函数体>\[RETURN<表达式>\]ENDFUNC【格式二】FUNCTION<函数名>PARAMETERS<形式参数列表><函数体>\[RETURN<表达式>\]ENDFUNC【功能】创建一个用户自定义函数。【说明】①<形式参数列表>用来接收调用它的实际参数。当有多个参数时,要用逗号将各个参数隔开。②格式一使用函数名后面的形参列表来接收实际参数的值,而格式二使用PARAMETERS后面的形参列表来接收实参的值。如果使用格式二,PARAMETERS语句必须是自定义函数内部的第一条语句。③函数往往需要返回一个值,其返回值由RETURN命令后的<表达式>指定。在缺省情况下,函数的返回值是.T.。2.自定义函数的调用和系统提供的标准函数的调用方法一样,用户自定义函数的调用格式为:【格式】函数名\[(<实参列表>)\]【说明】<实参列表>为调用的参数。当有多个参数时,各参数之间要用“,”隔开;当没有参数时,也必须加上小括号。4.5.3过程文件
1.建立过程文件
与程序文件一样,过程文件也是VisualFoxPro源程序文件,其建立方法和一般的程序文件一样,可以用MODIFYCOMMAND命令建立,扩展名是“.PRG”。2.打开过程文件
若将过程或函数放在一个单独的过程文件中,使用它们之前,必须先打开这个过程文件,可以在调用程序中使用SETPROCEDURETO命令将其打开。3.调用过程文件中的过程打开过程文件后,可以用DO<过程名>来调用其中的过程。4.关闭过程文件
【格式1】SETPROCEDURETO【格式2】RELEASEPROCEDURE<文件名列表>【说明】①格式1用于关闭所有打开的过程文件。②格式2中的参数<文件名列表>指定要关闭的过程文件名。
变量的作用域4.64.6.1局部变量
IsualFoxPro系统默认凡在程序中未用PUBLIC、PRIVATE、LOCAL等说明的变量都是局部变量。4.6.2局域变量
用LOCAL定义说明的变量称为局域变量,只能在创建它们的程序模块中引用和修改,不能被其它程序模块所使用。4.6.3私有变量
程序模块中用PRIVATE说明的变量称为私有变量。4.6.4全局变量
全局变量在整个程序中(包括调用的子程序)都有效。任何程序都可以改变它的值,在子程序中定义的全局变量在主程序中也有效。练习四见书第5章数据库的设计与操作基本概念5.1从VisualFoxPro6.0开始,引入了数据库的概念,数据库是数据库应用系统的核心,它把相互关联的数据库表和相关的数据库对象组织到一起进行管理,包括表、视图、连接、存储过程的容器和用于组织包含数据信息的多个表,并允许在这些相关联的表之间建立永久关系。设计数据库的一般步骤5.2数据库设计的一般步骤是:(1)确定数据库要实现的任务,确定数据库中需要存储哪些信息。(2)创建需要的表,将信息分解为不同的相关主题。(3)设计表中需要的字段,即确定表的结构。(4)建立表之间的关系,确定各表之间的数据应该如何进行连接。(5)修改和优化数据库,发现问题然后进行修改。
数据库的建立及操作5.35.3.1数据库设计器
VisualFoxPro为了实现数据库的操作专门提供了一个数据库设计器。在数据库设计器中,可以非常方便地创建、添加和删除表,显示数据库中包含的全部表、视图,建立表间的关联关系。“数据库设计器”窗口如图5-1所示。图5-1“数据库设计器”窗口在“数据库设计器”窗口中,若用鼠标右击窗口的空白,将会出现一个对数据库进行操作的快捷菜单,如图5-2所示。图5-2数据库快捷菜单若在数据表对象上单击鼠标右键,则弹出如图5-3所示的对选定表进行操作的快捷菜单。图5-3数据库操作快捷菜单5.3.2建立数据库文件
1.菜单方式
执行系统“文件”菜单中的“新建”命令,从弹出的“新建”对话框中选择“数据库”选项,然后单击新建文件按钮,进入“创建”对话框窗口,在“创建”对话框中指定新建的数据库文件名以及保存位置,最后单击“保存”按钮,即可出现“数据库设计器”窗口,如图5-4所示。图5-4“数据库设计器”窗口2.命令方式在VisualFoxPro6.0中,我们可以在命令窗口中,很容易地用VisualFoxPro6.0中的创建新数据库命令CREATEDATABASE进行操作:【格式】CREATEDATABASE\[<数据库文件名>|?\]【功能】创建一个数据库文件。【说明】①命令中若未指定数据库文件名,或使用了可选项“?”,将打开“创建”对话框,要求输入一个数据库文件名并确定保存位置。②利用命令建立数据库文件并不会自动打开数据库设计器,还需要使用MODIFYDATABASE命令或执行系统“显示”菜单中的“数据库设计器”命令打开数据库设计器。5.3.3打开与关闭数据库1.打开数据库
(1)菜单操作。(2)命令方式。2.关闭数据库
若针对数据库的所有操作结束后,应关闭数据库文件。关闭数据库的方法如下:【格式1】CLOSEDATABASE【功能】关闭当前的数据库文件及其表。【格式2】CLOSEALL【功能】关闭所有打开的数据库文件及其表、自由表以及各种类型的文件。5.3.4添加和移去数据表
1.添加表首先在“数据库设计器”窗口的空白地方单击鼠标右键,从弹出的快捷菜单中选择“添加表”命令,然后从弹出的“打开”对话框中选择要添加到当前数据库的自由表,最后单击“确定”按钮。2.移去表
首先在“数据库设计器”窗口中单击选择需要移去的数据库表,执行系统菜单“数据库”中的“移去”命令,然后在弹出的提示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 党员培训工作方案(18篇)
- 2025年搏击运动项目申请报告模范
- 2025年林产化学产品项目申请报告
- 2025年污水处理鼓风机项目规划申请报告模范
- 2025年泳池热泵项目申请报告模板
- 2022年大学生实习报告例文5篇
- 2025年智能汽车项目申请报告模板
- 2025年干燥设备:热风炉项目规划申请报告模板
- 收银员的辞职报告模板汇编7篇
- 企业诚信承诺书合集6篇
- 《麦当劳战略管理5800字(论文)》
- 工程伦理分析-切尔诺贝利
- 外墙用水泥纤维板接缝位置开裂问题及处理
- 超星尔雅学习通【中国近现代史纲要(首都师范大学)】章节测试含答案
- 金色年终汇报PPT模板
- 沭阳县国土空间总体规划(2021-2035)草案公示1
- C++初学者入门全篇
- 哈尔滨市商品房买卖合同书(最终定稿)
- 警犬行为理论考试题库(含答案)
- 财政与金融基础知识全套教学课件(中职)
- oppo其它-lpdt工作手册
评论
0/150
提交评论