当前位置:文档之家› 仓库管理系统实验报告

仓库管理系统实验报告

1 概述1.1 选题背景仓库管理系统在企业的整个供应链中起着至关重要的作用,如果不能保证正确的进货和库存控制及发货,将会导致管理费用的增加,服务质量难以得到保证,从而影响企业的竞争力。

传统简单、静态的仓储管理已无法保证企业各种资源的高效利用。

如今的仓库作业和库存控制作业已十分复杂化多样化,仅靠人工记忆和手工录入,不但费时费力,而且容易出错,给企业带来巨大损失。

本软件系统是通过入库业务、出库业务、仓库调拨、库存调拨等功能,综合批次管理、物料对应、库存盘点、质检管理和即时库存管理等功能综合运用的管理系统,有效控制并跟踪仓库业务的物流和成本管理全过程,实现完善的企业仓储信息管理。

该系统可以独立执行库存操作,与其他系统的单据和凭证等结合使用,可提供更为完整全面的企业业务流程和财务管理信息。

1.2 系统环境Visual FoxPro ,是Microsoft公司从Fox公司的FoxBase数据库软件经过数次改良,并且移植到Windows之后,得来的应用程序开发软件,主要用于开发数据管理与运算等方面的软件。

VFP是Microsoft公司推出的最新可视化数据库管理系统平台,是功能特别强大的32位数据库管理系统。

它提供了功能完备的工具、极其友好的用户界面、简单的数据存取方式、独一无二的跨平台技术,交肯有良好的兼容性、真正的可编译性和较强的安全性,是目前最快捷、最实用的数据库管理系统软件之一。

2 系统分析2.1 系统目标需求仓库管理系统主要用于仓库货品信息的管理,系统包括仓库管理、入库、出库、一些统计查询和报表等几部分组成。

系统特色:1.设置系统用户登录功能,即对系统数据进行安全设置与保护。

2.友好的用户界面,业务操作简单,进入系统即能使用。

3.系统每种操作都可以通过菜单来进行。

操作快捷、方便。

系统集输入、维护、查询、统计和各种处理为一体,信息导入导出方便共享。

2.2 开发的可行性分析根据当前的企业管理体制,一般物资供应管理系统,总是根据所掌握的物资类别,相应分成几个科室来进行物资的计划,订货,核销托收,验收入库,根据企业各个部门的需要来发放物资设备,并随时按期进行库存盘点,作台帐,根据企业领导和自身管理的需要按月,季度,年来进行统计分析,产生相应报表。

为了加强关键物资,设备的管理,要定期掌握其储备,消耗情况,根据计划定额和实际消耗定额的比较,进行定额的管理,使得资金使用合理,物资设备的储备最佳。

所以一个完整的企业物资供应管理系统应该包括计划管理,合同托收管理,仓库管理,定额管理,统计管理,财务管理等模块。

其中仓库管理是整个物资供应管理系统的核心。

鉴于Visual Foxpro6.0有强大的数据库管理功能,我们选用Visual Foxpro6.0来完成这个仓库管理系统。

2.3 业务流程分析主要业务流程如图所示。

2.4 数据流程2.5 数据字典●设备代码信息。

包括的数据项有设备号、设备名称。

●现有库存信息。

包括的数据项有现有设备、现有数目、总数目、最大库存、最小库存等。

●设备使用信息。

包括的数据项有使用的设备、使用部门、数目、使用时间、出库时状态。

●设备采购信息。

包括的数据项有采购的设备、采购员、供应商、采购数目、采购时间等。

●设备归还信息。

包括的数据项有归还设备、归还部门、归还数目、归还时间、经手人等。

●设备需求信息。

包括的数据项有需求的部门、需求设备、需求数目、需求时间等。

3 系统设计3.1功能结构图切换面板3.2模块说明书(1)设备入库模块:添加设备到库存中。

(2)设备出库模块:将设备从库存取出并记录。

(3)设备还库模块:将归并到库存的设备保存到数据库。

(4)设备需求模块:记录各部门的设备需求。

(5)设备采购模块:记录要采购的设备。

(6)切换面板:用于切换到不同的操作,如设备入库、设备出库等。

3.3 代码设计首先建立一个表单,设取“caption”属性为“仓库管理”。

在该表单上添加6个“按钮”控件,它们的“caption”属性分别为“设备入库”,“设备出库”,“设备还库”,“部门需求”,“设备采购”,“显示报表”。

然后在表单上添加“图象控件”,并设其“stretch”属性为“2-strech(扩展)”,“pictrue”属性为图片所在的位置,本例中为“c:\仓库管理\001.jpg”。

在“comm.and1”(“caption”属性为“设备入库”)控件的“click”事件中添加如下代码:do form 设备入库表thisform.release在“comm.and2”(“caption”属性为“设备出库”)控件的“click”事件中添加如下代码:do form 设备出库表thisform.release在“comm.and3”(“caption”属性为“设备还库”)控件的“click”事件中添加如下代码:do form 设备还库表thisform.release在“comm.and4”(“caption”属性为“部门需求”)控件的“click”事件中添加如下代码:do form 部门需求表thisform.release在“comm.and5”(“caption”属性为“设备采购”)控件的“click”事件中添加如下代码:do form 设备采购表thisform.release在“comm.and6”(“caption”属性为“显示报表”)控件的“click”事件中添加如下代码:do form 显示报表thisform.release在“form1”的属性里选择“autocenter”设置为“.T.-真”,同时将“backcolor”设置为“255,255,255”,“windowstate”设置为“0-普通”。

添加“form1”的“init”事件的代码如下:set directory to c:\仓库管理\*将程序的默认的路径指向资源所在的文件夹3.4 数据库设计3.4.1E-R图2)入库实体E-R图:3)出库实体E-R图:4)部门需求实体E-R图:5)还库实体E-R图:6)计划采购实体E-R图:7)实体和实体之间的关系E-R图如图所示:3.4.2数据表设计(1)设备代码表:(2)设备入库表:(3)设备出库表:(4)现有库存表:(5)部门需求表:(6)设备还库表:(7)操作日志表:(8)设备采购计划表:3.5 界面设计3.5.1系统首页界面3.5.2设备入库模块界面3.5.3设备出库模块界面3.5.4设备还库模块界面 3.5.5部门需求模块界面3.5.6设备采购模块界面3.5.7 显示报表模块界面4系统实施系统类的编写1:主程序源代码:SET TALK offset sysmenu offset cent on_screen.windowstate=2_screen.icon="icons\happy.ico"_screen.maxbutton=0_screen.minbutton=1_screen.closable=.f.modify window screen nocloseMODIFY WINDOW SCREEN TITLE " 仓库管理信息系统"ZOOM WINDOW SCREEN MAXset default to datado form 登录表单read eventsclearclose allreturnendif2:登录表单的确定按钮控件的click源代码:locate for alltrim(用户名)==alltrim(bo1.value) and alltrim(密码)==alltrim(thisform.text1.value)if !eof()if alltrim(级别)=="管理员"public jb,usernamejb=1username=alltrim(bo1.value)elsepublic jb,usernamejb=0username=alltrim(bo1.value)endifdo menu.mprthisform.releasedo form 仓库管理else#define missmatch_loc "用户或口令错,请重新登录!"wait window missmatch_loc timeout 1bo1.value=''thisform.text1.value=''thisform.text1.setfocusnumcount=numcount+1if numcount=4numcount=0mess =messagebox("三次口令错,将退出程序!",4+16+2,"退出") clear eventrelease thisformendifendif3:密码修改表单的修改按钮的click事件源代码:if empty(thisform.text4.value)mess=messagebox("用户名不能为空!",48,"警告")elseif empty(thisform.text1.value)mess=messagebox("旧密码不能为空!",48,"警告")elseif empty(thisform.text2.value)mess=messagebox("新密码不能为空!",48,"警告")elseif empty(thisform.text3.value)mess=messagebox("重复密码不能为空!",48,"警告")elseif alltrim(thisform.text2.value)<>alltrim(thisform.text3.value) or len(alltrim(thisform.text2.value))<>len(alltrim(thisform.text3.value))mess=messagebox("二次密码不一致!",48,"警告")elselocate for alltrim(用户名)==alltrim(thisform.text4.value) and alltrim(密码)==alltrim(thisform.text1.value)if eof()mess=messagebox("密码错误,系统将取消你的修改权利!",48,"警告")thisform.releaseelserepl 密码with alltrim(thisform.text3.value)mess=messagebox("密码修改成功!",48,"信息")thisform.releaseendif4:添加操作员表单的最首按钮的click事件源代码:go topthisform.grid1.setfocusthisform.grid1.refresh5:添加操作员表单的上一个按钮的click事件源代码:skip-1if bof()chr(7)=messagebox("警告,这已经是第一条记录!",48,"信息窗口") go topendifthisform.grid1.setfocusthisform.grid1.refresh6:添加操作员表单的下一个按钮的click事件源代码:skipif eof()chr(7)=messagebox("警告,这已经是最后一条记录!",48,"信息窗口") go bottomendifthisform.grid1.setfocusthisform.grid1.refresh7:添加操作员表单的最末按钮的click事件源代码:go bottomthisform.grid1.setfocusthisform.grid1.refresh8:添加操作员表单的修改按钮的click事件源代码:if mand5.caption='修改'thisform.text1.readonly=.f.thisform.text2.readonly=.f.thisform.text3.readonly=.f.bo1.readonly=.f.mand5.caption='保存'mand1.enabled=.f.mand2.enabled=.f.mand3.enabled=.f.mand4.enabled=.f.mand7.enabled=.f.mand8.enabled=.f.elsemand5.caption='修改'thisform.text1.readonly=.t.thisform.text2.readonly=.t.thisform.text3.readonly=.t.bo1.readonly=.t.mand1.enabled=.t.mand2.enabled=.t.mand3.enabled=.t.mand4.enabled=.t.mand6.enabled=.t.mand7.enabled=.t.mand8.enabled=.t.endifthisform.grid1.setfocusthisform.grid1.refresh9:添加操作员表单的添加按钮的click事件源代码:if mand6.caption='添加'thisform.text1.readonly=.f.thisform.text2.readonly=.f.thisform.text3.readonly=.f.bo1.readonly=.f.mand6.caption='保存'mand1.enabled=.f.mand2.enabled=.f.mand3.enabled=.f.mand4.enabled=.f.mand7.enabled=.f.mand8.enabled=.f.appe blanelsemand6.caption='添加'thisform.text1.readonly=.t.thisform.text2.readonly=.t.thisform.text3.readonly=.t.bo1.readonly=.t.mand1.enabled=.t.mand2.enabled=.t.mand3.enabled=.t.mand4.enabled=.t.mand5.enabled=.t.mand7.enabled=.t.mand8.enabled=.t.endifthisform.grid1.setfocusthisform.grid1.refresh10:添加操作员表单的删除按钮的click事件源代码:cMessageTitle='系统警告'cMessageText='确认要删除吗?'nDialogType=4+32nanswer=messagebox(cMessageText,nDialogType,cMessageTitle) if nanswer=6delethisform.grid1.setfocusthisform.grid1.refreshendif11:类baseform的picrecord的源代码:IF TYPE("THIS.APP_MEDIATOR.BaseClass")#"C"RETURNENDIFIF THIS.APP_MEDIATOR.PickRecordToWorkOn()IF THIS.APP_dding AND !EMPTY(ALIAS()) THIS.REFRESH()* Check if we have blank record already from txtbtnsIF GETFLDSTATE(1) #3THIS.AddRecord()ENDIFENDIFENDIF12:类baseform的queryunload的源代码:IF TYPE("THIS.APP_MEDIATOR.BaseClass")#"C"IF !THIS.ResolveConflicts()NODEFAULTRETURN .F.ENDIFRETURNENDIFIF DODEFAULT()IF NOT THIS.App_Mediator.QueryUnload()NODEFAULTRETURN .F.ENDIFELSENODEFAULTRETURN .F.ENDIF13:类baseform的release的源代码:IF !THIS.Queryunload()NODEFAULTRETURN .F.ENDIF14:类baseform的resolveconflicts的源代码:#DEFINE PROMPTTOSA VE_LOC "Data has been changed. Would you like to save changes?"IF !THIS.lSaveBufferedDataRETURNENDIFLOCAL nDECursors, aDECursors, cDataEnvRef, lPromptSave,lHadPrompt LOCAL lcAlias, lnFields, nPromptSave, i, loCurrentControl* Flush current controlIF TYPE("THIS.ActiveControl.baseclass")="C" AND;PEMSTATUS(THIS.ActiveControl,"value",5) AND;PEMSTATUS(THIS.ActiveControl,"controlsource",5) AND;!EMPTY(THIS.ActiveControl.controlsource)loCurrentControl = THIS.ActiveControl* Check if data actually changedIF !EV AL(loCurrentControl.controlsource)= loCurrentControl.ValueloCurrentControl.Value = loCurrentControl.ValueENDIFloCurrentControl=""ENDIFnDECursors = 0cDataEnvRef = ""DIMENSION aDECursors[1]DO CASECASE TYPE("THISFORM.DataEnvironment") = "O"nDECursors = AMEMBERS(aDECursors,THISFORM.DataEnvironment,2)cDataEnvRef = "THISFORM.DataEnvironment"CASE TYPE("THISFORMSET.DataEnvironment") = "O"nDECursors = AMEMBERS(aDECursors,THISFORMSET.DataEnvironment,2) cDataEnvRef = "THISFORMSET.DataEnvironment"CASE THIS.lUpdateAllBufferedTablesnDECursors=AUSED(aDECursors)OTHERWISEIF !EMPTY(ALIAS())aDECursors[1]=ALIAS()nDECursors=1ENDIFENDCASEFOR i = 1 TO m.nDECursorsIF EMPTY(m.cDataEnvRef)lcAlias = aDECursors[m.i]ELSEWITH EV AL(m.cDataEnvRef + "." + aDECursors[m.i])IF ATC("CURSOR",.BaseClass)=0 &&skip relationsLOOPENDIFlcAlias = .ALIASENDWITHENDIFIF USED(lcAlias) AND CursorGetProp("sourcetype",lcAlias )=3 AND ;CursorGetProp("buffering",lcAlias )>1IF !m.lHadPromptIF CursorGetProp("buffering",lcAlias )>3IF GETNEXTMODIFIED(0,lcAlias )=0LOOPENDIFELSElnFields = GETFLDSTATE(-1,lcAlias)IF REPLICATE("1",LEN(lnFields))=TRANS(lnFields)LOOPENDIFENDIFnPromptSave = MESSAGEBOX(PROMPTTOSA VE_LOC,35)IF nPromptSave=2RETURN .F.ENDIFlPromptSave=(nPromptSave=6)lHadPrompt = .T.ENDIFIF m.lPromptSaveTableUpdate(.T.,.T.,lcAlias) && update on exitELSETableRevert(.T.,lcAlias) && update on exitENDIFENDIFENDFOR15:类baseform的show的源代码:LPARAMETERS nStyleLOCAL lcAppRefIF TYPE("THIS.APP_MEDIATOR.BaseClass")#"C" OR !THIS.lShowFirstTime RETURNENDIFTHIS.lShowFirstTime = .F.THIS.lSaveBufferedData = .F.THIS.PickRecord()。

相关主题