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

下載本文檔

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

文檔簡介

1、實驗容 1程序功能介紹用文件系統(tǒng)實現(xiàn)的物品庫存管理程序。一種商品的品種里面包括三個品牌,以品種為單位,可以實現(xiàn)商品品種的添加、 刪除、查找、顯示等功能。2 課程設計要求(1 )組成商品品種的品牌不限數(shù)量,設置一個最大值(比方10),增加一個成員變量指示品牌的具體數(shù)量。商品品種的數(shù)量是每個品牌的數(shù)量之和。(2) 設計輸出每日進貨與出貨的統(tǒng)計表,要求進貨與出貨分別為兩個文本文件,清單上列有進出貨物的時間、品種描 述,具體品牌的進出貨數(shù)量,如果是出貨清單,在每筆出貨的清單后還要有該次提取貨物的總價格。(3) 商品品種以品種代碼的順序存放。 3程序設計思想該設計比擬復雜,要對原程序做較大的修改,首先是

2、數(shù)據(jù)的存放形式,因為要求數(shù)據(jù)按代碼的順序存放,并且進出貨時 對數(shù)據(jù)的各個組成成員都要做較大的修改。如果要用文件的形式存放,那么文件的讀寫就非常頻繁,而且要使用大量的臨時 文件,因此建議使用鏈表的形式存放數(shù)據(jù),在程序開始運行時讀取固定文件中的數(shù)據(jù),程序運行時全部數(shù)據(jù)都在存進行操作。在程序運行完畢前再將鏈表中的數(shù)據(jù)存放在原來的文件中,供下次運行程序時讀取。建議首先將文件讀取這局部程序調(diào)試好,這樣在調(diào)試程序時就不用每次都從鍵盤輸入數(shù)據(jù)了,可以節(jié)省大量的時間。同時,對鏈表中結(jié)點的操作有很多典型的程序可 以參考,不同的結(jié)點只是數(shù)據(jù)局部類型不同,所以只要在上面稍加修改就可以使用。(1)類的封裝由于數(shù)據(jù)的存

3、放形式使用鏈表的形式,所以對于程序的很多操作實際上都是要求對鏈表進行一系列處理。其中吧Citem類作為一個結(jié)點,因此包含了大量對鏈表進行操作的函數(shù),為了滿足程序的完整性與可讀性,應將對鏈表操作的所有程序封 裝在一起。class Brand / 品牌類frie nd class CItem; /定義品種類為友元類;class CNode / 結(jié)點類friend class CList; /定義鏈表類為友元類;注:省略局部詳見源程序代碼與課程設計教材提示局部(2)程序功能菜單的設置程序主題采用菜單項選擇項的形式,輸入相應的菜單項選擇項后程序可以反復運行,而其中還要求3456 項各有一個菜單,分別是

4、:按照商品品種名稱和按照商品代碼進行操作。& 物品庫存管理系統(tǒng)&*1. 添加商品品種2. 顯示商品品種3. 查詢商品4. 刪除商品5. 商品出庫6. 商品進庫0.退出系統(tǒng)*4. 設計中所負責的局部商品的出庫與入庫局部int Cltem:Setltem(int n) /置品種數(shù)據(jù),正確返回1,當n為1時,是新進貨物,輸出至出清單文件1 / 13cout<<"n輸入商品名稱:";Flush(ci n);cin. getl in e(ltem_ name,20);cout<<"n輸入商品代碼:";cin> >

5、ltem_code;cout<<"n輸入商品顏色:";Flush(ci n);cin. getl in e(colour,20); cout<<"n輸入品牌數(shù):"<<"(不超過"<<MAX<<"個)"cin»nBrnd;/循環(huán)實現(xiàn)品牌數(shù)據(jù)的輸入,count為商品總數(shù)for(i nt i=0,co un t=0;i< nBrn d;i+)cout<<"n 輸入品牌"<<i+1<<&quo

6、t;的數(shù)據(jù) n"cout<<"n輸入品牌名稱:"Flush(ci n);cin. getl in e(br ndi.br nd_n ame,20);cout<<"n輸入品牌代碼:"cin»brn di.Bra nd_code;cout<<"n輸入數(shù)量:"cin»brn di.qua ntity;cout<<"n輸入價格:"cin»brn di.br nd_price;coun t+=br ndi.qua ntity;qua nt

7、ity=co unt;if(n=1)ofstream file("進貨清單.txt",ios:out|ios:ate);if(!file)cout<<"錯誤,不能翻開文件.";getch();exit(1);timer=time(NULL);file<<ctime(&timer);file<<" 品種"<<"t"<<" 代碼"<<"t"<<" 顏色"<<

8、"n"file<<Item_ name<<"t"<<ltem_code<<"t"<<colour<<"n" file<<"品牌"<<"t"<<"代碼"<<"t"<<"數(shù)量"<<"t"<<"價格"<<"n

9、"for(i nt i=0;i <nBrn d;i+)file<<br ndi.br nd_n ame<<"t"<<br ndi.Bra nd_code<<"t"<<brindi.qua ntity<<"t"<<brindi.br nd_price<<" n"file<<"n"file.close();此函數(shù)的兩個功能:第一個是在添加商品時從鍵盤輸入商品的各種數(shù)據(jù),調(diào)用這個

10、功能時利用n的缺省值,在調(diào)用時不給 n賦值;第二個是在進貨時如果進的是新的品種,那么也要從鍵盤輸入這個品種的各種數(shù)據(jù),這局部與第一個功能相同,但是進 貨要輸出進貨清單,所以進貨功能調(diào)用該函數(shù)時n設置為1函數(shù)在運行時增加一個判斷語句,假設n為1時,將所鍵入的數(shù)據(jù)輸出至進貨清單。void Cltem:Show()顯示品種數(shù)據(jù)cout<<"品種"<<%"<<" 代碼"<<"t"<<" 顏色"<<"n"cout<&l

11、t;ltem_ name<<"t"<<ltem_code<<"t"<<colour<<"n"cout<<"品牌"<<"t"<<"代碼"<<"t"<<"數(shù)量"<<"t"<<"價格"<<"n"for(i nt i=0;i <

12、;nBrn d;i+)cout<<br ndi.br nd_n ame<<"t"<<br ndi.Bra nd_code<<"t"<<br ndi.qua ntity<<"t"<<br ndi.br nd_price<<"n"- - -cout<<"nn "<<flush;system("pause");cout<<"n"這個

13、函數(shù)也是與出貨功能有關,與InM odify()的函數(shù)類似。因為是庫中的商品出貨,所以商品品種必須存在,假設不存在,那么輸出提示信息,出貨失敗。還有一種可能是商品品種曾經(jīng)存在,但已經(jīng)全部出完了,這時,該品種的各種數(shù)據(jù)還存在,只 是數(shù)量為零。所以,在函數(shù)開始執(zhí)行時要判斷庫存量是否為零,假設為零,那么輸出提示信息,出貨失敗。在出貨成功完畢時同 樣要將本品種的各種品牌的出貨數(shù)據(jù)輸出到出貨清單中。同樣,該函數(shù)也是對鏈表中所存在的結(jié)點的數(shù)據(jù)局部的修改。void Cltem:OutModify()出貨,修改結(jié)點中的數(shù)據(jù)局部int choice,co un t,chuhuo,price=0;/chuhuo為

14、出貨量,price為總價格int *num;num=new in t nBrn d;if(qua ntity=O)cout<<"數(shù)量為 0."exit(1);for(int i=0;i<nBrnd;i+)/ 儲存原來的數(shù)量nu mi=br ndi.qua ntity;cout<<"品牌"<<"t"<<" 代碼"<<"t"<<" 數(shù)量 "<<"t"<<&qu

15、ot;價格"<<"n"for(i=0;i< nBrn d;i+)cout<<i+1<<"."<<br ndi.br nd_n ame<<"t"<<br ndi.Bra nd_code<<"t"<<br ndi.qua ntity<<"t"<<br ndi.br nd_price<<"n"cout<<"nn&q

16、uot;cout<<"輸入數(shù)字選擇出貨商品或按0退出.n"cin> >choice;while(choice>=1 &&choice <=nBrnd)cout<<"輸入商品數(shù)量:";cin> >co unt;while(co un t>br ndchoice-1.qua ntity)cout<<"庫存缺乏,重新輸入:"cin> >co unt;brn dchoice-1.qua ntity-=co unt;cout<<

17、"出貨成功,按 0退出或按數(shù)字繼續(xù)出貨.n"cin> >choice;ofstreamfile("出 貨 清單.txt",ios:out|ios:ate);if(!file)cout<<"錯誤,不能翻開文件.";getch(); exit(1);timer=time(NULL);file<<ctime(&timer);file<<" 品種"<<"t"<<" 代碼"<<"t&q

18、uot;<<" "<<"n"file<<Item_ name<<"t"<<ltem_code<<"t"<<col our<<"nn"file<<" 品牌"<<"t"<<" 代碼"<<"t"<<" "<<"t"&l

19、t;<"出貨量"<<"n"for(i=0;i <nBrn d;i+)if(chuhuo=nu mi-br ndi.qua ntity)price=chuhuo*br ndi.br nd_price;file<<br ndi.br nd_n ame<<"t"<<brn di.Bra nd_co de<<"t"cout<<"nn輸入品牌名稱:";顏色Flush(cin);cin. getl ine(n ame,20)

20、;for(i nt i=0;i <nBrn d;i+)價格if(strcmp(brndi.brnd _n ame, name)=0) -cout<<"nn輸入進貨數(shù)量 cin> >co unt;brn di.qua ntity+=co unt; qua ntity+=co unt;flag=1;break;<<brn di.brind_price<<"t"<<chuhuo<<"n" -file<<"總價格為:"<<price

21、<<"nn"delete num; file.close();In Modify ()同樣也與進貨功能有關。因為所進的品種 可能是也有的品種,只是增加其中的數(shù)量而已。所以,在輸 入進貨品種或品種代碼時要判斷是否是庫中已有的品種,假設 是就調(diào)用這個函數(shù),只從鍵盤輸入具體的品牌數(shù)量或新增品 牌數(shù)據(jù)即可,而不用在鍵入品種的各種數(shù)據(jù),同時,新鍵入 的各種數(shù)據(jù)也輸出到進貨清單。實際上該函數(shù)是對鏈表中所 存在的結(jié)點的數(shù)據(jù)局部的修改。此函數(shù)先判斷出貨量是不是 大于庫存量,如果大于將顯示“庫存缺乏,重新輸入。如 果小于的話將會繼續(xù)程序,通過 brndchoice-1.qua n

22、tity-=cou nt;把原有量減去省下剩余量。void Cltem:l nM odify() 結(jié)點中的數(shù)據(jù)局部char n ame20; char choice; int coun t,ji nhuo=0; int prenBrnd=nBrnd; int n=1;int flag=0; int * num;num=new in tpre nBrn d; for(i nt i=0;i< nBrn d;i+) 原來的數(shù)量已有商品,再次進貨,修改/儲存/ 原先品牌數(shù)/用于判斷是否繼續(xù)進貨/用于判斷是否新品牌nu mi=br ndi.qua ntity; while( n)if(flag=0

23、)strcpy(br ndnBrn d.br nd_n ame ,n ame); cout<<"n輸入品牌代碼:" cin»brndnBrn d.Bra nd_code; cout<<"n輸入數(shù)量:"cin»brndnBrn d.qua ntity; cout<<"n輸入價格:"cin»brndnBrn d.br nd_price;qua ntity+=br ndnBrn d.qua ntity; nBrn d+; cout<<"n 繼續(xù)進貨:y/

24、n "cin> >choice;if(choice='y'|choice='Y')n=1;else n=0;Ofstreamfile(進貨清單.txt",ios:out|ios:ate);if(!file)cout<<"錯誤,不能翻開文件.";getch();exit(1);timer=time(NULL);file<<ctime(&timer);file<<"品種"<<"t"<<"代碼&quo

25、t;<<"t"<<"顏色"<<"n"file<<ltem_ n ame<<"t"<<ltem_code<<"t"<<colour<<"nn"file<<" 品 牌"<<"t"<<" 代碼"<<"t"<<" 價格 "

26、;<<"t"<<"進貨量"<<"n"for(i=0;i<pre nBrn d;i+)if(jin huo=br ndi.qua ntity-nu mi)file<<brn di.brind_n ame<<"t"<<brn di.Bra nd_co de<<"t"<<br ndi.brn d_price<<"t"<<ji nhuo<<&quo

27、t;n"if(nBrn d>pre nBrnd)5. 課程設計遇到的技術問題與解決思路 for(i=pre nBrn d;i <nBrn d;i+) file<<br ndi.br nd_n ame<<"t"<<brn di.Bra nd_co de<<"t"<<br ndi.br nd_price<<"t"<<br ndi.qua ntity<<" n"file<<"nn&q

28、uot; delete num;file.close();1. 在實際操作中,可能會因錯誤而輸入錯誤的字符,這時可能會對程序的正常運行造成影響,所以必須刷新輸入流去除儲存器中的數(shù)據(jù),經(jīng)過翻閱C語言方面的資料發(fā)現(xiàn)使用以下函數(shù)就可實現(xiàn)。in li ne istream & Flush(istream & stream)stream.clear();int chars_to_skip=stream.rdbuf()->in_avail();retur n stream.ig no re(chars_to_skip);2. 怎樣實現(xiàn)按任意鍵回到主菜單。為了使程序的可讀性和使用的方便

29、性更好,設計程序時,打算增加此功能。在設計過程中,試圖通過一段程序?qū)崿F(xiàn),但 始終都要輸入一個字符后按回車鍵才行,外表上已經(jīng)實現(xiàn)了此功能,但其實并沒有到達預期的效果。過了幾天,在網(wǎng)上查找 相關資料,終于在別人設計的一個小程序里面找到代碼,原來只需要在利用庫函數(shù)里面的一函數(shù)system(),當然這里要包含頭文件dos.h,程序中參加system( “pause)即可到達要求。3. 為保證程序界面的美觀,如何清屏?在圖書館查閱了有關方面的書籍和文獻,利用網(wǎng)絡資源,使用函數(shù)system("cls") 即可。stream.clear(); int程序完整代碼#in clude<

30、iostream.h>#in clude<c oni o.h>#in clude<ioma nip.h>#in clude<fstream.h>chars_to_skip=stream.rdbuf( )->in _avail();retur n stream.ig no re(chars_to_skip); #in clude<stri ng.h>#in clude<stdlib.h>#in clude<time.h>#in clude<dos.h>#in clude<process.h>

31、;exit(1)time_t timer;in li neistream & Flush(istream/去除儲存器中數(shù)據(jù)& stream)#defi ne MAX 10品牌數(shù)最大為10/class Brand / 品牌類 private:運用宏定義,規(guī)定charbrnd_ name20;/品牌名稱intBran d_code;/品牌代號intqua ntity;/數(shù)量float brnd_price;/ 價格public:Bran d()qua ntity=O;strcpy(br nd_n ame,"0");frie ndclassCltem;/疋義友兀類

32、;ClassCltem /品種類iprivate:char ltem_ name10;/品種名稱int ltem_code;/品種代號char colour10;/顏色int qua ntity;/數(shù)量Brand brndMAX;/最多皿必品牌int nBrnd;/品牌的數(shù)量(<MAX)public:Cltem() strcpy(ltem_name,"O");qua ntity=0;n Brnd=0; /缺省構造函數(shù)Cltem(char*n ame)strcpy(ltem_ name ,n ame);ltem_code=0;/用品種名稱構造Cltem(i ntcode

33、)ltem_code=code;strcpy(ltem_ name,"0");/用品種代碼構造int Setltem(int n=0);/置品種數(shù)據(jù),正確返回1,當n為1時,是新進貨物,輸出至出清單文件char *GetltemName()retur nltem_ name;/返回品種名intGetltemCode()retur nltem_code;/返回品種代碼int Compare(Cltem &);/比擬品種名稱,供查找用,比擬結(jié)果為1, 0int CompareCode(Cltem &);/比擬品種代碼,比擬結(jié)果為1,0void Show();/顯

34、示品種數(shù)據(jù)void OutModify();/出貨,修改結(jié)點中的數(shù)據(jù)局部void ln Modify();/已有商品,再次進貨,修改結(jié)點中的數(shù)據(jù)局部;int Cltem:Compare(Cltem & pitem) /比 較品種名稱,供查找用,比擬結(jié)果為1,0int n;n=strcmp(ltem_name,pitem.ltem_name);兩個字符串相等,n=0if(n!=0) return 0;else return 1;int Cltem:CompareCode(Cltem & pitem) / 比擬品種代碼,比擬結(jié)果為1, 0retur n (ltem_code=pit

35、em.ltem_code); - -int Cltem:Setltem(i nt n) /置品種數(shù)據(jù),正確返回1,當n為1時,是新進貨物,輸出至出清單文 件 cout<<"n 輸入商品名稱:"Flush(ci n);cin. getl in e(ltem_ name,20); cout<<"n輸入商品代碼:"cin> >ltem_code; cout<<"n輸入商品顏色:"Flush(ci n);cin. getl in e(colour,20); cout<<"n

36、 輸入 品牌數(shù):"<<"( 不超過"<<MAX<<" 個)"cin»nBrnd;/循環(huán)實現(xiàn)品牌數(shù)據(jù)的輸入,count為商品總數(shù)for(i nt i=0,co un t=0;i <nBrn d;i+)cout<<"n 輸入品牌"<<i+1<<"的數(shù)據(jù) n" cout<<"n輸入品牌名稱:"Flush(c in);cin. getl in e(br ndi.br nd_n ame,20);

37、cout<<"n輸入品牌代碼:" cin»brn di.Bra nd_code; cout<<"n輸入數(shù)量:"cin»brn di.qua ntity; cout<<"n輸入價格:"cin»brn di.br nd_price; coun t+=br ndi.qua ntity;qua ntity=co unt;if(n=1)ofstream file("進貨清單.txt",ios:out|ios:ate);if(!file)cout<<

38、"錯誤,不能翻開文件.";getch();exit(1);timer=time(NULL); file<<ctime(&timer);file<<"品種"<<"t"<<"代碼"<<"t"<<"顏色"<<"n"file<<ltem_ name<<"t"<<ltem_code<<"t"

39、;<<colour<<"n"file<<"品牌"<<"t"<<"代碼"<<"t"<<"數(shù)量 "<<"t"<<"價格"<<"n"for(i nt i=0;i <nBrn d;i+)file<<brndi.brnd_ name<<"t"<<b

40、rndi.Bran d_code<<"t"<<brndi.qua ntity<<"t"<<brndi.brnd _price<<"n"- file<<"n" file.close();return 1;void Cltem:Show() 顯示品種數(shù)據(jù)cout<<"品種"<<"t"<<" 代碼"<<"t"<<

41、" 顏色"<<"n"cout<<Item_ n ame<<"t"<<Item_code<<"t"<<colour<<"n"cout<<" 品牌"<<"t"<<" 代碼"<<"t"<<" 數(shù)量 "<<"t"<<&q

42、uot;價格"<<"n"for(i nt i=0;i <nBrn d;i+)cout<<br ndi.br nd_n ame<<"t"<<br ndi.Bra nd_code<<"t"<<br ndi.qua ntity<<"t"<<brindi.brnd_price<<"n"cout<<"nn "<<flush;system(&

43、quot;pause");cout<<"n"void Cltem:OutModify()出貨,修改結(jié)點中的數(shù)據(jù)局部int choice,co un t,chuhuo,price=0;/chuhuo為出貨量,price為總價格int *num;num=new in t nBrn d;if(qua ntity=O)cout<<"數(shù)量為 0."exit(1);for(i nt i=0;i< nBrnd;i+)儲存原來的數(shù)量nu mi=br ndi.qua ntity;cout<<"品牌"&

44、lt;<"t"<<" 代碼"<<"t"<<" 數(shù)量 "<<"t"<<"價格"<<"n"for(i=0;i <nBrn d;i+)cout<<i+1<<"."<<br ndi.br nd_n ame<<"t"<<br ndi.Bra nd_code<<"t

45、"<<br ndi.qua ntity<<"t"<<br ndi.br nd_price<<"n"cout<<"nn"cout<<"輸入數(shù)字選擇出貨商品或按0退出.n"cin> >choice;while(choice>=1 &&choice <=nBrnd)cout<<"輸入商品數(shù)量:";cin> >co unt;while(co un t>b

46、r ndchoice-1.qua ntity)cout<<"庫存缺乏,重新輸入:"cin> >co unt;brn dchoice-1.qua ntity-=co unt;cout<<"出貨成功,按0退出或按數(shù)字繼續(xù)出貨.n"cin> >choice;ofstreamfile("出 貨 清單.txt",ios:out|ios:ate);if(!file)cout<<"錯誤,不能翻開文件.";getch(); exit(1);timer=time(NULL)

47、;file<<ctime(&timer);file<<"品種"<<"t"<<"代碼"<<"t"<<"顏色file<<ltem name<<"t"<<ltem code<<"t"<<col"<<"n"our<<"nn"file<<" 品

48、牌"<<"t"<<" 代碼"<<"t"<<" 價格 "<<"t"<<"出貨量"<<"n"for(i=0;i <nBrn d;i+)if(chuhuo=nu mi-br ndi.qua ntity)price=chuhuo*br ndi.br nd_price;file<<br ndi.br nd_n ame<<"t"

49、;<<brn di.Bra nd_co de<<"t"<<brn di.brind_price<<"t"<<chuhuo<<"n"-file<<"總價格為:"<<price<<"nn"delete num;file.close();void Cltem:l nM odify()已有商品,再次進貨,修改結(jié)點中的數(shù)據(jù)局部char n ame20;char choice;int coun t,j

50、i nhuo=0;in t pre nBrnd=nBrnd; / 原先品牌數(shù)int n=1;/用于判斷是否繼續(xù)進貨int flag=0;/用于判斷是否新品牌int * num;num=new in tpre nBrn d;for(i nt i=0;i< nBrnd;i+)/ 儲存原來的數(shù)量nu mi=br ndi.qua ntity;while( n)cout<<"nn 輸入品牌名稱:"Flush(ci n);cin. getl ine(n ame,20);for(i nt i=0;i <nBrn d;i+)if(strcmp(brndi.brnd

51、_n ame, name)=0)cout<<"nn 輸入進貨數(shù)量:"cin> >co unt;flag=1;break;if(flag=0)strcpy(br ndnBrn d.br nd_n ame ,n ame); cout<<"n輸入品牌代碼:" cin»brndnBrn d.Bra nd_code;cout<<"n輸入數(shù)量:" cin»brndnBrn d.qua ntity;cout<<"n輸入價格:" cin»br

52、ndnBrn d.br nd_price; qua ntity+=br ndnBrn d.qua ntity; nBrn d+; cout<<"n 繼續(xù)進貨:y/n "cin> >choice;if(choice='y'|choice='Y')n=1;else n=0;ofstreamfile("進 貨 清單.txt",ios:out|ios:ate);if(!file)cout<<"錯誤,不能翻開文件.";getch();exit(1);timer=time(NUL

53、L);file<<ctime(&timer);file<<"品種"<<"t"<<"代碼"<<"t"<<"顏色"<<"n"file<<ltem_ n ame<<"t"<<ltem_code<<"t"<<colour<<"nn"file<<&quo

54、t;品牌"<<"t"<<"代碼"<<"t"<<"價格 "<<"t"<<"進貨量"<<"n"for(i=0;i<pre nBrn d;i+)if(jin huo=br ndi.qua ntity-nu mi)brn di.qua ntity+=co unt; qua ntity+=co unt;file<<br ndi.brnd_n ame<

55、<"t"<<brn di.Bra nd_co de<<"t"<<brn di.brin d_price<<"t"<<ji nhuo<<"n"if(nBrn d>pre nBrnd)for(i=pre nBrn d;i <nBrn d;i+)file<<br ndi.brnd_n ame<<"t"<<brn di.Bra nd_co de<<"t&qu

56、ot;<<br ndi.br nd_price<<"t"<<br ndi.qua ntity<<" n"file<<"nn"delete num;file.close();class CNode / 結(jié)點類private:CNode * pNext; /指向鏈表下一結(jié)點的指針CItem * pData;/用于指向數(shù)據(jù)類的指針public:CNode() pData=0;pNext=0;/ 結(jié)點構造函數(shù)CNode(CNode &node)/ 用 于拷貝的構造函數(shù)pDat

57、a=no de.pData;pNext =no de.pNext;void InputData(Cltem *pSal) pData=pSal; /輸入數(shù)據(jù)void ShowNode() pData->Show(); /輸出結(jié)點中的數(shù)據(jù)CItem * GetData() return pData;/返回下一結(jié)點的指針friend class CList;/ 定 義鏈表類為友元類;class CList/定義鏈表類protected:CNode * pHead;/鏈表頭結(jié)點指針public:CList() pHead=0; CList() DeleteList(); void AddNod

58、e(CNode * pnode);/ 首 部添加結(jié)點CNode * DeleteNode(CNode *);/刪除一個指定的結(jié)點,返回該結(jié)點的指針CNode * LookUp(Cltem &);/* 查找一個指定的數(shù)據(jù),返回該數(shù)據(jù)所在結(jié)點在鏈表中的指針,假設 未找到返回0 */void ShowList();/打印整個鏈表void DeleteList();/ 刪除整個鏈表CNode * GetListHead()return pHead;/返回鏈表首結(jié)點CNode * GetListNextNode(CNode *);/返回鏈表指定結(jié)點的下一個結(jié)點void In sert(CNode

59、 *);/ 按代碼的順序插入一個結(jié)點;void CList:AddNode(CNode *pn ode)/首部添加結(jié)點if(pHead=0)pHead=p no de;pno de->pNext=0;elsepno de->pNext=pHead; pHead=p no de;CNode * CList:DeleteNode(CNode *pn ode)/ 刪除一 個指定的結(jié)點,返回該結(jié)點的指針if(p node=pHead)刪除的結(jié)點是鏈表的首結(jié)點pHead=p no de->pNext;pno de->pNext=0;elseCNode *p=pHead;while

60、(p->pNext!=p no de) p=p_>pNext;p->pNext=pnode->pNext; 刪 除結(jié)點 后將前后兩個結(jié)點再連結(jié)起來pno de->pNext=0;retur n(pno de);CNode * CList:LookUp(Cltem &pitem)/* 查找一個指 定的數(shù)據(jù),返回該數(shù)據(jù)所在結(jié)點在鏈表中的指針,假設未找 到返回0 */CNode * pn=pHead;if(pitem.GetltemCode()=0)while(p n)if(pn->pData->Compare(pitem)return pn;/按品

61、種名稱查找pn=pn_ >pNext;elsewhile(p n)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->p

62、Next;delete q;CNode * CList:GetListNextNode(CNode *pn ode)/返回鏈表指定結(jié)點的下一個結(jié)點retur n pno de->pNext;void CList:I nsert(CNode * pn ode)/按代碼的順序插入一個結(jié)點CNode * p1,* p2;if(pHead=0)pHead=p no de;pno de->pNext=0;elseif(pHead->pData->GetltemCode()>=p node->pData->GetIt emCode()pno de->pNex

63、t=pHead; pHead=p no de;elsep2=p仁pHead;while(p2->pNext&&p2->pData->GetltemCode()<p node->pData->GetltemCode()p仁 p2; p2=p2->pNext;if(p2->pData->GetltemCode()<p node->pData->Getlt emCode()p2->pNext=p no de;pno de->pNext=0;elsepno de->pNext=p2;p1->

64、pNext=p node;void mai n()int choice;CList list;CItem *p;CNode *pn;char name20;/按商品名稱操作時用于輸入名稱char str20;int code;/按商品代碼 操作時用于輸入代碼ifstreamin file("TIS.txt",ios:i n|ios: no create|ios:bi nary)5if(!i nfile)cout<<"數(shù)據(jù)文件不存在.n"<<flush;system("pause"); system("

65、cls");elseCItem pitem;in file.read(re in terpret_cast<char*>(&pitem),sizeof(Cltem);while(! in file.eof()p=new CItem;*p=pitem;pn=new CNode;pn->1 nputData(p);list.I nsert(p n);in file.read(re in terpret_cast<char*>(&pitem),sizeof(Cltem);in file.close();docout<<"n

66、t &物品庫存管理系統(tǒng) & "cout<v"n*“ cout<v"nn1.添加商品品種"cout<v"nn2.顯小商品品種cout<v"nn3.查詢商品"cout<v"nn4.刪除商品"cout<v"nn5.商品出庫"coutvv"nn6.商品進庫"coutvv"nn0.退出系統(tǒng)"coutvv"n*“ cout<<"nn 輸入選擇:";Flush(c i

67、n);cin. getli ne(str,20);choice=atoi(str);switch(choice)case 1:/添加商品品種system("cls");p=new CItem;p->SetItem();pn=new CNode;pn->1 nputData(p);list.I nsert(p n);system("cls");break;case 2:/ 顯示商品品種system("cls");pn=list.GetListHead();if(pn=O)cout<<"無庫存."

68、;<<endl; system("cls");elselist.ShowList();system("cls");system("cls");cout<<"nn1.按商品品種名稱查詢商品cout<<"nn2.按商品品種代碼查詢商品cout<<"nnO.退出"cout<<"nn輸入選擇:"cin> >choice;if(choice=1)break;case 3:/查詢商品cout<<"

69、;nn2.按商品品種代碼刪除商品cout<<"nn輸入品種名稱:n"Flush(ci n);cin. getl ine(n ame,20);p=new Cltem( name);pn=list.LookUp(*p);if(pn) p n->GetData()->Show();elsecout<<"n 沒找到商品nn"<<flush;nn"<<flush;system("pause");delete p;if(choice=2)cout<<"nn 輸入品種代碼:n"cin> >code;int n;n=code;p=new CItem( n);pn=list.LookUp(*p);if(p n) pn->GetData()->Show(); elsecout<<"n 沒找到商品system("pause");delete p;system("cls");break;case 4:/刪除商品system("cls");cout<<"nn1.按商品品種名稱刪除商品II.

溫馨提示

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

評論

0/150

提交評論