版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---鏈表的維護(hù)與文件形式的保存
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-----鏈表的維護(hù)與文件形式的保存
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--鏈表的維護(hù)與文件形式的保存
- 城市鏈表課程設(shè)計報告
- 課程設(shè)計鏈表的交叉合并課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--鏈表
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---鏈表操作
- 城市鏈表課程設(shè)計
- 城市鏈表課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-雙鏈表創(chuàng)建與演示設(shè)計
- 程序設(shè)計課程設(shè)計--鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---城市鏈表的設(shè)計與實現(xiàn)
- 文件系統(tǒng)的設(shè)計與實現(xiàn) 課程設(shè)計報告
- 課程設(shè)計報告—稀疏矩陣的完全鏈表表示及其運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---雙向鏈表
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-鏈表操作
- 操作系統(tǒng)課程設(shè)計報告-線程安全型雙向鏈表的實現(xiàn)
- 數(shù)據(jù)庫課程設(shè)計-鏈表的簡單操作
- 文件加密與解密—java課程設(shè)計報告
評論
0/150
提交評論