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