軟件架構(gòu)設(shè)計范圍及軟件工程圖書管理系統(tǒng)需求分析報告_第1頁
軟件架構(gòu)設(shè)計范圍及軟件工程圖書管理系統(tǒng)需求分析報告_第2頁
軟件架構(gòu)設(shè)計范圍及軟件工程圖書管理系統(tǒng)需求分析報告_第3頁
軟件架構(gòu)設(shè)計范圍及軟件工程圖書管理系統(tǒng)需求分析報告_第4頁
軟件架構(gòu)設(shè)計范圍及軟件工程圖書管理系統(tǒng)需求分析報告_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、什么是軟件架構(gòu),談談你對軟件架構(gòu)的理解 某個軟件或計算機系統(tǒng)的軟件架構(gòu)是該系統(tǒng)的一個或多個結(jié)構(gòu),每個結(jié)構(gòu)均由軟件元素、這些元素的外部可減屬性、這些元素之間的關(guān)系組成。 我認為軟件架構(gòu)就是某個軟件系統(tǒng)在規(guī)劃設(shè)計時,需要預先設(shè)計好框架結(jié)構(gòu),保證軟件的設(shè)計大方向的正確性,確保設(shè)計好的軟件的質(zhì)量、安全、可擴展等性能得到保障。2、什么是架構(gòu)視圖?為什么軟件架構(gòu)師需要提供多個不同的軟件架構(gòu)視圖? 架構(gòu)視圖是一種設(shè)計架構(gòu)、描述架構(gòu)的核心手段,是對于從某一角度或某一點上看到的系統(tǒng)所作的簡化描述,描述中涵蓋了系統(tǒng)的某一特定方面,而省略了與此方面無關(guān)的實體。 由于軟件團隊和客戶各自掌握的技術(shù)存在差異,為了完成各自的工作,他們需要了解整套軟件架構(gòu)決策的不同方面,所以軟件架構(gòu)師需要提供多個不同的軟件架構(gòu)視圖,以便交流和傳達設(shè)計思想。3、簡述軟件架構(gòu)設(shè)計的3個原則 原則1:看透需求 這是基礎(chǔ),設(shè)計人員要找全需求,搞清楚需求項之間的矛盾關(guān)系、追溯關(guān)系。 原則2:架構(gòu)大方向正確 這是一種策略,先設(shè)計概念架構(gòu),更重視“找對路子”。 原則3:設(shè)計好架構(gòu)的各個方面, 運用多視圖設(shè)計方法從多方面進行架構(gòu)設(shè)計,把問題研究、表達清楚,否則會有掩蓋問題及延誤解決問題的風險。4、軟件架構(gòu)設(shè)計過程包含哪些步驟以及之間的關(guān)系? 1)需求分析 2)領(lǐng)域建模 3)確定關(guān)鍵需求 4)概念架構(gòu)設(shè)計 5)細化架構(gòu)設(shè)計 6)架構(gòu)驗證5、軟件架構(gòu)設(shè)計過程中,如何確定關(guān)鍵需求? 1)確定關(guān)鍵質(zhì)量 著重提高軟件認可度相關(guān)的質(zhì)量屬性要求;充分考慮這些質(zhì)量屬性的相互制約或促進的關(guān)系;同時必須滿足各種約束性需求。 2)確定關(guān)鍵功能 核心功能,必做功能,高風險功能,獨特功能6、在細化架構(gòu)設(shè)計過程中,包括哪5個視圖?每個視圖分別包括哪些設(shè)計任務? 1)邏輯視圖 模塊劃分、接口定義、領(lǐng)域模型2)開發(fā)視圖 技術(shù)選型、文件劃分、編譯關(guān)系3)運行視圖 技術(shù)選型、控制流劃分、同步關(guān)系4)物理視圖 硬件分布、軟件部署、方案優(yōu)化5)數(shù)據(jù)視圖 技術(shù)選型、存儲格式、數(shù)據(jù)分布7、請簡述概念架構(gòu)設(shè)計階段的1個決定、4個選擇 決定如何劃分頂級子系統(tǒng) 選擇架構(gòu)風格,選擇開發(fā)技術(shù),選擇集成技術(shù),選擇二次開發(fā)技術(shù)8、在軟件架構(gòu)設(shè)計中,如何進行架構(gòu)驗證? 1)原型法 用于項目型開發(fā),借助專門工具營造出想要的場景,進行真實性測試,重點是質(zhì)量屬性測試,進行挑選原型實現(xiàn)的功能需求(用戶最關(guān)心的,架構(gòu)師最擔心的那些)。 2)框架法 用于產(chǎn)品開發(fā),將架構(gòu)設(shè)計方案用框架的形式表現(xiàn),并在此基礎(chǔ)上進行評估驗證。9、簡述用例驅(qū)動的模塊劃分過程 兩環(huán)節(jié)、四步驟 1)需求分析環(huán)節(jié) 2)架構(gòu)設(shè)計環(huán)節(jié) 第一步回答“實現(xiàn)用例需要哪些類”的問題——運用魯棒圖、序列圖 第二部回答“這些類應劃歸哪些模塊”的問題——運用包圖10、簡述封裝驅(qū)動設(shè)計方法(EDD方法)的步驟。 4步驟 1)研究需求 重點是上下文圖和功能樹,發(fā)現(xiàn)問題,第一時間提出。 2)粗粒度分層 根據(jù)功能樹,粗粒度劃分功能模塊 3)細粒度劃分模塊 4)用例驅(qū)動的模塊劃分結(jié)構(gòu)評審、優(yōu)化軟件工程報告圖書管理系統(tǒng)需求性分析姓名:學號:班級:應數(shù)班引言1.1編寫目的此規(guī)格說明書是為了對圖書館管理系統(tǒng)做一個概要的說明,是軟件的大概的分析過程,對最終的軟件加以說明。主要的讀者為軟件設(shè)計人員,程序編寫員,以及老師。1.2項目背景該項目作為計算機學院05級的軟件課程設(shè)計題目,學生應該在規(guī)定的時間之內(nèi)完成,時間是第七周(4月7日)到第十二周(5月16日),學生應該在這個時間之內(nèi)做好需求規(guī)格說明書,概要設(shè)計說明書,詳細設(shè)計說明書,以及做好程序,并在最后加以用戶操作手冊等一系列詳細的設(shè)計要求。1.3定義1.4參考資料《實用軟件工程》第二版鄭人杰殷人昆陶永雷等主編清華大學出版社《delphi程序員成長攻略》蒙祖強龔濤等編著中國水利水電出版社《delphi7開發(fā)實例完全剖析》王志強編著中國電力出版社《精通delphi數(shù)據(jù)庫設(shè)計與實例開發(fā)》陳潤編著中國青年出版社任務概述2.1目標通過該系統(tǒng)可以實現(xiàn)最基本的圖書館的一系列的操作流程,其中包括:圖書的借閱,圖書的查找,圖書的退還,借書證的申請,圖書的上架處理,圖書的過期未還的處罰等等功能。這些功能要用delphi以及后臺的數(shù)據(jù)庫SQL來實現(xiàn)。2.2運行環(huán)境Windows98/2000/XP/2003操作系統(tǒng)下,安裝并配置軟件MicrosoftSQLServer2000數(shù)據(jù)庫管理系統(tǒng)。作者用的是windowsXP操作系統(tǒng),理論上可以在windows98/2000/2003下運行的。2.3條件與限制因現(xiàn)在配有windows98與windows2003的操作系統(tǒng)的電腦較少,不易找到,所以在這兩種操作系統(tǒng)上實驗比較困難。3、數(shù)據(jù)描述3.1靜態(tài)數(shù)據(jù)圖書:圖書編碼,書名,書號,圖書類別,作者,出版社,出版時間,單價管理員:用戶名,密碼,權(quán)限,姓名讀者:借書卡號,姓名,性別,讀者類別,所屬系部,部門或班級3.2動態(tài)數(shù)據(jù)輸入數(shù)據(jù):鼠標對按鈕的點擊,查詢方式,查詢關(guān)鍵字,新建圖書項,新建讀者項,圖書項、讀者項記錄的修改,圖書借還以及注銷操作時的輸入信息,受限操作所需的密碼等。輸出數(shù)據(jù):查詢關(guān)鍵字所確定的數(shù)據(jù)庫子集,統(tǒng)計結(jié)果,操作成功或失敗的消息,圖書借還以及注銷操作時的結(jié)果信息。3.3數(shù)據(jù)庫描述數(shù)據(jù)庫采用SQLServer數(shù)據(jù)庫。3.4數(shù)據(jù)流圖與數(shù)據(jù)字典1、數(shù)據(jù)流圖(1)頂層數(shù)據(jù)流圖(2)0層數(shù)據(jù)流圖(3)1層數(shù)據(jù)流圖1.讀者信息管理2.圖書信息管理3.圖書借還管理ER圖:3.4數(shù)據(jù)詞典(DD)高級管理員(帳號,姓名)一般管理員(帳號,姓名)普通用戶(帳號,姓名,班級,性別,組號)登錄用戶(帳號,密碼,權(quán)限)圖書類別(類別,類名)圖書(圖書編號,類別,書名,作者,出版日期,出版社,定價,總數(shù)量,剩下數(shù)量,備注)借閱(用戶帳號,圖書編號,借書日期,到期日期,數(shù)量,還書日期)3.5數(shù)據(jù)采集數(shù)據(jù)通過事先的錄入,形成最基本的管理人員帳號,通過管理人員的管理,可以實現(xiàn)相應的數(shù)據(jù)的添加,刪減。比如,管理員可以添加用戶的相關(guān)信息(通過辦理借書證)還可以添加圖書(通過新書上架)來辦理。功能需求4.1功能劃分圖書管理系統(tǒng)主要實現(xiàn)以下七方面的功能:a.查詢b.圖書借還c.圖書入庫d.圖書維護e.圖書超期提示f.環(huán)境管理4.2功能描述圖書管理包括查詢、借還、入庫、維護、超期提示、環(huán)境管理七方面功能。圖書入庫,主要實現(xiàn)入庫登記。圖書借閱,用戶需憑相應證件到圖書館進行借書,并由圖書管理員進行相應的登記記錄檔案。查詢,當用戶要查詢自己的借閱情況時,可以進行借閱查詢。用戶可以通過此系統(tǒng)進行圖書的查詢和讀者查詢(即用戶自己的相關(guān)信息查詢)。圖書超期提示,當借閱者在已到借書期限時仍未歸還圖書,提示其盡快辦理歸還手續(xù)。并由系統(tǒng)計算相應的處罰。圖書維護,圖書管理員可以通過此系統(tǒng)進行相應的圖書的維護計算。4.3數(shù)據(jù)流圖(DFD) a.新書入庫數(shù)據(jù)庫1.3處理入庫1.2更新書刊庫存清單1.1接受事務圖書管理員 D1 庫存清單數(shù)據(jù)庫1.3處理入庫1.2更新書刊庫存清單1.1接受事務圖書管理員 D2b.圖書借閱 D1 庫存清單處理借閱數(shù)據(jù)庫進行借閱登記處理借閱數(shù)據(jù)庫進行借閱登記借閱者C.過期提示處理通知信息顯示器進行日期處理圖書管理員處理通知信息顯示器進行日期處理圖書管理員d.借閱查詢顯示器2產(chǎn)生匯總1.1操作事務借閱者顯示器2產(chǎn)生匯總1.1操作事務借閱者1.21.2處理查詢D1借閱查詢清單e.還書處理數(shù)據(jù)庫1.3處理歸還1.2更新圖書庫存清單1.1接受事務圖書管理員 D1庫存清單數(shù)據(jù)庫1.3處理歸還1.2更新圖書庫存清單1.1接受事務圖書管理員借書:還書:新書上架:4、4需求規(guī)定在圖書管理系統(tǒng)中,管理員要為每個讀者建立借閱賬戶,并給讀者發(fā)放不同類別的借閱卡(借閱卡可提供卡號、讀者姓名),賬戶內(nèi)存儲讀者的個人信息和借閱記錄信息。持有借閱卡的讀者可以通過管理員(作為讀者的代理人與系統(tǒng)交互)借閱、歸還圖書,不同類別的讀者可借閱圖書的范圍、數(shù)量和期限不同,可通過互聯(lián)網(wǎng)或圖書館內(nèi)查詢終端查詢圖書信息和個人借閱情況,以及續(xù)借圖書(系統(tǒng)審核符合續(xù)借條件)。借閱圖書時,先輸入讀者的借閱卡號,系統(tǒng)驗證借閱卡的有效性和讀者是否可繼續(xù)借閱圖書,無效則提示其原因,有效則顯示讀者的基本信息(包括照片),供管理員人工核對。然后輸入要借閱的書號,系統(tǒng)查閱圖書信息數(shù)據(jù)庫,顯示圖書的基本信息,供管理員人工核對。最后提交借閱請求,若被系統(tǒng)接受則存儲借閱紀錄,并修改可借閱圖書的數(shù)量。歸還圖書時,輸入讀者借閱卡號和圖書號(或丟失標記號),系統(tǒng)驗證是否有此借閱紀錄以及是否超期借閱,無則提示,有則顯示讀者和圖書的基本信息供管理員人工審核。如果有超期借閱或丟失情況,先轉(zhuǎn)入過期罰款或圖書丟失處理。然后提交還書請求,系統(tǒng)接受后刪除借閱紀錄,并登記并修改可借閱圖書的數(shù)量。圖書管理員定期或不定期對圖書信息進行入庫、修改、刪除等圖書信息管理以及注銷(不外借),包括圖書類別和出版社管理。為系統(tǒng)維護人員提供權(quán)限管理、數(shù)據(jù)備份等通用功能。4、5功能分類4、6具體需求系統(tǒng)的總體圖見圖 第一層圖:(1):登陸子系統(tǒng)(2)管理子模塊(3)查詢模塊第二層圖:(1):處理新書購入規(guī)格說明輸入新書的全部信息。2)引言為了輸入新書的全部信息(包括:分類目錄號,流水號書名,作者,內(nèi)容摘要,價格和購書日期等)。3)輸入新書的全部信息。4)處理通過圖書管理系統(tǒng)寫入圖書目錄文件。5)輸出新書的全部信息。處理學生借書規(guī)格說明查詢讀者借書的相關(guān)信息。2)引言為了查詢讀者借書的相關(guān)信息。3)輸入借書信息的關(guān)鍵字。4)處理利用關(guān)鍵字在借書文件中找到此流水號圖書的相關(guān)信息。5)輸出借書相關(guān)信息。(3):處理學生還書1)規(guī)格說明輸入讀者還書信息。引言為了把讀者還書的相關(guān)信息(包括:圖書分類號,流水號,讀者號,借閱日期和還書日期等)寫入還書文件中。輸入讀者還書信息。4)處理通過圖書管理系統(tǒng)寫入還書文件中。5)輸出讀者還書信息的全部內(nèi)容。(4):處理圖書注銷規(guī)格說明注銷圖書的相關(guān)內(nèi)容。引言為了注銷圖書的相關(guān)信息。輸入圖書信息的關(guān)鍵字(圖書分類號或書名)。處理利用關(guān)鍵字在圖書目錄文件中找到此圖書分類號或書名圖書的相關(guān)信息。輸出圖書的注銷信息。(5)處理學生信息查詢1)規(guī)格說明讀者登記,即讀者的具體信息。2)引言為了把讀者的具體信息(包括:讀者編號,姓名,學院,專業(yè),年級等)寫入讀者目錄文件中。3)輸入讀者具體信息。4)處理通過圖書管理系統(tǒng)寫入讀者目錄文件中。5)輸出讀者具體信息。

(6)處理圖書信息查詢1)規(guī)格說明查詢圖書的相關(guān)內(nèi)容。2)引言為了查找圖書的相關(guān)信息。3)輸入圖書信息的關(guān)鍵字(圖書分類號或書名)。4)處理利用關(guān)鍵字在圖書目錄文件中找到此圖書分類號或書名圖書的相關(guān)信息。5)輸出圖書的相關(guān)信息。4、7.數(shù)據(jù)結(jié)構(gòu)的設(shè)計typedefstructBookList{charnum[10];charname[20];charauthor[20];inttotal;intleavings;structBookList*next;}Book;采用鏈表的結(jié)構(gòu)來進行數(shù)據(jù)操作,一本書的數(shù)據(jù)包括:書號、書名、作者、庫存總量、現(xiàn)存量以及指針區(qū)域。2.算法的設(shè)計(1)關(guān)鍵算法設(shè)計思路描述在構(gòu)思圖書館管理系統(tǒng)的結(jié)構(gòu)時,我將整個程序劃分為五個模塊,分別定義了五個函數(shù)來實現(xiàn)管理系統(tǒng)的功能,除此之外在對程序的界面設(shè)計上加入了一些動畫效果。在數(shù)據(jù)結(jié)構(gòu)上采用單鏈表的結(jié)構(gòu)方式,這樣在讀取文件中數(shù)據(jù)的時候能夠節(jié)省內(nèi)存空間。設(shè)計主菜單時,用while(1)和switch()來實現(xiàn)功能的選擇以及運行一項功能后返回主菜單。在整個程序中,統(tǒng)一采用了以輸入0的方式返回或退出,并在模塊有需要鍵盤輸入地方加入了防錯誤輸入的功能,防止輸入錯誤導致程序錯誤運行,此功能采用判斷輸入值的ASCII碼或字符串的比較。入庫模塊:首先判斷數(shù)據(jù)文件是否存在,如存在以追加的方式打開,如不存在以寫入的方式打開。輸入圖書的具體數(shù)據(jù)(在輸入過程中,如輸入的書號為0則返回主菜單)、存盤,判斷存盤成功則打印“成功添加”,如存盤失敗打印“添加失敗”。最后返回入起始界面(入庫模塊)。清除模塊:進入清除模塊則將文件中的全部數(shù)據(jù)用單鏈表的結(jié)構(gòu)讀入內(nèi)存,提示輸入要刪除的書號,在內(nèi)存中尋找并刪除,刪除后可以馬上存盤或是直到全部刪除完成后再選擇操作,在防止操作后忘記存盤,在程序中加入了自動判斷操作過的數(shù)據(jù)是否己經(jīng)進行過存盤的功能。查詢模塊:本模塊分為三個子模塊:以書號方式查詢、以書名的方式查詢、以作者的方式查詢。前兩個查詢功能只要找到符合條件的數(shù)據(jù)時就停止,以作者方式因為考慮到一個作者不止一本作品,所以對全部的數(shù)據(jù)進行查找,并打印出所有符合條件的數(shù)據(jù)。如果未找到則打印“沒有找到”,最后返回子功能模塊起始,直到輸入0返回上一級。借出、還書模塊:這兩個功能的思路完全一樣,不同的是對數(shù)據(jù)中的現(xiàn)存量的運算。兩個功能都是先建立一個圖書類型的數(shù)據(jù)指針,逐條將文件中的數(shù)據(jù)讀入內(nèi)存,并與輸入的數(shù)據(jù)進行比較,如果一致則先對內(nèi)存中的數(shù)據(jù)進行操作,再將文件中的fp指針后退sizeof(Book)個字節(jié),將內(nèi)存中的經(jīng)過修改過的數(shù)據(jù)寫入文件。完成一條操作后,提示進行下一條操作,輸入0時返回主菜單。(2)程序結(jié)構(gòu)及模塊名稱描述主程序主程序界面初始化入庫清除查詢借出歸還書號查詢書名查詢作者查詢?nèi)苛斜韆)voidmain()//主程序b)voids(long)//時間延遲函數(shù)c)voidsta()//界面初始效果d)voidwel()//界面初始效果e)voidbookadd()//入庫f)voidsa_ve(sqtype)//清除函數(shù)中保存文件函數(shù)g)voiddel()//清除h)voidr()//查詢j)voids_1()//查詢功能中以書號方式查詢k)voids_2()//以書名方式查詢l)voids_3()//以作者方式查詢m)voidreadall()//列出全部圖書n)voidborrow()//借出o)voidback()//歸還p)voidbye()//退出效果(3)主要模塊算法描述/*添加*/voidbookadd()/*添加圖書*/{FILE*fp;Bookfinger;chartemp[10];fp=fopen("blist.db","rb");/*讀方式打開文件*/if(fp==NULL)fp=fopen("blist.db","wb");/*寫方式打開文件*/else/*如果有書就添加*/{fclose(fp);fp=fopen("blist.db","ab");/*追加方式打開文件*/}clrscr();while(1){printf("\n請輸入數(shù)據(jù):\n");/*逐個輸入新圖書的資料*/printf("請輸入書號(輸入0結(jié)束添加):");gets(temp);if(strcmp(temp,"0"))strcpy(finger.num,temp);elsebreak;printf("請輸入書名:");scanf("%s",);printf("請輸入書的作者:");scanf("%s",finger.author);printf("請輸入書的總數(shù):");scanf("%d",&finger.total);b=getchar();finger.leavings=finger.total;finger.next=NULL;if(fwrite(&finger,sizeof(Book),1,fp))/*塊寫*/{printf("-----------------------------------------------------------------------------\n");printf("己成功添加:\n書號:%s書名:%s作者:%s庫存總量:%d現(xiàn)存量:%d\n",finger.num,,finger.author,finger.total,finger.leavings);printf("-----------------------------------------------------------------------------");}elseprintf("對不起,數(shù)據(jù)寫入文件錯誤!");}fclose(fp);clrscr();}/*刪除*/del()/*刪除功能函數(shù)*/{FILE*fp;Book*head,*p,*q,*temp;chara[10],s;intflag=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);cprintf("提示:");textcolor(7);gotoxy(6,4);printf("您可以逐次操作后存盤,也可以完成全部");gotoxy(6,5);printf("操作后退出時存盤,不進行存盤您所有刪");gotoxy(6,6);printf("除操作對文件無效!");gotoxy(1,23);printf("請輸入要刪除的書號(0退出,00存盤):");gets(a);if(!strcmp(a,"0"))gotodel_end;elseif(!strcmp(a,"00")){if(flag==0){gotoxy(50,24);textcolor(4);cprintf("您還未進行任何刪除操作!");textcolor(7);getch();clreol();gotodel_re;}else{flag3+=sa_ve(head);gotodel_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("刪除成功!");getch();gotodel_re;}else{temp->next=p->next;flag++;flag2=1;gotoxy(35,13);printf("刪除成功!");getch();gotodel_re;}temp=p;p=p->next;}if(flag2==0){gotoxy(50,24);textcolor(4);cprintf("對不起沒有找到你要刪除的數(shù)據(jù)!");textcolor(7);getch();clreol();gotodel_re;}del_end:if(flag>flag3){gotoxy(22,13);clreol();printf("您還有刪除操作未存盤,是否存盤(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();}elseb=getchar();gotodel_end2;}elsegotodel_end;}del_end2:fclose(fp);}/*查找(按書號查找)*/s_1()/*查找子函數(shù)中的按書號查詢功能*/{chartemp_num[10];Bookfinger;intflag;FILE*fp;fp=fopen("blist.db","rb");s_1re:flag=0;gotoxy(1,25);printf("請輸入書號(輸入0返回):");scanf("%s",temp_num);if(!strcmp(temp_num,"0")){fclose(fp);gotos_1end;}while(!feof(fp)){fread(&finger,sizeof(Book),1,fp);if(!strcmp(finger.num,temp_num)){clrscr();textcolor(4);cprintf("書號");gotoxy(17,1);cprintf("書名");gotoxy(33,1);cprintf("作者");gotoxy(47,1);cprintf("總庫存");gotoxy(63,1);cprintf("現(xiàn)存量\r\n");textcolor(7);printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\n",finger.num,,finger.author,finger.total,finger.leavings);flag=1;rewind(fp);break;}}if(flag==0){clrscr();gotoxy(28,12);printf("沒有找到您要查詢的書!");rewind(fp);getch();clrscr();}gotos_1re;s_1end:b=getchar();}/*借書功能*/borrow(){FILE*fp;chara[10];intflag;Bookn;fp=fopen("blist.db","rb+");clrscr();borrow_re:flag=0;gotoxy(1,13);clreol();gotoxy(1,24);clreol();gotoxy(1,23);printf("請輸入要借的書號(輸入0返回):");clreol();gets(a);if(!strcmp(a,"0"))gotoborrow_end;fread(&n,sizeof(Book),1,fp);while(!feof(fp)){if(!strcmp(a,n.num))/*一樣的話*/{if(n.leavings==0)printf("對不起,此書全部借出.\n");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("借書失敗!");rewind(fp);getch();}gotoborrow_re;borrow_end:fclose(fp);}四、源程序清單:(見源程序文件名:____lib.c_____)五、測試數(shù)據(jù)及測試結(jié)果:(一)添加輸入數(shù)據(jù):書號書名作者庫存1001h1li81002h2ki81003h3fd91004h4li101005h5sdfs111006h6ed91007h7tio7(二)清除輸入清除的書號:1006提示刪除成功,運行查詢功能中的查詢?nèi)抗δ?,確認1006己被刪除(三)查詢1.書號查詢,輸入:1005輸出:1005h5sdfs112.書名查詢,輸入:h7輸出:1007h7tio73.作者查詢,輸入:li輸出:1001h1li81004h4li10(四)借出輸入:1004輸出:借出成功運行查詢功能中的查詢?nèi)抗δ埽@示:書號書名作者庫存現(xiàn)存1004h4li109(五)歸還輸入:1004輸出:歸還成功運行查詢功能中查詢?nèi)?,顯示:書號書名作者庫存現(xiàn)存1004h4li1010六、心得體會:編寫整個模擬圖書館管理程序歷時五天,五個功能模塊中的入庫與查詢模塊由于定義函數(shù)名與C語言中自帶函數(shù)名沖突,到發(fā)現(xiàn)原因并修改,期間耗時三天。在三天期間,在不知道沖突原因之前,我在幾個論壇上發(fā)貼,有回貼的竟沒人知道原因,后來偶然的靈機一動,將函數(shù)名更改,程序順利運行。我還從網(wǎng)上下了一本C語言函數(shù)的電子書,經(jīng)查確實是由于函數(shù)名沖突。所以,我們在定義函數(shù)的時候,在注意函數(shù)名是否與C語言自帶的函數(shù)沖突。因為我比較喜歡有應用性的程序,所以挑選圖書館來做,但是在確定所用數(shù)據(jù)結(jié)構(gòu)方面,構(gòu)思時考慮不足,忽略了圖書館內(nèi)書的數(shù)據(jù)量,一直到入庫與查詢兩個模塊完成,我還是采用順序表的結(jié)構(gòu)來進行數(shù)據(jù)操作,但是在編寫清除模塊的時候,突然間發(fā)現(xiàn)將文件數(shù)據(jù)全部讀出時,如果采用順序鏈表就必須欲先定制一個足夠大的空間,所以我又將數(shù)據(jù)結(jié)構(gòu)改成單鏈表以節(jié)省內(nèi)存空間。在編寫入庫和查詢模塊時,用的知識都只是大一所學C語言老師教過的,如打開文件fopen命令,讀取文件fread命令,寫入文件fwrite命令等等。對文件的其它詳細操作一無所知,如讀取時文件fp指針的位置,如何讓fp指針在文件中定位等等。但是我在編寫借出,歸還和清除三個模塊時,恰恰得用到這些知識,所以借用ftell()命令,自己慢慢的摸索出一些門道。如:在借出和歸還模塊里,我采用的方法是,定義一個圖書類型的結(jié)構(gòu)體指針,一次從文件里只讀取一個數(shù)據(jù),將它的關(guān)鍵字符段與輸入數(shù)據(jù)進行比較,如果一致則將文件指針fp往后移動sizeof(Listtype)個字節(jié),然后將經(jīng)過這個修改后的數(shù)據(jù)寫入文件。之所以采用這個方法,我是考慮到它在內(nèi)存中只占用了sizeof(Listtype)字節(jié)個空間,并且也只需向文件中寫入一次。如果用鏈表全部讀取、修改后再保存文件,一是占用了很大的內(nèi)存空間,二是要向文件中寫入全部的數(shù)據(jù)。但是,如果要進行多次借出操作的時候,用鏈表讀取只需要全部操作完后一次對修改后的數(shù)據(jù)進行寫入,期間的操作只需在內(nèi)存中進行。而用我的方法,借一次就必需打開文件,逐條讀取,修改寫入。所以至于哪種方法更好,我自己具體也弄不清,還請老師

溫馨提示

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

評論

0/150

提交評論