軟件工程圖書(shū)管理系統(tǒng)需求報(bào)告_第1頁(yè)
軟件工程圖書(shū)管理系統(tǒng)需求報(bào)告_第2頁(yè)
軟件工程圖書(shū)管理系統(tǒng)需求報(bào)告_第3頁(yè)
軟件工程圖書(shū)管理系統(tǒng)需求報(bào)告_第4頁(yè)
軟件工程圖書(shū)管理系統(tǒng)需求報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、軟件工程報(bào)告圖書(shū)管理系統(tǒng)需求性分析姓名:蔣維佳學(xué)號(hào):20122018班級(jí):應(yīng)數(shù)01班1. 引言1.1編寫(xiě)目的 此規(guī)格說(shuō)明書(shū)是為了對(duì)圖書(shū)館管理系統(tǒng)做一個(gè)概要的說(shuō)明,是軟件的大概的分析過(guò)程,對(duì)最終的軟件加以說(shuō)明。主要的讀者為軟件設(shè)計(jì)人員,程序編寫(xiě)員,以及老師。1.2項(xiàng)目背景 該項(xiàng)目作為計(jì)算機(jī)學(xué)院05級(jí)的軟件課程設(shè)計(jì)題目,學(xué)生應(yīng)該在規(guī)定的時(shí)間之內(nèi)完成,時(shí)間是第七周(4月7日)到第十二周(5月16日),學(xué)生應(yīng)該在這個(gè)時(shí)間之內(nèi)做好需求規(guī)格說(shuō)明書(shū),概要設(shè)計(jì)說(shuō)明書(shū),詳細(xì)設(shè)計(jì)說(shuō)明書(shū),以及做好程序,并在最后加以用戶(hù)操作手冊(cè)等一系列詳細(xì)的設(shè)計(jì)要求。1.3定義 1.4參考資料實(shí)用軟件工程第二版 鄭人杰 殷人昆 陶永

2、雷等主編 清華大學(xué)出版社delphi程序員成長(zhǎng)攻略蒙祖強(qiáng) 龔濤等編著 中國(guó)水利水電出版社delphi7開(kāi)發(fā)實(shí)例完全剖析 王志強(qiáng) 編著 中國(guó)電力出版社精通delphi數(shù)據(jù)庫(kù)設(shè)計(jì)與實(shí)例開(kāi)發(fā) 陳潤(rùn)編著 中國(guó)青年出版社2. 任務(wù)概述2.1目標(biāo)通過(guò)該系統(tǒng)可以實(shí)現(xiàn)最基本的圖書(shū)館的一系列的操作流程,其中包括:圖書(shū)的借閱,圖書(shū)的查找,圖書(shū)的退還,借書(shū)證的申請(qǐng),圖書(shū)的上架處理,圖書(shū)的過(guò)期未還的處罰等等功能。這些功能要用delphi以及后臺(tái)的數(shù)據(jù)庫(kù)SQL來(lái)實(shí)現(xiàn)。2.2運(yùn)行環(huán)境 Windows 98/2000/XP/2003操作系統(tǒng)下,安裝并配置軟件Microsoft SQL Server 2000數(shù)據(jù)庫(kù)管理系統(tǒng)。

3、 作者用的是windows XP操作系統(tǒng),理論上可以在windows 98/2000/2003下運(yùn)行的。2.3條件與限制因現(xiàn)在配有windows98與windows2003的操作系統(tǒng)的電腦較少,不易找到,所以在這兩種操作系統(tǒng)上實(shí)驗(yàn)比較困難。3、數(shù)據(jù)描述3.1靜態(tài)數(shù)據(jù)圖書(shū):圖書(shū)編碼,書(shū)名,書(shū)號(hào),圖書(shū)類(lèi)別,作者,出版社,出版時(shí)間,單價(jià)管理員:用戶(hù)名,密碼,權(quán)限,姓名讀者:借書(shū)卡號(hào),姓名,性別,讀者類(lèi)別,所屬系部,部門(mén)或班級(jí)3.2動(dòng)態(tài)數(shù)據(jù)輸入數(shù)據(jù):鼠標(biāo)對(duì)按鈕的點(diǎn)擊,查詢(xún)方式,查詢(xún)關(guān)鍵字,新建圖書(shū)項(xiàng),新建讀者項(xiàng),圖書(shū)項(xiàng)、讀者項(xiàng)記錄的修改,圖書(shū)借還以及注銷(xiāo)操作時(shí)的輸入信息,受限操作所需的密碼等。輸出數(shù)據(jù)

4、:查詢(xún)關(guān)鍵字所確定的數(shù)據(jù)庫(kù)子集,統(tǒng)計(jì)結(jié)果,操作成功或失敗的消息,圖書(shū)借還以及注銷(xiāo)操作時(shí)的結(jié)果信息。3.3數(shù)據(jù)庫(kù)描述數(shù)據(jù)庫(kù)采用SQL Server數(shù)據(jù)庫(kù)。3.4數(shù)據(jù)流圖與數(shù)據(jù)字典1、數(shù)據(jù)流圖(1) 頂層數(shù)據(jù)流圖(2)0層數(shù)據(jù)流圖(3)1層數(shù)據(jù)流圖· 1.讀者信息管理· 2.圖書(shū)信息管理· 3.圖書(shū)借還管理ER圖:3.4數(shù)據(jù)詞典(DD)高級(jí)管理員(帳號(hào),姓名)一般管理員(帳號(hào),姓名)普通用戶(hù)(帳號(hào),姓名,班級(jí),性別,組號(hào))登錄用戶(hù)(帳號(hào),密碼,權(quán)限) 圖書(shū)類(lèi)別(類(lèi)別,類(lèi)名)圖書(shū)(圖書(shū)編號(hào),類(lèi)別,書(shū)名,作者,出版日期,出版社,定價(jià),總數(shù)量,剩下數(shù)量,備注)借閱(用戶(hù)帳號(hào)

5、,圖書(shū)編號(hào),借書(shū)日期,到期日期,數(shù)量,還書(shū)日期)3.5數(shù)據(jù)采集數(shù)據(jù)通過(guò)事先的錄入,形成最基本的管理人員帳號(hào),通過(guò)管理人員的管理,可以實(shí)現(xiàn)相應(yīng)的數(shù)據(jù)的添加,刪減。比如,管理員可以添加用戶(hù)的相關(guān)信息(通過(guò)辦理借書(shū)證)還可以添加圖書(shū)(通過(guò)新書(shū)上架)來(lái)辦理。3. 功能需求4.1功能劃分 圖書(shū)管理系統(tǒng)主要實(shí)現(xiàn)以下七方面的功能:a.查詢(xún) b.圖書(shū)借還 c.圖書(shū)入庫(kù) d.圖書(shū)維護(hù) e.圖書(shū)超期提示 f.環(huán)境管理 4.2功能描述圖書(shū)管理包括查詢(xún)、借還、入庫(kù)、維護(hù)、超期提示、環(huán)境管理七方面功能。圖書(shū)入庫(kù),主要實(shí)現(xiàn)入庫(kù)登記。圖書(shū)借閱,用戶(hù)需憑相應(yīng)證件到圖書(shū)館進(jìn)行借書(shū),并由圖書(shū)管理員進(jìn)行相應(yīng)的登記記錄檔案。查詢(xún),當(dāng)

6、用戶(hù)要查詢(xún)自己的借閱情況時(shí),可以進(jìn)行借閱查詢(xún)。用戶(hù)可以通過(guò)此系統(tǒng)進(jìn)行圖書(shū)的查詢(xún)和讀者查詢(xún)(即用戶(hù)自己的相關(guān)信息查詢(xún))。圖書(shū)超期提示,當(dāng)借閱者在已到借書(shū)期限時(shí)仍未歸還圖書(shū),提示其盡快辦理歸還手續(xù)。并由系統(tǒng)計(jì)算相應(yīng)的處罰。圖書(shū)維護(hù),圖書(shū)管理員可以通過(guò)此系統(tǒng)進(jìn)行相應(yīng)的圖書(shū)的維護(hù)計(jì)算。4.3數(shù)據(jù)流圖(DFD)a新書(shū)入庫(kù)數(shù)據(jù)庫(kù)13處 理入 庫(kù) 12更新書(shū) 刊庫(kù)存清 單11接 受事 務(wù)圖 書(shū)管理員D1庫(kù)存清單D2 b圖書(shū)借閱D1庫(kù)存清單處 理借 閱數(shù)據(jù)庫(kù)進(jìn)行借 閱登 記借 閱 者 C過(guò)期提示處 理通知信 息顯示器進(jìn)行日期處 理圖書(shū)管理員d借閱查詢(xún)顯示器2產(chǎn) 生匯 總11操 作事 務(wù)借閱者12處 理查 詢(xún)

7、D1 借閱查詢(xún)清單e.還書(shū)處理數(shù)據(jù)庫(kù)13處 理歸 還12更新圖 書(shū)庫(kù)存清 單11接 受事 務(wù)圖書(shū)管理員D1 庫(kù)存清單借書(shū):還書(shū):新書(shū)上架: 4、4 需求規(guī)定在圖書(shū)管理系統(tǒng)中,管理員要為每個(gè)讀者建立借閱賬戶(hù),并給讀者發(fā)放不同類(lèi)別的借閱卡(借閱卡可提供卡號(hào)、讀者姓名),賬戶(hù)內(nèi)存儲(chǔ)讀者的個(gè)人信息和借閱記錄信息。持有借閱卡的讀者可以通過(guò)管理員(作為讀者的代理人與系統(tǒng)交互)借閱、歸還圖書(shū),不同類(lèi)別的讀者可借閱圖書(shū)的范圍、數(shù)量和期限不同,可通過(guò)互聯(lián)網(wǎng)或圖書(shū)館內(nèi)查詢(xún)終端查詢(xún)圖書(shū)信息和個(gè)人借閱情況,以及續(xù)借圖書(shū)(系統(tǒng)審核符合續(xù)借條件)。借閱圖書(shū)時(shí),先輸入讀者的借閱卡號(hào),系統(tǒng)驗(yàn)證借閱卡的有效性和讀者是否可繼續(xù)借

8、閱圖書(shū),無(wú)效則提示其原因,有效則顯示讀者的基本信息(包括照片),供管理員人工核對(duì)。然后輸入要借閱的書(shū)號(hào),系統(tǒng)查閱圖書(shū)信息數(shù)據(jù)庫(kù),顯示圖書(shū)的基本信息,供管理員人工核對(duì)。最后提交借閱請(qǐng)求,若被系統(tǒng)接受則存儲(chǔ)借閱紀(jì)錄,并修改可借閱圖書(shū)的數(shù)量。歸還圖書(shū)時(shí),輸入讀者借閱卡號(hào)和圖書(shū)號(hào)(或丟失標(biāo)記號(hào)),系統(tǒng)驗(yàn)證是否有此借閱紀(jì)錄以及是否超期借閱,無(wú)則提示,有則顯示讀者和圖書(shū)的基本信息供管理員人工審核。如果有超期借閱或丟失情況,先轉(zhuǎn)入過(guò)期罰款或圖書(shū)丟失處理。然后提交還書(shū)請(qǐng)求,系統(tǒng)接受后刪除借閱紀(jì)錄,并登記并修改可借閱圖書(shū)的數(shù)量。圖書(shū)管理員定期或不定期對(duì)圖書(shū)信息進(jìn)行入庫(kù)、修改、刪除等圖書(shū)信息管理以及注銷(xiāo)(不外借)

9、,包括圖書(shū)類(lèi)別和出版社管理。為系統(tǒng)維護(hù)人員提供權(quán)限管理、數(shù)據(jù)備份等通用功能。4、5 功能分類(lèi)4、6 具體需求系統(tǒng)的總體圖見(jiàn)圖第一層圖:(1):登陸子系統(tǒng)( 2)管理子模塊(3)查詢(xún)模塊第二層圖:(1):處理新書(shū)購(gòu)入1) 規(guī)格說(shuō)明輸入新書(shū)的全部信息。 2) 引言為了輸入新書(shū)的全部信息(包括:分類(lèi)目錄號(hào),流水號(hào)書(shū)名,作者,內(nèi)容摘要,價(jià)格和購(gòu)書(shū)日期等)。3)輸入新書(shū)的全部信息。4)處理通過(guò)圖書(shū)管理系統(tǒng)寫(xiě)入圖書(shū)目錄文件。5)輸出新書(shū)的全部信息。(2) 處理學(xué)生借書(shū)1) 規(guī)格說(shuō)明查詢(xún)讀者借書(shū)的相關(guān)信息。2)引言為了查詢(xún)讀者借書(shū)的相關(guān)信息。3)輸入借書(shū)信息的關(guān)鍵字。4)處理利用關(guān)鍵字在借書(shū)文件中找到此流水

10、號(hào)圖書(shū)的相關(guān)信息。5)輸出 借書(shū)相關(guān)信息。(3):處理學(xué)生還書(shū)1)規(guī)格說(shuō)明輸入讀者還書(shū)信息。2) 引言為了把讀者還書(shū)的相關(guān)信息(包括:圖書(shū)分類(lèi)號(hào),流水號(hào),讀者號(hào),借閱日期和還書(shū)日期等)寫(xiě)入還書(shū)文件中。3) 輸入讀者還書(shū)信息。4) 處理 通過(guò)圖書(shū)管理系統(tǒng)寫(xiě)入還書(shū)文件中。5)輸出 讀者還書(shū)信息的全部?jī)?nèi)容。(4):處理圖書(shū)注銷(xiāo)1) 規(guī)格說(shuō)明注銷(xiāo)圖書(shū)的相關(guān)內(nèi)容。2) 引言為了注銷(xiāo)圖書(shū)的相關(guān)信息。 3) 輸入圖書(shū)信息的關(guān)鍵字(圖書(shū)分類(lèi)號(hào)或書(shū)名)。4) 處理利用關(guān)鍵字在圖書(shū)目錄文件中找到此圖書(shū)分類(lèi)號(hào)或書(shū)名圖書(shū)的相關(guān)信息。5) 輸出圖書(shū)的注銷(xiāo)信息。(5)處理學(xué)生信息查詢(xún) 1)規(guī)格說(shuō)明讀者登記,即讀者的具體信

11、息。2)引言為了把讀者的具體信息(包括:讀者編號(hào),姓名,學(xué)院,專(zhuān)業(yè),年級(jí)等)寫(xiě)入讀者目錄文件中。3)輸入讀者具體信息。4)處理通過(guò)圖書(shū)管理系統(tǒng)寫(xiě)入讀者目錄文件中。5)輸出讀者具體信息。(6)處理圖書(shū)信息查詢(xún)1)規(guī)格說(shuō)明查詢(xún)圖書(shū)的相關(guān)內(nèi)容。2)引言為了查找圖書(shū)的相關(guān)信息。 3)輸入圖書(shū)信息的關(guān)鍵字(圖書(shū)分類(lèi)號(hào)或書(shū)名)。4)處理利用關(guān)鍵字在圖書(shū)目錄文件中找到此圖書(shū)分類(lèi)號(hào)或書(shū)名圖書(shū)的相關(guān)信息。5)輸出圖書(shū)的相關(guān)信息。 4、7數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)typedef struct BookList char num10; char name20; char author20; int total; int lea

12、vings; struct BookList *next;Book; 采用鏈表的結(jié)構(gòu)來(lái)進(jìn)行數(shù)據(jù)操作,一本書(shū)的數(shù)據(jù)包括:書(shū)號(hào)、書(shū)名、作者、庫(kù)存總量、現(xiàn)存量以及指針區(qū)域。算法的設(shè)計(jì)()關(guān)鍵算法設(shè)計(jì)思路描述 在構(gòu)思圖書(shū)館管理系統(tǒng)的結(jié)構(gòu)時(shí),我將整個(gè)程序劃分為五個(gè)模塊,分別定義了五個(gè)函數(shù)來(lái)實(shí)現(xiàn)管理系統(tǒng)的功能,除此之外在對(duì)程序的界面設(shè)計(jì)上加入了一些動(dòng)畫(huà)效果。在數(shù)據(jù)結(jié)構(gòu)上采用單鏈表的結(jié)構(gòu)方式,這樣在讀取文件中數(shù)據(jù)的時(shí)候能夠節(jié)省內(nèi)存空間。設(shè)計(jì)主菜單時(shí),用while(1)和switch()來(lái)實(shí)現(xiàn)功能的選擇以及運(yùn)行一項(xiàng)功能后返回主菜單。在整個(gè)程序中,統(tǒng)一采用了以輸入的方式返回或退出,并在模塊有需要鍵盤(pán)輸入地方加入

13、了防錯(cuò)誤輸入的功能,防止輸入錯(cuò)誤導(dǎo)致程序錯(cuò)誤運(yùn)行,此功能采用判斷輸入值的ASCII碼或字符串的比較。入庫(kù)模塊:首先判斷數(shù)據(jù)文件是否存在,如存在以追加的方式打開(kāi),如不存在以寫(xiě)入的方式打開(kāi)。輸入圖書(shū)的具體數(shù)據(jù)(在輸入過(guò)程中,如輸入的書(shū)號(hào)為則返回主菜單)、存盤(pán),判斷存盤(pán)成功則打印“成功添加”,如存盤(pán)失敗打印“添加失敗”。最后返回入起始界面(入庫(kù)模塊)。清除模塊:進(jìn)入清除模塊則將文件中的全部數(shù)據(jù)用單鏈表的結(jié)構(gòu)讀入內(nèi)存,提示輸入要?jiǎng)h除的書(shū)號(hào),在內(nèi)存中尋找并刪除,刪除后可以馬上存盤(pán)或是直到全部刪除完成后再選擇操作,在防止操作后忘記存盤(pán),在程序中加入了自動(dòng)判斷操作過(guò)的數(shù)據(jù)是否己經(jīng)進(jìn)行過(guò)存盤(pán)的功能。查詢(xún)模塊:

14、本模塊分為三個(gè)子模塊:以書(shū)號(hào)方式查詢(xún)、以書(shū)名的方式查詢(xún)、以作者的方式查詢(xún)。前兩個(gè)查詢(xún)功能只要找到符合條件的數(shù)據(jù)時(shí)就停止,以作者方式因?yàn)榭紤]到一個(gè)作者不止一本作品,所以對(duì)全部的數(shù)據(jù)進(jìn)行查找,并打印出所有符合條件的數(shù)據(jù)。如果未找到則打印“沒(méi)有找到”,最后返回子功能模塊起始,直到輸入返回上一級(jí)。借出、還書(shū)模塊:這兩個(gè)功能的思路完全一樣,不同的是對(duì)數(shù)據(jù)中的現(xiàn)存量的運(yùn)算。兩個(gè)功能都是先建立一個(gè)圖書(shū)類(lèi)型的數(shù)據(jù)指針,逐條將文件中的數(shù)據(jù)讀入內(nèi)存,并與輸入的數(shù)據(jù)進(jìn)行比較,如果一致則先對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行操作,再將文件中的fp指針后退sizeof(Book)個(gè)字節(jié),將內(nèi)存中的經(jīng)過(guò)修改過(guò)的數(shù)據(jù)寫(xiě)入文件。完成一條操作后

15、,提示進(jìn)行下一條操作,輸入時(shí)返回主菜單。()程序結(jié)構(gòu)及模塊名稱(chēng)描述主程序界面初始化入 庫(kù)清 除查 詢(xún)借 出歸 還書(shū)號(hào) 查詢(xún)書(shū)名 查詢(xún)作者 查詢(xún)?nèi)?列表a ) void main() /主程序b ) void s(long) /時(shí)間延遲函數(shù)c ) void sta() /界面初始效果d ) void wel() /界面初始效果e ) void bookadd()/入庫(kù)f ) void sa_ve(sqtype) /清除函數(shù)中保存文件函數(shù)g ) void del() /清除h ) void r() /查詢(xún)j ) void s_1() /查詢(xún)功能中以書(shū)號(hào)方式查詢(xún)k ) void s_2() /以書(shū)

16、名方式查詢(xún)l ) void s_3() /以作者方式查詢(xún)m ) void readall() /列出全部圖書(shū)n ) void borrow() /借出o ) void back() /歸還p ) void bye() /退出效果()主要模塊算法描述/*添加*/void bookadd() /*添加圖書(shū)*/ FILE *fp; Book finger; char temp10; fp=fopen("blist.db","rb");/*讀方式打開(kāi)文件*/ if(fp=NULL) fp=fopen("blist.db","wb&q

17、uot;); /*寫(xiě)方式打開(kāi)文件*/ else/*如果有書(shū)就添加*/ fclose(fp); fp=fopen("blist.db","ab");/*追加方式打開(kāi)文件*/ clrscr(); while(1) printf("n請(qǐng)輸入數(shù)據(jù):n");/*逐個(gè)輸入新圖書(shū)的資料*/ printf("請(qǐng)輸入書(shū)號(hào)(輸入0結(jié)束添加):"); gets(temp); if(strcmp(temp,"0") strcpy(finger.num,temp); else break; printf("請(qǐng)輸

18、入書(shū)名: "); scanf("%s",); printf("請(qǐng)輸入書(shū)的作者: "); scanf("%s",finger.author); printf("請(qǐng)輸入書(shū)的總數(shù): "); scanf("%d",&finger.total);b=getchar(); finger.leavings=finger.total; finger.next=NULL; if(fwrite(&finger,sizeof(Book),1,fp)/*塊寫(xiě)*/ prin

19、tf("-n"); printf("己成功添加:n書(shū)號(hào):%s 書(shū)名:%s 作者:%s 庫(kù)存總量:%d 現(xiàn)存量:%dn",finger.num,,finger.author,finger.total,finger.leavings); printf("-"); else printf("對(duì)不起,數(shù)據(jù)寫(xiě)入文件錯(cuò)誤!"); fclose(fp); clrscr();/*刪除*/del() /*刪除功能函數(shù)*/ FILE *fp;Book *head,*p,*q,*temp;char a10,s;in

20、t flag=0,flag2,flag3=0; fp=fopen("blist.db","rb"); head=p=q=(Book*)malloc(sizeof(Book); fread(p,sizeof(Book),1,fp); while(!feof(fp) q=p; p=(Book*)malloc(sizeof(Book); fread(p,sizeof(Book),1,fp); q->next=p; p->next=NULL;del_re: flag2=0; clrscr(); gotoxy(1,3);textcolor(4);cpr

21、intf("提示:"); textcolor(7);gotoxy(6,4);printf("您可以逐次操作后存盤(pán),也可以完成全部"); gotoxy(6,5);printf("操作后退出時(shí)存盤(pán),不進(jìn)行存盤(pán)您所有刪");gotoxy(6,6);printf("除操作對(duì)文件無(wú)效!"); gotoxy(1,23);printf("請(qǐng)輸入要?jiǎng)h除的書(shū)號(hào)(0退出,00存盤(pán)):");gets(a); if(!strcmp(a,"0") goto del_end; else if(!strc

22、mp(a,"00") if(flag=0) gotoxy(50,24);textcolor(4);cprintf("您還未進(jìn)行任何刪除操作!");textcolor(7);getch();clreol();goto del_re; else flag3+=sa_ve(head);goto del_re; p=head; while(p!=q->next) if(!strcmp(a,p->num) if(p=head) head=p->next;flag+;flag2=1;gotoxy(35,13);printf("刪除成功!&

23、quot;);getch();goto del_re; else temp->next=p->next;flag+;flag2=1;gotoxy(35,13);printf("刪除成功!");getch();goto del_re; temp=p; p=p->next; if(flag2=0) gotoxy(50,24);textcolor(4);cprintf("對(duì)不起沒(méi)有找到你要?jiǎng)h除的數(shù)據(jù)!");textcolor(7);getch();clreol();goto del_re;del_end: if(flag>flag3)

24、gotoxy(22,13);clreol();printf("您還有刪除操作未存盤(pán),是否存盤(pán)(Y/N):");s=getchar(); if(s=78|s=89|s=110|s=121) if(s=89|s=121) gotoxy(1,13);clreol();sa_ve(head);b=getchar(); else b=getchar();goto del_end2; else goto del_end; del_end2: fclose(fp);/*查找(按書(shū)號(hào)查找)*/s_1() /*查找子函數(shù)中的按書(shū)號(hào)查詢(xún)功能*/ char temp_num10; Book fi

25、nger; int flag; FILE *fp; fp=fopen("blist.db","rb");s_1re: flag=0;gotoxy(1,25);printf("請(qǐng)輸入書(shū)號(hào)(輸入0返回):"); scanf("%s",temp_num); if(!strcmp(temp_num,"0") fclose(fp);goto s_1end; while(!feof(fp) fread(&finger,sizeof(Book),1,fp); if(!strcmp(finger.num

26、,temp_num) clrscr(); textcolor(4);cprintf(" 書(shū)號(hào)");gotoxy(17,1);cprintf("書(shū)名"); gotoxy(33,1);cprintf("作者");gotoxy(47,1);cprintf("總庫(kù)存"); gotoxy(63,1);cprintf("現(xiàn)存量rn");textcolor(7); printf(" %stt%stt%stt%dtt%dn",finger.num,,finger.aut

27、hor,finger.total,finger.leavings); flag=1;rewind(fp);break; if(flag=0) clrscr();gotoxy(28,12);printf("沒(méi)有找到您要查詢(xún)的書(shū)!");rewind(fp);getch();clrscr(); goto s_1re;s_1end: b=getchar();/*借書(shū)功能*/borrow() FILE *fp;char a10;int flag; Book n; fp=fopen("blist.db","rb+"); clrscr();borr

28、ow_re: flag=0; gotoxy(1,13);clreol();gotoxy(1,24); clreol(); gotoxy(1,23);printf("請(qǐng)輸入要借的書(shū)號(hào)(輸入0返回):");clreol(); gets(a);if(!strcmp(a,"0") goto borrow_end; fread(&n,sizeof(Book),1,fp); while(!feof(fp) if(!strcmp(a,n.num) /*一樣的話(huà)*/ if(n.leavings=0) printf("對(duì)不起,此書(shū)全部借出.n"

29、); else -n.leavings; fseek(fp,-56L,1); fwrite(&n,sizeof(Book),1,fp); gotoxy(35,13);printf("借出成功!");flag=1;getch(); rewind(fp);break; fread(&n,sizeof(Book),1,fp); if(flag=0) gotoxy(35,13);printf("借書(shū)失敗!");rewind(fp);getch(); goto borrow_re;borrow_end: fclose(fp); 四、源程序清單:(見(jiàn)

30、源程序文件名:_lib.c_)五、測(cè)試數(shù)據(jù)及測(cè)試結(jié)果:(一)添加輸入數(shù)據(jù):書(shū)號(hào) 書(shū)名 作者 庫(kù)存1001 h1 li 81002 h2 ki 81003 h3 fd 91004 h4 li 101005 h5 sdfs 111006 h6 ed 91007 h7 tio 7(二)清除輸入清除的書(shū)號(hào):1006提示刪除成功,運(yùn)行查詢(xún)功能中的查詢(xún)?nèi)抗δ埽_認(rèn)1006己被刪除(三)查詢(xún)書(shū)號(hào)查詢(xún),輸入:1005輸出:1005 h5 sdfs 11書(shū)名查詢(xún),輸入:h7輸出:1007 h7 tio 7作者查詢(xún),輸入:li輸出:1001 h1 li 8 1004 h4 li 10(四)借出輸入:1004輸出

31、:借出成功運(yùn)行查詢(xún)功能中的查詢(xún)?nèi)抗δ埽@示:書(shū)號(hào)書(shū)名作者庫(kù)存現(xiàn)存1004 h4 li 10 9(五)歸還輸入:輸出:歸還成功運(yùn)行查詢(xún)功能中查詢(xún)?nèi)?,顯示:書(shū)號(hào)書(shū)名作者庫(kù)存現(xiàn)存1004 h4 li 10 10六、心得體會(huì):編寫(xiě)整個(gè)模擬圖書(shū)館管理程序歷時(shí)五天,五個(gè)功能模塊中的入庫(kù)與查詢(xún)模塊由于定義函數(shù)名與語(yǔ)言中自帶函數(shù)名沖突,到發(fā)現(xiàn)原因并修改,期間耗時(shí)三天。在三天期間,在不知道沖突原因之前,我在幾個(gè)論壇上發(fā)貼,有回貼的竟沒(méi)人知道原因,后來(lái)偶然的靈機(jī)一動(dòng),將函數(shù)名更改,程序順利運(yùn)行。我還從網(wǎng)上下了一本語(yǔ)言函數(shù)的電子書(shū),經(jīng)查確實(shí)是由于函數(shù)名沖突。所以,我們?cè)诙x函數(shù)的時(shí)候,在注意函數(shù)名是否與語(yǔ)言自帶

32、的函數(shù)沖突。因?yàn)槲冶容^喜歡有應(yīng)用性的程序,所以挑選圖書(shū)館來(lái)做,但是在確定所用數(shù)據(jù)結(jié)構(gòu)方面,構(gòu)思時(shí)考慮不足,忽略了圖書(shū)館內(nèi)書(shū)的數(shù)據(jù)量,一直到入庫(kù)與查詢(xún)兩個(gè)模塊完成,我還是采用順序表的結(jié)構(gòu)來(lái)進(jìn)行數(shù)據(jù)操作,但是在編寫(xiě)清除模塊的時(shí)候,突然間發(fā)現(xiàn)將文件數(shù)據(jù)全部讀出時(shí),如果采用順序鏈表就必須欲先定制一個(gè)足夠大的空間,所以我又將數(shù)據(jù)結(jié)構(gòu)改成單鏈表以節(jié)省內(nèi)存空間。在編寫(xiě)入庫(kù)和查詢(xún)模塊時(shí),用的知識(shí)都只是大一所學(xué)語(yǔ)言老師教過(guò)的,如打開(kāi)文件fopen命令,讀取文件fread命令,寫(xiě)入文件fwrite命令等等。對(duì)文件的其它詳細(xì)操作一無(wú)所知,如讀取時(shí)文件fp指針的位置,如何讓fp指針在文件中定位等等。但是我在編寫(xiě)借出,

33、歸還和清除三個(gè)模塊時(shí),恰恰得用到這些知識(shí),所以借用ftell()命令,自己慢慢的摸索出一些門(mén)道。如:在借出和歸還模塊里,我采用的方法是,定義一個(gè)圖書(shū)類(lèi)型的結(jié)構(gòu)體指針,一次從文件里只讀取一個(gè)數(shù)據(jù),將它的關(guān)鍵字符段與輸入數(shù)據(jù)進(jìn)行比較,如果一致則將文件指針fp往后移動(dòng)sizeof(Listtype)個(gè)字節(jié),然后將經(jīng)過(guò)這個(gè)修改后的數(shù)據(jù)寫(xiě)入文件。之所以采用這個(gè)方法,我是考慮到它在內(nèi)存中只占用了sizeof(Listtype)字節(jié)個(gè)空間,并且也只需向文件中寫(xiě)入一次。如果用鏈表全部讀取、修改后再保存文件,一是占用了很大的內(nèi)存空間,二是要向文件中寫(xiě)入全部的數(shù)據(jù)。但是,如果要進(jìn)行多次借出操作的時(shí)候,用鏈表讀取只

34、需要全部操作完后一次對(duì)修改后的數(shù)據(jù)進(jìn)行寫(xiě)入,期間的操作只需在內(nèi)存中進(jìn)行。而用我的方法,借一次就必需打開(kāi)文件,逐條讀取,修改寫(xiě)入。所以至于哪種方法更好,我自己具體也弄不清,還請(qǐng)老師多多指點(diǎn)一下。因?yàn)樵谡麄€(gè)程序中,我在主函數(shù)和五個(gè)功能函數(shù)中都用到了無(wú)限循環(huán)體 while(1)以實(shí)現(xiàn)操作結(jié)束后仍然停留在這個(gè)功能模塊,直到輸入以退出。因?yàn)檫@種結(jié)構(gòu),在編寫(xiě)和測(cè)試過(guò)程中遇到了種種的問(wèn)題而造成程序運(yùn)行錯(cuò)誤或是死循環(huán),于是我采用隔數(shù)行打印一些字符的方法以判斷是哪一個(gè)環(huán)節(jié)出錯(cuò),這個(gè)方法雖然是麻煩一點(diǎn)但能達(dá)到一定的效果。刪除功能函數(shù)是最后編寫(xiě)的,在編寫(xiě)時(shí)思路也經(jīng)過(guò)改變,原本的思路是:一次從文件中讀取一條與輸入數(shù)據(jù)比較,找到符合條件的數(shù)據(jù)后,記住此時(shí)文件指針fp的位置,將fp后面直到文件結(jié)束的數(shù)據(jù)讀入鏈表中,最后將f

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論