2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告</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ù)功能說明·······················2</p><p>  五、函數(shù)功能實現(xiàn)·

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

25、lt;p>  處理:判斷用戶名,密碼是否與預(yù)定的數(shù)據(jù)相同,相同則進(jìn)入,否則輸出提示信息</p><p>  輸出:當(dāng)用戶名,密碼錯誤時,是否重新輸入</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ù)讀取文件每一行,建立結(jié)點,插入到鏈表中(插入排序),文件結(jié)束時g

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

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

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

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

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

33、  數(shù)據(jù)恢復(fù)DataResume</p><p>  功能:當(dāng)系統(tǒng)因故障退出但沒有保存數(shù)據(jù)到文件中時,可利用日志文件中保存的對鏈表所做過的修改信息進(jìn)行數(shù)據(jù)恢復(fù)(重新執(zhí)行相應(yīng)的操作)。</p><p><b>  輸入:無</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)管理員選擇存盤操作或存盤并退出時,系統(tǒng)會自動清空日志文件,因為修改操作對應(yīng)的信息已存入Product.txt文件,不清空日志文件會造成數(shù)據(jù)的重復(fù)操作。</p><p><b>  六、程序測試<

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>  注意:文件最后最多只能按一次回車,否則鏈表會增加多余結(jié)點。</p><p>  接下來按以下步驟執(zhí)行。&l

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

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

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

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

41、</p><p>  選擇7,輸入型號、名稱、品牌分別為S-760,相機(jī),三星,顯示此產(chǎn)品信息,再輸入新的型號、名稱、品牌、單價和數(shù)量分別為1,1,1,3888,11,顯示修改結(jié)果:</p><p>  此時,日志文件內(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> ?。?)選擇0或單擊右上角的關(guān)閉按鈕,退出程序。之后重新運(yùn)行程序,選擇1,

43、顯示:</p><p>  選擇a,回車,進(jìn)行數(shù)據(jù)恢復(fù),顯示:</p><p><b>  可見數(shù)據(jù)恢復(fù)成功。</b></p><p>  選擇9,存盤并退出。</p><p>  此時,日志文件為空,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、修改信息時,如果輸入的產(chǎn)品型號、名稱、品牌與鏈表中某一結(jié)點的值全部相等,則可以提醒重新輸入或者直接增加或減少此產(chǎn)品數(shù)量,本程序中沒有實現(xiàn),因為修改多為修改價格,而型號、名稱、品牌相對固定,庫存量的修改可通過進(jìn)貨或提貨操作實現(xiàn)。</p

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

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

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

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

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

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論