作期自动为表单或表单集的每个实例提供一个独立的工作环境。一个数据工作期是指表单、表单集或报表使用的当前动态工作环境。每个数据工作期包含了它自己一组工作区,这些工作区包括在工作区中打开的表、标索引以及表之间的关系。数据工作期主要适用于网络系统中,由于这次我做的是一个个人桌面系统,因此就不再对其详细介绍了。
下面我就开始对这套实验室管理系统进行详细的说明:
1.系统首页部分
系统首页是进入系统的第一个页面,它所实现的功能是密码确认以及系统导航。其中启动系统时最先出现的页面如下所示:
为了实现密码验证功能,我在表单中加入了一个包含了两个页面的页框,上图就是这个页框的第一个页面,为了避免用户直接选择第二个页面,因此将该页框的TABS属性设置为.F.,这样页框的选项卡就不可见,只有通过程序才能第二个页面。
该表单的数据环境中包括一个自由表(PASS.DBF),包括两个字段,用户和密码,当用户在用户和密码文本框中输入完毕并点击了"确定"键以后,将调用"确定"按钮的CLICK事件响应函数。首先在表中进行定位,如果找到字段"用户"与用户文本框中相同的记录,就再检验密码是否也相同。如果不同或者找不到记录,则系统属性TIMES自加1,TIMES是用来控制重试次数的,它在系统生成时自动置0。当TIMES=3时系统就自动退出,以免有人尝试次数过多。
当用户和密码全都正确时,则通过执行thisform.pageframe1.activepage=2将页框的当前活动页设为第二页面,如下所示:
页面2的功能有两个,一个是系统导航,由此可以调用系统的其他6个部分,另一项功能就是修改密码。当点击了"修改密码"按钮以后,就会出现如下界面:
可以看到,与密码修改相关的控件:按钮组,文本框和标签都被我放到一个容器控件中,这样所有控件是否在表单上显示都会受到容器控件的VISIBLE 属性的控制,因此程序中只需要对容器控件的VISIBLE属性进行操作就可以了,比一个一个的修改控件的VISIBLE属性要方便了很多。这个容器控件的VISIBLE属性默认为.F.,只有当点击了"修改密码"按钮以后它们才会变成可视,而密码修改完毕后再将该容器控件的VISIBLE设为.F.。
2.物资管理部分
物资管理部分包括6个表单,是对物资管理库中的3个表运行进行操作的。其首页是物资管理页,如下图所示。
物资管理页中的数据操作涉及到物资管理库中全部3个表,因此生成该表单时我是用了一对多表单生成向导。父表是仪器设备表(YQSB),子表是附件表(FUJIAN),借用表中的数据由于不需要显示,因此可以不和仪器设备表建立临时关系,仅需加入到表单的数据环境中就行了。表单中的文本框是与仪器设备表中各字段绑定的,而下面的表格则是和附件表绑定。为了防止用户误操作对数据表做出修改,因此所有的文本框和表格都是只读的。而对数据表进行操作的功能将在专门的表单中提供,物资管理页主要提供的是数据表的浏览功能。
所谓的一对多表单,就是在表单的数据环境中包含了2个或两个以上的数据表,并且用SETRELATION命令在表之间建立了临时关系,临时关系使用两个表间相同的字段,子表的记录指针会随着父表的记录指针移动,这样,便允许当在关系中"一"方(或父表)选择一个记录时,会自动去访问表关系中"多"方(或子表)的相关记录。显然,这一特性在显示多个表数据时是非常有用的。在这个表单中我是将仪器设备表作为父表,将附件表作为子表,临时关系使用两个表中都存在的YQBH字段,该字段唯一确定一个仪器记录。因此在文本框中显示仪器设备表中某一记录各字段的详细情况时,在表格控件中将自动显示在附件表所有YQBH与之相同的记录,即在显示一个仪器的详细状况时,将它的所有附件也同时列出来,方便了用户的查看。
一对多关系在带来方便的同时,也有一些不足,那就是在使用一对多关系的数据环境中,一旦对父表使用SETORDER命令进行重新排序,那么一对多关系将被破坏。所以我在系统的其他部分中尝试使用了别的方法,同样达到了一对多显示的效果,后面再详细介绍。
表单最下方按钮组的前四个按钮提供了仪器设备表的一般的记录指针移动功能。"详细查询"按钮调用仪器查询页,"添加"和"删除"调用仪器设备表修改页。"删除"则将仪器设备表的当前记录删除。"退出"将退出当前表单,回到主表单。"打印"将调用报表YQSB1,打印YQSB表的当前记录和附件表中的相关纪录。
VFP的报表可以在报表生成器中和报表设计器生成。报表生成器与表单生成器十分类似,通过选择数据源来指定打印的内容。而在报表设计器中可以进一步调节各个控件的位置,通过简单的操作产生精美的报表。在程序中通过REPORTFORM命令就可以调用已经建立好的报表。
在表单右下方的按钮组中,"附件查询"将调用附件查询页,"附件添加"将调用附件修改页。表单右面的按钮组中,"借出"和"归还"都将调用仪器借用页。
在物资管理页中,控件的显示属性不是不变的,而是随着数据表当前记录的变化而变化。比如说当指针指向表中第一个记录时,"|<"和"<"按钮的enable属性应该变为.F.,即不可点击;仅当该记录已被删除时标签"已删除"的VISIBLE属性才会是.T.等等。这些属性的设置可以在每次会导致表单显示属性变化的程序中分别设置,但是那样程序的可读性较差,而且会有很多重复,因此我在表单中创建了一个表单方法程序DIS,将所有与显示有关的程序集中到一起,而每次需要对表单更新时都调用DIS,这样凡是与显示有关的全都在DIS中进行设置,使程序的可读性得到了提高.另外,在表单中"未借出"及其后面包含两个按钮的按钮组的状态是与FUJIAN表有关的,我建立名为JY的表单方法程序,对FUJIAN表进行扫描,当满足条件yqbh=thisform.yqbh1.text1.valueandempty(alltrim(ghrq))时,代表仪器已借出,否则代表未借出,相应的设置标签控件和按钮组控件的属性。再在 DIS中使用JY,使得表单每次刷新时那两个控件也会随之刷新。
仪器设备表的记录数目比较多,因此仅仅提供"前一个"、"后一个"、"第一个"、"最后一个"这样简单的记录指针移动功能很难满足用户的浏览要求,因此我制作了专门对仪器设备表进行查询操作的仪器查询页,如下图所示:
在仪器查询页的上半部是与YQSB表绑定的表格控件。而下半部则是用户输入查询条件的区域。可以看到在用户输入区域包括3个下来列表框。之所以采用下拉列表框是因为仪器名称(YQMC)、型号(XH)和规格(GG)三个字段是比较常用的查询项,并且它们在数据表中是大量重复的,不同项的并不多,同时也为了规范查询条件的输入。以YQMC下拉列表框为例,它的ROWSOURCETYPE设为SQL语句,ROWSOURCE即控件数据值的源设为"SELECTDISTINCTXHFROMYQSBINTOCURSORTEMP2",这样就从仪器设备表中把所有不同XH字段选择出来作为下拉列表框的值。为了进一步规范输入条件,我还为每个下拉列表框编辑了INTERACTIVECHANGE事件响应函数,当其中一个下拉列表框的值被改变了以后,另外两个下拉列表框数据源的值将会被重新设定,与已选定的下拉列表框的值相对应,然后用REQUERY函数更新。另外为了清除下拉列表框的选择,我为每个下拉列表框设置了"清空"按钮,将它的VALUE置为''。而"全部清空"则将清除用户所有输入,将表单恢复到初始状态。
表单的查询功能在"查询"按钮的事件响应函数中实现的。在该函数中,对所有供用户输入查询条件的控件进行判断,如果有用户输入,则在变量TIAOJIAN中加入该控件对应的查询语句,最后将变量TIAOJIAN作为SETFILTERFOR的条件语句。SETFILTER命令使用来暂时筛选数据,而不生成专门的筛选索引,它可以接受任何一个有效的VFP逻辑表达式作为筛选条件,在表中只有满足筛选条件的记录才可以访问,所有访问表的命令都遵守SETFILTER条件。而筛选条件语句之所以用FOR而不用TO,是为了配合RUSHMORE技术加速数据访问,我将在后面的系统优化部分中再详细介绍。
仪器查询页使用物资管理页数据环境中别名为YQSB的工作区,因此两个表单的记录指针是指向相同记录的。当查询结束后,在表格中选择想要进行操作的记录,点击"退出"按钮,则退出该表单回到物资管理页,由于"退出"按钮的CLICK事件响应函数中包含对物资管理页的DIS函数的调用,因此返回后物资管理页将显示刚刚在仪器查询页中所选定记录的详细情况。
当我们选定了记录后,就要对它进行操作了。其中添加和修改操作都是在同一个表单中进行的。下图就是仪器设备表修改页的界面:
考虑到数据的安全性,一般浏览用的表单中的文本控件都是只读的,而将涉及到数据表操作的添加和修改功能集中到一个表单上。而同样是出于安全性以及操作的方便性的考虑,我决定使用缓冲技术。
如果将更新数据直接放到基表中,会造成这样一个结果,如果修改有错,就不能回滚,即不能回头。为了在更新过程中保护数据,我使用了缓冲技术。使用了缓冲技术以后,只有发出TABLEUPDATE更新命令以后,新值才会覆盖旧值。如果发出TABLEEVERT命令,则会取消这次操作,基表的值不会改变。
VFP提供记录缓冲和表缓冲,由于在我的系统中,一次只对一个记录进行操作,因此采用记录缓冲。事实上,缓冲技术主要是用于像网络那样的多用户环境的。借助该技术,可以很容易的检测比解决数据更新操作中所遇到的冲突:当前记录被复制到一个由VFP进行管理的内存或磁盘区域,其他用户仍然可以同时访问原来的记录。当离开该记录或以编程方式更新该记录时,VFP将准备锁定该记录,确认其他用户没有作修改,然后写入编辑结果。根据锁定方式:VFP的缓冲还可以分为保守式和开放式,他们决定了一个或多个记录何时被锁定,何时被解锁以及解锁方式。由于我的系统是单用户环境,因此不会有冲突的问题。使用缓冲主要是利用它对数据的保护功能。而本系统的所有对数据表修改和添加操作都使用了缓冲技术。
在仪器设备表修改页这个表单中,我定义了MODE属性,来确定表单是被用来执行添加操作还是修改操作。MODE属性在表单的INIT事件响应函数中被赋值。这是由于使用DOFORMWITH在表单间传递的参数必须在被调用表单的INIT事件响应函数中被接受。如果表单执行修改操作,那么在修改完成后点击"存储"按钮将会保存退出。如果表单执行添加操作,那么点击"存储"按钮将会保存当前记录,并在表的末尾再次添加一条空白记录,即允许用户连续添加,直到点击"完成"按钮才退出表单。
在用户在仪器设备表中添加了一条记录并存储成功以后,将会出现提示是否为该记录添加附件。如果用户选择是,则先调用附件修改页,当用户完成附件操作以后,再返回仪器设备表修改页表单,继续仪器设备表的添加操作。在实现这项功能时,我遇到一个问题,那就是在"存储"的CLICK事件响应函数中调用附件修改页表单后,程序会继续执行下去,而不会暂时停止等待附件修改页表单退出后在继续执行。最后我发现上述功能的实现不是由仪器设备修改页表单控制,而是附件修改页表单的WINDOWTYPE控制,将其设为1-模式,则会实现上述功能。
物资管理页、仪器查询页和仪器设备表修改页三个表单基本实现了对仪器设备表的操作。而附件表的操作由附加查询页和附件修改页完成。这两个表单如下图所示:
其中附件查询页表单主要是用来浏览和查找想要进行操作的记录,并对其进行操作。该表单生成时,仅显示仪器设备表当前记录所对应的附件记录。用户也可以自行修改查询条件进行其他查询。
我们看到提供记录添加功能的按钮并不在本表单上,而是在物资管理表上,这是因为我考虑到数据的完备性,仅当在仪器设备表中存在的记录才有可能添加附件。在附件修改页中可以看到,如果该表单是实现添加功能,则与YQBH字段关联的文本框控件是只读的,不可更改。即在物资管理表上点击"附件添加"按钮只能为仪器设备表中的当前记录添加附件,这样做的目的就是为了保证数据库的完备性,类似的设计在前面还有。比如说在仪器设备表修改页中,如果表单进行的是修改操作,就会自动记录仪器编号字段的值,如果修改以后发现仪器编号字段的值被改变了,就会提醒用户将要对FUJIAN表和JIEYONG表的相应值进行修改,是否继续,如果用户选择继续那么就要先修改FUJIAN表和JIEYONG表的相应值。最后再对YQSB进行更新。之所以采用这些设计,仅仅是为了作一个对比。事实上,这些工作完全可以由数据库的参照完整性规则来实行。由这些繁琐的步骤就可以看出数据库设计的重要性以及使用数据库RI生成器的简洁性。
物资管理部分的另一项功能就是进行仪器的借还管理,这是通过物资管理页和仪器借用页共同完成的。在选定了要借出或归还的仪器后,在物资管理页中点击"借用"或"归还"按钮(哪一个按钮可以点击是由物资管理页中JY函数控制的),就会调用仪器借用页,如下图所示:
该表单生成时会依据是借用操作还是归还操作自动在与借用日期字段或归还日期字段关联的文本框中填入当天日期,另外提供了"打印"按钮来打印打印借用单。
最后我再谈一下为什么我使用表单而不使用表单集。可以看出,物资管理部分中各个表单的数据彼此关联,在一些表单中的操作会影响到其他表单。这时就要在一个表单中调用其他表单的属性或函数,又或者在多个表单中要进行数据的传递,那么这时最先想到的方法就是使用表单集。表单集中包含多个表单,作为一组处理。表单集有以下特点:
*可同时显示或隐藏表单集中的全部表单。
*可以可视的模式调整多个表单以控制它们的相对位置。
*因为表单集中所有表单都是在单个.SCX文件中用单独的数据环境定义的,可自动的同步改变多个表单中的记录指针。
*在表单集中若要引用其他表单的属性或函数只需要采用如下引用THISFORMSET.所要引用表单名.属性名(函数名)就可以了。非常的简洁。
但是表单集也存在着一个严重不足,那就是表单集中的表单不能自建属性和方法,而在我前面的介绍中可以看到,像物资管理页中的DIS、JY方法,以及修改页中的MODE属性,这些属性和方法都是十分重要的,它们在系统的运行中时必不可少的,如果没有他们的存在,很多功能都实现不了,因此我仍决定使用表单。而这时我就要解决表单间数据的传递以及对象的引用。
VFP中可以在调用表单时传递参数,使用的命令是DOFORM[表单名]WITH[参数列表]。然后在被调用表单的INIT事件响应函数中接收参数,把它们赋给该表单的公共变量或属性,从而完成数据的传递。
另外通过查询资料,我还找到了一个不属于任何表单的VFP系统变量_SCREEN,通过它的的属性FORMCOUNT和FORMS以及如下程序,我可以遍历在VFP主窗口中的所有表单,直接使用其方法或属性。
fori=1to_screen.formcount
if_screen.forms[i].caption="要引用表单名"
_screen.forms[i].方法名
_screen.forms[i].属性名
endif
endfor
采用以上两种方法,基本上就可以实现与表单集类似的效果,满足程序设计的要求。但是这样也有它的不足之处,一个是需要的代码较多,而且也不利于项目的管理。因此在工作使用表单集比较好还是使用表单比较好并不一定,应根据需求以及其实情况来确定。
物资管理部分是在这次工作中最先完成的部分,它的功能也最齐全。其他部份的很多功能都是类似的,因此我就不一一详细介绍了,而只介绍与之不同的部分。
3.人员管理部分
人员管理部分包括5个表单,用来对人员管理库中的2个表进行操作。其首页是人员管理页,其数据环境中包含两个表:实验室工作人员表和实验室工作人员培训计划表,其界面如下图所示:
可以看到该页和物资管理部分的首页物资管理页的功能类似。其中专兼职和性别字段在数据库中是作为逻辑字段格式存储的,而在表单中为了直观的显示,使用了选项组控件。在表单的DIS方法中根据当前记录这两个字段为选项组赋值,从而显示对应的值。
在物资管理页中为了体现表间关系,实现过滤功能,是使用了表间的临时关系,建立了一对多表单。这种方法快捷且容易实现,但是也正如我在前面所说,有一个很大的缺陷,那就是在建立的临时关系以后,一旦用SETORDER命令对主表进行重新排序,关系就会被破坏,从而限制了系统的功能。也因为这样我一直考虑使用其他方法来实现同样功能。
在这个系统的所有表单中,凡是涉及到控制表单控件显示属性的代码,我基本上都集中到该表单的名为DIS的方法中,在每次可能影响表单显示属性的操作后都调用DIS对表单进行刷新。因此我考虑到如果在本表单的DIS方法中加入对培训计划表SETFILTER过滤的代码,过滤条件是培许计划表中"职工号"字段等于实验室工作人员表当前记录中"职工号"字段,这样与培训计划表绑定的表格中就只会显示与工作人员表当前记录相关的记录。又由于代码位于DIS方法中,每次表单的刷新都会再次针对实验室工作人员表的当前记录进行过滤,因此基本上就实现了与一对多表单同样的功能。
用以上方法实现的一对多显示表单,由于没有建立一对多的表间临时关系,因此可以对主表进行排序操作,这在记录查询和浏览中是非常有用的。下面就是对实验室工作人员表进行查询的表单人员查询页:
在该表单中,用户执行完查询操作以后,点击上方表格中各个字段的表头,表格中的记录就会按照该字段排序,方便用户的浏览,这一点在一对多表单时是无法实现的。只需要在表单退出时再调用人员管理页的DIS方法,那么人员管理页中的表单仍然将维持一对多显示。
4.教学管理部分
教学管理部分的首页如下所示:
在这个表单中,星期几有没有课是用逻辑字段数据在相应字段表示的。为了在表单上更加直观的显示出来,我考虑在表格中添加控件的方法来实现。由于字段是逻辑型的,所以采用复选框控件。加入父列的控件的CONTROLSOURCE会自动设置为与父列相同。另外为了使控件对全部记录有效,应将父列的SPARSE属性设为.F.。
5.经费管理部分
教学管理页的首页如下图所示:
该页既提供浏览功能有提供查询功能,当点击了"查询"按钮以后该表单将会变成如下形式:
这时大部分按钮都是无效的,当用户输入完查询条件以后再次点击"查询"按钮就会在表格中显示出搜索结果。如果要结束查询需点击'结束查询'按钮。这是表单会恢复到初始状态,并且记录指针是指向用户在查询结果中选中的记录。
这个功能的实现是依靠表单的自建参数ISSEARCH和自建方法DIS以及按钮"查询"和"结束查询"的CLICK事件响应函数共同完成的。在本表单中包含两套控件,一套是只读的,用来显示数据表的信息。另一套是可写的,用来供用户输入查询条件。它们的VISIBLE属性是由DIS根据ISSEARCH的值进行操作的,另外DIS还根据ISSEARCH的值对其他控件进行操作,以达到上述效果。"查询"和"结束查询"按钮的CLICK事件响应函数只需要对ISSEARCH的值进行操作,再调用DIS就行了。
以上就是实验室管理系统中的主要技术介绍。其它还有很多表单我没有提到,因为它们的功能与上面提到的表单类似,只是所操作的数据源不同而已。因此将在附录中的使用手册中加以介绍。
这次工作是我第一次个人完成一套这么完整的系统,断断续续的做了半年多。由于我以前也从来没有接触过VFP。因此毕设完成的过程也就是我对VFP学习和了解的过程。在系统设计上,也是随着我对VFP系统的了解程度而循序渐进的。从前面的设计中就可以看到,同样的功能,我可能用了不同的实现手段。代表着不同时期我对其的认识。通过这次工作,确实使我受益良多。
系统性能
本系统是一套数据库管理系统,基本上可以达到了设计时提出的要求,满足实验室日常管理的需要。
作为开发系统的VFP,有非常优秀的字符串生成速度。有人做过试验--将1M的数据写入文本中,结果VC++6.0程序用了3.5秒、VB6.0程序用了11秒、Java1.1.5用了24秒、VisualFoxPro6.0用了7秒。另外VFP提供了RUSHMORE数据访问技术,即对索引使用压缩技术,使VFP处理索引时访问磁盘较少,大部分索引在内存中进行缓冲处理,从而使VFP对一些复杂的表的操作比不使用这项技术时快成百上千倍。
针对VFP的特点,我采取了一些措施。比如说由于RUSHMORE对FOR子句有效,这也是我在前面进行过滤查询时使用FOR子句而不用TO子句的原因。另外我为一般常用字段都建立了索引,以提高数据访问速度,同时也注意避免在诸如逻辑型字段这样只用几个离散值的字段上建立索引。采用了这些方法都是为了提高系统的性能。
而我认为这套系统最值得改进的部分,就是解决安全性问题。DBF类数据库(文件)的不安全与它的快速、灵活、强大可以说是与生俱来的,很难加以改变。任何人都可以打开数据库,只要稍有数据库基础的人就可以对其进行操作。而像UNFOX这样软件的存在使得编译后成生的应用程序也不能幸免。从在网上查到的资料中看到,解决这样的问题一般是使用程序加密,可是这样会降低系统的性能,并且还或多或少的存在一些问题,比如说汉字解密后出错,又或者使用时系统重起会导致出错等等。
后来我发现在最新的VisualFoxPro7.0中可以解决这一问题,因为在VFP7中提供了数据库事件以及_crypt.vcx加密类,前者的事件驱动是WINDOWS运作模式,后者是Ms为我们封装的数据加密类,支持字符串与文件的加密。在今年的VisualFoxPro开发者会议上,微软Fox小组演示了一种理念:结合"数据库事件"与"_crypt.vcx加密类"的数据安全模式。它的思路是:数据安全由"_crypt.vcx加密类"完成,但什么时候加密、解密由"数据库事件"管理。
这种做法的好处是:
1.跳过数据库事件,加密的数据就不会被解密,看见的将是一堆乱码。
2.数据库事件为管理加密、解密提供了良好的管理机制,减少程序工作量只要是数据库事件可用,就没有任何行径可以逃脱事件机制。
由于时间和精力的限制,我没法用VFP7.0对已完成的系统进行修改,但是不难看出该方法确实是对现在系统的有力补充,使其趋于完美。
附录:系统使用手册
1.系统首页部分
首页
在用户和密码文本框中输入正确字符,点击"确定"键将进入下一页面。点击"退出"按钮退出系统。重试3次将自动退出系统。系统默认用户和密码是lj.
导航页
点击左上方按钮组按钮将进入相应系统部分首页。点击"修改密码"按钮将显示密码修改控件。点击"退出"将退出系统。
密码修改部分
在右上方的文本框中输入新的用户和密码,其中两次密码输入必须相同。点击"确认"完成修改并隐藏密码修改控件,点击"取消"放弃修改密码修改控件。
2.物资管理部分
首页
表单最下方按钮组的前四个按钮提供了仪器设备表的一般的记录指针移动功能。"详细查询"按钮调用仪器查询页,"添加"和"删除"调用仪器设备表修改页。"删除"则将仪器设备表的当前记录删除。"退出"将退出当前表单,回到主表单。"打印"将调用报表YQSB1,打印YQSB表的当前记录和附件表中的相关纪录。"附件查询"按钮将调用附件查询页,附件添加页将调用附件修改页,为仪器设备表当前记录添加附件。"借出"和"归还"按钮将调用仪器借用页。
仪器查询页
用户在表单下方的控件中输入查询条件后点击"查询"按钮将在上方表格中得到满足条件的记录,在表格中点击要进行操作的记录,点击"退出"将会回到首页,并且首页的当前记录是在本表单中选定的记录。"清空"按钮将清空它前面下拉列表框中用户以作的选定,"全部清空"将清空用户所有的输入,将表单恢复至初始状态。
仪器修改页
该表单对仪器设备表进行修改。如果表单执行修改操作,那么在修改完成后点击"存储"按钮将会保存退出。如果表单执行添加操作,那么点击"存储"按钮将会保存当前记录,并在表的末尾再次添加一条空白记录,即允许用户连续添加,直到点击"完成"按钮才退出表单。在用户在仪器设备表中添加了一条记录并存储成功以后,将会出现提示是否为该记录添加附件。如果用户选择是,则先调用附件修改页,当用户完成附件操作以后,再返回仪器设备表修改页表单,继续仪器设备表的添加操作。
附件查询页
用户在右方的文本框中输入查询条件,点击"查询"按钮后,将在左边表格中显示查询结果。在表格中选择想要操作的的记录,点击"修改"将调用附件修改页对其修改,点击"删除"将删除该记录。点击"返回"将返回首页,点击"打印"将打印搜索结果。
附件修改页
使用方法同前,不在重复。
仪器借用页
系统将根据是借用操作还是归还操作自动在相应日期字段中填入当天日期,用户也可以自行修改。点击"打印"将打印借用表当前记录,其余按钮功能同前。
3.实验室管理部分
首页
在两个下拉列表框中选择,将使上方表单显示只包含相应字段等于选中项的记录。点击"恢复"按钮将清除用户选择,并将表单恢复至初始状态。点击表格中各字段的表头,将使表中记录按照相应字段排序显示。"添加"和"修改"将调用实验仪器表修改页
实验仪器表修改页
下方按钮功能同前。点击"从表单中添加"按钮将调用实验仪器添加页。从物资管理库的仪器设备表中选择仪器。
实验仪器添加页
该页按钮功能与物资管理部分的仪器查询页类似,只不过点击了"选定"以后将返回表单实验仪器修改页,并将选定的记录的YQMC字段填入实验仪器修改页的YQPZ文本框中。点击"退出"则不返回任何值。
4.经费管理部分
首页
表单下方文本框显示当前记录的详细信息。"添加"和"删除"按钮调用经费管理表修改页,"删除"删除经费管理表当前记录。"查询"按钮将导致表单界面变成如下图所示:
在该界面中,用户可以在下方控件中输入查询条件并再次点击"查询"按钮进行查询,查询结果将在上方表格中显示。注意时间的输入格式为"年-月-日"点击"结束查询"将回到首页页面。
经费管理表修改页
各按钮功能如前所述,不再重复。
5.教学管理部分
首页
"添加"和"修改"按钮将调用课程表修改页,"实验计划"按钮将调用实验计划统计页,"教材"按钮将调用教材管理页。
课程表修改页
按钮功能同前,用户可以通过复选框的选择确定相应时间是否有课。
实验计划统计页
上方表格显示课程表当前记录所属的实验计划表中全部记录。在表格中选择想要操作的记录后"添加"和"修改"按钮将调用实验计划表修改页,"查看全部"将显示实验计划表的全部记录,其余按钮功能同前,不再重复。
实验计划表修改页
按钮功能同前,不在重复。
教材管理页
表单功能与实验计划管理页类似。"添加"和"修改"按钮将调用教材修改页,"查看全部"将显示教材表的全部记录。
教材修改页
功能同前,不再重复。
6.器材管理部分
首页
"添加"和"删除"按钮将调用器材管理表修改页,"借出"和"归还"按钮将调用器材领用登记页。点击"查询"按钮将使表单的界面变成如下图所示:
在该界面中,用户可以在下方控件中输入查询条件并再次点击"查询"按钮进行查询,查询结果将在上方表格中显示。注意时间的输入格式为"年-月-日"点击"结束查询"将回到首页页面。
器材管理表修改页
功能同前所述,不再重复。
器材领用登记表
功能类似,不再重复
7.人员管理部分
首页
"详细查询"按钮将调用人员查询页,"添加"和"修改"按钮将调用人员管理表修改页。"培许计划"按钮将调用培训计划管理页。
人员查询页
本页实现人员管理表的查询功能。在表单下方控件中输入查询条件后点击"查询"按钮将在上方表格中显示查询结果。点击表格上各字段的表头将使表格中的记录按相应字段排序显示。"重新查询"将清除用户所有输入,将表单恢复至初始状态。点击"选定"按钮将退出本表单,回到首页,并使首页的记录变为在本页选定的记录。"打印"将打印查询结果。
人员管理表修改页
各键功能同前,不再重复。
培训计划管理页
在表单下方控件中输入查询条件,点击"查询"按钮将在表格中显示查询结果。"添加"和"删除"将调用培训计划表修改页。
培训计划表修改页
按钮功能同前,不再重复。
附录:系统文件说明
所有文件均位于"e:\works\毕业设计"目录下。
根目录:保存项目管理文件。
\表单:保存所有表单文件。
\报表:保存所有报表文件。
\数据库:保存所有数据库文件。
附录:项目文件说明
addsysyq.........实验仪器表添加页
editform............仪器设备表修改页
editfujian.........附件修改页
editgzrypxjh........培训计划修改页
editjfgl...............经费管理表修改页
editjieyong..........仪器借用页
editjxglkcb.........课程表修改页
editjxsyjc...........教材表修改页
editjxsytj............实验计划表修改页
editqcgl.............器材管理表修改页
editqclyb............器材领用登记页
editrygl..............人员管理表修改页
editsysyq............实验仪器表修改页
gzrypxjh.............培训计划管理页
jfgl.................经费管理页
jxglkcb............教学管理页
jxsyjc................教材管理页
jxsytj.................实验计划统计页
main..................密码确认页
mainform............仪器查询页
qcgl...................器材管理页
rygl...................人员管理页
Searchfujian.........附件查询页
Searchgzryb......人员查询页
Sysmain...........实验仪器管理页
Tempform1.......物资管理页
参考文献
*翁正科《VisualFoxPro6数据库开发教程》清华大学出版社2000年8月第一版
*MicrosoftCorporation《VisualFoxPro6.0中文版程序员指南》北京希望电脑公司1998年8月第一版
*MicrosoftCorporation《VisualFoxPro6.0中文版语言参考手册》北京希望电脑公司1991年1月第一版
*毛一心《中文版VisualFoxPro6.0应用及实例集锦》人民邮电出版社1999年11月第一版
致谢
本论文是在导师悉心指导下完成的。在将近一年的时间里,导师兢兢业业的敬业精神和一丝不苟的科研品格对我的人生态度产生了很大的影响。
感谢老师在这一年的言传身教。她对我生活和学业上无微不至的关怀使我能够顺利的完成这次工作。老师为了培养同学的工作能力为我提供了很多锻炼机会。在这个实验室里,我得到的最有用的东西就是崔老师对于学习生活、学习习惯的培养和对科研有目的、有针对性得锻炼。这对我将来得学习工作来说是无价之宝。
同时也要感谢实验室得其他同学在各个方面的支持和帮助。
在此,谨对各位老师和同学致以诚挚的谢意。
??
??
??
??
34
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版权属于提供者所有,有关版权的问题请直接与提供者联系。
上一篇:
VFP学籍管理系统yuping(论文和程序)
下一篇:
电咖汽车入选2018独角兽企业榜百强 发布“天际”品牌将推高估值