库存商品管理系统.doc
企业存货管理系统 设计报告 缑博 吴鹏 吕博 第一章、 系统分析 (1)、库存管理系统研究背景与意义 (2)、可行性分析 (3)、需求分析 (4)、系统总体设计第二章、系统设计(1)、系统模块设计(2)、数据库设计(3)、界面设计:登录界面设计、系统主界面、查询与修改界面设计第三章、系统实施(1)、系统登录模块的实施(2)、主界面各个功能的实施第一章、系统分析1、库存管理系统研究背景与意义 存货在企业会计准则中被列为第一号,由此可见存货的重要性。存货核算正确与否,影响着企业的财务状况与经营状况。存货就是指企业在日常活动中持有以备出售的产成品或商品,处在生产过程中的在产品、在生产过程或者提供劳务过程中耗用的材料,物料等。存货是企业一项重要的流动资产,存货会计核算的正确与否,直接影响到企业的财务状况、经营成果和现金流量。 随着我国经济的飞速发展,各种类型规模的公司企业迅速崛起,许多从事生产和经营管理的企业都有自己生产和销售的产品,而这些产品都需要储存在仓库中,对于每个企业来说,随着企业规模的不断扩大,产品数量的急剧增加,所生产产品的种类也会不断地更新与发展,有关产品的各种信息量也会成倍增长。面对庞大的产品信息量,如何有效地管理库存产品,对这些企业来说是非常重要的,库存管理的重点是销售信息能否及时反馈,从而确保企业运行效益。而库存管理又涉及入库、出库的产品、经办人员及客户等方方面面的因素,如何管理这些信息数据,是一项复杂的系统工程,充分考验着仓库管理员的工作能力,工作量的繁重是可想而知的,所以这就需要由库存管理系统来提高库存管理工作的效率,这对信息的规范管理、科学统计和快速查询,减少管理方面的工作量,同时对于调动广大员工的工作积极性,提高企业的生产效率,都具有十分重要的现实意义。2、可行性分析(1)、运行可行性 系统是采用Visual Basic作为开发一具的,Visual Basic是基于Basic的可视化的程序设计语言。在Visual Basic中,一方面继承了Basic所具有的程序设计语言简单易用的特点,另一方面在其编程系统中采用了面向对象、事件驱动的编程机制,用一种巧妙的方法把Windows的编程复杂性封装起来并提供了一种所见即所得的可视化程序设计方法。(2)、经济可行性 系统的效益可以从经济效益和社会效益两方面考虑。对于仓库管理系统则应着重分析其社会效益。例如,系统投入运行后可以使仓库管理实现科学化、规范化。曾强了工作人员对仓库管理能力、提高了工作效率。2、需求分析 本套应用程序名称为“库存管理系统”,主要用于仓库货品信息的管理,系统包括仓库管理、入库、出库、一些统计查询和报表等几部分组成。库存管理系统需满足仓库管理员及工作人员的需求,他们具有登陆应用系统的权限,所以需要对工作人员的登陆本模块进行更多的考虑,设计不同用户的操作权限和登陆方法。对于一个仓库来说,最大的功能就是存储货品,所以仓库管理就是对货品信息,仓库信息,短线货品及超储货品的管理,用户可以根据实际情况对各种货品信息进行分类管理,包括添加,删除更新数据库等。当然,仓库中货品入库也是常有的事,入库管理操作就是对于货品入库情况的管理,用户可以方便地输入一些货品的信息。有了货品的入库,自然也就有货品的出库,这部分提供的功能与入库操作流程差不多,有所区别的只是对一些出库货品的管理,也很方便数据的输入。具体包括一下几个方面的内容。(1)、仓库日常管理 仓库保管员必须合理设置各类物资和产品的明细账簿和台账。原材料仓库必须根据实际情况和各类原材料的性质、用途、类型分明别类建立相应的明细账、卡片;半成品、产成品应按照类型及规格型号设立明细账、卡片;财务部门与仓库所建账簿及顺序编号必须互相统一,相互一致。合格品、逾期品、失效品、料废、退回电机、返修电机应分别建账反映。 必须严格按仓库管理规程进行日常操作,仓库保管员对当日发生的业务必须及时逐笔记录,做到日清日结,确保物料进出及结存数据的正确无误。及时登记手工明细账并与仓库中的数据进行核对,确保两者的一致性。 做好各类物料和产品的日常核查工作,仓库保管员必须对各类库存物资定期进行检查盘点,并做到账、物、卡三者一致。 各事业部、分厂必须根椐生产计划及仓库库存情况合理确定采购数量,并严格控制各类物资的库存量,有条件单位逐步实行零库存;仓库保管员必须定期进行各类存货的分类整理,对存放期限较长,逾期失效等不良存货,要按月编制报表,报送各事业部领导及财务人员,各事业部对本单位的各类不良存货每月必须提出处理意见,责成相关部门及时加以处理。(2)、入库管理 物料进仓时,仓库管理员必须凭送货单、检验合格单办理入库手续;如属回用物资应凭回用单办理入库手续,拒绝不合格或手续不齐全的物资入库,杜绝只见发票不见实物或边办理入库边办理出库的现象。 入库时,仓库管理员必须查点物资的数量、规格型号、合格证件等项目,如发现物资数量、质量、单据等不齐全时,不得办理入库手续。未经办理入库手续的物资一律作待检物资处理放在待检区域内,经检验不合格的物资一律退回,放在暂放区域,同时必须在短期内通知经办人员负责处理。 一切原材料的购入都必须用增植税专用发票方可入库报销,无税票的,其材料价格必须下浮到能补足扣税额为止。同时要注意审查发票的正确性和有效性。 入库材料在未收到相应发票前,仓管员必须建立货到票未到材料明细账,并根据检验单等有效单据及时填开货到票未到收料单(在当月票到的可不开),在收到发票后,冲销原货到票未到收料单,并开具材料票到收料单,月底将货到票未到材料清单上报财务。 收料单的填开必须正确完整,供应单位名称应填写全称并与发票单位一致,如属票到抵冲的,应在备注栏中注明原入库时间,铸件收料单上还应注明单重和总重。收料单上必须有保管员及经手人签字,并且字迹清楚。每批材料入库合计金额必须与发票上的不含税金额一致。(3)、出库管理 各类材料的发出,原则上采用先进先出法。物料(包括原材料、半成品)出库时必须办理出库手续,并做到限额领料,车间领用的物料必须由车间主任(或其指定人员)统一领取,领料人员凭车间主任或计划员开具的流程单或相关凭证向仓库领料,行政各部门只有经主管领导批字后方可领取,领料员和仓管员应核对物品的名称、规格、数量、质量状况,核对正确后方可发料;仓管员应开具领料单,经领料人签字,登记入卡、入帐。 成品发出必须由各销售部开具销售发货单据,仓库管理人员凭盖有财务发货印章和销售部门负责人签字的发货单仓库联发货,并登记卡片。3、系统总体设计 为方便企业各级管理人员及时了解企业各种存货的入库量,出库量和存货量,系统设计了 企业库存管理系统总图企业仓库管理系统初期设置货品管理查询统计数据报表系统维护退出系统供应商信息维护仓库设置货品入库货品出库货品盘点出库查询入库查询库存查询出库报表库存报表操作员管理密码修改操作员权限设置数据备份数据恢复日志清理数据清理查看日志第二章 系统设计1. 系统模块设计系统主要由:初期设置、货品管理、查询统计、数据报表、系统维护五大模块,他们的主要功能即实现如下:初期设置:数据库原始数据的录入,试运行,管理员权限设定等基本功能设置。货品管理:包括商品的入库、出库、商品产地、名称、价格等“记录”工作,并将管理员所作操作全部正确的存入数据库。流程图如下:仓管员货品卡片日常卡片处理数据库汇总处理结果 临时数据记录 数据存储图3-6 货品管理流程图数据报表:出库货品报表、入库数据报表系统维护:操作员管理、密码修改 、操作员权限设置、数据备份、数据恢复、日志记录、日志查看、日志记录。2. 数据库设计 数据库概念结构设计(1) 分ER图设计本设计根据上面的设计规划出的实体有货品实体、仓库实体、职工实体、部门实体、供应商实体。各个实体的E-R图及其关系描述如下:货品货品号名称型号状态图3-1 货品实体E-R图使用年限仓库仓库号面积租用年限图3-2 仓库实体E-R图职工编号姓名性别职称电话薪水图3-3 职工实体E-R图部门部门号名称经理图3-4 部门E-R图供应商货品仓库职工管理入库存放出库采购属于领导编号名称地址邮编电话联系人价格时间仓库号货品号名称型号仓库号面积编号姓名性别职称电话薪水部门部门号名称1111111nn1时间时间1111图3-5 总体E-R图状态(2) 数据库逻辑设计将上面的ER图转化为关系模型,关系的主码用下横线标出,外码用删除线标出:实体:货品(货品号,名称,型号,仓库号,状态)仓库(仓库号,面积,管理员)职工(编号,姓名,性别,职称,电话,薪水,部门号)部门(部门号,名称,部门经理)供应商(编号,名称,联系人,电话,地址,邮编)联系:共3个联系采购(货品号,名称,型号,仓库号,时间,价格,供应商)出库(货品号,部门号,时间)入库(货品号,部门号,时间)经验证,以上所有实体与联系表均符合BC范式。 ( 3) 数据库物理设计在上面的实体以及实体之间的关系的基础上,形成数据库中的表格以及各个表格之间的关系。仓库管理系统数据库中的各个表格的设计结果如下面的几个表格所示。每个表格表示在数据库中的一个表。 货品表:列名数据类型可否为空货品号(主键)字符型(20)不能为空名称字符型(20)可为空型号字符型(20)可为空仓库号(外码)字符型(20)不能为空状态字符型(10)不能为空 仓库表:列名数据类型可否为空仓库号(主键)字符型(20)不能为空面积数值型(20)可为空管理员(外码)字符型(20)可为空 职工表:列名数据类型可否为空编号(主键)字符型(20)不能为空姓名字符型(20)可为空性别字符型(2)可为空职称字符型(20)可为空电话字符型(30)可为空薪水数值型(20)可为空部门(外码)字符型(20)可为空 部门表:列名数据类型可否为空部门号(主键)字符型(20)不能为空名称字符型(20)可为空部门经理(外码)字符型(20)可为空 供应商表:列名数据类型可否为空编号(主键)字符型(20)不能为空名称字符型(20)不能为空联系人字符型(20)可为空电话字符型(30)可为空地址字符型(50)可为空邮编字符型(20)可为空 货品采购表:列名数据类型可否为空货品号(主键)字符型(20)不能为空名称字符型(20)可为空型号字符型(20)可为空仓库号(外码)数值型(20)不能为空时间字符型(10)可为空价格数值型(20)不能为空供应商(外码)字符型(20)不能为空 出库表:列名数据类型可否为空部门号(主键)(外码)字符型(20)不能为空货品号(主键)(外码)字符型(20)不能为空时间字符型(10)可为空 入库表:列名数据类型可否为空部门号(主键)(外码)数值型(20)不能为空货品号(主键)(外码)数值型(20)不能为空时间字符型(10)可为空3. 界面设计: (1) 系统登录界面如下图所示即为系统的登录界面,用户名和密码框供使用者验明身份正常使用系统,整体上和登录、退出按钮合理分布,大方简洁。 图. 系统登录界面(2) 系统主界面如下图为系统的主界面,系统背景选取卡通库房,让人觉得贴近主题,系统的几个逻辑模块的调用,被设计成系统菜单一共调用,根据见名知义的原则,系统的按钮都代表他能实现的功能。使用简单可操作性强。(3) 查询与修改界面 如下图为查询界面,系统模块简洁,查询方便第三章 、系统实施 1.系统登录模块的实施 (1) 系统登录模块的实施:'* 用户登录按钮的事件代码 *Private Sub Command1_Click() rtn = SetWindowPos(Me.hwnd, -2, 0, 0, 0, 0, 3) '运用API函数SetWindowPos,来实现取消窗体置前的功能On Error Resume NextDim MPassword As StringIf Text2.Text = "mr" And Text1.Text = "mr" Then '判断是否使用的是超级口令登录 frm_main.StatusBar1.Panels.Item(2).Text = "当前操作员: mr" Name1 = Text2.Text Unload Me frm_main.ShowElse Adodc1.RecordSource = "select * from tb_enter where M_Name ='" & Text2.Text & "'" Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then MPassword = Adodc1.Recordset.Fields("M_Password") If Text1.Text = MPassword Then '判断数据的密码是否正确 frm_main.StatusBar1.Panels.Item(2).Text = "当前操作员: " + Adodc1.Recordset.Fields("M_Name") Name1 = Text2.Text frm_main.Show '添加登录日志 Open (App.Path & "系统日志.ini") For Input As #1 Do While Not EOF(1) Line Input #1, Intext TStr = TStr + Intext + Chr(13) + Chr(10) Loop Close #1 TStr = TStr + " " + Name1 + " " + Format(Now, "yyyy-mm-dd hh:mm:ss") + " " + "系统登录" + Chr(13) + Chr(10) Open (App.Path & "系统日志.ini") For Output As #1 Print #1, TStr Close #1 Unload Me Else MsgBox "密码不正确,请您确认后重新输入", , "库存管理系统" Text1.Text = "" Text1.SetFocus End If Else MsgBox "对不起 没有此用户的信息", , "库存管理系统" Text2.Text = "" Text1.Text = "" End If End IfEnd Sub (2) 主界面各个功能实现 Private Sub Form_Load() Me.AutoRedraw = False Image1.Visible = False Call WHScreen '利用代码连接数据库Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "db_kcgl.mdb;Persist Security Info=False"Adodc2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "db_kcgl.mdb;Persist Security Info=False" Call Tree_change '调用过程,用于显示TreeView控件中的数据信息 If TWidth > 800 Or THeigth > 600 Then RemoveMenu GetSystemMenu(frm_main.hwnd, 0), SC_MAXIMIZE, MF_REMOVE '最大化按钮不可用 Me.Left = (Screen.Width - Me.Width) / 2 Me.Top = (Screen.Height - Me.Height) / 2 Else Me.WindowState = 2 End If '向ListView控件中添加元素 End SubPrivate Sub Form_Paint()Me.PaintPicture Image1.Picture, 0, 0, ScaleWidth, Me.Height, 0, 0, Image1.Width, Image1.HeightEnd Sub'* 自定义一个过程,用于显示TreeView控件中的数据 *Public Sub Tree_change() Dim key, Text, BH, StrTemp As String Dim Nod As Node '定义一个节点变量 Adodc1.RecordSource = "select * from tb_zcd " Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst Do While Adodc1.Recordset.EOF = False '循环读取第1层节点中的数据信息 key = Trim(Adodc1.Recordset.Fields("主菜单名称") Text = Adodc1.Recordset.Fields("主菜单名称") StrTemp = Adodc1.Recordset.Fields("主菜单名称") Adodc2.RecordSource = "select * from tb_zcd_zcd where 主菜单名称='" + StrTemp + "' " Adodc2.Refresh If Adodc2.Recordset.RecordCount > 0 Then Adodc2.Recordset.MoveFirst Do While Adodc2.Recordset.EOF = False '循环读取第2层节点中的数据信息 key = Trim(Adodc2.Recordset.Fields("子菜单名称") Text = Adodc2.Recordset.Fields("子菜单名称") Adodc2.Recordset.MoveNext Loop Else End If Adodc1.Recordset.MoveNext Loop Else End IfEnd SubPrivate Sub Form_Unload(Cancel As Integer) On Error Resume Next '添加退出系统日志 Open (App.Path & "系统日志.ini") For Input As #1 '首先读取文件中的信息 Do While Not EOF(1) Line Input #1, Intext TStr = TStr + Intext + Chr(13) + Chr(10) '将读取的信息保存到变量中 Loop Close #1 '改变变量的值 TStr = TStr + " " + Name1 + " " + Format(Now, "yyyy-mm-dd hh:mm:ss") + " " + "退出系统" + Chr(13) + Chr(10) Open (App.Path & "系统日志.ini") For Output As #1 '将添加日志后的信息重新保存到文件当中 Print #1, TStr Close #1 EndEnd SubPrivate Sub GYSXXWH_Click() frm_gys.Show '显示供应商信息窗体 Me.Enabled = FalseEnd SubPrivate Sub HPCKGL_Click() frm_out.Show '显示货品出库信息窗体 StrNums = 0 '出库标识,用于标识调用库存检索窗体 Me.Enabled = FalseEnd SubPrivate Sub HPGH_Click() frm_hpin.Show '显示货品归还窗体 Me.Enabled = FalseEnd SubPrivate Sub HPGHCX_Click() frm_HpghQuery.Show '显示货品归还查询窗体 Me.Enabled = FalseEnd SubPrivate Sub HPJC_Click() StrNums = 2 '货品借出标识,用于标识调用库存检索窗体 frm_hpout.Show '显示货品借出窗体 Me.Enabled = FalseEnd SubPrivate Sub HPJCCX_Click() frm_HpjcQuery.Show '显示货品借出查询窗体 Me.Enabled = FalseEnd SubPrivate Sub HPPDGL_Click() frm_kcpd.Show '显示库存盘点信息窗体 StrNums = 1 '出库标识,用于标识调用库存检索窗体 Me.Enabled = FalseEnd Sub