版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告 指导教师:孙暘 姓名:黄志浩 学院:计算机科学与工程学院 班级:150407需求分析仓库管理系统应完成以下功能:(1)基础数据设定主要包括仓库类型定义、仓库定义、仓库产品低储、高储、存储限量及存储期限、货位定义、货位存储能力、定义成本统计参数(包括总体系数、每种产品成本系数)、预警机制时间系数定义。(2)仓库入库包括原材料入库和成品入库1.原材料入库:一种是本地的采购:首先由采购处编写请检单,经过质检部门质检合格后(质检部门记录质检结果,合格数、不合格数),仓库保管员将质检合格的原料入库(记录采购部门定义的当时单价)。系统自动产生入库单号(相当于入库批次号形式为年月日)。此时为仓
2、库的假入库状态。办理入库后,由仓库管理员对入库单明细确认是否真入库。入库需要记录项目有:仓库、仓库货位、库管员、图号、型号、颜色、数量。若质检不合格,则对不合格原料进行挑选,把合格原料入库。另一种是外地的采购:首先由库管员办理入库(放入待检区)。向采购部门和质检部门发消息。经过质检部门质检合格后方可入库(入库的操作同上)。不合格原料由仓库管理员办理手续进入相应的仓库,入库时应分货位存储(相应的仓库:如待检区的不合格区),系统自动产生入库单号(相当于批次号)。2.成品入库:由生产车间经过质检部门质检合格后,由生产车间填写成品入库单提交到仓库管理员, 不合格的入到待处理库房。(3)仓库出库包括原材
3、料出库、销售出库1.原材料出库:由生产车间填写领料单(标注班组),仓库管理员办理出库确认约束条件:按照批次号先进先出的原则。车间填写领料单时可以是成品。提交仓库时,由仓库通过质部门提供的物资配料清单分解需要的零部件数量,根据现库存办理出库确认。2.销售出库:销售出库由生产部门填写的销售出库单,办理出库。销售退库经质检部门合格后的成品入到成品库。(4)仓库退库包括原材料退库、成品退库、销售退库1.原材料退库:生产车间将零部件或成品退回仓库。首先有生产车间填写退库单(相当于出库为负),由质检部门确认后方可由仓库确认。生产车间退库时,需要知道哪个批次的货物。2.成品退库:成品退库,首先由质检部门同意
4、将产品从生产车间退回库中。由车间填写退库单。经过仓库管理员确定后办理退库。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 string QuilityProdCFileName = "Quili
7、tyProdCFile.txt" /成品合格文件名const string noQuilityProdYFileName = "noQuilityProdYFile.txt" /原材料不合格文件名const string QuilityProdYFileName = "QuilityProdYFile.txt" /原材料合格文件名const string LogsToTheFile = "logsFile.txt" /基础信息设定配置文件const string ProductLogFileName = "prod
8、uctLog.txt" /保存入出退日志信息详细设计产品类数据成员部分:货物型号货物数量货位号单价该产品的自定义成本系数颜色库管员仓库名称入出退库时间戳成员方法: int setInWareList(); /填写入库单,将数据保存在对象模型中 void setSaleWareList(); /填写销售出库单,将数据保存在对象模型中 void setReceiveList(); /填写领料单,将数据保存在对象模型中 void setOutWareList(); /填写退库单,将数据保存在对象模型中 int inToFile(string fileName); /根据入库单确认入库 vo
9、id setProdModel(); /填写产品型号 供查询使用 int getDayByChrono(); /计算时间戳时间戳的计算通过库函数来实现,需要包含头文件 chrono 和 ratio,每入出退库是都需要调用该函数记录时间日期,供查询使用。int product:getDayByChrono() using namespace std:chrono; typedef duration<int,std:ratio<60*60*24>> days_type; time_point<system_clock,days_type> today = tim
10、e_point_cast<days_type>(system_clock:now(); return today.time_since_epoch().count();链表类:将链表的头节点放在链表类中,节点类对象中含有数据域和指向下一个节点的指针域。链表类的成员方法负责将链表的节点存储的产品类对象数据写入文件或将文件中的数据提取为链表。链表类的成员方法/提取数据为链表 void getlinkListFromTheFile(string fileName); /遍历链表找到节点 void forInLinkListForInAndOut(product *prod,string
11、type); /根据产品型号搜索出仓库名称/产品分布型号 void forInLinkListForLocation(product *prod,string type); /根据基本数据设定信息查询高储低储 以及超出存储期限的产品 void forInLinkListForRemind(WareLogs *logs,string type); /根据产品对象的型号和该产品成本系数以及日志文件中的基本数据设定信息 计算该产品的存储成本 void forInLinkListForCost(product *prod,WareLogs *logs,string type); /将链表数据重新写入文
12、件 void writeNodeToTheFile(string fileName);调试分析遇到过的问题:1.计算仓库存储成本和预警存储期限时,需要知道产品入出退库的时间,这里采用库函数实现,可以获取当前的时间戳,产品每次入出退库时都需要将这个时间戳保存。用途如:通过当前的时间戳减去产品入库的时间戳就是产品在仓库的保存时间。2.至于文件数据提取及修改,是通过链表实现的。对于链表的处理,C+和C 是有些不同的,在C+里,可以把节点类和链表类分别声明,将头节点作为链表类对象的成员属性,而每个节点的数据域保存了产品类对象,指针域指向下一个节点。3.入库退库功能之外的查询工作,需要产品入出退库时间、
13、基础数据设定等信息,这些信息保存在产品对象中不合适,而且这样使得产品对象过于庞大,但是又和产品对象的数据有密切关系,所以这里采用继承的方式,日志类继承产品类,需要完成的功能是将基础数据设定的数据和产品每次入出退库的时间写入文件。写入的时间需要和对应产品进行联系,所以需要获取对应产品的型号、数量、单价来计算总金额。4.C+当自定义的头文件过多时,会有文件重复包含,即文件重复编译的情况出现。这里采用宏的方式处理:#ifndef identifier #define identifier
14、0; #endif 5.入库时需要判断入库产品数量是否大于自定义的货位存储能力,同样出库时需要判断出库产品的数量是否大于仓库存储产品数量。为此在入库或出库时通过链表类对象提取文件中保存的对应型号产品的数量与将要入库或出库的产品数量做比较,不符合就要终止入库或退库。用户使用说明1.第一次使用时需要到基础数据设定模块中设定数据,这些数据在以后入出退库时都会默认调用。2.入库时填写的入库单中产品的成本系数不能大于基本数据设定中自定义的总体成本系数。3.当天入库的产品暂时不计存储成本(该产品存储天数为0 )。4.牢记产品型号,仓库的查询功能除了“仓库库存分析查询”是通过
15、时间段查询数据,其余都是通过产品型号来查询。测试结果1. 基础数据设定测试2.入库测试错误处理3.出库测试错误处理4.退库测试5.仓库库存查询测试6.统计分析测试7.提醒预警信息测试8.仓库台账测试错误处理9.产品存储成本查询当天入库的产品由于存储天数为0,无法计算存储成本。为了测试改功能,将文件中该产品的入库时间戳由16996修改为16990后(入库时间修改为前六天),测试结果如下附录/ main.cpp/ 仓库管理系统/ Created by xiaoka on 16/7/4./ Copyright © 2016年 黄志浩. All rights reserved./#inclu
16、de "tools.hpp"#include <iostream>using namespace std;void printToScreen() cout<<endl<<endl; cout<<"-仓库管理系统-"<<endl <<"- 1-基础数据设定"<<endl <<"- 2-仓库入库"<<endl <<"- 3-仓库出库"<<endl <<&q
17、uot;- 4-仓库退库"<<endl <<"- 5-仓库库存查询"<<endl <<"- 6-统计分析"<<endl <<"- 7-提醒预警信息"<<endl <<"- 8-仓库台帐"<<endl <<"- 9-产品存储成本查询"<<endl <<"- 0-退出系统"<<endl; cout<<en
18、dl<<endl;int main(int argc, const char * argv) printToScreen(); int menu = 0; while (1) cin>>menu; tools *t = new tools(); switch (menu) case 1: /基本数据设定 t->baseSetting(LogsToTheFile); break; case 2: /仓库入库 t->addProduct(); break; case 3: /仓库出库 t->outProduct(); break; case 4: /仓库退
19、库 t->againProduct(); break; case 5: /仓库库存查询 t->wareStockAsk(); 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&
20、lt;<"请正确输入菜单对应序号"<<endl; break; delete t; cout<<"已返回主菜单"<<endl; printToScreen(); return 0;/ tools.hpp/ 仓库管理系统/ Created by xiaoka on 16/7/4./ Copyright © 2016年 黄志浩. All rights reserved./#include <fstream>#include <string>using namespace std;cl
21、ass linkList;class product;class WareLogs;const string noQuilityProdCFileName = "noQuilityProdCFile.txt" /成品不合格文件名const string QuilityProdCFileName = "QuilityProdCFile.txt" /成品合格文件名const string noQuilityProdYFileName = "noQuilityProdYFile.txt" /原材料不合格文件名const string Qui
22、lityProdYFileName = "QuilityProdYFile.txt" /原材料合格文件名const string LogsToTheFile = "logsFile.txt" /基础信息设定配置文件const string ProductLogFileName = "productLog.txt" /保存入出退日志信息class toolspublic: /设置基本信息 void baseSetting(string fileName); /质检部门检验合格 string isQuilified(); /填写入库单 确
23、认入库 void addProdToFile(string fileOKName,string fileNOName); /仓库入库入口函数 void addProduct(); /填写领料单销售出库单 void outProdFromFile(product *prodList,string fileName,string type); /仓库出库入口函数 void outProduct(); /将退库的货物按合格与否分类 void OKOrNo(string fileOKName,string fileNoOKName); /退库入口函数 void againProduct(); /仓库库
24、存查询入口 void wareStockAsk(); /统计分析入口 void allAnalyse(); /提醒预警 void remindWarning(); /仓库台账 void wareAccount(); /产品存储成本查询 void productForCost();/ tools.cpp/ 仓库管理系统/ Created by xiaoka on 16/7/4./ Copyright © 2016年 黄志浩. All rights reserved./#include "tools.hpp"#include "linkList.hpp&qu
25、ot;#include "product.hpp"/* * 仓库基础信息设定 将设定的信息写入文件 */void tools:baseSetting(string fileName) double maxStock,minStock,maxAbility,maxDate,costFactor; cout<<"输入仓库高存储量 " cin>>maxStock; cout<<"输入仓库低存储量 " cin>>minStock; cout<<"输入货位存储能力 "
26、; cin>>maxAbility; cout<<"输入仓库最大存储期限 " cin>>maxDate; cout<<"输入仓库存储总体成本系数 " cin>>costFactor; fstream fout(fileName,ios:out); if (!fout) cout<<"打开"<<fileName<<"失败"<<endl; return; fout<<maxStock<<&
27、quot;n" <<minStock<<"n" <<maxAbility<<"n" <<maxDate<<"n" <<costFactor<<"n" fout.close();/* * 质检部门确认合格与否 * * return "y/Y"合格 "n/N不合格" */string tools:isQuilified() string is; while (1) cout&
28、lt;<"质检部门确认合格?" cin>>is; if (is="y"|is="Y") return "y" else if (is="n"|is="N") return "n" cout<<"合格输入y/Y"<<endl <<"不合格输入n/N"<<endl; /* * 填写入库单 将入库单数据(产品详尽信息)写入文件 * * param fileO
29、KName 原材料/成品 合格库区 * param fileNOName 原材料/成品 不合格库区 */void tools:addProdToFile(string fileOKName,string fileNOName) string is = isQuilified(); if (is="y") product* q = new product(); int iss = q->setInWareList(); /填写入库单 if (iss=2) return; q->inToFile(fileOKName); /根据入库单确认入库 WareLogs *l
30、og = 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 *log = new WareLogs(); log->wirt
31、eChangeToTheFile(q, ProductLogFileName, "1"); delete q; /* * 仓库入库 入口函数 */void tools:addProduct() string t; while (1) cout<<"1-成品入库"<<endl <<"2-原材料入库"<<endl; cin>>t; if (t="1") addProdToFile(QuilityProdCFileName,noQuilityProdCFileN
32、ame); break; else if (t="2") addProdToFile(QuilityProdYFileName, noQuilityProdYFileName); break; cout<<"请输入正确序号 "<<endl; /* * 提取文件中数据为链表 根据出库单或领料单修改链表数据 并将数据重新写入文件 * * param prodList 出库单或领料单数据 * param fileName 文件名 * param type 2=出库 3=原材料退库成品退库 */void tools:outProdFrom
33、File(product *prodList,string fileName,string type) linkList *link = new linkList(); link->getlinkListFromTheFile(fileName); if (link->head->next=NULL) cout<<"提取数据失败"<<endl; return; link->forInLinkListForInAndOut(prodList,type); /遍历链表对链表相应节点进行修改 link->writeNodeTo
34、TheFile(fileName); /将链表数据写入文件 delete link; return;/* * 仓库出库 入口函数 */void tools:outProduct() string is; while (1) cout<<"1-原材料出库"<<endl <<"2-销售出库"<<endl; cin>>is; if (is="1") product *p = new product(); p->setReceiveList(); outProdFromFile
35、(p, QuilityProdYFileName,"2"); break; else if (is="2") product *p = new product(); p->setSaleWareList(); outProdFromFile(p, QuilityProdCFileName,"2"); break; cout<<"输入正确序号"<<endl; /* * 将退库的货物按合格与否分类 * * param fileOKName 合格产品存放 文件名 * param fileNo
36、OKName 不合格产品存放 文件名 */void tools:OKOrNo(string fileOKName,string fileNoOKName) string isOK; isOK = isQuilified(); product *p = new product(); if (isOK="y") p->setOutWareList(); /填写退库单 outProdFromFile(p, fileOKName,"3"); /提取文件中数据为链表 根据出库单或领料单修改链表数据 并将数据重新写入文件 else cout<<&q
37、uot;填写入库单 存入原材料仓库不合格区"<<endl; p->setInWareList(); /填写入库单 p->inToFile(fileNoOKName); /* * 退库入口函数 */void tools:againProduct() string is,isOK,fileName; while (1) cout<<"1-原材料退库"<<endl <<"2-成品退库"<<endl <<"3-销售退库"<<endl; c
38、in>>is; if (is="1") /原材料退库 需要知道哪个批次的货物 OKOrNo(QuilityProdYFileName, noQuilityProdYFileName); else if (is="2") /成品退库 需要输入:仓库名称、图号、型号、数量、车间、发生日期、仓库管理员、原因 OKOrNo(QuilityProdCFileName, noQuilityProdCFileName); else if (is="3") /销售退库 OKOrNo(QuilityProdCFileName, noQuil
39、ityProdCFileName); else cout<<"请输入正确序号 " break; /* * 仓库库存分析查询入口 */void tools:wareStockAsk() int day; cout<<"功能描述:根据输入的段时间查询仓库发生的入出退总数量金额"<<endl<<endl; cout<<"输入要查询的时间段(单位:天) " cin>>day; WareLogs *log = new WareLogs(); log->readDate
40、FromFile(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:allAnalyse() c
41、out<<"功能描述:由产品型号搜索出产品分布情况(仓库名称货位) 包括成品仓库和原材料仓库"<<endl<<endl; linkList *link = new linkList(); product *prod = new product(); prod->setProdModel(); link->getlinkListFromTheFile(QuilityProdCFileName); /将文件中的数据提取为链表 link->forInLinkListForLocation(prod,"4")
42、; /查询成品仓库 delete link; link = new linkList(); link->getlinkListFromTheFile(QuilityProdYFileName); /将文件中的数据提取为链表 link->forInLinkListForLocation(prod,"5"); /查询原材料仓库 delete prod;/* * 提醒预警信息入口 根据基本数据设定 输出仓库高储低储存储期限 */void tools:remindWarning() cout<<"功能描述:根据基本数据设定 输出仓库高储低储存储期限
43、"<<endl<<endl; WareLogs *w = new WareLogs(); int isOK = w->readBaseSettingFromTheFile(LogsToTheFile); if (isOK=2) return; linkList *link = new linkList(); link->getlinkListFromTheFile(QuilityProdCFileName); link->forInLinkListForRemind(w,"4"); delete link; link =
44、new linkList(); link->getlinkListFromTheFile(QuilityProdYFileName); link->forInLinkListForRemind(w, "5"); delete link;/* * 仓库台账入口 */void tools:wareAccount() cout<<"功能描述:根据产品型号输出仓库产品的入、出、退明细帐"<<endl<<endl; string model = "" cout<<"输入待查询
45、产品型号 " cin>>model; WareLogs *w = new WareLogs(); w->readFromFileToScreen(ProductLogFileName, model, 1); /1入库 2出库 3表示退库 需要填写原因 delete w; w = new WareLogs(); w->readFromFileToScreen(ProductLogFileName, model, 2); delete w; w = new WareLogs(); w->readFromFileToScreen(ProductLogFileN
46、ame, model, 3); delete w;/* * 产品存储成本查询 */void tools:productForCost() cout<<"功能说明:根据产品型号计算该产品存储成本"<<endl<<endl; product *p = new product(); WareLogs *logs = new WareLogs(); logs->readBaseSettingFromTheFile(LogsToTheFile); p->setProdModel(); linkList *link = new linkL
47、ist(); link->getlinkListFromTheFile(QuilityProdCFileName); link->forInLinkListForCost(p, logs,"4"); delete link; link = new linkList(); link->getlinkListFromTheFile(QuilityProdYFileName); link->forInLinkListForCost(p, logs,"5"); delete link; delete p; delete logs;/ pr
48、oduct.hpp/ 仓库管理系统/ Created by xiaoka on 16/7/4./ Copyright © 2016年 黄志浩. All rights reserved./#ifndef product_hpp#define product_hpp#include <iostream>#include <fstream>using namespace std;class productprotected: string prodModel; /货物型号 double prodNum; /货物存储数量 string location; /仓库货位序列号 double price; /产品单价 double costNum; /成本系数 string prodColor; /货物颜色 string peopleName; /货物库管员 string wareName; /仓库名称 int intoWareDay; /入库时间戳 int outFromWareDay; /出库时间戳 int againToWareDay;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厦门软件职业技术学院《系统项目集成管理》2025-2026学年期末试卷
- 闽江师范高等专科学校《电子商务基础与实务》2025-2026学年期末试卷
- 滁州职业技术学院《会计信息系统》2025-2026学年期末试卷
- 轨道作业车司机创新应用模拟考核试卷含答案
- 试驾专员工作总结报告
- 水声换能器密封工岗前管理应用考核试卷含答案
- 井下采矿工操作知识评优考核试卷含答案
- 酶制剂充填封装工诚信强化考核试卷含答案
- 水平定向钻机司机风险评估与管理能力考核试卷含答案
- 房地产投资风险解码-掌握风险谨慎投资房产
- 2026年新疆昌吉州共同体初三5月摸底联考化学试题含解析
- 校园绿化种植与灌溉系统方案
- 钻机介绍教学课件
- 2026北森测评试题及答案
- 深度解析(2026)《NBT 10617-2021制氢转化炉炉管寿命评估及更换导则》
- 华为公司管理制度规范
- 《增材制造工艺制订与实施》课件-增材制造技术应用领域(航空航天)
- 2026年驾驶证换证三力测试备考题及思路梳理含答案
- 2026年2月1日执行的《行政执法监督条例》解读课件
- 柔韧素质及其训练
- 红细胞叶酸课件
评论
0/150
提交评论