计量器具管理系统

计量器具管理系统
计量器具管理系统

基于B/S模式的计量器具管理系统的开发和实现

【摘要】:计量器具管理系统是以某公司计量室的计量器具管理的需求出发,使用ASP+SQL2000开发的基于B/S模式的质量管理系统。利用该系统,管理人员可以根据需求方便地对计量器具进行管理。本文主要对计量器具管理系统的开发的背景、系统需求、系统设计、数据库设计、系统实现、运行环境等进行了介绍,较全面的阐述了该系统开发的全过程。

【关键词】:计量器具管理系统 ASP技术 B/S模式 SQL2000

Design on the Enterprise

Measuring instruments Management System Base on B/S Mode

Wu Guochuan

(Information Centre,CSR CHENGDU CO.,LTD. CHENGDU 610051)Abstract Measuring instruments management system is a quality management system b ase on B/S mode.This system using ASP + SQL2000 development for the enterprise management requirements. Using this system, managers can conveniently according to the requirement of measuring instruments management .This paper introduces the development background、system requirements、system design、 database design、 system to realize、running environment for system. Comprehensive expounds the system development entire process.

Keywords Measuring instruments management system ASP technology B/S Mode SQL2000

目录

1引言 (3)

2计量器具管理系统设计 (4)

2.1系统目标设计 (4)

2.2开发设计思想 (4)

2.3开发和运行环境 (4)

2.4系统功能分析 (4)

2.4.1主控模块 (4)

2.4.2初始化模块 (4)

2.4.3数据输入模块 (4)

2.4.4数据更新模块 (4)

2.4.5器具查询模块 (4)

2.4.6数据拷贝模块 (5)

2.4.7打印报表模块 (5)

2.4.8退出模块 (5)

3数据库设计 (6)

3.1需求分析 (6)

3.2数据库概念结构设计 (7)

3.3数据库逻辑结构设计 (7)

4数据库结构实现 (9)

4.1使用项目管理器实现数据库结构 (9)

5各功能模块的建立 (10)

5.1开始界面的设计 (10)

5.2退出界面的设计 (11)

5.3查询界面的设计 (12)

5.4数据查询模块设计 (13)

5.4.1原始台帐数据查询模块设计 (13)

5.5初始化模块设计 (17)

5.6数据录入模块设计 (18)

5.7数据修改模块设计 (19)

5.8数据备份模块设计 (21)

5.9打印模块设计 (22)

5.10代码设计 (24)

6开发中的难点和解决技巧 (28)

7运行结果 (29)

8软件的安装与使用 (30)

小结 (31)

谢辞 (32)

主要参考文献 (33)

1引言

我厂福州铁路分局直属的二等基层站段,是从事铁路货物装卸机械化的专业工厂,下设八个班组六个职能科室;其主要产品是0.5t-65t门、桥式起重机。在制造、维修产品过程中,各零部件的形状、位置尺寸直接影响到本企业的产品质量的稳定与提高。目前计量器具的管理工作由质管科负责,采用手工校对计量器具台帐信息、使用信息、检修检定信息和日常管理工作;由于本企业的计量器具品种较全且数量较多、达三百多件套,目前没有一套计算机系统软件进行管理,一方面要掌握本企业器具管理台帐信息、及使用信息,另一方面要掌握本企业器具检修检定信息,同时又必须确保在用器具是合法、有效的;工作量很大,而且会出现超过检定时效的器具在生产过程中量传,进而影响产品质量的符合性要求。

因此要加强企业计量器具的基础管理工作。急需一套计量器具的管理系统,对计量器具进行有效管理,准确掌握计量器具的量传和溯源,提高企业的产品质量;本系统将较全面对计量器的管理进行研究。

2计量器具管理系统设计

2.1系统目标设计:

系统应具有良好的人机界面,灵活的窗口风格,友好的帮助使用说明以及较完整的器具管理流程,让使用该系统的工作人员无须拥有专业的电脑知识,轻松完成日常工作。整个系统应直观统一化,能够方便的进行各种信息查询,各项查询工作轻松点击即可完成。报表打印格式统一,操作快捷,数据修改简洁明了。新系统应利于维护,整个系统应使原先手工管理模式下的工作效率低,工作量大,出错率高的状况完全得以转变,使我厂计量器具管理工作系统化、规范化、自动化,从而达到提高企业计量器具管理效率与水平的目的。

2.2开发设计思想:

2.2.1由于本企业尚无计量器具管理系统,因此开发尽可能采用现有本企业的计算机软硬件环境。

2.2.2系统符合本企业《监视与测量装置控制程序》之规定,满足计量器具日常管理工作的需要并达到操作过程的直观、方便、实用、安全等要求。

2.2.3系统采用模块化程序设计方法,既便于系统功能模块的组合,又便于未参与开发的技术维护人员补充、维护。

2.2.4系统具备数据库维护功能,能及时根据企业器具情况进行数据的初始化、添加、删除、修改、备份操作。

2.3开发和运行环境:

开发工具:Visual Foxpro 6.0

运行环境:Windows 9x Windows NT或Windows 2000.

2.4系统功能分析:

计量器具管理系统需要完成功能主要有:

2.4.1主控模块:该模块是整个系统的控制中心,包含数据初始化、数据输入、数据更新、查询、是系统进入各级子模块的入口。

2.4.2初始化模块:初始化是系统工作的准备工作,系统每次工作前必须删掉上一次操作保留的部分数据,然后才能进行新数据的录入,初始化的功能是清除以前的数据,以防旧数据对新数据产生不必要的影响。

2.4.3数据输入模块:系统基础是输入数据,只有将数据写入到相应的数据库后,才能对它们进行查询、修改、打印。

2.4.4数据更新模块:数据更新模块的主要功能是对已输入数据进行修改。

2.4.5器具查询模块:该模块的主要功能是显示某一器具的所有信息。

2.4.6数据拷贝模块:该模块是数据库中的记录拷贝到备份数据库中,以防止数据库

的丢失。

同时把数据库里不需要的东西删除,以节省磁盘空间。

2.4.7打印报表模块:该模块是将所需要的数据以表格形式从打印机打印出来,它是由台帐、检修检定表、部门器具表和封存台帐表组成。

2.4.8退出模块:当退出系统时,给出欢迎使用等信息。

系统功能模块图2.1

3数据库设计

数据库的结构设计是一个非常重要的问题,数据库设计的好坏,直接对本系统的效率以及实现效果产生影响。同时减少数据库的存储量,做到数据的完整性和一致性比较高,使系统有较快的响应速度。

在数据库系统设计的时候尽量考虑全面,尤其要仔细考虑计量器具管理过程中的各种管理过程的要求,避免在设计过程中浪费不必要的人力和物力。

3.1需求分析:

数据库的需求分析是数据库结构设计的第一阶段,主要是收集基本数据、数据结构以及确定数据处理流程,为下一步设计打基础。

在仔细调查计量器具管理过程的基础上,得到系统所要处理的流程如图3.1

返回数据查询结果

数据流程图3.1

通过对计量器具管理系统的内容和数据流程分析,设计的数据项和数据结构如下:

3.1.1 部门分类数据表(部门号,使用部门,使用人)

3.1.2原始台帐数据表(部门号,器具编号,器具名称,规格型号,原值,数量,产地,使用状态,检定周期,检定费用,使用部门,使用人,次检时间,续检时间,检定机构,检定证号、备注)

3.2数据库概念结构设计:

在以上需求分析的的基础上,设计出能够满足本厂需求的各种实体,以及确定它们之间的关系,为后面的逻辑结构设计打下基础。

根据上面设计,规划出的实体有:器具原始数据实体和部门数据实体。如图3.2

所示。

图3-2实体间的E-R图

3.3数据库逻辑结构设计:

将上面的数据库概念结构转化为Uisual Foxpro 6.0数据库系统所友持的实际数据模型,也就是数据库的逻辑结构。在掌握了上面的实体以及实体之间关系的基础上,确定数据库中的表格以及表格之间的关系。

计量器具管理系统数据库中各表格的设计结果如表3-1至3-2所示。每个表格表示在数据库中的一个表。

表3-1原始台帐数据表

表3-2部门分类数据表

4数据库结构实现

根据需求分析、概念结构设计的基础上得到数据库的逻辑结构后,在Visual FoxPro 6.0数据库中实现该逻辑结构。

实现数据结构的逻辑结构的主要方式使用Visual FoxPro的项目管理器。以下将

原始台帐数据库、部门分类数据库,创建这些表单的过程。

首先,先建一个名为“jlqjgl(计量器具管理)”的项目,保存在磁盘中。

4.1使用项目管理器实现数据库结构

打开,如图4-1所示的“jlqjgl(计量器具管理)”项目后,在项目管理器中展开数据文件夹,用鼠标选中数据库,单击右侧“New Table(新建表)”,为数据库添加数据表(表的内容见表3-1至表3-2)。

5各功能模块的建立

5.1开始界面的设计

该模块的主要功能是当用户启动使用“计量器具管理系统”时,显示欢迎界面,开始界面的欢迎词每个1秒钟闪烁一次。当用户按下键盘上任一键时,系统自动进入下一级表单,即“mainmenu”表单。本模块利用一个表单就可以实现其功能。

以下是这一模块的设计步骤。

首先新建一个表单,保存为“welcome”。将表单的“Caption”属性设定为“欢迎界面”,“Desktop”属性设置为“.T.-True”。为了给该表单添加一张图片背景,设其“Picture”属性为所要添加图片的地址,本系统中为c:\my documents\LWH\Fj056。然后为该表单添加1个“Timer1”控件和1个“Label1”控件。

修改“Time1”控件的“Interval”的属性为“1000”,这样当每间隔一秒钟触发一次“Timer Event”事件。

“Label1”控件的相关属性的内容如表5-1所示。

表5-1 “Label1”控件中主要属性

“Caption”的属性为所要显示的欢迎词,“BackStyle”属性修改的目的是使“Label1”控件的背底透明。修改其“FontBold”、“FontName”、“FontSize”和“ForeColor”属性是为了调整字体形式,以显得美观。其中“ForeColor”为“字体颜色设置”“洋红色”。

并为各个事件添加代码。

在“welcome”表单的“init”事件中添加代码如下:

public nTime

nTime=1

这段代码的目的是通过设立1个“nTime”全局变量(并设其初始值为“1”)来控制“Lable1”控件,以达到控制欢迎词的闪烁。

在“welcome”表单的“KeyPress”事件添加代码如下:

thisform.release

*释放本表单

release nTime

*释放变量“nTime”

do form mainmenu

*运行表单“mainmenu”

这段代码的目的是当按下任意键时,释放该表单和全局变量“nTime”同时进入旧一级表单“mainmenu”。

在“Timer”控件的“Timer Event”事件中添加如下代码:

if i=0

https://www.360docs.net/doc/8616001487.html,bel1.visible=.f.

i=1

else

https://www.360docs.net/doc/8616001487.html,bel1.visible=.t.

i=0

endif

这段代码的内容是通过判断全局变量“nTime”的值来控制欢迎词的闪烁。当“nTime”的值为“0”,令“Label1”控件“不可见”,同时置“nTime”为“1”以备下次触发“Timer Event”事件时使用。同样,当“nTime”的值为“1”,令“Label1”控件“可见”,同时置“nTime”为“0”以备下次触发“Timer Event”事件时使用。通过每隔1秒触发一次“Timer Event”事件,可以使“Label1”控件时隐时现,以达到令欢迎闪烁的目的。

5.2退出界面的设计:

该模块设计目的是当用户退出系统时显示感谢词,画面停留两秒钟后自动退出,这一模块利用一个表单可实现其功能。

首先新建一个表单,保存为“End”,在其上添加1个“Timer1”控件和3个“Label”控件。各控件属性表略。

在“Time1”控件的“Timer Event”中添加代码如下:

thisform.release

*释放表单并停止由READ EVENT开始的事件处理,

CLEAR EVENT

*令程序从READ EVENT的下一条程序行继续执行。

将该表单保存后,退出界面这一模块就建立好了。

5.3查询界面的设计:

这一模块的主要功能是为选择原始台帐数据库提供一个接口。由于本模块只是一

个接口界面,可利用一个表单即解决。

该模块的设计步骤如下。

先新建一个表单Form,保存为“cxjm”。在表单上添加1个“Image1”控件,1个控件“Label1”

控件,1个“Timer1”控件,1个“Container1”控件和1个“Command”控件。在“Container1”控件上再添加1个“Command”控件。

各控件中主要属性表略。

修改完各控件的相关属性后,我们为各事件添加代码。

在“Form1”的“Init”事件中添加代码如下:

public nTime

nTime=1

*设一个全局变量“nTime”,并设其初始值为“1”

在“Form1”的“destory”事件中添加代码职下:

release nTime

*当该表单释放时,同时释放全局变量“nTime”

在“Time1”控件的“Timer Event”事件中添加代码如下:

if i=0

https://www.360docs.net/doc/8616001487.html,bel1.visible=.t.

i=1

else

https://www.360docs.net/doc/8616001487.html,bel1.visible=.f.

i=0

endif

*通过全局变量nTime1控制“Label1”,使其时隐时现。

在“commend1”控件的“Click”事件中添加代码如下:

do jlqjgl\form\ystzcx

*进入下级表单,保留本表单

在“commend5”控件的“Click”事件中添加代码如下:

thisform.release

*释放表单

将该表单保存后,查询界面设计模块就建立好了。

5.4数据查询模块设计

5.4.1原始台帐数据查询模块设计

这一模块实现了最基本而又很重要的功能,它让用户方便快捷、多角度地得知想要查询的情况。该模块提供“原始台帐数据库”表的查找、数据的添加、删除和修改功能。同时还提供“原始台帐数据库”的逐条查询和全库浏览。本模块利用在一个表单中设置两个不同标签页来实现其功能,创建过程如下:

首先建立1个表单Form1,然后保存为“ystzcx”。为该表单添加1个“Pageframe1”控件和7个“Commend”控件。各控件的主要属性如下所示表5.4.1-13至表5.4.1-15。

表5-13 “Form1”表单中主要属性

表5-14 “Pageframe1”表单中主要属性

接着为表添加数据表。右键单击表单,在弹出的对话框中选择“Date Environment”。之后会继续弹出一添加表单对话框,为该表单添加“ystzsj”表。下

面详细介绍这一添加数据表的过程。

在表单“Form1”的控件“Pageframe1”上单击鼠标右键,在弹出的对话框中选择“Edit(编辑)”,然后激活“Pageframe1”控件中的“Page1”控件。单击鼠标右键打开数据环境窗口,用鼠标左键点中“ystzsj”中的“Fields(字段)”不放,将其拖到控件“Page1”控件上。然后调整“Page1”上的各控件的相对位置。

同样激活“Page2”控件,并为其添加1个“Grid1”控件。设“Grid1”控件“Recordcontrols ”属性为表“ystzsj”,“Readonly”属性为“.T.-Ture”“Page2”页面的设计结果。

下面为各事件添加代码。

在“Form1”的“init”事件中添加代码如下:

https://www.360docs.net/doc/8616001487.html,mand6.enabled=.f.

*置“command6”(“提交”按钮)为不可用

public flag

flag=0

*设全局变量“flag”并设其初值为“0”

在“Form1”的“Destory”事件中添加代码如下:

release flag

*从内存中释放全局变量“flag”

在“Command1”的“Click”事件中添加代码如下:

for i=2 to 38 step 2

thisform.Pageframe1. Page1.controls(i-1).controlsource=’’thisform.Pageframe1. Page1.controls(i-1).enabled=.T.

endfor

*通过循环语句继开“Page1”中各“Text”控件的“controlsource”属性,同时将其置为可用

*以便在其中添加数据

thisform.Pageframe1.Page1.txtbmh.value=''

thisform.Pageframe1.Page1.txtQjbh.value=''

thisform.Pageframe1.Page1.txtQjmc.value=''

thisform.Pageframe1.Page1.txtGlxh.value=''

thisform.Pageframe1.Page1.txtsl.value=''

thisform.Pageframe1.Page1.txtyz.value=''

thisform.Pageframe1.Page1.txtCd.value=''

thisform.Pageframe1.Page1.txtsyzt.value=''

thisform.Pageframe1.Page1.txtjdzq.value=''

thisform.Pageframe1.Page1.txtSysj.value=''

thisform.Pageframe1.Page1.txtjdhy.value=''

thisform.Pageframe1.Page1.txtSybm.value=''

thisform.Pageframe1.Page1.txtSyr.value=''

thisform.Pageframe1.Page1.txtcjsj.value=''

thisform.Pageframe1.Page1.txtxjsj.value=''

thisform.Pageframe1.Page1.txtJdjg.value=''

thisform.Pageframe1.Page1.txtJdzh.value=''

thisform.Pageframe1.Page1.txtBz.value=''

*通过以上语句清空“Page1”上所有“Text”控件的值

在“Command2”的“Click”事件中添加代码如下:

local condition

*定义局部变量“condition”

condition=’’

*为局部变量“condition”赋初值,令“condition”为一空字符串

for i=2 to 38 step 2

if len(thisform.Pageframe1.Page1.controls(i-1).value)<>0 str1=alltrim(thisform.Pageframe1.Page1.controls(i).name)

str2=substr(str1,4)

condition=condition+str2+’=’+;

“’’’+alltrim(thisform.Pageframe1.Page1.controls(i-1).value)+”’”+’and’

endif

endfor

*这一段“for…endfor”语句的功能是通过if语句判继将

*所有查询条件不为空的字段名内容用“=”连接,

*各查询条件之间用“and”连接组成一个新字符串存在局部变量“condition”中

condition= left(condition,len(condition)-5)

condition=alltrim(condition)

*通过两个函数“left()和alltrim()”去掉“Condition”字符串中尾部多余的

字节和前后的

*空格

select * form ystzsj where &condition

*利用宏功能,将局部变量“condition”中存的字符串为查询条件,查找符合的记录

for i=2 to 38 step 2

str1=alltrim(thisform.Pageframe1.Page1.controls(i-1).name) str2=substr(str1,4)

thisform.Pageframe1.Page1.controls(i-1).controlsource=’ystzsj..’+str2 thisform.Pageframe1.Page1.controls(i-1).enabled=.f.

endfor

*将Page1上各“Text”控件的“controlsource”属性与“ystzsj”表中的相应字段建立联系

在“Command3”的“Click”事件中添加代码如下:

SET MULTILOCKS ON

cursorsetprop("buffering",3)

for i=2 to 38 step 2

thisform.Pageframe1.Page1.controls(i-1).controlsource=’’

thisform.Pageframe1.Page1.controls(i-1).enabled=.T.

endfor

*通过循环语句继开“Page1”中各“Text”控件的“controlsource”属性,同时将其置为可用

ed=.f.

*置与数据库有关的按钮为不可用,以防误操作。

将表单保存后整个原始台帐数据查询模块就建立起来了。

5.5初始化模块设计

该模块的主要功能是使用可以定期清空数据库表内容,同时也能保存表结构。以便新数据的输入,防止旧数据对新数据产生不必要的影响,为用户节省更多的磁盘空间,本模块可利用一个表单实现其功能。

该模块的设计如下。

首先新建一表单Form1,保存为“czh”。修改其“Caption”属性为“初始化数

据表单”,“Desktop”属性设置为“.T.-True”。为该表单添加1个“Container1”控件、1个“Image1”控件,2个“Command”控件和2个“Labe1”控件。

在“Container1”控件上添加2个“Check”控件。

各控件的主要属性表略。

下面为各事件添加代码。

在“Command1”控件的“Check”事件中添加代码如下:

if thisform.container1.check1.value=1

use jlqjgl\database\ystzsj exclusive

delete all

pack

use

endif

if thisform.container1.check2.value=1

use jlqjgl\database\ bmhlsj

delete all

pack

use

endif

*将选定的数据表格清空。

在在“Command2”控件的“Check”事件中添加代码如下:

thisform.release

将该表单保存后这一模块就建立好了。

5.6数据录入模块设计

该模块的功能是初始化后进行新数据的输入,只有将数据写入到相应的数据表中才能对它们进行查询、修改、打印等操作。本模块利用在一个表单中设置3个不同标签页来实现其功能。

该模块的设计步骤如下:

首先新建一个表单Form1,保存为“sjlr”。修改该表单的“Caption”的属性为“数据输入界面”,“Desktop”属性设置为“.T.-True”。为该表单添加1个“Pageframe1”控件。

在“Pageframe1”控件上添加3个“Command”控件。

参考原始数据查询模块中数据表的添加方法,为该表单添加“ystzsj”数据表。

在“Pageframe1”控件上单击鼠标右键选择“Edit(编辑)”,激活“Page1”控件。

将“Data Enviroment(数据环境)”中表“sytzsj”中各字段用鼠标拖放至“Page1”上,并调整各控件相对位置使页面美观。

修改““Pageframe1””控件中“Pagecount”属性为“1”。

“Command”控件和“Page”控件的“Caption”属性如表略。

thisform.release

“Pageframe1”控件中其它“Page”页各事件中代码与“Page1”中类似,本设计不再一一列出。然后将表单“ystzk”、“jxjdk”和“bmsyk”保存后,这一模块就建立好了。

5.7数据修改模块设计

数据更新模块的主要功能是为用户提供一个修改已录入数据的窗口。这一模块的界面设计如下。

5.7.1首先创建一个“Fy.vcx”导航条的子类设计如下:

A.在项目管理器中选择“Classes(类)”选项卡,

B.选择新建“New(新建)”,出现一个类对话框,

C.在“Class Name(类名)”框中键入fy,“Based On(派生于)”框中选择

“Command Group(按钮组)”,存储框中填入要存的路径。单击“OK(确定)”

按钮进入设计窗口。

D.在属性窗口中修改Buttoncount(按钮数目)属性,使其值为4,这时出现了4

个按钮,将按钮拖动到适当的位置,并根据需要修改每个按钮的Caption属性,使其为“上一个”、“第一个”、“下一个”、“最后一个”。

E.在按钮“上一个”的Click事件中输入如下代码:

skip-1

*记录后退一个

if bof()

*如已为第一个记录

messagebox(“已是第一个记录”,48,“信息窗口”)

*当已为第一个记录时,显示提示信息

https://www.360docs.net/doc/8616001487.html,mend1.enabled=.f.

https://www.360docs.net/doc/8616001487.html,mend2.enabled=.f.

skip

*记录前进一个,使之仍显示第一个记录

else

https://www.360docs.net/doc/8616001487.html,mend1.enabled=.t.

https://www.360docs.net/doc/8616001487.html,mend2.enabled=.t.

endif

https://www.360docs.net/doc/8616001487.html,mend3.enabled=.f.

https://www.360docs.net/doc/8616001487.html,mend4.enabled=.f.

*根据状况设置各按钮的可用状态

thisform.refresh

功能:向前翻页

F.在按钮“第一个”的Click事件中输入如下代码:

goto top

*到第一个记录

https://www.360docs.net/doc/8616001487.html,mend1.enabled=.f.

https://www.360docs.net/doc/8616001487.html,mend3.enabled=.t.

https://www.360docs.net/doc/8616001487.html,mend4.enabled=.t.

*根据状况设置各按钮的可用状态

thisform.refresh

功能:翻页至第一个记录。

●在按钮“下一个”的Click事件中输入如下代码:

skip

*记录前进一个

if eof()

*如已为最后一个记录

messagebox(“已是最后一条记录”,48,”信息窗口”) skip-1

*记录后退一个,使之仍为显示最后一个记录

d=.t.

*根据状况设置各按钮的可用状态

thisform.refresh

功能:向后翻页

●在按钮“最后一个”的Click事件中输入如下代码:

goto bottom

*到最后一个记录

https://www.360docs.net/doc/8616001487.html,mend3.enabled=.f.

https://www.360docs.net/doc/8616001487.html,mend1.enabled=.t.

相关主题
相关文档
最新文档