课程大作业仓库管理子系统(共14页).doc
精选优质文档-倾情为你奉上课程大作业仓库管理子系统目 录一、 课题介绍2二、 系统分析和设计思想4 1 数据库设计52 程序结构总体设计9三、 脚本代码 10四、 小结38一、 课题介绍商品进销存管理系统仓库管理子系统,主要用来执行公司内商品的出库入库,进行库房盘点,并向公司领导汇报,接受公司领导的库房查询。库房的管理在整个公司是非常重要的,公司的所有产品都在库房里,如果库房管理不当,将给公司造成很大损失。所以本软件可帮助库房管理员很好的管理库房,可使库房管理信息化,有效提高库房的管理水平。库房管理子系统业务流程:入库管理:采购员采购商品后到仓库管理员处办理如库手续,仓库管理员根据采购单对商品进行检验,确认后会生成入库单,再允许商品入库。出库管理:销售业务员到仓库管理员处办理出库手续,仓库管理员根据订购单对仓库中的商品库存量等信息进行校对,确认后,生成出库单,再允许商品出库。分工组成结构树见下图:业务协作流程见下图: 该系统可供各公司使用,它主要是用来对公司的库房进行管理的系统,它主要有2部分组成,记录模块和查询模块。各部分的功能如下: 1. 管理模块 具体包括以下几个功能模块:入库管理:入库管理是仓库管理员根据采购单对商品进行检验,确认后会生成入库单,再允许商品入库。出库管理:出库管理是仓库管理员根据订购单对仓库中的商品库存量等信息进行校对,确认后,生成出库单,再允许商品出库。库房盘点:库房盘点是库房管理员将仓库中的所有商品分类,再对商品的数量等进行盘点,如有亏损记录下信息,并修改原库房盘点表。2. 查询模块 具体包括以下几个功能模块:查询库存:当库房管理员要了解仓库中商品的数量等有关信息时,可以通过查询库存检索出相关信息。查询入库单:通过时间及类型的分类,可以把近期入库的商品的信息检索出来。 查询出库单:通过时间段及类型的分类,可以把近期出库的商品的信息检索出来。 查询盘点记录:通过商品类别的分类,将各种商品的盘点情况显示出来。二、 系统分析和设计思想库房管理子系统是由两个模块组成:管理模块和查询模块。管理模块主要用来管理商品出库入库和库房盘点的工作。查询模块主要用来对库存、入库单、出库单、盘点记录进行查询。1 数据库设计:主要由7个表和2个视图组成。表名称代码入库单内容intoItems出库单内容OutItems入库单putStorage商品product出库单OutStorage盘点记录inventory入库单(Inwarehouse)说明:记录当前库存地点上商品的数量与金额,由系统根据库存活动自动计算并产生列命名列名称列描述类型与长度可否为空主键外键索引有效值inNum入库单编号不能重复,自动生成,不同类型的入库单规则如下:采购入库;CGRK年月日-3位流水号CHAR(9)否是9inDate入库时间自动等于系统当前时间DATETIME是inObject入库外部对象外部对象,供货商VARCHAR(8)是inTotal入库单总金额自动计算产品内容的金额的合计MONEYinChecker验收人仓库管理员作为验收人CHAR(6)inWareman入库单录入人当前系统用户是入库单明细(Initem)说明:记录针对一个具体库存地点的每一次入库的物资内容,必须依赖于入库单发生。列命名列名称列描述类型与长度可否为空主键外键索引有效值inNum入库单编号自动继承入库单的编号CHAR(9)否是IntmNum入库项目序号入库项目序号,1,2,3SMALLINT是commNum商品编号商品编号CHAR(8)是是IntmCost入库单价单价MONEYIntmQuantity入库数量数量FLOATPONum相关采购单号采购单号CHAR(9)是出库单(outwarehouse)说明:记录针对一个具体库存地点的每一次出库,必须拥有物资内容(库存出库)。列命名列名称列描述类型与长度可否为空主键外键索引有效值outNum出库单编号不能重复,自动生成,不同类型的出库单规则如下:销售出库;XSCK年月日-3位流水号CHAR(9)否是outDate出库时间自动等于系统当前时间DATETIME是outObject出库外部对象客户编号VARCHAR(8)outTotal出库总金额自动计算产品内容的金额的合计MONEYoutWareman出库单录入人仓库管理员,自动等于当前系统用户键值CHAR(6)出库单明细(outitem)说明:记录针对一个具体库存地点的每一次出库的物资内容,必须依赖于出库单发生。列命名列名称列描述类型与长度可否为空主键外键索引有效值outNum出库单编号自动继承出库单的编号CHAR(9)否是outmNum出库项目序号出库项目序号,1,2,3SMALLINT是commNum商品编号商品编号CHAR(8)是是outmQuantity出库数量出库数量,不能等于0FLOAToutPrice出库单价成本单价,自动继承所属物资的成本单价MONEYSONum相关销售单号采购单号CHAR(9)是盘点表(inventory)说明:对库内商品进行盘查核对列命名列名称列描述类型与长度可否为空主键外键索引有效值invDate盘点日期盘点日期DATETIME否commNum盘点商品盘点商品编号CHAR(8)invAccountQuantity帐面库存数量帐面库存数量FLOATinvRealQuantity实际库存数量实际库存数量FLOATinvCause盈亏原因盈亏原因VARCHAR(100)invChecker盘点人盘点人CHAR(6)2程序结构总体设计 库房子系统的HIPO图,如下所示: 三、脚本代码1应用程序对象、主窗口与主菜单的设计应用程序对象的脚本代码如下:(1) 应用程序全局变量:u_comused g_com / 定义u_comused类型的对象 (2) 应用程序open事件脚本:environment lenv_env / holds environment informationstring ls_startupfile, sname, scode, corp, sdir, slog / holds name of start-up fileInt li_app / Get the environment informationif ( GetEnvironment(lenv_env) <> 1 ) then MessageBox( "Application: Open", & "Unable to get environment information.nHalting ." ) haltend ifif lenv_env.ScreenHeight<>600 or lenv_env.ScreenWidth<>800 thenmessagebox("提示信息","请将分辨率设置为800*600")end if/ 创建用户对象实例g_com = CREATE u_comused/ 得到路径和单位名称sname = ".business.ini"sdir = ProfileString(sname, "application", "exedir", "")g_com.uf_setDir(sdir)corp = ProfileString (sname,"application","单位名称","")g_com.uf_setCorp(corp)Open (w_login)(3) 主窗口W_main界面(4) 主菜单m_customer 本子系统有一名为m_warehouse的主菜单。下面介绍其中的各个子菜单及它们的clicked()事件入库管理中商品入库:open(w_putStorage)/ 调商品入库窗口出库管理中商品出库:open(w_outStorage)/ 调商品出库窗口库房盘点中盘点库房:open(w_inventory)/调库存盘点窗口统计查询中查询库存:open(w_seekstock)/调查询库存窗口统计查询中查询入库单:open(w_seekputstorage)/调查询入库单窗口统计查询中查询出库单:open(w_seekoutstorage)/调查询出库单窗口统计查询中查询盘点记录:open(w_seekinventory)/调查询盘点记录窗口2各子窗口设计(1) 库存盘点窗口 w_inventory功能:此时库房管理员可以在分类检索栏的下拉列表框里选择所要盘点的一类商品,例如选择“主板”,所有关于主板的商品信息将在最上方的数据窗口对象里显示出。然后再对一种商品进行盘点,经过盘点后如果发现有质量或丢失等问题,可以输入盘点信息,录入盈亏原因及被淘汰后所剩下的实际库存量。再按登记按钮,此时所盘点后的商品将在左下方的数据窗口对象里显示并记录!然后依依如上检索商品!窗口事件:open()事件 库存盘点初始化DataWindowChilddwc_classify / 说明一个DataWindowChild类型的变量/ 初始化控件和数据窗口控件dw_1.insertrow(0) / 在数据窗口控件插入一空行dw_1.GetChild('classifyid', dwc_classify) / 得到名称为classifyid(列)的子数据窗口对象的引用,并存放在dw_classify中dwc_classify.SetTransObject(SQLCA) / dw_classify使用系统缺省的事务对象SQLCAdwc_classify.Retrieve() / 从数据库中检索数据dw_1.SetFocus()/ 设置库存数据窗口dw_product.SetTransObject(SQLCA)dw_product.SetRowFocusIndicator(Hand!, 0, 0)/ 设置盘点数据窗口dw_inventory.SetTransObject(SQLCA)各控件的介绍:本窗口有3个数据窗口控件dw_product(对应是d_inventoryproduct数据窗口对象)、dw_inventory(对应是d_inventory数据窗口对象)和dw_1,2个单行编辑框sle_acc和sle_real,2个按钮cb_register和cb_quit数据窗口控件dw_product的事件rowfocuschanged()事件 检索当前记录对应的盘点信息longrsm, pidrsm = this.rowcount()if currentrow>0 and currentrow<=rsm then/ 检索以前的盘点记录pid = this.object.pdIDcurrentrowdw_inventory.retrieve(pid)/ 更新提示sle_acc.text = string(this.object.pdtotalcurrentrow)end if数据窗口控件dw_inventory事件rowfocuschanged()事件/ 改变当前行光带this.SelectRow(0, FALSE) this.SelectRow(currentrow, TRUE)数据窗口控件dw_1事件itemchanged()事件 按类检索商品记录 dw_product.Retrieve(data)登记按钮cb_register的事件clicked()事件 登记盘点盈亏longrow, rsm, rrwdoubledif, rl/ 检查输入是否合理rsm = dw_product.rowcount()row = dw_product.getrow()if row<=0 or row>rsm thenMessageBox("错误信息", "没有选中库存商品, 请检索库存商品!") returnend ifif isnull(sle_real.text) or len(trim(sle_real.text)=0 thenMessageBox("错误信息", "没有输入实际库存数, 请重新输入!") returnend ifrl = double(sle_real.text)if dw_product.object.pdtotalrow=rl thenMessageBox("错误信息", "实际库存数与帐面库存数相符, 没有必要记录盈亏信息!") returnend if/ 插入盘点记录rrw = dw_inventory.InsertRow(1)/ 在第一行插入dw_inventory.ScrollToRow(rrw)dw_inventory.SetRow(rrw)dw_inventory.object.pdidrrw = dw_product.object.pdidrow /商品编号dw_inventory.object.invaccountquantityrrw=dw_product.object.pdtotalrow/ 帐面库存数量dw_inventory.object.invrealquantityrrw = rl/ 实际库存数量dw_inventory.object.invdaterrw = datetime(today(), now()/ 盘点日期dw_inventory.object.invcheckerrrw = g_com.uf_getlogID() / 盘点人dw_inventory.object.invcauserrw = mle_cause.text/ 盈亏原因/ 修改库存信息dif = dw_inventory.object.invrealquantityrrw - dw_inventory.object.invaccountquantityrrwdw_product.object.pdtotalrow = dw_inventory.object.invrealquantityrrwdw_product.object.pdquantityrow = dw_product.object.pdquantityrow + dif/ 更新表信息if dw_inventory.Update(TRUE,FALSE) = 1 then if dw_product.Update(TRUE,FALSE) = 1 thendw_inventory.ResetUpdate()dw_product.ResetUpdate()COMMIT USING SQLCA ; sle_real.text = ""mle_cause.text = ""end ifend if退出按钮cd_quit的事件clicked()事件 关闭窗口close(parent)(2)商品出库窗口w_outstorage 功能:客户所订购的商品内容将在客户订购单里显示,其中包括订购单号及时间,订单客户及类型,还有销售人员,处理状态等,选择你所要准备出库的商品,订购单明细将会把你所选商品的生产厂家及商品的详细内容显示出来。然后拖拉放置到出库单内,此时处理状态由3变成4,表示状态由分配完毕变成出库完成将,便生成出库单,在出库单明细里也将详细内容显示出来。如按存盘键可再录入数据。窗口事件open()事件 产生出库单初始化/ 设置出库单数据窗口dw_outList.SetTransObject(SQLCA)dw_outList.SetRowFocusIndicator(Hand!, 0, 0)/ 设置出库单明细数据窗口dw_outItems.SetTransObject(SQLCA)/ 设置订单明细数据窗口dw_items.SetTransObject(SQLCA)/ 设置客户订单数据窗口dw_list.SetTransObject(SQLCA)dw_list.SetRowFocusIndicator(Hand!, 0, 0)dw_list.retrieve()/dw_list.setFilter("soStatus=4")定义函数:wf_filteritems(long a_row) returns(none) 过滤当前单据a_row行对应的出库明细 longoidoid = dw_outList.object.outIDa_rowdw_outItems.SetFilter("outid="+string(oid)dw_outItems.Filter() wf_moveitem(long a_row,long a_rwp)returns(none) 按订单内容生成出库明细 longrsm, row, rws/ 在出库明细表中追加一行记录row = dw_outItems.insertrow(0) dw_outItems.scrolltorow(row) dw_outItems.setrow(row)/ 将订单商品信息赋值给出库单明细表dw_outItems.object.outIDrow = dw_outList.object.outIDa_rwp / 出库单编号dw_outItems.object.outmNumrow = row / 出库项目序号dw_outItems.object.pdIDrow = dw_items.object.pdIDa_row/ 商品编号dw_outItems.object.pdNamerow = dw_items.object.pdNamea_row / 商品名称dw_outItems.object.pdModelrow = dw_items.object.pdModela_row / 规格型号dw_outItems.object.pdMadeinrow=dw_items.object.pdMadeina_row / 生产厂商dw_outItems.object.pdUnitrow = dw_items.object.pdUnita_row / 单位dw_outItems.object.outmQuantityrow=dw_items.object.siQuantitya_row / 出库数量wf_movelist(long a_row) returns long 生成出库单新记录,将客户订单中的有关内容移到出库单中long专心-专注-专业