零點起飛學(xué)C++之面向過程實戰(zhàn)_第1頁
零點起飛學(xué)C++之面向過程實戰(zhàn)_第2頁
零點起飛學(xué)C++之面向過程實戰(zhàn)_第3頁
零點起飛學(xué)C++之面向過程實戰(zhàn)_第4頁
零點起飛學(xué)C++之面向過程實戰(zhàn)_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第11章 面向過程實戰(zhàn)“面向過程”是一種以算法為中心的編程思想,常用“程序=算法+數(shù)據(jù)結(jié)構(gòu)”的公式來描述面向過程的設(shè)計原則,映射到實際程序就是“函數(shù)+數(shù)據(jù)結(jié)構(gòu)”。數(shù)據(jù)結(jié)構(gòu)是程序要處理的對象,函數(shù)就是處理這些數(shù)據(jù)結(jié)構(gòu)的算法。一般來講,程序員會將共同完成同一個“算法”的函數(shù)組合起來,這就形成了模塊。每個模塊執(zhí)行一種特定的功能,多個模塊有機(jī)結(jié)合,共同完成程序的任務(wù)。因此,面向過程的程序一般都是多模塊程序。上述公式就可以改做“面向過程=模塊+數(shù)據(jù)結(jié)構(gòu)=函數(shù)+數(shù)據(jù)結(jié)構(gòu)”。讀者若想要可以成為一個初級的程序員,想對編寫程序有一個完整的認(rèn)識,還等什么,來讀本章吧。11.1 問題定義面向過程主要是強(qiáng)調(diào)把整個系統(tǒng)

2、劃分為細(xì)小的功能模塊。每個模塊包含多個函數(shù),實現(xiàn)細(xì)分后的這些模塊和函數(shù),也就實現(xiàn)了整個程序。本章將通過一個圖書管理案例來逐步講解面向過程的程序設(shè)計方法。限于篇幅的原因,本章需求階段的分析僅從問題定義和需求分析兩個方面來談,重點在總體設(shè)計和編碼兩節(jié)。問題定義就是要定義系統(tǒng)是什么樣的,要完成什么樣的功能,要干什么。這是從用戶角度來分析系統(tǒng),是程序設(shè)計的第一步。下面就來看一下圖書管理系統(tǒng)的問題定義。圖書管理系統(tǒng)是一個管理系統(tǒng)。它的使用者包括圖書管理人員和圖書借閱者。圖書管理人員是該系統(tǒng)的操作員,他負(fù)責(zé)圖書的日常管理,系統(tǒng)的日常維護(hù)。圖書管理人員要能掌握圖書的出、入庫情況,包括錄入新的圖書,查詢某本書

3、是否已經(jīng)錄入或沒有錄入,刪除已經(jīng)錄入的數(shù)據(jù);還要能掌握圖書的借閱情況,包括將圖書借給注冊的會員,返還歸還的圖書。系統(tǒng)的服務(wù)對象是注冊的會員,管理人員要能利用系統(tǒng)管理會員的綜合情況,包括注冊新的會員,注銷退會的會員,還要能查詢某個特定的會員是否存在。如果錄入錯誤,還要能夠修改。會員是系統(tǒng)的服務(wù)對象,是被動使用者。會員的各種功能要求都通過管理人員來實現(xiàn),不能直接接觸系統(tǒng),每個會員限借3本書。通過上述對問題的分析,就明白了系統(tǒng)是什么樣的,要干什么,對要解決的問題有了清晰的定義。第11.2節(jié)中將詳細(xì)分析一下系統(tǒng)的需求。11.2 需 求 分 析需求分析是程序設(shè)計中最關(guān)鍵,也是最難的一個過程。它是開發(fā)者和

4、使用者之間的媒介,讓開發(fā)者知道用戶想要系統(tǒng)干什么。需求分析階段不是去解決問題,而是弄清楚要解決什么問題。從11.1節(jié)的分析可知,圖書管理系統(tǒng)應(yīng)該主要分兩大部分:圖書管理和會員管理。圖書管理主要負(fù)責(zé)圖書的錄入、修改、查詢、刪除、借閱、返還,這些功能實現(xiàn)了圖書本身的管理。會員管理部分主要負(fù)責(zé)會員的注冊、注銷、查詢等功能。圖書管理部分的具體需求如下:錄入:錄入圖書數(shù)據(jù),要能識別重復(fù)錄入;修改:對于錄入錯誤的要能予以修改;查詢:要能根據(jù)書名、ISBN、出版社、作者等來查詢;刪除:刪除不再需要的圖書;借閱:借出圖書,有庫存時才允許借出,同時遞減圖書的庫存,在會員數(shù)據(jù)中進(jìn)行記錄;返還:歸還圖書,遞增圖書庫

5、存,刪除會員數(shù)據(jù)中的借閱信息。會員管理部分的具體需求如下:注冊:注冊新會員,不能重復(fù)注冊;注銷:刪除會員,有借書的不能注銷;查詢:要能根據(jù)會員姓名查詢。系統(tǒng)限制會員借閱的上限為3本。通過這個簡單的需求分析,程序員就可以了解系統(tǒng)要完成的功能,了解用戶的需求。依據(jù)它才能進(jìn)行系統(tǒng)功能和模塊的分析與設(shè)計。11.3 總 體 設(shè) 計通過11.1節(jié)和11.2節(jié)的分析,到現(xiàn)在為止,用戶對系統(tǒng)的外觀就有了一個清晰的認(rèn)識。本節(jié)將設(shè)計如何來實現(xiàn)這些功能。首先介紹用到的主要數(shù)據(jù)結(jié)構(gòu),然后詳細(xì)講解系統(tǒng)的4大模塊:圖書基礎(chǔ)數(shù)據(jù)維護(hù)、圖書借閱、圖書返還和會員基礎(chǔ)數(shù)據(jù)維護(hù)。 11.3.1 數(shù)據(jù)結(jié)構(gòu)下面來分析系統(tǒng)要用到的數(shù)據(jù)結(jié)

6、構(gòu)。從上述逐項的分析可知,系統(tǒng)中要用到兩類數(shù)據(jù):圖書和會員。系統(tǒng)中采用結(jié)構(gòu)體來設(shè)計它們,具體構(gòu)成如下所示。1圖書的數(shù)據(jù)結(jié)構(gòu)struct tagBOOKchar isbn12;/ISBN 12Bchar name20;/書名 20Bchar publisher20;/出版社 20Bchar author20;/作者 20Bshort ver;/版次float price;/價格short count;/庫存BOOK;2會員的數(shù)據(jù)結(jié)構(gòu)struct tagMEMBERchar name20;/會員名 20Bchar address20;/住址 20Bshort borrow;/借閱數(shù)char isb

7、n112;/第1本的isbn 12Bchar isbn212;/第2本的isbn 12Bchar isbn312;/第3本的isbn 12BMEMBER;說明:注釋中的12B、20B等表示占用的字節(jié)數(shù)。11.3.2 圖書基礎(chǔ)數(shù)據(jù)維護(hù)模塊圖書基礎(chǔ)數(shù)據(jù)的維護(hù)主要有錄入、刪除、查詢、修改4種功能,下面分別詳細(xì)講解。1錄入本案例的數(shù)據(jù)保存在文件內(nèi),因此整個案例主要都是對文件的操作。圖書錄入通過寫文件來實現(xiàn),定義函數(shù)為int inputbook(void),負(fù)責(zé)從屏幕接受數(shù)據(jù),并寫文件。程序的流程圖如圖11-1所示。主要是通過一個循環(huán)來控制數(shù)據(jù)的錄入。由于是對文件進(jìn)行操作,所以打開和關(guān)閉文件要成對出現(xiàn)。

8、2刪除刪除主要負(fù)責(zé)刪除圖書信息。當(dāng)圖書報廢時,應(yīng)該將該圖書的信息從庫中刪除。圖書刪除函數(shù)定義為int deletebook(void)。實現(xiàn)刪除功能的程序流程圖如圖11-2所示。首先讀入查詢條件,然后在已有圖書信息內(nèi)查找是否存在符合該條件的圖書。如果存在就刪除,否則繼續(xù)下一輪刪除操作。為了便于程序的維護(hù)和修改,定義函數(shù)BOOK findbook(char *ISBN)來具體實現(xiàn)圖書的查找操作,定義函數(shù)int removebook(char*ISBN)來具體實現(xiàn)圖書的刪除操作。圖11-1 圖書錄入功能的流程圖 圖11-2 圖書刪除功能的流程圖3查詢查詢函數(shù)定義為int searchbook(vo

9、id),根據(jù)使用者的輸入條件查找指定的圖書信息。如圖11-3是圖書查詢功能的流程圖。首先讀入查詢條件,然后調(diào)用具體的查找函數(shù)findbook()搜索是否存在該圖書。如果找到就顯示,否則繼續(xù)下一輪查詢。4修改圖書修改主要負(fù)責(zé)對已有圖書信息的修改,因此該圖書必須確實存在。定義函數(shù)int modifybook(void)實現(xiàn)圖書的修改操作。如圖11-4是圖書信息修改的流程圖。圖11-3 圖書查詢功能的流程圖 圖11-4 圖書信息修改的流程圖首先根據(jù)輸入的查詢條件找到并顯示指定的圖書。確定無誤后刪除該圖書的信息,然后提示輸入新的圖書信息。圖書查找通過調(diào)用函數(shù)findbook()實現(xiàn),刪除圖書使用函數(shù)r

10、emovebook(),錄入新的圖書信息則調(diào)用函數(shù)inputbook()。11.3.3 圖書借閱模塊圖書管理系統(tǒng)的主要工作在圖書借閱和圖書返還上,本節(jié)主要講解圖書借閱的設(shè)計思路。定義圖書借閱的函數(shù)為int lendbook(void),該函數(shù)的流程圖如圖11-5所示。圖11-5 圖書借閱的流程圖圖書借閱的基本條件有4個:會員信息存在、圖書信息存在、會員的借閱數(shù)量不超限和圖書還有庫存。判斷會員是否存在調(diào)用函數(shù)MEMBER findmember(char *name),判斷圖書是否存在調(diào)用函數(shù)findbook()。由于數(shù)據(jù)保存在文件內(nèi),所以不能直接修改。因此需要先將舊的會員信息和圖書信息刪除,然后

11、再錄入會員和圖書的新信息。刪除會員信息使用函數(shù)int removemember(char *name),記錄會員新信息使用函數(shù)int memberborrow(MEMBER member)。刪除圖書信息使用函數(shù)removebook(),記錄圖書新信息使用函數(shù)int lendbookAct(BOOK book)。11.3.4 圖書返還模塊圖書返還是該系統(tǒng)中另一個重要的工作,定義函數(shù)int returnbook(void)實現(xiàn)圖書返還的功能。如圖11-6所示為圖書返還的流程圖。圖11-6 圖書返還的流程圖圖書歸還的基本條件有3個:會員信息存在、圖書信息存在、該會員借了該書。判斷會員是否存在調(diào)用函數(shù)

12、findmember(),判斷圖書是否存在調(diào)用函數(shù)findbook()。由于數(shù)據(jù)保存在文件內(nèi),所以不能直接修改。因此需要先將舊的會員信息和圖書信息刪除,然后再登錄會員和圖書的新信息。刪除會員信息使用函數(shù)int removemember(char *name),登錄會員新信息使用函數(shù)int memberborrow(MEMBER member)。刪除圖書信息使用函數(shù)removebook(),登錄圖書新信息使用函數(shù)int lendbookAct(BOOK book)。11.3.5 會員基礎(chǔ)數(shù)據(jù)維護(hù)模塊會員基礎(chǔ)數(shù)據(jù)維護(hù)包括注冊新會員、注銷老會員,修改和查詢老會員等4種,下面分別詳細(xì)講解。1注冊會員注

13、冊主要負(fù)責(zé)對新會員進(jìn)行注冊,凡需要借書的人員必須注冊為會員。注冊會員的功能使用函數(shù)int inputmember(void),該函數(shù)的流程圖如圖11-7所示,主要是通過一個循環(huán)來控制數(shù)據(jù)的錄入。由于是對文件進(jìn)行操作,所以打開和關(guān)閉文件要成對出現(xiàn)。2注銷當(dāng)會員不再使用本系統(tǒng)的功能時必須予以注銷,注銷功能使用函數(shù)int deletemember(void)。該功能的流程圖如圖11-8所示。圖11-7 會員注冊的流程圖 圖11-8 會員注銷的流程圖注銷會員時,首先要查找該會員是否存在,通過調(diào)用函數(shù)findmember()實現(xiàn)。如果存在則調(diào)用函數(shù)int removemember(char *name)

14、來完成具體的注銷工作。3修改當(dāng)會員的信息有變動時,可以通過調(diào)用函數(shù)int modifymember(void)來修改會員的信息。會員修改的流程圖如圖11-9所示。首先根據(jù)輸入的查詢條件找到并顯示指定的會員。確定無誤后刪除該會員的信息,然后提示輸入新的會員信息。會員查找通過調(diào)用函數(shù)findmember()實現(xiàn),刪除圖書使用函數(shù)removemember(),錄入新的圖書信息則調(diào)用函數(shù)inputmember()。4查詢查詢函數(shù)定義為int searchmember(void),根據(jù)輸入條件查找指定的會員信息。如圖11-10是會員查詢功能的流程圖。首先讀入查詢條件,然后調(diào)用具體的查找函數(shù)findmem

15、ber()搜索是否存在該會員。如果找到就顯示;否則繼續(xù)下一輪查詢。圖11-9 會員修改的流程圖 圖11-10 會員查詢的流程圖11.3.6 總體流程圖除了各功能函數(shù)外,還需要定義如下一些輔助函數(shù)。顯示菜單項:short showmenu(void);顯示子菜單項:short showsubmenu(short menu);功能調(diào)用函數(shù):void callsubtask(short selected);列舉圖書信息:void listbook(void);列舉圖書會員信息:void listmember(void)。系統(tǒng)運行時,調(diào)用函數(shù)showmenu()顯示屏幕菜單,讓操作員選擇要進(jìn)入的模塊。

16、根據(jù)選擇模塊的不同調(diào)用函數(shù)showsubmenu()顯示子菜單項。當(dāng)選擇某一項功能時,就將該功能所對應(yīng)的模塊的編號送給函數(shù)callsubtask(),該函數(shù)將實際調(diào)用具體的功能函數(shù)。圖書管理系統(tǒng)的總體流程圖如圖11-11所示。圖11-11 總體流程圖圖11-11中的功能函數(shù)指本節(jié)前幾個小節(jié)中定義的函數(shù)。完成了系統(tǒng)的總體設(shè)計,就可以進(jìn)入系統(tǒng)的編碼階段了。第11.4節(jié)將給出系統(tǒng)完整地實現(xiàn)和簡單的測試。11.4 編 碼編碼指對11.3節(jié)設(shè)計函數(shù)的C+代碼實現(xiàn)。該圖書管理系統(tǒng)共有源代碼文件6個,如下所示。datainfo.h:數(shù)據(jù)結(jié)構(gòu)頭文件;bookmanager.cpp:主控文件;mainfunct

17、ion.h:菜單處理頭文件;mainfunction.cpp:菜單處理實現(xiàn)文件;subfunction.h:功能函數(shù)頭文件;subfunction.cpp:功能函數(shù)實現(xiàn)文件。本節(jié)將給出這6個文件的完整實現(xiàn)。11.4.1 主控文件bookmanager.cpp主控文件是系統(tǒng)的主要控制文件,負(fù)責(zé)顯示系統(tǒng)菜單,接收用戶輸入,管理數(shù)據(jù)文件等工作。圖書的借閱和返回等功能函數(shù)就在該文件內(nèi)被調(diào)用。分析:菜單處理文件在mainfunction.h文件中定義,所以首先需要用#include將它引入。代碼中先用showwelcome()函數(shù)顯示了一段歡迎信息,然后用dowhile循環(huán)顯示菜單命令(用showmen

18、u()函數(shù)實現(xiàn))。循環(huán)內(nèi)部還有一個dowhile循環(huán)用來接受菜單的選擇,并調(diào)用相應(yīng)的功能。11.4.2 菜單處理頭文件mainfunction.h 該文件是主控文件中所用函數(shù)的說明文件。分析:該文件是菜單處里文件的頭文件,主要定義了4個函數(shù)的原型。11.4.3 數(shù)據(jù)結(jié)構(gòu)頭文件datainfo.h該文件包含了圖書管理系統(tǒng)中用到的兩個主要的數(shù)據(jù)結(jié)構(gòu),分別是圖書的結(jié)構(gòu)體和會員的結(jié)構(gòu)體。分析:BOOK結(jié)構(gòu)體是圖書的結(jié)構(gòu)體,包含了一些圖書的基本信息。MEMBER結(jié)構(gòu)體是會員結(jié)構(gòu)體,包含了會員的基本信息。11.4.4 功能函數(shù)頭文件subfunction.h 該文件是功能函數(shù)的說明文件,給出了系統(tǒng)中用到的16個功能函數(shù)的定義。11.4.5 菜單處理實現(xiàn)文件mainfunction.cpp 該文件是菜單處理的實現(xiàn)文件,給出了菜單處理函數(shù)的具體實現(xiàn)。分析:主菜單處理函數(shù)和子菜單處理函數(shù)都是用while循環(huán)等待輸入選擇,然后用switch分支選擇相應(yīng)的功能。11.4.6 功能函數(shù)實現(xiàn)文件subfunction.cpp該文件是功能函數(shù)的具體實現(xiàn),總共有16個函數(shù),分為圖書信息處理、會員信息處理和圖書借還業(yè)務(wù)3部分。下面分別予以詳細(xì)介紹。1第1部分第1部分是圖書信息處理函數(shù),主要負(fù)責(zé)圖書信息的

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論