Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙...

84
高等职业教育“十二五”规划教材 Visual FoxPro 数据库 基础与应用 张正军 主编 副主编 科学出版社 职教技术出版中心 www.abook.cn

Transcript of Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙...

Page 1: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

高等职业教育“十二五”规划教材

Visual FoxPro 数据库

基础与应用

张 旭 叶 茜 张正军 主编

张 赟 孙 娅 副主编

北 京

学出版社

职教技术出版中心

www.abook.cn

Page 2: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

内 容 简 介

本书共分 10 个单元,以开发一个小型的学生管理数据库应用系统项目

为主线,每个单元以任务驱动的方式展开学习内容,把数据库技术、语言学

习、可视化编程的方法与实际应用作为一个整体来介绍。本书内容编排上从

简单到复杂递进,结合 Visual FoxPro 数据库系统体系结构,将 Visual FoxPro

数据库的基础知识、数据库的设计、SQL 查询语言、面向过程和面向对象

的程序设计方法、数据库应用系统的开发等知识和技能融入不同的单元中。

本书适合作为高职高专院校计算机基础课教材,也可以作为相关专业数

据库应用课程教材,还可作为全国计算机等级考试二级 Visual FoxPro 数据

库程序设计的考试用书以及计算机爱好者自学参考书。

图书在版编目(CIP)数据

Visual FoxPro 数据库基础与应用/张旭,叶茜,张正军主编. —北京:

科学出版社,2012

(高等职业教育“十二五”规划教材)

ISBN 978-7-03-035366-5

Ⅰ.①V… Ⅱ.①张… ②叶… ③张… Ⅲ.①关系数据库系统-数据库

管理系统-高等职业教育-教材 Ⅳ.①TP311.138

中国版本图书馆 CIP 数据核字(2012)第 189936 号

责任编辑:李太铼 / 责任校对:王万红 责任印制:吕春珉 / 封面设计:耕者设计工作室

出版 北京东黄城根北街 16 号

邮政编码:100717

http://www.sciencep.com

北京印刷厂印刷 科学出版社发行 各地新华书店经销

* 2012 年 8 月第 一 版 2012 年 8 月第一次印刷

开本:787×1092 1/16 印张:15 3/4

字数:354 000

定价:28.00 元

(如有印装质量问题,我社负责调换<路通>) 销售部电话 010-62140850 编辑部电话 010-62135319-8220(VP03)

版权所有,侵权必究

举报电话:010-64030229;010-64034315;13501151303

Page 3: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

前 言

本书是针对高等职业教育而编写的教材,以初学数据库的学生为教学对象,考虑学

习过程中学生认知的心理顺序,即由浅入深、由易到难、由表及里的“时序”串行的情

况,从简单到复杂递进,结合 Visual FoxPro 数据库系统体系结构,将 Visual FoxPro 数

据库的基础知识、数据库的设计、SQL 查询语言、面向过程和面向对象的程序设计方法、

数据库应用系统的开发等知识和技能融入不同的单元中。

全书共分十个单元,以开发一个小型的学生管理数据库应用系统项目为主线,每个

单元以任务驱动的方式展开学习的内容,把数据库技术、语言学习、可视化编程的方法

与实际应用作为一个整体来介绍。具体内容如下:单元一,数据库设计,介绍了数据库

的基本知识和数据库设计实施;单元二,项目建立及操作,介绍了启动与退出 Visual

FoxPro 6.0、使用 Visual FoxPro 6.0 用户界面、设置 Visual FoxPro 工作环境、创建及管

理项目文件;单元三,主程序的建立,介绍了 Visual FoxPro 语言基础、简单程序设计、

设计与编制项目主程序;单元四,数据库的基本操作,介绍了创建和管理数据库、创建

和管理数据库表、表的基本操作、创建和使用表索引、数据库的数据完整性设置、多表

的使用操作、数据库表与自由表的转换;单元五,用 SQL 语言管理学生管理数据库,

介绍了用 SQL 语言创建和维护数据库、用 SQL 语言操作表中的数据、用 SQL 语言查询

表中的数据;单元六,数据库查询与视图设计,介绍了设计与创建学生信息查询、设计

与创建学生成绩统计查询、设计与创建学生信息视图、设计与创建学生成绩统计视图;

单元七,用户界面设计,介绍了用户登录表单的设计、系统版本表单的设计、学生信息

输入表单的设计、学生信息查询表单的设计;单元八,报表设计,介绍了学生基本信息

报表设计、学生成绩统计报表设计;单元九,系统菜单设计,介绍了设计学生管理系统

主菜单、为菜单项指定任务及运行菜单;单元十,程序的生成,介绍了学生管理系统程

序的生成。

本书内容安排合理、通俗易懂、循序渐进、理论联系实际,适合作为高职高专院校

计算机专业基础课教材,也可以作为相关专业数据库应用课程教材,还可作为全国计算

机等级考试二级 Visual FoxPro 数据库程序设计的考试用书以及计算机爱好者自学参考书。

本书由张旭、叶茜共同策划,单元一和单元二及单元四到单元十由张旭编写,单元

三由张旭、张正军合作编写。全书由叶茜审核,由张旭统稿。本书在编写过程中得到了

雷振德院长的大力支持和帮助,在此表示衷心的感谢。

由于时间仓促,编者水平有限,书中难免存在疏漏和不足之处,恳请广大读者提出

宝贵意见。

编 者

2012 年 4 月

学出版社

职教技术出版中心

www.abook.cn

Page 4: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

目 录

单元一 数据库设计······························································································································ 1

任务一 了解数据库系统············································································································ 1

一、数据库技术 ························································································································· 1

二、数据模型 ····························································································································· 3

三、关系数据库 ························································································································· 5

任务二 数据库设计实施············································································································ 8

一、设计基础 ····························································································································· 8 

二、设计实施 ····························································································································11 

习题一···············································································································································14

单元二 项目建立及操作····················································································································18

任务一 启动与退出 Visual FoxPro 6.0··················································································18

一、启动 Visual FoxPro 6.0·······································································································18 

二、退出 Visual FoxPro 6.0·······································································································18 

任务二 使用 Visual FoxPro 6.0 用户界面 ············································································19

一、Visual FoxPro 6.0 的主界面 ·······························································································19 

二、Visual FoxPro 6.0 的工作方式 ···························································································22 

三、Visual FoxPro 6.0 的文件类型 ···························································································23 

任务三 设置 Visual FoxPro 6.0 工作环境 ············································································24

一、使用“选项”命令设置系统工作环境 ··············································································24 

二、使用 SET 命令设置系统工作环境 ····················································································26 

任务四 创建及管理项目文件··································································································28

一、创建项目文件 ····················································································································28 

二、打开和关闭项目文件·········································································································30 

三、项目管理器的基本功能 ·····································································································31

四、使用项目管理器 ················································································································32

五、定制项目管理器 ················································································································35

习题二···············································································································································36

单元三 主程序的建立 ························································································································38

任务一 Visual FoxPro 语言基础 ·····························································································38

一、常量和变量 ························································································································38

二、表达式与运算符 ················································································································41

三、常用函数 ····························································································································45

Page 5: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·iv·

任务二 简单程序设计 ···············································································································54

一、程序的概念 ························································································································54

二、程序文件的建立与执行 ·····································································································56

三、程序中常用的命令·············································································································58

四、程序的基本结构 ················································································································62

任务三 设计与编制项目主程序 ·····························································································72

一、主程序的作用 ····················································································································72

二、主程序设计思路 ················································································································72

三、建立主程序 ························································································································73

习题三···············································································································································74

单元四 数据库的基本操作 ···············································································································77

任务一 创建和管理数据库 ······································································································77

一、创建数据库 ························································································································77

二、管理数据库 ························································································································79

任务二 创建和管理数据库表··································································································83

一、数据库表的结构 ················································································································84

二、数据库表基础知识·············································································································85

三、创建数据库表 ····················································································································87

四、表的打开和关闭 ················································································································89

五、修改表结构 ························································································································90

六、复制表结构 ························································································································91

任务三 表的基本操作 ···············································································································92

一、使用浏览器操作表·············································································································92

二、使用命令操作表 ················································································································97

任务四 创建和使用表索引 ····································································································104

一、索引基础知识 ··················································································································104

二、建立索引的方法 ··············································································································105

三、创建数据库表的索引·······································································································108

四、使用索引 ··························································································································109

五、建立排序 ··························································································································112

任务五 数据库的数据完整性设置·······················································································113

一、实体完整性设置 ··············································································································113

二、域完整性设置 ··················································································································113

三、参照完整性设置 ··············································································································115

任务六 多表的使用操作·········································································································119

一、选择工作区 ······················································································································119

二、使用不同工作区的表·······································································································120

学出版社

职教技术出版中心

www.abook.cn

Page 6: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

目 录

·v·

三、数据表的关联 ··················································································································121

四、使用“数据工作期”操作表 ···························································································122

任务七 数据库表与自由表的转换·······················································································123

一、将自由表添加到数据库中 ·······························································································123

二、从数据库中移去表···········································································································123

习题四·············································································································································124

单元五 用 SQL 语言管理学生管理数据库 ················································································127

任务一 用 SQL 语言创建和维护数据库 ············································································127

一、SQL 概述 ·························································································································127

二、SQL 的表定义命令 ··········································································································128

三、创建数据库和表 ··············································································································130

四、数据库的维护 ··················································································································132

任务二 用 SQL 语言操作表中的数据·················································································135

一、插入记录 ··························································································································135

二、更新记录 ··························································································································136

三、删除记录 ··························································································································136

任务三 用 SQL 语言查询表中的数据·················································································137

一、SQL 的数据查询命令 ······································································································137

二、基本查询 ··························································································································138

三、条件查询 ··························································································································141

四、多表查询 ··························································································································144

五、计算与统计查询 ··············································································································147

六、使用量词和谓词查询·······································································································149

七、集合的并运算查询···········································································································150

八、查询结果的输出方向·······································································································151

习题五·············································································································································152

单元六 数据库查询与视图设计 ····································································································155

任务一 设计与创建学生信息查询·······················································································155

一、设计基础 ··························································································································155

二、设计思路 ··························································································································157

三、设计实施 ··························································································································157

任务二 设计与创建学生成绩统计查询··············································································160

一、设计思路 ··························································································································161

二、设计实施 ··························································································································161

任务三 设计与创建学生信息视图·······················································································164

一、设计基础 ··························································································································164

Page 7: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·vi·

二、设计实施 ··························································································································166

任务四 设计与创建学生成绩统计视图··············································································168

一、设计基础 ··························································································································168

二、设计实施 ··························································································································169

习题六·············································································································································170

单元七 用户界面设计 ······················································································································172

任务一 用户登录表单的设计································································································172

一、设计基础 ··························································································································172

二、设计思路 ··························································································································178

三、控件选择 ··························································································································178

四、设计实施 ··························································································································179

五、运行表单 ··························································································································182

任务二 系统版本表单的设计································································································183

一、设计思路 ··························································································································183

二、控件选择 ··························································································································183

三、设计实施 ··························································································································183

任务三 学生信息输入表单的设计·······················································································185

一、设计思路 ··························································································································185

二、控件选择 ··························································································································185

三、设计实施 ··························································································································186

任务四 学生信息查询表单的设计·······················································································190

一、设计思路 ··························································································································190

二、控件选择 ··························································································································190

三、设计实施 ··························································································································191

习题七·············································································································································193

单元八 报表设计 ·······························································································································195

任务一 学生基本信息报表设计 ···························································································195

一、设计基础 ··························································································································195

二、设计实施 ··························································································································196

任务二 学生成绩统计报表设计 ···························································································199

一、设计基础 ··························································································································199

二、设计实施 ··························································································································205

三、输出报表 ··························································································································206

习题八·············································································································································208

学出版社

职教技术出版中心

www.abook.cn

Page 8: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

目 录

·vii·

单元九 系统菜单设计 ······················································································································210

任务一 设计学生管理系统主菜单·······················································································210

一、设计基础 ··························································································································210

二、设计思路 ··························································································································216

三、设计实施 ··························································································································216

任务二 为菜单项指定任务及运行菜单··············································································217

一、为菜单项指定任务···········································································································217

二、生成菜单程序 ··················································································································218

三、运行菜单 ··························································································································219

习题九·············································································································································220

单元十 程序的生成···························································································································221

任务 学生管理系统程序的生成 ···························································································221

一、加入项目信息 ··················································································································221

二、设置文件的“包含”与“排除”····················································································222

三、设置主文件 ······················································································································222

四、连编及运行 ······················································································································223

习题十·············································································································································224

习题参考答案 ········································································································································226

参考文献 ·················································································································································239

Page 9: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元一 数据库设计

本单元包括两个任务,即

任务一,了解数据库系统;

任务二,数据库设计实施。

任务一 了解数据库系统

1.初步掌握数据、数据处理、数据库、数据库管理系统、数据库系统等基本概念。

2.一般性了解数据管理技术的发展,了解层次、网状、关系三种数据库模型。

3.掌握关系数据库的基本概念,理解选择、投影、连接三种关系运算的原理。

一、数据库技术

1.数据管理技术的发展

数据管理技术随着计算机硬件和软件技术的发展大致经历了如下三个阶段。

(1)人工管理阶段

20 世纪 50 年代中期以前,计算机主要用于科学计算。那时的计算机在硬件方面,

外部存储器只有卡片、纸带及磁带,没有磁盘等直接存取设备。在软件方面,只有汇编

语言,没有操作系统和高级语言,更没有管理数据的软件。数据处理的方式是批处理,

数据无结构。这些决定了当时的数据管理只能依赖人工来进行。

(2)文件系统阶段

20 世纪 60 年代,计算机技术有了很大提高,计算机的应用范围也不断扩大,不仅

用于科学计算,还大量用于管理。这时的计算机硬件已经有了磁盘、磁鼓等直接存取设

备。软件则有了操作系统、高级语言,操作系统中的文件系统是专门用于数据管理的软

件。文件系统把计算机中的数据组织成相互独立的数据文件,系统可以按照文件的名称

对其进行访问。文件系统实现了记录内的结构化,但是文件系统整体上却是无结构的,

文件之间缺乏联系,相对孤立,同一数据可能重复出现在多个文件中,导致数据的冗余

度大,不能统一修改,容易造成数据的不一致。

学出版社

职教技术出版中心

www.abook.cn

Page 10: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·2·

(3)数据库系统阶段

20 世纪 60 年代末以来,计算机的应用更为广泛,用于数据管理的规模也更为庞大,

文件系统的数据管理方法已无法适应应用系统的开发需求。为了实现计算机对数据的统

一管理,达到数据共享的目的,数据库技术应运而生。数据库具有数据的整体结构化、

数据共享性高、数据独立性好、数据冗余度小等特点,减少了应用系统的开发和维护代

价,实现了对数据的统一控制。

2.数据库的基本概念

(1)数据

数据是指存储在某一种媒体上能够识别的物理符号。数据的概念包括两个方面:一

是描述事物特性的数据内容;二是存储在某一种媒体上的数据形式。

在计算机中可以表示数据的种类很多,文字、图形、图像、声音都可以数字化,所

以这些都是数据。用数据符号表示信息,其形式有许多种,常见的有以下三种类型。

数值型数据,即对客观事物进行定量记录的符号,如数量、年龄、价格和度量等。

字符型数据,即对客观事物进行定性记录的符号,如姓名、单位、地址标志、物

体的颜色等。

特殊型数据,即对客观事物进行形象特征和过程记录的符号,如声音、视频、图

像等。

(2)数据处理

数据处理是指将数据转换成信息的过程。所以,数据处理也称为信息处理。例如,

利用计算机对数据进行采集、整理、存储、分类、统计、分析等一系列的操作,将数据

加工成有用的信息。

数据处理的目的是从大量的、原始的数据中获得所需要的资料并提取有用的数据成

分,作为行动和决策的依据。

(3)数据库

数据库是按照一定的数据模型长期存储在计算机内的有组织的、可共享的数据集

合。数据库不仅包括描述事物的本身,而且还包括相关事物之间的联系。

数据库中的数据所具有的特性包括大量性、持久性、共享性、数据独立性、易扩展

性、小冗余度。

(4)数据库管理系统

数据库管理系统(database management system,DBMS)是用户与数据库之间的一

个界面,是用于建立、使用和管理维护数据库的软件系统,也是一种程序设计系统。它

的主要功能如下。

1)数据定义功能:DBMS 提供了数据库描述语言(data description language,DDL),

用来描述数据库的结构、数据单位间的相互关系以及数据存取方法,是应用程序员和数

据库管理员用来定义数据库、表、索引、查询、视图等的工具。

2)数据操作功能:DBMS 提供了数据库操纵语言(data manipulation language,DML),

供用户对数据库进行数据查询(包括检索与统计)和存储编辑(包括插入、修改、删除)

等操作。

Page 11: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元一 数据库设计

·3·

3)数据库运行管理功能:指数据库管理系统的运行、管理、控制,保证数据库系

统的正常运行。

4)数据库建立和维护功能:数据库的建立是指初始数据装载,它应具有单个数据

的装入或成批数据装入的能力和数据转换的能力;维护包括对数据库内部维护(如索引、

数据字典的自动维护)、数据库备份的保存和转储、数据库的重组织、数据库的重构造、

数据库性能的分析及监测。

(5)数据库应用系统

数据库应用系统是指系统开发人员利用数据库系统资源开发出来的、面向某一类实

际应用的应用软件系统,如财务管理系统、人事管理系统、图书管理系统、教学管理系

统、学生管理系统等。

(6)数据库系统

数据库系统是指拥有数据库技术支持的计算机系统,可以实现有组织地、动态地存

储大量相关数据,提供数据处理和信息资源共享服务。

数据库系统的组成:硬件系统、软件系统(主要包括操作系统、数据库管理系统等)、

数据库应用系统和各类人员,如图 1-1 所示。

图 1-1 数据库系统层次示意图

二、数据模型

在数据库的发展史上,具有影响力的数据库模型有层次模型、网状模型和关系模型。

这三种模型都是以数据结构命名的。数据模型的好坏直接影响着数据库的性能。它们之

间的区别在于数据之间联系的表示方式不同,具体地说,层次模型使用“树结构”来表

示数据之间的联系,网状模型使用“图结构”来表示数据之间的联系,而关系模型则使

用“二维表”(关系)来表示数据之间的联系。关系模型虽然起步比较晚,然而发展得

最快,被认为是最有发展前途的一种数据模型。关系模型的数据结构简单清晰,目前大

多数数据库系统都是关系型的。

1.层次模型

层次模型可以形象化为一棵倒立的树,如图 1-2 所示。在数据库中,满足以下两个

学出版社

职教技术出版中心

www.abook.cn

Page 12: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·4·

条件的数据模型称为层次模型。

1)有且仅有一个结点,无父结点,这个结点称为根结点。

2)其他结点有且仅有一个父结点。

在层次模型中,结点层次从根开始定义,根为第一层,根的子结点为第二层,根为

其子结点的父结点,同一父结点的子结点称为兄弟结点,没有子结点的结点称为叶结点。

学院

经贸系 外语系 机电工程系

电子商务教研室 会计教研室 物流教研室

图 1-2 层次模型示意图

2.网状模型

若用图来表示,网状模型就是一个网络,如图 1-3 所示。在数据库中,满足以下两

个条件的数据模型称为网状模型。

1)允许一个以上的结点无父结点。

2)一个结点可以有多于一个的父结点。

注意:由于在网状模型中子结点与父结点的联系不是唯一的,所以要为每个联系命

名,并指出与该联系有关的父结点和子结点。

专业系

教研室 学生

教师 任课 选课

课程

图 1-3 网状模型示意图

3.关系模型

在关系模型中,数据的逻辑结构是一张二维表。在数据库中,满足下列条件的二维

表称为关系模型。

Page 13: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元一 数据库设计

·5·

1)每一列中的分量是类型相同的数据。

2)列的顺序可以是任意的。

3)行的顺序可以是任意的。

4)表中的分量是不可再分割的最小数据项,即表中不允许有子表。

5)表中的任意两行不能完全相同。

例如,表 1-1 所示的学生表就是一个关系模型。

表 1-1 学生表

学号 姓名 性别 学院 专业编码 班级编码

901130101 张波 男 经贸系 113 9011301

901130102 方韡 男 经贸系 113 9011301

901130103 程正辉 男 经贸系 113 9011301

901130104 淡汉鹏 男 经贸系 113 9011301

901130105 李盼龙 男 经贸系 113 9011301

901130106 朱敏 男 经贸系 113 9011301

901130107 马晓闪 女 经贸系 113 9011301

901130108 于南南 女 经贸系 113 9011301

901130109 杨扬 女 经贸系 113 9011301

层次数据库是数据库系统的先驱,而网状数据库则为数据库在概念、方法、技术上

的发展奠定了基础。它们是数据库技术研究最早的两种数据库,而且也曾得到广泛的应

用。但是,这两种数据库管理系统存在着结构比较复杂、用户不易掌握、数据存取操作

必须按照模型结构中已定义好的存取路径进行、操作比较复杂等缺点,从而限制了这两

种数据库管理系统的发展。

关系数据库以其严格的数学理论、使用简单灵活、数据独立性强等特点,而被公认

为是最有前途的一种数据库管理系统。它的发展十分迅速,目前已成为占据主导地位的

数据库管理系统。

三、关系数据库

1.关系数据库的基本概念

关系:一个关系就是一张二维表,每个关系有一个关系名。在计算机中,一个关

系可以存储为一个文件。在 Visual FoxPro 中,一个关系就是一个表文件。

属性:二维表中垂直方向的列称为属性,有时也称为字段。

域:属性的取值范围称为域。

元组:二维表中水平方向的行称为元组,有时也称为记录。

码:又称为关键字。二维表中的某个属性,若它的值唯一地标识了一个元组,则

称该属性为候选码。若一个关系有多个候选码,则选定其中一个为主码,这个属

性称为主属性。

学出版社

职教技术出版中心

www.abook.cn

Page 14: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·6·

外部关键字或外键码:如果关系模式 R 的一个属性集 X,不是本关系模式中的

关键字,而是另一个关系模式 S 的关键字,那么称 X 是 R 的外部关键字,即 R

引用了 S 中的信息。

关系模式:是对关系的描述,它包括关系名、组成该关系的属性名、属性到域的

映像。通常简记为

关系名(属性名 1,属性名 2,…,属性名 n)

在 Visual FoxPro 中表示为表结构:

表名(字段名 1,字段名 2,…,字段名 n)

例如:

学生信息管理数据库

学生(学号(字符型,10),姓名(字符型,10),性别(字符型,2),学院(字符

型,6),专业编码(字符型,3),班级编码(字符型,8))

专业(专业编码(字符型,3),专业(字符型,10))

班级(班级编码(字符型,8),班级名称(字符型,10))

课程(课程号(字符型,6),课程名称(字符型,36),开课部门(字符型,6))

成绩(学号(字符型,10),课程号(字符型,6),成绩(数值型,6,2),学期(字

符型,16))

2.关系运算

对关系数据库进行查询时,若要找到用户关心的数据,就需要对关系进行一定的关

系运算。关系运算有两种:一种是传统的集合运算(并、差、交、广义笛卡儿积等);

另一种是专门的关系运算(选择、投影、连接)。

传统的集合运算(并、差、交、广义笛卡儿积)不仅涉及关系的水平方向(即二维

表的行),而且涉及关系的垂直方向(即二维表的列)。

关系运算的操作对象是关系,运算的结果仍为关系。专门的关系运算包括以下三种。

(1)选择

选择运算是根据某些条件对关系作水平分割,选出符合条件的元组。也就是说,选

择运算是在二维表中选择满足指定条件的行。

例如,选择关系“学生”中,性别为“女”的元组,结果如表 1-2 所示。

表 1-2 学生表选择运算结果

学号 姓名 性别 学院 专业编码 班级编码

901130107 马晓闪 女 经贸系 113 9011301

901130108 于南南 女 经贸系 113 9011301

901130109 杨扬 女 经贸系 113 9011301

(2)投影

投影运算是对一个关系进行垂直分割,删去关系中的某些属性(列),以及重新安

排属性(列)的排列次序。

Page 15: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元一 数据库设计

·7·

例如,在关系“学生”中,选择“学号、姓名、性别”属性进行投影运算,或者选

择“姓名、性别、学号”属性进行投影运算,结果分别如表 1-3(a)和(b)所示。

表 1-3 学生表投影运算结果

(a) (b) 学号 姓名 性别 姓名 性别 学号

901130101 张波 男 张波 男 901130101

901130102 方韡 男 方韡 男 901130102

901130103 程正辉 男 程正辉 男 901130103

901130104 淡汉鹏 男 淡汉鹏 男 901130104

901130105 李盼龙 男 李盼龙 男 901130105

901130106 朱敏 男 朱敏 男 901130106

901130107 马晓闪 女 马晓闪 女 901130107

901130108 于南南 女 于南南 女 901130108

901130109 杨扬 女 杨扬 女 901130109

(3)连接

连接运算是从两个关系的笛卡儿积中选取属性间满足一定条件的元组。

例如,在关系“学生”和关系“班级”中,连接条件“学生.班级编码=班级.班

级编码”,结果如表 1-4 所示。

表 1-4 学生表与班级表连接运算结果

学号 姓名 性别 学院 专业编码 班级编码 a 班级编码 b 班级名称

901130101 张波 男 经贸系 113 9011301 9011301 会计 0901 班

901130102 方韡 男 经贸系 113 9011301 9011301 会计 0901 班

901130103 程正辉 男 经贸系 113 9011301 9011301 会计 0901 班

901130104 淡汉鹏 男 经贸系 113 9011301 9011301 会计 0901 班

901130105 李盼龙 男 经贸系 113 9011301 9011301 会计 0901 班

901130106 朱敏 男 经贸系 113 9011301 9011301 会计 0901 班

901130107 马晓闪 女 经贸系 113 9011301 9011301 会计 0901 班

901130108 于南南 女 经贸系 113 9011301 9011301 会计 0901 班

901130109 杨扬 女 经贸系 113 9011301 9011301 会计 0901 班

对关系数据库的实际操作,往往是以上三种运算的综合应用。

例如,在关系“学生”和关系“班级”中,连接条件为“学生.班级编码=班级.班

级编码”,选择关系“学生”中性别为“女”的元组,将“学生.学号、学生.姓名、

学生.性别、班级.班级名称”等属性进行投影,结果如表 1-5 所示。

表 1-5 综合应用结果

学号 姓名 性别 学院 专业编码 班级名称

901130107 马晓闪 女 经贸系 113 会计 0901 班

901130108 于南南 女 经贸系 113 会计 0901 班

901130109 杨扬 女 经贸系 113 会计 0901 班

学出版社

职教技术出版中心

www.abook.cn

Page 16: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·8·

任务二 数据库设计实施

1.了解数据库设计的基本概念和基本步骤。

2.学会使用 E-R 图方法设计简单数据库。

3.完成学生管理数据库的设计。

一、设计基础

数据库设计是指对于一个给定的应用环境,提供一个确定最优数据模型与处理模式

的逻辑设计,以及一个确定数据库存储结构与存取方法的物理设计,建立起既能反映现

实世界信息和信息联系,满足用户数据要求和加工要求,又能被某 DBMS 接受,同时

能实现系统目标并有效存取数据的数据库。

从本质上来讲,数据库设计是将数据库系统与现实世界进行密切的、有机的、协调

一致的结合过程。

1.数据库的设计步骤

数据库的设计可分为五个阶段:需求分析、概念设计、逻辑设计、物理设计及数据

库调试、评价和维护。

需求分析:对现实世界要处理的对象(组织、部门、企业等)进行详细调查,用

数据流程图、数据字典描述系统,为概念设计打下基础。

概念设计:用 E-R 图方法设计出系统的概念模型。

逻辑设计:把概念模型转换为关系数据模型,并对各关系进行规范化处理。

物理设计:物理设计也称数据库的物理实现。要根据数据量、数据查询和更新的

频率来选用 DBMS,然后确定数据的存储结构、存取路径、数据存放的位置、

存储分配等。用 DDL 语言创建数据库、表以及其他数据库对象。

数据库调试、评价和维护:对数据库进行加载调试,对试运行中的系统进行评价。

数据库的维护工作主要表现在故障恢复、数据库重组和重构。

这里主要介绍概念设计和逻辑设计两个方面的内容。

2.概念设计

概念设计是用 E-R 图方法设计数据库系统的概念模型,即对数据库系统中全局数据

逻辑结构的描述。

Page 17: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元一 数据库设计

·9·

(1)概念模型基本概念

实体:客观存在并可以相互区分的事物称为实体。实体可以指人,可以指物;可以

指实际的对象,如房屋、汽车;也可以指概念性的东西,如一种感情、一种嗜好;可以

指事物本身,也可以指事物与事物间的联系。

联系:一个实体集中的实体与另一个实体集中的实体之间的对应关系。两个实体之

间的联系可分为如下三类。

一对一联系(1∶1):若对于实体集 A 中的每一个实体,实体集 B 中至多有一个

实体与之联系,反之亦然,则称实体集 A 与实体集 B 具有一对一联系,记为 1∶

1。例如,一个班只有一个班主任,一个班主任只管理一个班。实体“班”与实

体“班主任”的联系为一对一的联系。

一对多联系(1∶N):若对于实体集 A 中的每一个实体,实体集 B 中有 N 个实

体(N≥0)与之联系;反之,对于实体集 B 中的每一个实体,实体集 A 中至多

有一个实体与之联系,则称实体集 A 与实体集 B 具有一对多联系,记为 1∶N。

例如,一个部门有多个职工,一个职工只能属于一个部门。实体“部门”与实体

“职工”是一对多的联系。

多对多联系(N∶M):若对于实体集 A 中的每一个实体,实体集 B 中有 N 个实

体(N≥0)与之联系,反过来,对于实体集 B 中的每一个实体,实体集 A 中有

M 个实体(M≥0)与之联系,则称实体集 A 与实体集 B 具有多对多联系,记为

N∶M。例如,一个学生可以学习多门课程,一门课程可以由多名学生学习。实

体“学生”与实体“课程”是多对多的联系。

(2)概念结构的设计步骤

第一步,数据抽象与局部视图设计。利用分类、聚集、概括等抽象机制对需求分析

阶段收集到的数据进行组织处理,形成实体、实体的属性、标识实体的码,确定实体之

间的联系类型,设计分体 E-R 图。

第二步,视图的集成。将第一步得到的分体 E-R 图综合成一个总体 E-R 图,先是

合并,解决各分 E-R 图之间的冲突问题,生成初步 E-R 图;然后修改消除不必要的冗

余,生成基本 E-R 图。

3.E-R 方法

E-R 方法(entity-relationship approach)即实体-联系方法。E-R 方法所要讨论的是

如何画 E-R 图,也就是如何用 E-R 图表示实体、实体间的联系。此方法被广泛用于数

据库设计及面向对象的设计中。

E-R 图模型有三种基本成分:实体、联系和属性。该方法的要点如下。

1)以长方形表示实体,在长方形框内写上实体名。

2)以菱形表示实体间的联系,在菱形框内写上联系名,用连线将菱形框分别与有

关的实体相连接。画出具有实体和联系类型的 E-R 图。

3)用椭圆形表示实体(或联系)的有关属性,并标出实体与属性的联系。

学出版社

职教技术出版中心

www.abook.cn

Page 18: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·10·

例 1-1 学生与课程是两个不同的实体。假设学生有学号、姓名、性别、出生日期

等属性;课程有课程号、课程名称等属性。一个学生在每学期可以选择多门课程学习,

一门课程可以由多名学生来选择学习,每个学生所学的每门课程在每个学期里都有一个

成绩。它们之间存在多对多的联系,如图 1-4 所示。

成绩 学期

学生

学号

姓名

性别

出生日期

选修 课程

课程号

课程名称

MN

图 1-4 学生与课程之间的 E-R 图

此例中需要强调的是联系的属性。例如,图中“成绩”和“学期”两个属性,它们既

不是实体“学生”的属性,也不是实体“课程”的属性,而是联系“选修”的属性。因为

它们描述的是学生学习课程的关系,即某位学生在某个学期学习某门课程所取得的成绩。

4.逻辑设计

将概念模型转换为关系数据模型的过程称为逻辑设计。其转换规则如下。

1)一个实体转换为一个关系,实体的属性就是该关系的属性,实体的关键字就是

该关系的关键字。

2)一个联系也可转换为一个关系,与该联系相连的各个实体的关键字,以及联系

的属性可转换为关系的属性。这种关系的关键字有以下几种情况:①如果联系为一对一

联系,则所连接的各实体的关键字均可作该关系的关键字;②如果联系为一对多联系,

则关系的关键字为多(N)端实体的关键字;③如果联系为多对多联系,则关系的关键

字为所连接的各实体的组合。

3)具有相同关键字的关系可以合并为一个关系。

例 1-2 图 1-4 所示的 E-R 图,是 “学生”与“课程”之间的 N∶M 联系,请导

出其关系数据模型。

解:①先把“学生”和“课程”两个实体直接转换为两个关系。其中,“学号”属

性为“学生”关系的主关键字,“课程号”属性为“课程”关系的主关键字。②再把联

系“选修”也转换为关系,将实体“学生”的“学号”属性和实体“课程”的“课程号”

属性一并放入“选修”关系中,“学号”和“课程号”属性联合起来作为主关键字。转

换后的关系模型如下。

学生(学号,姓名,性别,出生日期)

课程(课程号,课程名称)

选修(学号,课程号,成绩,学期)

Page 19: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元一 数据库设计

·11·

二、设计实施

1.学生管理系统模块结构图

图 1-5 为学生管理系统模块结构图。

学生管理主程序

系统登录模块

信息输入管理 信息查询管理 统计报表管理

图 1-5 学生管理系统模块结构

2.学生管理数据库设计需求

1)每个系包含多个专业,一个专业只隶属于某一个系;将每个专业的学生按 25~

50 人分为各个教学班级。

2)学生的学号是唯一确定某个学生的标识,学生的性别属性只能是“男”或者是

“女”。可随时查询学生的姓名、性别、班级、专业、所在系等基本信息。

3)课程的课程号是唯一确定某门课的标识,已经开设的课程不能删除。每学期,

每位学生可以选修多门课程,每一门课程也可以被多名学生选修。

4)对于某门课成绩的记载,必须是在籍学生,并且该门课程是学校已经开设的课

程,成绩按百分制,不能为负数。

5)学院对系、专业、课程等都有一套编码,其中系编码为两位字符、专业编码为

三位字符、课程编码为六位字符。

3.学生管理数据库概念设计

1)根据设计需求,找出实体,确定并列出需要存储的实体及属性清单。

实体有系、专业、班级、学生和课程,如表 1-6 所示。

学出版社

职教技术出版中心

www.abook.cn

Page 20: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·12·

表 1-6 实体及属性清单

名称 类型 数据类型 长度 说明

学生 实体

学号 属性 字符型 10 学生编号

姓名 属性 字符型 10 学生的姓名,任意合法字符

性别 属性 字符型 2 学生的性别

出生日期 属性 日期型 出生时间间接表示年龄

班级 实体

班级编码 属性 字符型 8 班级编号

班级名称 属性 字符型 10 班级的名称

专业 实体

专业编码 属性 字符型 3 专业的编号

专业 属性 字符型 20 专业的名称

系 实体

系编码 属性 字符型 2 系的编号

系名 属性 字符型 16 系的名称

课程 实体

课程号 属性 字符型 6 课程的编号

课程名称 属性 字符型 36 课程的名称

2)分析实体间的联系,设计画出分体 E-R 图。

每个系包含多个专业,每个专业只属于某个系。实体“系”与实体“专业”之间是

1∶N 的从属联系。

每个专业包含多个班级,每个班级只属于某个专业。实体“专业”与实体“班级”

之间是 1∶N 的从属联系。

每个班级包含多名学生,每位学生只属于某个班级。实体“班级”与实体“学生”

之间是 1∶N 的从属联系。

每一位学生在每学期可以选择多门课程学习,每一门课程可以由多名学生来选择学

习,实体“学生”与实体“课程”之间是 N∶M 的从属联系。

分别画出各个分体 E-R 图如图 1-6~图 1-9 所示。

系编码

系名

从属 专业

专业编码

专业

N1

图 1-6 系与专业之间的分体 E-R 图

专业

专业编码

专业

从属 班级

班级编码

班级名称

N1

图 1-7 专业与班级之间的分体 E-R 图

Page 21: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元一 数据库设计

·13·

学生

学号

姓名

性别

出生日期

从属 班级

班级编码

班级名称

1N

图 1-8 班级与学生之间的分体 E-R 图

成绩 学期

学生

学号

姓名

性别

出生日期

选修 课程

课程号

课程名称

MN

图 1-9 学生与课程之间的分体 E-R 图

3)将分体 E-R 图集成为总体 E-R 图,如图 1-10 所示。

N

1

从属 2

系编码

系名

从属 1 专业

专业编码

专业

N1

1

成绩 学期

MN 学生

学号

姓名

性别

出生日期

选修 课程

课程号

课程名称

从属 3

N

班级

班级编码

班级名称

图 1-10 学生管理数据库总体 E-R 图

学出版社

职教技术出版中心

www.abook.cn

Page 22: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·14·

4.学生管理数据库逻辑设计

1)分别将实体和联系转换为关系。

实体关系:

系(系编码,系名)

专业(专业编码,专业)

班级(班级编码,班级名称)

学生(学号,姓名,性别,出生日期)

课程(课程号,课程名称)

联系关系:

从属 1(专业编码,系编码)

从属 2(班级编码,专业编码)

从属 3(学号,班级编码)

选修(学号,课程号,成绩,学期)

2)将联系关系与实体关系的相同关键字合并为新的关系。

实体关系“专业”与联系关系“从属 1”合并,去掉一个重复属性“专业编码”,形

成新的关系“专业”:

专业(专业编码,专业,系编码)

实体关系“班级”与联系关系“从属 2”合并,去掉一个重复属性“班级编码”,形

成新的关系“班级”:

班级(班级编码,班级名称,专业编码)

实体关系“学生”与联系关系“从属 3”合并,去掉一个重复属性“学号”,形成新

的关系“学生”:

学生(学号,姓名,性别,出生日期,班级编码)

3)将“选修”关系改名为“成绩”。

成绩(学号,课程号,成绩,学期)

4)最终的学生管理数据库的关系模型。

系(系编码,系名)

专业(专业编码,专业,系编码)

班级(班级编码,班级名称,专业编码)

学生(学号,姓名,性别,出生日期,班级编码)

课程(课程号,课程名称)

成绩(学号,课程号,成绩,学期)

习 题 一

一、选择题

1.关系数据库管理系统的三种基本关系操作是( )。

Page 23: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元一 数据库设计

·15·

A.选择、投影和连接 B.输入、编辑和浏览

C.添加、删除和修改 D.排序、索引和查询

2.数据库设计的根本目标是要解决( )。

A.数据共享问题 B.数据安全问题

C.大量数据存储问题 D.简化数据维护

3.下列叙述中正确的是( )。

A.数据库系统是一个独立的系统,不需要操作系统的支持

B.数据库设计是指设计数据库管理系统

C.数据库技术的根本目标是要解决数据共享的问题

D.以上三种说法都不对

4.数据库系统的核心是( )。

A.数据模型 B.数据库管理系统

C.数据库 D.数据库管理员

5.用树形结构表示实体之间联系的模型是( )。

A.关系模型 B.网状模型

C.层次模型 D.以上三个都是

6.下列叙述中不正确的是( )。

A.数据库减少了数据冗余

B.数据库中的数据可以共享

C.数据库避免了一切数据重复

D.数据库具有较高的数据独立性

7.( )是存储在计算机内有结构的数据的集合。

A.数据库系统 B.数据库

C.数据库管理系统 D.数据结构

8.在数据库中,数据的物理独立性是指( )。

A.数据库与数据库管理系统的相互独立

B.用户程序与数据库管理系统的相互独立

C.用户的应用程序与存储在磁盘上数据库中的数据是相互独立的

D.程序与数据库中数据的逻辑结构是相互独立的

9.关系模型中的关系是指数据库中的( )。

A.各字段之间的关系 B.各记录之间的关系

C.所有数据之间的关系 D.数据之间有特定结构的二维表

10.有两个关系 R、S:

学出版社

职教技术出版中心

www.abook.cn

Page 24: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·16·

由关系 R 通过运算得到关系 S,则所使用的运算为( )。

A.选择

B.投影

C.插入

D.连接

二、填空题

1.在关系数据库中,把数据表示成二维表,每一个二维表称为 。

2.关系数据库管理系统能实现的专门关系运算包括选择、连接和 。

3.在关系运算中,要从关系模式中指定若干属性组成新的关系,该关系运算称

为 。

4.关系模式是对关系的描述,它包括关系名、组成该关系的 、属性到域

的映射。

5.设有学生和班级两个实体,每个学生只能属于一个班级,一个班级可以有多名

学生,则学生和班级实体之间的联系类型是 。

三、应用题

1.假设一个图书馆借阅管理数据库要求提供下述服务。

(1)可随时查询书库中现有书籍的品种、数量与存放位置。所有各类书籍均可由书

号唯一标识。

(2)可随时查询书籍借还情况。包括借书人单位、姓名、借书日期、应还日期。图

书馆规定:任何人可借多种书,任何一种书可以为多个人所借,借书证号有唯一性。

(3)当需要购书时,可通过数据库中保存的出版社的电报、电话、邮编及地址等信

息向有关书籍的出版社增购有关书籍。约定一个出版社可出版多种书,同一种书仅为一

个出版社出版,出版社名具有唯一性。

根据上述情况,设计满足需求的 E-R 图。

2.某厂生产多种产品,每种产品又要使用多种零件,一种零件可能装在多种产品

上。每种零件由一种材料制造,每种材料可用于不同零件的制造。有关产品、零件、材

料的属性如下。

产品:产品号(GNO),产品名(GNA),产品单价(GUP)

零件:零件号(PNO),零件名(PNA),单重(UW),单价(UP)

材料:材料号(MNO),材料名(MNA),计量单位(CU),单价(MUP)

生产各产品需要各种零件数为 GQTY,各零件需要材料数为 PQTY。产品、零件、

材料之间的 E-R 图如图 1-11 所示。

请将图 1-11 所示的 E-R 图转换为关系数据模型。

Page 25: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元一 数据库设计

·17·

图 1-11 产品、零件、材料之间的总体 E-R 图

学出版社

职教技术出版中心

www.abook.cn

Page 26: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元二 项目建立及操作

本单元包括四个任务,即

任务一,启动与退出 Visual FoxPro 6.0;

任务二,使用 Visual FoxPro 6.0 用户界面;

任务三,设置 Visual FoxPro 6.0 工作环境;

任务四,创建及管理项目文件。

任务一 启动与退出 Visual FoxPro 6.0

熟练掌握 Visual FoxPro 6.0 软件的启动和退出操作。

一、启动 Visual FoxPro 6.0

启动 Visual FoxPro 6.0 的方式有以下四种。

1)利用菜单启动。单击“开始”按钮,选择“程序”/“Microsoft Visual FoxPro 6.0”/

“Microsoft Visual FoxPro 6.0”命令,即启动 Visual FoxPro 6.0 并打开其工作窗口。

2)利用快捷方式启动。在桌面上建立一个快捷方式图标,双击该图标即可启动 Visual

FoxPro 6.0。

3)利用窗口或资源管理器。双击已经建立的项目文件、数据库文件、表文件、程

序文件或窗体文件,即可启动 Visual FoxPro 6.0。

4)利用运行命令启动。单击“开始”按钮,弹出“开始”菜单,选择“运行”命

令,打开“运行”对话框,单击“浏览”按钮,找到“VFP6.EXE”程序,单击“确定”

按钮即可启动 Visual FoxPro 6.0。

二、退出 Visual FoxPro 6.0

退出 Visual FoxPro 6.0 的方式有以下四种。

1)选择“文件”/“退出”命令。

2)单击工作窗口右上角的“关闭”按钮。

Page 27: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元二 项目建立及操作

·19·

3)在命令窗口中输入“Quit”命令。

4)双击工作窗口左上角的控制菜单图标。

任务二 使用 Visual FoxPro 6.0 用户界面

1.了解 Visual FoxPro 6.0 主界面的基本功能。

2.学会定制工具栏操作。

3.掌握命令窗口的基本操作。

4.掌握 Visual FoxPro 6.0 的菜单、命令、程序三种工作方式。

5.了解 Visual FoxPro 6.0 的文件类型。

一、Visual FoxPro 6.0 的主界面

Visual FoxPro 6.0 的主界面主要由菜单栏、工具栏、命令窗口、工作区以及状态栏

构成,如图 2-1 所示。

命令窗口状态栏

工作区

工作栏

菜单栏

标题栏

图 2-1 Visual FoxPro 6.0 的主界面

1.标题栏

标题栏位于工作窗口的第一行,它包含 Visual FoxPro 程

序图标、系统标题(Microsoft Visual FoxPro)、“关闭”按钮、

“最小化”按钮和“最大化”按钮五个对象。

(1)程序图标

程序图标是位于标题栏最左侧的小狐狸形象图标。单击该

图标,可以打开系统窗口控制菜单,如图 2-2 所示。利用系统

图 2-2 系统窗口控制菜单

学出版社

职教技术出版中心

www.abook.cn

Page 28: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·20·

窗口控制菜单,可以移动系统窗口,并改变系统窗口的大小。双击系统程序图标,可以

关闭 Visual FoxPro 6.0。

(2)系统标题

系统标题是系统窗口的名称。默认的标题是“Microsoft Visual FoxPro”,用户可以

使用_Screen 命令或者_VFP 命令改变它的内容。例如,在命令窗口中输入命令

_SCREEN.Caption="学生管理数据库应用系统",或者 _VFP. Caption="学生管理数据库

应用系统",都可以将系统窗口的名称改为“学生管理数据库应用系统”。

(3)“最小化”按钮

单击“最小化”按钮,可将系统窗口缩小成图标放在桌面底部的任务栏中。若要恢

复窗口,可单击任务栏中的系统图标。

(4)“最大化”按钮

单击“最大化”按钮,可将系统窗口设置为最大化。

(5)“关闭”按钮

单击“关闭”按钮,可以关闭 Visual FoxPro 6.0 系统窗口,退出 Visual FoxPro 6.0。

2.菜单栏

Visual FoxPro 菜单栏中有 8 个下拉式菜单项:文件(F)、编辑(E)、显示(V)、

格式(O)、工具(T)、程序(P)、窗口(W)、帮助(H)。菜单栏为用户使用 Visual FoxPro

命令提供了便捷的途径,Visual FoxPro 6.0 系统的大部分功能都可以通过菜单来实现。

3.工具栏

在菜单栏下方由按钮组成的行就是一个工具栏。工具栏是专为使用鼠标设置的,用

于快速执行常用的命令。常用工具栏如图 2-3 所示。

图 2-3 “常用”工具栏

除了常用工具栏之外,Visual FoxPro 6.0 还提供了其他 10 个工具栏:报表控件、报

表设计器、表单控件、表单设计器、布局、查询设计器、打印预览、调色板、视图设计

器和数据库设计器。

(1)显示或隐藏工具栏

工具栏会随着某一种类型文件的打开而自动打开。例如,当新建或打开一个数据库

文件时,将自动显示“数据库设计器”工具栏。当关闭数据库文件后,该工具栏也将自

动关闭。用户也可以通过“显示”菜单,设置打开多个工具栏。

选择“显示”/“工具栏”命令,可弹出“工具栏”对话框,如图 2-4 所示。要想显

示或隐藏某些工具栏,可单击选中或取消选中相应的工具栏选项,然后单击“确定”按

钮,便可显示或隐藏指定的工具栏。

Page 29: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元二 项目建立及操作

·21·

图 2-4 “工具栏”对话框

(2)定制工具栏操作

为了方便操作,用户可以创建自己的工具栏,或者修改现有的工具栏,统称为定制

工具栏。例如,为“学生管理系统”创建一个“学生管理”工具栏,具体操作步骤如下。

1)选择“显示”/“工具栏”命令,弹出“工具栏”对话框。

2)单击“新建”按钮,弹出“新工具栏”对话框,输入“学生管理”,如图 2-5

所示。

图 2-5 “新工具栏”对话框

3)单击“确定”按钮,弹出“定制工具栏”对话框,同时出现一个空的“学生管

理”工具栏,如图 2-6 所示。

图 2-6 “定制工具栏”对话框

学出版社

职教技术出版中心

www.abook.cn

Page 30: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·22·

4)分别将“定制工具栏”中的各个功能按钮选择拖动至“学生管理”工具栏上

即可。

5)最后关闭“定制工具栏”对话框。

注意:要删除工具栏中的某个按钮,可直接将其拖动到工具栏之外。

4.命令窗口

命令窗口用于输入并执行命令。在命令窗口中输入的每一条命令在按 Enter 键以后

将被立即执行。命令窗口可以保存已执行过的命令,并且这些命令可以再执行。

打开和关闭命令窗口的操作如下。

1)关闭:选择“窗口”/“隐藏”命令,或单击命令窗口右上角的“关闭”按钮。

2)打开:选择“窗口”/“命令窗口”命令即可。

与其他 Windows 窗口一样,可以任意调整命令窗口的大小、移动命令窗口以及关闭

命令窗口。命令窗口关闭以后,若要重新显示,选择“窗口”/“命令窗口”命令即可。

5.工作区

工作区通常用于显示操作的结果。例如,使用 List 命令可以在工作区显示当前表中

的记录,使用 DIR 命令可以在工作区显示表文件信息,等等。

要清除屏幕上工作区的内容可在命令窗口中输入 clear 命令,或者选择“窗口”/“清

除”命令。

6.状态栏

状态栏位于 Visual FoxPro 6.0 工作窗口的最下方,用于显示当前的工作状态。

二、Visual FoxPro 6.0 的工作方式

Visual FoxPro 6.0 提供了三种工作方式:菜单方式、命令方式和程序方式。

1.菜单方式

使用菜单栏或工具栏中的命令来完成任务,对于数据库最终用户来说是最常用的一

种工作方式。菜单栏和工具栏使用户可以通过直观的操作完成指定的任务。

2.命令方式

Visual FoxPro 6.0 专门提供了一个命令窗口用于输入执行命令。如果命令窗口被关

闭了,可选择“窗口”/“命令窗口”命令来打开命令窗口。

Visual FoxPro 6.0 中的命令不区分大小写,即命令可以用大写字母也可以用小写字

母书写。另外,对于较长的命令可以只输入命令的前四个字母。

Page 31: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元二 项目建立及操作

·23·

3.程序方式

对于复杂而又经常重复的数据管理任务,使用程序方式既可以极大地提高工作效率

又可以避免出错。程序方式就是将完成数据管理任务所需要执行的一系列命令,放到一

个文件中保存起来,该文件称为程序文件,需要时执行该程序文件即可。

三、Visual FoxPro 6.0 的文件类型

在 Visual FoxPro 6.0 中,文件种类虽然繁多,但是这些文件大体上可以分为三大类:

数据库文件、文档文件和程序文件。

1.数据库文件

数据库文件是用来存储数据库数据的文件,主要有数据库容器文件、表文件、索引

文件等。

(1)数据库容器文件

数据库容器文件的扩展名为.DBC 和.DCT,其中.DBC 为数据库的主文件扩展名,.DCT

为数据库的备注文件扩展名。

数据库容器文件存储了该数据库所包含的表、视图、连接和存储过程等。需要注意

的是,数据库容器文件中并未存储表本身,表另外存储在表文件中。

(2)表文件

表是关系数据库中用来存储数据的主体,表文件的扩展名为.DBF 和.FPT。其

中,.DBF 为表的主文件扩展名,主文件用于存储固定长度的数据;.FPT 为表的备注文

件扩展名,备注文件用于存放可变长度的数据。

(3)索引文件

索引的主要作用是提高检索数据的速度。Visual FoxPro 6.0 中主要有两种与表有关

的索引:复合索引和单一索引。

复合索引文件的扩展名为.CDX。在一个复合索引文件中,可以为一个表建立多个

索引标识。每一个索引标识代表一种处理及显示记录的顺序。

单一索引文件的扩展名为.IDX,单一索引文件仅由一个索引关键字和其对应记录

的物理位置所组成。

2.文档文件

文档文件是 Visual FoxPro 6.0 用来存放用于创建某些对象的数据文件,其结构与数

据库中的表文件完全相同,只是文件扩展名不一样。文档文件主要包括表单文件、报表

文件、菜单文件以及项目文件等。

(1)表单文件

表单是用户所熟悉的用于数据输入与输出的图形界面。表单文件扩展名为.SCX

和.SCT,其中.SCX 为表单的主文件,.SCT 为表单的备注文件。

学出版社

职教技术出版中心

www.abook.cn

Page 32: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·24·

(2)报表文件

报表文件为用户打印数据库数据提供了方便灵活的途径。报表文件的扩展名为.FRX

和.FRT。

(3)菜单文件

菜单文件用于保存使用菜单设计器创建菜单程序时所产生的设计数据。菜单文件的

扩展名为.MNX 和.MNT。

(4)项目文件

项目文件利用项目管理器将应用程序的所有文件集合成一个有机的整体,以图示和

树形结构的方式组织和显示这些文件。项目文件的扩展名为.PJX。

3.程序文件

程序是由命令构成的语句序列。针对一个具体的应用所开发的程序,可以极大地简

化操作,提高工作效率,还可以让没有数据库知识的用户能够使用数据库。程序文件主

要包括源程序文件、编译后的程序文件和应用程序文件等。

(1)源程序文件

默认的源程序文件扩展名为.PRG,但 Visual FoxPro 6.0 为了与众多的程序文件相区

别,又增加了以.MPR 和.QPR 为扩展名的源程序文件。.MPR 是菜单程序的扩展名。.QPR

是查询程序的扩展名。

(2)编译后的程序文件

为了提高程序的执行速度,允许用户对源程序进行编译。编译后的程序文件名与源

程序文件名相同,但是其扩展名不同。

(3)应用程序文件

利用项目管理器可以将数据文件、文档文件和程序文件打包到一个应用程序文件

中,生成扩展名为.APP 或.EXE 的应用程序文件。如果生成的是.APP 应用程序文件,则

需要在 Visual FoxPro 6.0 环境下运行;如果生成的是.EXE 应用程序文件,则可以在操作

系统环境下直接运行。

任务三 设置 Visual FoxPro 6.0 工作环境

1.掌握使用“选项”命令设置系统工作环境。

2.学会使用 SET 命令设置系统工作环境。

一、使用“选项”命令设置系统工作环境

Visual FoxPro 6.0 在启动时通常使用默认值设置系统工作环境。如果默认配置不能

Page 33: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元二 项目建立及操作

·25·

满足用户的需要,那么可以重新设置系统工作环境。

在 Visual FoxPro 6.0 中,可以使用“选项”命令或者 SET 命令进行附加的配置设定,

也可以使用配置文件进行设置。这里只介绍“选项”命令和 SET 命令的设置方法。

下面以设置工作目录(注:可以是以自己名字或学号命名的文件夹)为例说明其

具体操作步骤。

1)选择“工具”/“选项”命令,弹出“选项”对话框,如图 2-7 所示。

2)选择要设置的选项卡,如“区域”选项卡。在选项卡中选择要设置的选项,如

“日期格式”下拉列表框,选择“汉语”选项。

3)选择 “文件位置”选项卡,选择“默认目录”选项,再单击“修改”按钮,弹

出“更改文件位置”对话框,在对话框中选中“使用默认目录”复选框,然后在文本框

中输入文件存放的目录路径,如“d:\zx”,单击“确定”按钮。

4)单击“设置为默认值”按钮,然后单击“确定”按钮。

图 2-7 “选项”对话框

在“选项”对话框中设置环境,包括主窗口标题、默认目录、项目、编辑器、调试

器及表单工具选项、临时文件存储、拖放字段对应的控件和其他选项等内容,共有 12

个选项卡。表 2-1 列出了各个选项卡的设置功能。

表 2-1 “选项”对话框中的选项卡

序号 选项卡 设 置 功 能

1 显示 显示界面选项,如是否显示状态栏、时钟、命令结果或系统信息

2 常规 是否设置警告声、数据输入与编程选项设置等

3 数据 表选项,如是否使用 Rushmore 优化,是否使用索引强制唯一性,记录锁定方式等

4 远程数据 远程视图默认值设置,连接默认值设置

5 文件位置 默认目录位置、帮助文件以及其他辅助文件存储的位置设置

6 表单 表单设计器选项设置,如网格线、量度单位、最大设计区、使用模板等

7 项目 项目管理器选项设置,是否提供向导、双击时运行或修改文件以及源代码管理选项

8 控件 “表单控件”工具栏中的可视类库和 ActiveX 控件选项的添加和移去设置

学出版社

职教技术出版中心

www.abook.cn

Page 34: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·26·

续表

序号 选项卡 设 置 功 能

9 区域 设置日期、时间、货币及数字的格式

10 调试 调试器显示及跟踪选项的设置,如使用的字体与颜色

11 语法着色 区分程序代码元素所用的字体及颜色,如注释、关键字

12 字段映象 设置字段类型映象的类及数据库选项

注意:使用“选项”命令可以临时设置或永久设置系统的工作环境。

若要设置临时系统工作环境,应在“选项”对话框中选择适当的选项,然后单击“确

定”按钮。临时设置的系统工作环境将一直起作用直到退出 Visual FoxPro 6.0 为止。

若要设置永久系统工作环境,应在“选项”对话框中选择适当的选项,然后单击“设

置为默认值”按钮,最后单击“确定”按钮。

二、使用 SET 命令设置系统工作环境

在 Visual FoxPro 6.0 中,可以使用 SET 命令设置临时系统工作环境。SET 命令通常

在程序中使用,也可在命令窗口中执行。

1.设置默认工作目录

命令格式:

SET DEFAULT TO [盘符:\文件夹]

命令功能:

指定默认的磁盘或文件夹目录。

例如,在命令窗口中输入命令指定 D 盘下 zx 文件夹为当前默认目录。

SET DEFAULT TO d:\zx 或

SET DEFAULT TO “d:\zx”

2.设置文件的搜索路径

命令格式:

SET PATH TO [<路径列表清单>]

命令功能:

指定一份在查找文件时要被搜索的文件夹目录的列表清单。

说明:当文件的搜索路径多于一个时,可用逗号或者分号来分隔各个路径。例如,

SET PATH TO C:\users, D:\zx, d:\文本 或

SET PATH TO "C:\users, D:\zx, d:\文本"

Page 35: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元二 项目建立及操作

·27·

3.设置日期显示格式

命令格式:

SET DATE [TO] AMERICAN|ANSI|BRITISH|FRENCH|GERMAN

|ITALIAN|JAPAN|USA|MDY|DMY|YMD|LONG|SHORT

命令功能:

设置日期的显示格式。

命令中各个短语所定义的日期格式如表 2-2 所示。

表 2-2 常用日期格式

短语 格式 短语 格式

AMERICAN mm/dd/yy USA mm-dd-yy

ANSI yy.mm.dd MDY mm/dd/yy

BRITISH/FRENCH dd/mm/yy DMY dd/mm/yy

GERMAN dd.mm.yy YMD yy/mm/dd

ITALIAN dd-mm-yy LONG yyyy 年 m 月 d 日

JAPAN yy/mm/dd SHORT yyyy/m/d

4.SET ECHO ON|OFF

该命令用于控制是否打开跟踪窗口,观察程序的运行,默认状态为关闭跟踪窗口,

即 SET ECHO OFF。在程序调试时可以将其设置为 ON,即 SET ECHO ON。

5.SET STEP ON|OFF

该命令用于控制是否打开跟踪窗口以单步执行命令的方式跟踪程序的执行,默认状

态为以非单步执行命令的方式跟踪程序的执行,即 SET STEP OFF。在程序调试时可以

将其设置为 ON,即 SET STEP ON。

其他常用的 SET 命令如表 2-3 所示。

表 2-3 常用的 SET 命令

序号 SET 命令 命 令 功 能

1 SET STATUS BAR ON|OFF 是否显示状态栏

2 SET TALK ON|OFF 是否在屏幕上显示命令执行的结果

3 SET CLOCK ON|OFF 是否显示时钟

4 SET BELL ON|OFF 是否在数据输入时发出“嘟”声

5 SET ESCAPE ON|OFF 控制是否可使用 Esc 键来中断程序的执行

6 SET SAFETY ON|OFF 控制是否要在文件或数据被破坏之前发出警告

7 SET EXCLUSIVE ON|OFF 是否指定以独占方式打开数据库

8 SET DELETE ON|OFF 控制是否要处理被删除的记录

学出版社

职教技术出版中心

www.abook.cn

Page 36: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·28·

续表

序号 SET 命令 命 令 功 能

9 SET EXACT ON|OFF 指定如何执行两个字符串的比较操作(精确或模糊)

10 SET CENTURY ON|OFF 控制在日期显示中是否使用 4 位年号

11 SET HOURS TO [12|24] 指定显示时钟是 12 或 24 小时制

12 SET MARK TO [<日期显示分隔符>] 设置用来分隔日期中年、月、日的字符

任务四 创建及管理项目文件

1.掌握项目创建的操作方法,完成学生管理项目文件的创建。

2.学会使用项目管理器,熟练掌握打开和关闭项目的操作。

3.了解项目管理器的定制操作。

一、创建项目文件

在 Visual FoxPro 中,一个应用程序包含许多个文件,如数据库文件、查询文件、表

单文件、报表文件和命令文件等。这些文件彼此独立,存放在不同的文件夹中,既难于

管理又不便于维护。为了解决这个问题,Visual FoxPro 将应用程序的所有文件集合成一

个有机的整体,形成一个项目文件。项目文件的扩展名为.PJX。

项目文件可以利用 Visual FoxPro 提供的项目管理器打开。项目管理器是组织数据和

对象的可视化操作工具。项目管理器将项目文件中集合的所有文件根据其文件类型放置

在不同的选项卡中,并采用图示和树形结构的方式组织和显示这些文件,针对不同类型

的文件提供不同的操作。

Visual FoxPro 6.0 提供了两种创建新项目文件的方法:菜单方式和命令方式。

1.用菜单方式创建学生管理项目文件

1)选择“文件”/“新建”命令,或者单击常用工具栏上的“新建”按钮,弹出“新

建”对话框,如图 2-8 所示。

2)在“文件类型”区域,选中“项目”单选按钮,然后单击“新建文件”按钮,

弹出“创建”对话框,如图 2-9 所示。

3)在“创建”对话框的“项目文件”文本框中输入项目的名称“学生管理”;然后

单击“保存”按钮,系统立刻创建学生管理项目文件,并用项目管理器打开该文件,如

图 2-10 所示。

Page 37: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元二 项目建立及操作

·29·

图 2-8 “新建”对话框 图 2-9 “创建”对话框

图 2-10 “学生管理”项目文件

2.用命令方式创建学生管理项目文件

在命令窗口中输入 CREATE PROJECT 命令,即可创建新的项目。

命令格式:

CREATE PROJECT [<文件名>|?]

命令功能:

该命令用于创建一个新的项目文件。

说明:

1)<文件名>参数用于指定要创建的项目文件名称。

2)如果在命令中使用? 参数,那么当执行该命令时,系统将弹出“创建”对话框,

要求用户输入项目文件名称以及选择保存该项目的文件夹。

例如,在命令窗口用 CREATE PROJECT 命令创建学生管理项目文件。

CREATE PROJECT 学生管理

学出版社

职教技术出版中心

www.abook.cn

Page 38: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·30·

系统执行完上述命令后,在当前目录中创建一个名为“学生管理”的项目文件,并

立即用项目管理器打开该文件。

二、打开和关闭项目文件

在 Visual FoxPro 中可以随时打开一个已有的项目,也可以随时关闭一个打开的项

目。Visual FoxPro 6.0 同样也提供了两种打开项目的方法:菜单方式和命令方式。

1.菜单方式

1)选择“文件”/“打开”命令,或者单击常用工具栏上的“打开”按钮 ,弹出

“打开”对话框,如图 2-11 所示。

图 2-11 “打开”对话框

2)在“打开”对话框中选择要打开项目的文件夹,然后选择要打开的项目名,如

“学生管理”。

3)单击“确定”按钮,系统即可打开所选项目。

2.命令方式

在命令窗口,通过输入命令的方式,打开一个已有的项目。

命令格式:

MODIFY PROJECT [<文件名>|?]

命令功能:

该命令用于打开一个已有的项目。

说明:

1)<文件名>参数用于指定要打开的项目文件名称。

2)如果在命令中使用? 参数,那么当执行该命令时,系统将弹出“打开”对话框,

要求用户选择保存该项目的文件夹以及项目文件。

例如,在命令窗口用 MODIFY PROJECT 命令打开“房产管理”项目。

Page 39: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元二 项目建立及操作

·31·

MODIFY PROJECT 房产管理

系统执行完上述命令后,立即用项目管理器打开“房产管理”项目文件,如图 2-12

所示。

图 2-12 “房产管理”项目文件

3.关闭项目文件

若要关闭项目文件,只需单击项目管理器右上角的“关闭”按钮 即可。

三、项目管理器的基本功能

1.功能选项卡

项目管理器包含“全部”、“数据”、“文档”、“类”、“代码”、“其他”六个选项卡。

“全部”选项卡:用于显示和管理项目管理器中的所有文件,包括数据、文档、类、

代码、其他等的全部内容。

“数据”选项卡:用于显示和管理数据库、自由表和查询三种类型文件。

“文档”选项卡:用于显示和管理表单、报表和标签三种类型文件。

“类”选项卡:用于显示和管理所有的类库文件。

“代码”选项卡:用于显示和管理程序、API 库和应用程序三种类型文件。

“其他”选项卡:用于显示和管理菜单、文本文件和其他文件三种类型文件。

2.展开和折叠符号

“+”号:表示后面的选项还有一个或者多个子项没有展开,单击“+”号可以展开

其子项。

“-”号:表示选项的子项已经展开,单击“-”号可以把展开的子项折叠起来。

3.命令按钮

“新建”按钮:创建一个新文件或对象。

学出版社

职教技术出版中心

www.abook.cn

Page 40: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·32·

“添加”按钮:把一个已经存在的文件添加到项目中。

“修改”按钮:打开所选的文件进行修改。

“浏览”按钮:在浏览窗口中显示选中表的内容。

“关闭”按钮:关闭一个数据库。

“打开”按钮:打开一个数据库。

“移去”按钮:从项目中移去或者删除指定的文件或对象。

“连编”按钮:连编一个项目文件或建立应用程序。

“预览”按钮:在打印预览方式下,显示选定的报表或标签。

“运行”按钮:执行指定的查询、表单或程序。

四、使用项目管理器

在项目管理器中,用户可以通过可视化的直观操作在项目中创建、添加、修改、移

去指定的文件,设置主文件和连编应用程序。在项目管理器中操作最方便的方法是使用

相应的命令按钮。项目管理器的右侧同时可以显示六个按钮,根据所选定文件的不同,

将出现不同的按钮组。

1.创建文件

要在项目管理器中创建文件,首先要确定创建文件的类型。例如,要创建一个数据

库文件,必须在项目管理器中首先选择“数据库”选项,如图 2-13 所示。

图 2-13 创建一个新的数据库

只有选定了文件类型,“新建”按钮才可以使用。单击“新建”按钮或选择“项目”

/“新建文件”命令,即可打开相应的设计器以创建一个新文件。图 2-13 所示的操作可

以打开数据库设计器。

需要注意的是,在项目管理器中创建的文件会自动包含在该项目文件中,而选择“文

件”/“新建”命令创建的文件不属于任何项目文件。

Page 41: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元二 项目建立及操作

·33·

2.添加文件

利用项目管理器可以把一个已经存在的文件添加到项目文件中,具体操作步骤

如下。

1)选择要添加的文件类型。例如,要添加一个数据库到项目文件中,则应在项目

管理器的“数据”选项卡中选择“数据库”选项。

2)单击“添加”按钮或选择“项目”/“添加文件”命令,弹出“打开”对话框,

在“打开”对话框中选择要添加的文件。

3)单击“确定”按钮,将选择的文件添加到项目文件中。

在 Visual FoxPro 中,新建或添加一个文件到项目中并不意味着该文件已经合并到项

目文件中。事实上,每一个文件仍然都以独立文件的形式存在。某个项目包含某个文件

只是表示该文件与项目建立了一种关联。

3.修改文件

利用项目管理器可以修改项目文件中指定的文件,具体操作步骤如下。

1)选择要修改的文件。例如,选择数据库中的一个表。

2)单击“修改”按钮或选择“项目”/“修改文件”命令,将根据要修改的文件类

型打开相应的修改界面。此例中系统将打开表设计器。

3)在表设计器中修改选择的文件。

如果被修改的文件同时包含在多个项目中,修改的结果对于其他项目也有效。

4.移去文件

如果项目中包含的文件不再需要,可以从项目中移去。具体操作步骤如下。

1)选择要移去的文件。

2)单击“移去”按钮或选择“项目”/“移去文件”命令,弹出如图 2-14 所示的提

示框。

图 2-14 移去文件提示框

3)若单击“移去”按钮,系统仅仅从项目中移去所选择的文件,被移去的文件仍

存在于原目录中;若单击“删除”按钮,系统则不仅从项目中移去文件,还将从磁盘中

删除文件,所以文件将不复存在。

学出版社

职教技术出版中心

www.abook.cn

Page 42: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·34·

5.设置主文件

主文件作为整个项目的启动文件,可以是菜单、表单、查询或程序。在每一个项目

中必须指定一个主文件,也只能指定一个主文件。

一般来说,用户在项目中创建的第一个程序(或者菜单、表单、查询等),系统会

自动将其设置为默认的主文件。如果系统指定的主文件不符合要求,可以人工设置主文

件。具体操作步骤如下。

1)选择要设置主文件的文件。例如,选择程序选项下的“主程序”程序文件。

2)右击,从弹出的快捷菜单中选择“设置主文件”命令,或选择“项目”/“设置

主文件”命令。

设置一个主文件后,主文件名在项目管理器中显示为黑体,如图 2-15 所示。

图 2-15 设置主文件

6.连编应用程序

连编应用程序就是把一个项目文件管理器中的各个文件和组件连接编译成一个应

用程序文件。连编的结果有两种形式,应用程序文件(.APP)和可执行文件(.EXE)。

具体操作步骤如下。

1)在项目管理器中单击“连编”按钮,弹出“连编选项”对话框,如图 2-16 所示。

2)在“连编选项”对话框中选择适当的选项,然后单击“确定”按钮。

图 2-16 “连编选项”对话框

Page 43: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元二 项目建立及操作

·35·

“连编选项”对话框中的各个选项含义如下。

重新连编项目:创建和连编项目文件。

连编应用程序:将项目编译成一个应用程序文件(.APP)。

连编可执行文件:将项目编译成一个可执行文件(.EXE)。

连编 COM DLL:将项目中的类信息编译成一个动态链接库(.DLL)。

重新编译全部文件:重新编译项目中的所有文件,并为每一个源文件创建目标文件。

显示错误:系统在连编结束后,立即显示编译中出现的错误。

连编后运行:连编完成后,立即执行应用程序或可执行程序。

重新生成组件 ID:系统将安装和注册项目的 OLE 服务程序。

五、定制项目管理器

定制项目管理器可以改变项目管理器窗口的外观。例如,调整项目管理器窗口的大

小,移动项目管理器窗口的显示位置;也可以折叠项目管理器窗口、拆分项目管理器窗

口以及使项目管理器中的选项卡永远浮在其他窗口的上方。

1.改变项目管理器窗口的大小和位置

项目管理器窗口和其他 Windows 窗口一样,可以随时改变其窗口的大小以及显示位

置。将鼠标指针放置在窗口的标题栏上,拖动鼠标即可移动项目管理器。将鼠标指针指

向窗口的顶端、底端、两边或四个角上,拖动鼠标便可以扩大或缩小它的尺寸。

2.折叠项目管理器窗口

项目管理器的右上角的箭头按钮,用于折叠或展开项目管理器。 用于折叠, 用

于展开,如图 2-17 所示。

图 2-17 折叠/还原项目管理器

学出版社

职教技术出版中心

www.abook.cn

Page 44: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·36·

3.拆分项目管理器

在项目管理器中单击选择一个选项卡,然后将它拖离项目管理器,如图 2-18 所示。

图 2-18 拆分项目管理器的选项卡

4.设置选项卡的顶层显示

对于项目管理器窗口中已拆分的选项卡,可以单击选项卡上的图钉图标,使其始终

显示在屏幕的最顶端,这样选项卡就会浮在其他窗口的上方,不会被其他窗口遮挡,如

图 2-19 所示。

图 2-19 设置选项卡的顶层显示

习 题 二

一、选择题

1.Visual FoxPro 6.0 是一个( )。

Page 45: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元二 项目建立及操作

·37·

A.数据库 B.关系数据库

C.数据库管理系统 D.数据库系统

2.Visual FoxPro 的命令窗口可以( )。

A.移动位置 B.关系数据库

C.隐藏窗口 D.以上都可以

3.若要退出 Visual FoxPro 系统,可以在命令窗口中输入( )命令。

A.CLOSE B.QUIT

C.EXIT D.以上命令都可以

4.显示与隐藏命令窗口的错误操作是( )。

A.单击常用工具栏上的“命令窗口”按钮

B.退出 Visual FoxPro,再重新打开

C.分别按 Ctrl+F4 和 Ctrl+F2 组合键

D.通过“窗口”菜单下的“命令窗口”选项来切换

5.在“选项”对话框的“文件位置”选项卡中可以设置( )。

A.表单的默认大小 B.默认目录

C.日期和时间的显示格式 D.程序代码的颜色

6.项目管理器的“数据”选项卡用于显示和管理( )。

A.数据库、自由表和查询 B.数据库、视图和查询

C.数据库、表单和报表 D.数据库、表和视图

7.要想将竖杠(|)作为日期型数据中的年月日分隔符,错误的设置命令是( )。

A.SET MARK TO“|” B.SET MARK TO'|'

C.SET MARK TO [|] D.SET MARK TO |

二、填空题

1.退出 Visual FoxPro 系统的命令是 。

2.Visual FoxPro 的三种工作方式为 、 和 。

3.SET 命令既可以在 中使用,也可以在 中使用。 科

学出版社

职教技术出版中心

www.abook.cn

Page 46: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

本单元包括三个任务,即

任务一,Visual FoxPro 语言基础;

任务二,简单程序设计;

任务三,设计与编制项目主程序。

任务一 Visual FoxPro 语言基础

1.熟悉了解常量、变量和数组。

2.掌握表达式与运算符的使用方法。

3.了解函数及函数的种类,学会常用函数的使用。

一、常量和变量

常量是指在程序运行过程中始终保持不变的数据。变量是在程序运行的不同时刻,

其值会发生改变的量。

1.常量

常量包括除备注型和通用型以外的所有数据类型,主要有以下几种类型。

(1)数值型常量

数值型常量也就是常数,用来表示一个数的大小,由数字 0~9、小数点和正负号构

成,如 26、12、-34。为了表示很大或很小的数值型常量,也可以使用科学记数法的形

式表示。例如,1.234E10 表示 1.234×1010,5.67E-10 表示 5.67×10-10。

(2)字符型常量

字符型常量也称为字符串,是由半角定界符(单引号' '、双引号" "和方括号[ ])括

起来的字符串。许多常量都有定界符,定界符不作为常量本身的内容,但规定了常量的

类型以及常量的起始和终止界限如'数据库'、"abcd"、[学习"Visual FoxPro"]。

字符型常量的定界符必须成对匹配,不能一边用单引号而另一边用双引号。如果某

种定界符本身也是字符串的内容,则需要用另外一种定界符为该字符串定界。

Page 47: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·39·

注意:不包含任何字符的字符串(" ")称为空串,空串与包含空格的字符串(" ")

不同。

(3)日期型与日期时间型常量

日期型与日期时间型常量是用{ }括起来的包括日期和时间的数据,其格式为

{^YYYY-MM-DD[HH[:MM[:SS]][A/P]]}。例如,{^2011-12-20}表示 2011 年 12 月 20 日,

{^2012-1-12 10:18}表示 2012 年 1 月 12 日 10 点 18 分。

(4)逻辑型常量

逻辑型常量只有真假两个值。用.T.或.t.、.Y.或.y.表示逻辑真值,用.F.或.f.、.N.或.n.

表示逻辑假值。字母两边的英文句点不能省略。

(5)货币型常量

货币型常量用于表示货币值,使用时应加上货币符号。例如,$456.58、¥123。

2.变量

在 Visual FoxPro 中,常用的变量类型有:内存变量(分为简单内存变量和数组变量)、

字段变量和系统变量。

内存变量是独立于数据库以外、存储在内存中的临时变量。它通常用于存放程序运

行过程中所需要的原始数据、中间结果以及 终结果。

内存变量的数据类型由它所保存的数据的类型决定。当用户退出 Visual FoxPro 时,

内存变量将自动消失。

当内存变量与字段同名时,若要使用内存变量,要在引用的内存变量名称之前添加

“M.”。

字段变量是用户在定义表结构时所定义的字段名,它是一种多值变量。

数组变量是内存中连续的一片存储区域。它由一系列元素组成,数组中的各元素称

为数组元素。

系统变量是 Visual FoxPro 建立并维护的内存变量。这些变量的名称由系统定义,并

且以下划线“_”开头。

变量的类型与常量的类型相同。每一个变量的具体类型取决于其被赋予的值,因此

在不同时刻,一个变量可以存放不同类型的数据。

(1)简单内存变量

简单内存变量不必事先定义,可通过赋值来指定。变量的赋值命令有两种格式。

命令格式:

<内存变量名>=<表达式>

STORE<表达式>TO<变量名列表>|<数组名列表>

命令功能:

该命令用于为内存变量或数组变量赋值。

说明:

1)<表达式>:表达式可以由常量、变量、函数和运算符组成。该命令将表达式的

值赋予内存变量或数组变量。

学出版社

职教技术出版中心

www.abook.cn

Page 48: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·40·

2)<变量名列表>:内存变量列表。内存变量列表中的内存变量用逗号分隔。该命

令可以同时为多个内存变量赋值。

3)<数组名列表>:数组变量列表。数组变量列表中的数组变量用逗号分隔。

4)“=”是赋值号,不是数学上的等于号,它一次只能为一个内存变量或数组变量

赋值;STORE 命令可以同时为多个内存变量或数组变量赋值。例如,命令 STORE 3*4

TO a1,a2,b,同时为变量 a1、a2、b 赋值 12。

(2)数组

数组是按一定顺序排列的一组内存变量的集合,数组中的变量称为数组元素。数组

必须先定义后使用。

命令格式:

DIMENSION<数组名 1>(<行参数 1>[,<列参数 1>])

[,<数组名 2>(<行参数 2>[,<列参数 2>])] …

DECLARE<数组名 1>(<行参数 1>[,<列参数 1>])

[,<数组名 2>(<行参数 2>[,<列参数 2>])] …

命令功能:

该命令用于定义一维或二维数组。

说明:

1)DIMENSION 命令和 DECLARE 命令可以一次定义多个数组。

2)只设置<行参数>参数时,定义一维数组;同时设置<行参数>和<列参数>参数时,

定义二维数组。

3)系统规定<行参数>和<列参数>参数的下界为 1。

4)数组元素可以包含各种类型的数据,第一次定义时被赋值为.F.。

例如,命令 DIMENSION A(3), B(2,3) 定义了两个数组。

一维数组 A 含有 3 个元素:A(1)、A(2)、A(3)。

二维数组 B 含有 6 个元素:B(1,1)、B(1,2)、B(1,3)、B(2,1)、B(2,2)、B(2,3)。

(3)表达式输出

Visual FoxPro 为程序提供的? | ??命令是一种简单的表达式和数据输出命令。

命令格式:

? | ?? <表达式 1>[,<表达式 2>…]

命令功能:

?命令用于在新的一行输出表达式的值。??命令用于在当前行输出表达式的值。

说明:

<表达式 1>[,<表达式 2>…]:参数可以是由常量、变量、函数和运算符所组成的表

达式,也可以是内存变量或数据库表的字段变量。若要输出多个表达式的值,那么表达

式之间用逗号分隔。

例 3-1 在命令窗口中输入以下命令。

Page 49: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·41·

? "欢迎使用 Visual FoxPro!"

?n= 3*5

? "3乘以 5等于:",n

3乘以 5等于:15

(4)显示内存变量

可以使用 DISPLAY MEMORY 命令或 LIST MEMORY 命令来查看已定义的变量。

命令格式:

DISPLAY MEMORY [LIKE <通配符>]

LIST MEMORY [LIKE <通配符>]

命令功能:

该命令用于显示已定义的变量。

LIKE <通配符>子句是可选项,用于指定要显示与指定的模式相匹配的所有变量。

<通配符>是含有通配符的模式。通配符“*”可以匹配一个字符串;通配符“?”可

以匹配一个字符。例如,LIST MEMORY LIKE A*表示显示变量名以 A 开头的所有内存

变量。

(5)释放内存变量

为了节省存储空间,变量使用完以后应及时释放,可以使用以下命令来释放存储

空间。

RELEASE ALL 命令用于释放全部变量。

RELEASE <内存变量列表>命令用于释放指定的内存变量。

RELEASE ALL LIKE [LIKE <通配符> | EXCEPT <通配符>] 命令用于释放与指定模

式相匹配的变量,参数说明如下。

1)LIKE <通配符>子句用于指定要释放与指定的模式相匹配的所有变量。<通配符>是

含有通配符的模式。通配符“*”可以匹配一个字符串;通配符“?”可以匹配一个字符。

2)EXCEPT <通配符>子句用于指定要释放除与指定的模式相匹配之外的所有变量。

<通配符>是含有通配符的模式。

CLEAR MEMORY 命令用于释放全部变量。

二、表达式与运算符

表达式是指用运算符将常量、变量、字段或函数连接起来的有意义的式子。其类型

由表达式 终计算结果的数据类型决定,主要有数值型、字符型、日期型、关系型、逻

辑型。运算符包括算术运算符、字符运算符、关系运算符、逻辑运算符。不同表达式使

用的运算符不同,但运算符两边的数据类型必须相同,否则将因数据类型不匹配而出错。

1.数值表达式

数值表达式是由算术运算符将常量、变量、字段或函数连接起来的式子,其结果仍

学出版社

职教技术出版中心

www.abook.cn

Page 50: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·42·

为数值型数据。

算术运算符有+、-、*、/、** 或 ^。

优先级为**(^)、*、/、+、-。

*和/优先级相同,+和-优先级相同。同一优先级的算术运算符按照左优先的原则

从左到右计算。

例 3-2 计算数学算式2 3

3 2 1 49

5 3 4

( + )+-

+的值和

2b b 4ac

2a

当 a=2、b=1、c= 6

的值。

? (9^(1/3)-2/5)*((1+4^(2+3))/(3+4))

246.01

? (-1+(1^2-4*2*(-1))^(1/2))/(2*2)

0.50

2.字符表达式

字符表达式是由字符运算符将常量、变量、字段或函数连接起来的式子,其结果仍

为字符型数据。字符运算符两边的数据必须是字符型数据。

1)直接连接(+):将前后两个字符串首尾连接形成一个新的字符串。

2)去空连接(-):连接前后两个字符串,并将前字符串的尾部空格移至合并后新

字符串的尾部。例如,"ABC "+"CDE"结果为"ABC CDE","ABC " "CDE"结果为

"ABCCDE"。

3.日期表达式

日期表达式常用的运算符是“+”和“-”运算符。一个日期值加或减一个数值,

其结果仍为日期值。两个日期值相减,其结果为一个数值,表示两个日期相距的天数。

需要注意的是:两个日期值相加是无意义的。

例 3-3 日期计算示例。

? {^2011-10-20}+30 && 结果为{^2011-11-19}

? {^2011-10-20}-30 && 结果为{2011-09-20}

? {^2011-10-20}-{^2011-2-12} && 结果为 250

4.关系表达式

关系表达式是由关系运算符将数值表达式、字符表达式、日期表达式连接起来的表

达式,即<表达式 1><关系运算符><表达式 2>。

关系运算符的作用是比较两个表达式的大小或先后,运算结果为逻辑真或逻辑假,

分别用(.T.)和(.F.)表示。关系运算又称为比较运算,关系运算符及其含义如表 3-1

所示。

Page 51: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·43·

表 3-1 关系运算符

运算符 说明 运算符 说明

< 小于 <= 小于等于

> 大于 >= 大于等于

= 等于 == 字符串精确比较

< >、!=、# 不等于 $ 子串包含测试

运算符==和$仅适用于字符型数据。其他运算符适合于任何类型的数据,但除了日

期型和日期时间型数据、数值型和货币型数据可以比较之外,其他情况下两个操作数的

数据类型必须一致。

(1)数值型、货币型数据比较

按数值的大小比较,包括负号。例如,0>-12、$100<120。

(2)日期型、日期时间型数据比较

按年、月、日的先后进行比较,越早的日期或时间越小,越晚的日期或时间越大。

例如,{^2012-2-1} > {^2011-10-1}。

(3)逻辑型数据比较

逻辑真大于逻辑假,即.T. >.F. 。

(4)字符型数据比较

当比较两个字符串时,系统对两个字符串的字符自左向右逐个进行比较,一旦发现

两个对应字符不同,就根据这两个字符的排序序列决定两个字符串的大小。

字符串的大小取决于字符集中字符的排序次序,排在前面的字符小,排在后面的字

符大。在 Visual FoxPro 中,默认的字符排序名为 PinYin(拼音),但可以重新设置。

设置字符排序次序的命令:

SET COLLATE TO "<排序次序名>"

其中,排序次序名必须放在引号当中,排序次序名可以是“Machine”、“PinYin”或

“Stroke”。

Machine(机器)次序:按照机器内码顺序排序。西文字符是按照 ASCII 码的值排

列的:空格在 前面,大写 ABCD 字母序列在小写 abcd 字母序列的前面。因此,大写

字母小于小写字母。汉字根据它们的拼音顺序决定大小。

PinYin(拼音)次序:按照拼音次序排序。对于西文字符,空格在 前面,小写 abcd

字母序列在前,大写 ABCD 字母序列在后。

Stroke(笔画)次序:无论中文、西文,按照书写笔画的多少排序。

例 3-4 在不同的字符排序设置下,比较字符串大小。

SET COLLATE TO "Machine"

? "A"<"a", "a"<"abc", "一"<"二", "武汉"<"北京"

.T. .T. .F. .F.

SET COLLATE TO "PinYin"

? "A"<"a", "a"<"abc", "一"<"二", "武汉"<"北京"

学出版社

职教技术出版中心

www.abook.cn

Page 52: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·44·

.F. .T. .F. .F.

SET COLLATE TO "Stroke"

? "A"<"a", "a"<"abc", "一"<"二", "武汉"<"北京"

.F. .T. .T. .F.

(5)字符串精确比较与 EXACT 设置

在用双等号运算符(==)比较两个字符串时,只有当两个字符串完全相同(包括空

格以及各个字符的位置)时,运算结果才会是逻辑真.T.,否则为逻辑假.F.。

在用单等号运算符(=)比较两个字符串时,运算的结果与 SET EXACT ON|OFF 命

令的设置有关。

OFF:默认值,这时只要右边字符串与左边字符串的前面部分内容相匹配,结果为

逻辑真.T.,即字符串的比较因右边的字符串结束而终止。

ON:先在较短字符串的尾部加上若干个空格,使两个字符串的长度相等,然后再

进行精确比较。

例 3-5 字符串比较与 SET EXACT 设置。

SET EXACT OFF

?"数据库"="数据库", "数据库基础"="数据库", "数据库"="数据库基础", "数据库基

础"=="数据库"

.T. .T. .F. .F.

SET EXACT ON

? "数据库"="数据库", "数据库基础"="数据库", "数据库"="数据库基础", "数据库基

础"=="数据库"

.T. .F. .F. .F.

(6)子串包含测试

关系表达式“<字符型表达式 1>$<字符型表达式 2>”为子串包含测试,如果左字符

串是右字符串的一个子字符串,则结果为逻辑真.T.,否则为逻辑假.F.。例如,"数据库"

$ "数据库基础"的结果为.T.。

5.逻辑表达式

逻辑表达式是由逻辑运算符将关系表达式连接起来的表达式,运算结果为逻辑真或

逻辑假。

逻辑运算符有.NOT.(逻辑非)、.AND.(逻辑与)和.OR.(逻辑或)。

优先级别依次是:NOT.(逻辑非)、.AND.(逻辑与)和.OR.(逻辑或)。

例 3-6 不同运算符组成的表达式示例。

? "计算机" $ "计算机技术" AND "计算机" <> "计算机技术"

.T.

? 123>23 AND NOT( "计算机" <> "计算机技术")

.F.

Page 53: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·45·

三、常用函数

Visual FoxPro 为用户提供了大量的函数,每一个函数都有特定的数据运算或转换功

能。函数一般有若干个参数,但只能有一个运算结果,称为函数值或返回值。

函数的格式:函数名([<参数>[,<参数> …]])

函数调用可以出现在表达式中,表达式将函数的返回值作为自己运算的对象。函数

调用也可以作为一条命令使用,但此时系统忽略函数的返回值。

函数按照返回值的类型或功能,可分为数值型函数、字符型函数、日期函数、转换

函数和测试函数。

1.数值型函数

数值型函数的返回值为数值。

(1)绝对值函数

格式:

ABS (<数值表达式>)

功能:

求数值表达式的绝对值。

例 3-7 绝对值函数示例。

X=10

? ABS(-X), ABS(X)

10 10

(2)求 大值函数

格式:

MAX (<数值表达式 1>,<数值表达式 2> [, <数值表达式 3>…])

功能:

计算数值表达式的值,取较大者。

(3)求 小值函数

格式:

MIN (<数值表达式 1>,<数值表达式 2> [, <数值表达式 3>…])

功能:

计算数值表达式的值,取较小者。

例 3-8 大值和 小值函数示例。

? MAX(100, 135, 98), MIN(80, 90, -120)

135 -120

学出版社

职教技术出版中心

www.abook.cn

Page 54: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·46·

(4)圆周率函数

格式:

PI ( )

功能:

返回圆周率π。该函数没有参数。

(5)求平方根函数

格式:

SQRT (<数值表达式>)

功能:

计算数值表达式的平方根。参数不能为负数。

例 3-9 平方根函数示例。

? SQRT (3^2+4^2)

5.00

(6)取整函数

格式:

INT (<数值表达式>)

功能:

计算数值表达式的值,取整数部分。

例 3-10 取值函数示例。

? INT (345.789), INT(32767 / 7)- (32767 / 7)

345 0

(7)四舍五入函数

格式:

ROUND (<数值表达式>,<保留小数位数>)

功能:

计算数值表达式的值,根据保留小数位数进行四舍五入。

例 3-11 四舍五入函数示例。

? ROUND (345.789, 2), ROUND (345.789, 1), ROUND (345.789, 0), ROUND

(345.789,-1)

345.79 345.8 346 350

(8)求余数函数

格式:

MOD (<数值表达式 1>,<数值表达式 2>)

功能:

返回两个数值相除后所得的余数。<数值表达式 1>是被除数,<数值表达式 2>是除

数。余数的正负号与除数相同。如果被除数与除数同号,那么函数值为两数相除的余数;

Page 55: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·47·

如果被除数与除数异号,则函数值为两数相除的余数再加上除数的值。

例 3-12 余数函数示例。

?MOD(10,3),MOD(10,-3),MOD(-10,3),MOD(-10,-3)

1 -2 2 -1

2.字符型函数

字符型函数用于对字符型数据进行运算。

(1)查找子串函数

格式:

AT (<字符表达式 1>,<字符表达式 2>,[<数值表达式>])

功能:

查找<字符表达式 1>在<字符表达式 2>中的起始位置。如果设置了<数值表达式>,

则函数返回值为<字符表达式 1>在<字符表达式 2>中第<数值表达式>次出现的起始位置

值;如果省略了<数值表达式>,则函数返回值为<字符表达式 1>在<字符表达式 2>中第

一次出现的起始位置值;如果<字符表达式 1>不在<字符表达式 2>中,则函数返回值为 0。

例 3-13 查找子串函数示例。

?AT("A","ABCDABD"), AT("A","ABCDABD",2), AT("A","ABCDABD",3)

1 5 0

(2)取子串函数

格式:

LEFT (<字符表达式>,<数值表达式>)

RIGHT (<字符表达式>,<数值表达式>)

SUBSTR (<字符表达式>,<起始位置> [,<长度>])

功能:

LEFT( ) 从字符表达式左边开始,截取<数值表达式>指定长度的字符串。

RIGHT( ) 从字符表达式右边开始向左截取<数值表达式>指定长度的字符串。

SUBSTR( ) 从指定的起始位置开始,在字符表达式中截取指定长度的字符串。说明:

假设起始位置为 m,长度为 n。若省略 n,则从 m 开始截取以后的所有字符串;若 n 大

于从 m 开始的字符串长度,则从 m 开始截取以后的所有字符串;若 m 大于字符表达式

的长度,则截取的字符串为空字符串。

例 3-14 取子串函数示例。

? LEFT ("数据库管理系统", 6) &&返回值为"数据库"

? RIGHT ("数据库管理系统", 8) &&返回值为"管理系统"

? SUBSTR ("数据库管理系统", 7) &&返回值为"管理系统"

? SUBSTR ("数据库管理系统", 7,4) &&返回值为"管理"

? SUBSTR ("数据库管理系统",1 7,10) &&返回值为""

学出版社

职教技术出版中心

www.abook.cn

Page 56: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·48·

(3)生成空字符串函数

格式:

SPACE (<数值表达式>)

功能:

生成<数值表达式>指定数目的空格字符串。

(4)删除前后空格字符串函数

格式:

TRIM (<字符表达式>)

LTRIM(<字符表达式>)

ALLTRIM(<字符表达式>)

功能:

TRIM( ) 返回指定<字符表达式>的值去掉尾部空格后形成的字符串。

LTRIM( ) 返回指定<字符表达式>的值去掉前导空格后形成的字符串。

ALLTRIM( ) 返回指定<字符表达式>的值去掉前导和尾部空格后形成的字符串。

例 3-15 删除前后空格字符串函数示例。

? TRIM (" 数据库管理系统 ") &&返回值为"数据库管理系统"

? LTRIM (" 数据库管理系统 ") &&返回值为"数据库管理系统 "

? ALLTRIM (" 数据库管理系统 ") &&返回值为"数据库管理系统"

(5)字符串长度函数

格式:

LEN (<字符表达式>)

功能:

求字符串的长度(包括空格)。

例 3-16 字符串长度函数示例。

?LEN("中文 Visual FoxPro6.0")

20

(6)字符串替换函数

格式:

STUFF (<字符表达式 1>,<起始位置>,<字符个数>,<字符表达式 2>)

功能:

从指定的起始位置开始,用<字符表达式 2>替换<字符表达式 1>中指定个数的字

符串。

例 3-17 字符串替换函数示例。

? STUFF ("数据库技术与应用", 7, 4, "原理")

数据库原理与应用

Page 57: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·49·

3.日期函数

日期函数主要对日期型数据进行操作。

(1)系统时间函数

格式:

TIME ( )

功能:

返回系统当前时间。时间格式为 HH∶MM∶SS。

(2)系统日期

格式:

DATE ( )

功能:

返回系统当前日期。系统默认格式为 MDY,可以使用 SET DATE 命令自行设定日

期输出格式。

(3)年函数

格式:

YEAR (<日期型表达式>)

功能:

返回日期型表达式的年份。

(4)月函数

格式:

MONTH (<日期型表达式>)

功能:

返回日期型表达式的月份。

(5)日函数

格式:

DAY (<日期型表达式>)

功能:

返回日期型表达式的日。

例 3-18 年函数,月函数及日函数示例。

D={^2012-2-14}

? YEAR (D), MONTH (D), DAY(D)

2012 2 14

(6)星期函数

格式:

DOW (<日期型表达式>)

CDOW (<日期型表达式>)

学出版社

职教技术出版中心

www.abook.cn

Page 58: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·50·

功能:

DOW( ) 返回用数字 1~7 表示的星期值;1 表示星期天,2 表示星期一,……,7

表示星期六。CDOW( ) 返回星期的英文名称。

4.转换函数

数据的运算要求符合数据类型一致的原则。因此,若要对不同类型的数据进行运算,

那么必须通过转换函数将其转换为一致的数据类型。

(1)数值型转换为字符型函数

格式:

STR (<数值表达式>[,<长度>][,<小数位数>])

功能:

将<数值表达式>按设定的<长度>和<小数位数>转换成字符型数据。

说明:<长度>为转换后的字符串位数,若<长度>的设定值大于实际数值,则转换后

的字符串前补空格,若<长度>的设定值小于实际数值,则用*代替;若<小数位数>的设

定值大于实际数值,则转换后的字符串后补 0,若<小数位数>的设定值小于实际数值,

则对小数四舍五入。小数点和负号均占 1 位。

例 3-19 数值型转换为字符型函数示例。

? STR(123.4567, 6,2), STR(123.4567, 6,3), STR(123.4567, 8,4)

123.46 123.46 123.4567

(2)字符型转换为数值型函数

格式:

VAL (<字符型表达式>)

功能:

将数字字符串转换为数值。

说明:转换时遇到非数字字符时停止;若第一个字符就不是数字,则值为 0.00。

例 3-20 字符型转换为数值型函数示例。

? VAL("123A4567"), VAL("123.4567")+VAL("100B00")

123.00 223.46

(3)字符转换为 ASCII 函数

格式:

ASC (<字符型表达式>)

功能:

返回字符表达式第一个字符的 ASCII 码值。

(4)日期型转换为字符型函数

格式:

DTOC (<日期型表达式> [,1] )

功能:

将日期型表达式转换为字符串。

Page 59: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·51·

说明:若使用选项[,1],则转换为年月日的形式。

(5)字符型转换为日期型函数

格式:

CTOD (<字符型表达式>)

功能:

将字符型表达式转换为日期值。

(6)宏替换函数

格式:

& <字符型变量> [ . ]

功能:

替换出字符型变量的内容,即函数值是变量中的字符串。如果该函数与其后的字符

无明确分界,则要用“.”作为函数的结束标识。宏替换可以嵌套使用。

例 3-21 宏替换函数示例。

XM="姓名"

姓名="张三"

?XM, &XM

姓名 张三

5.测试函数

(1)值域测试函数

格式:

BETWEEN(<被测表达式>,<下限表达式>,<上限表达式> )

功能:

判断<被测表达式>的值是否在<下限表达式>和<上限表达式>的值之间。当<被测表

达式>的值在<下限表达式>和<上限表达式>的值之间时,函数返回逻辑真(.T.),否则函

数值为逻辑假(.F.)。

例 3-22 值域测试函数示例。

?BETWEEN(30,0,100), BETWEEN(300,0,100)

.T. .F.

(2)条件测试函数

格式:

IIF(<被测表达式>,<表达式 1>,<表达式 2> )

功能:

判断<被测表达式>的值,若为逻辑真(.T.),函数返回<表达式 1>的值;若为逻辑假

(.F.),函数返回<表达式 2>的值。

例 3-23 条件测试函数示例。

? IIF(30>100, "真", "假"), IIF(30<100, "真", "假")

假 真

学出版社

职教技术出版中心

www.abook.cn

Page 60: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·52·

(3)空值测试函数

格式:

ISNULL(<表达式> )

功能:

判断<表达式>的值是否为 NULL 值,若为 NULL 值,函数返回逻辑真(.T.);否则

函数返回逻辑假(.F.)。

(4)“空”值测试函数

格式:

EMPTY(<表达式>)

功能:

判断<表达式>的值是否为“空”值,若为“空”值,函数返回逻辑真(.T.);否则

函数返回逻辑假(.F.)。

这里所指的“空”值与 NULL 值是两个不同的概念。函数 EMPTY(NULL)的返回值

是逻辑假(.F.),ISNULL(NULL ) 的返回值是逻辑真(.T.)。另外,函数 EMPTY()的

参数可以是字符型、数值型、逻辑型、日期型等类型,不同类型的“空”值有不同的规

定,如表 3-2 所示。

表 3-2 不同类型数据的“空”值规定

数据类型 “空”值 数据类型 “空”值

数值型 0 字符型 空串、空格、制表符、回车、换行

货币型 0 逻辑型 .F.

整形 0 日期型 空(如 CTOD(""))

浮点型 0 日期时间性 空(如 CTOT(""))

双精度型 0 备注字段 空(无内容)

(5)记录个数测试函数

格式:

RECCOUNT (<工作区>)

功能:

测试指定工作区中表的记录个数。

说明:做过逻辑删除的记录也包括在内。

(6)表文件首测试函数

格式:

BOF ( )

功能:

测试表文件的记录指针是否指向第一条记录之前的文件起始标识(beginning of

file)。若是,函数返回逻辑真(.T.),否则函数返回逻辑假(.F.)。

Page 61: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·53·

说明:若表文件中不包含任何记录,函数返回逻辑真(.T.)。

(7)表文件尾测试函数

格式:

EOF ( )

功能:

测试表文件的记录指针是否指向 后一条记录之后文件结束标识(end of file)。若

是函数返回逻辑真(.T.),否则函数返回逻辑假(.F.)。

说明:若表文件中不包含任何记录,函数返回逻辑真(.T.)。

(8)检索测试函数

格式:

FOUND ( )

功能:

测试是否找到符合要求的记录。找到,函数返回逻辑真(.T.),否则函数返回逻辑

假(.F.)。

6.MessageBox 函数

格式:

MessageBox(<提示信息> [,<对话框属性> [,<对话框窗口标题>]])

功能:

显示一个用户自定义对话框,向用户传递消息,选择接受用户的响应。

说明:

1)<提示信息>指定对话框中要显示的信息。

2)<对话框属性>指定对话框的类型,对话框的类型参数如表 3-3 所示。

表 3-3 对话框类型参数及选项

按钮类型值 按钮类型 图标类型值 图标类型 焦点选项值 焦点选项

0 确定 0 无图标 0 第一个按钮

1 确定、取消 16 Stop 图标 256 第二个按钮

2 终止、重试、忽略 32 疑问图标 512 第三个按钮

3 是、否、取消 48 感叹号图标

4 是、否 64 信息图标

5 重试、取消

3)当用户从对话框中选择并单击某一按钮时,函数返回一个值,表示某个按钮选

中,如表 3-4 所示。

学出版社

职教技术出版中心

www.abook.cn

Page 62: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·54·

表 3-4 对话框函数返回值

返回值 说明 返回值 说明

1 选“确定”按钮 5 选“忽略”按钮

2 选“取消”按钮 6 选“是”按钮

3 选“终止”按钮 7 选“否”按钮

4 选“重试”按钮

例 3-24 MessageBox 函数示例。

MessageBox("完成数据库表的创建和数据装载!",64,"任务完成提示")

执行效果如图 3-1 所示。

图 3-1 MessageBox 函数执行效果

任务二 简单程序设计

1.掌握程序建立、编辑和运行的操作方法。

2.掌握程序中常用基本命令的使用方法。

3.了解结构化程序设计方法。

4.掌握选择结构语句、循环结构语句的用法。

5.学会设计编写简单的程序。

一、程序的概念

1.程序

程序是为实现特定目标,完成一定任务的相关指令的有序集合,这组指令被存放在

称为程序文件的源程序中。当运行程序时,系统会按照一定的次序自动执行包含在程序

文件中的指令。一个程序应该包括以下两个方面的内容。

Page 63: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·55·

1)对数据的描述:在程序中要指定数据的类型和组织形式,即数据结构。

2)对操作的描述:程序执行的步骤,即算法。

数据是操作的对象,操作的目的是对数据进行加工,以便得到预期的结果。一个程

序除了以上两个要素外,还应当采用程序设计方法进行设计,并且用一种计算机语言来

表示。

2.程序设计

要使计算机做某件事情,首先必须由人为其设计出一系列操作内容和步骤,然后借

助于计算机语言将其表示出来,这就是程序设计。程序设计包括问题分析、算法设计、

编写程序和测试与调试程序等基本步骤。

3.算法及其描述方法

(1)算法

算法是人们为解决具体问题所采取的方法和步骤。一个算法,应该具有以下特性。

1)有穷性:一个算法必须只包括有穷个操作步骤,能够在有限的时间内做完。

2)确定性:算法的每一步运算都必须有明确的解释,不能模棱两可。

3)可行性:算法中的每个步骤都必须能有效地执行,并可得到确定的结果。

4)输入:一个算法有零个或多个输入作为操作对象。输入可以是各种类型的数据。

5)输出:问题的结果。一个算法有一个或多个输出,它们往往是和输入有着某种

特定的关系。

(2)算法描述方法

算法要用适当的方式表示出来,以便程序设计人员可以按照其中的步骤编写程序。

表示一个算法的执行过程的方法有多种,常用的有程序流程图、N-S 图和自然语言等。

这里只介绍程序流程图。

程序流程图是用一些图框表示各种操作。常用的流程图符号如图 3-2 所示。

图 3-2 常用流程符号

例 3-25 要求从学生表中逐条输出男生的信息。

问题分析:从学生表中逐条输出男生的信息,需要遍历学生表中的所有记录,直到

表文件结束;同时还需要判断每名学生的性别是否为“男”。流程图如图 3-3 所示。

学出版社

职教技术出版中心

www.abook.cn

Page 64: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·56·

开始

打开表

表是否结束?

性别=“男”?

输出记录

移动记录指针

关闭表

结束

图 3-3 流程图

二、程序文件的建立与执行

程序的建立、编辑和运行可以采用三种方式,即项目管理器方式、菜单方式和命令

方式。

1.项目管理器方式

(1)建立程序文件

建立一个计算圆的面积的程序文件,具体操作步骤如下。

1)在项目管理器的“代码”选项卡中选择“程序”选项,单击“新建”按钮,打

开程序编辑窗口,如图 3-4 所示。

图 3-4 项目管理器和程序编辑窗口

Page 65: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·57·

2)在程序编辑窗口输入如下程序代码。

set talk off && 关闭系统对话

clear && 清除屏幕内容

r=5 && 定义圆的半径

A=PI()*r^2 && 计算圆的面积

? "圆的面积=", A && 在屏幕上输出计算结果

return && 结束程序,返回到系统

3)选择“文件”/“保存”命令,弹出“另存为”对话框,在对话框中输入文件名

“计算圆的面积”,然后单击“保存”按钮,保存程序文件如图 3-5 所示。

图 3-5 保存文件后的项目管理器和程序编辑窗口

(2)修改程序文件

修改程序文件,具体操作步骤如下。

1)在项目管理器的代码选项卡中选择要修改的程序文件名,单击“修改”按钮打

开程序编辑窗口。

2)在编辑窗口中修改程序内容。

3)选择“文件”/“保存”命令,保存程序文件。

(3)运行程序

在项目管理器的“代码”选项卡中选择要运行的程序文件名,单击“运行”按钮即

可完成程序的运行操作。

2.菜单方式

(1)建立程序文件

建立程序文件,具体操作步骤如下。

1)选择“文件”/“新建”命令,然后在弹出的“新建”对话框中选择“程序”单

选按钮,单击“新建文件”按钮打开编辑窗口。

2)在编辑窗口输入程序。

3)选择“文件”/“保存”命令,弹出“另存为”对话框,在对话框中指定程序文

件的存放位置和文件名,然后单击“保存”按钮,保存程序文件。

(2)修改程序文件

修改程序文件,具体操作步骤如下。

学出版社

职教技术出版中心

www.abook.cn

Page 66: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·58·

1)选择“文件”/“打开”命令,在弹出的“打开”对话框中选择“程序”文件类

型,然后选择要修改的程序文件名,单击“确定”按钮。

2)在编辑窗口修改程序。

3)选择“文件”/“保存”命令,保存程序文件。

(3)运行程序

选择“程序”/“运行”命令,在弹出的“运行”对话框中选择要运行的程序文件名,

如“计算圆的面积”,然后单击“运行”按钮即可运行指定的程序。

3.命令方式

(1)建立或编辑程序

在命令窗口中输入 MODIFY COMMAND 命令,可以建立或编辑指定的程序。

命令格式:

MODIFY COMMAND [<程序文件名>]

命令功能:

该命令用于建立或编辑指定的程序。

例如,创建或编辑“计算圆的面积”程序文件。

MODIFY COMMAND计算圆的面积

(2)运行程序

在命令窗口中输入 DO 命令,可以运行指定的程序。

命令格式:

DO <程序文件名>

命令功能:

该命令用于运行指定的程序。

例如,运行“计算圆的面积”程序文件。

DO计算圆的面积

三、程序中常用的命令

在建立程序的过程中,Visual FoxPro 提供了一些需要经常使用的命令,其中包括输

入/输出命令、注释命令、终止程序命令、系统状态设置命令等。

1.简单的输入/输出命令

(1)INPUT 命令

命令格式:

INPUT [<提示信息>] TO <变量名>

命令功能:

在程序执行到该命令时,系统首先在屏幕上显示用户设置的提示信息,然后等待用

Page 67: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·59·

户从键盘输入数据,并将其保存到指定的内存变量中。

说明:

1)<提示信息>:为用户设置的提示信息。

2)<变量名>:为内存变量。

3)INPUT 命令可以为内存变量输入数值、日期值、逻辑值和字符串。如果要输入

日期值,那么输入的日期值应采用花括号“{ }”括起来;如果要输入逻辑值,那么输入

的逻辑值应使用英文句点“.”括起来;如果要输入字符串,那么输入的字符串应使用定

界符。

4)INPUT 命令通常用于输入数值、日期值和逻辑值。

(2)ACCEPT 命令

命令格式:

ACCEPT [<提示信息>] TO <变量名>

命令功能:

在程序执行到该命令时,系统首先在屏幕上显示用户设置的提示信息,然后等待用

户从键盘输入数据,并将其保存到指定的内存变量中。

说明:

1)<提示信息>:为用户设置的提示信息。

2)<变量名>:为内存变量。

3)该命令只能接收字符型数据,用户在为内存变量输入字符串时可以不使用定界符。

例 3-26 在“计算圆的面积”程序中加入输入命令。

SET TALK OFF

CLEAR

INPUT "请输入圆的半径:" TO r && 提示并接收键盘输入

A=PI()*r^2

? "圆的面积=", A

RETURN

(3)WAIT 命令

命令格式:

WAIT [<提示信息>] [TO <变量名>] [WINDOW [AT <行>,<列>]] [TIMEOUT <秒数>]

命令功能:

在程序执行到该命令时,系统首先在屏幕上显示用户设置的提示信息,然后等待用

户从键盘输入一个字符,并将其保存到指定的内存变量中。

说明:

1)<提示信息>:为用户设置的提示信息。

2)<变量名>:为内存变量。

3)WINDOW 子句用于在屏幕上显示一个窗口以显示用户设置的提示信息。

4)AT <行>,<列>:用于设置 WINDOW 子句所显示的窗口在屏幕上的位置。如果省

学出版社

职教技术出版中心

www.abook.cn

Page 68: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·60·

略该子句,那么系统将在屏幕左上角显示 WINDOW 窗口。

5)TIMEOUT <秒数>:用于设置等待用户从键盘输入字符的时间。<秒数>参数为等

待的秒数。如果在指定的时间内用户未输入任何字符,那么系统将中止该命令的执行。

6)WAIT 命令在接受了用户输入的任意一个字符以后,自动执行其后的命令。

例如,下面的 WAIT 命令:

WAIT WINDOW "按任意键将清屏……"

命令执行时,在主窗口的右上角出现一个提示窗口,其中显示“按任意键将清

屏……”的信息。当用户按下任意键后,提示窗口关闭,程序会继续执行其他命令。

(4)基本屏幕编辑命令@…SAY…[GET]

格式输入命令

命令格式:

@ <行,列> SAY [<字符表达式>] GET <变量> [RANGE <数值表达式 1>,<数值表

达式 2>] [VALID <逻辑表达式>]

READ

命令功能:

首先在指定行、列的位置显示字符表达式,紧接着反显 GET 后变量的值。当执行

命令 READ 时,子命令 GET 被激活,其变量值处于编辑状态。

说明:

1)GET 后的变量若为内存变量,命令执行前必须对其赋初值;若为字段变量,必

须先将字段所在的表文件打开。

2)一个 READ 命令可以激活多个 GET 编辑区。

3)RANGE 子句中的<数值表达式 1>和<数值表达式 2>,分别表示数据编辑和显示

的上下限。

4)VALID <逻辑表达式>表示数据编辑和显示的条件范围。

格式输出命令

命令格式:

@<行,列>SAY <表达式>

命令功能:

在指定行、列的位置显示表达式的值。

说明:该命令一次只能输出一个变量或表达式的值。

例如,在命令窗口输入如下命令。

@ 2,10 SAY "中国制造"

@ 2,18 SAY "东方红卫星"

例 3-27 输入并输出一个学生的姓名。

SET TALK OFF

Page 69: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·61·

CLEAR

XM=SPACE(10)

@ 1,10 SAY "请输入学生的姓名:" GET XM

READ

@ 3,10 SAY "学生的姓名为:"+XM

RETURN

2.其他命令

在 Visual FoxPro 的程序中,经常需要使用的命令还有注释命令、清除屏幕命令、终

止命令、返回命令等。

(1)注释命令

命令格式:

NOTE | * | && [<注释内容>]

命令功能:

用于在程序中添加注释。

说明:

1)NOTE | *:该注释从行首开始,占用独立的一行。

2)&&:该注释即可从行首开始,占用独立的一行;也可以添加在某条语句的末尾。

程序中的注释只是为了阅读程序方便,专门给人看的,注释并不增加执行代码的长

度,在编译时注释被当作空白行跳过。一个恰当的注释行,对了解和维护程序是非常有

用的。

(2)清除屏幕命令

命令格式:

CLEAR [ALL]

命令功能:

该命令用于清除屏幕。

说明:

ALL 参数用于释放所有内存变量、数组以及用户定义的菜单和窗口,关闭所有打开

的表、索引等文件并选择第 1 工作区为当前工作区。

(3)终止程序命令

命令格式:

CANCEL

命令功能:

该命令用于终止程序的执行,返回命令窗口。

(4)RETURN 命令

命令格式:

RETURN [<表达式> | TO MASTER | TO <过程名>]

学出版社

职教技术出版中心

www.abook.cn

Page 70: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·62·

命令功能:

该命令用于结束当前程序的执行,如果该程序被另外一个程序调用,那么系统将程

序控制返回到调用程序,并执行调用处的下一条语句;如果该程序没有被另外一个程序

调用,那么系统将程序控制返回到命令窗口。

说明:

1)<表达式>:参数是一个表达式,用于将表达式的值作为函数值返回到调用程序。

该参数适用于用户自定义函数。

2)TO MASTER:用于将程序控制直接返回到主程序。如果省略该子句,那么系统

将逐层返回。

3)TO <过程名>:用于将程序控制返回到指定的过程。

四、程序的基本结构

程序结构是程序中命令或语句执行的流程结构。顺序结构、选择结构和循环结构是

程序的三种基本结构。

1.顺序结构

顺序结构是程序设计中 简单、 常用的基本结构。在顺序结构中,程序是按照语

句排列的先后次序逐条执行的。以下程序是一个简单的结构化程序。

SET TALK OFF

SELECT 1

USE 学生

ACCEPT "请输入学生的学号:" TO XH

LIST FOR 学号=XH

USE

RETURN

其中的语句均为顺序结构。这些语句的排列顺序就是程序的执行顺序。

例 3-28 利用基本屏幕编辑命令输入学生的信息,并将信息输出在屏幕上,然后,

按任意键清理屏幕并结束程序执行。

CLEAR && 清屏

DECLARE A(3) && 声明一个一维数组

STOR SPACE(10) TO A(1), A(2) && 给数组变量赋初值

A(3)=SPACE(2)

@ 1,10 SAY "输入学号:" GET A(1)

@ 2,10 SAY "请输入姓名:" GET A(2)

@ 3,10 SAY "请输入性别:" GET A(3)

READ

Page 71: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·63·

@ 9,10 SAY "您输入的学生信息如下:"

@ 10,10 SAY "学号:"+ A(1)

@ 11,10 SAY "姓名:" + A(2)

@ 12,10 SAY "性别:" + A(3)

WAIT WINDOW "按任意键将清屏并结束程序………"

CLEAR

RELEASE ALL && 释放所有变量

RETURN

2.选择结构

程序在运行时,一般情况下是按照语句的排列顺序逐条执行的。但有的时候,也需

要根据判断条件是否满足而决定程序的走向,这就需要在程序中使用选择结构语句。选

择结构语句是根据用户给定条件成立与否来决定执行哪一个分支程序。

(1)单/双分支结构

命令格式:

IF<条件>[THEN]

<语句序列 1>

[ELSE

<语句序列 2>]

ENDIF。

命令功能:

该命令用于判断给定的条件是否成立,若成立,执行语句序列 1;否则执行语句序

列 2。当 ELSE 子句缺省时,如果条件不成立,那么该命令将不执行任何语句,直接执

行 ENDIF 后面的命令。其流程结构如图 3-6 所示。

图 3-6 IF 语句结构

说明:

1)<条件>是一个关系表达式或逻辑表达式。

2)ELSE 子句是可选项。

3)IF 和 ENDIF 必须配对使用。

4)IF…ELSE…ENDIF 语句可以嵌套使用。也就是说,在 IF 语句中可以包含另外

的 IF 语句。

学出版社

职教技术出版中心

www.abook.cn

Page 72: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·64·

例 3-29 编写一段程序,用 IF 语句判断输入数据的奇偶性。

解题思路:能够被 2 整除的数是偶数,否则是奇数。判断的条件可以用 mod(输入

数据,2),看其余数是否等于 0;也可以用:输入数据/2-INT(输入数据/2)=0。

CLEAR

INPUT "输入一个十进制数:" TO n

IF MOD(n,2)=0 THEN

? n,"是一个偶数!"

ELSE

? n,"是一个奇数!"

ENDIF

RETURN

例 3-30 编写一段程序,判断某一年是否为闰年。

解题思路:闰年需满足以下两个条件之一。①能被 4 整除,但不能被 100 整除;

②能被 100 整除,又能被 400 整除。流程图如图 3-7 所示。

开始

输入年份 N

N 除以 4 余数为 0

N 除以 100 余数不为 0

输出 N 是闰年 输出 N 不是闰年

结束

N 除以 100 余数为 0

N 除以 400 余数为 0

图 3-7 程序流程图

Page 73: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·65·

CLEAR

INPUT "请输入某年的年份:" TO n

IF MOD(n,4)=0 AND MOD(n,100)<>0 THEN && 判断是否能被 4整除但不能被

100整除

? n,"年是一闰年!"

ELSE

IF MOD(n,100)=0 AND MOD(n,400)=0 THEN && 判断是否能被 100和 400整除

? n,"年是闰年!"

ELSE

? n,"年不是闰年!"

ENDIF

ENDIF

RETURN

(2)多分支结构

命令格式:

DO CASE

CASE<表达式 1>

<语句序列 1>

[CASE<表达式 2>

<语句序列 2>

CASE<表达式 n>

<语句序列 n>]

[OTHERWISE

<语句序列 n+1>]

ENDCASE

命令功能:

该命令将依次判断给定表达式的值是否为真,若某个表达式的值为真,则执行该

CASE 段的语句,然后执行 ENDCASE 后面的语句。如果所有的条件都不成立,则执行

OTHERWISE 与 ENDCASE 之间的命令,然后执行 ENDCASE 后面的语句。其流程结构

如图 3-8 所示。

说明:

1)<表达式>是一个关系表达式或逻辑表达式。

2)DO CASE 与第一个 CASE 之间不能有任何语句。

3)DO CASE 和 ENDCASE 必须配对使用。

4)DO CASE…ENDCASE 语句可以嵌套使用。也就是说,在 DO CASE 语句中可

以包含另外的 DO CASE 语句。

学出版社

职教技术出版中心

www.abook.cn

Page 74: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·66·

F

F

F

……

F

T表达式 1 语句序列 1

语句序列 n表达式 n

OTHERWISE

语句序列 2

语句序列 n+1

T

T

T

表达式 2

图 3-8 多分支语句结构

例 3-31 编程显示所输入月份的季节,若月份是 3、4、5,显示“春季”;月份是 6、

7、8,显示“夏季”;月份是 9、10、11,显示“秋季”;月份是 12、1、2,显示“冬季”;

月份是其他数据,则显示“错误数据!”。

CLEAR

INPUT "请输入一个月份:" TO n

DO CASE

CASE n=3 or n=4 or n=5

? n,"月是春季!"

CASE n=6 or n=7 or n=8

? n,"月是夏季!"

CASE n=9 or n=10 or n=11

? n,"月是秋季!"

CASE n=1 or n=2 or n=12

? n,"月是冬季!"

OTHERWISE

? " 错误数据!"

ENDCASE

RETURN

3.循环结构

循环结构也称为重复结构,是指程序在执行的过程中,其中的某段代码被重复执行

Page 75: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·67·

若干次。被重复执行的代码段通常称为循环体。循环结构通常由循环开始语句、循环体

和循环结束语句所构成。Visual FoxPro 提供了三种循环结构语句:DO WHILE…ENDDO

语句、FOR…ENDFOR 语句和 SCAN…ENDSCAN 语句。

(1)DO WHILE…ENDDO 语句

命令格式:

DO WHILE <循环条件表达式>

<语言序列>

[LOOP]

[EXIT]

ENDDO

命令功能:

在执行 DO WHILE 语句时,若循环条件为假,即结束循环,然后执行 ENDDO 之

后的语句;如果为真,那么执行循环体<语言序列>中的语句,当执行到 ENDDO 时,就

自动返回到 DO WHILE 子句重新判断给定的条件是否成立,以决定是否继续循环。其

流程结构如图 3-9 所示。

图 3-9 条件循环语句结构

说明:

1)<循环条件表达式>是一个关系表达式或逻辑表达式。

2)LOOP 语句是循环体中的特殊语句。当执行到 LOOP 语句时,系统将不再执行

其后的循环体语句,而直接返回到 DO WHILE,重新判断给定的逻辑表达式。

3)EXIT 语句也是循环体中的特殊语句。当执行到 EXIT 语句时,系统将不再执行

其后的循环体语句,而直接跳出循环,执行 ENDDO 之后的语句,即结束循环。

4)DO WHILE…ENDDO 语句可以嵌套使用。也就是说,在 DO WHILE 语句中可

以包含另外的 DO WHILE 语句,形成多重循环。

例 3-32 编程计算 1+2+3+…+100 的值。

解题思路:

① 设置两个变量 i 和 s。其中 i 变量作为循环控制变量,初值设置为 1,之后在 1~

100 按照每次增值为 1 不断变化去改变 i 变量中的数据;i 也作为被累加的数,每一次的

增值都累加到变量 s 中。s 用于保存累加的结果,因为 0 加上任何数都等于那个数本身,

所以 s 的初值设为 0。

② 设置算式:i=i+1 用于循环控制;s=s+i 用于计算累加结果。当 i 后=i 前+1 不断增

学出版社

职教技术出版中心

www.abook.cn

Page 76: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·68·

值时,s后=s前+i 也会随之增加 i 变量中的值,直到 i 的值超过 100 为止。

CLEAR

s=0

i=1

DO WHILE i<=100

s=s+i

i=i+1

ENDDO

? '1+2+3+…+100 =', s

RETURN

例 3-33 编程计算 100!的值。

解题思路:

① 设置两个变量 s 和 i。s 用来保存阶乘的结果,因为 1 乘以任何数都等于那个数

本身,所以 s 的初值设为 1。i 作为被乘的数,也作为循环控制变量。

② 设置算式:s=s*i 用于计算阶乘结果。

其他思路同例 3-32。

CLEAR

s=1

i=1

DO WHILE i<=100

s=s*i

i=i+1

ENDDO

? '100! =', s

RETURN

(2)FOR…ENDFOR 语句

命令格式:

FOR<变量> = <初值表达式> TO <终值表达式> [STEP <步长表达式>]

<语言序列>

[EXIT]

[LOOP]

ENDFOR | NEXT

命令功能:

在执行 FOR 语句时,系统首先将初值赋予循环控制变量,并保存终值和步长值,

然后判断循环控制变量的值是否超过终值。如果超过终值,那么执行 ENDFOR | NEXT

之后的语句,即结束循环;如果未超过终值,那么执行循环体中的语句,当执行到

ENDFOR | NEXT 时,系统将循环控制变量的值与步长值相加后再次存入循环控制变量,

并返回到 FOR,重新判断循环控制变量的值是否超过终值,如果未超过终值,那么将再

Page 77: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·69·

次执行循环体中的语句,依此往复,直到循环控制变量的值超过终值时即结束循环,执

行 ENDFOR | NEXT 之后的语句。

说明:

1)<变量>为循环控制变量。

2)<初值表达式> 和 <终值表达式>分别作为初值和终值。初值和终值可以是正值、

负值和零。

3)STEP <步长表达式>用于设置循环的步长。步长值可以是正值和负值,但不应为

零(步长为零时,FOR 循环将成为死循环)。如果步长值为 1,那么可以省略该子句。

4)LOOP 语句是循环体中的特殊语句。当执行到 LOOP 语句时,系统将不再执行

其后的循环体语句,而直接返回到 FOR,重新判断循环控制变量的值是否超过终值。

5)EXIT 语句是循环体中的特殊语句。当执行到 EXIT 语句时,系统将不再执行其

后的循环体语句,而直接跳出循环,执行 ENDFOR | NEXT 之后的语句,即结束循环。

6)FOR…ENDFOR | NEXT 语句可以嵌套使用。也就是说,在 FOR 语句中可以包

含另外的 FOR 语句,形成多重循环。

例 3-34 编程计算 S1=1+3+5+7+…+99 和 S2=2+4+6+…+100 的程序。

1)计算 S1=1+3+5+7+…+99:

CLEAR

s=0

FOR i=1 TO 99 STEP 2

s=s+i

NEXT

? "1+3+5+7+…+99=", s

RETURN

2)计算 S2=2+4+6+…+100:

CLEAR

s=0

FOR i=2 TO 100 STEP 2

s=s+i

NEXT

? "2+4+6+…+100=", s

RETURN

(3)SCAN…ENDSCAN 语句

命令格式:

SCAN [NOOPTIMIZE] [<范围>] [FOR <逻辑表达式 1>]

[WHILE <逻辑表达式 2>]

[<语句序列>]

[LOOP]

学出版社

职教技术出版中心

www.abook.cn

Page 78: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·70·

[EXIT]

ENDSCAN

命令功能:

SCAN 循环针对当前表进行循环,系统首先将记录指针定位到指定范围内满足给定

条件的首条记录上,然后判断函数 EOF( )是否为真。如果为真,那么执行 ENDSCAN 之

后的语句,即结束循环;如果为假,那么执行循环体中的语句,当执行到 ENDSCAN 时,

系统将记录指针自动定位到指定范围内满足给定条件的下一条记录上,并返回到SCAN,

重新判断函数 EOF( )是否为真,如果为假,那么将再次执行循环体中的语句,依此往复,

直到函数 EOF( )为真时即结束循环,执行 ENDSCAN 之后的语句。

说明

1)<范围>:指定的记录范围,默认值为 ALL。

2)FOR <逻辑表达式 1>:为给定的条件。

3)WHILE<逻辑表达式 2>:为给定的条件。但是在指定的记录范围内,如果遇到

不能满足给定条件的记录,那么系统将结束 SCAN 循环,执行 ENDSCAN 之后的语句。

4)NOOPTIMIZE 用于禁止优化 FOR 子句和 WHILE 子句。

5)LOOP 语句是循环体中的特殊语句。当执行到 LOOP 语句时,系统将不再执行

其后的循环体语句,而直接返回到 SCAN,重新判断函数 EOF( )是否为真。

6)EXIT 语句是循环体中的特殊语句。当执行到 EXIT 语句时,系统将不再执行其

后的循环体语句,而直接跳出循环,执行 ENDSCAN 之后的语句,即结束循环。

7)SCAN…ENDSCAN 语句可以嵌套其他的循环结构语句。也就是说,在 SCAN

语句中可以包含另外的循环结构语句,形成多重循环。

例 3-35 使用 SCAN 循环语句,编写一段程序显示“学生管理”数据库中“学生”

表中男生的学号、姓名和性别信息。

CLEAR

USE 学生管理!学生 && 打开学生表

SCAN FOR 性别="男"

? 学号,姓名,性别

ENDSCAN

USE && 关闭学生表

RETURN

(4)多重循环

多重循环就是循环语句中又包含着另一个循环语句,也称为循环嵌套。嵌套有几层

循环就称为几重循环。外层的循环语句称为外循环,被包含的循环语句称为内循环。前

面介绍的三种循环语句可以自身嵌套,也可以相互嵌套,形成多重循环。

例 3-36 编程显示呈三角形状的九九乘法表。

分析:呈三角形状的九九乘法表,是一个 9 行 9 列且不包含重复结果的二维表。因

此,对此题的求解既要考虑二维表行的变化,也要考虑列的变化。这里设置 y 为行控制

Page 79: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·71·

变量,取值范围为 1~9 的正整数;设置 x 为列控制变量,为了使乘法表的数据不包含

重复值,x 取值范围受 y 变量的约束,x 变量的值始终要小于等于 y 变量的值,即 x<=y;

设置 j 变量保存乘法表每一行的结果。

本题采用双重 DO WHILE 循环,外层循环控制乘法表的行变化,并输出每行的结

果值;内层循环控制乘法表的列变化,计算 x 乘以 y 的值,并将每个 x*y 的值组合为每

行的结果值。

CLEAR

? " 九九乘法表"

? " ------------------"

?" 1 2 3 4 5 6 7 8 9"

? "========================================="

y=1

DO WHILE y<=9

x=1

j=""

DO WHILE x<=y

j=j+str(x*y,4)

x=x+1

ENDDO

@ 4+y,1 say j

y=y+1

ENDDO

? "========================================="

RETURN

程序执行的结果如图 3-10 所示。

图 3-10 “九九乘法表”程序执行的结果

例 3-37 编程求解“百鸡百钱”问题:公鸡每只 5 元,母鸡每只 3 元,小鸡 1 元 3

只。用 100 元钱正好买 100 只鸡,有几种方案。

分析:设公鸡、母鸡、小鸡分别买 x、y、z 只,则可得到方程组

学出版社

职教技术出版中心

www.abook.cn

Page 80: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·72·

x y z 100

5x 3y z / 3 100

+ + =

+ + =

这是一个不定方程组,它有无穷多组解。但就本题来说还有一个约束条件,就是 x、

y、z 只能取正整数。x 的取值范围为 1~20 的正整数;y 的取值范围为 1~33 的正整数;

z 的值由 x、y 决定,z=100-x-y。

对此题的求解采用枚举法,就是对所有可能出现的情况一一列举,判断哪些满足方

程组及约束条件的要求,即方程组的解。

本题用双重 FOR…NEXT 循环编写程序。外层循环产生 x 的可能值,内层循环产生

y 的可能值。在内层循环的循环体中计算 z 的值,并对每一组的组合值进行判断。

CLEAR

FOR x=1 TO 20

FOR y=1 TO 33

z=100-x-y

IF 5*x+3*y+z/3=100 then

? '公鸡:'+str(x,2)+'只; '+'母鸡:'+str(y,2)+'只; '+'小鸡:

'+str(z,2)+'只'

ENDIF

NEXT

NEXT

RETURN

任务三 设计与编制项目主程序

完成学生管理系统主程序设计编制。

一、主程序的作用

学生管理系统主程序是应用程序执行的起点。当运行学生管理系统主程序时,Visual

FoxPro 系统将启动主程序,主程序将依次调用所需的应用程序以及所涉及的其他文件或

组件。学生管理系统主程序在应用系统中的位置如单元一中的图 1-5 所示。

二、主程序设计思路

根据主程序的作用,对主程序的设计应考虑如下因素。

Page 81: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·73·

1)初始化运行环境。默认的 Visual FoxPro 开发环境,对于具体的应用程序来说并

不一定合适,这就要在主程序中对应用程序的环境使用 SET 命令进行初始化设置,包括

初始化变量、建立默认目录和搜索路径、打开数据库等。

2)调用显示初始用户界面。初始用户界面可以是菜单、表单或其他的用户组件。

在主程序中,一定要使用 DO 命令运行一个菜单或者使用 DO FORM 命令运行一个表

单,去打开并显示初始用户界面,建立起应用程序与用户的交流平台。

3)控制事件循环。应用程序的环境建立之后,将显示初始用户界面,这时,需要

建立一个事件循环来等待用户的交互动作。若要控制事件循环,必须执行 READ

EVENTS 命令,该命令使 Visual FoxPro 开始处理用户事件(如单击、双击事件等)。如

果在主程序中没有 READ EVENTS 命令,主程序将不做程序调用而直接返回到操作系

统。在启动事件循环之后,应用程序将处在所有 后显示的用户界面元素控制之下。

4)退出程序时,恢复系统环境。

三、建立主程序

建立学生管理系统主程序文件,具体操作步骤如下。

1)在项目管理器的“代码”选项卡中选择“程序”选项,单击“新建”按钮打开

程序编辑窗口,在程序编辑窗口输入如下程序代码。

SET TALK OFF && 关闭系统对话显示信息

CLOSE ALL && 关闭所有打开的文件

SET SAFETY ON && 设置文件安全保护

SET DATE TO LONG && 设置日期为中文显示格式

SET DELETE On && 设置不处理已删除的记录

SET DEFAULT TO "d:\zx" && 设置默认目录

SET PATH TO "d:\zx" && 设置文件搜索路径

OPEN DATABASE 学生管理.DBC && 打开“学生管理”数据库

DO FORM 用户登录 && 执行“用户登录”表单

_screen.caption="学生管理数据库应用系统" && 设置主窗口标题

READ EVENTS && 启动控制事件循环

CLOSE DATABASE && 关闭数据库

SET TALK ON

SET DELETE OFF

2)选择“文件”/“保存”命令,弹出“另存为”对话框,在对话框中输入文件名

“主程序”,然后单击“保存”按钮,保存程序文件,如图 3-11 所示。

注意:由于“用户登录”表单还没有建立,这时若要运行主程序,系统会弹出“程

序错误”对话框,如图 3-12 所示,提示出错信息。可先将主程序中的“DO FORM 用户

登录”命令代码加上注释,待“用户登录”表单建立后,再取消该命令的注释。

学出版社

职教技术出版中心

www.abook.cn

Page 82: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·74·

图 3-11 建立学生管理系统主程序

图 3-12 “程序错误”对话框

习 题 三

一、选择题

1.在 Visual FoxPro 中,有如下内存变量赋值语句:

X={^2011-07-28 10:15:20 PM}

Y=.T.

M=$123.45

N=123.45

Z="123.45"

执行上述赋值语句之后,内存变量 X、Y、M、N、Z 的数据类型分别是( )。

A.日期型、逻辑型、货币型、数值型、字符型

B.日期型、逻辑型、备注型、数值型、字符型

C.日期时间型、逻辑型、备注型、数值型、字符型

D.日期时间型、逻辑型、货币型、数值型、字符型

2.如果内存变量和字段变量均有变量名“姓名”,那么引用内存变量的正确方法

是( )。

A.M.姓名 B.M->姓名 C.姓名 D.A 和 B 都可以

3.在下列函数中,函数值为数值的是( )。

A.BOF( )

Page 83: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

单元三 主程序的建立

·75·

B.CTOD('01/01/98')

C.AT('人民','中华人民共和国')

D.SUBSTR('12345.67',6)

4.有如下赋值语句,结果为“大家好”的表达式是( )。

a="你好"

b="大家"

A.b+AT(a,1) B.b+RIGHT(a,1)

C.b+LEFT(a,3,4) D.b+RIGHT(a,2)

5.能从“学生管理数据库应用系统”中取出“应用”二字的函数是( )。

A.SUBSTR("学生管理数据库应用系统",8,2)

B.SUBSTR("学生管理数据库应用系统",15,4)

C.SUBSTR("学生管理数据库应用系统",15)

D.SUBSTR("学生管理数据库应用系统",8,4)

6.有如下程序:

INPUT TO A

IF A=10

S=0

ENDIF

S=1

?S

假定从键盘输入的 A 的值是数值型,那么上面程序的执行结果是( )。

A.0 B.1

C.由 A 的值决定 D.程序出错

二、填空题

1.运行 XY.PRG 程序后,将在屏幕上显示如下乘法表:

1)1

2)2 4

3)3 6 9

4)4 8 12 16

5)5 10 15 20 25

6)6 12 18 24 30 36

7)7 14 21 28 35 42 49

8)8 16 24 32 40 48 56 64

9)9 18 27 36 45 54 63 72 81

请对下面的程序填空:

***计算乘法表 XY.PRG***

学出版社

职教技术出版中心

www.abook.cn

Page 84: Visual FoxProVisual FoxPro 数据库 基础与应用 张 旭 叶 茜 张正军 主编 张 赟 孙 娅 副主编 北 京 LeYb g/QúrHN-_Ã yÑ[fQúrHy> 管理系统-高等职业教育-教材

Visual FoxPro 数据库基础与应用

·76·

SET TALK OFF

CLEAR

FOR I=1 TO 9

? STR(i,2)+')'

FOR

??

ENDFOR

?

ENDFOR

RETURN

2.表达式{^2010/8/26}-{^2010/8/11}的运算结果是 ;表达式{^2010/8/26}-20

的运算结果是 。

三、应用题

1.编写两段程序计算如下阶乘:

(1)阶乘 S1=1!+2!+3!+…+10!

(2)阶乘 S2=3!+6!+9!+12!+15!

2.编写一段输出图形的小程序,由“*”排列成五行九列的三角形图形如下图。

*

***

*****

*******

*********

3.编写一段十进制数转换成二进制数的小程序。

4.编写一段程序,要求从键盘上随机输入 10 个整数,用“冒泡排序法”按值从小

到大的顺序进行排序。