下载

0下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 小型仓库管理系统的设计与开发

小型仓库管理系统的设计与开发.doc

小型仓库管理系统的设计与开发

chen玉婷y
2018-04-05 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《小型仓库管理系统的设计与开发doc》,可适用于高等教育领域

小型仓库管理系统的设计与开发由于科技的进步、经济的发展、全球化信息网络和市场的形成要求企业能对不断变化的市场做出快速反应。仓库综合业务的管理在整个物流(商品、货物、军事等物流)体系中起着举足轻重的作用整个物资的入与出都要经过仓库的管理。所以对仓库管理系统进行信息化改造的要求也就越来越迫切了。本文介绍了一种基于CS(客户端服务器)结构、使用Oracle数据库由VB开发的物流软件平台。它的特点概括起来有以下几点:完善的用户角色双重权限管理机制程序平台独立于业务不直接访问数据库程序平台与业务之间的相互独立使得软件的维护及其功能升级比较容易。文章前言部分介绍了项目的来源和开发环境等信息并介绍了系统的主要特点。然后按照软件工程的规范第二部分是小型仓库管理系统的需求分析分析了仓库的结构和应用需求。第三部分是系统的设计与实现包括了概要设计和详细设计。概要设计部分分析了系统流程和系统结构。详细设计部分重点分析了仓库管理系统的主控程序和通用注册组件的程序结构和数据库结构、程序执行流程和具体实现方法。并由程序平台的结构分析了本平台下业务处理程序的统一结构。最后在系统展望部分分别针对平台和业务处理程序对系统提出了改进意见。并写出了在开发中的体会与感受。【关键词】客户端服务器结构、物流软件平台、小型仓库管理系统IAbstractWiththeimprovementofscience,developmentofeconomyandtherapidprogressoftechnology,requiringorganizationstorespondrapidlytothechangesofeconomyenvironmentThestorehousemanagementsystemisveryimportantfororganizationstocatchupwiththecurrentdevelopmentofeconomyThispaperrepresentsamaterialresourcessoftwareplatformdevelopedbyVisualBasicprogramminglanguage,basedontheCS(CustomandServer)structureandOracleDatabaseIthasseveralspecialfeaturesfullypriharDLDM大类代码VarcharCHENGTAOFLAG成套标记VarcharLowStock最低库存floatHighStock最高库存float成套物资是指由多种物资组成的组合物资保存成套物资信息是为了便于录入以成套形式收发的物资。CHENGTAOID成套物资代码VarcharPEITAOID配套物资代码VarcharSHULIANG配套物资数量Number,DLDM大类代码VarcharDLMC大类名称VarcharDWLB单位类别NumberDWDM单位代码VarcharKeyDWDZ单位地址VarcharDWMC单位名称VarcharDWDM单位代码VarcharJMSFZH居民身份证号VarcharXB性别NumberXM姓名VarcharCSSJ出生时间DateWHCD文化程度VarcharBZ备注Varchar至此软件平台的分析就结束了通过上面的分析可以看出平台程序与系统、基础数据表相关联构成了一个完整的软件平台。在平台基础上通过配置节点信息表新增数据库表、开发程序模块就可以开发出功能强大而又稳定的应用软件。与业务相关的程序是在主控程序的调用下被启动的。本系统规定与业务相关的程序模块一共有三种实现形式:建立ActiveXDLL组件使用通用配置组件解析XML文件单独的Exe程序。下面对他们分别进行分析:)ActiveXDLL组件:每个ActiveXDLL组件都分为两个工程来创建分别是客户端和服务端组件。所有的窗体以及用户交互都放在客户端而所有的数据库操作都放在服务端。客户端的接口类名必须为Cinterface接口函数名必须为CinterfaceShow这些接口信息记录在数据库中的XTJDXX表中由主控程序初始化客户端对象时调用。在Show方法中程序首先检测主控程序传递来的注册类objCommonInfo信息是否正确。如果objCommonInfo不是错误的并且不为空则将该对象赋值给客户端组件中的LoginObj对象保存否则将LoginObj对象留空。然后调用函数初始化服务端组件如果LoginObj对象为空则函数将调用通用注册组件进行注册以获取注册类。接下来使用服务端类使用注册类中的信息建立数据库链接。完成上面的操作后程序初始化客户端的主窗体开始程序的业务操作。)通用配置组件是中软公司根据本公司的业务需求使用VB开发出来的一个公共组件它本身也是一个ActiveDLL组件。程序员可以按照规定配置一个XML文件在数据库的节点信息表中设置好该XML文件的信息主控程序则会启动通用配置组件解析该XML文件产生程序窗体完成业务操作。)单独的ActiveXExe程序。主控程序调用上述三种程序模块的程序代码如下:'调用个性化组件PublicSubLoadActiveDLL(ByValpstrIdAsString,ByValpstrOrderAsString,ByValpstrName)DimstrtempAsStringDimiTempAsIntegerOnErrorResumeNextstrtemp=pstrId"CInterFace"iTemp=CInt(pstrOrder)SetobjActive=CreateObject(strtemp)'参数说明:clogin是注册类引用IfobjActiveIsNothingThenMsgBoxpstrName"调用失败!",vbOKOnlyvbExclamation,gstrHyNoticeElseCallobjActiveShow(Clogin,iTemp)EndIfSetobjActive=NothingEndSub'调用通用列表组件PublicSubLoadActiveList(ByValpstrIdAsString,ByValpstrOrderAsString,ByValpstrName)Dimstrtemp,strxmlAsStringDimstrmdAsStringDimstrpathAsStringDimiTempAsByteOnErrorResumeNextstrxml=Trim(Right(pstrId,Len(pstrId)InStr(,pstrId,"")))strtemp=Trim(Left(pstrId,InStr(,pstrId,"")))strmd=""IfInStr(,strtemp,"#")>Thenstrmd=Trim(Right(strtemp,Len(strtemp)InStr(,strtemp,"#")))strtemp=Trim(Left(strtemp,InStr(,strtemp,"#")))EndIfstrpath=AppPath"xml"strtemp=strtemp"InterFace"IfpstrOrder=""TheniTemp=ElseiTemp=CInt(pstrOrder)EndIfSetobjActive=CreateObject(strtemp)'参数说明:clogin是注册类引用IfobjActiveIsNothingThenMsgBoxpstrName"调用失败!",vbOKOnlyvbExclamation,gstrHyNoticeElseCallobjActivesetxmlpath(strpath)Ifstrmd="sc"ThenCallobjActiveShowmd(Clogin,strxml,iTemp)EndIfIfstrmd="cx"ThenCallobjActiveShowquery(Clogin,strxml,iTemp)EndIfIfstrmd=""ThenCallobjActiveShowlist(Clogin,strxml,iTemp)EndIfIfstrmd="qu"ThenCallobjActiveShowlist(Clogin,strxml,iTemp,)EndIfEndIfSetobjActive=NothingEndSub'调用可执行程序PublicSubLoadExe(ByValpstrIdAsString,ByValpstrOrderAsString,ByValpstrName)DimstrtempAsStringDimstrMlAsStringDimstrParmAsStringDimiTemp,iPosAsIntegerDimconnectstringAsStringDimIAsLongOnErrorGoToErrorlineIfpstrOrder=""ThenShellpstrIdElseiTemp=InStr(,pstrId,"")strMl=pstrIdDoWhileiTemp<>iPos=iPosiTempstrMl=Right(strMl,Len(strMl)iTemp)iTemp=InStr(,strMl,"")LoopstrMl=Left(pstrId,iPos)strtemp=AppPathstrMl=strtempstrMlconnectstring="Provider=OraOLEDBOraclePassword="mCLoginserverpassword"PersistSecurityInfo=TrueUserID="mCLoginServeruser"DataSource="mCLoginServernamestrParm=Chr()connectstringChr()IfpstrOrder<>""ThenstrParm=strParm""Trim(pstrOrder)EndIfstrtemp=strtemppstrIdI=ShellExecute(I,"open",strtemp,strParm,strMl,I)EndIfExitSubErrorline:MsgBoxpstrName"调用失败!",vbOKOnlyvbExclamation,gstrHyNoticeEndSub这三种程序模块的实现方式使得系统的开发变得十分灵活方便程序员不需要对平台部分程序有多少了解只需要根据统一规定选择自己程序的实现方式搭建好模块框架后就可以专心于对业务流程的处理上这样可以大大缩短开发时间并且可以增强系统得稳定性。我在公司做毕业设计过程中所做的工作都是开发ActiveXDLL组件。所以对通用XML配置组件以及Exe程序的调用与实现不是很了解在这里就不再深入讨论了。在数据库应用程序启动时首先要正确地连接到相应的物理数据库上。在前面的章节中已经知道根据具体的开发过程和因素应合理选用数据库以及数据库的连接方式。本系统既可作为本地数据库应用程序也可被远程数据库服务器调用应用扩展性较强因此选用ORACLE数据库并采用ADO模型进行数据访问。在本地客户端应用程序读取数据库的过程中首先要通过访问ACCESS数据表单来读取数据库链接信息在本地建立HyEimscfg之下的名为DatManager的ACCESS表:测试HYEIMSCFGOrachenCKGLCKGL表中的服务器名和登陆用户以及用户口令被注册组件从Access表读取出来建立数据库链接串从而建立数据库链接。本仓库管理系统所有要用到的数据表单可以分为三类:供主控程序使用的系统表保存系统基础数据如人员信息、单位信息、物资信息的基础数据表以及进行出入库操作和账务管理的业务数据表。其中基础表和系统表在第一章的节已经详细分析过了。下面就仅对业务数据表进行详细地说明。)出入库管理业务数据表出入库单管理需要为每一次出入库操作开具出入库单单据的信息包括基本信息和物资明细信息。基本信息中包含发物单位和收物单位号以及开单时间负责人单据的执行状态标记等物资明细信息中包含每种出入库物资的物资代码应执行数量和实际执行数量。下面是为出入库管理业务设计的数据表的结构:InvID存储点编号VarcharkeyInvNAME存储点名称VarcharInvLB存储点类别VarcharINVINID入库单号varcharkey发号组件生成InvDate入库日期DateSWDW入库库房号VarcharFWDW发物单位号VarcharJIZHANGFLAG执行状态(记账标Number记)FZR负责人VarcharInvInID入库单号Varcharkey来自INVINMAIN表MaID物品编码VarcharYQuantity应入库数量Float用户填写Quantity实际入库数Float用户填写INVOUTID出库单号varcharkey发号组件生成InvDate出库日期DateSWDW收物单位号VarcharFWDW出库库房号VarcharJIZHANGFLAG执行状态(记账标记)NumberFZR负责人VarcharInvOUTID出库单号Varcharkey来自INVOUTMAIN表MaID物品编码VarcharYQuantity应出库数量Float用户填写Quantity实际出库数Float用户填写)账物管理业务数据表账务管理部分涉及到的业务包括:出入库明细账查询库存账查询以及对账。出入库明细账是流水账要包括每一种物资每一条出入库的信息记录所以它的内容包括出入库单号、出入库时间、库房号、物品编码、实际出入库数量以及出入库后物资的库存数。库存账则是对现有库存情况进行查询每种物资只查看总的出入库数量和结存数量就可以了。所以表中数据项应该为:物品编码、库房号、最后一次出入库时间、累积的出、入库数量和结存数量。对账模块与上两个模块不同它不是对账目的查询而是维护。对账模块是根据用户的需求为了防止在记账过程中出现人为操作失误而设置的。可以直接对库房进行库存数量的修改。但是为了防止操作员随意修改库存要对对账操作的情况进行详细监控所以在对账单的结构中专门设置了制单人、审核人、记账人三个数据项以备日后清查。InvOutID出库单号varcharkeyKfh库房号varcharInvID存储点编码varcharMaID物品编码VarcharInvDate出库日期datetimeQuantity实际出库数量FloatOutStock出库后库存数FloatInvInID入库单据号varcharkeyKfh库房号varcharInvID存储点编码varcharMaID物品编码VarcharInvDate入库日期datetimeQuantity实际入库数量FloatInStock入库后库存数FloatMAID物品编码varcharkeyKFH库房号varcharKDRQ最后一次出入库时间DATESLIN入库总计NUMBERSLOUT出库总计NUMBERJCSL结存数量NUMBERSJJHFLAG账目类别标志INTEGERDZDH对账单编号VarcharkeyKFH库房号VarcharTJND开单时间DATEFlag单据状态NUMBERZDR制单人VarcharSHR审核人VarcharJZR记账人VarcharDZDH对账单编号VarcharKeyKFH库房号VarcharMAID物品编码VarcharKeyINQUANTITY增加数量NUMBEROUTQUANTITY减少数量NUMBER用户使用软件首先见到的是系统的界面界面设计应力求美观大方有生动的图片和背景。同时界面涉及到用户逻辑的处理与程序的实现也有很大关系所以我将这两者结合在一起来讨论。)出入库子系统功能与界面仓库的业务管理主要是围绕仓库的出库与入库来进行的入库与出库管理是整个业务的核心。从操作上仓库出库与入库是两项完全不同的操作但是出入库设计到的数据库表结构是完全相同的并且在操作流程上也是十分接近的可以用一个ActiveXDLL模块来完成这两项操作在模块接口中设置出入库标记根据出入库标记来区分究竟是出库还是入库操作。在详细设计中也将这两个组件和为一体进行设计描述。出入库管理模块分别由客户端组件和服务端组件构成在客户端由窗体、标准模块、类模块构成服务端组件由标准模块、类模块两部份构成所有与用户进行交互的操作主要由客户端来完成客户端提供出入库入库单列表界面和出入库单界面所有与数据库进行存取的操作主要服务端来完成。出入库单管理主界面中左边是出入库单信息区右边是按钮区信息区内设置了两个Spread表格控件。上半部表格为出库单列表表中每一项代表一条出入库单的基本信息当用户点击表格中某一条出入库单记录时下半部的出入库单物资明细表将显示出该出入库单所有的物资明细信息。根据用户点击的出入库单记录其单据的状态的不同程序分别将右部按钮区内的相应按钮激活或者锁定以保证用户操作的正确性。当点击出入库单管理主界面中的增加、修改两个按钮时会弹出入库单信息维护界面在界面中用户可以完成出入库单的新增与修改。出入库单号填写格式是固定的编号规则为:若为入库单编号则前两位为RK后八位为当前年月日如表示年月日进行的入库操作最后位是由Oracle数据库中序列获得的排序值而出库单号编码只需将前两位改为CK即可。点击“浏览”按钮将弹出单位选择界面由用户选择收、发物单位。出入库单号与收发物单位这三项是必填项如果不填则无法完成保存操作。入库单的物资明细显示在界面中的Spread表格控件中双击空白的行则会弹出物资选择界面:由用户选择收发的物资点击“确定”按钮后程序将物资插入到出入库单物资明细表中。物资选择界面中显示的是按照物资大类区分的基础信息表中所有的物资信息供用户选择。当一张出入库单成功保存后管理员即可进行对该单据进行审核、记账等操作但是单据中的物资发物数量一定不能超过当前库房的库存程序在审核改出入库单之前要首先对每一个物资的库存进行检查不符合条件的就提示用户修改发物数量用户可以通过查看库存来查看当前出入库单的物资库存情况。本模块最关键的部分在于对单据记帐我把单据记帐部分的操作代码写在下面:PublicFunctionJIZHANG(ByRefMAMain()AsString,ByValCRKFlagAsInteger)AsBoolean'对单据记实际帐的函数DimsqlmainAsStringDimstrDanjuidAsStringDimrsmainAsNewADODBRecordsetJIZHANG=FalsestrDanjuid=MAMain()OnErrorGoToErrorExitFunction'分为出库和入库两种情况分别对应不同数据表IfCRKFlag=Thensqlmain="select*frominvinmainwhereInvInID='"MAMain()"'"IfNotExcuteSql(sqlmain,rsmain)ThenGoToErrorExitFunctionIfrsmainRecordCount=ThenmstrErrorMsg="调拨单还未保存请先保存数据!"ExitFunctionElseIfrsmainRecordCount=Then'查看单据的状态如果是已完成中则可以记账Ifrsmain("jizhangflag")=Then'调用入库记账方法IfNotInAccountSJ(strDanjuid)ThenElseJIZHANG=TrueEndIfElsemstrErrorMsg="调拨单已经记账不允许重复记帐!"ExitFunctionEndIfEndIfElseIfCRKFlag=Thensqlmain="select*frominvoutmainwhereInvOutID='"MAMain()"'"IfNotExcuteSql(sqlmain,rsmain)ThenGoToErrorExitFunctionIfrsmainRecordCount=ThenmstrErrorMsg="调拨单还未保存请先保存数据!"ExitFunctionElse'查看单据的状态如果是已完成则可以记账Ifrsmain("jizhangflag")=Then'调用出库记账方法IfNotOutAccountSJ(strDanjuid)ThenElseJIZHANG=TrueEndIfElsemstrErrorMsg="此调拨单已经记账不允许重复记帐!"ExitFunctionEndIfEndIfEndIfExitFunctionErrorExitFunction:EndFunctionPublicFunctionInAccountSJ(ByValAInvInIDAsString)AsBoolean'入库单记实际帐的函数DimstrSqlAsStringDimstrDanweiAsStringDimstrTempAsStringDimrsDataAsADODBRecordsetDimrsDanweiAsADODBRecordsetDimrsJCSLAsADODBRecordsetDimdateTmp,MonthNowAsStringDimstrPlanId,strkfhAsStringDimstrAdd,strSubAsStringDimiAsIntegerDimSngJCSLAsSingleDimSngSLINAsSingleDimSngDBDSLAsSingleInAccountSJ=FalseOnErrorGoToErrorExitFunction'开始事务gDBConnectionBeginTransSetrsData=NewADODBRecordsestrSql="select*frominvinmainwhereinvinid='"AInvInID"'"IfNotExcuteSql(strSql,rsData)ThenIfrsDataRecordCount=ThenmstrErrorMsg="无法获得此单据状态!"GoToErrorExitFunctionEndIfEndIfdateTmp=CStr(Year(rsData!kdrq))""CStr(Month(rsData!kdrq))""CStr(Day(rsData!kdrq))strkfh=rsData!JIESHOUDANWEISetrsData=Nothing'添加以前没有的库存信息strSql="insertintomainv(KFH,tjnd,MAID,jcSL,SLIn,SLOut,SJJHFLAG)"strSql=strSql"select'"strkfh"','"Format(dateTmp,"yyyymmdd")"',"strSql=strSql"Bmaid,,,,"strSql=strSql"frominvinmainA,invindetailB"strSql=strSql"WhereAinvinid=Binvinid"strSql=strSql"andAinvinid='"AInvInID"'"strSql=strSql"and(bmaid)notin"strSql=strSql"(selectmaidfrommainvwherekfh='"strkfh"'andSJJHFLAG=)"IfNotExcuteSql(strSql,rsData,"UPDATE")ThenmstrErrorMsg="添加新的库存结存记录失败!"GoToErrorExitFunctionEndIf'取出此入库单所有明细信息strSql="select'"strkfh"',bmaid,byquantity"strSql=strSql"frominvinmaina,invindetailb"strSql=strSql"whereAinvinid='"AInvInID"'andAinvinid=binvinid"IfNotExcuteSql(strSql,rsData)ThenmstrErrorMsg="无法获得取出此调拨单所有明细信息!"GoToErrorExitFunctionEndIfIfNotrsDataEOFThenrsDataMoveFirstFori=TorsDataRecordCount'对于已经有库存记录的物资进行的记账strTemp="SELECT*FromMAINVWHEREMAID='"rsData!MAID"'andKFH='"strkfh"'andSJJHFLAG="IfNotExcuteSql(strTemp,rsJCSL)ThenmstrErrorMsg="无法获取物资的库存情况!"GoToErrorExitFunctionEndIfIfrsJCSLRecordCount=ThenSngJCSL=SngSLIN=ElseSngJCSL=IIf(Is(rsJCSL!JCSL),,rsJCSL!JCSL)SngSLIN=IIf(Is(rsJCSL!SLIN),,rsJCSL!SLIN)EndIfstrTemp="Select*FromINVINDETAILWhereMAID='"rsData!MAID"'andINVINID='"AInvInID"'"IfNotExcuteSql(strTemp,rsJCSL)ThenmstrErrorMsg="无法获取调拨单物资收发信息!"GoToErrorExitFunctionEndIfSngDBDSL=rsJCSL!QUANTITYSngJCSL=SngJCSLSngDBDSLSngSLIN=SngSLINSngDBDSLstrSql="UpdateMAINVsetSLIN="CStr(SngSLIN)",JCSL="CStr(SngJCSL)"WhereKFH='"strkfh"'andSJJHFLAG=andMAID='"rsData!MAID"'"IfNotExcuteSql(strSql,rsJCSL,"UPDATE")ThenmstrErrorMsg="无法修改结存数量!"GoToErrorExitFunctionEndIfrsDataMoveNextNextiSetrsData=NothingEndIf'增加入库明细帐记录strSql="deletefrommainvindetail"strSql=strSql"whereinvinid='"AInvInID"'andkfh='"strkfh"'andSJJHFLAG="IfNotExcuteSql(strSql,rsData,"UPDATE")ThenmstrErrorMsg="维护入库明细帐失败!"GoToErrorExitFunctionEndIfstrSql="insertintomainvindetail(INVinID,KFH,invdate,MAID,QUANTITY,InStock,SJJHFLAG)"strSql=strSql"selectAinvinid,'"strkfh"',AKdrq,Bmaid,ByQuantity,cJCsl,frominvinmainA,invindetailB,mainvc"strSql=strSql"WhereAinvinid=Binvinid"strSql=strSql"andckfh='"strkfh"'andBmaid=cmaid"strSql=strSql"andAinvinid='"AInvInID"'"IfNotExcuteSql(strSql,rsData,"UPDATE")ThenmstrErrorMsg="维护入库明细帐失败!"GoToErrorExitFunctionEndIf'更改入库主表记帐标志strSql="updateinvinmainsetJiZhangFlag=,JBR='"gCLoginuserID"'whereinvInid='"AInvInID"'"IfNotExcuteSql(strSql,rsData,"UPDATE")ThenmstrErrorMsg="设置此单据已记帐标志时失败!"GoToErrorExitFunctionEndIf'无错提交事务gDBConnectionCommitTransSetrsData=NothingInAccountSJ=TruemstrErrorMsg="记账成功!"ExitFunctionErrorExitFunction:'出错回滚事务gDBConnectionRollbackTransSetrsData=NothingEndFunction出库记帐方法与上面的入库记帐方法类似)账目管理子系统与界面账务管理子系统包括三大功能模块:库存账查询、收发物明细账查询以及对账其中库存账和收发明细账查询都是对单个数据库表进行的查询、查看操作功能比较简单所以可以通过配置XML文件调用通用配置组件来完成这两个功能。而对账模块则需要单独编写ActiveXDLL组件来完成。库存账与收发物明细账查询功能界面如下:对账模块主界面如下:对账单表也是主表明细表结构的在界面的下部是按钮区在界面最上部是对账单的基本信息在中间是对账单列表下部是物资明细信息。对账单是对数据库信息的直接修改具有一定的危险性所以必须对对账单处理的全过程进行监控设置了制单人、审核人和记账人三个数据项将每一步操作的执行人记录下来。并且在审核之前不能记账。已审核或已记账的对账单既不能删除也不能修改。用户点击“新增”按钮后首先要选择库房即对哪个库房开具对账单根据用户选择的库房号程序将该库房的所有库存物资信息从MAINV表中读取出来,显示在对账单维护界面中由用户选择修改哪些物资的库存情况修改多少。对账模块主要是对业务数据表中的DUIZHANGMAIN和DUIZHANGDETAIL两个表进行操作的。对账单的主表信息保存在表DUIZHANGMAIN中而物资明细信息保存在表DUIZHANGDETAIL中在为对账单记账的时候程序将修改结存账表MAINV和出入库明细表MAINVINDETAIL和MAINVOUTDETAIL并将相应出入库明细记录的类别设置为“对账单”。)基础数据维护子系统与界面基础数据维护子系统包括了物资信息维护、人员情况管理、存储点维护和成套物资信息维护四个模块。成套物资信息维护模块界面如下:因为系统中的物资信息比较多所以用户可以选择物资大类下拉列表框中的一项来查看该大类的成套物资信息。用户单击界面上半部分的表格就会在下部显示出该成套物资的所有配套物资信息。新增成套物资界面如下:用户新增一条成套物资信息要选择该物资的配套物资信息并且选择该成套物资的物资大类最后填写成套物资名和相关信息点“保存”成套与配套物资相互关系将保存在MARELATION表中物资信息保存在物资信息表中。)系统管理子系统与界面系统管理组件负责系统维护包括用户信息管理角色信息管理用户角色管理和用户角色功能权限设置四项功能。每项功能都分别做成ActiveXDLL的模式分为客户端和服务端。下面分别对这些功能进行介绍。,用户信息管理功能系统管理菜单中的用户管理时会进入用户列表界面该界面显示系统中现有的所有用户信息可以进行增加、删除、修改用户信息。也可在系统管理中单独进行修改密码以下是用户管理的界面和实现的设计:在用户管理界面中可以看到系统中所有的用户信息点击其中一个用户可以在右边的文本框中显示出他的基本信息并可以进行修改。身份证号信息不能直接输入点击浏览按钮将弹出身份证信息表保存着目前系统中记录的所有人员的身份证号选择身份证号后点确定可以修改该用户的身份证号信息。即将该用户与身份证号绑定了。,角色信息管理与用户信息管理十分相似只是角色不是与某个人挂钩的所以没有了身份证号的选择这个操作。,本系统是基于用户角色双重全县管理机构的所以一定要有一个为用户分配角色的功能。经过上面两个模块的操作用户与角色都已经建立起来了。这个模块中将二者关联起来这样用户登录的时候才会有相应的权限。界面左边是系统中所有的用户信息而右边是所有的角色信息当点击一个用户时该用户所具有的角色前面的对钩将被选中表示该用户拥有该权限为用户分配某个角色时只需要在相关角色前的复选框中选择就可以了。,这实际上是系统中的两个功能但是因为他们非常接近我将他们写在一个模块中靠接口参数来进行区分界面左边是系统中的用户信息(角色权限管理模块是角色信息)。右边是根据节点信息表生成的节点功能树。可以在右边树中节点的前面为用户选择权限。因为系统功能是树形结构的所以当选中某一条权限的时候从根节点到该节点的所有权限用户都自动拥有了。而当用删除一条权限的时候该权限的所有子孙权限也都被取消选择了。当单击用户列表中的某一个用户时该用户所有具有的权限都被显示在右边的树中。点击确定就可以将对用户权限的修改保存。、本模块的算法关键在于生成系统得功能节点树。该部分代码如下:'使用数据表内容组织树'参数表:'tvwYhqxglTreeView控件对象'rstRecordSetRecordSet类对象'add函数定义:objectAdd(relative,relationship,key,text,image,selectedimage)'rs对象中的fields为:JDDM和JDHZMCJDDM就是节点的编码(key)而JDHZMC是节点需要显示的TEXT值PrivateFunctionBuildTree(ByReftvwYhqxglAsTreeView,ByValrsAsADODBRecordset)DimstrCurrentCodeAsString'当前节点编码DimstrPrevCodeAsString'上一节点编码DimobjPrevNodeAsNode'上一节点DimobjSiblingNodeAsNode'父亲节点DimobjTmpNodeAsNode'临时变量DimNewIndexAsInteger'保存节点的索引值'先建立树的根节点,将根节点的键值设置为空,并且将根节点的文字信息设置为"节点信息表"SetobjPrevNode=tvwYhqxglNodesAdd(,,"","系统功能")strPrevCode=""'设定上一节点编码为空(即根节点)WhileNotrsEOF'算法说明:对于节点的编码长度:'如果当前节点的编码长度大于前一个节点的则说明应该是前一个节点的下级节点'处理方式:挂在前一个节点之下'如果当前节点的编码长度小于前一个节点的则说明应该是前一个节点的上级节点'处理方式:需要寻找和当前节点编码长度相同的节点然后将当前节点添加为找到的那个节点的下一个兄弟节点'如果当前节点和前一节点的编码长度相同则说明当前节点和前一节点是同级的'处理方式:将当前节点添加为前一节点的兄弟节点strCurrentCode=rs!JDDMIfLen(strCurrentCode)>Len(strPrevCode)Then'当前节点的编码长度大于前一节点的。SetobjTmpNode=tvwYhqxglNodesAdd(objPrevNodeKey,tvwChild,""rs!JDDM,rs!JDHZMC)SetobjTmpNodeParent=objPrevNode'设置新建立的这个节点的父节点为前一个建立的节点SetobjPrevNode=objTmpNodestrPrevCode=rs!JDDMElseIfLen(strCurrentCode)<Len(strPrevCode)Then'当前节点的编码长度小于前一节点的SetobjSiblingNode=FindSibling(strCurrentCode,objPrevNode)SetobjTmpNode=tvwYhqxglNodesAdd(objSiblingNodeKey,tvwNext,""rs!JDDM,rs!JDHZMC)SetobjTmpNodeParent=objSiblingNodeParentSetobjPrevNode=objTmpNodestrPrevCode=rs!JDDMElse'当前节点长度等于前一节点SetobjTmpNode=tvwYhqxglNodesAdd(objPrevNodeKey,tvwNext,""rs!JDDM,rs!JDHZMC)SetobjTmpNodeParent=objPrevNodeParentSetobjPrevNode=objTmpNodestrPrevCode=rs!JDDMEndIfrsMoveNextWendEndFunctionPrivateFunctionFindSibling(ByValstrCurrentCodeAsString,ByValobjPrevNodeAsNode)AsNode'找寻与strCurrentCode编码长度相同的节点的父亲节点的函数(实际上就是找到当前节点的父亲节点,准备插入)'参数说明:'strCurrentCode当前正要插入的节点的编码'objPrevNode当前节点的前一个节点'算法说明:'取objPrevNode节点的父亲节点'将传递过来的strCurrentCode值与objPrevNode节点的父亲节点的编码长度(StrTemp)相比较'如果StrTemp仍然长于StrCurrentCode则重复上述过程直到二者长度相等为止'最后将父亲节点的父亲节点返回DimstrTempAsString'保存父亲节点的编码DimobjParentNodeTmpAsNode'临时父亲节点SetobjParentNodeTmp=objPrevNodeParentIfLen(strCurrentCode)=(Len(objParentNodeTmpKey))ThenSetFindSibling=objParentNodeTmpElseWhileLen(strCurrentCode)<>(Len(objParentNodeTmpKey))SetobjParentNodeTmp=objParentNodeTmpParentWendSetFindSibling=objParentNodeTmpEndIfEndFunction,密码修改模块是提供给用户用于修改自己的密码的功能模块界面如下:模块获取注册类中的当前操作员信息将其显示在界面中用户输入完密码后确定程序进行合法性检查无误后将该密码保存入数据库。对本软件系统得改进我认为可以从两个方面来进行考虑。首先是对平台进行修改以提高系统得性能和使用范围另外还可以对业务处理方面做一些修改以拓展系统对业务处理方面的能力适应更新的企业应用需求。)本平台是与Oracle数据库紧密相连的所以使用的时候必须配有Oracle数据库在物流软件方面这是没有问题的因为物流软件都是配合数据库来操作的系统表添加到数据库中没有任何问题。而要想将系统转移到其它的应用领域比如做成网络游戏平台必须依赖数据库就会限制系统得应用了。在这里我提出一个简单的解决方案:建立一个Access数据库文件将系统表和基础数据表转移到Access数据库中去修改通用注册组件中的数据库连接方式其它组件的代码基本上不需要修改(除了有的SQL语句因为Oracle数据库支持而Access数据库不支持需要修改)就可以脱离Oracle数据库将平台模块转移出来。然后就可以重新编制应用软件了。)平台程序中对系统的子系统功能个数进行了限制(只有系统管理、业务处理等四项)这会造成系统功能扩充的困难。可以修改主控程序根据用户登录时获得的注册类信息中的用户权限信息动态地生成系统功能列表按钮这样主控程序就完全独立于应用软件了可以更方便地修改系统功能。目前的系统是单级的只能适用于比较小的仓库可以在同一个平台基础上添加上通信模块开发出两级或者多级的业务处理系统。这样可以将系统的使用范围扩展到更大规模的仓库。在中软公司毕业设计的三个月中我学到了很多东西不仅仅是专业技术上有收获更多的是在对公司管理的认识和对软件工程理论的理解上。感触最深的是在学校学到的是正确的理论而缺少实践的机会而在公司直接学到了如何使用对于理论需要自己学习并掌握。这些感受虽然与我的毕业设计题目没有关系但是我觉得实际上重要性并不比我的毕业设计论文低下面我就结合实际工作来谈谈我的感受。首先是在编程技术方面。在我还没有进入中软公司毕业设计的时候我对VB的印象就是两个字:“低级”。因为我觉得VB是傻瓜型的编程语言在Net与Java大行其道的今天VB早就该淡出软件开发舞台了。但是在我毕业设计进行一段时间后我才发现其实程序的功能的强弱不在于使用的是何种编程语言而在于程序框架的设计构想和对软件开发过程的管理上。只要合理地设计程序的架构严格管理软件的开发流程用VB一样可以做出功能强大、性能稳定的程序来。所以我们作为计算机系的刚毕业学生来说学习技术不一定要最新最高级只要一两种程序设计语言是最好的起点并且应该多花些时间来学习方法论、运筹学、设计模式以及软件工程等方法性学科。我们要学会用最优化的方法去解决问题用最合适的设计模式来为应用软件搭建框架按照完善的软件开发规范来管理项目的开发。这样才能真正开发出大型的软件产品。其次在软件测试方面刚进入公司根本不了解测试以为就是调试系统挑错误并且对一个功能强大的综合系统根本不知道测试是从何做起如何去做。经过一段时间的实际工作在师傅的指导下、在自已学习下、在与用户的交流中渐渐对测试工作有了一定的掌握基本上可以应付所有的工作。在毕业设计过程中最大的感受就是企业与学校不同他不能为我讲解理论而是直接教我如何使用这样就需要自己去学习理论方面的知识这样理论联系实际学起来可是事半功倍。再次在毕业设计过程中对公司软件工程管理我也进行了一些思考。中软公司安全行业部是为我军开发军用软件的专门公司这种特殊的客户情况给公司的软件工程管理带来了一些特殊的问题。下面简单列举一下:)因为保密的原因公司各个项目之间的人员不能有技术上的交流这就使得公司已经开发过的项目的经验教训较难被其他的项目所吸取。在我刚到公司的时候甚至一份公司的编程规范需要一定的权限才能够获取一份规定了软件开发标准的国军标文件都是因为涉密文件而无法阅读这就给新员工迅速熟悉开发工作带来了不利影响。对此公司领导采取了折中的方法:建立“室”一级的开发单位同室的成员基本稳定这样这些项目对“室”内的员工来说就是开放的在项目中遇到的问题也可以为将来的项目开发提供帮助。但是即使是这样也不能说完全解决问题。比如公司仍然缺少一份详尽的开发规范一是编程的代码风格各异给阅读带来了一些问题二是界面中控件的摆放、窗体的大小以及对用户非法操作的处理都不相同这样的程序看起来比较混乱风格不一致为开发过程增加了很多不便三是在测试方面虽然已经生成了一份测试文档但是利用率并不高且并不能满足各种测试的需要导致测试人员的测试工作没有真正的实现。有时候在系统验收前期集中大量人员帮助开发人员找错误根本就没有系统规范的测试过程和测试标准导致出现很多繁琐的问题。我认为公司在已完成的项目的基础上进行总结提出一系列相关标准。首先在开发方面对于程序编码制定出一套适合本公司的规范这样既能增加程序的可读性也为后期的维护节省预算其次系统界面应该形成统一的风格和大小标准就像windows一样不管是WinX还是WinK让人一见就知道是微软的风格这样有利于企业打造自己的品牌形象赢得更广泛的市场。再次测试过程与测试管理要规范。在测试前期要做好计划艾森豪威尔说过计划是毫无用处的但制定计划却是必不可少的。计划在整个测试工作中处于指导地位详细完善的计划是能够更好完成测试工作的前提条件。在测试过程中要生成详细的文档我认为没有任何文档不算测试测试一方面保证系统有较高的质量另一方面是为软件开发和设计人员提供反馈信息有利于他们设计、开发出更好的系统。在功能复杂的系统中只有通过对测试过程生成的一系列文档进行的分析才能总结出系统的优劣。在测试后期要做好文档的归档工作制作重用包为以后进行类似的系统提供测试依据这点对于我们公司来说尤其适用每个开发室只负责同一类软件的开发那么测试重复利用率就很高采用重用包就会节省人力和物力降低测试预算。)我军的信息化建设还刚刚起步各方面还不完善没有形成一套完整的标准也因此就没有明确的需求。所以在公司的软件开发过程中需求分析阶段的需求实际上是由公司而不是由客户来提出的。在公司做完需求分析后客户在审查需求分析报告和页面集的过程中又不断地添加需求甚至在开发进行到尾声进入集成测试阶段的时候仍有一些修改的需求提出来这对开发工作造成了很严重的影响。不断地修修补补耽误了很多时间。除此之外详细设计文档的编写也存在问题不够详细在不明确需求的情况下写出来的详细设计文档对后期开发没有多少实际价值而详细设计文档本来应该是开发的唯一依据。在开发过程中开发人员不断遇到难以解决的需求问题只能一次次地与项目组长、相关成员讨论解决的办法在开发完整个项目后反观详细设计文档已经与实际产品相差很大了。在这个时候我才更加真切地理解了软件工程中所讲述的软件开发过程的管理以及文档在软件开发过程中的重要作用。)用户给予软件开发的时间通常比较紧张这就造成了公司加班赶工现象非常普遍。虽然在IT界加班现象可谓是司空见惯可是长时间高强度的加班并不是一件好事。长期加班会造成员工缺乏休息时间以开始就感觉到身心疲惫这对员工的身心健康是不好的更会降低积极性。而且长期加班会造成员工对工作的厌恶使得工作效率降低在正常工作时间中也发挥不出应有的效率进一步降低软件开发的效率和质量。实际上公司为了获得加班的这一点工作进展所付出的成本是很高的增加了软件开发的成本。我觉得正确的办法是做好计划写好开发文档即要严格按照软件工程的流程来做在需求分析阶段将项目的需求做好在详细设计阶段由项目组长按照项目的开发时间做好计划精确到每个人每一天的进展情况然后将工作下发到个人在开发进度滞后的时候由个人来决定是否加班这样就可以减少加班的时间提高正常工作时间内员工的工作效率和质量。写了这些也都是毕业设计过程的一些体会对于具体测试阶段要采用的技术还是缺乏理论的掌握和使用。测试尤其是管理工作是一项实践性和经验性很强的工作在这么短的时间内我也不能有很深刻的认识希望今后能在更多的实际工作中不断充实自己更加深刻地认识这项工作。中软安全行业部正处于蓬勃发展的上升期的企业它有辉煌的历史有美好的未来有强大的技术实力有团结一致的向心精神管理制度也在进一步完善。在这样的环境中工作学习更能感觉到自己要学的东西还很多。通过一阶段的毕业设计也学会了很多实际应用的技术。所有进步的取得离不开公司的领导和各位工程师在这三个月中对我的关心和帮助同时毕业设计以及论文能够顺利完成离不开指导老师的指导在此表示衷心的感谢。(美)霍尔兹纳(Holzner,S)《VisualBasic技术内幕》机械工业出版社DaveEnsor,IanStevenson《Oracle设计》中国电力出版社(美)DonaldKBurleson《OracleiSTATSPACK高性能调整》机械工业出版社(美)彼得鲁索斯(Petroutsos,E)《VisualBasic从入门到精通》电子工业出版社(美)赛勒(Siler,B),斯波茨(Spotts,J)《VisualBasic开发使用手册》北京机械工业出版社(美)MicrosoftPress《VisualBasic中文版程序员指南》北京希望电脑公司(美)RogerJennings著《VisualBasic数据库开发人员指南》北京机械工业出版(美)NoelJerke《VisualBasic参考大全》北京希望电脑公司JamesBritt,TeunDuynstee《VisualBasicXML专业技术》人民邮电出版社JuliaCaseBradley,AnitaCMillspaugh《VisualBasic高级编程》清华大学出版社(美)StevenJordan牛力等编著《VisualBasic编程宝典》电子工业出版社(美)科克(Koch,G),洛内(Loney,K)著《Oracle完全参考手册》机械工业出版社(美)CarolMcCulloughDieter著《Oracle开发人员指南》中国水利水电出版社(美)RogerSPressman著梅宏译。《软件工程实践者的研究方法》(第五版)(SortwareEngingeeringAPractitioner’sAproach(FifthEdition)

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/72

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利