版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
管理信息系统
实验指导书
湖南工学院经济与管理系
目录
实验一项目文件的建立、系统主程序设计、系统菜单设计和数据库与表的设计………………1
实验二数据备份、数据恢复和地区代码管理表单的设计……….34
实验三产品代码管理、客户代码及基本信息管理和用户身份密码管理表单的设计………….58
实验四销售信息编辑、查询和查询结果表单的设计…………….80
实验五往来账款信息编辑、查询和查询结果表单的设计………109
实验六收账政策信息编辑、查询和查询结果表单的设计………144
实验七销售信息统计和统计结果表单的设计…………………..163
实验八报表的设计、应用程序的连编和安装程序的制作………179
1
实验一项目文件的建立、系统主程序设计、系统菜单设计和数据库与表的设计
【实验目的和要求】
通过本次实验,学习通过项目管理器来管理系统开发过程中所设计和创建的各种文件,了解系统主程序及封面设计的常用方法,学习系统菜单设计的基本过程和方法,通过数据库及表的设计学习系统开发中对数据库及表的规划和设计。
【建议实验学时】
4学时。
【实验管理信息系统的文件目录结构图
⑵启动VFP6,Windows系统显示VFP6主窗口。
⑶单击“文件”功能菜单项,VFP6显示“文件”下拉菜单。
⑷单击“新建”选项,打开如图1.2所示的“新建”对话框。
1
图1.2“新建”对话框
⑸单击“项目”单选按钮,表示将要新建一个项目。
⑹单击“新建”按钮,VFP6显示如图1.3所示的“创建”对话框。在“项目文件”框中输入新建项目文件名mis(实验中也可选用其它名称),保存在已创建好的c:\mis目录中。
图1.3“创建”对话框
2
[说明]通过“新建”按钮创建的新项目,只能生成两个项目文件,即一个mis.pjt文件,一个mis.pjx文件,不能生成项目的完整框架,但系统目录及文件系统较简单清楚,只要在开发过程中用户能合理设计及创建文件,也完全能够实现应用程序的开发。通过“向导”创建的项目,能生成项目的完整框架,较有利于项目的管理,但系统自动创建的文件较多,目录结构相对复杂,不便于初学者对文件的管理。为简单起见,在本实验中以通过“新建”建立项目文件为例进行介绍。
7.单击“保存”按钮,将出现新的对话框“项目管理器-mis”。如图1.4所示。
图1.4“项目管理器-mis”对话框
至此,新的项目文件mis就已创建完成,用户就可以通过项目管理器窗口向该项目中添加或新建应用程序所需要的各种文件,用户也可随时浏览和查阅系统已创建的各种文件,这些文件将由该项目进行统一管理。在生成最终应用程序时,项目管理器会自动将各种所需文件进行集成,编译成可执行文件。
㈡项目管理
项目一旦建立,以后就可通过项目的管理,把开发应用程序所建立的所有文件进行系统地集中分类管理,方便程序开发和最终应用程序的生成。项目管理包括:
⑴分类、分层次显示、浏览和选择组件。
⑵使用“新建”选项启动新建一个任何组件类型的过程。
⑶使用“添加”选项从外部文件添加组件。
⑷使用“移去”选项移去所属的任意组件。
⑸使用“修改”选项修改任一个组件的过程。
⑹使用“浏览”或“运行”选项启动浏览数据或执行选定的表单、查询或程序。
⑺使用“连编”选项生成应用程序。
二、主程序的创建及密码验证设计
主程序就是在系统启动时,首先执行的程序。在VFP6中,可以将一个应用程序系统的主程序设置为菜单、表单、PRG程序等。本例中将以一个PRG程序为主程序为例进行介绍。
㈠创建主程序
步骤如下:
⑴打开mis项目文件,在“项目管理器-mis”窗口中,单击“代码”选项卡,选中“程序”项3
(也可单击“全部”选项卡,再在列表区中选中“代码”中的“程序”项),如图1.5所示。
图1.5选中代码选项卡中的“程序”项
⑵单击项目管理器窗口右边的“新建”按钮(如主程序已经创建,则应单击“添加”按钮),就可在新弹出的程序代码编辑窗口中输入程序的代码内容,如图1.6所示。
图1.6程序代码编辑窗口
[说明]本例中主程序的代码内容如下:
4
publicdepa
depa=substr(alltrim(sys(5)+curdir()),1,len(alltrim(sys(5)+curdir()))-1)
setdefaultto&depa
setpathtoforms;progs;reports;menus;data;graphics;graphics\pic;graphics\icosetexacton
setconfirmoff
setescapeon
setsafetyon
setstatusoff
setscoreboardoff
setdecimalsto3
settalkoff
setsysformatson
setcenturyon
setdatetoansi
zoomwindowscreenmax
closeall
releasewindow常用
setsysmenuto
_screen.caption="欢迎使用XXX公司市场营销管理信息系统"
_screen.icon="face05.ico"
_screen.picture="p02.jpg"
_screen.minbutton=.f.
_screen.maxbutton=.f.
_screen.controlbox=.f.
doformfm.scx
readeven
⑶保存文件。程序代码编辑完成后,关闭编辑窗口,在弹出的询问是否要保存程序文件的窗口中单击“是”按钮,则又弹出“另存为”对话框,如图1.7所示,输入程序文件名,选择程序文件保存的位置:C:\mis\PROGS,单击“保存”按钮,关闭“另存为”对话框,完成新建程序文件的工作。
5
图1.7“另存为”对话框
⑷设置主程序。在项目管理器窗口中,展开“代码”选项卡中“程序”项,就可看到刚建立的程序文件mainprg.prg,选中该文件,执行VFP6系统“项目”菜单中的“设置主文件”菜单项,则会看到在项目管理器窗口中,mainprg.prg文件名变为粗黑体显示,这表示该文件已被设置成系统的主文件。
[说明]在本例中,系统的设计思路是,主程序先设置系统运行的环境参数,再运行指定表单,进行用户身份确认。当用户身份验证通过后,再执行系统主菜单,进入系统。除了这种方法以外,还可用其他多种方法来设计系统入口。如先设计一个顶层表单,作为系统主程序,在表单的INIT事件中设置系统运行环境,再执行系统主菜单。装入系统菜单后,再进行用户身份验证。如用户身份验证不能通过,则结束系统运行。
㈡密码验证表单的设计
在系统主程序mainprg.prg中,调用执行了一个表单fm.scx,这是一个对使用系统的用户进行身份验证的表单,其运行结果如图1.8所示。
6
图1.8表单fm.scx的运行结果
表单的总体构成有“欢迎使用”、“营销管理信息系统”、“用户名称”、“用户密码”、“开发设计:******Ver1.02003年08月”五个标签,两个命令按钮和分别用于输入用户名和密码的两个文本框。在表单运行时,“欢迎使用”标签从表单左边向右边连续移动并不停变换颜色,“开发设计:******Ver1.02003年08月”标签则从表单右边向左边连续移动。标签的连续移动是通过在表单中加入计时器控件实现的。
下面简单介绍fm.scx表单的设计,基本步骤如下:
⑴在项目管理器窗口中,选中“文档”选项卡中的“表单”项,单击窗口右边的“新建”按钮,VFP6系统打开“新建表单”对话框,如图1.9所示。选择“新建表单”按钮,系统打开“表单设计器”窗口,在窗口中显示一默认标题为“form1”的空白表单,如图1.10所示。
图1.9“新建表单”对话框图1.10“表单设计器”窗口
⑵打开设计表单的相关工具窗口。要对空白表单进行设计,需要使用VFP6系统提供的一些工具,主要是“表单控件工具栏”、“布局工具栏”以及“属性”窗口。当打开表单设计器时,如VFP6系统窗口中没有这些工具,可通过分别执行VFP6系统“显示”菜单下的“表单控件工具栏”、“布局工具栏”、“属性”菜单项来打开相应窗口。这些设计工具窗口分别如图1.11所示。
7
图1.11设计表单的工具窗口
⑶设置表单属性值。
①更改表单标题。单击空白表单,在其“属性”窗口中将Caption属性的值改为“欢迎使用营销管理信息系统”,如图1.12所示。
图1.12设置表单标题
②设置表单图标。单击空白表单,在其“属性”窗口中将Icon属性的值设置为合适的图标。在单击“Icon”属性后,可单击图标文件名输入框旁边的
图标文件。如图1.13所示。按钮,打开“打开”对话框,确定合适的
8
图1.13设置表单图标
③设置表单填充图片。在表单的“属性”窗口中将Picture属性的值设置为合适的图片。在单击“Picture”属性后,可单击图片文件名输入框旁边的
片文件。如图1.14所示。
按钮,打开“打开”对话框,确定合适的图
图1.14设置表单填充图片
④表单其他重要属性设置。参照上述方法,分别设置表单的如下属性:
AlwaysOntop=.T.
AutoCenter=.T.
BorderStyle=2-固定对话框
Closable=.T.
ControlBox=.T.
Desktop=.T.
Enabled=.T.
9
Height=300MaxButton=.F.MinButton=.F.Movable=.T.Visible=.T.Width=500WindowStat=0-普通
⑷添加表单控件。
①添加标签控件。单击“表单控件工具栏”中的
按钮,然后鼠标在表单中合适位置按下左
键拖动到合适位置,松开鼠标,就在表单中出现处于被选中状态的标签。用此方法分别在表单中添加五个标签。系统默认用label1~label5分别命名这五个标签。
②设置标签的属性。
标签的常用属性有Caption、AutoSize、BackStyle、FontBold、FontName、FontSize、ForeColor、Top等。各标签的属性设置如表1.1所示。
[说明]标签的字体(FontName)、字号(FontSize)、字体颜色(ForeColor)及字体是否加粗(FontBold)等属性,可完全根据个人喜好进行选择设置,标签的BackStyle属性,一般设成0-透明。③添加文本框控件。单击“表单控件工具栏”中的按钮,然后鼠标在表单中合适位置按下左键拖动到合适位置,松开鼠标,就在表单中出现处于被选中状态的文本框。用此方法分别在表单中添加两个文本框。系统默认用Text1、Text2分别命名这两个文本框。
④设置文本框的属性。两个文本框分别用来输入用户名和用户密码,其属性设置如表1.2所示。
[说明]Text2文本框是用来输入用户密码的,用户输入的密码字符一般不能直接显示在文本框中,所以将其输入的字符用星号“*”代替,当然也可选用其他符号。⑤添加命令按钮。单击“表单控件工具栏”中的按钮,然后鼠标在表单中合适位置按下左键拖动到合适位置,松开鼠标,就在表单中出现处于被选中状态的命令按钮。用此方法分别在表单
10
中添加两个命令按钮,系统默认用Command1、Command2分别命名这两个命令按钮。
⑥设置命令按钮的属性。表单中两命令按钮分别用来确认用户输入和取消用户输入的,其属性设置如表1.3所示。
[说明]在表单运行时,如果用户按下回车键,一般认为用户是进行确认操作,因此把Command1的Default属性设置为.T.。另外,命令按钮中字体的颜色(ForeColor)以及FontName、FontSize、Height、Left、Top、Width等属性的值设计者也都可根据需要和自己喜好进行自由选择设置。
⑦为命令按钮编写程序代码。在表单运行时,当用户单击命令按钮时,系统执行相应的操作,这些操作就是通过系统执行相应的命令代码来完成的。因此,不仅要为命令按钮设置好属性,还要为命令按钮编写好相应的命令代码。常用方法是鼠标右击添加在表单中的命令按钮,在弹出的快捷菜单中选择“代码”菜单项,如图1.15所示。
图1.15快捷菜单
接着就进入程序代码编辑窗口,如图1.16所示。在编辑窗口中编辑代码时,应注意在“过程”下拉列表框中,选择对应的事件。本例中对对象Command1命令按钮,应选择“Click”事件。编辑完代码后,关闭编辑窗口即可。
图1.16代码编辑窗口
在本例中,Command1即“确定”按钮的“Click”事件代码如下:
publicyhkl,yhname&&定义全局变量,记录登录用户的名称和密码,以便系统分配用户权限yhkl=alltrim(thisform.text2.value)&&保存用户输入的名称和密码yhname=alltrim(thisform.text1.value)
usepass&&打开保存已注册用户的用户名和密码的表文件
11
*以下代码是检验用户名称和密码
locaallforlower(alltrim(yhm))=lower(alltrim(yhname))
ifeof()
*不是合法注册用户,给出警告
=messagebox(‘你不是合法注册用户!’,0,’真遗憾’)
return
thisform.text1.setfocus
else
*用户名正确,再检验用户密码
lsyhlx=alltrim(yhlx)
iflower(alltrim(yhmm))=lower(alltrim(yhkl))
use
thisform.release
setdeleon
setnotifyoff
setcenton
setdatetoansi
closeall
RELEASEWINDOW常用
MODIFYWINDOWSCREENTITLE"×××公司市场营销管理信息系统ver;
1.0软件编制者:×××登录;
用户:"+yhname+"("+lsyhlx+")"+"今天是:"+dtoc(date())
_SCREEN.ICON="face05.ico"
_SCREEN.picture="pc1.jpg"
ZOOMWINDOWSCREENMAX
_SCREEN.controlbox=.f.
domainmenu.mpr&&当用户名和密码都正确时,关闭当前表单,运行主菜单进行系统else
*不是合法注册用户,给出警告
=messagebox(‘密码不正确,请你再好好想想!’,0,’真遗憾’)
return
thisform.text2.setfocus
endif
endif
Command2即“取消”按钮的“Click”事件代码如下:
thisform.release
cleareven
quit
[说明]对用户身份进行验证的方法有多种多样,本例中是先把用户名、用户密码及用户类型储存在表pass.dbf中,验证用户身份时,把用户输入的用户名和相应的密码与储存在表中的进行比较,以判断用户是否合法。当验证通过时,关闭当前表单,记录下用户名,作为在系统运行时,分配用户使用权限的依据,同时清理系统界面,设置系统主窗口属性,调用系统主菜单进入系统进行工作。12
⑧添加计时器控件并设置其属性。单击“表单控件工具栏”中的
控件,如图1.17所示。系统默认用Timer1命名此控件。
按钮,然后在表单中任意位置单击左键(计时器控件放在表单中任意位置都可以),就在表单中出现处于被选中状态的计时器
图1.17在表单中添加计时器控件
计时器控件用来在程序运行中在指定的时间间隔计时器代码编辑窗口
本例中计时器的“Timer”事件的过程代码为:
13
ifca<255
ca=ca+1
else
ca=90
endif
ifcb<255
cb=cb+1
else
cb=180
endif
ifcc<255
cc=cc+1
else
cc=1
endif
IfThisform.Label2.left>thisform.width
thisform.label2.forecolor=rgb(ca,cb,cc)
Thisform.Label2.left=-199
thisform.label2.left=Thisform.Label2.left+10
Else
thisform.label2.forecolor=rgb(ca,cb,cc)
Thisform.Label2.left=Thisform.Label2.left+10
EndIf
IfThisform.Label5.Left<=-394
Thisform.Label5.Left=thisform.width
Thisform.Label5.Left=Thisform.Label5.Left-10
Else
Thisform.Label5.Left=Thisform.Label5.Left-10
EndIf
thisform.refresh
⑸为表单添加代码。在表单运行时及关闭表单前,需要做一些环境准备及清理工作,这也是通过为表单添加一些程序代码来实现的。方法是在表单设计器窗口中,在表单中单击鼠标右键,在打开的快捷菜单中选择“代码”菜单项,进入代码编辑窗口,如图1.19所示。
图1.19表单代码编辑窗口
①在编辑窗口的“过程”下拉列表框中选择“Load”事件,为其添加如下代码:
publicca,cb,cc&&设置全局变量,记录RGB()函数的自变量的值
14
ca=0
cb=0
cc=0
②在“过程”下拉列表框中选择“Unload”事件,为其添加如下代码:
releaseca,cb,cc&&释放全局变量
[说明]至此,系统主程序及用户身份验证的设计就全部完成。需要说明的是,实验中设计的主程序和表单中,使用的表pass.dbf及菜单mainmenu还尚未创建。如要试运行主程序及fm.scx表单,须先创建此两个文件。另外,要试运行,须在Windows的“我的电脑”或“资源管理器”中,双击C:\mis下的mis项目文件,自动进入VFP6打开项目管理器后,再在项目管理器中选择“代码”选项卡中“程序”项下的mainprg.prg主文件,再单击项目管理器窗口右边的“运行”按钮。
三、菜单系统设计
几乎在所有的应用程序中,都要为用户提供一个菜单系统,菜单系统是用户界面的重要组成部分。菜单反映了程序的基本功能,而掩盖了程序“新建菜单”对话框
⑵单击“新建菜单”对话框中的“菜单”按钮,则进入“菜单设计器”,如图1.21所示,用来15
设计一个如同VFP6系统主菜单的下拉式菜单系统(如单击“快捷菜单”则进入“快捷菜单设计器”,用来设计一个单击鼠标右键即可激活的快捷菜单。快捷菜单的菜单选项与被右击的对象有关。从外观看,两种菜单设计器并没有什么不同,操作方法也基本一致,所以以下只重点介绍用菜单设计器设计应用程序主菜单)。
启动菜单设计器后,VFP6的系统菜单将增加一个“菜单”菜单名,并在“显示”系统菜单中增加了“常规选项”和“菜单选项”两个选项。
㈡菜单设计器的使用
1.输入菜单名称
菜单名称是指显现于菜单横向菜单栏上的菜单标题或者出现于下拉菜单中的选项名称。在“菜单设计器”窗口中的“菜单名称”列中依次输入菜单标题:系统管理、合同管理、销售管理、客户信息管理、市场信息管理、销售人员管理、广告管理、售后服务管理、退出系统,如图1.21所示。
图1.21菜单设计器窗口
2.指定菜单功能
在菜单设计器窗口中的“结果”列中,可选择指定菜单名称的类型,共有4种类型可供选择,本例中主要用到3种,在此略作介绍。
⑴子菜单:这是默认类型,该类型使得能够在当前菜单名称下建立下级菜单。本例中除了标题为“退出系统”的菜单外,其他几个菜单都选择设置为“子菜单”。
⑵过程:过程是以procedure开头的程序段,可以把多个过程集中写在一个源程序文件中。如果菜单选项设置为“过程”类型,那么该菜单选项将执行一个过程代码,过程代码将成为菜单源文件的一部分。这里把菜单标题为“退出系统”的菜单类型设置为“过程”。
⑶命令:如果菜单类型设置为“命令”,则当前菜单项的功能将只是执行一条VFP6命令。如BROWSE命令,或DO<子程序文件名>等,而后者可以执行任意复杂的操作。
本系统的各菜单名称的功能类型设置如图1.21所示。
3.定义菜单标题的键盘访问键
在菜单标题名称的左侧、右侧或在菜单设计器中,为菜单标题设置键盘访问键的方法是:在菜单名称左侧、右侧或内部输入“\<字母”即可,该字母就是键盘访问键。本例中,各菜单名称的键盘访问键的设置如图1.21所示,设计者也可根据自己的设计思路自由选择。
16
4.创建和修改子菜单并为菜单项指定功能代码
在菜单设计器窗口中,各菜单名称的“结果”列设置为“子菜单”的菜单,右边有一个“创建”按钮。单击该按钮,就出现与刚才进入菜单设计器相同的画面,只是在“菜单级”选择框中的原来显示的“菜单栏”变成菜单标题的名称。这说明进入了菜单标题名称下的子菜单的设计过程。
本例主要以系统管理和销售管理两个子模块为例,介绍营销管理信息系统的开发,因此以后的设计操作过程,主要介绍这两个菜单及其功能的实现,其他菜单及其功能设计,就不再介绍,可根据教材内容并参考系统管理、销售管理两个模块的设计进行开发。
在如图1.21所示的菜单设计器窗口中,将“系统管理”菜单名称的结果类型设置为“子菜单”,单击右边的“新建”按钮,就进入“系统管理”菜单标题的下级菜单的设计窗口,如图1.22所示。
图1.22菜单设计器窗口
在图1.22所示的菜单设计器窗口中,在“菜单级”选择框中显示为“系统管理S”,这表明在此窗口中设计的菜单是菜单栏中“系统管理”菜单名称的下级子菜单。在“菜单名称”栏中分别输入“数据备份(\<B)”、“数据恢复(\<R)”、“\-”、“代码管理(\<C)”、“\-”、“密码管理(\<P)”、“\-”、“退出系统(\<X)”菜单项名称(菜单名称前的“
”符号不用输入,该符号只是本手册编写者用来标注在整个系统菜单中,已设计好范例的菜单部分。菜单项名称如是“\-”,则当菜单运行时,会在相应的菜单项位置,显示一条将相邻两菜单项隔开的分隔横线。在一般的菜单设计中,其作用往往是按功能相近的原则把菜单选项进行分组显示),并在其对应的“结果”栏中分别选择“命令”、“命令”、“子菜单”、“子菜单”、“子菜单”、“过程”、“子菜单”、“过程”,在“数据备份”和“数据恢复”菜单项的“结果”栏右边的输入框中分别输入命令“doformdatabak”和“doformdatarstore”(此两条命令就是让系统在当用户分别选择该菜单项时,分别调用名为“databak”和“datarstore”的表单来完成对应的功能)。
选中“代码管理”菜单项,单击“结果”栏右边的“创建”按钮,就进入“代码管理”的下级子菜单设计窗口,如图1.23所示。
17
图1.23菜单设计器窗口
在图1.23所示的窗口中,在“菜单名称”栏中分别输入“地区代码管理”、“产品代码管理”、“客户代码管理”,将其“结果”都设置为“过程”。单击“过程”右边的“创建”按钮(如过程已经创建,则是“编辑”按钮)就会弹出过程代码编辑窗口,如图1.24所示。
图1.24过程编辑窗口
用户可在窗口中输入菜单项对应的过程代码以完成与该菜单项相应的任务。代码编辑完成后,关闭窗口即可。虽然这里输入的程序代码是菜单文件中的一个过程,但不必书写procedure,因为系统会自动添加。
“地区代码管理”菜单项的过程代码为:
usediqudaima&&打开地区代码表
pack
use
doformdqdm&&执行表单文件
“产品代码管理”菜单项的过程代码为:
usechpdaima&&打开产品代码表
pack
use
doformcpdm&&执行表单文件
“客户代码管理”菜单项的过程代码为:
usekehu&&打开客户信息表
pack
use
doformkehugl&&执行表单文件
18
在“代码管理”的子菜单设计完成后,在图1.23所示的窗口的“菜单级”选择框中选择“系统管理”项,则又返回图1.22所示的“系统管理”菜单的子菜单设计窗口。再按同样方法分别为“密码管理”和“退出系统”菜单项编写过程代码。
“密码管理”菜单项的过程代码为:
setdeleon
usepass
deleallforlen(alltrim(yhm))=0
pack
locaallforalltrim(yhm)=alltrim(yhname)
ifalltrim(yhlx)="系统管理员"
use
doformmmgl.scx
else
nAnswer=messagebox(‘很抱歉!您不是系统管理员无权查阅和更改用户名;
和密码!’,0,’警告!’)
use
return
endif
“退出系统”菜单项的过程代码为:
ans=messagebox("确信要退出系统吗?",4,"确认信息")
ifans=6
closeall
clearevent
quit
else
return
endif
当“系统管理”菜单的子菜单设计完成后,在“菜单级”选择框中选择“菜单栏”项,则又返回如图1.21所示的菜单设计器窗口。
在图1.21所示的菜单设计器窗口中,选中“销售管理”菜单名称,单击其“结果”栏右边的“创建”按钮,则进入如图1.25所示的其下级子菜单的设计窗口。
19
图1.25菜单设计器窗口
“销售管理”的子菜单设计如图1.25所示。再按前述方法分别设计各菜单项的下级子菜单,并为相应的菜单项添加命令代码或过程代码。
“销售信息”、“往来账款”、“收账政策”菜单项的子菜单设计分别如图1.26、1.27和1.28所示。
图1.26“销售信息”菜单项的子菜单设计
20
图1.27“往来账款”菜单项的子菜单设计
图1.28“收账政策”菜单项的子菜单设计
“销售统计”菜单项的命令代码为:
doformxshtj&&执行名为xshtj的表单“销售信息编辑”子菜单项的过程代码为:usexiaoshou
pack
use
doformxiaoshlr
“销售信息查询打印”子菜单项的命令代码为:doformxshcx
“往来账款编辑”子菜单项的过程代码为:usezhangk
pack
use
21
doformzhangklr
“往来账款查询打印”子菜单项的命令代码为:
doformzhangkcx
“收账政策编辑”子菜单项的过程代码为:
useshouzh
pack
use
doformshouzhlr
“收账政策查询打印”子菜单项的命令代码为:
doformshouzhcx
本例系统中其他菜单的设计,可参考上述方法进行。
5.为菜单选项定义快捷键
在系统菜单中,往往可以看到有的菜单选项右侧有Ctrl+<字母>或Alt+<字母>的字样,例如“文件”菜单中的“新建…Ctrl+N”等,这就是菜单的快捷键。不必层层激活菜单,只要按下快捷键,就能执行快捷键所对应的菜单选项命令。
在此以图1.25所示的菜单设计器窗口中的“销售统计”菜单项为例加以说明。单击选中“销售统计”菜单项,单击其对应的“选项”栏下方的按钮,将出现如图1.29所示的“提示选项”对话框。
图1.29“提示选项”对话框
鼠标单击“键标签”文本框(这是必须的),再通过键盘输入组合键Alt+<字符>(字母、数字、符号),或组合键Ctrl+<字母>、Alt+F1~F12、Ctrl+F1~F12,或直接通过键盘敲击F1~F12功能键,则在“键标签”框中自动记录并显示键盘输入的快捷键。如图1.30所示(此例中按下的Ctrl+S键)。22
图1.30“提示选项”对话框
最后单击“确定”按钮,就设置好了“销售统计”菜单项的快捷键(注意:所有快捷键是不能重名的)。其他菜单项的快捷键的设置,请参照此方法自己完成。
6.进一步完善菜单程序
⑴常规选项的主要操作。在菜单设计器窗口打开的情况下,选择系统“显示”菜单中的“常规选项”,会出现如图1.31所示的”常规选项”对话框。
图1.31“常规选项”对话框
①为菜单栏中不曾编写程序代码或子菜单项的菜单名称编写统一的代码。其方法是:在“常规
23
选项”对话框的“过程”编辑框中输入需要执行的程序代码,或者是单击“编辑”按钮,再单击“常规选项”对话框的“确定”按钮,激活“编辑”窗口,在“编辑”窗口中输入需要执行的过程代码。这个过程是对整个菜单系统都有效的全局代码。如果菜单栏中有若干个菜单名称不曾添加子菜单或编写程序代码,而在运行菜单时又被选中了,那么就会执行在这里编写的过程代码。这往往用于调试菜单系统。
本例中该过程代码如下:
=messagebox("对不起,该选项还未完工,暂时还不能使用!",0,"系统提示")
return
②设置主菜单的显示位置。设计的主菜单在运行时显示的位置可以在“常规选项”对话框中指定。
在图1.31所示的“常规选项”对话框的“位置”框中,设计者可通过单选框的选择来设置主菜单的显示位置。现说明如下:
“替换”:程序运行时将用设计的主菜单取代VFP6系统菜单。
“追加”:程序运行时将把所设计的主菜单追加到VFP6系统菜单的后面。
“在„之前”:程序运行时将把所设计的主菜单插入到指定的VFP6系统菜单标题的前面。“在„之后”:程序运行时将把所设计的主菜单插入到指定的VFP6系统菜单标题的后面。上面后3种位置都将使得VFP6菜单成为应用程序菜单的一部分。在本例中选择“替换”。③“顶层表单”检查框的设置。如果不选择“顶层表单”检查框,只允许设计的菜单在VFP6页框中使用;如果选择,则允许菜单在顶层表单中使用,从而成为一个SDI菜单。本例中不选择“顶层表单”检查框。
⑵菜单选项操作。在菜单设计器窗口打开的情况下,在“菜单级”选择框中选择“菜单栏”,再选择系统“显示”菜单中的“菜单选项”,会出现如图1.32所示的“菜单选项”对话框。
图1.32“菜单选项”对话框
在图1.32所示的“菜单选项”对话框的“过程”编辑框中可以输入任何程序代码。本程序代码的用途是作为对话框中“名称”文本框所指定菜单级的各选项的公用执行代码,也就是当运行菜单时如果选择了不曾为之编写代码的该级菜单的菜单项,则执行本过程代码。这些代码只是局部于本级菜单的过程,只在调用本级菜单时才起作用。
本例中为该过程指定的菜单级是菜单栏,则意味着当主菜单在运行时,只要用户选择了任一菜单名称下的任一不曾编写代码的菜单项,都会执行该代码,这为调试菜单程序提供了很大的方便。该过程代码内容为:
=messagebox("对不起,工程还未完工,暂时还不能使用!",0,"系统提示")
return
24
当然,如果在选择执行“菜单选项”之前,先在菜单设计器窗口中的“菜单级”选择框中选择其他子菜单,则在“菜单选项”对话框中的“名称”文本框中相应显示出所选择的菜单级的名称,在其“过程”编辑框中编辑的过程代码只对该级菜单有效。
当上述操作都完成后,执行存盘操作或关闭菜单设计器,系统都会出现对话框询问是否保存,如选择“是”,则会出现“另存为”对话框,如图1.33所示。
图1.33“另存为”对话框
在该对话框中,选择保存路径为C:\mis\MENUS,文件名取名为mainmenu,单击“保存”按钮即可。
㈢生成菜单程序
用菜单设计器生成的菜单文件扩展名是.mnx,这种文件是不能直接执行的,设计者必须把它转换成扩展名为.mpr的菜单程序文件。
可用下面的方法生成菜单程序文件:
⑴首先在项目管理器中选择上述设计好的的菜单名称mainmenu,然后单击项目管理器的“修改”按钮,进入菜单设计器,选取VFP6系统菜单“菜单”下的“生成”选项,弹出如图1.34所示的“生成菜单”对话框。
在“生成菜单”对话框中指定输出的菜单程序文件名为mainmenu.mpr,存放路径为C:\mis\MENUS,再单击“生成”按钮就行了。
图1.34“生成菜单”对话框
⑵在项目管理器中选择上述设计好的的菜单名称mainmenu,然后单击项目管理器的“运行”按钮,也将自动生成一个.mpr文件。
25
在生成菜单程序文件过程中,如果发现错误,将会出现警告选择框,设计者可根据错误情况自由处理。
[说明]如果设计者想把程序编译成.exe文件,脱离VFP6环境成为独立运行的应用程序,而且菜单是主文件,则必须注意两个问题:必须在菜单的“清理”过程代码中加入命令行readevents,而在退出菜单系统的菜单选项的过程或程序代码中必须包括命令行clearevents,否则菜单在屏幕上一晃即逝而不能应用。
四、数据库及表的设计
在营销管理信息系统中,系统管理和销售管理两个子系统的功能结构已经体现在设计好的主菜单中。在本实验中要设计两个子系统使用的数据库和表,作为各菜单功能实现的设计基础。㈠两个子系统使用的表单、数据库及表
1.系统管理子系统使用的表单、数据库和表在系统管理子系统中,又包含了“数据备份”、“数据恢复”、“代码管理”、“密码管理”和“退出系统”子模块。该子系统使用的表单、数据库及表的关系如表1.4所示。
表1.4系统管理子系统各子模块使用的表单、数据库和表
从表1.4可以看出,系统管理子系统共调用了6个表单,使用了4张表,其中diqudaima.dbf(地区代码)、chpdaima.dbf(产品代码)和pass.dbf(用户密码表)属于daima(代码)数据库,kehu.dbf(客户基本信息表)属于xshgl(销售管理)数据库。
2.销售管理子系统使用的表单、数据库和表
销售管理子系统的功能结构参见主菜单的各功能选项。该子系统使用的表单、数据库及表的关系如表1.5所示。
26
从表1.5可以看出,销售管理子系统直接或间接共调用了11个表单,使用了12张表,其中chpdaima.dbf(产品代码)、jsfs.dbf(结算方式)、kxxz.dbf(款项性质)、jzbb.dbf(记账币别)属于daima(代码)数据库,kehu.dbf(客户基本信息表)和xiaoshou.dbf(销售基本信息表)属于
xshgl(销售管理)数据库,Zhangk.dbf(往来账款信息)和shouzh.dbf(收账政策信息)表属于Zhkwl数据库,Xiaoshoucx.dbf(销售查询结果表)、Zhankcx.dbf(往来账款查询结果表)、Shouzhcx.dbf(收账政策查询结果表)和Xiaoshoutj.dbf(销售统计结果表)是自由表。上述4个自由表是程序在运行期间自动创建的,并作为信息输出的依据,是不需要设计者创建的。其余各表均需在设计表单及程序代码之前先行创建好,以备使用。
综合起来,系统管理和销售管理两个子系统设计中,需要创建3个数据库共10个表。
㈡两个子系统使用的表的结构
两个子系统使用的表的结构及字段说明分别见表1.6~1.15。
表1.8jsfs(结算方式)表的字段说明
表1.10kxxz(款项性质)表的字段说明
27
表1.14shouzh(收账政策信息)表的字段说明
表1.15zhangk(往来账款信息)表的字段说明
28
1.创建数据库
数据库文件的创建既可用命令方式,也可用VFP6系统“文件”菜单中的“新建…”选项。本实验中为了方便对系统文件的管理,以利用项目管理器创建方式加以介绍。下面以创建daima数据库为例介绍数据库创建的一般步骤:⑴在项目管理器中打开MIS项目文件。
⑵新建数据库并打开数据库设计器窗口。在弹出的项目管理器窗口中,选中“数据”选项卡中“数据库”项,再单击“新建”按钮,出现“新建数据库”对话框,如图1.35所示,再单击“新建数据库”按钮,接着在出现的“创建”对话框(如图1.36所示)中,将新建数据库取名为daima,存放位置确定为C:\mis\DATA,再单击“保存”按钮,则会打开“数据库设计器-Daima”窗口,如图1.37所示。
图1.35“新建数据库”对话框
29
图1.36“创建”对话框
图1.37“数据库设计器–Daima”窗口
⑶在数据库设计器中添加或新建表。如果有已经创建好的表要加入到数据库中,则可选择系统菜单中“数据库”菜单下的“添加表„”选项,或在数据库设计器窗口中单击鼠标右键,在弹出的
快捷菜单中选择“添加表„”选项,或单击“数据库设计器”工具栏中的按钮(添加表按钮),再选择需要添加的表即可。
本实验中主要介绍向数据库中新建表。其基本步骤如下:
①选择系统菜单中“数据库”菜单下的”新建表„”选项,或在数据库设计器窗口中单击鼠标右键,在弹出的快捷菜单中选择“新建表„”选项,或单击“数据库设计器”工具栏中的按钮(新建表按钮),出现如图1.38所示的“新建表”对话框。
30
图1.38“新建表”对话框
②在“新建表”对话框中单击“新建表”按钮,在出现的“创建”对话框(如图1.36所示)中将新建的表取名为chpdaima.dbf,存放位置为C:\mis\DATA,再单击“保存”按钮,接着就出现如图
1.39所示的“表设计器-chpdaima.dbf”窗口。
图1.39“表设计器-chpdaima.dbf”窗口
③在表设计器窗口中输入表chpdaima.dbf的字段名、字段类型和字段宽度。在图1.39所示的表设计器中,分别把表1.6中所列出的chpdaima.dbf表的字段名、字段类型和字段宽度输入。
④选择表的索引关键字段。在“产品代码”行中“索引”列的下拉列表框中,选择“升序”,就设置好了表的索引关键字。再单击表设计器中的“索引”选项卡,则可对该索引进行具体设置,包括设置索引类型、索引筛选条件等,本例中将该索引设置为“普通索引”,如图1.40所示。
图1.40表的索引的设置
⑤单击“确定”按钮,结束新建表的设计。此时系统会弹出一个对话框,询问是否立即向新建
31
的表中输入记录。如要立即输入记录,单击“是”按钮,就进入记录输入窗口;否则单击“否”按钮退出表的设计,返回“数据库设计器-Daima”窗口,这时就可看到在窗口中出现了新建的表chpdaima.dbf,如图1.41所示。
图1.41新建的表显示在数据库设计器窗口中
⑥按同样方法,把diqudaima(地区代码)表、jsfs(结算方式)表、jzbb(记账币别)表、kxxz(款项性质)表和pass(用户密码)表新建到daima数据库中,结果如图1.42所示。
图1.42创建好的daima数据库
⑷设置数据库中各表的关系。因本例中各数据表之间的数据关系比较简单,所以各表之间的关系设置就不作介绍。一般来说,当数据库中的各数据表之间的关系复杂时,利用各表的索引关键字将各表联系起来,可以将复杂的问题简化,同时也方便数据检索。
参照上述daima数据库的创建方法,将xshgl和zhkwl数据库及其包含的各表创建好。分别如图
1.43和1.44所示。
32
图1.43创建好的xshgl数据库图1.44创建好的zhkwl数据库
2.表的创建
包含在数据库中的表的创建,除了上述介绍的在创建数据库时利用数据库设计器创建外,也可在数据库创建好后,在项目管理器中向选定的数据库中新建表,其操作过程基本相同,都是通过“表设计器”进行表设计,在此就不再重复介绍。
3.向表中录入初始数据
上述过程创建的表,都没有添加记录。有些表的记录是在程序运行过程中,由用户录入的,但对jsfs表、pass.dbf表、kxxz表和jzbb表的内容,需要先行确定下来,因为程序中有些地方需要直接使用这些表的内容。
对jsfs表,录入结算方式为“现金”、“支票”、“汇票”的三条记录(仅以此为例);对pass表,登记初始用户名、用户密码和用户类型(本系统初始用户名有“zlq”、“zcb”、“lyh”,用户密码分别为“1234”、“abcd”、“123”,用户类型分别为“系统管理员”、“普通用户”、“普通用户”);对jzbb表,可录入“人民币”、“美元”、“日元”等常用的记账货币名称;对kxxz表,录入“应收款”、“应付款”、“定金”、“预付款”等记录。
至此,系统管理和销售管理两个子系统设计中用到的数据库和数据表就都创建完成了,后续的程序设计就可以进行了。
33
实验二数据备份、数据恢复和地区代码管理表单的设计
【实验目的和要求】
通过本次实验,了解系统管理子系统中通过表单实现数据备份、数据恢复及代码管理的设计思路,学会表单设计制作的基本方法,掌握系统开发中对基础数据管理、保护数据安全的常见设计方法。
【建议实验学时】
4学时。
【实验内容和步骤】
在系统管理和销售管理两个子系统使用的数据库和表都创建完成后,就可以使用已创建的表和数据库进行表单设计。在本实验中主要是介绍系统管理子系统使用的databak.scx、datarstore.scx、dqdm.scx三个表单的设计,另外cpdm.scx、kehugl.scx和mmgl.scx三个表单的设计,放在下一次实验中介绍。
表单的设计首先应创建新表单。新表单的创建,可以通过选择VFP6系统菜单“文件”下的“新建…”菜单项,也可以利用项目管理器,向项目中新建表单。为方便系统开发中设计者对各种文件的管理,以后关于表单设计的实验主要介绍通过项目管理器来新建表单的方法和过程。但不管用哪种方式新建表单,都是利用系统提供的“表单设计器”来进行的,其基本操作过程也大致相同。
一、数据备份表单databak.scx的设计
表单databak.scx的运行结果如图2.1所示。
图2.1表单databak.scx的运行结果
㈠新建表单
基本步骤如下:
⑴打开mis项目管理器窗口。
⑵打开“表单设计器”窗口。在项目管理器中选择“文档”选项卡中的“表单”项,再单击项目管理器窗口中的“新建”按钮,将出现如图2.2所示的“新建表单”对话框,再单击该对话框中的“新建表单”按钮,就出现如图2.3所示的“表单设计器”窗口。
34
图2.2“新建表单”对话框
图2.3“表单设计器”窗口
⑶向空白表单中添加控件。在图2.3所示的“表单设计器”窗口中,标题为“Form1”的窗口区,就是新建的空白表单,设计者就可利用VFP6系统提供的“表单控件工具”和“布局工具”等工具在该空白表单中添加和设计所需要的控件。
从表单databak.scx的运行结果分析,该表单包含2个标签、3个命令按钮、1个文本框和一个选项按钮组。文本框用于让用户输入所要备份的文件目录,选项按钮组让用户选择备份的结果文件存放的驱动器。由于不同用户的计算机可用的驱动器是不同的,这样选项按钮组的各选项按钮的标题和选项按钮的数量在设计表单时就不能固定,因此该表单中的选项按钮组在设计表单时不用设计,而是在表单运行时用程序代码进行动态设计,但在设计表单时,应预留选项按钮组的显示位置。所以,该表单在设计时,只需添加2个标签、3个命令按钮、1个文本框。
如在“表单设计器”打开时看不到“表单控件工具”和“布局工具”,可打开系统菜单的“显示”菜单,分别选取“表单控件工具栏”和“布局工具栏”菜单项就可以打开相应的设计工具栏了,然后按照图2.1所示的内容向表单中添加控件。
添加控件的基本方法是用鼠标单击“表单控件工具栏”中对应的按钮,然后鼠标指针指向表单中合适的位置按下左键拖动到合适的位置,再松开左键,就在表单中添加了相应的控件。具体细节请参阅有关VFP6的书籍,在此不再细述。
㈡设置表单属性
设置表单属性的常用方法是在表单空白位置单击鼠标右键,在弹出的快捷菜单中选择“属性”菜单项,就可打开“属性”窗口,然后在“属性”窗口中设置表单的各属性。表单databak.scx的几个重要属性设置如下:
35
AutoCenter=.t.
BorderStyle=“2-固定对话框”
Caption=“数据备份”
Height=243
Icon=“c:\mis\graphics\ico\green.ico”
MaxButton=.f.
MinButton=.f.
Width=281
WindowState=0-普通
另外,设计者还可根据自己的喜好,通过Picture属性设置用作表单背景的图片。
其余的属性值采用系统默认的值即可。
㈢编写表单代码
在表单空白区域单击鼠标右键,在弹出的快捷菜单中选择“代码”菜单项,就可打开代码编辑窗口,如图2.4所示。
图2.4表单的过程代码编辑窗口
在代码编辑窗口中,在“过程”下拉列表框中选择“Init”,再在编辑区输入如下代码:thisform.text1.setfocus(如图2.4所示),就是让该表单运行时,让文本框获得焦点。再在“过程”下拉列表框中选择“Load”,相应地在编辑区中输入表单“Load”事件的程序代码,如图2.5所示。36
图2.5表单的“Load”过程代码编辑窗口
表单的“Load”事件的程序代码如下:
DeclareintegerGetLogicalDrivesinkernel32.dllASIs_Driver_Readysettalkoff
nReslut=Is_Driver_Ready()
nMask=1
dimeused_id(26)
n=1
FORi=1TO26
IFBITAND(nReslut,nMask)!=0
Used_ID(n)=CHR(64+i)+":"
n=n+1
ENDIF
nMask=BITLSHIFT(nMask,1)
next
thisform.addobject("av_dr","optiongroup")
thisform.av_dr.enabled=.t.
thisform.av_dr.visible=.t.
thisform.av_dr.autosize=.t.
thisform.av_dr.backstyle=0
37
thisform.av_dr.buttoncount=n-1
thisform.av_dr.top=98
thisform.av_dr.left=60
thisform.av_dr.width=30
thisform.av_dr.value=2
fork=1ton-1
lsop="option"+alltrim(str(k))
thisform.av_dr.&lsop..caption="&used_id(k)"
next
该程序代码的功能是在表单运行时,就测试用户计算机可用的驱动器标志,再在表单中创建按钮选项组,并把可用的驱动器标志作为按钮选项组各选项按钮的标题。
㈣设置各控件的属性
要设置各控件的属性,也是先在表单中选中相应的控件,再在其“属性”窗口中设置其各属性的值。
1.标签的属性设置:
该表单中两个标签的Caption(标题)属性分别设置为“要备份的数据所在的位置:”和“将数据备份到:”;Top属性值分别为15和78;其他各主要属性相同,分别是:
AutoSize=.t.
BackStyle=.t.
FontBold=.t.
FontSize=12
FontName=“宋体”
ForeColor=“0,0,255”
Left=18
其余属性用系统默认值。
2.文本框的属性
Height=25
Left=15
Top=39
Width=219
其余属性用系统默认值。
3.命令按钮的属性设置
3个命令按钮的Caption(标题)属性分别设置为“„”、“确定”和“退出”;Top属性分别为39、129和177(这些属性值都是可以自由设置的,只要使其显示位置合适就行);Left属性分别为237、180和180;其他各主要属性相同,分别是:
AutoSize=.f.
FontSize=11
FontName=“宋体”
ForeColor=“0,0,0”
Height=25
其余属性用系统默认值。
㈤编写命令按钮的代码(操作方法参见表单的代码编写)
⑴标题为“„”的命令按钮的“Click”事件代码为:
38
bak_dr=getdir()
iflen(alltrim(bak_dr))=0
return
thisform.text1.setfocus
endif
thisform.text1.value=substr(bak_dr,1,len(bak_dr)-1)
thisform.text1.refresh
thisform.text1.setfocus
⑵“确定”命令按钮的“Click”事件代码为:
bf_path=alltrim(thisform.text1.value)
if.not.directory(bf_path)&&检测输入的文件目录是否存在
ans=messagebox("您输入的文件目录不存在,请再仔细检查一下!",0,"数据备份")return
thisform.text1.setfocus
endif
xz=alltrim(str(thisform.av_dr.value))&&xz保存选项组中选择的值
dr_id=lower(thisform.av_dr.option&xz..caption)&&dr_id保存对应的驱动器符号ifxz="1".and.(dr_id="a:".or.dr_id="b:")&&测试选择的是不是软驱
ans=messagebox("请插入软盘并打开写保护!",1,"数据备份")
ifans<>1
return
endif
disk_check=diskspace("&dr_id")&&返回软盘的剩余空间值并赋给disk_checkifdisk_check<0
ans=messagebox("软驱中没有磁盘!不能备份!",0,"数据备份")return
thisform.refresh
endif
num_bf=adir(afile,bf_path+"\*.*")
nsize=0
forncount=1tonum_bf
lsfile=alltrim(afile(ncount,1))
dress=at(".",lsfile)
lsfile=substr(lsfile,dress+1,3)
iflower(lsfile)<>"bak"
bfile=bf_path+"\"+afile(ncount,1)
crtfile=fopen("&bfile")
nsize=nsize+fseek(crtfile,0,2)
=fclose(crtfile)
endif
endfor
ifdisk_check<nsize
ans=messagebox("磁盘空间太小!不能备份!",0,"数据备份")
39
return
endif
wait"正在备份数据,请稍候„„"windowat200,200nowait
setdatetojapan
setcenton
outname=dr_id+"\b_"+alltrim(dtoc(date()))+".aaa"
outname=strtran(outname,"/","_")
outfile=fcreate(outname)
forncount=1tonum_bf
lsfile=alltrim(afile(ncount,1))
dress=at(".",lsfile)
lsfile=substr(lsfile,dress+1,3)
iflower(lsfile)<>"bak"
bfile=bf_path+"\"+afile(ncount,1)
crtfile=fopen("&bfile")
nsize=fseek(crtfile,0,2)
kw=fputs(outfile,afile(ncount,1))
kb=fputs(outfile,str(nsize))
kk=fseek(crtfile,0,0)
cstring=fread(crtfile,nsize)
=fclose(crtfile)
kc=fwrite(outfile,cstring)
endif
endfor
=fclose(outfile)
=messagebox("你选定目录下的文件已备份在"+outname+"文件中!",0,"数据备份")else&&如果用户选择的不是软驱
activatescreen
clear
disk_check=diskspace("&dr_id")&&返回所选磁盘的剩余空间值并赋给disk_checknum_bf=adir(afile,bf_path+"\*.*")&&将文件信息存入数组,并将文件数目保存nsize=0&&设定文件字节大小的计数器初始值
forncount=1tonum_bf&&此循环计算所选目录中除bak文件外所有文件的字节之和lsfile=alltrim(afile(ncount,1))
dress=at(".",lsfile)
lsfile=substr(lsfile,dress+1,3)
iflower(lsfile)<>"bak"
bfile=bf_path+"\"+afile(ncount,1)
crtfile=fopen("&bfile")
nsize=nsize+fseek(crtfile,0,2)
=fclose(crtfile)
endif
endfor
40
ifdisk_check<nsize
ans=messagebox("磁盘空间太小!不能备份!",0,"数据备份")
return
endif
wait"正在备份数据,请稍候„„"windowat200,200nowait
bf_dir=dr_id+"\"+"databackup"
if.not.directory("&bf_dir")
md("&bf_dir")
endif
setdatetojapan
setcenton
outname=bf_dir+"\b_"+alltrim(dtoc(date()))+".aaa"
outname=strtran(outname,"/","_")
outfile=fcreate(outname)
forncount=1tonum_bf
lsfile=alltrim(afile(ncount,1))
dress=at(".",lsfile)
lsfile=substr(lsfile,dress+1,3)
iflower(lsfile)<>"bak"
bfile=bf_path+"\"+afile(ncount,1)
crtfile=fopen("&bfile")
nsize=fseek(crtfile,0,2)
kw=fputs(outfile,afile(ncount,1))
kb=fputs(outfile,str(nsize))
kk=fseek(crtfile,0,0)
cstring=fread(crtfile,nsize)
=fclose(crtfile)
kc=fwrite(outfile,cstring)
endif
endfor
=fclose(outfile)
=messagebox("你选定目录下的文件已备份在"+outname+"文件中!",0,"数据备份")endif
waitclear
return
⑶“退出”命令按钮的“Click”事件代码为:
thisform.release
该表单没有使用表,故不用设置表单的“数据环境”。
这样表单databak.scx就设计好了,如图2.6所示。
41
图2.6databak.scx表单的设计结果
⑷保存表单。如果设计工作全部都完成,关闭“表单设计器窗口”或执行“保存”菜单选项或单击系统常用工具栏中的保存按钮,在出现的对话框中将表单命名为databak.scx,存放位置是C:\mis\forms。
另外在设计过程中可随时试运行表单看看,如果存在问题,再返回到“表单设计器”窗口进行修改。试运行表单的常用方法:鼠标右击表单中空白区域,在弹出的快捷菜单中选择执行“执行表单”菜单项,或者选择VFP6系统菜单中“表单”菜单下的“执行表单”选项。在试运行表单时,系统首先会出现对话框询问是否保存设计的表单,选择“是”,再在出现的“另存为”对话框中指定表单文件的名称为“databak.scx”,存放位置是“C:\mis\forms”,这样也可以保存表单。
这样表单databak.scx就设计完成了。
二、数据恢复表单datarstore.scx的设计
表单datarstore.scx的运行结果如图2.7所示。
图2.7表单datarstore.scx的运行结果
从表单datarstore.scx的运行结果分析,该表单包含5个标签、4个命令按钮、2个文本框、1个列表框和几个线条。一个文本框用于让用户输入备份文件所在的文件目录,另一个文本框用于让用
42
户输入从备份文件恢复的文件要存放的目录,列表框用于显示在用户指定的存放备份文件的目录中可用的备份文件,以供用户选择。两个文本框右边的命令按钮,主要用于弹出对话框让用户选择文件目录。
表单datarstore.scx的设计结果如图2.8所示。
图2.8表单datarstore.scx的设计结果
表单的创建及表单中控件的添加过程和方法,与databak.scx表单的创建基本相同,在此不再详述。关于各标签的属性,参阅databak表单的设计,可根据个人喜好灵活设置,不一定要与上述运行结果完全一样,这里就不作介绍。下面主要介绍表单的属性、代码以及关键控件的属性和代码。
㈠表单的属性:
AutoCenter=.T.
BorderStyle=“2-固定对话框”
Caption=“数据恢复”
Height=250
Icon=“c:\mis\graphics\ico\ff10.ico”
MaxButton=.F.
MinButton=.F.
Width=442
WindowState=0-普通
其余的属性值采用系统默认的值即可。
㈡表单的“Init”事件的代码
mand1.setfocus
㈢Text1文本框的属性和代码
1.Text1文本框的属性
FontName=“宋体”
FontSize=11
Height=25
Left=153
Top=51
Width=237
43
2.Text1文本框的代码
⑴“Init”事件代码:
this.value="c:\"
⑵“LostFocus”事件代码:
thisform.list1.clear
bak_dr=alltrim(thisform.text1.value)
ifdirectory(bak_dr)
nmb=adir(farray,bak_dr+"\*.aaa")
ifnmb=0
thisform.list1.additem("该目录下没有要恢复的备份文件!")
thisform.text2.enabled=.f.
mand2.enabled=.f.
mand3.enabled=.f.
thisform.refresh
thisform.text1.gotfocus
return
else
thisform.text2.enabled=.t.
mand2.enabled=.t.
mand3.enabled=.t.
thisform.list1.enabled=.t.
thisform.refresh
thisform.list1.gotfocus
forncount=1tonmb
lsfile=farray(ncount,1)
lsfile=substr(lsfile,1,len(lsfile)-4)
thisform.list1.additem(lsfile)
endfor
thisform.list1.selected(1)=.t.
endif
endif
thisform.list1.refresh
thisform.text2.gotfocus
⑶“Valid”过程代码:
bak_dr=alltrim(thisform.text1.value)
iflen(bak_dr)=0
return
thisform.text1.gotfocus
endif
if.not.directory(bak_dr)
=messagebox("您确定的文件目录不存在,请您再仔细检查一下!",0,"出错信息提示")thisform.text2.enabled=.f.
mand2.enabled=.f.
44
mand3.enabled=.f.thisform.list1.enabled=.f.
thisform.refresh
return
thisform.text1.gotfocusendif
㈣Text2文本框的属性和代码
1.Text2文本框的属性
FontName=“宋体”
FontSize=11
Height=25
Left=153
Top=171
Width=240
2.Text2文本框的代码
“Init”事
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 早绝经与绝经女性骨质疏松防治指南2026解读
- 成人腰大池引流护理2026
- 儿科雾化护理共识精解
- 制材工岗前实操水平考核试卷含答案
- 棉花收获机操作工安全行为竞赛考核试卷含答案
- 快件派送员岗前理论考核试卷含答案
- 印染丝光工岗前生产安全水平考核试卷含答案
- 数控水射流切割机操作工安全文化能力考核试卷含答案
- 26年运动能力评估随访
- 医学26年:急性胆管炎诊疗要点 查房课件
- 2025年法检系统书记员招聘考试(公共基础知识)综合练习题及答案
- XJJ 077-2017 高性能混凝土应用技术规程
- AI时代网络安全产业人才发展报告(2025年)-安恒信息
- 公司保密工作总结汇报
- 20以内连减过关作业口算题大全附答案
- 新闻编辑实践作业汇报
- 硬币清点管理办法
- 工业机器人专业介绍课件
- 独舞大赛活动方案
- 统编版八年级下册历史期末复习:材料题答题技巧+常考50题专项练习题(含答案解析)
- 电力拖动自动控制系统-运动控制系统(第5版)习题答案
评论
0/150
提交评论