課程設計報告---鏈表的維護與文件形式的保存_第1頁
已閱讀1頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

8、7</p><p>  七、程序改進·······························

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

10、·······13</p><p>  九、參考文獻························

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

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

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

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

15、gt;  四、程序結構及函數(shù)功能說明</p><p><b>  數(shù)據(jù)結構</b></p><p> ?。?)產品庫存結點(結構體)</p><p>  struct ProductNode{</p><p>  string NO;// 產品型號</p><p>  string Name;//

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

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

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

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

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

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

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

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

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

25、lt;p>  處理:判斷用戶名,密碼是否與預定的數(shù)據(jù)相同,相同則進入,否則輸出提示信息</p><p>  輸出:當用戶名,密碼錯誤時,是否重新輸入</p><p>  回文顯示密碼的方法:通過getch()函數(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、開始營業(yè)(讀入文件)ReadFile </p><p>  功能:從文件讀入數(shù)據(jù)建立有序鏈表</p><p><b>  輸入:無</b></p><p>  處理:首先建立輸入文件流對象fin,然后利用fin.fail函數(shù)判斷文件是否存在,通過while循環(huán)和getline 函數(shù)讀取文件每一行,建立結點,插入到鏈表中(插入排序),文件結束時g

28、etline 函數(shù)返回false。也可以用fin.eof判斷文件是否結束,但比較麻煩,因為如果文最后有一個回車,eof函數(shù)并不認為文件結束。</p><p><b>  輸出:錯誤時的提示</b></p><p>  3、進貨Insert</p><p>  功能:插入結點到鏈表或增加庫存量</p><p>  輸入:進

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

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

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

32、;<p>  處理:判斷,如果產品不存在,輸出錯誤信息;如果產品存在,輸入新的信息,修改結點。由于須按單價順序排列,因此還要判斷是否需要調整修改后的結點在鏈表中的位置。如果需要,則先將此結點摘鏈,再插入鏈表即可。修改后同樣要將修改操作寫入日志文件,不過要寫入兩條記錄,因為修改操作相當于先刪除原結點,再插入新結點。</p><p>  輸出:修改后的產品信息。</p><p>

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

34、,具體算法與Insert與Delete函數(shù)基本相同。</p><p><b>  輸出:恢復成功信息</b></p><p>  注意:當管理員選擇存盤操作或存盤并退出時,系統(tǒng)會自動清空日志文件,因為修改操作對應的信息已存入Product.txt文件,不清空日志文件會造成數(shù)據(jù)的重復操作。</p><p><b>  六、程序測試<

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

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

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

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

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

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

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

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

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

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

45、;p>  T-333電腦惠普588815</p><p><b>  七、程序改進</b></p><p>  1、修改信息時,如果輸入的產品型號、名稱、品牌與鏈表中某一結點的值全部相等,則可以提醒重新輸入或者直接增加或減少此產品數(shù)量,本程序中沒有實現(xiàn),因為修改多為修改價格,而型號、名稱、品牌相對固定,庫存量的修改可通過進貨或提貨操作實現(xiàn)。</p

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論