论文部分内容阅读
摘要:以Microsoft Visual FoxPro 6.0为关系数据库管理系统,以读者数据输入模块为例,详细分析与探讨了管理信息系统数据输入模块的设计思想与具体实现步骤及方法。
关键词:管理信息系统;数据输入模块;读者数据;VFP程序设计
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)03-10606-04
1 引言
数据输入模块是管理信息系统最关键的功能模块之一,输入准确、方便易用是该模块最基本的要求。设计输入模块时,首先要根据系统的实际需要设计与建立相应的数据表结构,建立清晰实用的数据输入表单,再对表单及有关控件对象的相关事件设计相应的程序代码,最后对模块进行调试、完善,使之运行时能最终实现数据的输入功能。由于在实际操作过程中不能排除数据输入错误的可能性,所以在输入模块中设计简单的记录定位及数据修改功能也是非常必要的,而且应该考虑对明显的数据输入错误进行自动判断与处理的功能。为了尽可能消除输入过程中可能发生的失误,还应当在进行特定的操作时使某些命令按钮或命令按钮组控件处于无效状态,而相应操作的一些控件必须处于可用的有效状态。
2 设计与建立数据表
假定读者信息包括读者编号、姓名、性别、所在单位、是否学生、电话号码、照片等(可根据具体要求添加其它信息)。利用Microsoft Visual FoxPro 6.0(简称VFP)在默认目录或指定目录下建立名为duzhe.dbf的读者数据表,表的结构如表1所示。其中,字段名是对应“含义”的汉语拼音首字母的缩写,字符型字段的宽度应根据实际需要设计,这里给出的是参考值。Duzhe.dbf数据表中的记录有如下特点:①读者编号不能为空;②读者编号不能有重复。设计数据输入的程序流程时必须充分考虑这种特点的要求。
3 设计与建立表单
建立数据表的结构后,需要通过一定的方法将各条记录对应的字段值输入并保存。作为管理信息系统,基本数据的输入一般是通过友好、易用的输入界面进行的。可先根据数据表的字段设计好数据输入界面,然后利用VFP建立相应的表单,并将表单文件保存在与duzhe.dbf数据表相同的目录下。所建立的“基本信息输入”的表单界面如图1所示(在“属性”对话框将表单的Caption属性设置为“基本信息输入”),其中,两条直线之间是与数据表的字段对应的控件对象,上边直线以上的部分是标签控件,下边直线以下的部分是命令按钮和命令按钮组控件。
图1 读者基本数据输入于修改界面
两直线之间的控件通过以下方法设置:①用右键单击表单空白部分,在弹出的快捷菜单中选择“数据环境”,再在出现的“打开”对话框中选择duzhe.dbf数据表,然后单击“确定”按钮,就会看到duzhe数据表添加到了数据环境设计器中,同时看到“添加表或视图”对话框,此时单击“关闭”按钮可关闭“添加表或视图”对话框;②将数据环境设计器中duzhe数据表的各字段分别拖动到表单中设计好的位置,可以看到表单上添加了相应的控件对象,其中,字符型数据字段dzbh、xm、xb、dhhm、szdw分别对应于标签控件Dzbh、Xm、Xb、Dhhm、Szdw與文本框控件txtDzbh、txtXm、txtXb、txtDhhm、txtSzdw两种对象,逻辑型数据字段sfxs对应于复选框控件Sfxs(对应于图1所示表单上的“是否学生”控件),通用型数据字段zp对应于标签Zp与ActiveX绑定控件olbZp两个对象,各文本框、复选框、与olbZp控件的ControlSource属性已设置为各自对应的duzhe.dbf数据表中的字段;③通过“属性”对话框将复选框Sfxs的Alignment属性设置为“1-右”,将Dzbh、Xm、Xb、Dhhm、Szdw、Zp标签与Sfxs复选框的Caption属性分别设置为“读者编号”、“姓 名”、“性 别”、“电话号码”、“所在单位”、“单击更新照片”与“是否学生”,并调整这些控件的大小及位置;④在“表单控件”工具栏单击“文本框”按钮,在表单上画相应的txtDzbh1文本框控件,通过“属性”对话框将其Name属性设置为txtDzbh1,而通过以上操作后,各文本框的Name属性均已设置为文本框中的名字,复选框的Name属性已设置为chkSfxs,标签“单击更新照片”上边的ActiveX绑定控件的Name属性已设置为olbZp;⑤通过“属性”对话框将olbZp控件的Stretch属性设置为“1-等比填充”。通过这些设置,可使表单启动后直接显示出duzhe.dbf数据表中第一条记录的相应字段的值。
上边直线以上的标签控件的设置方法是,单击“表单控件”工具栏的“标签”按钮,在表单上设计好的位置画标签控件,通过“属性”对话框将标签的Caption属性设置为“读者基本数据”,其字体、字号和颜色分别通过设置其FontName、FontSize和ForeColor属性实现。
下边直线以下的“新增”、“确定”、“取消”、“退出”命令按钮的设置方法是,单击“表单控件”工具栏的“命令按钮”按钮,在表单上设计好的位置画相应的命令按钮控件,通过“属性”对话框将各按钮的Caption属性分别设置为按钮上所示的名字,并将它们的Name属性分别设置为xinzeng、queding、quxiao、tuichu。
包含“首记录”、“下一条”、“上一条”、“末记录”的命令按钮组控件的设置方法是,单击“表单控件”工具栏的“命令按钮组”按钮,在表单上设计好的位置画相应的命令按钮组控件,其Name属性默认为Commandgroup1,在“属性”对话框将其ButtonCount属性设置为4,右键单击该按钮组控件,在弹出的快捷菜单选择“生成器”,再在弹出的“命令组生成器”对话框选择“布局”选项卡,将“按钮布局”选择为“水平”,将“按钮间隔”设置为0,“边框样式”选择为“无”,再单击“命令组生成器”对话框的“确定”按钮。最后在“属性”对话框将按钮组中各按钮的Caption属性设置为按钮上的名字,它们的Name属性对应设置为shoujilu、xiayitiao、shangyitiao、mojilu。后面的程序中将用到这些Name属性。
两条直线的设置方法是,单击“表单控件”工具栏的“线条”按钮,直接在表单上相应的位置画出直线。
4 基本输入功能的实现
建立数据表及数据输入表单后,应根据输入模块拟实现的功能来设计相应的程序流程与代码。
4.1 设置缓冲方式
缓冲方式通过设置表单的BufferMode属性和数据环境中数据表对象的BufferModeOverride属性完成。在“属性”对话框,将表单的BufferMode属性设置为“1-保守式”或“2-开放式”,从而指定为保守式或开放式更新记录。同时,将数据环境设计器中的duzhe对象的BufferModeOverride属性设置为“1-使用表单设置(默认值)”。
如果指定为保守式更新记录,那么在开始编辑时记录锁定,在记录指针移动时写字段,可用TABLEREVERT()来撤消对当前记录的更改;如果是开放式更新记录,那么编辑时记录不锁定,而当使用TABLEUPDATE()将记录写向磁盘时,Visual FoxPro试图锁定记录。如果使用默认的BufferMode属性设置或将BufferModeOverride属性设置为“0-无”,后面提到的程序将会出错。
4.2 输入记录
要输入一条新记录,需要先输入记录号,再单击“新增”按钮,然后将数据通过表单界面输入,最后单击“确定”按钮将输入的数据真正保存至数据表,或单击“取消”按钮撤消本次输入。
4.2.1 “新增”过程的处理
新增一条记录的处理过程是:先在txtDzbh1文本框中输入记录号,然后单击“新增”按钮,如果输入的记录号为空串或空值(即无输入记录号),则弹出“注意”对话框提示“读者编号不能为空!”,而如果在duzhe.dbf数据表中已有与输入的记录号相匹配的记录,则在表单中显示出此条记录,并弹出“注意”对话框提示“此读者编号的记录已存在!”。相反,如果输入至txtDzbh1文本框中的记录号不为空串(或空值),且duzhe.dbf数据表中又没有匹配的记录,那么,就需要在数据表中追加一条空白记录,并刷新表单,将txtDzbh1文本框中的内容传递至txtDzbh中,再通过信息输入界面输入其它数据(可以是有选择性地输入数据),再刷新表单。输入的数据最终是否真正更新数据表,还需要单击“确定”或“取消”按钮来决定。此外,为提高操作的合理性,应当考虑焦点定位于哪个控件以及各命令按钮和命令按钮组控件是否有效。其中,焦点定位于某控件采用setfocus方法,控件的有效性通过设置其enabled属性实现,刷新表单用refresh方法,弹出“注意”对话框用messagebox()实现。由于涉及精确比较,所以应当在程序的开始设置为精确比较方式,程序结束前再恢复为默认的比较方式。“新增”按钮的Click事件的过程和VFP代码如表2所示(部分)。
表2
4.2.2 “确定”过程的处理
单击“确定”按钮,输入的数据将真正保存至数据表。要实现此功能,可使用tableupdate()函数执行对数据表的更新,同时应当考虑焦点定位于哪个控件以及各命令按钮和命令按钮组是否有效。“确定”按钮的Click事件的具体过程和VFP代码如表3所示。
表3
3.2.3 “取消”过程的处理
单击“取消”按钮将撤消本次输入,数据不会保存到数据表。要实现此功能,可使用tablerevert()函数撤消对数据表的更新。如果使用tablerevert()引起指针指向表尾,可使指针定位于末记录,再继续后的动作,应当考虑焦点定位于哪个控件以及各命令按钮和命令按钮组是否有效。“取消”按钮的Click事件的具体过程和VFP代码如表4所示。
表4
4.3 输入或更新照片
输入或更新照片通过单击“单击更新照片”标签对象完成,需要在其Click过程中输入相应的程序代码。输入及更新照片操作的大致处理过程是:判断duzhe.dbf数据表中有无数据,如果有数据,那么就弹出“打开”对话框以选择照片文件,将选定的照片文件信息存入当前记录对应的通用字段zp,而无选定照片文件时则提示“无选择照片文件,照片无更新!”;相反,如果duzhe.dbf数据表中还无任何记录,则提示“请先输入读者编号,并单击[新增]按钮!”。其中,判断是否有记录用reccount()的值是否大于0来表示,弹出“打开”对话框用getfile()表示,提示信息对话框用messagebox()表示。另外,需要根据不同的情况,将各命令按钮及命令按组控件设置为有效或无效状态,尽可能避免或减少误操作的可能。“单击更新照片”标签控件的Click事件的VFP代码如表5所示。
表5
(注:此表第11行和第14行的分号为续行符)
4.4 记录定位
输入若干记录后,有时希望检查一下输入的数据是否正确或希望修改刚输入的记录,在输入模块提供记录的定位功能将是非常方便的。记录定位至某条记录后,可通过表单界面修改数据,然后单击“确定”按钮更新记录或单击“取消”按钮撤消修改。记录的定位包括定位至首记录、下一条、上一条、末记录,这些功能可通过单击命令按钮组的相应按钮来实现。
记录定位过程大致是:当命令按钮组有效(或可用)时,如果duzhe.dbf数据表有记录,那么任何时候单击“首记录”按钮都会显示出第一条记录,单击“末记录”按钮都会显示最后一条记录,单击“上一条”按钮都显示前一条记录(或当已显示第一条记录且单击“上一条”按钮时仍显示第一条记录),单击“下一条”按钮都显示后一条记录(或当已显示最后一条记录且单击“下一条”按钮时仍显示最后一条记录);而如果duzhe.dbf数据表中无记录,那么单击这些按钮时都会弹出“提示”对话框,提示“无任何记录!”。另外,为便于输入新记录,单击这些按钮时,除执行上述功能外,还应及时将焦点定位于txtDzbh1文本框。这些按钮的Click事件对应的VFP程序代码如表6和表7所示。
3.5 数据修改操作的自动判断与处理
当文本框txtXm、txtXb、txtDhhm、txtSzdw控件及复选框“是否学生”控件获得焦点时,表明有可能要修改其中的内容,这些控件获得焦点时发生的动作在相应控件的GotFocus事件中进行,这些控件的值更改时所发生的操作在相应控件的InteractiveChange事件中完成。
3.5.1 相关控件的GotFocus事件
通过用户操作或以代码方式使文本框txtXm、txtXb、txtDhhm、txtSzdw控件及复选框“是否学生”控件获得焦点时,需要将txtDzbh1文本框中的内容清空,以便用户操作这些控件(除txtDzbh1控件外)时感觉上与txtDzbh1中先前的内容无关。这些控件的GotFocus过程的VFP代码对应如下:thisform.txtDzbh1.value=space(0)
3.5.2 相关控件的InteractiveChange事件
文本框txtXm、txtXb、txtDhhm、txtSzdw控件及复选框“是否学生”控件的值更改时,就可能需要将改变后的值写到duzhe.dbf数据表文件。这时,只有“确定”和“取消”按钮有效,可单击“确定”按钮更新数据表(或单击“取消”按钮撤消所作的改变);同时,“新增”、“退出”按钮及命令按钮组应处于不可用(或无效)状态。这些文本框及复选框控件对象的InteractiveChange过程的VFP代码对应如下:
thisform.xinzeng.enabled=.f.
thisform.queding.enabled=.t.
thisform.quxiao.enabled=.t.
thisform.tuichu.enabled=.f.
thisform.commandgroup1.enabled=.f.
4.6 退出输入模块
当“退出”按钮有效时,任何时候单击此按钮都应释放表单。该事件过程的VFP代码对应如下:thisform.release。
5 辅助功能的设计与实现
基本功能实现后,还需要进行辅助功能的设计,通过对程序进行调试发现问题并加以解决,使程序模块完善、合理、易用。
5.1 表单启动后txtDzbh1自动获得焦点
表单一旦启动,就有可能在txtDzbh1文本框输入数据。所以,表单启动后焦点定位于txtDzbh1文本框将是非常方便的,可在表单的Init事件中利用setfocus方法使txtDzbh1获得焦点。表单的Init事件过程的VFP代码如下:thisform.txtDzbh1.setfocus
5.2 清空txtDzbh1便于输入读者编号
任何时候单击txtDzbh1文本框或通过程序代码使txtDzbh1文本框获得焦点,都表明有可能是要输入读者编号信息。为便于信息输入,需要在该文本框控件的Click事件和GotFocus事件中將文本框先前的内容清空。此功能可通过将txtDzbh1文本框的Value属性设置为空串来实现。txtDzbh1的Click及GotFocus事件的VFP代码为thisform.txtDzbh1.value=space(0),或者为this.value=space(0)。
5.3 txtDzbh文本框中的数据禁止修改
txtDzbh文本框中的数据由txtDzbh1中的数据直接传递而来,不能随便更改。可在“属性”对话框将txtDzbh文本框的ReadOnly属性设置为“.T.-真”,使txtDzbh中的数据不允许修改。
5.4表单右上角的关闭按钮禁止单击
表单上的数据无意被修改时,即使没有单击“确定”和“取消”按钮,也可能会由于单击表单右上角的关闭按钮而释放表单,从而将无意更改的数据写入数据表。为防止数据表中的数据被无意修改,应通过“属性”对话框将表单的Closable属性设置为“.F.-假”,使用户不能通过单击表单右上角的关闭按钮释放表单。
5.5 使输入操作更合理
依次将控件txtDzbh1、txtDzbh、txtXm、txtXb、“是否学生”、txtDhhm、txtSzdw、“新增”、“确定”、“取消”、Commandgroup1、“退出”的TabIndex属性设置为1至12,以方便输入操作时使用Tab键或回车键依次选择下一个对象(包括文本框、复选框、命令按钮)。
5.6 使表单界面更清晰
设置表单界面中相关控件的颜色,可使界面变得清晰易用。文本框txtDzbh1中文字的颜色可通过设置其ForeColor属性实现,以区别于duzhe.dbf数据表的数据在对应文本框或复选框中的显示。同样,可设置“单击更新照片”标签的ForeColor属性来选择合适的字体颜色;直线的颜色通过设置其BorderColor属性来实现。
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:管理信息系统;数据输入模块;读者数据;VFP程序设计
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)03-10606-04
1 引言
数据输入模块是管理信息系统最关键的功能模块之一,输入准确、方便易用是该模块最基本的要求。设计输入模块时,首先要根据系统的实际需要设计与建立相应的数据表结构,建立清晰实用的数据输入表单,再对表单及有关控件对象的相关事件设计相应的程序代码,最后对模块进行调试、完善,使之运行时能最终实现数据的输入功能。由于在实际操作过程中不能排除数据输入错误的可能性,所以在输入模块中设计简单的记录定位及数据修改功能也是非常必要的,而且应该考虑对明显的数据输入错误进行自动判断与处理的功能。为了尽可能消除输入过程中可能发生的失误,还应当在进行特定的操作时使某些命令按钮或命令按钮组控件处于无效状态,而相应操作的一些控件必须处于可用的有效状态。
2 设计与建立数据表
假定读者信息包括读者编号、姓名、性别、所在单位、是否学生、电话号码、照片等(可根据具体要求添加其它信息)。利用Microsoft Visual FoxPro 6.0(简称VFP)在默认目录或指定目录下建立名为duzhe.dbf的读者数据表,表的结构如表1所示。其中,字段名是对应“含义”的汉语拼音首字母的缩写,字符型字段的宽度应根据实际需要设计,这里给出的是参考值。Duzhe.dbf数据表中的记录有如下特点:①读者编号不能为空;②读者编号不能有重复。设计数据输入的程序流程时必须充分考虑这种特点的要求。
3 设计与建立表单
建立数据表的结构后,需要通过一定的方法将各条记录对应的字段值输入并保存。作为管理信息系统,基本数据的输入一般是通过友好、易用的输入界面进行的。可先根据数据表的字段设计好数据输入界面,然后利用VFP建立相应的表单,并将表单文件保存在与duzhe.dbf数据表相同的目录下。所建立的“基本信息输入”的表单界面如图1所示(在“属性”对话框将表单的Caption属性设置为“基本信息输入”),其中,两条直线之间是与数据表的字段对应的控件对象,上边直线以上的部分是标签控件,下边直线以下的部分是命令按钮和命令按钮组控件。
图1 读者基本数据输入于修改界面
两直线之间的控件通过以下方法设置:①用右键单击表单空白部分,在弹出的快捷菜单中选择“数据环境”,再在出现的“打开”对话框中选择duzhe.dbf数据表,然后单击“确定”按钮,就会看到duzhe数据表添加到了数据环境设计器中,同时看到“添加表或视图”对话框,此时单击“关闭”按钮可关闭“添加表或视图”对话框;②将数据环境设计器中duzhe数据表的各字段分别拖动到表单中设计好的位置,可以看到表单上添加了相应的控件对象,其中,字符型数据字段dzbh、xm、xb、dhhm、szdw分别对应于标签控件Dzbh、Xm、Xb、Dhhm、Szdw與文本框控件txtDzbh、txtXm、txtXb、txtDhhm、txtSzdw两种对象,逻辑型数据字段sfxs对应于复选框控件Sfxs(对应于图1所示表单上的“是否学生”控件),通用型数据字段zp对应于标签Zp与ActiveX绑定控件olbZp两个对象,各文本框、复选框、与olbZp控件的ControlSource属性已设置为各自对应的duzhe.dbf数据表中的字段;③通过“属性”对话框将复选框Sfxs的Alignment属性设置为“1-右”,将Dzbh、Xm、Xb、Dhhm、Szdw、Zp标签与Sfxs复选框的Caption属性分别设置为“读者编号”、“姓 名”、“性 别”、“电话号码”、“所在单位”、“单击更新照片”与“是否学生”,并调整这些控件的大小及位置;④在“表单控件”工具栏单击“文本框”按钮,在表单上画相应的txtDzbh1文本框控件,通过“属性”对话框将其Name属性设置为txtDzbh1,而通过以上操作后,各文本框的Name属性均已设置为文本框中的名字,复选框的Name属性已设置为chkSfxs,标签“单击更新照片”上边的ActiveX绑定控件的Name属性已设置为olbZp;⑤通过“属性”对话框将olbZp控件的Stretch属性设置为“1-等比填充”。通过这些设置,可使表单启动后直接显示出duzhe.dbf数据表中第一条记录的相应字段的值。
上边直线以上的标签控件的设置方法是,单击“表单控件”工具栏的“标签”按钮,在表单上设计好的位置画标签控件,通过“属性”对话框将标签的Caption属性设置为“读者基本数据”,其字体、字号和颜色分别通过设置其FontName、FontSize和ForeColor属性实现。
下边直线以下的“新增”、“确定”、“取消”、“退出”命令按钮的设置方法是,单击“表单控件”工具栏的“命令按钮”按钮,在表单上设计好的位置画相应的命令按钮控件,通过“属性”对话框将各按钮的Caption属性分别设置为按钮上所示的名字,并将它们的Name属性分别设置为xinzeng、queding、quxiao、tuichu。
包含“首记录”、“下一条”、“上一条”、“末记录”的命令按钮组控件的设置方法是,单击“表单控件”工具栏的“命令按钮组”按钮,在表单上设计好的位置画相应的命令按钮组控件,其Name属性默认为Commandgroup1,在“属性”对话框将其ButtonCount属性设置为4,右键单击该按钮组控件,在弹出的快捷菜单选择“生成器”,再在弹出的“命令组生成器”对话框选择“布局”选项卡,将“按钮布局”选择为“水平”,将“按钮间隔”设置为0,“边框样式”选择为“无”,再单击“命令组生成器”对话框的“确定”按钮。最后在“属性”对话框将按钮组中各按钮的Caption属性设置为按钮上的名字,它们的Name属性对应设置为shoujilu、xiayitiao、shangyitiao、mojilu。后面的程序中将用到这些Name属性。
两条直线的设置方法是,单击“表单控件”工具栏的“线条”按钮,直接在表单上相应的位置画出直线。
4 基本输入功能的实现
建立数据表及数据输入表单后,应根据输入模块拟实现的功能来设计相应的程序流程与代码。
4.1 设置缓冲方式
缓冲方式通过设置表单的BufferMode属性和数据环境中数据表对象的BufferModeOverride属性完成。在“属性”对话框,将表单的BufferMode属性设置为“1-保守式”或“2-开放式”,从而指定为保守式或开放式更新记录。同时,将数据环境设计器中的duzhe对象的BufferModeOverride属性设置为“1-使用表单设置(默认值)”。
如果指定为保守式更新记录,那么在开始编辑时记录锁定,在记录指针移动时写字段,可用TABLEREVERT()来撤消对当前记录的更改;如果是开放式更新记录,那么编辑时记录不锁定,而当使用TABLEUPDATE()将记录写向磁盘时,Visual FoxPro试图锁定记录。如果使用默认的BufferMode属性设置或将BufferModeOverride属性设置为“0-无”,后面提到的程序将会出错。
4.2 输入记录
要输入一条新记录,需要先输入记录号,再单击“新增”按钮,然后将数据通过表单界面输入,最后单击“确定”按钮将输入的数据真正保存至数据表,或单击“取消”按钮撤消本次输入。
4.2.1 “新增”过程的处理
新增一条记录的处理过程是:先在txtDzbh1文本框中输入记录号,然后单击“新增”按钮,如果输入的记录号为空串或空值(即无输入记录号),则弹出“注意”对话框提示“读者编号不能为空!”,而如果在duzhe.dbf数据表中已有与输入的记录号相匹配的记录,则在表单中显示出此条记录,并弹出“注意”对话框提示“此读者编号的记录已存在!”。相反,如果输入至txtDzbh1文本框中的记录号不为空串(或空值),且duzhe.dbf数据表中又没有匹配的记录,那么,就需要在数据表中追加一条空白记录,并刷新表单,将txtDzbh1文本框中的内容传递至txtDzbh中,再通过信息输入界面输入其它数据(可以是有选择性地输入数据),再刷新表单。输入的数据最终是否真正更新数据表,还需要单击“确定”或“取消”按钮来决定。此外,为提高操作的合理性,应当考虑焦点定位于哪个控件以及各命令按钮和命令按钮组控件是否有效。其中,焦点定位于某控件采用setfocus方法,控件的有效性通过设置其enabled属性实现,刷新表单用refresh方法,弹出“注意”对话框用messagebox()实现。由于涉及精确比较,所以应当在程序的开始设置为精确比较方式,程序结束前再恢复为默认的比较方式。“新增”按钮的Click事件的过程和VFP代码如表2所示(部分)。
表2
4.2.2 “确定”过程的处理
单击“确定”按钮,输入的数据将真正保存至数据表。要实现此功能,可使用tableupdate()函数执行对数据表的更新,同时应当考虑焦点定位于哪个控件以及各命令按钮和命令按钮组是否有效。“确定”按钮的Click事件的具体过程和VFP代码如表3所示。
表3
3.2.3 “取消”过程的处理
单击“取消”按钮将撤消本次输入,数据不会保存到数据表。要实现此功能,可使用tablerevert()函数撤消对数据表的更新。如果使用tablerevert()引起指针指向表尾,可使指针定位于末记录,再继续后的动作,应当考虑焦点定位于哪个控件以及各命令按钮和命令按钮组是否有效。“取消”按钮的Click事件的具体过程和VFP代码如表4所示。
表4
4.3 输入或更新照片
输入或更新照片通过单击“单击更新照片”标签对象完成,需要在其Click过程中输入相应的程序代码。输入及更新照片操作的大致处理过程是:判断duzhe.dbf数据表中有无数据,如果有数据,那么就弹出“打开”对话框以选择照片文件,将选定的照片文件信息存入当前记录对应的通用字段zp,而无选定照片文件时则提示“无选择照片文件,照片无更新!”;相反,如果duzhe.dbf数据表中还无任何记录,则提示“请先输入读者编号,并单击[新增]按钮!”。其中,判断是否有记录用reccount()的值是否大于0来表示,弹出“打开”对话框用getfile()表示,提示信息对话框用messagebox()表示。另外,需要根据不同的情况,将各命令按钮及命令按组控件设置为有效或无效状态,尽可能避免或减少误操作的可能。“单击更新照片”标签控件的Click事件的VFP代码如表5所示。
表5
(注:此表第11行和第14行的分号为续行符)
4.4 记录定位
输入若干记录后,有时希望检查一下输入的数据是否正确或希望修改刚输入的记录,在输入模块提供记录的定位功能将是非常方便的。记录定位至某条记录后,可通过表单界面修改数据,然后单击“确定”按钮更新记录或单击“取消”按钮撤消修改。记录的定位包括定位至首记录、下一条、上一条、末记录,这些功能可通过单击命令按钮组的相应按钮来实现。
记录定位过程大致是:当命令按钮组有效(或可用)时,如果duzhe.dbf数据表有记录,那么任何时候单击“首记录”按钮都会显示出第一条记录,单击“末记录”按钮都会显示最后一条记录,单击“上一条”按钮都显示前一条记录(或当已显示第一条记录且单击“上一条”按钮时仍显示第一条记录),单击“下一条”按钮都显示后一条记录(或当已显示最后一条记录且单击“下一条”按钮时仍显示最后一条记录);而如果duzhe.dbf数据表中无记录,那么单击这些按钮时都会弹出“提示”对话框,提示“无任何记录!”。另外,为便于输入新记录,单击这些按钮时,除执行上述功能外,还应及时将焦点定位于txtDzbh1文本框。这些按钮的Click事件对应的VFP程序代码如表6和表7所示。
3.5 数据修改操作的自动判断与处理
当文本框txtXm、txtXb、txtDhhm、txtSzdw控件及复选框“是否学生”控件获得焦点时,表明有可能要修改其中的内容,这些控件获得焦点时发生的动作在相应控件的GotFocus事件中进行,这些控件的值更改时所发生的操作在相应控件的InteractiveChange事件中完成。
3.5.1 相关控件的GotFocus事件
通过用户操作或以代码方式使文本框txtXm、txtXb、txtDhhm、txtSzdw控件及复选框“是否学生”控件获得焦点时,需要将txtDzbh1文本框中的内容清空,以便用户操作这些控件(除txtDzbh1控件外)时感觉上与txtDzbh1中先前的内容无关。这些控件的GotFocus过程的VFP代码对应如下:thisform.txtDzbh1.value=space(0)
3.5.2 相关控件的InteractiveChange事件
文本框txtXm、txtXb、txtDhhm、txtSzdw控件及复选框“是否学生”控件的值更改时,就可能需要将改变后的值写到duzhe.dbf数据表文件。这时,只有“确定”和“取消”按钮有效,可单击“确定”按钮更新数据表(或单击“取消”按钮撤消所作的改变);同时,“新增”、“退出”按钮及命令按钮组应处于不可用(或无效)状态。这些文本框及复选框控件对象的InteractiveChange过程的VFP代码对应如下:
thisform.xinzeng.enabled=.f.
thisform.queding.enabled=.t.
thisform.quxiao.enabled=.t.
thisform.tuichu.enabled=.f.
thisform.commandgroup1.enabled=.f.
4.6 退出输入模块
当“退出”按钮有效时,任何时候单击此按钮都应释放表单。该事件过程的VFP代码对应如下:thisform.release。
5 辅助功能的设计与实现
基本功能实现后,还需要进行辅助功能的设计,通过对程序进行调试发现问题并加以解决,使程序模块完善、合理、易用。
5.1 表单启动后txtDzbh1自动获得焦点
表单一旦启动,就有可能在txtDzbh1文本框输入数据。所以,表单启动后焦点定位于txtDzbh1文本框将是非常方便的,可在表单的Init事件中利用setfocus方法使txtDzbh1获得焦点。表单的Init事件过程的VFP代码如下:thisform.txtDzbh1.setfocus
5.2 清空txtDzbh1便于输入读者编号
任何时候单击txtDzbh1文本框或通过程序代码使txtDzbh1文本框获得焦点,都表明有可能是要输入读者编号信息。为便于信息输入,需要在该文本框控件的Click事件和GotFocus事件中將文本框先前的内容清空。此功能可通过将txtDzbh1文本框的Value属性设置为空串来实现。txtDzbh1的Click及GotFocus事件的VFP代码为thisform.txtDzbh1.value=space(0),或者为this.value=space(0)。
5.3 txtDzbh文本框中的数据禁止修改
txtDzbh文本框中的数据由txtDzbh1中的数据直接传递而来,不能随便更改。可在“属性”对话框将txtDzbh文本框的ReadOnly属性设置为“.T.-真”,使txtDzbh中的数据不允许修改。
5.4表单右上角的关闭按钮禁止单击
表单上的数据无意被修改时,即使没有单击“确定”和“取消”按钮,也可能会由于单击表单右上角的关闭按钮而释放表单,从而将无意更改的数据写入数据表。为防止数据表中的数据被无意修改,应通过“属性”对话框将表单的Closable属性设置为“.F.-假”,使用户不能通过单击表单右上角的关闭按钮释放表单。
5.5 使输入操作更合理
依次将控件txtDzbh1、txtDzbh、txtXm、txtXb、“是否学生”、txtDhhm、txtSzdw、“新增”、“确定”、“取消”、Commandgroup1、“退出”的TabIndex属性设置为1至12,以方便输入操作时使用Tab键或回车键依次选择下一个对象(包括文本框、复选框、命令按钮)。
5.6 使表单界面更清晰
设置表单界面中相关控件的颜色,可使界面变得清晰易用。文本框txtDzbh1中文字的颜色可通过设置其ForeColor属性实现,以区别于duzhe.dbf数据表的数据在对应文本框或复选框中的显示。同样,可设置“单击更新照片”标签的ForeColor属性来选择合适的字体颜色;直线的颜色通过设置其BorderColor属性来实现。
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。