版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、什么是軟件架構(gòu),談?wù)勀銓?duì)軟件架構(gòu)的理解 某個(gè)軟件或計(jì)算機(jī)系統(tǒng)的軟件架構(gòu)是該系統(tǒng)的一個(gè)或多個(gè)結(jié)構(gòu),每個(gè)結(jié)構(gòu)均由軟件元素、這些元素的外部可減屬性、這些元素之間的關(guān)系組成。 我認(rèn)為軟件架構(gòu)就是某個(gè)軟件系統(tǒng)在規(guī)劃設(shè)計(jì)時(shí),需要預(yù)先設(shè)計(jì)好框架結(jié)構(gòu),保證軟件的設(shè)計(jì)大方向的正確性,確保設(shè)計(jì)好的軟件的質(zhì)量、安全、可擴(kuò)展等性能得到保障。2、什么是架構(gòu)視圖?為什么軟件架構(gòu)師需要提供多個(gè)不同的軟件架構(gòu)視圖? 架構(gòu)視圖是一種設(shè)計(jì)架構(gòu)、描述架構(gòu)的核心手段,是對(duì)于從某一角度或某一點(diǎn)上看到的系統(tǒng)所作的簡(jiǎn)化描述,描述中涵蓋了系統(tǒng)的某一特定方面,而省略了與此方面無關(guān)的實(shí)體。 由于軟件團(tuán)隊(duì)和客戶各自掌握的技術(shù)存在差異,為了完成各自的工作,他們需要了解整套軟件架構(gòu)決策的不同方面,所以軟件架構(gòu)師需要提供多個(gè)不同的軟件架構(gòu)視圖,以便交流和傳達(dá)設(shè)計(jì)思想。3、簡(jiǎn)述軟件架構(gòu)設(shè)計(jì)的3個(gè)原則 原則1:看透需求 這是基礎(chǔ),設(shè)計(jì)人員要找全需求,搞清楚需求項(xiàng)之間的矛盾關(guān)系、追溯關(guān)系。 原則2:架構(gòu)大方向正確 這是一種策略,先設(shè)計(jì)概念架構(gòu),更重視“找對(duì)路子”。 原則3:設(shè)計(jì)好架構(gòu)的各個(gè)方面, 運(yùn)用多視圖設(shè)計(jì)方法從多方面進(jìn)行架構(gòu)設(shè)計(jì),把問題研究、表達(dá)清楚,否則會(huì)有掩蓋問題及延誤解決問題的風(fēng)險(xiǎn)。4、軟件架構(gòu)設(shè)計(jì)過程包含哪些步驟以及之間的關(guān)系? 1)需求分析 2)領(lǐng)域建模 3)確定關(guān)鍵需求 4)概念架構(gòu)設(shè)計(jì) 5)細(xì)化架構(gòu)設(shè)計(jì) 6)架構(gòu)驗(yàn)證5、軟件架構(gòu)設(shè)計(jì)過程中,如何確定關(guān)鍵需求? 1)確定關(guān)鍵質(zhì)量 著重提高軟件認(rèn)可度相關(guān)的質(zhì)量屬性要求;充分考慮這些質(zhì)量屬性的相互制約或促進(jìn)的關(guān)系;同時(shí)必須滿足各種約束性需求。 2)確定關(guān)鍵功能 核心功能,必做功能,高風(fēng)險(xiǎn)功能,獨(dú)特功能6、在細(xì)化架構(gòu)設(shè)計(jì)過程中,包括哪5個(gè)視圖?每個(gè)視圖分別包括哪些設(shè)計(jì)任務(wù)? 1)邏輯視圖 模塊劃分、接口定義、領(lǐng)域模型2)開發(fā)視圖 技術(shù)選型、文件劃分、編譯關(guān)系3)運(yùn)行視圖 技術(shù)選型、控制流劃分、同步關(guān)系4)物理視圖 硬件分布、軟件部署、方案優(yōu)化5)數(shù)據(jù)視圖 技術(shù)選型、存儲(chǔ)格式、數(shù)據(jù)分布7、請(qǐng)簡(jiǎn)述概念架構(gòu)設(shè)計(jì)階段的1個(gè)決定、4個(gè)選擇 決定如何劃分頂級(jí)子系統(tǒng) 選擇架構(gòu)風(fēng)格,選擇開發(fā)技術(shù),選擇集成技術(shù),選擇二次開發(fā)技術(shù)8、在軟件架構(gòu)設(shè)計(jì)中,如何進(jìn)行架構(gòu)驗(yàn)證? 1)原型法 用于項(xiàng)目型開發(fā),借助專門工具營造出想要的場(chǎng)景,進(jìn)行真實(shí)性測(cè)試,重點(diǎn)是質(zhì)量屬性測(cè)試,進(jìn)行挑選原型實(shí)現(xiàn)的功能需求(用戶最關(guān)心的,架構(gòu)師最擔(dān)心的那些)。 2)框架法 用于產(chǎn)品開發(fā),將架構(gòu)設(shè)計(jì)方案用框架的形式表現(xiàn),并在此基礎(chǔ)上進(jìn)行評(píng)估驗(yàn)證。9、簡(jiǎn)述用例驅(qū)動(dòng)的模塊劃分過程 兩環(huán)節(jié)、四步驟 1)需求分析環(huán)節(jié) 2)架構(gòu)設(shè)計(jì)環(huán)節(jié) 第一步回答“實(shí)現(xiàn)用例需要哪些類”的問題——運(yùn)用魯棒圖、序列圖 第二部回答“這些類應(yīng)劃歸哪些模塊”的問題——運(yùn)用包圖10、簡(jiǎn)述封裝驅(qū)動(dòng)設(shè)計(jì)方法(EDD方法)的步驟。 4步驟 1)研究需求 重點(diǎn)是上下文圖和功能樹,發(fā)現(xiàn)問題,第一時(shí)間提出。 2)粗粒度分層 根據(jù)功能樹,粗粒度劃分功能模塊 3)細(xì)粒度劃分模塊 4)用例驅(qū)動(dòng)的模塊劃分結(jié)構(gòu)評(píng)審、優(yōu)化軟件工程報(bào)告圖書管理系統(tǒng)需求性分析姓名:學(xué)號(hào):班級(jí):應(yīng)數(shù)班引言1.1編寫目的此規(guī)格說明書是為了對(duì)圖書館管理系統(tǒng)做一個(gè)概要的說明,是軟件的大概的分析過程,對(duì)最終的軟件加以說明。主要的讀者為軟件設(shè)計(jì)人員,程序編寫員,以及老師。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ī)格說明書,概要設(shè)計(jì)說明書,詳細(xì)設(shè)計(jì)說明書,以及做好程序,并在最后加以用戶操作手冊(cè)等一系列詳細(xì)的設(shè)計(jì)要求。1.3定義1.4參考資料《實(shí)用軟件工程》第二版鄭人杰殷人昆陶永雷等主編清華大學(xué)出版社《delphi程序員成長攻略》蒙祖強(qiáng)龔濤等編著中國水利水電出版社《delphi7開發(fā)實(shí)例完全剖析》王志強(qiáng)編著中國電力出版社《精通delphi數(shù)據(jù)庫設(shè)計(jì)與實(shí)例開發(fā)》陳潤編著中國青年出版社任務(wù)概述2.1目標(biāo)通過該系統(tǒng)可以實(shí)現(xiàn)最基本的圖書館的一系列的操作流程,其中包括:圖書的借閱,圖書的查找,圖書的退還,借書證的申請(qǐng),圖書的上架處理,圖書的過期未還的處罰等等功能。這些功能要用delphi以及后臺(tái)的數(shù)據(jù)庫SQL來實(shí)現(xiàn)。2.2運(yùn)行環(huán)境Windows98/2000/XP/2003操作系統(tǒng)下,安裝并配置軟件MicrosoftSQLServer2000數(shù)據(jù)庫管理系統(tǒng)。作者用的是windowsXP操作系統(tǒng),理論上可以在windows98/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ù)圖書:圖書編碼,書名,書號(hào),圖書類別,作者,出版社,出版時(shí)間,單價(jià)管理員:用戶名,密碼,權(quán)限,姓名讀者:借書卡號(hào),姓名,性別,讀者類別,所屬系部,部門或班級(jí)3.2動(dòng)態(tài)數(shù)據(jù)輸入數(shù)據(jù):鼠標(biāo)對(duì)按鈕的點(diǎn)擊,查詢方式,查詢關(guān)鍵字,新建圖書項(xiàng),新建讀者項(xiàng),圖書項(xiàng)、讀者項(xiàng)記錄的修改,圖書借還以及注銷操作時(shí)的輸入信息,受限操作所需的密碼等。輸出數(shù)據(jù):查詢關(guān)鍵字所確定的數(shù)據(jù)庫子集,統(tǒng)計(jì)結(jié)果,操作成功或失敗的消息,圖書借還以及注銷操作時(shí)的結(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)高級(jí)管理員(帳號(hào),姓名)一般管理員(帳號(hào),姓名)普通用戶(帳號(hào),姓名,班級(jí),性別,組號(hào))登錄用戶(帳號(hào),密碼,權(quán)限)圖書類別(類別,類名)圖書(圖書編號(hào),類別,書名,作者,出版日期,出版社,定價(jià),總數(shù)量,剩下數(shù)量,備注)借閱(用戶帳號(hào),圖書編號(hào),借書日期,到期日期,數(shù)量,還書日期)3.5數(shù)據(jù)采集數(shù)據(jù)通過事先的錄入,形成最基本的管理人員帳號(hào),通過管理人員的管理,可以實(shí)現(xiàn)相應(yīng)的數(shù)據(jù)的添加,刪減。比如,管理員可以添加用戶的相關(guān)信息(通過辦理借書證)還可以添加圖書(通過新書上架)來辦理。功能需求4.1功能劃分圖書管理系統(tǒng)主要實(shí)現(xiàn)以下七方面的功能:a.查詢b.圖書借還c.圖書入庫d.圖書維護(hù)e.圖書超期提示f.環(huán)境管理4.2功能描述圖書管理包括查詢、借還、入庫、維護(hù)、超期提示、環(huán)境管理七方面功能。圖書入庫,主要實(shí)現(xiàn)入庫登記。圖書借閱,用戶需憑相應(yīng)證件到圖書館進(jìn)行借書,并由圖書管理員進(jìn)行相應(yīng)的登記記錄檔案。查詢,當(dāng)用戶要查詢自己的借閱情況時(shí),可以進(jìn)行借閱查詢。用戶可以通過此系統(tǒng)進(jìn)行圖書的查詢和讀者查詢(即用戶自己的相關(guān)信息查詢)。圖書超期提示,當(dāng)借閱者在已到借書期限時(shí)仍未歸還圖書,提示其盡快辦理歸還手續(xù)。并由系統(tǒng)計(jì)算相應(yīng)的處罰。圖書維護(hù),圖書管理員可以通過此系統(tǒng)進(jìn)行相應(yīng)的圖書的維護(hù)計(jì)算。4.3數(shù)據(jù)流圖(DFD) a.新書入庫數(shù)據(jù)庫1.3處理入庫1.2更新書刊庫存清單1.1接受事務(wù)圖書管理員 D1 庫存清單數(shù)據(jù)庫1.3處理入庫1.2更新書刊庫存清單1.1接受事務(wù)圖書管理員 D2b.圖書借閱 D1 庫存清單處理借閱數(shù)據(jù)庫進(jìn)行借閱登記處理借閱數(shù)據(jù)庫進(jìn)行借閱登記借閱者C.過期提示處理通知信息顯示器進(jìn)行日期處理圖書管理員處理通知信息顯示器進(jìn)行日期處理圖書管理員d.借閱查詢顯示器2產(chǎn)生匯總1.1操作事務(wù)借閱者顯示器2產(chǎn)生匯總1.1操作事務(wù)借閱者1.21.2處理查詢D1借閱查詢清單e.還書處理數(shù)據(jù)庫1.3處理歸還1.2更新圖書庫存清單1.1接受事務(wù)圖書管理員 D1庫存清單數(shù)據(jù)庫1.3處理歸還1.2更新圖書庫存清單1.1接受事務(wù)圖書管理員借書:還書:新書上架:4、4需求規(guī)定在圖書管理系統(tǒng)中,管理員要為每個(gè)讀者建立借閱賬戶,并給讀者發(fā)放不同類別的借閱卡(借閱卡可提供卡號(hào)、讀者姓名),賬戶內(nèi)存儲(chǔ)讀者的個(gè)人信息和借閱記錄信息。持有借閱卡的讀者可以通過管理員(作為讀者的代理人與系統(tǒng)交互)借閱、歸還圖書,不同類別的讀者可借閱圖書的范圍、數(shù)量和期限不同,可通過互聯(lián)網(wǎng)或圖書館內(nèi)查詢終端查詢圖書信息和個(gè)人借閱情況,以及續(xù)借圖書(系統(tǒng)審核符合續(xù)借條件)。借閱圖書時(shí),先輸入讀者的借閱卡號(hào),系統(tǒng)驗(yàn)證借閱卡的有效性和讀者是否可繼續(xù)借閱圖書,無效則提示其原因,有效則顯示讀者的基本信息(包括照片),供管理員人工核對(duì)。然后輸入要借閱的書號(hào),系統(tǒng)查閱圖書信息數(shù)據(jù)庫,顯示圖書的基本信息,供管理員人工核對(duì)。最后提交借閱請(qǐng)求,若被系統(tǒng)接受則存儲(chǔ)借閱紀(jì)錄,并修改可借閱圖書的數(shù)量。歸還圖書時(shí),輸入讀者借閱卡號(hào)和圖書號(hào)(或丟失標(biāo)記號(hào)),系統(tǒng)驗(yàn)證是否有此借閱紀(jì)錄以及是否超期借閱,無則提示,有則顯示讀者和圖書的基本信息供管理員人工審核。如果有超期借閱或丟失情況,先轉(zhuǎn)入過期罰款或圖書丟失處理。然后提交還書請(qǐng)求,系統(tǒng)接受后刪除借閱紀(jì)錄,并登記并修改可借閱圖書的數(shù)量。圖書管理員定期或不定期對(duì)圖書信息進(jìn)行入庫、修改、刪除等圖書信息管理以及注銷(不外借),包括圖書類別和出版社管理。為系統(tǒng)維護(hù)人員提供權(quán)限管理、數(shù)據(jù)備份等通用功能。4、5功能分類4、6具體需求系統(tǒng)的總體圖見圖 第一層圖:(1):登陸子系統(tǒng)(2)管理子模塊(3)查詢模塊第二層圖:(1):處理新書購入規(guī)格說明輸入新書的全部信息。2)引言為了輸入新書的全部信息(包括:分類目錄號(hào),流水號(hào)書名,作者,內(nèi)容摘要,價(jià)格和購書日期等)。3)輸入新書的全部信息。4)處理通過圖書管理系統(tǒng)寫入圖書目錄文件。5)輸出新書的全部信息。處理學(xué)生借書規(guī)格說明查詢讀者借書的相關(guān)信息。2)引言為了查詢讀者借書的相關(guān)信息。3)輸入借書信息的關(guān)鍵字。4)處理利用關(guān)鍵字在借書文件中找到此流水號(hào)圖書的相關(guān)信息。5)輸出借書相關(guān)信息。(3):處理學(xué)生還書1)規(guī)格說明輸入讀者還書信息。引言為了把讀者還書的相關(guān)信息(包括:圖書分類號(hào),流水號(hào),讀者號(hào),借閱日期和還書日期等)寫入還書文件中。輸入讀者還書信息。4)處理通過圖書管理系統(tǒng)寫入還書文件中。5)輸出讀者還書信息的全部內(nèi)容。(4):處理圖書注銷規(guī)格說明注銷圖書的相關(guān)內(nèi)容。引言為了注銷圖書的相關(guān)信息。輸入圖書信息的關(guān)鍵字(圖書分類號(hào)或書名)。處理利用關(guān)鍵字在圖書目錄文件中找到此圖書分類號(hào)或書名圖書的相關(guān)信息。輸出圖書的注銷信息。(5)處理學(xué)生信息查詢1)規(guī)格說明讀者登記,即讀者的具體信息。2)引言為了把讀者的具體信息(包括:讀者編號(hào),姓名,學(xué)院,專業(yè),年級(jí)等)寫入讀者目錄文件中。3)輸入讀者具體信息。4)處理通過圖書管理系統(tǒng)寫入讀者目錄文件中。5)輸出讀者具體信息。
(6)處理圖書信息查詢1)規(guī)格說明查詢圖書的相關(guān)內(nèi)容。2)引言為了查找圖書的相關(guān)信息。3)輸入圖書信息的關(guān)鍵字(圖書分類號(hào)或書名)。4)處理利用關(guān)鍵字在圖書目錄文件中找到此圖書分類號(hào)或書名圖書的相關(guān)信息。5)輸出圖書的相關(guān)信息。4、7.?dāng)?shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)typedefstructBookList{charnum[10];charname[20];charauthor[20];inttotal;intleavings;structBookList*next;}Book;采用鏈表的結(jié)構(gòu)來進(jìn)行數(shù)據(jù)操作,一本書的數(shù)據(jù)包括:書號(hào)、書名、作者、庫存總量、現(xiàn)存量以及指針區(qū)域。2.算法的設(shè)計(jì)(1)關(guān)鍵算法設(shè)計(jì)思路描述在構(gòu)思圖書館管理系統(tǒng)的結(jié)構(gòu)時(shí),我將整個(gè)程序劃分為五個(gè)模塊,分別定義了五個(gè)函數(shù)來實(shí)現(xiàn)管理系統(tǒng)的功能,除此之外在對(duì)程序的界面設(shè)計(jì)上加入了一些動(dòng)畫效果。在數(shù)據(jù)結(jié)構(gòu)上采用單鏈表的結(jié)構(gòu)方式,這樣在讀取文件中數(shù)據(jù)的時(shí)候能夠節(jié)省內(nèi)存空間。設(shè)計(jì)主菜單時(shí),用while(1)和switch()來實(shí)現(xiàn)功能的選擇以及運(yùn)行一項(xiàng)功能后返回主菜單。在整個(gè)程序中,統(tǒng)一采用了以輸入0的方式返回或退出,并在模塊有需要鍵盤輸入地方加入了防錯(cuò)誤輸入的功能,防止輸入錯(cuò)誤導(dǎo)致程序錯(cuò)誤運(yùn)行,此功能采用判斷輸入值的ASCII碼或字符串的比較。入庫模塊:首先判斷數(shù)據(jù)文件是否存在,如存在以追加的方式打開,如不存在以寫入的方式打開。輸入圖書的具體數(shù)據(jù)(在輸入過程中,如輸入的書號(hào)為0則返回主菜單)、存盤,判斷存盤成功則打印“成功添加”,如存盤失敗打印“添加失敗”。最后返回入起始界面(入庫模塊)。清除模塊:進(jìn)入清除模塊則將文件中的全部數(shù)據(jù)用單鏈表的結(jié)構(gòu)讀入內(nèi)存,提示輸入要?jiǎng)h除的書號(hào),在內(nèi)存中尋找并刪除,刪除后可以馬上存盤或是直到全部刪除完成后再選擇操作,在防止操作后忘記存盤,在程序中加入了自動(dòng)判斷操作過的數(shù)據(jù)是否己經(jīng)進(jìn)行過存盤的功能。查詢模塊:本模塊分為三個(gè)子模塊:以書號(hào)方式查詢、以書名的方式查詢、以作者的方式查詢。前兩個(gè)查詢功能只要找到符合條件的數(shù)據(jù)時(shí)就停止,以作者方式因?yàn)榭紤]到一個(gè)作者不止一本作品,所以對(duì)全部的數(shù)據(jù)進(jìn)行查找,并打印出所有符合條件的數(shù)據(jù)。如果未找到則打印“沒有找到”,最后返回子功能模塊起始,直到輸入0返回上一級(jí)。借出、還書模塊:這兩個(gè)功能的思路完全一樣,不同的是對(duì)數(shù)據(jù)中的現(xiàn)存量的運(yùn)算。兩個(gè)功能都是先建立一個(gè)圖書類型的數(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)過修改過的數(shù)據(jù)寫入文件。完成一條操作后,提示進(jìn)行下一條操作,輸入0時(shí)返回主菜單。(2)程序結(jié)構(gòu)及模塊名稱描述主程序主程序界面初始化入庫清除查詢借出歸還書號(hào)查詢書名查詢作者查詢?nèi)苛斜韆)voidmain()//主程序b)voids(long)//時(shí)間延遲函數(shù)c)voidsta()//界面初始效果d)voidwel()//界面初始效果e)voidbookadd()//入庫f)voidsa_ve(sqtype)//清除函數(shù)中保存文件函數(shù)g)voiddel()//清除h)voidr()//查詢j)voids_1()//查詢功能中以書號(hào)方式查詢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請(qǐng)輸入數(shù)據(jù):\n");/*逐個(gè)輸入新圖書的資料*/printf("請(qǐng)輸入書號(hào)(輸入0結(jié)束添加):");gets(temp);if(strcmp(temp,"0"))strcpy(finger.num,temp);elsebreak;printf("請(qǐng)輸入書名:");scanf("%s",);printf("請(qǐng)輸入書的作者:");scanf("%s",finger.author);printf("請(qǐng)輸入書的總數(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書號(hào):%s書名:%s作者:%s庫存總量:%d現(xiàn)存量:%d\n",finger.num,,finger.author,finger.total,finger.leavings);printf("-----------------------------------------------------------------------------");}elseprintf("對(duì)不起,數(shù)據(jù)寫入文件錯(cuò)誤!");}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("操作后退出時(shí)存盤,不進(jìn)行存盤您所有刪");gotoxy(6,6);printf("除操作對(duì)文件無效!");gotoxy(1,23);printf("請(qǐng)輸入要?jiǎng)h除的書號(hào)(0退出,00存盤):");gets(a);if(!strcmp(a,"0"))gotodel_end;elseif(!strcmp(a,"00")){if(flag==0){gotoxy(50,24);textcolor(4);cprintf("您還未進(jìn)行任何刪除操作!");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("對(duì)不起沒有找到你要?jiǎng)h除的數(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);}/*查找(按書號(hào)查找)*/s_1()/*查找子函數(shù)中的按書號(hào)查詢功能*/{chartemp_num[10];Bookfinger;intflag;FILE*fp;fp=fopen("blist.db","rb");s_1re:flag=0;gotoxy(1,25);printf("請(qǐng)輸入書號(hào)(輸入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("書號(hào)");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("請(qǐng)輸入要借的書號(hào)(輸入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("對(duì)不起,此書全部借出.\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_____)五、測(cè)試數(shù)據(jù)及測(cè)試結(jié)果:(一)添加輸入數(shù)據(jù):書號(hào)書名作者庫存1001h1li81002h2ki81003h3fd91004h4li101005h5sdfs111006h6ed91007h7tio7(二)清除輸入清除的書號(hào):1006提示刪除成功,運(yùn)行查詢功能中的查詢?nèi)抗δ?,確認(rèn)1006己被刪除(三)查詢1.書號(hào)查詢,輸入:1005輸出:1005h5sdfs112.書名查詢,輸入:h7輸出:1007h7tio73.作者查詢,輸入:li輸出:1001h1li81004h4li10(四)借出輸入:1004輸出:借出成功運(yùn)行查詢功能中的查詢?nèi)抗δ?,顯示:書號(hào)書名作者庫存現(xiàn)存1004h4li109(五)歸還輸入:1004輸出:歸還成功運(yùn)行查詢功能中查詢?nèi)浚@示:書號(hào)書名作者庫存現(xiàn)存1004h4li1010六、心得體會(huì):編寫整個(gè)模擬圖書館管理程序歷時(shí)五天,五個(gè)功能模塊中的入庫與查詢模塊由于定義函數(shù)名與C語言中自帶函數(shù)名沖突,到發(fā)現(xiàn)原因并修改,期間耗時(shí)三天。在三天期間,在不知道沖突原因之前,我在幾個(gè)論壇上發(fā)貼,有回貼的竟沒人知道原因,后來偶然的靈機(jī)一動(dòng),將函數(shù)名更改,程序順利運(yùn)行。我還從網(wǎng)上下了一本C語言函數(shù)的電子書,經(jīng)查確實(shí)是由于函數(shù)名沖突。所以,我們?cè)诙x函數(shù)的時(shí)候,在注意函數(shù)名是否與C語言自帶的函數(shù)沖突。因?yàn)槲冶容^喜歡有應(yīng)用性的程序,所以挑選圖書館來做,但是在確定所用數(shù)據(jù)結(jié)構(gòu)方面,構(gòu)思時(shí)考慮不足,忽略了圖書館內(nèi)書的數(shù)據(jù)量,一直到入庫與查詢兩個(gè)模塊完成,我還是采用順序表的結(jié)構(gòu)來進(jìn)行數(shù)據(jù)操作,但是在編寫清除模塊的時(shí)候,突然間發(fā)現(xiàn)將文件數(shù)據(jù)全部讀出時(shí),如果采用順序鏈表就必須欲先定制一個(gè)足夠大的空間,所以我又將數(shù)據(jù)結(jié)構(gòu)改成單鏈表以節(jié)省內(nèi)存空間。在編寫入庫和查詢模塊時(shí),用的知識(shí)都只是大一所學(xué)C語言老師教過的,如打開文件fopen命令,讀取文件fread命令,寫入文件fwrite命令等等。對(duì)文件的其它詳細(xì)操作一無所知,如讀取時(shí)文件fp指針的位置,如何讓fp指針在文件中定位等等。但是我在編寫借出,歸還和清除三個(gè)模塊時(shí),恰恰得用到這些知識(shí),所以借用ftell()命令,自己慢慢的摸索出一些門道。如:在借出和歸還模塊里,我采用的方法是,定義一個(gè)圖書類型的結(jié)構(gòu)體指針,一次從文件里只讀取一個(gè)數(shù)據(jù),將它的關(guān)鍵字符段與輸入數(shù)據(jù)進(jìn)行比較,如果一致則將文件指針fp往后移動(dòng)sizeof(Listtype)個(gè)字節(jié),然后將經(jīng)過這個(gè)修改后的數(shù)據(jù)寫入文件。之所以采用這個(gè)方法,我是考慮到它在內(nèi)存中只占用了sizeof(Listtype)字節(jié)個(gè)空間,并且也只需向文件中寫入一次。如果用鏈表全部讀取、修改后再保存文件,一是占用了很大的內(nèi)存空間,二是要向文件中寫入全部的數(shù)據(jù)。但是,如果要進(jìn)行多次借出操作的時(shí)候,用鏈表讀取只需要全部操作完后一次對(duì)修改后的數(shù)據(jù)進(jìn)行寫入,期間的操作只需在內(nèi)存中進(jìn)行。而用我的方法,借一次就必需打開文件,逐條讀取,修改寫入。所以至于哪種方法更好,我自己具體也弄不清,還請(qǐng)老師
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《書法》校本課程開發(fā)與實(shí)施方案
- 教育貸款服務(wù)合同
- 內(nèi)容營銷代運(yùn)營合同
- 網(wǎng)站維護(hù)合同
- 2024至2030年中國止嗽清果丸數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 特許經(jīng)營代理協(xié)議
- 質(zhì)量關(guān)鍵績效指標(biāo)(KPI)管理合同
- 2024至2030年中國小香豬行業(yè)投資前景及策略咨詢研究報(bào)告
- 家用電器代理銷售合同
- 2024至2030年中國全息電化鋁數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 【道法】認(rèn)識(shí)生命 課件-2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)上冊(cè)
- 2023-2024學(xué)年北京市西城區(qū)三帆中學(xué)八年級(jí)(上)期中數(shù)學(xué)試卷【含解析】
- 走近湖湘紅色人物智慧樹知到答案2024年湖南工商大學(xué)
- 10kV架空線路專項(xiàng)施工方案
- AQ6111-2023個(gè)體防護(hù)裝備安全管理規(guī)范
- 《跟上兔子》繪本三年級(jí)第1季This-Is-My-Family教學(xué)課件
- (正式版)JBT 9229-2024 剪叉式升降工作平臺(tái)
- 教育互聯(lián)網(wǎng)在教學(xué)設(shè)計(jì)中的應(yīng)用
- 江蘇開放大學(xué) 社會(huì)主義的發(fā)展及其規(guī)律 正確把握科學(xué)社會(huì)主義基本原則
- 2023版押品考試題庫必考點(diǎn)含答案
評(píng)論
0/150
提交評(píng)論