版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、118/118課程設(shè)計(jì)報(bào)告 指導(dǎo)教師:孫暘 姓名:黃志浩 學(xué)院:計(jì)算機(jī)科學(xué)與工程學(xué)院 班級(jí):150407需求分析倉庫管理系統(tǒng)應(yīng)完成以下功能:(1)基礎(chǔ)數(shù)據(jù)設(shè)定主要包括倉庫類型定義、倉庫定義、倉庫產(chǎn)品低儲(chǔ)、高儲(chǔ)、存儲(chǔ)限量及存儲(chǔ)期限、貨位定義、貨位存儲(chǔ)能力、定義成本統(tǒng)計(jì)參數(shù)(包括總體系數(shù)、每種產(chǎn)品成本系數(shù))、預(yù)警機(jī)制時(shí)間系數(shù)定義。(2)倉庫入庫包括原材料入庫和成品入庫1.原材料入庫:一種是本地的采購:首先由采購處編寫請檢單,經(jīng)過質(zhì)檢部門質(zhì)檢合格后(質(zhì)檢部門記錄質(zhì)檢結(jié)果,合格數(shù)、不合格數(shù)),倉庫保管員將質(zhì)檢合格的原料入庫(記錄采購部門定義的當(dāng)時(shí)單價(jià))。系統(tǒng)自動(dòng)產(chǎn)生入庫單號(hào)(相當(dāng)于入庫批次號(hào)形式為年月
2、日)。此時(shí)為倉庫的假入庫狀態(tài)。辦理入庫后,由倉庫管理員對入庫單明細(xì)確認(rèn)是否真入庫。入庫需要記錄項(xiàng)目有:倉庫、倉庫貨位、庫管員、圖號(hào)、型號(hào)、顏色、數(shù)量。若質(zhì)檢不合格,則對不合格原料進(jìn)行挑選,把合格原料入庫。另一種是外地的采購:首先由庫管員辦理入庫(放入待檢區(qū))。向采購部門和質(zhì)檢部門發(fā)消息。經(jīng)過質(zhì)檢部門質(zhì)檢合格后方可入庫(入庫的操作同上)。不合格原料由倉庫管理員辦理手續(xù)進(jìn)入相應(yīng)的倉庫,入庫時(shí)應(yīng)分貨位存儲(chǔ)(相應(yīng)的倉庫:如待檢區(qū)的不合格區(qū)),系統(tǒng)自動(dòng)產(chǎn)生入庫單號(hào)(相當(dāng)于批次號(hào))。2.成品入庫:由生產(chǎn)車間經(jīng)過質(zhì)檢部門質(zhì)檢合格后,由生產(chǎn)車間填寫成品入庫單提交到倉庫管理員, 不合格的入到待處理庫房。(3)倉
3、庫出庫包括原材料出庫、銷售出庫1.原材料出庫:由生產(chǎn)車間填寫領(lǐng)料單(標(biāo)注班組),倉庫管理員辦理出庫確認(rèn)約束條件:按照批次號(hào)先進(jìn)先出的原則。車間填寫領(lǐng)料單時(shí)可以是成品。提交倉庫時(shí),由倉庫通過質(zhì)部門提供的物資配料清單分解需要的零部件數(shù)量,根據(jù)現(xiàn)庫存辦理出庫確認(rèn)。2.銷售出庫:銷售出庫由生產(chǎn)部門填寫的銷售出庫單,辦理出庫。銷售退庫經(jīng)質(zhì)檢部門合格后的成品入到成品庫。(4)倉庫退庫包括原材料退庫、成品退庫、銷售退庫1.原材料退庫:生產(chǎn)車間將零部件或成品退回倉庫。首先有生產(chǎn)車間填寫退庫單(相當(dāng)于出庫為負(fù)),由質(zhì)檢部門確認(rèn)后方可由倉庫確認(rèn)。生產(chǎn)車間退庫時(shí),需要知道哪個(gè)批次的貨物。2.成品退庫:成品退庫,首先
4、由質(zhì)檢部門同意將產(chǎn)品從生產(chǎn)車間退回庫中。由車間填寫退庫單。經(jīng)過倉庫管理員確定后辦理退庫。3.銷售退庫:由廠商將產(chǎn)品退回倉庫,首先由質(zhì)檢部門質(zhì)檢,質(zhì)檢合格由倉 庫管理員辦理退庫單。不合格的存放待處理成品區(qū)中。(5)倉庫庫存查詢:根據(jù)倉庫一段時(shí)間內(nèi)發(fā)生的入、出、退匯總數(shù)量、金額。(6)統(tǒng)計(jì)分析:查詢倉庫產(chǎn)品數(shù)量分布情況。(7)自動(dòng)提醒預(yù)警信息:根據(jù)產(chǎn)品入出退庫時(shí)間和系統(tǒng)參數(shù)定義,統(tǒng)計(jì)倉庫目前的超量及庫存已低于低儲(chǔ),存儲(chǔ)期限超出查詢。(8)倉庫臺(tái)帳:及時(shí)反映倉庫產(chǎn)品的入、出、退明細(xì)帳。 ( 9) 倉庫存儲(chǔ)成本統(tǒng)計(jì):根據(jù)產(chǎn)品成本系數(shù)和存儲(chǔ)時(shí)間計(jì)算存儲(chǔ)成本 公式:產(chǎn)品在倉庫存儲(chǔ)時(shí)間差*數(shù)量*單價(jià)*相應(yīng)的
5、總體系數(shù)*該產(chǎn)品自定義系數(shù)計(jì)算倉庫存儲(chǔ)成本概要設(shè)計(jì)源程序有7個(gè)文件:main.cpp 程序入口,顯示主菜單并跳轉(zhuǎn)到工具類相應(yīng)成員函數(shù)部分。tools.cpp tools.hpp 工具類,程序由main.cpp跳轉(zhuǎn)到工具類,有工具類具體跳轉(zhuǎn)到相應(yīng)部分。product.cpp product.hpp 產(chǎn)品類,主要負(fù)責(zé)保存產(chǎn)品信息,即對象模型,同時(shí)還負(fù)責(zé)將對象保存的數(shù)據(jù)寫入文件,或?qū)⑽募械臄?shù)據(jù)經(jīng)過鏈表類保存到對象中。該文件中還有一個(gè)日志類WareLogs,繼承自product,負(fù)責(zé)每次入、出、退庫時(shí)需要記錄的信息,如日期、產(chǎn)品型號(hào)、數(shù)量,還負(fù)責(zé)將對象保存的數(shù)據(jù)寫入另外的日志文件,或?qū)⑷罩疚募械臄?shù)
6、據(jù)讀取到對象中。同時(shí)日志類對象還有另外一個(gè)功能:將基礎(chǔ)數(shù)據(jù)設(shè)定的數(shù)據(jù)寫入單獨(dú)的文件中。linkList.cpp linkList.hpp 鏈表類,保存的是節(jié)點(diǎn)類對象,節(jié)點(diǎn)類對象的數(shù)據(jù)域?yàn)楫a(chǎn)品類對象。鏈表類的主要功能是將某文件中所有數(shù)據(jù)讀取為鏈表,或在鏈表對象中搜索出某產(chǎn)品并對該產(chǎn)品進(jìn)行相應(yīng)更改之后再次將鏈表對象的數(shù)據(jù)域?qū)懭胛募?。用來保存?shù)據(jù)的文件有6個(gè):const string noQuilityProdCFileName = noQuilityProdCFile.txt; /成品不合格文件名const string QuilityProdCFileName = QuilityProdCFil
7、e.txt; /成品合格文件名const string noQuilityProdYFileName = noQuilityProdYFile.txt; /原材料不合格文件名const string QuilityProdYFileName = QuilityProdYFile.txt; /原材料合格文件名const string LogsToTheFile = logsFile.txt; /基礎(chǔ)信息設(shè)定配置文件const string ProductLogFileName = productLog.txt; /保存入出退日志信息詳細(xì)設(shè)計(jì)產(chǎn)品類數(shù)據(jù)成員部分:貨物型號(hào)貨物數(shù)量貨位號(hào)單價(jià)該產(chǎn)品的自
8、定義成本系數(shù)顏色庫管員倉庫名稱入出退庫時(shí)間戳成員方法: int setInWareList(); /填寫入庫單,將數(shù)據(jù)保存在對象模型中 void setSaleWareList(); /填寫銷售出庫單,將數(shù)據(jù)保存在對象模型中 void setReceiveList(); /填寫領(lǐng)料單,將數(shù)據(jù)保存在對象模型中 void setOutWareList(); /填寫退庫單,將數(shù)據(jù)保存在對象模型中 int inToFile(string fileName); /根據(jù)入庫單確認(rèn)入庫 void setProdModel(); /填寫產(chǎn)品型號(hào) 供查詢使用 int getDayByChrono(); /計(jì)算時(shí)
9、間戳?xí)r間戳的計(jì)算通過庫函數(shù)來實(shí)現(xiàn),需要包含頭文件 chrono 和 ratio,每入出退庫是都需要調(diào)用該函數(shù)記錄時(shí)間日期,供查詢使用。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();鏈表類:將鏈表的頭節(jié)點(diǎn)放在鏈表類中,節(jié)點(diǎn)類對象中含有數(shù)據(jù)域和指向下一個(gè)節(jié)點(diǎn)的指針
10、域。鏈表類的成員方法負(fù)責(zé)將鏈表的節(jié)點(diǎn)存儲(chǔ)的產(chǎn)品類對象數(shù)據(jù)寫入文件或?qū)⑽募械臄?shù)據(jù)提取為鏈表。鏈表類的成員方法/提取數(shù)據(jù)為鏈表 void getlinkListFromTheFile(string fileName); /遍歷鏈表找到節(jié)點(diǎn) void forInLinkListForInAndOut(product *prod,string type); /根據(jù)產(chǎn)品型號(hào)搜索出倉庫名稱/產(chǎn)品分布型號(hào) void forInLinkListForLocation(product *prod,string type); /根據(jù)基本數(shù)據(jù)設(shè)定信息查詢高儲(chǔ)低儲(chǔ) 以及超出存儲(chǔ)期限的產(chǎn)品 void forInLin
11、kListForRemind(WareLogs *logs,string type); /根據(jù)產(chǎn)品對象的型號(hào)和該產(chǎn)品成本系數(shù)以及日志文件中的基本數(shù)據(jù)設(shè)定信息 計(jì)算該產(chǎn)品的存儲(chǔ)成本 void forInLinkListForCost(product *prod,WareLogs *logs,string type); /將鏈表數(shù)據(jù)重新寫入文件 void writeNodeToTheFile(string fileName);調(diào)試分析遇到過的問題:1.計(jì)算倉庫存儲(chǔ)成本和預(yù)警存儲(chǔ)期限時(shí),需要知道產(chǎn)品入出退庫的時(shí)間,這里采用庫函數(shù)實(shí)現(xiàn),可以獲取當(dāng)前的時(shí)間戳,產(chǎn)品每次入出退庫時(shí)都需要將這個(gè)時(shí)間戳保存。用
12、途如:通過當(dāng)前的時(shí)間戳減去產(chǎn)品入庫的時(shí)間戳就是產(chǎn)品在倉庫的保存時(shí)間。2.至于文件數(shù)據(jù)提取及修改,是通過鏈表實(shí)現(xiàn)的。對于鏈表的處理,C+和C 是有些不同的,在C+里,可以把節(jié)點(diǎn)類和鏈表類分別聲明,將頭節(jié)點(diǎn)作為鏈表類對象的成員屬性,而每個(gè)節(jié)點(diǎn)的數(shù)據(jù)域保存了產(chǎn)品類對象,指針域指向下一個(gè)節(jié)點(diǎn)。3.入庫退庫功能之外的查詢工作,需要產(chǎn)品入出退庫時(shí)間、基礎(chǔ)數(shù)據(jù)設(shè)定等信息,這些信息保存在產(chǎn)品對象中不合適,而且這樣使得產(chǎn)品對象過于龐大,但是又和產(chǎn)品對象的數(shù)據(jù)有密切關(guān)系,所以這里采用繼承的方式,日志類繼承產(chǎn)品類,需要完成的功能是將基礎(chǔ)數(shù)據(jù)設(shè)定的數(shù)據(jù)和產(chǎn)品每次入出退庫的時(shí)間寫入文件。寫入的時(shí)間需要和對應(yīng)產(chǎn)品進(jìn)行聯(lián)系
13、,所以需要獲取對應(yīng)產(chǎn)品的型號(hào)、數(shù)量、單價(jià)來計(jì)算總金額。4.C+當(dāng)自定義的頭文件過多時(shí),會(huì)有文件重復(fù)包含,即文件重復(fù)編譯的情況出現(xiàn)。這里采用宏的方式處理:#ifndef identifier#define identifier#endif5.入庫時(shí)需要判斷入庫產(chǎn)品數(shù)量是否大于自定義的貨位存儲(chǔ)能力,同樣出庫時(shí)需要判斷出庫產(chǎn)品的數(shù)量是否大于倉庫存儲(chǔ)產(chǎn)品數(shù)量。為此在入庫或出庫時(shí)通過鏈表類對象提取文件中保存的對應(yīng)型號(hào)產(chǎn)品的數(shù)量與將要入庫或出庫的產(chǎn)品數(shù)量做比較,不符合就要終止入庫或退庫。用戶使用說明1.第一次使用時(shí)需要到基礎(chǔ)數(shù)據(jù)設(shè)定模塊中設(shè)定數(shù)據(jù),這些數(shù)據(jù)在以后入出退庫時(shí)都會(huì)默認(rèn)調(diào)用。2.入庫時(shí)填寫的入庫
14、單中產(chǎn)品的成本系數(shù)不能大于基本數(shù)據(jù)設(shè)定中自定義的總體成本系數(shù)。3.當(dāng)天入庫的產(chǎn)品暫時(shí)不計(jì)存儲(chǔ)成本(該產(chǎn)品存儲(chǔ)天數(shù)為0 )。4.牢記產(chǎn)品型號(hào),倉庫的查詢功能除了“倉庫庫存分析查詢”是通過時(shí)間段查詢數(shù)據(jù),其余都是通過產(chǎn)品型號(hào)來查詢。測試結(jié)果1. 基礎(chǔ)數(shù)據(jù)設(shè)定測試2.入庫測試錯(cuò)誤處理3.出庫測試錯(cuò)誤處理4.退庫測試5.倉庫庫存查詢測試6.統(tǒng)計(jì)分析測試7.提醒預(yù)警信息測試8.倉庫臺(tái)賬測試錯(cuò)誤處理9.產(chǎn)品存儲(chǔ)成本查詢當(dāng)天入庫的產(chǎn)品由于存儲(chǔ)天數(shù)為0,無法計(jì)算存儲(chǔ)成本。為了測試改功能,將文件中該產(chǎn)品的入庫時(shí)間戳由16996修改為16990后(入庫時(shí)間修改為前六天),測試結(jié)果如下附錄/ main.cpp/ 倉
15、庫管理系統(tǒng)/ Created by xiaoka on 16/7/4./ Copyright 2016年 黃志浩. All rights reserved./#include tools.hpp#include using namespace std;void printToScreen() coutendlendl; cout倉庫管理系統(tǒng)endl - 1-基礎(chǔ)數(shù)據(jù)設(shè)定endl - 2-倉庫入庫endl - 3-倉庫出庫endl - 4-倉庫退庫endl - 5-倉庫庫存查詢endl - 6-統(tǒng)計(jì)分析endl - 7-提醒預(yù)警信息endl - 8-倉庫臺(tái)帳endl - 9-產(chǎn)品存儲(chǔ)成本查詢en
16、dl - 0-退出系統(tǒng)endl; coutendlmenu; tools *t = new tools(); switch (menu) case 1: /基本數(shù)據(jù)設(shè)定 t-baseSetting(LogsToTheFile); break; case 2: /倉庫入庫 t-addProduct(); break; case 3: /倉庫出庫 t-outProduct(); break; case 4: /倉庫退庫 t-againProduct(); break; case 5: /倉庫庫存查詢 t-wareStockAsk(); break; case 6: /統(tǒng)計(jì)分析 t-allAnaly
17、se(); break; case 7: /提醒預(yù)警 t-remindWarning(); break; case 8: /倉庫臺(tái)賬 t-wareAccount(); break; case 9: /倉庫存儲(chǔ)成本查詢 t-productForCost(); break; case 0: delete t; exit(0); break; default: cout請正確輸入菜單對應(yīng)序號(hào)endl; break; delete t; cout已返回主菜單endl; printToScreen(); return 0;/ tools.hpp/ 倉庫管理系統(tǒng)/ Created by xiaoka on
18、 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 = QuilityProdCFile.txt; /成品合格文件名const string noQuilityProdYFi
19、leName = noQuilityProdYFile.txt; /原材料不合格文件名const string QuilityProdYFileName = QuilityProdYFile.txt; /原材料合格文件名const string LogsToTheFile = logsFile.txt; /基礎(chǔ)信息設(shè)定配置文件const string ProductLogFileName = productLog.txt; /保存入出退日志信息class toolspublic: /設(shè)置基本信息 void baseSetting(string fileName); /質(zhì)檢部門檢驗(yàn)合格 stri
20、ng isQuilified(); /填寫入庫單 確認(rèn)入庫 void addProdToFile(string fileOKName,string fileNOName); /倉庫入庫入口函數(shù) void addProduct(); /填寫領(lǐng)料單銷售出庫單 void outProdFromFile(product *prodList,string fileName,string type); /倉庫出庫入口函數(shù) void outProduct(); /將退庫的貨物按合格與否分類 void OKOrNo(string fileOKName,string fileNoOKName); /退庫入口函數(shù)
21、 void againProduct(); /倉庫庫存查詢?nèi)肟?void wareStockAsk(); /統(tǒng)計(jì)分析入口 void allAnalyse(); /提醒預(yù)警 void remindWarning(); /倉庫臺(tái)賬 void wareAccount(); /產(chǎn)品存儲(chǔ)成本查詢 void productForCost();/ tools.cpp/ 倉庫管理系統(tǒng)/ Created by xiaoka on 16/7/4./ Copyright 2016年 黃志浩. All rights reserved./#include tools.hpp#include linkList.hpp#i
22、nclude product.hpp/* * 倉庫基礎(chǔ)信息設(shè)定 將設(shè)定的信息寫入文件 */void tools:baseSetting(string fileName) double maxStock,minStock,maxAbility,maxDate,costFactor; coutmaxStock; coutminStock; coutmaxAbility; coutmaxDate; coutcostFactor; fstream fout(fileName,ios:out); if (!fout) cout打開fileName失敗endl; return; foutmaxStockn
23、 minStockn maxAbilityn maxDaten costFactorn; fout.close();/* * 質(zhì)檢部門確認(rèn)合格與否 * * 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(); /填寫入庫單 if (iss=2) return; q-inToFile(fileOKName)
24、; /根據(jù)入庫單確認(rèn)入庫 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); /根據(jù)入庫單放到不合格成品倉庫 WareLogs *log = new WareLogs(); log-wirteChangeToTheFile
25、(q, ProductLogFileName, 1); delete q; /* * 倉庫入庫 入口函數(shù) */void tools:addProduct() string t; while (1) cout1-成品入庫endl 2-原材料入庫t; if (t=1) addProdToFile(QuilityProdCFileName,noQuilityProdCFileName); break; else if (t=2) addProdToFile(QuilityProdYFileName, noQuilityProdYFileName); break; cout請輸入正確序號(hào) getlin
26、kListFromTheFile(fileName); if (link-head-next=NULL) cout提取數(shù)據(jù)失敗forInLinkListForInAndOut(prodList,type); /遍歷鏈表對鏈表相應(yīng)節(jié)點(diǎn)進(jìn)行修改 link-writeNodeToTheFile(fileName); /將鏈表數(shù)據(jù)寫入文件 delete link; return;/* * 倉庫出庫 入口函數(shù) */void tools:outProduct() string is; while (1) cout1-原材料出庫endl 2-銷售出庫is; if (is=1) product *p = ne
27、w product(); p-setReceiveList(); outProdFromFile(p, QuilityProdYFileName,2); break; else if (is=2) product *p = new product(); p-setSaleWareList(); outProdFromFile(p, QuilityProdCFileName,2); break; cout輸入正確序號(hào)setOutWareList(); /填寫退庫單 outProdFromFile(p, fileOKName,3); /提取文件中數(shù)據(jù)為鏈表 根據(jù)出庫單或領(lǐng)料單修改鏈表數(shù)據(jù) 并將數(shù)據(jù)
28、重新寫入文件 else cout填寫入庫單 存入原材料倉庫不合格區(qū)setInWareList(); /填寫入庫單 p-inToFile(fileNoOKName); /* * 退庫入口函數(shù) */void tools:againProduct() string is,isOK,fileName; while (1) cout1-原材料退庫endl 2-成品退庫endl 3-銷售退庫is; if (is=1) /原材料退庫 需要知道哪個(gè)批次的貨物 OKOrNo(QuilityProdYFileName, noQuilityProdYFileName); else if (is=2) /成品退庫 需
29、要輸入:倉庫名稱、圖號(hào)、型號(hào)、數(shù)量、車間、發(fā)生日期、倉庫管理員、原因 OKOrNo(QuilityProdCFileName, noQuilityProdCFileName); else if (is=3) /銷售退庫 OKOrNo(QuilityProdCFileName, noQuilityProdCFileName); else cout請輸入正確序號(hào) ; break; /* * 倉庫庫存分析查詢?nèi)肟?*/void tools:wareStockAsk() int day; cout功能描述:根據(jù)輸入的段時(shí)間查詢倉庫發(fā)生的入出退總數(shù)量金額endlendl; coutday; WareLo
30、gs *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;/* * 統(tǒng)計(jì)分析入口 由產(chǎn)品型號(hào)搜索出產(chǎn)品分布情況(倉庫名稱貨位) 包括成品倉庫和原材料
31、倉庫 */void tools:allAnalyse() cout功能描述:由產(chǎn)品型號(hào)搜索出產(chǎn)品分布情況(倉庫名稱貨位) 包括成品倉庫和原材料倉庫endlsetProdModel(); link-getlinkListFromTheFile(QuilityProdCFileName); /將文件中的數(shù)據(jù)提取為鏈表 link-forInLinkListForLocation(prod,4); /查詢成品倉庫 delete link; link = new linkList(); link-getlinkListFromTheFile(QuilityProdYFileName); /將文件中的數(shù)據(jù)
32、提取為鏈表 link-forInLinkListForLocation(prod,5); /查詢原材料倉庫 delete prod;/* * 提醒預(yù)警信息入口 根據(jù)基本數(shù)據(jù)設(shè)定 輸出倉庫高儲(chǔ)低儲(chǔ)存儲(chǔ)期限 */void tools:remindWarning() cout功能描述:根據(jù)基本數(shù)據(jù)設(shè)定 輸出倉庫高儲(chǔ)低儲(chǔ)存儲(chǔ)期限endlreadBaseSettingFromTheFile(LogsToTheFile); if (isOK=2) return; linkList *link = new linkList(); link-getlinkListFromTheFile(QuilityProd
33、CFileName); link-forInLinkListForRemind(w,4); delete link; link = new linkList(); link-getlinkListFromTheFile(QuilityProdYFileName); link-forInLinkListForRemind(w, 5); delete link;/* * 倉庫臺(tái)賬入口 */void tools:wareAccount() cout功能描述:根據(jù)產(chǎn)品型號(hào)輸出倉庫產(chǎn)品的入、出、退明細(xì)帳endlendl; string model = ; coutmodel; WareLogs *w =
34、 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(ProductLogFileName, model, 3); delete w;/* * 產(chǎn)品存儲(chǔ)成本查詢 */void tools:pro
35、ductForCost() cout功能說明:根據(jù)產(chǎn)品型號(hào)計(jì)算該產(chǎn)品存儲(chǔ)成本endlreadBaseSettingFromTheFile(LogsToTheFile); p-setProdModel(); linkList *link = new linkList(); link-getlinkListFromTheFile(QuilityProdCFileName); link-forInLinkListForCost(p, logs,4); delete link; link = new linkList(); link-getlinkListFromTheFile(QuilityProd
36、YFileName); link-forInLinkListForCost(p, logs,5); delete link; delete p; delete logs;/ product.hpp/ 倉庫管理系統(tǒng)/ Created by xiaoka on 16/7/4./ Copyright 2016年 黃志浩. All rights reserved./#ifndef product_hpp#define product_hpp#include #include using namespace std;class productprotected: string prodModel; /貨
37、物型號(hào) double prodNum; /貨物存儲(chǔ)數(shù)量 string location; /倉庫貨位序列號(hào) double price; /產(chǎn)品單價(jià) double costNum; /成本系數(shù) string prodColor; /貨物顏色 string peopleName; /貨物庫管員 string wareName; /倉庫名稱 int intoWareDay; /入庫時(shí)間戳 int outFromWareDay; /出庫時(shí)間戳 int againToWareDay; /退庫時(shí)間戳 void print();public: product(); product(const product
38、 *p); friend class linkList; friend class wareHouse; friend class WareLogs; string getProdModel(); double getProdNum(); /數(shù)量 double getProdPrice(); /單價(jià) int setInWareList(); /填寫入庫單 void setSaleWareList(); /填寫銷售出庫單 void setReceiveList(); /填寫領(lǐng)料單 void setOutWareList(); /填寫退庫單 int inToFile(string fileName
39、); /根據(jù)入庫單確認(rèn)入庫 void setProdModel(); /填寫產(chǎn)品型號(hào) 供查詢使用 int getDayByChrono(); /計(jì)算時(shí)間戳;#endif /* product_hpp */class WareLogs:public productprivate: double maxStock; /最大存儲(chǔ)限量 double minStock; /最小存儲(chǔ)限量 double maxAbility; /最大存儲(chǔ)能力 double maxDate; /最大存儲(chǔ)期限 double costFactor; /產(chǎn)品總體存儲(chǔ)成本 string type; /1入庫 2出庫 3表示退庫 需要
40、填寫原因 string changeModel; double changeNum; double changeToatolMoney; int intoWareDay; /入庫時(shí)間戳 int outFromWareDay; /出庫時(shí)間戳 int againToWareDay; /退庫時(shí)間戳 string reason; void initSomeValueWithProd(product *prod);public: WareLogs(); friend class linkList; friend class product; /從文件中讀取基本數(shù)據(jù)設(shè)定 int readBaseSetti
41、ngFromTheFile(string fileName); /入出退庫前調(diào)用 將數(shù)據(jù)保存到對象模型中 并在該方法中將數(shù)據(jù)寫入文件 注意該方法要在prod的時(shí)間戳設(shè)置完畢后調(diào)用 void wirteChangeToTheFile(product *prod,string fileName,string type); /倉庫臺(tái)賬 根據(jù)產(chǎn)品型號(hào)輸出入出退明細(xì)賬 使用之前可以不用對數(shù)據(jù)成員設(shè)置 void readFromFileToScreen(string fileName,string model,int inOutAgainType); /輸出段時(shí)間內(nèi)倉庫發(fā)生的入出退明細(xì)賬 void rea
42、dDateFromFile(int day,string fileName,int inOutAgainType);/ product.cpp/ 倉庫管理系統(tǒng)/ Created by xiaoka on 16/7/4./ Copyright 2016年 黃志浩. All rights reserved./#include product.hpp#include #include #include product:product() prodModel = ; /貨物型號(hào) prodNum = 0.00; /貨物存儲(chǔ)數(shù)量 location = ; /倉庫貨位序列號(hào) price = 0.00; /產(chǎn)
43、品單價(jià) costNum = 0.00; /成本系數(shù) prodColor = ; /貨物顏色 peopleName = ; /貨物庫管員 wareName = ; /倉庫名稱 intoWareDay = 0; outFromWareDay = 0; againToWareDay = 0;/* * 拷貝構(gòu)造函數(shù) */product:product(const product *p) prodModel = p-prodModel; prodNum = p-prodNum; location = p-location; price = p-price; costNum = p-costNum; pr
44、odColor = p-prodColor; peopleName = p-peopleName; wareName = p-wareName; intoWareDay = p-intoWareDay; outFromWareDay = p-outFromWareDay; againToWareDay = p-againToWareDay;double product:getProdNum() return prodNum;double product:getProdPrice() return price;string product:getProdModel() return prodMo
45、del;int product:setInWareList() cout填寫入庫單endl; coutprodModel; coutprodNum; prodNum = double(prodNum); /存儲(chǔ)數(shù)量不能大于貨位的存儲(chǔ)能力 WareLogs *log = new WareLogs(); log-readBaseSettingFromTheFile(logsFile.txt); if (log-maxAbilityprodNum) cout該產(chǎn)品在貨位location的數(shù)量超過您設(shè)置的貨位存儲(chǔ)能力maxAbilityendl; cout文件寫入失敗endl; delete log;
46、 return 2; coutlocation; coutprice; price = double(price); coutcostNum; /成本系數(shù)不能大于基本數(shù)據(jù)設(shè)定中的總體成本系數(shù) if (costNumlog-costFactor) cout該產(chǎn)品成本系數(shù)不能大于您在基礎(chǔ)數(shù)據(jù)設(shè)定中設(shè)置的總體成本系數(shù)costFactorendl; delete log; return 2; costNum = double(costNum); coutprodColor; coutpeopleName; coutwareName; intoWareDay = getDayByChrono(); de
47、lete log; return 0;void product:print() coutprodModel; coutprodNum;/* * 填寫產(chǎn)品型號(hào)供查詢使用 */void product:setProdModel() coutprodModel;/* * 銷售出庫單 */void product:setSaleWareList() cout填寫銷售出庫單endl; print(); outFromWareDay = getDayByChrono();/* * 填寫領(lǐng)料單 */void product:setReceiveList() cout填寫領(lǐng)料單endl; print(); o
48、utFromWareDay = getDayByChrono();/* * 填寫退庫單 */void product:setOutWareList() cout填寫退庫單endl; print(); againToWareDay = getDayByChrono();/* * 確認(rèn)入庫 將對象所有屬性寫入文件 * * param fileName 文件名 */int product:inToFile(string fileName) fstream fout(fileName,ios:app|ios:out); if (!fout) cout打開fileName失敗endl; return 2
49、; foutprodModelnprodNumnlocationnpricencostNumnprodColornpeopleNamenwareNamenintoWareDaynoutFromWareDaynagainToWareDayn; cout文件寫入完畢endl; fout.close(); return 0;/* * 計(jì)算調(diào)用該函數(shù)時(shí)的時(shí)間戳 * * return 返回整形數(shù) 單位:天 */int product:getDayByChrono() using namespace std:chrono; typedef durationint,std:ratio days_type;
50、time_point today = time_point_cast(system_clock:now(); return today.time_since_epoch().count();/* wareLogs */WareLogs:WareLogs() maxStock = minStock = maxAbility = maxDate = costFactor = 0; type = 0; changeModel = ; changeNum = 0; changeToatolMoney = 0; reason = nohave; intoWareDay = 0; outFromWareD
51、ay = 0; againToWareDay = 0;/從文件中讀取基本數(shù)據(jù)設(shè)定int WareLogs:readBaseSettingFromTheFile(string fileName) fstream fin(fileName,ios:beg|ios:in); if (!fin) cout打開fileName失敗,請確認(rèn)已在主菜單完成基礎(chǔ)數(shù)據(jù)設(shè)定maxStockminStockmaxAbilitymaxDatecostFactor; if (maxStock = 0&minStock = 0) /說明沒有設(shè)置基本數(shù)據(jù) cout請首先返回主菜單設(shè)置基礎(chǔ)信息getProdModel();
52、changeNum = prod-getProdNum(); changeToatolMoney = prod-getProdNum()*prod-getProdPrice(); intoWareDay = prod-intoWareDay; outFromWareDay = prod-outFromWareDay; againToWareDay = prod-againToWareDay;/入出退庫前調(diào)用的方法 記錄倉庫的變化的貨物型號(hào)數(shù)量金額/1入庫 2出庫 3表示退庫需要填寫原因void WareLogs:wirteChangeToTheFile(product *prod,string
53、 fileName,string type) initSomeValueWithProd(prod); if (type = 3) cout填寫退庫原因(不多于15字)reason; fstream fout(fileName,ios:app|ios:out); if (!fout) cout打開文件fileName失敗endl; fouttypen changeModeln changeNumn changeToatolMoneyn intoWareDayn outFromWareDayn againToWareDayn reasonn; fout.close();/* * 因?yàn)椴恍枰谌罩?/p>
54、文件中修改數(shù)據(jù),為簡便起見沒有做鏈表 直接將文件中數(shù)據(jù)提取輸出 * * param fileName 文件名 * param model 產(chǎn)品型號(hào) */void WareLogs:readFromFileToScreen(string fileName,string model,int inOutAgainType) fstream fin(fileName,ios:beg|ios:in); if (!fin) cout打開文件fileName失敗temp; if (temp= |temp=) break; type = temp; finchangeModelchangeNumchangeT
55、oatolMoneyintoWareDayoutFromWareDayagainToWareDayreason; t = atoi(type.c_str(); if (changeModel=model&t=inOutAgainType) if (isHave=No) isHave = Yes; switch (inOutAgainType) case 1: cout以下是入庫信息endl; cout產(chǎn)品型號(hào) 入庫的數(shù)量 總金額 endl; break; case 2: cout以下是出庫信息endl; cout產(chǎn)品型號(hào) 出庫的數(shù)量 總金額 endl; break; case 3: cout以
56、下是退庫信息endl; cout產(chǎn)品型號(hào) 退庫的數(shù)量 總金額 退庫原因endl; break; default: break; coutchangeModel changeNum changeToatolMoney ; if (type=3) coutreasonendl; else coutendl; temp = ; if (isHave=No) cout沒有找到該產(chǎn)品; if (inOutAgainType=1) cout入庫相關(guān)信息endl; else if(inOutAgainType=2) cout出庫相關(guān)信息endl; else cout退庫相關(guān)信息endl; fin.close
57、();/* * 輸出段時(shí)間內(nèi)倉庫發(fā)生的入出退明細(xì)賬 * * param day 段時(shí)間 * param fileName 文件名 * param inOutAgainType 入出退標(biāo)識(shí)符 */void WareLogs:readDateFromFile(int day,string fileName,int inOutAgainType) fstream fin(fileName,ios:beg|ios:in); if (!fin) cout打開文件fileName失敗getDayByChrono(); /調(diào)用此方法時(shí)的時(shí)間戳 while (!fin.eof() fintemp; if (t
58、emp= |temp=) break; type = temp; finchangeModelchangeNumchangeToatolMoneyintoWareDayoutFromWareDayagainToWareDayreason; t = atoi(temp.c_str(); /將入出庫標(biāo)識(shí)符轉(zhuǎn)換為int類型 if (t=inOutAgainType&t=1) /入庫信息 if (isInHave=No) isInHave = Yes; cout以下是該時(shí)間段內(nèi)倉庫的入庫信息endl; cout產(chǎn)品型號(hào) 入庫的數(shù)量 總金額 endl; if (today - intoWareDay)
59、= day) coutchangeModel changeNum changeToatolMoneyendl; if (t=inOutAgainType&t=2) /出庫信息 if (isOutHave=No) isOutHave = Yes; cout以下是該時(shí)間段內(nèi)倉庫的出庫信息endl; cout產(chǎn)品型號(hào) 出庫的數(shù)量 總金額 endl; if (today - outFromWareDay) = day) coutchangeModel changeNum changeToatolMoneyendl; if (t=inOutAgainType&t=3) /退庫信息 if (isAgain
60、Have=No) isAgainHave = Yes; cout以下是該時(shí)間段內(nèi)倉庫的退庫信息endl; cout產(chǎn)品型號(hào) 退庫的數(shù)量 總金額 endl; if (today - againToWareDay) = day) coutchangeModel changeNum changeToatolMoneyendl; temp = ; if (isInHave=No&inOutAgainType=1) cout沒有找到該時(shí)間段內(nèi)的入庫信息endl; if (isOutHave=No&inOutAgainType=2) cout沒有找到該時(shí)間段內(nèi)的出庫信息endl; if (isAgainH
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 節(jié)流裝置調(diào)節(jié)技術(shù)要領(lǐng)
- 監(jiān)理工程師土木建筑工程中電梯工程監(jiān)理的安裝驗(yàn)收
- 某家具公司辦公家具租賃方案(規(guī)則)
- 2025年加查縣幼兒園教師招教考試備考題庫帶答案解析
- 2025年牟定縣幼兒園教師招教考試備考題庫附答案解析(奪冠)
- 2025年中南海業(yè)余大學(xué)馬克思主義基本原理概論期末考試模擬題帶答案解析(必刷)
- 2025年謝通門縣招教考試備考題庫附答案解析(奪冠)
- 2024年貞豐縣幼兒園教師招教考試備考題庫附答案解析
- 2025年西平縣招教考試備考題庫帶答案解析(奪冠)
- 2025年廣西交通職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性考試題庫附答案解析
- 2025至2030年中國移動(dòng)充電車行業(yè)市場全景評估及發(fā)展策略分析報(bào)告
- 2025年湖南省長沙市長郡教育集團(tuán)中考三模道德與法治試題
- 南京市五校聯(lián)盟2024-2025學(xué)年高二上學(xué)期期末考試英語試卷(含答案詳解)
- 云南省昆明市五華區(qū)2024-2025學(xué)年高一上學(xué)期1月期末考試地理試題(解析版)
- 人教部編版五年級(jí)語文上冊1-8單元習(xí)作作文范文 寫作指導(dǎo)
- (人教版)地理七年級(jí)下冊填圖訓(xùn)練及重點(diǎn)知識(shí)
- 二十四點(diǎn)大全
- TB-T 3263.1-2023 動(dòng)車組座椅 第1部分:一等座椅和二等座椅
- 延遲焦化操作工(中級(jí))考試(題庫版)
- 《研學(xué)旅行課程設(shè)計(jì)》課件-理解研學(xué)課程設(shè)計(jì)內(nèi)涵
- AQT 1089-2020 煤礦加固煤巖體用高分子材料
評論
0/150
提交評論