VFP数据库系统开发实例(附图)_第1页
VFP数据库系统开发实例(附图)_第2页
VFP数据库系统开发实例(附图)_第3页
VFP数据库系统开发实例(附图)_第4页
VFP数据库系统开发实例(附图)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VFP基本数据库系统开发实例(附图)西南大学计信院导学

在VisualFoxpro中开发一个应用系统应该包括需求分析、项目创建、模块设计、运行调试、保存发布到建立帮助等,下面介绍如何把各个模块集成起来,并创建一个应用程序。

11.1系统需求分析

传统的学生成绩管理方法不仅浪效率低,而且由于管理不规范容易导致各种错误的发生。因此实现一个智能化、系统化的公共计算机成绩管理系统是十分必要和不可缺少的。它将大大减轻管理者的劳动强度,降低出错率,提高管理的效率。该系统可以实现如下功能:

1.数据需求

通过调查,总结出该应用程序对数据的需求大致有如下这些:

(1)学生信息

包括学号,姓名,性别,出生日期,系科,备注,照片

(2)管理员信息

包括用户名,密码,管理员姓名,权限,说明信息

(3)学生成绩信息

主要包括学号,课程编号,平时成绩,笔试成绩,上机成绩,总评成绩,审核否

(4)课程信息

包括课程编号,课程名称

2.功能需求

功能分析的任务是了解用户对数据的处理方法和输出格式。

(1)基本数据录入

基本数据包括学生信息、管理员信息、学生成绩休息和课程信息等。要求系统能够录入这些数据,并且可以进行修改。在数据录入和修改过程中应保持数据的参照完整性。

(2)查询

能够查询出学生成绩,和补考人员名单等。

(3)学生和管理员信息的维护

要求能够根据需要对学生和管理员信息进行维护修改等。

(4)成绩的审核

根据学生的总评成绩审核学生的计算机成绩是否通过。

(5)打印输出

打印学生成绩表和补考人员名单等。11.2系统设计1.程序总体结构设计

在开始程序设计之前,首先应该将程序的总体结构以层次图的形式表示出来,便于对程序分层设计和实现。图1所示为公共计算机成绩管理系统的功能模块图。

图1公共计算机成绩管理系统功能模块

2.数据库逻辑设计

进行数据库设计的依据有三个:第一是在进行系统调查时由成绩管理员提供的各种处理数据;第二是功能设计结果;第三是数据库设计规范化理论。数据库设计是系统设计的一项基本工作,其效果的好坏,对后续设计、调试、使用、维护等工作关系极大,因此,一定要高度重视这一部分工作。当然,我们不能简单地将数据库设计理解为在计算机上用可视化的方法建立表的过程,其主要工作是建立一种完整、规范的数据模型以支持整个应用系统对数据的要求。

根据对实际情况进行分析建立关系模型

1)学生信息表(学号,姓名,性别,出生日期,系科,备注,照片)

2)管理人员信息表(用户名,密码,管理员姓名,权限,说明信息)

3)学生成绩表(学号,课程编号,平时成绩,笔试成绩,上机成绩,总评成绩,审核否)

4)补考名单表(学号,姓名,总评成绩,补考成绩)

5)课程表(课程编号,课程名称)

11.3创建项目VisualFoxpro推荐在项目管理器中开发应用程序,因为项目管理器会为开发工作带来很多方便。在项目管理器中创建一个项目后,应用程序就具备了一个开发框架,然后在这个框架中,再利用项目管理器所提供的强大功能,按照需求来实现应用程序的设计。

用户可以启动VisualFoxpro,选择【文件】|【新建】命令,在打开的对话框中,选择“项目”单选按钮,然后单击“新建文件”按钮,接着在“创建”对话框中,输入项目文件名并确定项目路径(本例使用的路径为D:\公共计算机成绩管理系统),然后单击“保存”按钮,即可启动项目管理器。

一个完整的应用程序,即使规模不大,也会涉及到多种类型文件,如dbc数据库、dbf表以及菜单、表单、报表、位图等。为了以后的修改、维护工作方便进行,就需要把这些文件放在不同的文件夹中便于管理维护,例如一般把dbc数据库文件、dbf表文件和cdx索引文件放在DATE目录,表单、报表、标签等放在FORMS目录等。11.4数据库的物理设计

a)数据库名为公共计算机成绩管理.dbc

b)数据表

i.学生信息表.dbf

学号/C/10,姓名/C/10,性别/L/1,出生日期/D/8,系科/C/30,备注/M/4,照片/G/4

ii.管理人员信息表.dbf

用户名/C/10,密码/C/10,管理员姓名/C/10,权限/C/4,说明信息/C/20

iii.学生成绩表.

dbf学号/C/10,课程编号/C/2,平时成绩/N/6/2,笔试成绩/N/6/2,上机成绩/N/6/2,总评成绩/N/6/2,审核否/L/1

iv.补考名单表

学号/C/10,姓名/C/10,总评成绩/N/6/2,补考成绩/N/6/2

v.课程表

课程编号/C/2,课程名称/C/14

图2公共计算机成绩管理数据库及其表结构11.5界面设计

1)创建启动表单

下面设计应用程序的封面,主要由一个表单来实现,其效果如图10.4所示。

在项目管理器中,打开“文档”选项卡,选择“表单”选项,单击“新建”按钮,在打开的对话框中单击“新建表单”按钮,这时,将弹出一个表单设计器和表单Form1。单击表单设计器工具栏中的标签和命令按钮,分别在表单中添加一个标签控件(采用系统默认名称Labell)和两个命令按钮控件(采用系统默认名称command1和command2)。

下面分别设置各对象的主要属性。属性设置见表10.6所示。

设置command1对象的click事件代码为:

doform密码.scx

*打开“密码”表单

设置command2对象的click事件代码为:

thisform.release

*释放本表单

Quit

*清除事务处理退出VF

2)创建身份验证表单

在项目管理器中,与主表单的创建方法相类似,可以创建“身份验证”表单的界面如图10.5所示。首先通过表单控件工具栏在表单上添加二个标签控件、一个文本框控件及两个命令按钮控件。

其中“密码”表单中各对象的属性设置情况如表10.7所示:

设置密码表单的init事件为:

Thisform.text1.SetFocus()

Thisform.text1.passwordchar='*'

设置密码表单的load事件为:

SELE1

USE密码

设置option1对象的click事件代码为:

PUBLICM.权限,M.密码

sele1

SETEXACON

LOCAFOR密码=ALLTRIM(Thisform.text1.Value)

IFFOUND()

M.密码=密码

M.权限=权限

KUAN=1

thisform.release

ELSE

Thisform.text1.passwordchar=''

Thisform.text1.Value='密码错误!'

A=INKEY(1)

Thisform.text1.Value=''

THISFORM.OPTIONGROUP1.VALUE=0

Thisform.text1.SetFocus()

Thisform.text1.passwordchar='*'

KUAN=0

ENDIF

设置option2对象的click事件代码为:

thisform.release

*释放本表单

clearevent

11.6主菜单设计

下面利用VisualFoxPro的菜单功能设计应用程序的子系统,其结构示意如图10.8所示。

图10.8

打开项目管理器中的“其他”选项卡,选中【菜单】项,然后单击“新建”按钮,在弹出的对话框中

单击“菜单”按钮,参照总体结构图10.8,在打开的菜单设计器中,设计主菜单,如图10.9所示。

图10.9

单击菜单项后的“创建”按钮,即可在打开的菜单设计器窗口中创建该菜单项的子菜单。如果要设置命令

的快捷键,可以单击其后的选项按钮,然后在打开的对话框中,输入快捷键的名称,如图10.10所示。

图10.10

最后单击确定按钮,返回到菜单设计器窗口,在“退出”菜单项的文本框中,输入clearevents,然后单击

关闭按钮,将菜单保存为“主菜单.mnx”。运行该菜单,其效果如图10.11所示。

图10.11

接着,创建应用程序的主文件,将其保存为“主程序.prg”。在代码编辑窗口中,输入以下代码:

_screen.windowstate=2

_screen.caption="公共计算机成绩管理系统"

_screen.closable=.f.

_screen.picture="图片\news_2003816214445.jpg"

closeall

clearall

clear

setsysmenuoffbr>

setsysmenuto

settalkoff

setsafetyoff

setstatusbaroff

doform封面.scx

DO菜单1.MPX

readevent

setsysmenutodefault

setsysmenuon

setstatusbaron

closeall

clearall

return

图10.12

如图10.12所示,在项目管理器中,将“主程序.prg”设置为主文件,然后选中“主程序.prg”并单击

“运行”按钮,即可得到如图10.13所示的效果。

图10.13运行主程序后的效果

11.7表单设计

为了实现和完善“公共计算机成绩管理系统”应用程序的功能,下面通过表单

的调用来实现某些特定的底层功能。在此,我们主要介绍“学生信息输入”表单、

“成绩查询”表单、“学生信息维护”表单的制作过程,其他的表单制作过程与此

类似,读者可以自己完成。

1)“学生信息输入”表单(学生信息输入.scx)

“学生信息输入”表单主要用于输入学生的信息。首先创建“学生信息输入”表单,

然后选择【显示】|【数据环境】命令,

在打开的“添加表或视图”对话框中添加“学生信息表”表到数据环境设计器中,如图10.14所示。

图10.14

接着,设置“学生信息输入”表单的属性,见表10.9所示。

然后设置标签和文本框。从数据环境设计器中,将下列字段拖放到表单中规定的位置,

生成相应的标签和文本框:“学生信息表”表中的学号、姓名、性别、系科、出生日期、

备注等字段。从数据环境直接拖动到表单中定义标签和文本框不仅速度快,而且标签的

Coption和Name属性、文本框的Name属性都会自动设置与源字段有关的名字,文本框也会

自动与源表中的源字段绑定,效果如图10.15所示。

图10.15

最后,设置命令按钮组与事件代码。从表单控件工具栏中单击“命令按钮组”工具,

在窗口的相应位置单击,创建命令按钮组控件。在属性窗口,分别设置各个command的属性,并且在

编辑状态下,对按钮命令组中的command进行排列与设定。双击该控件,在打开的代码编辑窗口中,

输入Click事件的代码。

Command1的Click事件的代码:

select学生信息表

appendblank

thisform.refresh()

Command2的Click事件的代码:

SETEXACTon

IFALLTRIM(学号)=''

DELETE

PACK

ENDIF

IFthisform.Optiongroup1.Option1.value=1

REPLACE性别with.t.

ELSE

REPLACE性别with.f.

endif

Command3的Click事件的代码:

if!bof()

SKIP-1

else

gotop

ENDIF

IF性别

thisform.Optiongroup1.Option1.value=1

thisform.Optiongroup1.Option2.value=0

ELSE

thisform.Optiongroup1.Option1.value=0

thisform.Optiongroup1.Option2.value=1

endif

thisform.refresh()

Command4的Click事件的代码:

if!eof()

skip

else

gobottom

ENDIF

IF性别

thisform.Optiongroup1.Option1.value=1

thisform.Optiongroup1.Option2.value=0

ELSE

thisform.Optiongroup1.Option1.value=0

thisform.Optiongroup1.Option2.value=1

endif

thisform.refresh()

Command5的Click事件的代码:

SETEXACTon

GOtop

scan

IFALLTRIM(姓名)=''

DELETE

PACK

ENDIF

endscan

use

releasethisform

关闭该窗口,保存代码,然后单击项目管理器中的运行按钮,可以得到如图10.16所示的表单效果。

用户可以通过单击表单中的相关按钮,实现对图书信息的相关操作。

图10.16

2)“学生信息查询”表单(学生信息查询.scx)

学生信息查询表单用于查询学生信息,需要使用学生信息表。在学生信息查询表单的数据

环境中加入这个表,如图10.17所示。

图10.17

和“学生信息输入”表单相似,从数据环境中将需要的数据拖放到表单窗口的相应位置,

创建“学生信息查询”表单如图10.18所示。

图10.18

属性窗口的设置也和“学生信息输入”表单类似,其中命令组对象的事件的代码如下:

Commandgroup1的init事件的代码如下:

opendatabase公共计算机成绩管理.dbc

IF学生信息表.性别

thisform.text5.Value='男'

ELSE

thisform.text5.Value='女'

endif

command1的click事件的代码如下:

gotop

mand2.enabled=.f.

mand3.enabled=.t.

thisform.refresh()

command2的click事件的代码如下:

if!bof()

SKIP-1

else

gotop

ENDIF

IF学生信息表.性别

thisform.text5.Value='男'

ELSE

thisform.text5.Value='女'

endif

mand3.enabled=.t.

thisform.refresh

command3的click事件的代码如下:

if!eof()

skip

else

gobottom

ENDIF

IF学生信息表.性别

thisform.text5.Value='男'

ELSE

thisform.text5.Value='女'

endif

mand2.enabled=.t.

thisform.refresh()

command4的click事件的代码如下:

gobottom

IF学生信息表.性别

thisform.text5.Value='男'

ELSE

thisform.text5.Value='女'

ENDIF

mand3.enabled=.f.

mand2.enabled=.t.

thisform.refresh()

运行该表单,效果如图10.19所示。

图10.19

3)“补考查询”表单(补考查询.scx)

补考查询表单用于查询补考学生信息,需要使用学生信息表、学生成绩表和补考名单表。

在补考查询表单的数据环境中加入这三个表,同时建立学生信息表和学生成绩表之间的关联,

学生成绩表和补考名单表之间的关联,如图10.20所示。

图10.20

和“学生信息输入”表单相似,在表单窗口的相应位置设置定义标签“补考名单”、定义显示成绩的

表格控件和三个按钮,创建“补考查询”表单如图10.21所示。

图10.21

属性窗口的设置和“学生信息输入”表单类似,其中表格的设置可以采用表格生成器完成,如图10.22所示:

图10.22

另外“查询”按钮的Click事件的代码如下:

UPDATE学生成绩表set学生成绩表.综合成绩=学生成绩表.笔试成绩*0.6+;

学生成绩表.上机成绩*0.3+学生成绩表.平时成绩*0.1

thisform.grid1.recordsource='sele学生信息表.姓名,学生成绩表.课程编号,;

学生成绩表.笔试成绩,学生成绩表.上机成绩,学生成绩表.综合成绩;

from学生成绩表,学生信息表;

where学生信息表.学号=学生成绩表.学号and学生成绩表.综合成绩<60intocursorlsb1'

use

“打印”按钮的Click事件的代码如下:

UPDATE学生成绩表set学生成绩表.综合成绩=学生成绩表.笔试成绩*0.6+;

学生成绩表.上机成绩*0.3+学生成绩表.平时成绩*0.1

sele学生信息表.学号,学生信息表.姓名,学生成绩表.课程编号,学生成绩表.综合成绩;

from学生成绩表,学生信息表;

where学生信息表.学号=学生成绩表.学号and学生成绩表.综合成绩<60into;

table补考

sele补考名单表

APPENDFROM补考

use

SELECT姓名,课程名称,综合成绩;

from补考名单表,课程表;

where补考名单表.课程编号=课程表.课程编号toprinter

use

“退出”按钮的Click事件的代码如下:

thisform.release

运行该表单,效果如图10.13所示。

11.8用项目管理器连编成应用程序

在对应用程序各个模块分别进行设计并调试之后,需要对整个项目进行编译,生成.EXE可执行程序,这在VisualFoxpro中称为连编项目。

1)设置文件的“排除”与“包含”

刚刚添加的数据库文件左侧有一个排除符号?(如图3所示),表示此项从项目中排除。VisualFoxpro假设表在应用程序中可以被修改,所以默认表为“排除”。

(1)文件的“排除”与“包含”

“排除”与“包含”相对。将一个项目编译成一个应用程序时,所有项目包含的文件将组合为一个单一的应用程序文件。在项目连编之后,那些在项目中标记为“包含”的文件将变为只读文件。如果应用程序包含需要用户修改的文件,必须将该文件标记为“排除”。排除文件仍然是应用程序的一部分,因此VisualFoxpro仍可跟踪,并将它们看成项目的一部分。但是这些文件没有在应用程序的文件中编译,所以用户可以更新它们。

作为通用的准则,可执行程序,例如表单、报表、查询、菜单和程序文件应该在应用程序文件中为“包含”,而数据文件则为“排除”。但是,可以根据应用程序的需要包含或排除文件。通常将所有不需要用户更新的文件设为包含。但应用程序文件(.app)不能设为包含,对于类库文件(.ocx、.fll和.dll)可以有选择地设为排除。

(2)将标记为“排除”的文件设置成“包含”的操作

在项目管理器中设置:要将标记为“排除”的文件设置成“包含”,只要在选定文件之后,右击鼠标,从快捷菜单上选择“包含”即可,如图3所示。

图3

2)设置主程序

主程序是整个应用程序的入口点,主程序的任务是设置应用程序的起始点、初始化环境、显示初始的用户界面、控制事件循环,当退出应用程序时,恢复原始的开发环境。当用户运行应用程序时,将首先启动主程序文件,然后主文件再依次调用所需要的应用程序及其它组件。所有应用程序必须包含一个主程序文件。

设置主程序有两种方法:

(1)在项目管理器中选中要设置的主程序文件,从“项目”菜单或快捷菜单中选择“设置主文件”选项。项目管理器将应用程序的主文件自动设置为“包含”,在编译完应用程序之后,该文件作为只读文件处理。

(2)在“项目信息”的“文件”选项卡中选中要设置的主程序文件后右击鼠标,在弹出的快捷菜单中选择“设置主文件”。在这种情况下,只有把文件设置为“包含”之后才激活“设置主文件”选项。

由于一个应用系统只有一个起始点,系统的主文件是唯一的,当重新设置主文件时,原来的设置便自动解除。标记为主文件的文件不能排除。

3)连编项目

对项目进行测试的目的是为了对程序中的引用进行校验,同时检查所有的程序组件是否可用。通过重新连编项目VisualFoxpro会分析文件的引用,然后重新编译过期的文件。

连编项目首先是让VisualFoxpro系统对项目的整体性进行测试的方法,此过程的最终结果是将所有在项目中引用的文件,除了那些标记为排除的文件以外,合成为一个应用程序文件。最后需要将应用程序软件、数据文件以及其它排除的项目文件一起交给最终用户使用。

连编项目有以下作用和注意事项:

(1)当连编项目时,VisualFoxpro将分析对所有文件的引用,并自动把所有的隐式文件包含在项目中。如果通过用户自定义的代码引用任何一个其他文件,项目连编也会分析所有包含及引用的文件。在下一次查看该项目时,引用的文件会出现在项目管理器中。

(2)“项目管理器”解决不了对图(.bmp或.msk)文件的引用,因为它取决于在代码中如何使用图片文件。需要将这些文件手工添加到项目中。

(3)连编项目也不能自动包含那些用“宏替换”进行引用的文件,因为在应用程序运行之前,不知道该文件的名字。如果应用程序要引用“宏替换”的文件,应手工添加并包含这些引用文件。

在项目管理器中进行项目连编的具体步骤如下:

(1)在项目管理器中打开相应的项目,单击“连编”按钮,弹出如图4所示的“连编选项”对话框。

图4

(2)在“连编选项”对话框中,选择“重新连编项目”单选钮。

(3)如果选择了“显示错误”复选框,可以立刻查看错误文件。这些错误集中收集在当前目录的一个<项目名称>.err文件中。编译错误的数量显示在状态栏中。

(4)如果没有在“连编选项”对话框中选择“重新编译全部文件”复选框,只会重新编译上次连编后修改过的文件。当向项目中添加组件后,应该重复项目的连编。

(5)选择了所需的选项后,单击“确定”按钮。

该操作等同于通过命令窗口执行BUILDPROJECT<项目名>命令。

如果在项目连编过程中发生错误,必须纠正或排除错误,并且反复进行“重新连编项目”,直至连编成功。

4)连编应用程序

连编项目获得成功之后,在建立应用程序之前应该试着运行该项目。可以在“项目管理器”中选中主程序,然后选择“运行”命令。或者在“命令”窗口中,执行带有主程序名字的一个DO命令,如domain.prg。如果程序运行正确,就可以最终连编成一个应用程序文件了。应用程序文件包括项目中所有“包含”文件,应用程

温馨提示

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

最新文档

评论

0/150

提交评论