《仓库管理系统[37页].docx》由会员分享,可在线阅读,更多相关《仓库管理系统[37页].docx(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、最新资料推荐课程设计报告 指导教师:孙暘 姓名:黄志浩 学院:计算机科学与工程学院 班级:150407最新精品资料整理推荐,更新于二二一年一月十九日2021年1月19日星期二20:00:13需求分析仓库管理系统应完成以下功能:(1)基础数据设定主要包括仓库类型定义、仓库定义、仓库产品低储、高储、存储限量及存储期限、货位定义、货位存储能力、定义成本统计参数(包括总体系数、每种产品成本系数)、预警机制时间系数定义。(2)仓库入库包括原材料入库和成品入库1.原材料入库:一种是本地的采购:首先由采购处编写请检单,经过质检部门质检合格后(质检部门记录质检结果,合格数、不合格数),仓库保管员将质检合格的原
2、料入库(记录采购部门定义的当时单价)。系统自动产生入库单号(相当于入库批次号形式为年月日)。此时为仓库的假入库状态。办理入库后,由仓库管理员对入库单明细确认是否真入库。入库需要记录项目有:仓库、仓库货位、库管员、图号、型号、颜色、数量。若质检不合格,则对不合格原料进行挑选,把合格原料入库。另一种是外地的采购:首先由库管员办理入库(放入待检区)。向采购部门和质检部门发消息。经过质检部门质检合格后方可入库(入库的操作同上)。不合格原料由仓库管理员办理手续进入相应的仓库,入库时应分货位存储(相应的仓库:如待检区的不合格区),系统自动产生入库单号(相当于批次号)。2.成品入库:由生产车间经过质检部门质
3、检合格后,由生产车间填写成品入库单提交到仓库管理员, 不合格的入到待处理库房。(3)仓库出库包括原材料出库、销售出库1.原材料出库:由生产车间填写领料单(标注班组),仓库管理员办理出库确认约束条件:按照批次号先进先出的原则。车间填写领料单时可以是成品。提交仓库时,由仓库通过质部门提供的物资配料清单分解需要的零部件数量,根据现库存办理出库确认。2.销售出库:销售出库由生产部门填写的销售出库单,办理出库。销售退库经质检部门合格后的成品入到成品库。(4)仓库退库包括原材料退库、成品退库、销售退库1.原材料退库:生产车间将零部件或成品退回仓库。首先有生产车间填写退库单(相当于出库为负),由质检部门确认
4、后方可由仓库确认。生产车间退库时,需要知道哪个批次的货物。2.成品退库:成品退库,首先由质检部门同意将产品从生产车间退回库中。由车间填写退库单。经过仓库管理员确定后办理退库。3.销售退库:由厂商将产品退回仓库,首先由质检部门质检,质检合格由仓 库管理员办理退库单。不合格的存放待处理成品区中。(5)仓库库存查询:根据仓库一段时间内发生的入、出、退汇总数量、金额。(6)统计分析:查询仓库产品数量分布情况。(7)自动提醒预警信息:根据产品入出退库时间和系统参数定义,统计仓库目前的超量及库存已低于低储,存储期限超出查询。(8)仓库台帐:及时反映仓库产品的入、出、退明细帐。 ( 9) 仓库存储成本统计:
5、根据产品成本系数和存储时间计算存储成本 公式:产品在仓库存储时间差*数量*单价*相应的总体系数*该产品自定义系数计算仓库存储成本概要设计源程序有7个文件:main.cpp 程序入口,显示主菜单并跳转到工具类相应成员函数部分。tools.cpp tools.hpp 工具类,程序由main.cpp跳转到工具类,有工具类具体跳转到相应部分。product.cpp product.hpp 产品类,主要负责保存产品信息,即对象模型,同时还负责将对象保存的数据写入文件,或将文件中的数据经过链表类保存到对象中。该文件中还有一个日志类WareLogs,继承自product,负责每次入、出、退库时需要记录的信息
6、,如日期、产品型号、数量,还负责将对象保存的数据写入另外的日志文件,或将日志文件中的数据读取到对象中。同时日志类对象还有另外一个功能:将基础数据设定的数据写入单独的文件中。linkList.cpp linkList.hpp 链表类,保存的是节点类对象,节点类对象的数据域为产品类对象。链表类的主要功能是将某文件中所有数据读取为链表,或在链表对象中搜索出某产品并对该产品进行相应更改之后再次将链表对象的数据域写入文件。用来保存数据的文件有6个:const string noQuilityProdCFileName = noQuilityProdCFile.txt; /成品不合格文件名const st
7、ring QuilityProdCFileName = QuilityProdCFile.txt; /成品合格文件名const string noQuilityProdYFileName = noQuilityProdYFile.txt; /原材料不合格文件名const string QuilityProdYFileName = QuilityProdYFile.txt; /原材料合格文件名const string LogsToTheFile = logsFile.txt; /基础信息设定配置文件const string ProductLogFileName = productLog.txt;
8、 /保存入出退日志信息详细设计产品类数据成员部分:货物型号货物数量货位号单价该产品的自定义成本系数颜色库管员仓库名称入出退库时间戳成员方法: int setInWareList(); /填写入库单,将数据保存在对象模型中 void setSaleWareList(); /填写销售出库单,将数据保存在对象模型中 void setReceiveList(); /填写领料单,将数据保存在对象模型中 void setOutWareList(); /填写退库单,将数据保存在对象模型中 int inToFile(string fileName); /根据入库单确认入库 void setProdModel(
9、); /填写产品型号 供查询使用 int getDayByChrono(); /计算时间戳时间戳的计算通过库函数来实现,需要包含头文件 chrono 和 ratio,每入出退库是都需要调用该函数记录时间日期,供查询使用。int product:getDayByChrono() using namespace std:chrono; typedef durationint,std:ratio days_type; time_point today = time_point_cast(system_clock:now(); return today.time_since_epoch().count
10、();链表类:将链表的头节点放在链表类中,节点类对象中含有数据域和指向下一个节点的指针域。链表类的成员方法负责将链表的节点存储的产品类对象数据写入文件或将文件中的数据提取为链表。链表类的成员方法/提取数据为链表 void getlinkListFromTheFile(string fileName); /遍历链表找到节点 void forInLinkListForInAndOut(product *prod,string type); /根据产品型号搜索出仓库名称/产品分布型号 void forInLinkListForLocation(product *prod,string type);
11、/根据基本数据设定信息查询高储低储 以及超出存储期限的产品 void forInLinkListForRemind(WareLogs *logs,string type); /根据产品对象的型号和该产品成本系数以及日志文件中的基本数据设定信息 计算该产品的存储成本 void forInLinkListForCost(product *prod,WareLogs *logs,string type); /将链表数据重新写入文件 void writeNodeToTheFile(string fileName);调试分析遇到过的问题:1.计算仓库存储成本和预警存储期限时,需要知道产品入出退库的时间,
12、这里采用库函数实现,可以获取当前的时间戳,产品每次入出退库时都需要将这个时间戳保存。用途如:通过当前的时间戳减去产品入库的时间戳就是产品在仓库的保存时间。2.至于文件数据提取及修改,是通过链表实现的。对于链表的处理,C+和C 是有些不同的,在C+里,可以把节点类和链表类分别声明,将头节点作为链表类对象的成员属性,而每个节点的数据域保存了产品类对象,指针域指向下一个节点。3.入库退库功能之外的查询工作,需要产品入出退库时间、基础数据设定等信息,这些信息保存在产品对象中不合适,而且这样使得产品对象过于庞大,但是又和产品对象的数据有密切关系,所以这里采用继承的方式,日志类继承产品类,需要完成的功能是
13、将基础数据设定的数据和产品每次入出退库的时间写入文件。写入的时间需要和对应产品进行联系,所以需要获取对应产品的型号、数量、单价来计算总金额。4.C+当自定义的头文件过多时,会有文件重复包含,即文件重复编译的情况出现。这里采用宏的方式处理:#ifndef identifier#define identifier#endif5.入库时需要判断入库产品数量是否大于自定义的货位存储能力,同样出库时需要判断出库产品的数量是否大于仓库存储产品数量。为此在入库或出库时通过链表类对象提取文件中保存的对应型号产品的数量与将要入库或出库的产品数量做比较,不符合就要终止入库或退库。用户使用说明1.第一次使用时需要到
14、基础数据设定模块中设定数据,这些数据在以后入出退库时都会默认调用。2.入库时填写的入库单中产品的成本系数不能大于基本数据设定中自定义的总体成本系数。3.当天入库的产品暂时不计存储成本(该产品存储天数为0 )。4.牢记产品型号,仓库的查询功能除了“仓库库存分析查询”是通过时间段查询数据,其余都是通过产品型号来查询。测试结果1. 基础数据设定测试2.入库测试错误处理3.出库测试错误处理4.退库测试5.仓库库存查询测试6.统计分析测试7.提醒预警信息测试8.仓库台账测试错误处理9.产品存储成本查询当天入库的产品由于存储天数为0,无法计算存储成本。为了测试改功能,将文件中该产品的入库时间戳由16996
15、修改为16990后(入库时间修改为前六天),测试结果如下附录/ main.cpp/ 仓库管理系统/ Created by xiaoka on 16/7/4./ Copyright 2016年 黄志浩. All rights reserved./#include tools.hpp#include using namespace std;void printToScreen() coutendlendl; cout-仓库管理系统-endl - 1-基础数据设定endl - 2-仓库入库endl - 3-仓库出库endl - 4-仓库退库endl - 5-仓库库存查询endl - 6-统计分析en
16、dl - 7-提醒预警信息endl - 8-仓库台帐endl - 9-产品存储成本查询endl - 0-退出系统endl; coutendlmenu; tools *t = new tools(); switch (menu) case 1: /基本数据设定 t-baseSetting(LogsToTheFile); break; case 2: /仓库入库 t-addProduct(); break; case 3: /仓库出库 t-outProduct(); break; case 4: /仓库退库 t-againProduct(); break; case 5: /仓库库存查询 t-wa
17、reStockAsk(); break; case 6: /统计分析 t-allAnalyse(); break; case 7: /提醒预警 t-remindWarning(); break; case 8: /仓库台账 t-wareAccount(); break; case 9: /仓库存储成本查询 t-productForCost(); break; case 0: delete t; exit(0); break; default: cout请正确输入菜单对应序号endl; break; delete t; cout已返回主菜单endl; printToScreen(); retur
18、n 0;/ tools.hpp/ 仓库管理系统/ Created by xiaoka on 16/7/4./ Copyright 2016年 黄志浩. All rights reserved./#include #include using namespace std;class linkList;class product;class WareLogs;const string noQuilityProdCFileName = noQuilityProdCFile.txt; /成品不合格文件名const string QuilityProdCFileName = QuilityProdCFi
19、le.txt; /成品合格文件名const string noQuilityProdYFileName = noQuilityProdYFile.txt; /原材料不合格文件名const string QuilityProdYFileName = QuilityProdYFile.txt; /原材料合格文件名const string LogsToTheFile = logsFile.txt; /基础信息设定配置文件const string ProductLogFileName = productLog.txt; /保存入出退日志信息class toolspublic: /设置基本信息 void
20、 baseSetting(string fileName); /质检部门检验合格 string isQuilified(); /填写入库单 确认入库 void addProdToFile(string fileOKName,string fileNOName); /仓库入库入口函数 void addProduct(); /填写领料单销售出库单 void outProdFromFile(product *prodList,string fileName,string type); /仓库出库入口函数 void outProduct(); /将退库的货物按合格与否分类 void OKOrNo(st
21、ring fileOKName,string fileNoOKName); /退库入口函数 void againProduct(); /仓库库存查询入口 void wareStockAsk(); /统计分析入口 void allAnalyse(); /提醒预警 void remindWarning(); /仓库台账 void wareAccount(); /产品存储成本查询 void productForCost();/ tools.cpp/ 仓库管理系统/ Created by xiaoka on 16/7/4./ Copyright 2016年 黄志浩. All rights reserv
22、ed./#include tools.hpp#include linkList.hpp#include product.hpp/* * 仓库基础信息设定 将设定的信息写入文件 */void tools:baseSetting(string fileName) double maxStock,minStock,maxAbility,maxDate,costFactor; coutmaxStock; coutminStock; coutmaxAbility; coutmaxDate; coutcostFactor; fstream fout(fileName,ios:out); if (!fout
23、) cout打开fileName失败endl; return; foutmaxStockn minStockn maxAbilityn maxDaten costFactorn; fout.close();/* * 质检部门确认合格与否 * * return y/Y合格 n/N不合格 */string tools:isQuilified() string is; while (1) coutis; if (is=y|is=Y) return y; else if (is=n|is=N) return n; cout合格输入y/Yendl 不合格输入n/NsetInWareList(); /填写
24、入库单 if (iss=2) return; q-inToFile(fileOKName); /根据入库单确认入库 WareLogs *log = new WareLogs(); log-wirteChangeToTheFile(q, ProductLogFileName, 1); delete q; else if(is=n) product* q = new product(); int iss = q-setInWareList(); /填写入库单 if (iss=2) return; q-inToFile(fileNOName); /根据入库单放到不合格成品仓库 WareLogs *l
25、og = new WareLogs(); log-wirteChangeToTheFile(q, ProductLogFileName, 1); delete q; /* * 仓库入库 入口函数 */void tools:addProduct() string t; while (1) cout1-成品入库endl 2-原材料入库t; if (t=1) addProdToFile(QuilityProdCFileName,noQuilityProdCFileName); break; else if (t=2) addProdToFile(QuilityProdYFileName, noQui
26、lityProdYFileName); break; cout请输入正确序号 getlinkListFromTheFile(fileName); if (link-head-next=NULL) cout提取数据失败forInLinkListForInAndOut(prodList,type); /遍历链表对链表相应节点进行修改 link-writeNodeToTheFile(fileName); /将链表数据写入文件 delete link; return;/* * 仓库出库 入口函数 */void tools:outProduct() string is; while (1) cout1-
27、原材料出库endl 2-销售出库is; if (is=1) product *p = new product(); p-setReceiveList(); outProdFromFile(p, QuilityProdYFileName,2); break; else if (is=2) product *p = new product(); p-setSaleWareList(); outProdFromFile(p, QuilityProdCFileName,2); break; cout输入正确序号setOutWareList(); /填写退库单 outProdFromFile(p, fi
28、leOKName,3); /提取文件中数据为链表 根据出库单或领料单修改链表数据 并将数据重新写入文件 else cout填写入库单 存入原材料仓库不合格区setInWareList(); /填写入库单 p-inToFile(fileNoOKName); /* * 退库入口函数 */void tools:againProduct() string is,isOK,fileName; while (1) cout1-原材料退库endl 2-成品退库endl 3-销售退库is; if (is=1) /原材料退库 需要知道哪个批次的货物 OKOrNo(QuilityProdYFileName, no
29、QuilityProdYFileName); else if (is=2) /成品退库 需要输入:仓库名称、图号、型号、数量、车间、发生日期、仓库管理员、原因 OKOrNo(QuilityProdCFileName, noQuilityProdCFileName); else if (is=3) /销售退库 OKOrNo(QuilityProdCFileName, noQuilityProdCFileName); else cout请输入正确序号 ; break; /* * 仓库库存分析查询入口 */void tools:wareStockAsk() int day; cout功能描述:根据输
30、入的段时间查询仓库发生的入出退总数量金额endlendl; coutday; WareLogs *log = new WareLogs(); log-readDateFromFile(day, ProductLogFileName, 1); delete log; log = new WareLogs(); log-readDateFromFile(day, ProductLogFileName, 2); delete log; log = new WareLogs(); log-readDateFromFile(day, ProductLogFileName, 3); delete log;/* * 统计分析入口 由产品型号搜索出产品分布情况(仓库名称货位) 包括成品仓库和原材料仓库 */void tools:allAnaly