C++課程設計圖書管理系統_第1頁
C++課程設計圖書管理系統_第2頁
C++課程設計圖書管理系統_第3頁
C++課程設計圖書管理系統_第4頁
C++課程設計圖書管理系統_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 課 程 設 計 報 告課程名稱 C+課程設計 課題名稱 圖書管理系統設計 題目三:圖書管理系統設計(一)、課程設計題目:圖書管理系統設計(二)、要求: 使用二進制文件方式存儲數據,系統以菜單方式工作(三)、設計方法和基本原理: 1、功能描述: (1)新進圖書基本信息的輸入。(2)圖書基本信息的查詢。(3)對撤消圖書信息的刪除。(4)為借書人辦理注冊。(5)辦理借書手續。(6)辦理還書手續。2、問題的解決方案: 根據系統功能要求,可以將問題解決分為以下步驟: (1)應用系統分析,建立該系統的功能模塊框圖以及界面的組織和設計;(2)分析系統中的各個實體及它們之間的關系包括屬性和行為; (3)根據

2、問題描述,設計系統的類層次; (4)完成類層次中各個類的描述(包括屬性和方法); (5)完成類中各個成員函數的定義; (6)完成系統的應用模塊; (7)功能調試; (8)完成系統總結報告以及系統使用說明書一、設計內容與設計要求1.課程設計目的:從課程設計的實踐活動中獲得知識提高。要求學生達到熟練掌握C+語言的基本知識和技能;基本掌握面向對象程序設計的思想和方法;能夠利用所學的基本知識和技能,解決簡單的面向對象程序設計問題,從而提高動手編程解決實際問題的能力。2.總體設計2.1 系統功能分析:系統通過調用函數來實現刪除圖書、讀者信息,添加圖書、讀者信息等功能。delbook( )函數用于刪除圖書

3、信息;addbook( )函數用于增加圖書信息;borrowbook( )函數用于實現借書操作;returnbook( )函數用于實現還書操作等等;主函數用于掉用這些函數。2.2系統功能模塊劃分與設計本系統定義了Book類、BDatebase類、Reader類、RDatebase類這四個類,定義了addbook ( )、addreader( )、borrowbook ( )、setname( )等函數來實現系統所需功能。2.3 系統功能模塊圖:圖書管理系統四個類程序實現功能輸出顯示圖書類圖書庫類實驗員讀者類行政人員讀者庫類文件錄入查詢信息刪除信息退出程序33.詳細設計3.1 讀者類的設計該類定

4、義了借書操作,還書操作,設置讀者姓名等功能。 Reader+name20:char+no:int+tag:int+borbook:int+ getname():char+gettag():int+ getno():int+setname(char na):void+ delbook():void+ addreader(int n,char *na):void+ borrowbook(int bookid):void+ retbook(int bookid):int+ disp():void 圖 3.13.2 讀者庫類類的設計該類實現了建立讀者的個人資料,刪除讀者信息,輸出讀者信息等功能。 RD

5、atebase+ top:int+ rname20:char+readerid:int+readerdata():void+choice:char+addreader(int n,char *na):int+clear():void+disp():void 圖 3.23.3 圖書類的設計圖書類,可以實現對圖書的描述,圖書的編號,書名,借出,還入等操作。 Book+no:int+name20:char+onshelf:int+getname():char+getno():int+gettag():int+setname(char na):void+delbook():void+addbook()

6、:void+borrowbook():int+retbook():void+disp ():void 圖 3.33.4 圖書庫類的設計 Xingzhengrenyuan+top:int+clear():void+addbook(int n,char *na):int+bookdata():void+bookdata():void+ disp():void 圖 3.44.調試與測試:4.1系統調試在調試過程中,出現了一些錯誤。1、輸入數據時,輸錯了數據的類型會造成死循環,因此輸入時需要注意。 2、一開始主界面輸入非正確數字時,沒有提示錯誤。容易造成用戶誤解 圖4.1在主函數的switch語句結束

7、處加上default:cout<<"輸入錯誤,請從新輸入:"就可以了,修改后: 圖4.2 具體調試過程。主界面 圖4.3圖書維護 圖4.4讀者維護圖4.15.結果分析本程序總共設計了四個類,滿足了課題對類的要求,在設計的過程中,建立了較為清晰的類層次,也利用了面向對象的方法以及C+的編程思想來完成系統的設計,做到了每個借閱者建立一個賬戶,賬戶中存儲借閱者的個人信息、借閱信息等要求。而且界面美觀,容易操作。但是程序太長,不夠簡練,導致出現錯誤很難發現和修改。6. 總結感想和體會:通過這次的課程設計,讓我們充分的感覺到了要自己設計一個程序是多么的難,以及學習好c+是

8、多么的重要。在這個程序的設計過程中,我們清楚的意識到自己的水平有多么的薄弱,課程的知識學得有多么的不扎實。看網上的例子好像覺得也沒那么難,自己一上機實際操作就出現了很多問題,調試的時候系統總是在報錯,還有很多警告,每增加一個函數就要調試好久,有時候應為少了一個大括號或是分號,導致要找很久很久。雖然系統可以運行,也具有了一些基本的功能,但我們意識到了自己有太多的不足。以后還會有很多的課程設計,一定要吸取這次的教訓,把知識學懂學透學精,真正的為我所用,這樣走上社會我們才能真正的發揮所長。我們三個人分工合作,組長彭愛賢負責對程序的編譯,通過不斷的嘗試和學習,最終制成程序的最初模式!謝經緯負責對程序的

9、修改。沈維健負責后期制作,總結組內的制作經驗!通過努力,得以在規定的時間內完成任務。這一次的C+課程設計讓我們學到了很多知識,懂得如何發現問題,并解決!非常感謝老師及同學們的幫助,讓我們有這一個機會好好學習C+的更廣泛的知識。7、7.1 源程序清單:#include <iostream> #include <iomanip> /定義控制符#include <string> /包含string的頭文件#include <fstream> /用來支持對磁盤文件的輸入輸出using namespace std; const int Maxr=100;c

10、onst int Maxb=100;const int Maxbor=5; /以上三行聲明Maxr、Maxb、Maxbor為常數據成員class Reader /聲明類類型為讀者 private: /聲明以下部分為私有的int tag; /int no; /定義編號為整型char name10; /定義長度為10的名字數組字符串int borbookMaxbor; /定義整型借書數組public: /聲明以下部分為公用的Reader() /Reader類構造函數char *getname() return name; /虛函數,返回nameint gettag() return tag; /虛

11、函數,返回tagint getno() return no; /虛函數,返回No.void setname(char na) /設置讀者姓名函數 strcpy(name,na); /復制字符串 void delbook() tag=1; /刪去圖書信息void addreader(int n,char *na) /增加讀者信息 tag=0; no=n; strcpy(name,na); for(int i=0;i<Maxbor;i+) borbooki=0; void borrowbook(int bookid) /定義借書函數,且借圖書編號為整型 for(int i=0;i<Ma

12、xbor;i+) if (borbooki=0) borbooki=bookid; return; int retbook(int bookid) for(int i=0;i<Maxbor;i+) if(borbooki=bookid) borbooki=0; return 1; return 0; void disp() /成員函數,輸出基類數據成員 cout << setw(5) << no <<setw(10) << name<<"借書編號:" /*設置編號字段寬度為5位,設置名字字段寬度為10位*/f

13、or(int i=0;i<Maxbor;i+) if(borbooki!=0) cout << borbooki << "|" cout << ""<<endl; ; class RDatabase /定義RDatabase類 private: int top; Reader readMaxr;public: RDatabase() /構造函數 Reader s; top=-1; fstream file("reader.txt",ios:in); /在reader.txt以輸入方

14、式打開文件while (1) file.read(char *)&s,sizeof(s); if (!file)break; /如果非file,結束循環top+; readtop=s; file.close(); void clear() top=-1; int addreader(int n,char *na) Reader *p=query(n); if (p=NULL) top+; readtop.addreader(n,na); return 1; return 0; Reader *query(int readerid) /定義query指針,且讀者編號為整型 for (in

15、t i=0;i<=top;i+) if (readi.getno()=readerid && readi.gettag()=0) return &readi; /指向readi return NULL; void disp() for (int i=0;i<=top;i+) readi.disp(); void readerdata();RDatabase() fstream file("reader.txt",ios:out); /使用文件與reader.txt文件建立關聯for (int i=0;i<=top;i+) if (r

16、eadi.gettag()=0) file.write(char *)&readi,sizeof(readi); file.close(); ; void RDatabase:readerdata() char choice; char rname20; int readerid; Reader *r; while (choice!='0') cout <<"nnttt讀 者 維 護nnntt 1 新 增nntt 2 更 改nntt 3 刪 除nntt 4 查 找nntt 5 顯 示nntt 6 全 刪nntt 0 退 出"<<

17、;endl; /輸出子菜單cin >> choice; switch (choice) case '1': cout << "輸入讀者學號:" cin >> readerid; /輸入讀者編號cout << "輸入讀者姓名:" cin >> rname; /輸入讀者姓名addreader (readerid,rname); break; case '2': cout << "輸入讀者學號:" cin >> readeri

18、d; /輸入讀者編號r=query(readerid); if (r=NULL) cout << " 該讀者不存在 "<<endl; break; cout << "輸入新的姓名:" cin >> rname; r->setname(rname); break; case '3': cout << " 輸入讀者學號:" cin >> readerid; r=query(readerid); if (r=NULL) cout <<&

19、quot; 該讀者不存在" << endl; break; r->delbook(); break; case '4': cout << "讀入讀者學號:" cin >> readerid; r=query(readerid); if (r=NULL) cout <<"該讀者不存在"<< endl; break; r->disp(); break; case '5': disp(); break; case '6': clea

20、r(); break; default:cout<<"輸入錯誤,請重新輸入:"break; class Book /定義Book類 private: int price;char author10;int tag;int no;char name20;int onshelf; public: Book() char *getname() return name; int getno() return no; int gettag() return tag; char*getauthor()return author;char getprice()return p

21、rice;void setname(char na) strcpy(name,na); void setauthor(char au)strcpy(author,au);void delbook() tag=1; void addbook(int n,char *na,char*au,int pr) tag=0; no=n; price=pr;strcpy(author,au); strcpy(name,na); onshelf=1; int borrowbook() if (onshelf=1) onshelf=0; return 1; return 0; void retbook() on

22、shelf=1; void disp() cout << setw(6)<< "圖書編號: " << no << setw(18) <<"圖書名: "<< name << setw(10) <<"作者名: "<<author<<setw(18)<<"圖書單價: "<<price<<setw(10)<<(onshelf=1? "在架"

23、;:"已借") <<endl; ; class BDatabase /定義BDatabase類 private: int top; Book bookMaxb; public: BDatabase() Book b; top=-1; fstream file("book.txt",ios:in); while (1) file.read(char *)&b,sizeof(b); if (!file) break; top+; booktop=b; file.close(); void clear() top=-1; int addbo

24、ok(int n,char *na,char*au,int pr) Book *p=query(n); if (NULL=p) top+; booktop.addbook(n,na,au,pr); return 1; return 0; Book *query(int bookid) for (int i=0;i<=top;i+) if (booki.getno()=bookid &&booki.gettag()=0) return &booki; return NULL; void bookdata();void disp() for (int i=0;i<

25、;=top;i+) if (booki.gettag()=0) booki.disp(); BDatabase() fstream file("book.txt",ios:out); /使文件流與book.txt文件建立關聯for (int i=0;i<=top;i+) if (booki.gettag()=0) file.write(char *)&booki,sizeof(booki); file.close(); ; void BDatabase:bookdata() char choice; char bauthor10;int bprice;char

26、 bname40; int bookid; Book *b; while (choice!='0') cout <<"nnnttt圖 書 維 護 "<<endl<<endl; cout<<"tt1 新 增n tt2 更 改ntt3 刪 除ntt4 查 找ntt5 顯 示ntt6 全 刪ntt0 退 出"<<endl; /輸出子菜單cin >> choice; switch (choice) case '1': cout << "輸

27、入圖書編號:"<<endl; cin >> bookid; cout << "輸入圖書書名:"<<endl; cin >> bname; cout<<" 輸入作者名:"cin>>bauthor;cout<<"輸入價格:"cin>>bprice;addbook(bookid,bname,bauthor,bprice);break; /結束循環case '2': cout << "輸入

28、圖書編號:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout << " 該圖書不存在 "<<endl; break; cout << "輸入新的書名:"<<endl; cin >> bname; b->setname(bname); break; case '3': cout <<" 讀入圖書編號:"<<endl; cin >&

29、gt; bookid; b=query(bookid); if (b=NULL) cout <<" 該圖書不存在" << endl; break; b->delbook(); break; case '4': cout << " 讀入圖書編號:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout <<" 該圖書不存在"<< endl; break; b->disp

30、(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<"輸入錯誤,請從新輸入:" void main() /主函數 char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!='0') cout <<endl<<endl<<"ttt 圖 書 管 理 系 統nnn" cout <<"ttt1 借 書nnttt2 還 書 nnttt3 圖 書 維 護nnttt4 讀 者 維 護nnttt0 離 開"&l

溫馨提示

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

評論

0/150

提交評論