課程設(shè)計(jì)報(bào)告---鏈表的維護(hù)與文件形式的保存_第1頁(yè)
已閱讀1頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告</p><p>  選題:鏈表的維護(hù)與文件形式的保存</p><p><b>  目錄</b></p><p>  一、題目··············

2、83;··························2</p><p>  二、需求分析·····&

3、#183;·······························2</p><p>  三、算法思

4、想····································

5、83;2</p><p>  四、程序結(jié)構(gòu)及函數(shù)功能說(shuō)明·······················2</p><p>  五、函數(shù)功能實(shí)現(xiàn)·

6、3;·······························5</p><p>  六、程序測(cè)試&#

7、183;····································

8、7</p><p>  七、程序改進(jìn)·······························

9、3;····12</p><p>  八、收獲與體會(huì)···························

10、·······13</p><p>  九、參考文獻(xiàn)························

11、83;···········13</p><p><b>  一、題目</b></p><p>  用鏈表結(jié)構(gòu)的有序表示某商場(chǎng)家電部的庫(kù)存模型。當(dāng)有提貨或進(jìn)貨時(shí),對(duì)該鏈表及時(shí)進(jìn)行維護(hù)。每個(gè)工作日結(jié)束后,將該鏈表中的數(shù)據(jù)以文件形式保存;每日開(kāi)始營(yíng)業(yè)前,需將以文件

12、形式保存的數(shù)據(jù)恢復(fù)成鏈表結(jié)構(gòu)的有序表。</p><p>  鏈表結(jié)點(diǎn)的數(shù)據(jù)域包括家電名稱,品牌,單價(jià)和數(shù)量,以單價(jià)的升序體現(xiàn)鏈表的有序性。程序功能包括:創(chuàng)建表、營(yíng)業(yè)開(kāi)始(讀入文件恢復(fù)鏈表數(shù)據(jù))、進(jìn)貨(插入)、提貨(更新或刪除)、查詢信息、更新信息、營(yíng)業(yè)結(jié)束(鏈表數(shù)據(jù)存入文件)等。</p><p><b>  需求分析</b></p><p> 

13、 家店庫(kù)存管理系統(tǒng)是一個(gè)簡(jiǎn)化的企業(yè)應(yīng)用管理軟件,它通過(guò)維護(hù)一個(gè)單鏈表和文本文件,模擬現(xiàn)實(shí)世界企業(yè)當(dāng)中產(chǎn)品的買賣過(guò)程,記錄庫(kù)存信息,方便賣方對(duì)已有產(chǎn)品進(jìn)行控制。在進(jìn)行買賣后,通過(guò)對(duì)鏈表的操作,達(dá)到鏈表存儲(chǔ)的信息與現(xiàn)實(shí)中實(shí)物的一致性。</p><p><b>  三、算法思想</b></p><p>  系統(tǒng)只涉及管理員程序,主要是單鏈表的操作,包括單鏈表的建立、查找、插

14、入結(jié)點(diǎn)、刪除結(jié)點(diǎn)、插入排序等,以及單鏈表中的數(shù)據(jù)與文件的交互即文件的操作。</p><p>  單鏈表的各操作比較簡(jiǎn)單,只需根據(jù)實(shí)際情況略加修改即可。</p><p>  文件的操作通過(guò)C++中的文件流fstream及字符串流stringstream可方便實(shí)現(xiàn)。</p><p>  界面使用DOS環(huán)境下菜單形式,并具有清屏功能。</p><p&

15、gt;  四、程序結(jié)構(gòu)及函數(shù)功能說(shuō)明</p><p><b>  數(shù)據(jù)結(jié)構(gòu)</b></p><p> ?。?)產(chǎn)品庫(kù)存結(jié)點(diǎn)(結(jié)構(gòu)體)</p><p>  struct ProductNode{</p><p>  string NO;// 產(chǎn)品型號(hào)</p><p>  string Name;//

16、 產(chǎn)品名稱</p><p>  string Brand;// 產(chǎn)品品牌</p><p>  int Price;// 產(chǎn)品賣出價(jià)</p><p>  int Quantity;// 產(chǎn)品數(shù)量</p><p>  ProductNode* next;</p><p><b>  };</b><

17、;/p><p>  數(shù)據(jù)說(shuō)明:例如 三星數(shù)碼相機(jī)S-760 價(jià)格888元。其中,產(chǎn)品型號(hào)為S-760,產(chǎn)品名稱為數(shù)碼相機(jī),產(chǎn)品品牌為三星。信息中的名稱、品牌與型號(hào)唯一標(biāo)識(shí)一種產(chǎn)品,即只有名稱、品牌及型號(hào)都相同的產(chǎn)品,才是同一種產(chǎn)品。</p><p> ?。?)產(chǎn)品庫(kù)存鏈表(類)</p><p>  class ProductList{</p><p

18、>  ProductNode* first;//頭結(jié)點(diǎn)</p><p><b>  //以下為成員函數(shù)</b></p><p><b>  …</b></p><p><b>  };</b></p><p><b>  2、函數(shù)功能說(shuō)明:</b>&

19、lt;/p><p>  InitInsert 私有成員函數(shù),按單價(jià)遞增順序向鏈表中插入一個(gè)結(jié)點(diǎn)。</p><p>  初始化從文件讀入數(shù)據(jù)插入至鏈表,進(jìn)貨以及修改信息時(shí)</p><p><b>  由其他函數(shù)調(diào)用。</b></p><p>  ProductList 構(gòu)造函數(shù),建立只有頭結(jié)點(diǎn)的空鏈表&l

20、t;/p><p>  ReadFile 營(yíng)業(yè)開(kāi)始,從文件中讀入每一行數(shù)據(jù),新建結(jié)點(diǎn),調(diào)用</p><p>  InitInsert函數(shù)插入鏈表</p><p>  WriteFile 營(yíng)業(yè)結(jié)束,將鏈表中的數(shù)據(jù)寫入文件</p><p>  Insert 進(jìn)貨(插入結(jié)點(diǎn)或修改庫(kù)存量)</p><

21、;p>  FindByNO 根據(jù)型號(hào)查找</p><p>  FindByName 根據(jù)名稱查找</p><p>  FindByBrand 根據(jù)品牌查找</p><p>  Delete 提貨(刪除結(jié)點(diǎn)或減少庫(kù)存量)</p><p>  Modify 修改信息(主要是

22、單價(jià))</p><p>  PrintList 遍歷單鏈表,按序號(hào)依次輸出各元素</p><p>  DataResume 數(shù)據(jù)恢復(fù)</p><p>  ~ProductList 析構(gòu)函數(shù)</p><p>  JudgeCode 管理員登錄時(shí)輸入姓名與密碼進(jìn)行密碼判斷</p><p

23、><b>  文件</b></p><p>  Product.txt 產(chǎn)品庫(kù)存文件,記錄產(chǎn)品的庫(kù)存信息。</p><p>  Diary.txt 日志文件,保存對(duì)鏈表所作的修改信息,當(dāng)系統(tǒng)因故障退出但沒(méi)</p><p>  有保存數(shù)據(jù)到文件中時(shí)可利用日志文件進(jìn)行數(shù)據(jù)恢復(fù)。</p><p>  模塊調(diào)用圖(

24、函數(shù)關(guān)系圖)</p><p><b>  系統(tǒng)流程圖</b></p><p>  五、函數(shù)功能實(shí)現(xiàn)(詳細(xì)代碼見(jiàn)程序源文件)</p><p>  1、判斷密碼Judge_Code</p><p>  功能:驗(yàn)證管理員進(jìn)入時(shí)的身份</p><p>  輸入:用戶名,密碼(*)</p>&

25、lt;p>  處理:判斷用戶名,密碼是否與預(yù)定的數(shù)據(jù)相同,相同則進(jìn)入,否則輸出提示信息</p><p>  輸出:當(dāng)用戶名,密碼錯(cuò)誤時(shí),是否重新輸入</p><p>  回文顯示密碼的方法:通過(guò)getch()函數(shù)接受用戶輸入并保存在字符數(shù)組中,使用回文形式,輸入時(shí)用‘*’代替,固定為6位代碼, getch()需要包括conio.h頭文件。部分代碼如下</p><p

26、>  char code[7];</p><p>  for(int i=0;i<7;i++){</p><p>  code[i]=getch();</p><p>  cout<<'*';</p><p><b>  }</b></p><p>  2、

27、開(kāi)始營(yíng)業(yè)(讀入文件)ReadFile </p><p>  功能:從文件讀入數(shù)據(jù)建立有序鏈表</p><p><b>  輸入:無(wú)</b></p><p>  處理:首先建立輸入文件流對(duì)象fin,然后利用fin.fail函數(shù)判斷文件是否存在,通過(guò)while循環(huán)和getline 函數(shù)讀取文件每一行,建立結(jié)點(diǎn),插入到鏈表中(插入排序),文件結(jié)束時(shí)g

28、etline 函數(shù)返回false。也可以用fin.eof判斷文件是否結(jié)束,但比較麻煩,因?yàn)槿绻淖詈笥幸粋€(gè)回車,eof函數(shù)并不認(rèn)為文件結(jié)束。</p><p><b>  輸出:錯(cuò)誤時(shí)的提示</b></p><p>  3、進(jìn)貨Insert</p><p>  功能:插入結(jié)點(diǎn)到鏈表或增加庫(kù)存量</p><p>  輸入:進(jìn)

29、貨的產(chǎn)品信息</p><p>  處理:需要判斷,如果型號(hào),名稱,品牌都相同,表明是同一種產(chǎn)品,則不輸入 單價(jià),此結(jié)點(diǎn)不插入鏈表,只增加原來(lái)節(jié)點(diǎn)的產(chǎn)品數(shù)量;如果不是同一種產(chǎn)品,則新建結(jié)點(diǎn)并插入鏈表。此外,進(jìn)貨后要將修改操作寫入日志文件,日志文件的打開(kāi)需要使用ofstream fout("diary.txt",ios::app)形式,app表示追加,打開(kāi)文件后文件指針在文件末尾。</

30、p><p>  輸出:改變后的產(chǎn)品信息。</p><p>  4、提貨Delete</p><p>  功能:從鏈表刪除結(jié)點(diǎn)或減少庫(kù)存量</p><p>  輸入:提貨的產(chǎn)品信息</p><p>  處理:需要判斷,如果產(chǎn)品不存在,輸出錯(cuò)誤信息;如果產(chǎn)品存在,且輸入的提貨量正好等于庫(kù)存量,則刪除此結(jié)點(diǎn);如果輸入的提貨量小于

31、庫(kù)存量,則減少庫(kù)存量;如果輸入的提貨量大于庫(kù)存量,則輸出錯(cuò)誤信息,提示用戶重新輸入。此外,提貨后也要將修改操作寫入日志文件。</p><p>  輸出:改變后的產(chǎn)品信息,出錯(cuò)信息。</p><p>  5、修改產(chǎn)品信息Modify</p><p>  功能:修改產(chǎn)品信息,主要是單價(jià)</p><p>  輸入:要修改的產(chǎn)品信息</p>

32、;<p>  處理:判斷,如果產(chǎn)品不存在,輸出錯(cuò)誤信息;如果產(chǎn)品存在,輸入新的信息,修改結(jié)點(diǎn)。由于須按單價(jià)順序排列,因此還要判斷是否需要調(diào)整修改后的結(jié)點(diǎn)在鏈表中的位置。如果需要,則先將此結(jié)點(diǎn)摘鏈,再插入鏈表即可。修改后同樣要將修改操作寫入日志文件,不過(guò)要寫入兩條記錄,因?yàn)樾薷牟僮飨喈?dāng)于先刪除原結(jié)點(diǎn),再插入新結(jié)點(diǎn)。</p><p>  輸出:修改后的產(chǎn)品信息。</p><p>

33、  數(shù)據(jù)恢復(fù)DataResume</p><p>  功能:當(dāng)系統(tǒng)因故障退出但沒(méi)有保存數(shù)據(jù)到文件中時(shí),可利用日志文件中保存的對(duì)鏈表所做過(guò)的修改信息進(jìn)行數(shù)據(jù)恢復(fù)(重新執(zhí)行相應(yīng)的操作)。</p><p><b>  輸入:無(wú)</b></p><p>  處理:依次讀入文件每一行,根據(jù)第一字段的信息(“進(jìn)貨”或者是“提貨” )進(jìn)行相應(yīng)的進(jìn)貨或提貨操作

34、,具體算法與Insert與Delete函數(shù)基本相同。</p><p><b>  輸出:恢復(fù)成功信息</b></p><p>  注意:當(dāng)管理員選擇存盤操作或存盤并退出時(shí),系統(tǒng)會(huì)自動(dòng)清空日志文件,因?yàn)樾薷牟僮鲗?duì)應(yīng)的信息已存入Product.txt文件,不清空日志文件會(huì)造成數(shù)據(jù)的重復(fù)操作。</p><p><b>  六、程序測(cè)試<

35、;/b></p><p>  首先在Product.txt文件中輸入以下內(nèi)容</p><p>  S-860相機(jī)三星98810</p><p>  S-112空調(diào)海爾488810</p><p>  T-333電腦夏新188820</p><p>  S-760相機(jī)三星888

36、10</p><p>  S-760冰箱三星288830</p><p>  S-960相機(jī)三星258811</p><p>  T-333電腦惠普588815</p><p>  注意:文件最后最多只能按一次回車,否則鏈表會(huì)增加多余結(jié)點(diǎn)。</p><p>  接下來(lái)按以下步驟執(zhí)行。&l

37、t;/p><p> ?。?)執(zhí)行程序,顯示:</p><p>  選擇1,回車,輸入用戶名admin與密碼654321,回車,顯示:</p><p> ?。?)選擇1,回車顯示全部產(chǎn)品信息??梢?jiàn)產(chǎn)品已按單價(jià)排序。</p><p>  選擇2,輸入型號(hào)S-760,顯示查詢結(jié)果:</p><p>  選擇3,輸入名稱相機(jī),顯示

38、查詢結(jié)果:</p><p>  選擇4,輸入品牌三星,顯示查詢結(jié)果:</p><p>  選擇4,輸入品牌IBM,顯示查詢結(jié)果:</p><p> ?。?)選擇5,分別輸入型號(hào)、名稱、品牌、單價(jià)、數(shù)量為1,1,1,3888,11,顯示進(jìn)貨結(jié)果:</p><p>  選擇5,分別輸入型號(hào)、名稱、品牌為1,1,1,顯示:</p>&

39、lt;p>  輸入11,回車,顯示</p><p>  此時(shí),日志文件內(nèi)容為:</p><p>  進(jìn)貨111388811</p><p>  進(jìn)貨111388811</p><p>  選擇6,輸入型號(hào)、名稱、品牌、數(shù)量分別為1,1,1,2,顯示提貨結(jié)果:</p><p>  選擇6,輸

40、入型號(hào)、名稱、品牌、數(shù)量分別為1,1,1,20,顯示:</p><p>  此時(shí),日志文件內(nèi)容為:</p><p>  進(jìn)貨111388811</p><p>  進(jìn)貨111388811</p><p>  提貨11138882</p><p>  提貨111388820

41、</p><p>  選擇7,輸入型號(hào)、名稱、品牌分別為S-760,相機(jī),三星,顯示此產(chǎn)品信息,再輸入新的型號(hào)、名稱、品牌、單價(jià)和數(shù)量分別為1,1,1,3888,11,顯示修改結(jié)果:</p><p>  此時(shí),日志文件內(nèi)容為:</p><p>  進(jìn)貨111388811</p><p>  進(jìn)貨111388811<

42、;/p><p>  提貨11138882</p><p>  提貨111388820</p><p>  提貨S-760相機(jī)三星88810</p><p>  進(jìn)貨111388811</p><p>  (4)選擇0或單擊右上角的關(guān)閉按鈕,退出程序。之后重新運(yùn)行程序,選擇1,

43、顯示:</p><p>  選擇a,回車,進(jìn)行數(shù)據(jù)恢復(fù),顯示:</p><p><b>  可見(jiàn)數(shù)據(jù)恢復(fù)成功。</b></p><p>  選擇9,存盤并退出。</p><p>  此時(shí),日志文件為空,Product文件內(nèi)容如下:</p><p>  S-860相機(jī)三星98810<

44、/p><p>  T-333電腦夏新188820</p><p>  S-960相機(jī)三星258811</p><p>  S-760冰箱三星288830</p><p>  111388811</p><p>  S-112空調(diào)海爾488810</p><

45、;p>  T-333電腦惠普588815</p><p><b>  七、程序改進(jìn)</b></p><p>  1、修改信息時(shí),如果輸入的產(chǎn)品型號(hào)、名稱、品牌與鏈表中某一結(jié)點(diǎn)的值全部相等,則可以提醒重新輸入或者直接增加或減少此產(chǎn)品數(shù)量,本程序中沒(méi)有實(shí)現(xiàn),因?yàn)樾薷亩酁樾薷膬r(jià)格,而型號(hào)、名稱、品牌相對(duì)固定,庫(kù)存量的修改可通過(guò)進(jìn)貨或提貨操作實(shí)現(xiàn)。</p

46、><p>  2、金額統(tǒng)計(jì)功能。只有一個(gè)單價(jià)(賣出價(jià))是不夠的,還應(yīng)該有買入價(jià),提貨時(shí),用賣出價(jià)減去買入價(jià)后再乘以提貨數(shù)量即為所得利潤(rùn),每日的利潤(rùn)可存入另一文件。</p><p>  3、退貨功能。退貨時(shí),不僅有進(jìn)貨操作,還應(yīng)扣除利潤(rùn)。因?yàn)橥素浭菢O特殊的情況,本程序沒(méi)有實(shí)現(xiàn)。</p><p>  4、排序功能。還應(yīng)可以按其他信息進(jìn)行排序,由于鏈表排序比較復(fù)雜,本程序沒(méi)有

47、實(shí)現(xiàn)。</p><p>  5、操作界面??梢允褂肕FC的圖形操作界面,更加直觀,交互性更好。</p><p>  6、文件結(jié)束的判斷。還可以在文件最后設(shè)置標(biāo)志,如‘#’,當(dāng)讀入的字符為‘#’時(shí)表示文件結(jié)束,本程序中使用getline函數(shù),既讀入一條記錄,又可判斷文件是否結(jié)束</p><p>  7、程序中還有一些情況未加判斷。如輸入負(fù)數(shù),再如該輸入數(shù)字時(shí)輸入了字母

48、,這可能會(huì)造成程序出錯(cuò)而退出,這也是系統(tǒng)中設(shè)計(jì)數(shù)據(jù)恢復(fù)操作的另一原因。</p><p><b>  八、收獲與體會(huì)</b></p><p>  數(shù)據(jù)結(jié)構(gòu)是C語(yǔ)言系列的最后一門課程,是對(duì)已學(xué)過(guò)的C及C++語(yǔ)言的應(yīng)用與深化。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)是對(duì)所學(xué)過(guò)的數(shù)據(jù)結(jié)構(gòu)與算法的鞏固,是對(duì)所學(xué)知識(shí)的綜合應(yīng)用,也是對(duì)個(gè)人編程能力的提高與升華。</p><p> 

49、 本次課程設(shè)計(jì)共分3個(gè)階段完成。7月21日-7月23日完成了程序的框架以及基本功能;8月18日-8月19日對(duì)程序進(jìn)行了修正,包括進(jìn)貨與提貨時(shí)少判斷的情況,修改單價(jià)后的重排序情況,增加了數(shù)據(jù)恢復(fù)功能;8月28日對(duì)程序運(yùn)行的各種情況進(jìn)行了測(cè)試,確保運(yùn)行無(wú)誤。</p><p>  本次課程設(shè)計(jì)的題目雖然只涉及到數(shù)據(jù)結(jié)構(gòu)中的單鏈表,算法也沒(méi)有樹(shù)及圖那么復(fù)雜,都是鏈表最基本的操作,但是程序中需要注意的細(xì)節(jié)很多,有的問(wèn)題在調(diào)

50、試多次后才會(huì)出現(xiàn)。這需要在編程前先設(shè)想好每一種情況,然后再謹(jǐn)慎地寫每一行代碼。</p><p>  本次課程設(shè)計(jì)幫助我鞏固了單鏈表的操作,文件的操作,界面的顯示等常用操作,進(jìn)一步端正了編程的良好習(xí)慣,提高了進(jìn)一步學(xué)習(xí)的興趣,同時(shí)鍛煉了我的寫作能力。</p><p>  感謝這次課程設(shè)計(jì),感謝我們的老師!</p><p><b>  九、參考文獻(xiàn)</b

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論