C++物品庫存管理.doc_第1頁
C++物品庫存管理.doc_第2頁
C++物品庫存管理.doc_第3頁
C++物品庫存管理.doc_第4頁
C++物品庫存管理.doc_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

信息技術(shù)系課程設(shè)計報告 課 程: 物品庫存管理 年 級: 09級 專 業(yè): 計算機應(yīng)用 姓 名: 指導(dǎo)老師: 評語:得分: 指導(dǎo)老師簽名: 二O一O年十一月三十日實驗內(nèi)容1程序功能介紹用文件系統(tǒng)實現(xiàn)的物品庫存管理程序。一種商品的品種里面包括三個品牌,以品種為單位,可以實現(xiàn)商品品種的添加、刪除、查找、顯示等功能。2課程設(shè)計要求 (1)組成商品品種的品牌不限數(shù)量,設(shè)置一個最大值(比如10),增加一個成員變量指示品牌的具體數(shù)量。商品品種的數(shù)量是每個品牌的數(shù)量之和。 (2)設(shè)計輸出每日進貨與出貨的統(tǒng)計表,要求進貨與出貨分別為兩個文本文件,清單上列有進出貨物的時間、品種描述,具體品牌的進出貨數(shù)量,如果是出貨清單,在每筆出貨的清單后還要有該次提取貨物的總價格。 (3)商品品種以品種代碼的順序存放。3程序設(shè)計思想 該設(shè)計比較復(fù)雜,要對原程序做較大的修改,首先是數(shù)據(jù)的存放形式,因為要求數(shù)據(jù)按代碼的順序存放,并且進出貨時對數(shù)據(jù)的各個組成成員都要做較大的修改。如果要用文件的形式存放,那么文件的讀寫就非常頻繁,而且要使用大量的臨時文件,因此建議使用鏈表的形式存放數(shù)據(jù),在程序開始運行時讀取固定文件中的數(shù)據(jù),程序運行時全部數(shù)據(jù)都在內(nèi)存進行操作。在程序運行結(jié)束前再將鏈表中的數(shù)據(jù)存放在原來的文件中,供下次運行程序時讀取。建議首先將文件讀取這部分程序調(diào)試好,這樣在調(diào)試程序時就不用每次都從鍵盤輸入數(shù)據(jù)了,可以節(jié)省大量的時間。同時,對鏈表中結(jié)點的操作有很多典型的程序可以參考,不同的結(jié)點只是數(shù)據(jù)部分類型不同,所以只要在上面稍加修改就可以使用。 (1)類的封裝 由于數(shù)據(jù)的存放形式使用鏈表的形式,所以對于程序的很多操作實際上都是要求對鏈表進行一系列處理。其中吧Citem類作為一個結(jié)點,因此包含了大量對鏈表進行操作的函數(shù),為了滿足程序的完整性與可讀性,應(yīng)將對鏈表操作的所有程序封裝在一起。 class Brand /品牌類 . friend class CItem; /定義品種類為友元類; class CNode /結(jié)點類 . friend class CList; /定義鏈表類為友元類; 注:省略部分詳見源程序代碼及課程設(shè)計教材提示部分 (2)程序功能菜單的設(shè)置 程序主題采用菜單選項的形式,輸入相應(yīng)的菜單選項后程序可以反復(fù)運行,而其中還要求3.4.5.6.項各有一個菜單,分別是:按照商品品種名稱和按照商品代碼進行操作。 &物品庫存管理系統(tǒng)& * 1.添加商品品種 2.顯示商品品種 3.查詢商品 4.刪除商品 5.商品出庫 6.商品進庫 0.退出系統(tǒng) *4設(shè)計中所負責的部分商品的出庫與入庫部分int CItem:SetItem(int n) /置品種數(shù)據(jù),正確返回1,當n為1時,是新進貨物,輸出至出清單文件coutn輸入商品名稱:;Flush(cin);cin.getline(Item_name,20);coutItem_code;coutn輸入商品顏色:;Flush(cin);cin.getline(colour,20);coutn輸入品牌數(shù):(不超過MAXnBrnd;/循環(huán)實現(xiàn)品牌數(shù)據(jù)的輸入,count為商品總數(shù)for(int i=0,count=0;inBrnd;i+)coutn輸入品牌i+1的數(shù)據(jù)n;coutn輸入品牌名稱:;Flush(cin);cin.getline(brndi.brnd_name,20);coutbrndi.Brand_code;coutbrndi.quantity;coutbrndi.brnd_price;count+=brndi.quantity;quantity=count;if(n=1)ofstream file(進貨清單.txt,ios:out|ios:ate);if(!file)cout錯誤,不能打開文件.;getch();exit(1);timer=time(NULL);filectime(&timer);file品種t代碼t顏色n;fileItem_nametItem_codetcolourn;file品牌t代碼t數(shù)量t價格n;for(int i=0;inBrnd;i+)filebrndi.brnd_nametbrndi.Brand_codetbrndi.quantitytbrndi.brnd_pricen;filen;file.close();return 1; 此函數(shù)的兩個功能:第一個是在添加商品時從鍵盤輸入商品的各種數(shù)據(jù),調(diào)用這個功能時利用n的缺省值,在調(diào)用時不給n賦值;第二個是在進貨時如果進的是新的品種,那么也要從鍵盤輸入這個品種的各種數(shù)據(jù),這部分與第一個功能相同,但是進貨要輸出進貨清單,所以進貨功能調(diào)用該函數(shù)時n設(shè)置為1,函數(shù)在運行時增加一個判斷語句,若n為1時,將所鍵入的數(shù)據(jù)輸出至進貨清單。void CItem:Show()/顯示品種數(shù)據(jù)cout品種t代碼t顏色n;coutItem_nametItem_codetcolourn;cout品牌t代碼t數(shù)量t價格n;for(int i=0;inBrnd;i+)coutbrndi.brnd_nametbrndi.Brand_codetbrndi.quantitytbrndi.brnd_pricen;coutnnflush;system(pause);coutn;這個函數(shù)也是與出貨功能有關(guān),與InModify()的函數(shù)類似。因為是庫中的商品出貨,所以商品品種必須存在,若不存在,則輸出提示信息,出貨失敗。還有一種可能是商品品種曾經(jīng)存在,但已經(jīng)全部出完了,這時,該品種的各種數(shù)據(jù)還存在,只是數(shù)量為零。所以,在函數(shù)開始執(zhí)行時要判斷庫存量是否為零,若為零,則輸出提示信息,出貨失敗。在出貨成功結(jié)束時同樣要將本品種的各種品牌的出貨數(shù)據(jù)輸出到出貨清單中。同樣,該函數(shù)也是對鏈表中所存在的結(jié)點的數(shù)據(jù)部分的修改。void CItem:OutModify()/出貨,修改結(jié)點中的數(shù)據(jù)部分int choice,count,chuhuo,price=0;/chuhuo為出貨量,price為總價格int *num;num=new intnBrnd;if(quantity=0)cout數(shù)量為0.;exit(1);for(int i=0;inBrnd;i+)/儲存原來的數(shù)量numi=brndi.quantity;cout品牌t代碼t數(shù)量t價格n;for(i=0;inBrnd;i+)couti+1.brndi.brnd_nametbrndi.Brand_codetbrndi.quantitytbrndi.brnd_pricen;coutnn;coutchoice;while(choice=1&choice=nBrnd)coutcount;while(countbrndchoice-1.quantity)coutcount;brndchoice-1.quantity-=count;coutchoice;ofstream file(出貨清單.txt,ios:out|ios:ate);if(!file)cout錯誤,不能打開文件.;getch();exit(1);timer=time(NULL);filectime(&timer);file品種t代碼t顏色n;fileItem_nametItem_codetcolournn;file品牌t代碼t價格t出貨量n;for(i=0;inBrnd;i+)if(chuhuo=numi-brndi.quantity)price=chuhuo*brndi.brnd_price;filebrndi.brnd_nametbrndi.Brand_codetbrndi.brnd_pricetchuhuon;file總價格為:pricenn;delete num;file.close();InModify()同樣也與進貨功能有關(guān)。因為所進的品種可能是也有的品種,只是增加其中的數(shù)量而已。所以,在輸入進貨品種或品種代碼時要判斷是否是庫中已有的品種,若是就調(diào)用這個函數(shù),只從鍵盤輸入具體的品牌數(shù)量或新增品牌數(shù)據(jù)即可,而不用在鍵入品種的各種數(shù)據(jù),同時,新鍵入的各種數(shù)據(jù)也輸出到進貨清單。實際上該函數(shù)是對鏈表中所存在的結(jié)點的數(shù)據(jù)部分的修改。此函數(shù)先判斷出貨量是不是大于庫存量,如果大于將顯示“庫存不足,重新輸入”。如果小于的話將會繼續(xù)程序,通過brndchoice-1.quantity-=count;把原有量減去省下剩余量。void CItem:InModify()/已有商品,再次進貨,修改結(jié)點中的數(shù)據(jù)部分char name20;char choice;int count,jinhuo=0;int prenBrnd=nBrnd; /原先品牌數(shù)int n=1;/用于判斷是否繼續(xù)進貨int flag=0;/用于判斷是否新品牌int * num;num=new intprenBrnd;for(int i=0;inBrnd;i+)/儲存原來的數(shù)量numi=brndi.quantity;while(n)coutnn輸入品牌名稱:;Flush(cin);cin.getline(name,20);for(int i=0;inBrnd;i+)if(strcmp(brndi.brnd_name,name)=0)coutcount;brndi.quantity+=count;quantity+=count;flag=1;break;if(flag=0)strcpy(brndnBrnd.brnd_name,name);coutbrndnBrnd.Brand_code;coutbrndnBrnd.quantity;coutbrndnBrnd.brnd_price;quantity+=brndnBrnd.quantity;nBrnd+;coutchoice;if(choice=y|choice=Y)n=1;else n=0;ofstream file(進貨清單.txt,ios:out|ios:ate);if(!file)cout錯誤,不能打開文件.;getch();exit(1);timer=time(NULL);filectime(&timer);file品種t代碼t顏色n;fileItem_nametItem_codetcolournn;file品牌t代碼t價格t進貨量n;for(i=0;iprenBrnd;i+)if(jinhuo=brndi.quantity-numi)filebrndi.brnd_nametbrndi.Brand_codetbrndi.brnd_pricetjinhuoprenBrnd)for(i=prenBrnd;inBrnd;i+)filebrndi.brnd_nametbrndi.Brand_codetbrndi.brnd_pricetbrndi.quantityn;filein_avail(); return stream.ignore(chars_to_skip);2. 怎樣實現(xiàn)按任意鍵回到主菜單。為了使程序的可讀性和使用的方便性更好,設(shè)計程序時,打算增加此功能。在設(shè)計過程中,試圖通過一段程序?qū)崿F(xiàn),但始終都要輸入一個字符后按回車鍵才行,表面上已經(jīng)實現(xiàn)了此功能,但其實并沒有達到預(yù)期的效果。過了幾天,在網(wǎng)上查找相關(guān)資料,終于在別人設(shè)計的一個小程序里面找到代碼,原來只需要在利用庫函數(shù)里面的一函數(shù)system(),當然這里要包含頭文件dos.h,程序中加入system(“pause”)即可達到要求。3.為保證程序界面的美觀,如何清屏?在圖書館查閱了有關(guān)方面的書籍和文獻,利用網(wǎng)絡(luò)資源,使用函數(shù)system(cls)即可。 程序完整代碼 #include#include#include#include#include#include#include#include#include /exit(1)time_t timer;inline istream & Flush(istream & stream) /清除儲存器中數(shù)據(jù)stream.clear();int chars_to_skip=stream.rdbuf()-in_avail();return stream.ignore(chars_to_skip);#define MAX 10 /運用宏定義,規(guī)定品牌數(shù)最大為10class Brand /品牌類private:charbrnd_name20;/品牌名稱intBrand_code;/品牌代號intquantity;/數(shù)量floatbrnd_price;/價格public:Brand()quantity=0;strcpy(brnd_name,0);friend class CItem; /定義友元類;class CItem /品種類private:char Item_name10;/品種名稱int Item_code;/品種代號char colour10;/顏色int quantity;/數(shù)量Brand brndMAX;/最多MAX個品牌int nBrnd;/品牌的數(shù)量(MAX)public:CItem() strcpy(Item_name,0);quantity=0;nBrnd=0; /缺省構(gòu)造函數(shù)CItem(char *name)strcpy(Item_name,name);Item_code=0; /用品種名稱構(gòu)造CItem(int code)Item_code=code;strcpy(Item_name,0); /用品種代碼構(gòu)造int SetItem(int n=0); /置品種數(shù)據(jù),正確返回1,當n為1時,是新進貨物,輸出至出清單文件char * GetItemName()return Item_name; /返回品種名int GetItemCode()return Item_code; /返回品種代碼int Compare(CItem &); /比較品種名稱,供查找用,比較結(jié)果為1,0int CompareCode(CItem &); /比較品種代碼,比較結(jié)果為1,0void Show(); /顯示品種數(shù)據(jù)void OutModify(); /出貨,修改結(jié)點中的數(shù)據(jù)部分void InModify(); /已有商品,再次進貨,修改結(jié)點中的數(shù)據(jù)部分;int CItem:Compare(CItem & pitem) /比較品種名稱,供查找用,比較結(jié)果為1,0int n;n=strcmp(Item_name,pitem.Item_name);/兩個字符串相等,n=0if(n!=0) return 0;else return 1;int CItem:CompareCode(CItem & pitem) /比較品種代碼,比較結(jié)果為1,0return (Item_code=pitem.Item_code);int CItem:SetItem(int n) /置品種數(shù)據(jù),正確返回1,當n為1時,是新進貨物,輸出至出清單文件coutn輸入商品名稱:;Flush(cin);cin.getline(Item_name,20);coutItem_code;coutn輸入商品顏色:;Flush(cin);cin.getline(colour,20);coutn輸入品牌數(shù):(不超過MAXnBrnd;/循環(huán)實現(xiàn)品牌數(shù)據(jù)的輸入,count為商品總數(shù)for(int i=0,count=0;inBrnd;i+)coutn輸入品牌i+1的數(shù)據(jù)n;coutn輸入品牌名稱:;Flush(cin);cin.getline(brndi.brnd_name,20);coutbrndi.Brand_code;coutbrndi.quantity;coutbrndi.brnd_price;count+=brndi.quantity;quantity=count;if(n=1)ofstream file(進貨清單.txt,ios:out|ios:ate);if(!file)cout錯誤,不能打開文件.;getch();exit(1);timer=time(NULL);filectime(&timer);file品種t代碼t顏色n;fileItem_nametItem_codetcolourn;file品牌t代碼t數(shù)量t價格n;for(int i=0;inBrnd;i+)filebrndi.brnd_nametbrndi.Brand_codetbrndi.quantitytbrndi.brnd_pricen;filen;file.close();return 1;void CItem:Show()/顯示品種數(shù)據(jù)cout品種t代碼t顏色n;coutItem_nametItem_codetcolourn;cout品牌t代碼t數(shù)量t價格n;for(int i=0;inBrnd;i+)coutbrndi.brnd_nametbrndi.Brand_codetbrndi.quantitytbrndi.brnd_pricen;coutnnflush;system(pause);coutn;void CItem:OutModify()/出貨,修改結(jié)點中的數(shù)據(jù)部分int choice,count,chuhuo,price=0;/chuhuo為出貨量,price為總價格int *num;num=new intnBrnd;if(quantity=0)cout數(shù)量為0.;exit(1);for(int i=0;inBrnd;i+)/儲存原來的數(shù)量numi=brndi.quantity;cout品牌t代碼t數(shù)量t價格n;for(i=0;inBrnd;i+)couti+1.brndi.brnd_nametbrndi.Brand_codetbrndi.quantitytbrndi.brnd_pricen;coutnn;coutchoice;while(choice=1&choice=nBrnd)coutcount;while(countbrndchoice-1.quantity)coutcount;brndchoice-1.quantity-=count;coutchoice;ofstream file(出貨清單.txt,ios:out|ios:ate);if(!file)cout錯誤,不能打開文件.;getch();exit(1);timer=time(NULL);filectime(&timer);file品種t代碼t顏色n;fileItem_nametItem_codetcolournn;file品牌t代碼t價格t出貨量n;for(i=0;inBrnd;i+)if(chuhuo=numi-brndi.quantity)price=chuhuo*brndi.brnd_price;filebrndi.brnd_nametbrndi.Brand_codetbrndi.brnd_pricetchuhuon;file總價格為:pricenn;delete num;file.close();void CItem:InModify()/已有商品,再次進貨,修改結(jié)點中的數(shù)據(jù)部分char name20;char choice;int count,jinhuo=0;int prenBrnd=nBrnd; /原先品牌數(shù)int n=1;/用于判斷是否繼續(xù)進貨int flag=0;/用于判斷是否新品牌int * num;num=new intprenBrnd;for(int i=0;inBrnd;i+)/儲存原來的數(shù)量numi=brndi.quantity;while(n)coutnn輸入品牌名稱:;Flush(cin);cin.getline(name,20);for(int i=0;inBrnd;i+)if(strcmp(brndi.brnd_name,name)=0)coutcount;brndi.quantity+=count;quantity+=count;flag=1;break;if(flag=0)strcpy(brndnBrnd.brnd_name,name);coutbrndnBrnd.Brand_code;coutbrndnBrnd.quantity;coutbrndnBrnd.brnd_price;quantity+=brndnBrnd.quantity;nBrnd+;coutchoice;if(choice=y|choice=Y)n=1;else n=0;ofstream file(進貨清單.txt,ios:out|ios:ate);if(!file)cout錯誤,不能打開文件.;getch();exit(1);timer=time(NULL);filectime(&timer);file品種t代碼t顏色n;fileItem_nametItem_codetcolournn;file品牌t代碼t價格t進貨量n;for(i=0;iprenBrnd;i+)if(jinhuo=brndi.quantity-numi)filebrndi.brnd_nametbrndi.Brand_codetbrndi.brnd_pricetjinhuoprenBrnd)for(i=prenBrnd;inBrnd;i+)filebrndi.brnd_nametbrndi.Brand_codetbrndi.brnd_pricetbrndi.quantityn;fileShow(); /輸出結(jié)點中的數(shù)據(jù)CItem * GetData() return pData;/返回下一結(jié)點的指針friend class CList;/定義鏈表類為友元類;class CList/定義鏈表類protected:CNode * pHead;/鏈表頭結(jié)點指針public:CList() pHead=0; CList() DeleteList(); void AddNode(CNode * pnode);/首部添加結(jié)點CNode * DeleteNode(CNode *);/刪除一個指定的結(jié)點,返回該結(jié)點的指針CNode * LookUp(CItem &);/*查找一個指定的數(shù)據(jù),返回該數(shù)據(jù)所在結(jié)點在鏈表中的指針,若未找到返回0 */void ShowList();/打印整個鏈表void DeleteList();/刪除整個鏈表CNode * GetListHead()return pHead;/返回鏈表首結(jié)點CNode * GetListNextNode(CNode *);/返回鏈表指定結(jié)點的下一個結(jié)點void Insert(CNode *);/按代碼的順序插入一個結(jié)點;void CList:AddNode(CNode *pnode)/首部添加結(jié)點if(pHead=0)pHead=pnode;pnode-pNext=0;else pnode-pNext=pHead;pHead=pnode;CNode * CList:DeleteNode(CNode *pnode)/刪除一個指定的結(jié)點,返回該結(jié)點的指針if(pnode=pHead)/刪除的結(jié)點是鏈表的首結(jié)點pHead=pnode-pNext;pnode-pNext=0;elseCNode *p=pHead;while(p-pNext!=pnode)p=p-pNext;p-pNext=pnode-pNext;/刪除結(jié)點后將前后兩個結(jié)點再連結(jié)起來pnode-pNext=0;return(pnode);CNode * CList:LookUp(CItem &pitem)/*查找一個指定的數(shù)據(jù),返回該數(shù)據(jù)所在結(jié)點在鏈表中的指針,若未找到返回0 */CNode * pn=pHead;if(pitem.GetItemCode()=0)while(pn)if(pn-pData-Compare(pitem) return pn;/按品種名稱查找pn=pn-pNext;elsewhile(pn)if(pn-pData-CompareCode(pitem) return pn;/按品種代碼查找pn=pn-pNext;return 0;void CList:ShowList()/打印整個鏈表CNode * p=pHead;while(p)p-pData-Show();p=p-pNext;void CList:DeleteList()/刪除整個鏈表CNode * p,* q;p=pHead;while(p)delete p-pData;q=p;p=p-pNext;delete q;CNode * CList:GetListNextNode(CNode *pnode)/返回鏈表指定結(jié)點的下一個結(jié)點return pnode-pNext;void CList:Insert(CNode * pnode)/按代碼的順序插入一個結(jié)點CNode * p1,* p2;if(pHead=0)pHead=pnode;pnode-pNext=0;else if(pHead-pData-GetItemCode()=pnode-pData-GetItemCode()pnode-pNext=pHead;pHead=pnode; else p2=p1=pHead;while(p2-pNext&p2-pData-GetItemCode()pData-GetItemCode()p1=p2;p2=p2-pNext;if(p2-pData-GetItemCode()pData-GetItemCode()p2-pNext=pnode;pnode-pNext=0;elsepnode-pNext=p2;p1-pNext=pnode; void main()int choice;CList list;CItem *p;CNode *pn;char name20;/按商品名稱操作時用于輸入名稱char str20;int code;/按商品代碼操作時用于輸入代碼ifstream infile(TIS.txt,ios

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論