服装仓储货品管理技巧
谈仓库货品管理技巧
从多年仓库管理实际操作经验中提取,以某品牌服装物流仓库管理为例。总结相关要点,共同学习分享:
一,影响仓储货品管理难度的因素有:货品种类(指在库货品的SKU数,如以型号或编号出现,有一个数字或字母不同,即为不同的货品,种类越多越难管理。)、货品形状(形状不规则的货品比形状规则的货品难管理,一个货品没有一个标准的长宽高即为不规则货品。)、货品重量(从搬运角度出发,越重的货品需要借助搬运机械,同时重货对堆高有影响。)、货品体积(过小易丢失,过大占空间,也影响搬运。)、货品温湿度存放要求(要求高的,管理难度越高,如服装中的挂装比普通服装难管理)、货品发货规律性(有规律的好管理,无规律的难管理)。
所以管理一个仓库,必须分析清楚存放货品的特性。
二,如何提高出入库效率和准确率:(以某品牌服装仓库管理为例。)1,学会分类,找到规律;
就服装而言,首先可分为:上装和下装。按季节分为:春、夏、秋、冬装。根据装箱规格,分为薄、厚;根据库存量,可分为:多、中、少。根据服装是否带配件,又可分为:有、无附件。按照种类又可分为:T恤、衬衫、牛仔、毛衣、裙子、西装、吊带背心等。按照价值,又可分为:高、中、低价。
分类之后,你才可以分析不同衣服的发货特点,从中找到规律,当然这离不开数据的统计。什么时间段什么衣服到货量较大,全年哪个种类的衣服发货量最大(发货量大的货品可以考虑专区管理),不同的衣服包装是否有不同的要求,库存量大的发货量就大,高价货品要重点管理。
说明一下:此品牌服装上衣和下衣大多是六个型号:XS(特小号)、S(小号)、M(中号)、L(大号)、XL(加大号)、XXL(加加大号),其中M号发货量最大,XXL号很少。衣服首先分品牌,再分年份,再分季节,再分大类,再分款,再分颜色,然后再分型号。
2,理清以往存在的问题和难点
由于此品牌服装种类多,达5000多种,以往同类仓库管理中经常容易出现库存只有一两件的衣服找不到,或者配错类似型号或颜色的衣服,同箱内出现不同的衣服等。
难点:看似相同,其实不同。库存小的衣服,一旦混到其它衣服中就找不到。高价衣服一旦缺少,损失严重。效率不高影响发货,找不到衣服客户会投诉,衣服少了,不好交待。所以要解决这些问题我就考虑到整零箱分开管理,分类分区管理(高价专区),定量定区管理,XL、XXL集中管理的方案。难点解决了,什么都好解决。
3,减少行走路径
这是仓库管理的原则,通过分类,可以把同类衣服集中管理,出单时同一张单据种类不要过多。新品入库后,急于上店,要货多,所以新品要放在最近的位置。
4,容积率和工作效率找到平衡点
仓库空间是有限的,在有限的空间存放更多种类的衣服,更大量的衣服,提高容积率,有利于节约仓储成本。但一味的提高容积率可能会影响发货效率,所以要找到一个平衡点。我在管理过程中,把货品分成几类存放,主要以同款同色货品的在库量划分,因为在库量越大,意味着发货量就大,反之库存量只有几件的时候,就很少发,或不再需要发了。
货量大的衣服,一天有好多个地区要配发,以往每配发一次就要有一次搬箱和开箱的动作,且由于要货量多,需拆掉许多的箱子。
举个例:一种衣服每箱装30件,以单个型号为例,当天有10个地区需要发,需要的数量通常不是30的倍数,数量不等,多少不一。如果是30的倍数,发货自然非常简便。地区定量零头广州南通3551515宁波1818苏州1212杭州4010上海4515厦门2525晋江1010合肥泰州8899零头合计:127
从表中可以看出,每个地区都需要零头,每取一次都要搬动零箱一次,从数量上来看,需要拆掉5个原箱。这个时候要提高效率就是要减少搬运次数,减少开箱的动作。于是思考出:B敞口箱式:适用于刚入库取货频率较多的货品,优点是配货便捷,缺点是如果是平面仓库会占用空间,如果有货架,至于货架底层即不浪费空间,也不影响取货,如下图:
从上图看出,箱子的口是敞开的,而且型号从小到大排序。把货品倒入这些箱子,以后配货时就不再需要搬箱和开箱的动作,自然提高了配货速度。C二垛式(是没有货架的情况下就地堆码)或(货架式):6种型号二垛堆码,适用于发货频率适中的货品,较节约空间,配货也较方便,这适合货品大量发货之后,库存量不多,以后很少发。在没有货架的时候码在地上,空间要比敞口箱节约,但每次需要搬运和开箱动作。当然有货架后,可以一层一个型号,最好是从小到大按序放置,这样方便取货,且不易出错;
D集中堆码式:所有型号堆成一垛,适用于货品量较少,只有少数城市配发,优点是节约空间(这是在没有货架的情况下使用,如下图):
单款拼箱式:当单个颜色所有型号总量低于60件(季节不同参数不同)时,此时货品很少发货或不发货,几个型号拼到一箱中,每种货品可以节约3-4箱的空间;
多款拼箱建立箱号:每种货品总量低于10件,此时可将多款货品拼到1箱中,大大的节约了空间,为了找货方便,可在箱上建行编号,同时也可在箱外贴上明细,当然在系统或电子帐上要详细记录。
(由于一箱内装几种衣服,为了便于区分,做出了四格箱,即一个箱子里面有4个格子,一个格子里面放一种衣服,这样衣服就方便区分,也不容易扯到一起。)
5,力求最短的找货时间和取货时间
影响出货效率的第一因素就是能否在第一时间找到要出的货。所以货品的库位必须准确详细清楚,具体到点。举个简单的例子,现在让你去给“某某人”送一封信,必须告诉你地址,具体的:省、市(县)、镇、街道。就这些信息你可以第一时间找到“某某人”所在的街道,但你不知门牌号,一看这条街道有1000个门牌号。好,如果告诉你门牌号是100号,好,找到了,一看,是幢40层的大厦。那你往哪层送?好,告诉你在10层,好,找到了,一看10层有二十个房间。我举这个例子,就是说,库位要详细,告诉你在哪一排不行,还要知道在哪一格,知道哪一格不行,还要知道是哪一层。找的时间最耽误时间。减少取货时间,就是想方法减少搬运和开箱的时间,比如敞口箱就是减少了搬运和开箱动作。利用货架,就像抽屉一样,也减少了搬运。同时,把经常发的货品放在货架下面,不常发的放在上面。
6,力求最少的搬运次数
除了上述的几点之外,要考虑有没有不必要的环节,尤其是需要搬运动作的环节。
7,最短的时间复核出差错
人不可能不出错,一旦出错就需要复核,以判断错在哪里,从而保证发货的准确率。而往往发现错误后复核是一个耽误发货时间的过程。所以要有一个复核流程,以在最短的时间确认错与对。实际工作中,我几次遇到一旦出错复核的时间比操作的时间还多。所以,有必要思考如何在最短的时间复核完成。
举个例子,某张单据共要货200件,配货员配完后,对货员(核对装箱的人员)装到最后第6箱时发现少1件编号是123456789的衣服,这种衣服共要10件,现在对下来只有9件,这个时候如何复核是配货员配错了,还是对货员对错了,是不是少1件呢?首先,要判断123456789的这种衣服装在了哪一箱或哪几箱中?然后再把涉及的箱子开箱清点,清点的时候先确认该箱的总件数是否有差异,然后再核对123456789这种衣服的件数是否相符,最终确认是不是错了。
这里要注意:1,如何知道123456789这种衣服装在了哪一箱?2,如果每箱都有,意味着每箱都要复核,工作量就大。所以你就会要求对货员同种衣服尽量装在一箱,以减少复核工作。3,要根据配货记录和对货记录分析是不是有错的可能:比如123456789这种衣服需要10件,从配货记录上看,10件是一次取完,还是两次取完。比如说要10件,结果零箱里只有9件,配货员会在单据上注明-1,结果配货员忘记补了,这就很显然是少配了一件。
8,能用电脑算的,不用人算
要熟练运用EXCEL,因为EXCEL可以通过数据透视,各种函数帮你进行统计和计算,在最短的时间里得到你想要的数据,极大的提供了工作效率。
9,能打印的不手填
许多单据,尽量统一标准格式,打印比手填清晰规范。
10,最短的盘点时间
同一货品尽量集中,同一货品保持唯一的零箱,比如说某一货品库存215件,装箱规格30件一箱,理论就是30×7+5=215,7个整箱,1个零箱。结果点出来10箱,因为零箱有几个,这就增加了盘点的时间。所以在库货品尽量整、零箱分开管理,整箱区不允许存在零箱,零箱区一个型号的零箱保持唯一。
11,最易区别的标识
外箱上的颜色、型号以及编号要便于区分,比如说123456789与122457689,如果书写成:123.456.789与122.457.689,让人一看就不一样。
12,学会编号
对库位要合理编号,这关系到系统打印单据时的排序顺序,尽量减少配货员的迂回作业。同时编号合理便于统计。编号要便于区别,从发音和字形上也要考虑好。在年中和年末盘点时,对在库货品需要全盘,而这个时候每一箱货都需要一个号码,编号是否合理,不仅影响贴号时间、盘点时间、以及复核时间,还影响到盘点后接下来整理与发货的时间。
13,定期与定时整理
货品是流动性的,总是从多到少,直至没有的过程。新品入库后置于敞口箱,当发到一定剩余量时就需要移到货架上去,再少就需要进行拼箱以节约空间了,这通常是一周一次,文员需要把数据统计出来,看哪些货需要移了,哪些货需要拼箱了,要有足够的敞口箱库位留给新入库的货品。
为检查文员录入工作的准确性,也要定时核对库位的准确性,以免在需要货品的时候找不到需要的货。
14,能平时做的不到战时做
大家都逛过超市,如果你要购买的东西在陈列的地方没有了,服务员还要到仓库去拿,这就可能耽误你的时间,一件商品,如果畅销,陈列的地方就要有足够多的量。所以说我们的准备工作要做充分,要事先检查零箱区是否缺型号,敞口箱里是不是需要补些衣服过来,以免“断粮”,把一些工作提前做掉。每天发货时封箱的工作量也很大,在没有单据时我们可以先把箱子准备好,封好,用的时候直接用就可以了。
15,利用颜色管理
5S现场管理中,讲颜色管理。库房也是一样,可以通过不同颜色的标识区分不同的区域、不同品牌的货品、不同性质的货品、不同种类的货品、不同型号的货品,以达到方便区分的作用。
16,动态盘点
仓库管理,讲效率更讲准确率。少货是仓库管理最忌讳的事。动态盘点有利于在第一时间发现问题,解决问题,消灭事故的萌芽。
对有些仓库而言,当天入库的货品和当天有发货记录的货品,在库量都需要进行一次盘点,以确保库存的准确性。而服装每天发货品种有几百个SKU,这样盘点工作量就非常大,那就对一些高价值的货品,或当天有过差异的货品(即配货量与对货量不致的货品)进行盘点。动态盘点有几点好处:一是对入库的货品确定库位是否正确,比如说一款货品,入库记录在A0101位置,结果文员录入时录成了A0401位置,如果当天盘点就能发现是文员的错误,以免在以后配这款货的时候配货员在A0401这个位置找个半天也找不到。二是对有差异货品进行确认,某种衣服当日期初108件,今天发了12个地区,共发走78件,那么库里面还有30件,如果盘点发现不是30,那么这就时候就要去分析哪个地区多发了还是少发了,第一时间查出原因解决掉。如果是多发,那么库房就少货,如果少发,那么客户就会投诉。当天的问题不发现不解决,过后很难找到原因,也就很难解决。
17,故意事先设错法提高工作质量
员工工作长时间不出错是容易麻痹的,且有些对货员明明发现配货员配错衣服不记录不复核,这样就有可能在真正出现了错误的时候没有发现,导致错发衣服。为了检查及提醒工作人员的责任心,管理者不仅要对现场操作人员经常性的检查,比如说对货员用盘点机扫描时要一边扫描一边数数,检查人员可以突然打断,在对货员不看盘点机的情况下,让他报出多少件,如果报不出,或是不对,说明没有按要求操作。故意事先设错,就是事先设置一个错误的问题,比如说多放一件衣服,或拿走一件衣服,看对货员能不能发现,以及有没有按要求记录、复核。因为如果不记录,就没有复核,同时当天也不会有动态盘点,种种的细节不注意就会导致问题的发生。记录非常重要,因为这些都是凭证。当你发现有些对货员该记录没有记录时就要批评指出,并强调不记录被发现有所惩罚时,定会认真执行。时刻注意培养员工好的习惯。
18,坚持以人为本库房里每个岗位,配货员、对货员以及收货员在入库清点货品时,都要考虑节省每一个弯腰、开箱和搬运动作,能一次完成的动作,尽量不重复完成,能同时完成的动作,不分开完成。任何好的方法都是许多次试验之后得出来的。有时候我也想像出许多看似好的方法,结果实操时并不那么理想,所以任何时候都要与实际操作相结合,减少操作人员等的时间,想的时间,算的时间,以及不必要的复核时间。
扩展阅读:仓库货品管理说明书
目录
摘要......................................................................................................................1前言......................................................................................................................2正文......................................................................................................................31.2.3.4.5.6.
采用类C语言定义相关的数据类型..........................................................3各模块的伪码算法......................................................................................3函数的调用关系图......................................................................................8调试分析......................................................................................................9测试结果....................................................................................................10源程序(带注释)...................................................................................113
总结....................................................................................................................19参考文献................................................................................................................21致谢....................................................................................................................22附件Ⅰ部分源程序代码......................................................................................23
摘要
库存管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起一个数据一致性和完整性强、数据安全性好的库;而对于后者则要求应用程序具有功能完备、易使用等特点。
该程序实现库存货品信息的输入、插入、删除、查找等功能,并能建立和更新的库存信息保存于文件供输出或打印。对于查找、删除等功能要求能按货品名、货品号分别进行。每个货品的相关信息包括:货品号、货品名、货品库存量、进货日期、货品生产厂家及供应商等。
关键词:库存管理;面向对象;数据库
前言
随着我国市场经济的蓬勃发展和人们对物质水平需求的增加,各行各业都处于一个飞速发展的时期,行业的快速发展必然导致各企业之间的竞争更加激烈,为了使自己的企业在竞争中能够站稳脚跟,不被激烈的竞争环境所压倒,必然要求企业加强对自身的管理,提高企业的经营效率。
本文正文分为六部分,第一部分列举了采用类c语言定义相关的数据类型,第二部分介绍各模块的伪码算法,第三部分绘出了函数的调用关系图,第四部分简述算法的调试分析,第五部分展示了系统的部分测试结果,第六部分附加了完整的源代码(带注释)
本系统由于个人能力有限,设计过程中一定有很多不足之处,以求日后完善。
正文
1.采用类c语言定义相关的数据类型
structBrand{};
structTotal//该结构只在统计商品总量时使用{};
inti;//商品编号
structToal*next;intBrand_number;charBrand_name[20];charProvide_name[20];intBrand_code;charProductor_name[20];structBrand*next;
2.模各块的伪码算法
1.货品信息的输入
#if!defined(AFX_INDLG_H__45EE16C9_7E05_4051_847B_E7EA39D86403__INCLUDED_)
#define
AFX_INDLG_H__45EE16C9_7E05_4051_847B_E7EA39D86403__INCLUDED_
#if_MSC_VER>1000#pragmaonce
#endif//_MSC_VER>1000
//InDlg.h:headerfile//
///////////////////////////////////////////////////////////////////////////////CInDlgdialog
classCInDlg:publicCDialog{
//Constructionpublic:
CInDlg(CWnd*pParent=NULL);//standardconstructor
//DialogData//{{AFX_DATA(CInDlg)
enum{IDD=IDD_DIALOG_IN};CComboBoxm_cbProvider;CComboBox
m_cbGoods;
CTimem_Date;CTimem_Time;CStringm_strNum;CStringm_strPrice;
//}}AFX_DATA
//Overrides//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CInDlg)protected:
virtualvoidDoDataExchange(CDataExchange*pDX);support
//}}AFX_VIRTUAL
//Implementationprotected://Generatedmessagemapfunctions
//{{AFX_MSG(CInDlg)
4//DDX/DDV
virtualBOOLOnInitDialog();afx_msgvoidOnButtonOk();afx_msgvoidOnButtonCancel();//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:};
//{{AFX_INSERT_LOCATION}}
//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.
#endif
//!defined(AFX_INDLG_H__45EE16C9_7E05_4051_847B_E7EA39D86403__INCLUDED_)
2.货品入库操作(插入操作)voidCInDlg::AddGoods(intiNum){
intiCurrentNum=0;_variant_tHolder,strQuery;
voidAddIn(CStringstrGcode,CStringstrPcode);CStringm_strProviderName;CStringm_strGoodsName;voidAddGoods(intiNum);
voidGetProviderCode(CStringstrName,CString&strCode);voidGetGoodsCode(CStringstrName,CString&strCode);
strQuery="select*fromgoodswhereG_name=""+m_strGoodsName+""";
theApp.ADOExecute(theApp.m_pRs,strQuery);theApp.m_pRs->MoveFirst();
Holder=theApp.m_pRs->GetCollect("Current_number");if(Holder.vt!=VT_NULL)
iCurrentNum=Holder.iVal;
iCurrentNum+=iNum;CStringstrSql;
strSql.Format("UPDATE
goods
SET
Current_number=%d
WHERE
G_name="%s"",iCurrentNum,m_strGoodsName);notificationhandlercodehere
}3.货品的出库操作(删除操作)voidCOutDlg::DelGoods(intiNum){
intiCurrentNum=0;_variant_tHolder,strQuery;
_variant_tvtQuery(strSql);
//TODO:Addyourcontrol
if(theApp.ADOExecute(theApp.m_pRs,vtQuery)){}
AfxMessageBox("入库成功");theApp.m_log.AddLog("商品入库");
strQuery="select*fromgoodswhereG_name=""+m_strGoodsName+""";
strSql.Format("UPDATE
goods
SET
6theApp.ADOExecute(theApp.m_pRs,strQuery);
theApp.m_pRs->MoveFirst();
Holder=theApp.m_pRs->GetCollect("Current_number");if(Holder.vt!=VT_NULL)
iCurrentNum=Holder.iVal;
iCurrentNum-=iNum;
CStringstrSql;
Current_number=%dWHERE
G_name="%s"",iCurrentNum,m_strGoodsName);notificationhandlercodehere}
4.货品查找操作
voidCViewDlg::ViewGoods(){
m_listDisp.DeleteAllItems();m_listDisp.SetRedraw(FALSE);
_variant_tHolder,strQuery;_variant_tvtQuery(strSql);
if(theApp.ADOExecute(theApp.m_pRs,vtQuery)){}
AfxMessageBox("出库成功");theApp.m_log.AddLog("商品出库");
//TODO:Addyourcontrol
strQuery="select*fromgoods";
theApp.ADOExecute(theApp.m_pRs,strQuery);
intiCount=theApp.m_pRs->GetRecordCount();
7if(0==iCount)
return;
theApp.m_pRs->MoveFirst();
inti=0;
while(!theApp.m_pRs->adoEOF){
Holder=theApp.m_pRs->GetCollect("G_code");if(Holder.vt!=VT_NULL)
m_listDisp.InsertItem(i,(char*)(_bstr_t)Holder);}
m_listDisp.SetRedraw(TRUE);
}m_strNum.Format("%d",iCount);theApp.m_pRs->MoveNext();i++;
Holder=theApp.m_pRs->GetCollect("Min_number");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,4,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("Current_number");if(Holder.vt!=VT_NULL)
Holder=theApp.m_pRs->GetCollect("Max_number");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,3,(char*)(_bstr_t)Holder);m_listDisp.SetItemText(i,2,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("G_name");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,1,(char*)(_bstr_t)Holder);
3.函数的调用关系图
库存管理系统系统管理进货管理出货管理报表统计信息查询身份验证注册用户修改删除用户修改密码出库单填写获取采购员信息日月报表报表入库单填写填写货品信息修改最低库存货品查询库存查询报表查询
4.调试分析
a,调试中遇到的问题及对问题的解决方法
调试中出现无法编译的情况,经检原因为查代码写错,以及各函数的调用之间产生矛盾等等问题,最后经老师和同学的帮助找出问题所在,加以改正,最终的是到一个较完整的程序。
b,算法的时间复杂度和空间复杂度时间复杂度为O(n)空间复杂度为S(n)
5.测试结果
1.登陆界面
2.主界面
3.商品入库
4.商品出库
5.入库信息
6.商品信息
6.源程序(带注释)
//AlertDlg.cpp:implementationfile
#include"stdafx.h"#include"GMS.h"#include"AlertDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;#endif
///////////////////////////////////////////////////////////////////////////////CAlertDlgdialog
CAlertDlg::CAlertDlg(CWnd*pParent/*=NULL*/){}
voidCAlertDlg::DoDataExchange(CDataExchange*pDX){
CDialog::DoDataExchange(pDX);
13:CDialog(CAlertDlg::IDD,pParent)
//{{AFX_DATA_INIT(CAlertDlg)
//NOTE:theClassWizardwilladdmemberinitializationhere
//}}AFX_DATA_INIT}
BEGIN_MESSAGE_MAP(CAlertDlg,CDialog)
//{{AFX_MSG_MAP(CAlertDlg)
ON_BN_CLICKED(IDC_BUTTON_OK,OnButtonOk)//}}AFX_MSG_MAP
//{{AFX_DATA_MAP(CAlertDlg)
DDX_Control(pDX,IDC_LIST_LOWDISP,m_listLowDisp);DDX_Control(pDX,IDC_LIST_HIGHDISP,m_listHighDisp);//}}AFX_DATA_MAP
END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////////CAlertDlgmessagehandlers
voidCAlertDlg::OnButtonOk(){}
BOOLCAlertDlg::OnInitDialog(){
CDialog::OnInitDialog();
m_listLowDisp.InsertColumn(0,"商品编号");m_listLowDisp.InsertColumn(1,"商品名称");m_listLowDisp.InsertColumn(2,"当前库存");
14OnOK();
//TODO:Addyourcontrolnotificationhandlercodehere
RECTrect;intwid;
RefreshData();
15m_listLowDisp.InsertColumn(3,"最大库容");m_listLowDisp.InsertColumn(4,"最小库容");
m_listLowDisp.GetWindowRect(&rect);wid=rect.right-rect.left;
m_listLowDisp.SetColumnWidth(0,wid/5);m_listLowDisp.SetColumnWidth(1,wid/5);m_listLowDisp.SetColumnWidth(2,wid/5);m_listLowDisp.SetColumnWidth(3,wid/5);m_listLowDisp.SetColumnWidth(4,wid/5);
m_listLowDisp.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_listHighDisp.InsertColumn(0,"商品编号");m_listHighDisp.InsertColumn(1,"商品名称");m_listHighDisp.InsertColumn(2,"当前库存");m_listHighDisp.InsertColumn(3,"最大库容");m_listHighDisp.InsertColumn(4,"最小库容");
m_listHighDisp.GetWindowRect(&rect);wid=rect.right-rect.left;
m_listHighDisp.SetColumnWidth(0,wid/5);m_listHighDisp.SetColumnWidth(1,wid/5);m_listHighDisp.SetColumnWidth(2,wid/5);m_listHighDisp.SetColumnWidth(3,wid/5);m_listHighDisp.SetColumnWidth(4,wid/5);
m_listHighDisp.SetExtendedStyle(LVS_EX_FULLROWSELECT);}
voidCAlertDlg::RefreshData(){
m_listLowDisp.DeleteAllItems();m_listLowDisp.SetRedraw(FALSE);
_variant_tHolder,strQuery;
//TODO:Addextrainitializationhere
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSE
strQuery="select*fromgoodswhereCurrent_number//高于
strQuery="select*fromgoodswhereCurrent_number>=Max_number";
theApp.ADOExecute(theApp.m_pRs,strQuery);m_listHighDisp.DeleteAllItems();m_listHighDisp.SetRedraw(FALSE);
m_listLowDisp.SetRedraw(TRUE);
}theApp.m_pRs->MoveNext();i++;
Holder=theApp.m_pRs->GetCollect("Min_number");if(Holder.vt!=VT_NULL)
m_listLowDisp.SetItemText(i,4,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("Current_number");if(Holder.vt!=VT_NULL)
Holder=theApp.m_pRs->GetCollect("Max_number");if(Holder.vt!=VT_NULL)
m_listLowDisp.SetItemText(i,3,(char*)(_bstr_t)Holder);m_listLowDisp.SetItemText(i,2,(char*)(_bstr_t)Holder);
if(Holder.vt!=VT_NULL)
m_listLowDisp.SetItemText(i,1,(char*)(_bstr_t)Holder);
iCount=theApp.m_pRs->GetRecordCount();
18if(0==iCount)
return;
theApp.m_pRs->MoveFirst();
i=0;
while(!theApp.m_pRs->adoEOF){
Holder=theApp.m_pRs->GetCollect("G_code");if(Holder.vt!=VT_NULL)
m_listHighDisp.InsertItem(i,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("G_name");if(Holder.vt!=VT_NULL)
m_listHighDisp.SetItemText(i,1,(char*)(_bstr_t)Holder);
}Holder=theApp.m_pRs->GetCollect("Current_number");if(Holder.vt!=VT_NULL)
Holder=theApp.m_pRs->GetCollect("Max_number");if(Holder.vt!=VT_NULL)
m_listHighDisp.SetItemText(i,3,(char*)(_bstr_t)Holder);m_listHighDisp.SetItemText(i,2,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("Min_number");if(Holder.vt!=VT_NULL)
m_listHighDisp.SetItemText(i,4,(char*)(_bstr_t)Holder);
theApp.m_pRs->MoveNext();i++;
m_listHighDisp.SetRedraw(TRUE);
总结
这学期已接近尾声,它对我所产生的影响却是巨大的。作为计算机科学与技术专业的学生,这段时间的学习过程让我们学到了很多知识,然而真正运用于实践的并不多,放假前的这次课程设计恰是对我们过去两年所学的一次总结,我们可以在老师的帮助下自己来尝试开发一个小型项目,把所学的单纯的理论知识变成为实际的操作经验,而不再是眼高手低。
此次库存管理系统开发让我学习到很多知识,现总结如下:
系统开发的过程中,我深刻体会到了以前上课老师经常提起的一个问题,那就是:一个系统开发的过程中编码不是最重要的,重要的是对系统进行分析以及建立恰当的系统模型。有了一个好的系统模型之后,我们再将其划分成几个模块,那样做起来就会容易得多。本系统中采用了生命周期法进行系统的开发,就体现了该模块化设计思想。
在该库存管理系统设计中,从系统的实用性出发,我能够在开发该系统时站在用户的角度看问题,本着用户操作界面友好、清晰、易学易用的原则进行设计。如开发过程中我尽可能地设想记录为空,输入为空,输入出错等边界条件,然后在这些边界上,设置出错检测,使系统能自动捕获出错点,给出提示,允许用户重新进行操作,使系统能够安全的运行下去,而不是退出系统。
文章的前面讲到了本系统数据库是使用SQLServer201*进行设置的,也讲到了它的优点,这里就不多说了,但是在本次设计中,我发现了VisualC#的一种应用编程接口ADO(ActiveXDataObjects)。它是一种面向对象的、与语言无关的应用编程接口,具有易于使用、高速度、低内存支出和占用磁盘较少,可以使用所有支持ODBC的数据库等优点;使用ADO可以实现动态数据库的链接,从而避免以往静态方式连接数据库的一些缺点。这些知识对我本次的系统开发有着很大的帮助。
开发期间,我学会了有目的的去学习一些将要用到的东西,仔细地考虑工作流程的规律和步骤,充分利用手中的开发工具,利用其所具备的功能,尽量使自己的开发在代码上实现少而精确、让用户能够尽量简单地进行操作。但是在检测过程中,还是出现了很多的不足之处,这些都是要在今后的工作中需要努力改进和完善的。
在这次毕业设计中,我遇到了很多困难,这主要是由于我开发软件的经验不足,工具的应用也不够熟练,虽然VisualC#.NET用的语言是C#,但是由于以前基础不够扎实,对我来说可以算是一个全新的尝试,整个开发过程并不是很顺利,却使我从中充分体会到学习的快乐,系统也在从理论到实践,再从实践到理论的反复中一步步得到完善。
虽然,这次系统开发由于个人水平及时间有限等原因,只能完成一些基本的功能,程序代码不够简练,好多设想也未能得到实现,这不能不说是个很大的遗憾。现有系统还存在着以下问题:第一点,不能实现界面动态转换功能。由于技术原因,我只能用Panel控件实现静态的界面转换;第二点,功能模块不够全面。作为库存管理系统,系统设计中还能加上备品备件管理和系统维护等功能模块,可是由于时间比较紧迫,该想法未能实施。由于我第一次开发一个完整的数据库管理系统,不足之处在所难免,敬请各位老师、领导批评指正,我会在以后的工作中加以完善和改进。
总之,这次的系统开发,实现了我自己动手完成一个系统开发的目标,也学习到很多东西,不只是实践经验,还有一些做事的道理:在工作时,要尽量把要遇到的问题考虑周全,提前做好准备,那样就不会在遇到问题时有措手不及的感觉;做事一定要不断地去尝试,然后尽自己最大的努力去完成它,人的发展潜力是巨大的,不要一开始就否定自己,低估自己,虽然不能说只要努力就会取得成功,但是如果不努力,就永远不会成功。
参考文献
1严蔚敏,吴伟民.《数据结构(C语言版)》.清华大学出版社.
2严蔚敏,吴伟民.《数据结构题集(C语言版)》.清华大学出版社.3《DATASTRUCTUREWITHC++》.WilliamFord,WilliamTopp.清华大学出版社(影印版).
4谭浩强.《c语言程序设计》.清华大学出版社.
5.数据结构与算法分析(Java版),APracticalIntroductiontoDataStructuresandAlgorithmAnalysisJavaEditionCliffordA.Shaffer,张铭,刘晓丹译电子工业出版社201*年1月
致谢
在本次课程设计中,我要特别感谢我的指导老师王旭阳,从她身上我学到了很多东西。王老师认真负责的工作态度,严谨的治学精神都使我受益匪浅。她无论在理论上还是在实践中,都给予我很大的帮助,帮助我解决了不少的难点,使得系统能够逐步完善,我也从中得到不少提高,对我以后的工作和学习都有着巨大的帮助,感谢她耐心的辅导并表示衷心的感谢!
此外,还要对那些在我系统开发过程中帮助过我的同学一并表示衷心的感谢!
附件Ⅰ部分源程序代码
//ViewDlg.cpp:implementationfile//
#include"stdafx.h"#include"GMS.h"#include"ViewDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;#endif
///////////////////////////////////////////////////////////////////////////////CViewDlgdialog
CViewDlg::CViewDlg(CWnd*pParent/*=NULL*/){}
voidCViewDlg::DoDataExchange(CDataExchange*pDX)
23:CDialog(CViewDlg::IDD,pParent)
//{{AFX_DATA_INIT(CViewDlg)m_strNum=_T("");//}}AFX_DATA_INIT{}
BEGIN_MESSAGE_MAP(CViewDlg,CDialog)
//{{AFX_MSG_MAP(CViewDlg)
ON_BN_CLICKED(IDC_BUTTON_OK,OnButtonOk)//}}AFX_MSG_MAP
CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CViewDlg)
DDX_Control(pDX,IDC_LIST_DISP,m_listDisp);DDX_Text(pDX,IDC_EDIT_NUM,m_strNum);//}}AFX_DATA_MAP
END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////////CViewDlgmessagehandlers
voidCViewDlg::Init(intiKind){}
voidCViewDlg::SetTitle(){
switch(m_iKind){case1:
SetWindowText(_T("商品信息"));break;
24this->m_iKind=iKind;}
voidCViewDlg::SetStyle(){
RECTrect;intwid;switch(m_iKind){case1:
m_listDisp.InsertColumn(0,"商品编号");m_listDisp.InsertColumn(1,"商品名称");m_listDisp.InsertColumn(2,"当前库存");m_listDisp.InsertColumn(3,"最大库容");m_listDisp.InsertColumn(4,"最小库容");
25case2:
SetWindowText(_T("商家信息"));break;
case3:
SetWindowText(_T("入库信息"));break;
case4:
SetWindowText(_T("出库信息"));break;
case5:}
SetWindowText(_T("操作日志"));break;
m_listDisp.GetWindowRect(&rect);wid=rect.right-rect.left;
m_listDisp.SetColumnWidth(0,wid/6);m_listDisp.SetColumnWidth(1,wid/6);m_listDisp.SetColumnWidth(2,wid/6);m_listDisp.SetColumnWidth(3,wid/6);m_listDisp.SetColumnWidth(4,wid/6);m_listDisp.SetColumnWidth(5,wid/6);
m_listDisp.SetExtendedStyle(LVS_EX_FULLROWSELECT);
break;
m_listDisp.GetWindowRect(&rect);wid=rect.right-rect.left;
m_listDisp.SetColumnWidth(0,wid/5);m_listDisp.SetColumnWidth(1,wid/5);m_listDisp.SetColumnWidth(2,wid/5);m_listDisp.SetColumnWidth(3,wid/5);m_listDisp.SetColumnWidth(4,wid/5);
m_listDisp.SetExtendedStyle(LVS_EX_FULLROWSELECT);break;case2:
m_listDisp.InsertColumn(0,"商家编号");m_listDisp.InsertColumn(1,"商家名称");m_listDisp.InsertColumn(2,"商家地址");m_listDisp.InsertColumn(3,"负责人");m_listDisp.InsertColumn(4,"电话");m_listDisp.InsertColumn(5,"Email");
case3:
m_listDisp.InsertColumn(0,"商品编号");
m_listDisp.GetWindowRect(&rect);wid=rect.right-rect.left;
m_listDisp.SetColumnWidth(0,wid/5);m_listDisp.SetColumnWidth(1,wid/5);m_listDisp.SetColumnWidth(2,wid/5);m_listDisp.SetColumnWidth(3,wid/5);m_listDisp.SetColumnWidth(4,wid/5);
27m_listDisp.InsertColumn(1,"商家编号");m_listDisp.InsertColumn(2,"入库数量");m_listDisp.InsertColumn(3,"购入价格");m_listDisp.InsertColumn(4,"购入日期");
m_listDisp.GetWindowRect(&rect);wid=rect.right-rect.left;
m_listDisp.SetColumnWidth(0,wid/5);m_listDisp.SetColumnWidth(1,wid/5);m_listDisp.SetColumnWidth(2,wid/5);m_listDisp.SetColumnWidth(3,wid/5);m_listDisp.SetColumnWidth(4,wid/5);
m_listDisp.SetExtendedStyle(LVS_EX_FULLROWSELECT);
break;
case4:
m_listDisp.InsertColumn(0,"商品编号");m_listDisp.InsertColumn(1,"出库数量");m_listDisp.InsertColumn(2,"库存管理员");m_listDisp.InsertColumn(3,"出库负责人");m_listDisp.InsertColumn(4,"出库日期");}
voidCViewDlg::ViewGoods(){
m_listDisp.DeleteAllItems();m_listDisp.SetRedraw(FALSE);
_variant_tHolder,strQuery;}
m_listDisp.SetExtendedStyle(LVS_EX_FULLROWSELECT);break;case5:
m_listDisp.InsertColumn(0,"操作员");m_listDisp.InsertColumn(1,"事件");m_listDisp.InsertColumn(2,"时间");m_listDisp.GetWindowRect(&rect);wid=rect.right-rect.left;
m_listDisp.SetColumnWidth(0,wid/3);m_listDisp.SetColumnWidth(1,wid/3);m_listDisp.SetColumnWidth(2,wid/3);
strQuery="select*fromgoods";
theApp.ADOExecute(theApp.m_pRs,strQuery);
intiCount=theApp.m_pRs->GetRecordCount();
if(0==iCount)
return;
29theApp.m_pRs->MoveFirst();
inti=0;
while(!theApp.m_pRs->adoEOF){
Holder=theApp.m_pRs->GetCollect("G_code");if(Holder.vt!=VT_NULL)
m_listDisp.InsertItem(i,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("G_name");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,1,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("Current_number");if(Holder.vt!=VT_NULL)
Holder=theApp.m_pRs->GetCollect("Max_number");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,3,(char*)(_bstr_t)Holder);m_listDisp.SetItemText(i,2,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("Min_number");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,4,(char*)(_bstr_t)Holder);
}theApp.m_pRs->MoveNext();i++;
m_strNum.Format("%d",iCount);}
voidCViewDlg::ViewProvider(){
m_listDisp.DeleteAllItems();m_listDisp.SetRedraw(FALSE);
_variant_tHolder,strQuery;m_listDisp.SetRedraw(TRUE);
strQuery="select*fromprovider";
theApp.ADOExecute(theApp.m_pRs,strQuery);
intiCount=theApp.m_pRs->GetRecordCount();
Holder=theApp.m_pRs->GetCollect("Provider_address");if(Holder.vt!=VT_NULL)
30if(0==iCount)
return;
theApp.m_pRs->MoveFirst();
inti=0;
while(!theApp.m_pRs->adoEOF){
Holder=theApp.m_pRs->GetCollect("Provider_code");if(Holder.vt!=VT_NULL)
m_listDisp.InsertItem(i,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("Provider_name");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,1,(char*)(_bstr_t)Holder);}
voidCViewDlg::ViewInlib(){
m_listDisp.DeleteAllItems();m_listDisp.SetRedraw(FALSE);
_variant_tHolder,strQuery;
31m_listDisp.SetItemText(i,2,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("Provider_person");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,3,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("Provider_telphone");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,4,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("Provider_email");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,5,(char*)(_bstr_t)Holder);
}theApp.m_pRs->MoveNext();i++;
m_strNum.Format("%d",iCount);
m_listDisp.SetRedraw(TRUE);
strQuery="select*frominlib";
theApp.ADOExecute(theApp.m_pRs,strQuery);
intiCount=theApp.m_pRs->GetRecordCount();
32if(0==iCount)
return;
theApp.m_pRs->MoveFirst();
inti=0;
while(!theApp.m_pRs->adoEOF){
Holder=theApp.m_pRs->GetCollect("Goods_code");if(Holder.vt!=VT_NULL)
m_listDisp.InsertItem(i,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("Provider_code");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,1,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("In_number");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,2,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("In_Price");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,3,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("In_Date");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,4,(char*)(_bstr_t)Holder);}
voidCViewDlg::ViewOutlib(){
m_listDisp.DeleteAllItems();m_listDisp.SetRedraw(FALSE);
_variant_tHolder,strQuery;m_listDisp.SetRedraw(TRUE);
}m_strNum.Format("%d",iCount);theApp.m_pRs->MoveNext();i++;
strQuery="select*frominlib";
theApp.ADOExecute(theApp.m_pRs,strQuery);
intiCount=theApp.m_pRs->GetRecordCount();
Holder=theApp.m_pRs->GetCollect("Out_number");
33if(0==iCount)
return;
theApp.m_pRs->MoveFirst();
inti=0;
while(!theApp.m_pRs->adoEOF){
Holder=theApp.m_pRs->GetCollect("Goods_code");if(Holder.vt!=VT_NULL)
m_listDisp.InsertItem(i,(char*)(_bstr_t)Holder);}
BOOLCViewDlg::OnInitDialog(){
CDialog::OnInitDialog();SetTitle();SetStyle();switch(m_iKind){case1:
ViewGoods();break;
34}if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,1,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("Out_person");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,2,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("taker");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,3,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("Out_date");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,4,(char*)(_bstr_t)Holder);
theApp.m_pRs->MoveNext();i++;
m_strNum.Format("%d",iCount);
m_listDisp.SetRedraw(TRUE);}
voidCViewDlg::OnButtonOk(){
OnOK();
//TODO:Addyourcontrolnotificationhandlercodehere}case2:
ViewProvider();break;
case3:
ViewInlib();break;
case4:
ViewOutlib();break;
case5:}
UpdateData(false);
//TODO:Addextrainitializationhere
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSE
ViewLog();break;
voidCViewDlg::ViewLog(){
m_listDisp.DeleteAllItems();m_listDisp.SetRedraw(FALSE);
_variant_tHolder,strQuery;
strQuery="select*fromlog";
theApp.ADOExecute(theApp.m_pRs,strQuery);
intiCount=theApp.m_pRs->GetRecordCount();}
m_listDisp.SetRedraw(TRUE);
if(0==iCount)
return;
theApp.m_pRs->MoveFirst();inti=0;
while(!theApp.m_pRs->adoEOF){}
m_strNum.Format("%d",iCount);
Holder=theApp.m_pRs->GetCollect("Admin_name");if(Holder.vt!=VT_NULL)
m_listDisp.InsertItem(i,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("do_what");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,1,(char*)(_bstr_t)Holder);
Holder=theApp.m_pRs->GetCollect("do_date");if(Holder.vt!=VT_NULL)
m_listDisp.SetItemText(i,2,(char*)(_bstr_t)Holder);
theApp.m_pRs->MoveNext();i++;
友情提示:本文中关于《服装仓储货品管理技巧》给出的范例仅供您参考拓展思维使用,服装仓储货品管理技巧:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。