仓库管理系统docx.docx
- 文档编号:9449345
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:64
- 大小:662.76KB
仓库管理系统docx.docx
《仓库管理系统docx.docx》由会员分享,可在线阅读,更多相关《仓库管理系统docx.docx(64页珍藏版)》请在冰点文库上搜索。
仓库管理系统docx
课程设计报告
指导教师:
孙暘
姓名:
黄志浩
学院:
计算机科学与工程学院
班级:
150407
需求分析
仓库管理系统应完成以下功能:
(1)基础数据设定
主要包括仓库类型定义、仓库定义、仓库产品低储、高储、存储限量及存储期限、货位定义、货位存储能力、定义成本统计参数(包括总体系数、每种产品成本系数)、预警机制时间系数定义。
(2)仓库入库
包括原材料入库和成品入库
1.原材料入库:
一种是本地的采购:
首先由采购处编写请检单,经过质检部门质检合格后(质检部门记录质检结果,合格数、不合格数),仓库保管员将质检合格的原料入库(记录采购部门定义的当时单价)。
系统自动产生入库单号(相当于入库批次号形式为年月日)。
此时为仓库的假入库状态。
办理入库后,由仓库管理员对入库单明细确认是否真入库。
入库需要记录项目有:
仓库、仓库货位、库管员、图号、型号、颜色、数量。
若质检不合格,则对不合格原料进行挑选,把合格原料入库。
另一种是外地的采购:
首先由库管员办理入库(放入待检区)。
向采购部门和质检部门发消息。
经过质检部门质检合格后方可入库(入库的操作同上)。
不合格原料由仓库管理员办理手续进入相应的仓库,入库时应分货位存储(相应的仓库:
如待检区的不合格区),系统自动产生入库单号(相当于批次号)。
2.成品入库:
由生产车间经过质检部门质检合格后,由生产车间填写成品入库单提交到仓库管理员,不合格的入到待处理库房。
(3)仓库出库
包括原材料出库、销售出库
1.原材料出库:
由生产车间填写领料单(标注班组),仓库管理员办理出库确认约束条件:
按照批次号先进先出的原则。
车间填写领料单时可以是成品。
提交仓库时,由仓库通过质部门提供的物资配料清单分解需要的零部件数量,根据现库存办理出库确认。
2.销售出库:
销售出库由生产部门填写的销售出库单,办理出库。
销售退库经质检部门合格后的成品入到成品库。
(4)仓库退库
包括原材料退库、成品退库、销售退库
1.原材料退库:
生产车间将零部件或成品退回仓库。
首先有生产车间填写退库单(相当于出库为负),由质检部门确认后方可由仓库确认。
生产车间退库时,需要知道哪个批次的货物。
2.成品退库:
成品退库,首先由质检部门同意将产品从生产车间退回库中。
由车间填写退库单。
经过仓库管理员确定后办理退库。
3.销售退库:
由厂商将产品退回仓库,首先由质检部门质检,质检合格由仓
库管理员办理退库单。
不合格的存放待处理成品区中。
(5)仓库库存查询:
根据仓库一段时间内发生的入、出、退汇总数量、金额。
(6)统计分析:
查询仓库产品数量分布情况。
(7)自动提醒预警信息:
根据产品入出退库时间和系统参数定义,统计仓库目前的超量及库存已低于低储,存储期限超出查询。
(8)仓库台帐:
及时反映仓库产品的入、出、退明细帐。
(9)仓库存储成本统计:
根据产品成本系数和存储时间计算存储成本
公式:
产品在仓库存储时间差*数量*单价*相应的总体系数*该产品自定义系数计算仓库存储成本
概要设计
源程序有7个文件:
main.cpp程序入口,显示主菜单并跳转到工具类相应成员函数部分。
tools.cpptools.hpp工具类,程序由main.cpp跳转到工具类,有工具类具体跳转到相应部分。
product.cppproduct.hpp产品类,主要负责保存产品信息,即对象模型,同时还负责将对象保存的数据写入文件,或将文件中的数据经过链表类保存到对象中。
该文件中还有一个日志类WareLogs,继承自product,负责每次入、出、退库时需要记录的信息,如日期、产品型号、数量,还负责将对象保存的数据写入另外的日志文件,或将日志文件中的数据读取到对象中。
同时日志类对象还有另外一个功能:
将基础数据设定的数据写入单独的文件中。
linkList.cpplinkList.hpp链表类,保存的是节点类对象,节点类对象的数据域为产品类对象。
链表类的主要功能是将某文件中所有数据读取为链表,或在链表对象中搜索出某产品并对该产品进行相应更改之后再次将链表对象的数据域写入文件。
用来保存数据的文件有6个:
conststringnoQuilityProdCFileName="noQuilityProdCFile.txt";//成品不合格文件名
conststringQuilityProdCFileName="QuilityProdCFile.txt";//成品合格文件名
conststringnoQuilityProdYFileName="noQuilityProdYFile.txt";//原材料不合格文件名
conststringQuilityProdYFileName="QuilityProdYFile.txt";//原材料合格文件名
conststringLogsToTheFile="logsFile.txt";//基础信息设定配置文件
conststringProductLogFileName="productLog.txt";//保存入出退日志信息
详细设计
产品类
数据成员部分:
货物型号/货物数量/货位号/单价/该产品的自定义成本系数/颜色/库管员/仓库名称/入出退库时间戳
成员方法:
intsetInWareList();//填写入库单,将数据保存在对象模型中
voidsetSaleWareList();//填写销售出库单,将数据保存在对象模型中
voidsetReceiveList();//填写领料单,将数据保存在对象模型中
voidsetOutWareList();//填写退库单,将数据保存在对象模型中
intinToFile(stringfileName);//根据入库单确认入库
voidsetProdModel();//填写产品型号供查询使用
intgetDayByChrono();//计算时间戳
时间戳的计算通过库函数来实现,需要包含头文件chrono和ratio,每入出退库是都需要调用该函数记录时间日期,供查询使用。
intproduct:
:
getDayByChrono(){
usingnamespacestd:
:
chrono;
typedefduration : ratio<60*60*24>>days_type; time_point : now()); returntoday.time_since_epoch().count(); } 链表类: 将链表的头节点放在链表类中,节点类对象中含有数据域和指向下一个节点的指针域。 链表类的成员方法负责将链表的节点存储的产品类对象数据写入文件或将文件中的数据提取为链表。 链表类的成员方法 //提取数据为链表 voidgetlinkListFromTheFile(stringfileName); //遍历链表找到节点 voidforInLinkListForInAndOut(product*prod,stringtype); //根据产品型号搜索出仓库名称/产品分布型号 voidforInLinkListForLocation(product*prod,stringtype); //根据基本数据设定信息查询高储低储以及超出存储期限的产品 voidforInLinkListForRemind(WareLogs*logs,stringtype); //根据产品对象的型号和该产品成本系数以及日志文件中的基本数据设定信息计算该产品的存储成本 voidforInLinkListForCost(product*prod,WareLogs*logs,stringtype); //将链表数据重新写入文件 voidwriteNodeToTheFile(stringfileName); 调试分析 遇到过的问题: 1.计算仓库存储成本和预警存储期限时,需要知道产品入出退库的时间,这里采用库函数实现,可以获取当前的时间戳,产品每次入出退库时都需要将这个时间戳保存。 用途如: 通过当前的时间戳减去产品入库的时间戳就是产品在仓库的保存时间。 2.至于文件数据提取及修改,是通过链表实现的。 对于链表的处理,C++和C是有些不同的,在C++里,可以把节点类和链表类分别声明,将头节点作为链表类对象的成员属性,而每个节点的数据域保存了产品类对象,指针域指向下一个节点。 3.入库退库功能之外的查询工作,需要产品入出退库时间、基础数据设定等信息,这些信息保存在产品对象中不合适,而且这样使得产品对象过于庞大,但是又和产品对象的数据有密切关系,所以这里采用继承的方式,日志类继承产品类,需要完成的功能是将基础数据设定的数据和产品每次入出退库的时间写入文件。 写入的时间需要和对应产品进行联系,所以需要获取对应产品的型号、数量、单价来计算总金额。 4.C++当自定义的头文件过多时,会有文件重复包含,即文件重复编译的情况出现。 这里采用宏的方式处理: #ifndefidentifier #defineidentifier #endif 5.入库时需要判断入库产品数量是否大于自定义的货位存储能力,同样出库时需要判断出库产品的数量是否大于仓库存储产品数量。 为此在入库或出库时通过链表类对象提取文件中保存的对应型号产品的数量与将要入库或出库的产品数量做比较,不符合就要终止入库或退库。 用户使用说明 1.第一次使用时需要到基础数据设定模块中设定数据,这些数据在以后入出退库时都会默认调用。 2.入库时填写的入库单中产品的成本系数不能大于基本数据设定中自定义的总体成本系数。 3.当天入库的产品暂时不计存储成本(该产品存储天数为0)。 4.牢记产品型号,仓库的查询功能除了“仓库库存分析查询”是通过时间段查询数据,其余都是通过产品型号来查询。 测试结果 1.基础数据设定测试 2.入库测试 错误处理 3.出库测试 错误处理 4.退库测试 5.仓库库存查询测试 6.统计分析测试 7.提醒预警信息测试 8.仓库台账测试 错误处理 9.产品存储成本查询 当天入库的产品由于存储天数为0,无法计算存储成本。 为了测试改功能,将文件中该产品的入库时间戳由16996修改为16990后(入库时间修改为前六天),测试结果如下 附录 // //main.cpp //仓库管理系统 // //Createdbyxiaokaon16/7/4. //Copyright©2016年黄志浩.Allrightsreserved. // #include"tools.hpp" #include usingnamespacestd; voidprintToScreen(){ cout< cout<<"---------------仓库管理系统---------------"< <<"--1-基础数据设定"< <<"--2-仓库入库"< <<"--3-仓库出库"< <<"--4-仓库退库"< <<"--5-仓库库存查询"< <<"--6-统计分析"< <<"--7-提醒预警信息"< <<"--8-仓库台帐"< <<"--9-产品存储成本查询"< <<"--0-退出系统"< cout< } intmain(intargc,constchar*argv[]){ printToScreen(); intmenu=0; while (1){ cin>>menu; tools*t=newtools(); switch(menu){ case1: //基本数据设定 t->baseSetting(LogsToTheFile); break; case2: //仓库入库 t->addProduct(); break; case3: //仓库出库 t->outProduct(); break; case4: //仓库退库 t->againProduct(); break; case5: //仓库库存查询 t->wareStockAsk(); break; case6: //统计分析 t->allAnalyse(); break; case7: //提醒预警 t->remindWarning(); break; case8: //仓库台账 t->wareAccount(); break; case9: //仓库存储成本查询 t->productForCost(); break; case0: deletet; exit(0); break; default: cout<<"请正确输入菜单对应序号"< break; } deletet; cout<<"已返回主菜单"< printToScreen(); } return0; } // //tools.hpp //仓库管理系统 // //Createdbyxiaokaon16/7/4. //Copyright©2016年黄志浩.Allrightsreserved. // #include #include usingnamespacestd; classlinkList; classproduct; classWareLogs; conststringnoQuilityProdCFileName="noQuilityProdCFile.txt";//成品不合格文件名 conststringQuilityProdCFileName="QuilityProdCFile.txt";//成品合格文件名 conststringnoQuilityProdYFileName="noQuilityProdYFile.txt";//原材料不合格文件名 conststringQuilityProdYFileName="QuilityProdYFile.txt";//原材料合格文件名 conststringLogsToTheFile="logsFile.txt";//基础信息设定配置文件 conststringProductLogFileName="productLog.txt";//保存入出退日志信息 classtools{ public: //设置基本信息 voidbaseSetting(stringfileName); //质检部门检验合格 stringisQuilified(); //填写入库单确认入库 voidaddProdToFile(stringfileOKName,stringfileNOName); //仓库入库入口函数 voidaddProduct(); //填写领料单/销售出库单 voidoutProdFromFile(product*prodList,stringfileName,stringtype); //仓库出库入口函数 voidoutProduct(); //将退库的货物按合格与否分类 voidOKOrNo(stringfileOKName,stringfileNoOKName); //退库入口函数 voidagainProduct(); //仓库库存查询入口 voidwareStockAsk(); //统计分析入口 voidallAnalyse(); //提醒预警 voidremindWarning(); //仓库台账 voidwareAccount(); //产品存储成本查询 voidproductForCost(); }; // //tools.cpp //仓库管理系统 // //Createdbyxiaokaon16/7/4. //Copyright©2016年黄志浩.Allrightsreserved. // #include"tools.hpp" #include"linkList.hpp" #include"product.hpp" /** *仓库基础信息设定将设定的信息写入文件 */ voidtools: : baseSetting(stringfileName){ doublemaxStock,minStock,maxAbility,maxDate,costFactor; cout<<"输入仓库高存储量"; cin>>maxStock; cout<<"输入仓库低存储量"; cin>>minStock; cout<<"输入货位存储能力"; cin>>maxAbility; cout<<"输入仓库最大存储期限"; cin>>maxDate; cout<<"输入仓库存储总体成本系数"; cin>>costFactor; fstreamfout(fileName,ios: : out); if(! fout){ cout<<"打开"< return; } fout< < < < < fout.close(); } /** *质检部门确认合格与否 * *@return"y/Y"合格"n/N不合格" */ stringtools: : isQuilified(){ stringis; while (1){ cout<<"质检部门确认合格? "; cin>>is; if(is=="y"||is=="Y"){ return"y"; }elseif(is=="n"||is=="N"){ return"n"; } cout<<"合格输入y/Y"< <<"不合格输入n/N"< } } /** *填写入库单将入库单数据(产品详尽信息)写入文件 * *@paramfileOKName原材料/成品合格库区 *@paramfileNOName原材料/成品不合格库区 */ voidtools: : addProdToFile(stringfileOKName,stringfileNOName){ stringis=isQuilified(); if(is=="y"){ product*q=newproduct(); intiss=q->setInWareList();//填写入库单 if(iss==2){ return; } q->inToFile(fileOKName);//根据入库单确认入库 WareLogs*log=newWareLogs(); log->wirteChangeToTheFile(q,ProductLogFileName,"1"); deleteq; }elseif(is=="n"){ product*q=newproduct(); intiss=q->setInWareList();//填写入库单 if(iss==2){ return; } q->inToFile(fileNOName);//根据入库单放到不合格成品仓库 WareLogs*log=newWareLogs(); log->wirteChangeToTheFile(q,ProductLogFileName,"1"); deleteq; } } /** *仓库入库入口函数 */ voidtools: : addProduct(){ stringt; while (1){ cout<<"1-成品入库"< <<"2-原材料入库"< cin>>t; if(t=="1"){ addProdToFile(QuilityProdCFileName,noQuilityProdCFileName); break; }elseif(t=="2"){ addProdToFile(QuilityProdYFileName,noQuilityProdYFileName); break; } cout<<"请输入正确序号"< } } /** *提取文件中数据为链表根据出库单或领料单修改链表数据并将数据重新写入文件 * *@paramprodList出库单或领料单数据 *@paramfileName文件名 *@paramtype2=出库3=原材料退库/成品退库 */ voidtools: : outProdFromFile(product*prodList,stringfileName,stringtype){ linkList*link=newlinkList(); link->getlinkListFromTheFile(fileName); if(link->head->next==NULL){ cout<<"提取数据失败"< return; } link->forInLinkListForInAndOut(prodList,type);//遍历链表对链表相应节点进行修改 link->writeNodeToTheFile(fileName);//将链表数据写入文件 deletelink; return; } /** *仓库出库入口函数 */ voidtools: : outProduct(){ stringis; while (1){ cout<<"1-原材料出库"< <<"2-销售出库"< cin>>is; if(is=="1"){ product*p=newp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 仓库 管理 系统 docx