《仓库管理系统实验报告(共23页).doc》由会员分享,可在线阅读,更多相关《仓库管理系统实验报告(共23页).doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上1 概述1.1 选题背景 仓库管理系统在企业的整个供应链中起着至关重要的作用,如果不能保证正确的进货和库存控制及发货,将会导致管理费用的增加,服务质量难以得到保证,从而影响企业的竞争力。传统简单、静态的仓储管理已无法保证企业各种资源的高效利用。如今的仓库作业和库存控制作业已十分复杂化多样化,仅靠人工记忆和手工录入,不但费时费力,而且容易出错,给企业带来巨大损失。本软件系统是通过入库业务、出库业务、仓库调拨、库存调拨等功能,综合批次管理、物料对应、库存盘点、质检管理和即时库存管理等功能综合运用的管理系统,有效控制并跟踪仓库业务的物流和成本管理全过程,实现完善的企业仓储信
2、息管理。该系统可以独立执行库存操作,与其他系统的单据和凭证等结合使用,可提供更为完整全面的企业业务流程和财务管理信息。1.2 系统环境Visual FoxPro ,是Microsoft公司从Fox公司的FoxBase数据库软件经过数次改良,并且移植到Windows之后,得来的应用程序开发软件,主要用于开发数据管理与运算等方面的软件。VFP是Microsoft公司推出的最新可视化数据库管理系统平台,是功能特别强大的32位数据库管理系统。它提供了功能完备的工具、极其友好的用户界面、简单的数据存取方式、独一无二的跨平台技术,交肯有良好的兼容性、真正的可编译性和较强的安全性,是目前最快捷、最实用的数据
3、库管理系统软件之一。2 系统分析2.1 系统目标需求 仓库管理系统主要用于仓库货品信息的管理,系统包括仓库管理、入库、出库、一些统计查询和报表等几部分组成。系统特色:1. 设置系统用户登录功能,即对系统数据进行安全设置与保护。2. 友好的用户界面,业务操作简单,进入系统即能使用。3. 系统每种操作都可以通过菜单来进行。操作快捷、方便。系统集输入、维护、查询、统计和各种处理为一体,信息导入导出方便共享。2.2 开发的可行性分析根据当前的企业管理体制,一般物资供应管理系统,总是根据所掌握的物资类别,相应分成几个科室来进行物资的计划,订货,核销托收,验收入库,根据企业各个部门的需要来发放物资设备,并
4、随时按期进行库存盘点,作台帐,根据企业领导和自身管理的需要按月,季度,年来进行统计分析,产生相应报表。为了加强关键物资,设备的管理,要定期掌握其储备,消耗情况,根据计划定额和实际消耗定额的比较,进行定额的管理,使得资金使用合理,物资设备的储备最佳。 所以一个完整的企业物资供应管理系统应该包括计划管理,合同托收管理,仓库管理,定额管理,统计管理,财务管理等模块。其中仓库管理是整个物资供应管理系统的核心。鉴于Visual Foxpro6.0有强大的数据库管理功能,我们选用Visual Foxpro6.0来完成这个仓库管理系统。2.3 业务流程分析主要业务流程如图所示。 仓库管理系统 系 输 维 查
5、 报 帮统 入 护 看 表 助模 模 模 模 模 模块 块 块 块 块 块打 日 入 出 还 需印 志 库 库 库 求设 管 模 模 模 模置 理 块 块 块 块2.4 数据流程 仓库现有库存 各部门需求 企业总体生产计划汇总 处理设备 采购 设备 出库设备 入库 设备 还库2.5 数据字典 设备代码信息。包括的数据项有设备号、设备名称。 现有库存信息。包括的数据项有现有设备、现有数目、总数目、最大库存、最小库存等。 设备使用信息。包括的数据项有使用的设备、使用部门、数目、使用时间、出库时状态。 设备采购信息。包括的数据项有采购的设备、采购员、供应商、采购数目、采购时间等。 设备归还信息。包括
6、的数据项有归还设备、归还部门、归还数目、归还时间、经手人等。 设备需求信息。包括的数据项有需求的部门、需求设备、需求数目、需求时间等。3 系统设计3.1功能结构图 切换面板 设 设 设 设 设 显备 备 备 备 备 示入 出 还 需 采 报库 库 库 求 购 表3.2模块说明书(1) 设备入库模块:添加设备到库存中。(2) 设备出库模块:将设备从库存取出并记录。(3) 设备还库模块:将归并到库存的设备保存到数据库。(4) 设备需求模块:记录各部门的设备需求。(5) 设备采购模块:记录要采购的设备。(6) 切换面板:用于切换到不同的操作,如设备入库、设备出库等。3.3 代码设计首先建立一个表单,
7、设取“caption”属性为“仓库管理”。在该表单上添加6个“按钮”控件,它们的“caption”属性分别为“设备入库”,“设备出库”,“设备还库”,“部门需求”,“设备采购”,“显示报表”。然后在表单上添加“图象控件”,并设其“stretch”属性为“2-strech(扩展)”,“pictrue”属性为图片所在的位置,本例中为“c:仓库管理001.jpg”。在“comm.and1”(“caption”属性为“设备入库”)控件的“click”事件中添加如下代码:do form 设备入库表thisform.release 在“comm.and2”(“caption”属性为“设备出库”)控件的“c
8、lick”事件中添加如下代码: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
9、”(“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.1 E-R图 现有库存设备号 现有库存 警戒库存 总数2)入库实体E-R图: 入库设备号 供应商信息 采购价格信息 采购
10、员3)出库实体E-R图: 出库设备号 使用部门 数量 时间 经手人4)部门需求实体E-R图: 部门需求 设备号 需求部门 需求数量 需求时间5)还库实体E-R图: 设备还库 设备号 还库时间 人 还库数量 经手人6)计划采购实体E-R图: 计划采购设备号 库存信息 供应信息 时间7)实体和实体之间的关系E-R图如图所示: 入库 现有库存 出库 还库 部门需求 设备采购3.4.2数据表设计(1)设备代码表:列名数据类型可否为空设备号(主键)数值型(20)不能为空设备名称字符型(50)可为空(2)设备入库表:列名数据类型可否为空设备号数值型(20)不能为空入库时间(主键)日期型(8)可为空供应商字
11、符型(50)可为空供应商电话字符型(15)可为空入库数量数值型(20)可为空价格字符型(10)可为空采购员字符型(20)可为空(3)设备出库表:列名数据类型可否为空设备号数值型(20)不能为空出库时间(主键)日期型(8)可为空使用部门字符型(50)可为空出库状况数值型(20)可为空经手人字符型(20)可为空出库数量数值型(10)不能为空领取人字符型(50)可为空用途字符型(50)可为空(4)现有库存表:列名数据类型可否为空设备号(主键)数值型(20)不能为空现有库存数值型(20)可为空最大库存数值型(20)可为空最小库存数值型(20)可为空总数数值型(20)可为空(5)部门需求表:列名数据类型
12、可否为空设备号(主键)数值型(20)不能为空部门名称字符型(20)不能为空需要数量数值型(20)可为空需求开始时间日期型(8)可为空需求结束时间日期型(8)可为空(6)设备还库表:列名数据类型可否为空设备号(主键)数值型(20)不能为空还库时间日期型(8)不能为空仓库管理员数值型(20)可为空归还数量数值型(20)可为空归还人字符型(10)可为空(7)操作日志表:列名数据类型可否为空操作员字符型(50)不能为空操作内容字符型(50)不能为空操作时间日期型(8)可为空(8)设备采购计划表:列名数据类型可否为空设备号数值型(20)不能为空现有库存数值型(20)可为空总库存数值型(20)可为空最大库
13、存数值型(20)可为空购买数量数值型(20)可为空供应商字符型(20)不能为空价格字符型(10)可为空计划采购时间(主键)日期型(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 off set cent on _screen.windowstate=2_screen.icon=iconshappy.ico _screen.maxbutton=0_sc
14、reen.minbutton=1_screen.closable=.f.modify window screen nocloseMODIFY WINDOW SCREEN TITLE 仓库管理信息系统 ZOOM WINDOW SCREEN MAX set default to datado form 登录表单read eventsclearclose allreturnendif2:登录表单的确定按钮控件的click源代码:locate for alltrim(用户名)=alltrim(bo1.value) and alltrim(密码)=alltrim(thisform.text1.value
15、) if !eof() if alltrim(级别)=管理员 public jb,username jb=1 username=alltrim(bo1.value) else public jb,username jb=0 username=alltrim(bo1.value) endif do menu.mpr thisform.release do form 仓库管理else#define missmatch_loc 用户或口令错,请重新登录!wait window missmatch_loc timeout 1bo1.value=thisform.text1.value=thisform
16、.text1.setfocusnumcount=numcount+1 if numcount=4 numcount=0 mess =messagebox(三次口令错,将退出程序!,4+16+2,退出) clear event release thisform endif endif3:密码修改表单的修改按钮的click事件源代码:if empty(thisform.text4.value) mess=messagebox(用户名不能为空!,48,警告)else if empty(thisform.text1.value) mess=messagebox(旧密码不能为空!,48,警告) else
17、 if empty(thisform.text2.value) mess=messagebox(新密码不能为空!,48,警告) else if empty(thisform.text3.value) mess=messagebox(重复密码不能为空!,48,警告) else if alltrim(thisform.text2.value)alltrim(thisform.text3.value) or len(alltrim(thisform.text2.value)len(alltrim(thisform.text3.value) mess=messagebox(二次密码不一致!,48,警告
18、) else locate for alltrim(用户名)=alltrim(thisform.text4.value) and alltrim(密码)=alltrim(thisform.text1.value) if eof() mess=messagebox(密码错误,系统将取消你的修改权利!,48,警告) thisform.release else repl 密码 with alltrim(thisform.text3.value) mess=messagebox(密码修改成功!,48,信息) thisform.release endif4:添加操作员表单的最首按钮的click事件源代码
19、: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.gr
20、id1.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.enabl
21、ed=.f.mand3.enabled=.f.mand4.enabled=.f.mand6.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.e
22、nabled=.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=
23、.f.mand5.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.e
24、ndifthisform.grid1.setfocusthisform.grid1.refresh10:添加操作员表单的删除按钮的click事件源代码:cMessageTitle=系统警告 cMessageText=确认要删除吗? nDialogType=4+32 nanswer=messagebox(cMessageText,nDialogType,cMessageTitle)if nanswer=6delethisform.grid1.setfocusthisform.grid1.refreshendif11:类baseform的picrecord的源代码:IF TYPE(THIS.APP
25、_MEDIATOR.BaseClass)#CRETURNENDIFIF THIS.APP_MEDIATOR.PickRecordToWorkOn()IF THIS.APP_MEDIATOR.lAdding 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.BaseCla
26、ss)#CIF !THIS.ResolveConflicts()NODEFAULTRETURN .F.ENDIFRETURNENDIFIF DODEFAULT() IF NOT THIS.App_Mediator.QueryUnload() NODEFAULT RETURN .F. ENDIFELSE NODEFAULT RETURN .F.ENDIF13:类baseform的release的源代码:IF !THIS.Queryunload()NODEFAULTRETURN .F.ENDIF14:类baseform的resolveconflicts的源代码:#DEFINE PROMPTTOSA
27、VE_LOCData has been changed. Would you like to save changes?IF !THIS.lSaveBufferedDataRETURNENDIFLOCAL nDECursors, aDECursors, cDataEnvRef, lPromptSave,lHadPromptLOCAL lcAlias, lnFields, nPromptSave, i, loCurrentControl* Flush current controlIF TYPE(THIS.ActiveControl.baseclass)=C AND; PEMSTATUS(THI
28、S.ActiveControl,value,5) AND; PEMSTATUS(THIS.ActiveControl,controlsource,5) AND; !EMPTY(THIS.ActiveControl.controlsource)loCurrentControl = THIS.ActiveControl* Check if data actually changedIF !EVAL(loCurrentControl.controlsource)= loCurrentControl.ValueloCurrentControl.Value = loCurrentControl.Valu
29、eENDIFloCurrentControl=ENDIFnDECursors = 0cDataEnvRef = DIMENSION aDECursors1DO CASECASE TYPE(THISFORM.DataEnvironment) = OnDECursors = AMEMBERS(aDECursors,THISFORM.DataEnvironment,2)cDataEnvRef = THISFORM.DataEnvironmentCASE TYPE(THISFORMSET.DataEnvironment) = OnDECursors = AMEMBERS(aDECursors,THIS
30、FORMSET.DataEnvironment,2)cDataEnvRef = THISFORMSET.DataEnvironmentCASE THIS.lUpdateAllBufferedTablesnDECursors=AUSED(aDECursors)OTHERWISEIF !EMPTY(ALIAS()aDECursors1=ALIAS()nDECursors=1ENDIFENDCASEFOR i = 1 TO m.nDECursorsIF EMPTY(m.cDataEnvRef)lcAlias = aDECursorsm.iELSEWITH EVAL(m.cDataEnvRef + .
31、 + aDECursorsm.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 )=0LOOPENDIFELSElnField
32、s = GETFLDSTATE(-1,lcAlias)IF REPLICATE(1,LEN(lnFields)=TRANS(lnFields)LOOPENDIFENDIFnPromptSave = MESSAGEBOX(PROMPTTOSAVE_LOC,35)IF nPromptSave=2RETURN .F.ENDIFlPromptSave=(nPromptSave=6)lHadPrompt = .T.ENDIF IF m.lPromptSaveTableUpdate(.T.,.T.,lcAlias) & update on exit ELSETableRevert(.T.,lcAlias) & update on exitENDIFENDIFENDFOR15:类baseform的show的源代码:LPARAMETERS nStyleLOCAL lcAppRefIF TYPE(THIS.APP_MEDIATOR.BaseClass)#C OR !THIS.lShowFirstTimeRETURNENDIFTHIS.lShowFirstTime = .F.THIS.lSaveBufferedData = .F.THIS.PickRecord()专心-专注-专业