《面向?qū)ο蟪绦蛟O(shè)計(C++)》圖書管理系統(tǒng)設(shè)計_第1頁
《面向?qū)ο蟪绦蛟O(shè)計(C++)》圖書管理系統(tǒng)設(shè)計_第2頁
《面向?qū)ο蟪绦蛟O(shè)計(C++)》圖書管理系統(tǒng)設(shè)計_第3頁
《面向?qū)ο蟪绦蛟O(shè)計(C++)》圖書管理系統(tǒng)設(shè)計_第4頁
《面向?qū)ο蟪绦蛟O(shè)計(C++)》圖書管理系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、面向?qū)ο蟪绦蛟O(shè)計(C+)項目名稱:圖書管理系統(tǒng)設(shè)計一、 問題分析與功能定義二十一世紀是信息的社會,信息作為社會最主要的資源,將成為戰(zhàn)略資源引起人們廣泛的關(guān)注。如何獲取信息?圖書是我們最好的獲取信息的方式,但由于圖書館圖書收藏量大大增加,使傳統(tǒng)的圖書管理員的工作日益繁重起來。迫使人們起用新的管理方法來管理圖書,但如何把圖書管理員從繁重的工作中解脫出來呢?科學(xué)技術(shù)日新月異的進步,讓人類生活發(fā)生了巨大的變化,計算機技術(shù)的飛速發(fā)展,使各行各業(yè)在計算機技術(shù)應(yīng)用方面得到了廣泛的普及和使用。信息化時代的到來成為不可抗拒的潮流,人類文明正在進入一個嶄新的時代。因此,圖書管理系統(tǒng)也以方便、快捷、費用低的優(yōu)點正慢

2、慢地進入人們的生活,將傳統(tǒng)的圖書管理方式徹底的解脫出來,提高效率,減輕工人人員以往繁忙的工作,減小出錯的概率,使讀者可以花更多的時間在選擇書和看書上。從而使人們有更多時間來獲取信息、了解信息、掌握信息 。1、設(shè)計內(nèi)容及要求設(shè)計一個圖書館管理系統(tǒng),完成圖書管理和讀者管理的功能,并能對借閱信息進行管理,要求完成一下功能,圖書資料管理,可以添加、修改、刪除、查詢書籍信息,讀者資料管理,可以添加、修改、刪除、查詢讀者信息;借書管理,可以進行添加借書信息;還書管理,可以進行還書信息;該項目是在Visual C+ 6.0的平臺下用c+語言實現(xiàn),創(chuàng)建對象,程序運行開始,打開文件并將其分別鏈入鏈表之中;程序結(jié)

3、束關(guān)閉并保存文件。整體系統(tǒng)功能全部由鏈表實現(xiàn)。 2、模塊圖圖書館管理系統(tǒng)借書讀者維護圖書維護還書離開二、對象(類)設(shè)計及實現(xiàn)1、概要設(shè)計Reader讀者類、RDatabase 讀者庫類、Book 圖書類、BDatabase 圖書庫類class RDatabase/讀者庫類int top;/ 讀者記錄指針Reader readMaxr;/ 讀者記錄RDatabase();/構(gòu)造函數(shù),將reader.txt讀到read中void clear();/刪除所有讀者信息int addreader(int n,char *na);/增添讀者信息Reader *query(int readerid);/按編

4、號查找void disp();/輸出所有讀者信息int Readernum();/記錄讀者信息void readerdata();/讀者庫維護RDatabase();/析構(gòu)函數(shù),將read寫入reader.txt文件中2、詳細設(shè)計1)類的原型描述class Reader/讀者類int tag;/刪除標記1:已刪0:未刪 int no;/讀者編號 char name10;/讀者姓名 int borbookMaxbor;/所借圖書 Reader() char *getname() /獲取姓名 int gettag() /獲取刪除標記 int getno() /獲取讀者編號 void setname

5、(char na)/設(shè)置姓名 void delbook() /設(shè)置刪除標記 void addreader(int n,char *na); /增加讀者 void borrowbook(int bookid); /借書操作int retbook(int bookid); /還書操作void disp(); /輸出讀者信息class BDatabase/圖書庫類int top;/圖書記錄指針Book bookMaxb;/圖書記錄BDatabase();/構(gòu)造函數(shù),將book.txt讀到book中void clear();/全刪 int addbook(int n,char *na);/增加圖書Bo

6、ok *query(int bookid);/查找圖書void disp();/輸出所有圖書信息void bookdata();/圖書庫維護BDatabase();/析構(gòu)函數(shù),將book寫入book.txt文件中class Book /圖書類 int tag;/刪除標記1:已刪0:未刪 int no;/圖書編號 char name20;/書名 int onshelf;/是否在架1:在架0:已借 Book() char *getname();/獲取姓名 int getno();/獲取圖書編號 int gettag(); /獲取刪除標記 void setname(char na);/設(shè)置書名 vo

7、id delbook();/刪除圖書 void addbook(int n,char *na);/增加圖書 int borrowbook();/借書操作 void retbook();/還書操作 void disp();/輸出圖書 3、 核心控制設(shè)計1、 在主函數(shù)中我們要做的操作包括: (1)建立1個Reader讀者類、1個RDatabase 讀者庫類、1個Book 圖書類、1個BDatabase 圖書庫類(2)建立菜單界面。完成以下內(nèi)容: 進入功能必須打開菜單,然后用戶根據(jù)菜單選擇相應(yīng)的操作方式,如查看數(shù)據(jù)、編輯圖書數(shù)據(jù)以及修改圖書數(shù)據(jù)、維護圖書的采購信息。添加、刪除、查看讀者個人信息,瀏覽

8、圖書信息。 能夠?qū)D書基本信息、圖書采購信息、圖書的借閱人信息進行統(tǒng)計,統(tǒng)計的結(jié)果能夠以表格的形式來表示。(3) 將圖書基本信息、圖書采購信息、圖書的借閱人信息存儲在相應(yīng)的文件中。(4) 系統(tǒng)界面友好,易操作。2、本程序應(yīng)具備的功能:A.添加、借閱、還書功能: (1)添加讀者和圖書信息。 (2)借閱尚在架的圖書。 (3)讀者歸還的圖書。B.查找功能(1) 根據(jù)圖書的編號查找圖書信息。(2)根據(jù)讀者的編號查找讀者的信息。C.系統(tǒng)的操作(1) 系統(tǒng)在進入時,要有菜單提示;(2) 系統(tǒng)在用戶退出時,有一定的提示。3、算法分析1)添加操作:(讀者信息的添加與圖書信息的添加類似) 包括兩個部分,先通過輸

9、入設(shè)備輸入信息,系統(tǒng)獲??;然后添加入讀者數(shù)據(jù)庫read.txt文件中。獲取信息void Reader:addreader(int n,char *na) /增加讀者 int i=0i<Maxbor borbooki=0; i+;輸入n和natag=0; no=n; no=n; strcpy(name,na); tag=0; no=n; strcpy(name,na); for (int i=0;i<Maxbor;i+) borbooki=0; int RDatabase:addreader(int n,char *na) /增添讀者信息der *p=query(n);if (p=N

10、ULL)top+;readtop.addreader(n,na);cout<<"讀者添加成功"<<endl;return 1;return 0;流程圖: der *p=query(n); p=NULLY return 0;top+;readtop.addreader(n,na);cout<<"讀者添加成功"<<endl;return 1; N 析構(gòu)函數(shù)寫入新讀者的編號跟姓名RDatabase:RDatabase() fstream file("reader.txt",ios:out);

11、for (int i=0;i<=top;i+) if(readi.gettag()=0) file.write(char *)&readi,sizeof(readi); else file.close(); 流程圖:fstream file("reader.txt",ios:out);當i<=topi+ readi.gettag()=0Y N int i=0file.close();file.write(char *)&readi,sizeof(readi);2) 借書操作:利用for語句和if語句,通過判斷圖書的borbook的編號是否為0,來

12、判斷圖書是否未被借走或還沒有被借完。void Reader:borrowbook(int bookid) /借書操作 for (int i=0;i<Maxbor;i+) if (borbooki=0) borbooki=bookid; return; int i=0當i<Maxbor borbooki=0Y N i+borbooki=bookid; return; 流程圖:3) 還書操作:利用for語句和if語句,通過判斷圖書的borbook的編號是否為要還書的編號,來判斷是否借出此書。int Reader:retbook(int bookid) /還書操作 for(int i=0

13、;i<Maxbor;i+) if(borbooki=bookid) borbooki=0; int i=0當i<Maxbor borbooki=bookidY N i+continueborbooki=0; return 1; return 1; else continue; 流程圖:(4) 查找功能:利用for語句和if語句,尋找與要查詢的編號相同的讀者編號或圖書編號,如果找到,向系統(tǒng)返回相應(yīng)的編號,輸出相應(yīng)的信息。(讀者的查找與圖書查找類似)Reader *query(int readerid) /按編號查找for (int i=0;i<=top;i+)if(readi.

14、getno()=readerid&&readi.gettag()=0)return &readi;return NULL; int i=0流程圖:當i<=top readi.getno()=readerid Y &&readi.gettag()=0 Nreturn &readi; i+; return NULL;四、測試分析(一)、此系統(tǒng)存在問題1) 未設(shè)登錄密碼保護系統(tǒng),是整個圖書管理系統(tǒng)失去了一定的安全性;2) 程序運行界面 此界面運行時選擇4有時會出現(xiàn)內(nèi)存讀取錯誤;1)當輸入錯的數(shù)據(jù)類型時 可能導(dǎo)致內(nèi)存錯誤;2)讀者、圖書信息不完善;

15、 3)命名不是很規(guī)范;4) 信息存儲有限;五、心得體會通過這次課程設(shè)計讓我逐步學(xué)會了如何運用C+面向?qū)ο蟪绦蛟O(shè)計的設(shè)計思想和方法來解決實際問題。比如這次設(shè)計圖書管理系統(tǒng),首先我考慮是在實際應(yīng)用時用戶一般進行什么操作,對哪些對象進行操作。很顯然我需要建立兩個類,包括圖書類和讀者類,同時考慮到圖書和讀者不止一個,所以還需兩個類,圖書庫類和讀者庫類,這兩個類分別將其信息傳遞給圖書類和讀者類。確定了類之后,則需要對類的內(nèi)容進行擴充。由于我需要這個系統(tǒng)完成對圖書管理和讀者管理的功能,并能對借閱信息進行管理,要求完成一下功能,圖書資料管理,可以添加、修改、刪除、查詢書籍信息,讀者資料管理,可以添加、修改、

16、刪除、查詢讀者信息;借書管理,可以進行添加借書信息;還書管理,可以進行還書信息。所以在對應(yīng)的類下建立相應(yīng)功能函數(shù)。建立功能函數(shù)后就是構(gòu)造主函數(shù)。主函數(shù)的作用就是通過向?qū)ο蟀l(fā)送信息、對象接受信息啟動相應(yīng)的方法來實現(xiàn)相應(yīng)的操作。 當然在這些過程中要保證面向?qū)ο蟪绦蛟O(shè)計的抽象、封裝、多態(tài)和繼承的特點。在設(shè)計本系統(tǒng)中雖然綜合考慮到了圖書管理的各個方面,界面設(shè)計簡潔,數(shù)據(jù)庫設(shè)計合理,但依然還有一些不足。 為了能夠較好地完成本次課程設(shè)計,我詳細閱讀教材,以及網(wǎng)上搜索,和到圖書館查找相關(guān)資料等。在做課程設(shè)計的過程中,我在利用所學(xué)的知識同時,又學(xué)到了很多實例化的理論知識和軟件工程的一些實踐,總結(jié)了一些經(jīng)驗和方

17、法強化了我的實際動手能力,同時也找到自己的不足,我一定會繼續(xù)學(xué)習增加自己的編程能力和調(diào)試能力,在今后的學(xué)習中我將會更加的努力,增加自己的知識儲備,拓寬自己的知識面,鍛煉自己的能力,使我的綜合素質(zhì)得到較大的提高。在這設(shè)計的過程中我也出現(xiàn)過一些比較嚴重的錯誤,后來在同學(xué)的指點下我改正了自己的錯誤,并最終成功調(diào)試除了程序。當程序調(diào)試出來的那一瞬間,我感覺自己完成了一件非常了不起的事,好有成就感。在以后的日子,我將會繼續(xù)我的興趣繼續(xù)深入學(xué)習程序設(shè)計,相信在越來越多的嘗試之后,自己會不斷進步不斷提高的。 最后感謝老師的指導(dǎo)與同學(xué)的幫助,使我能順利完成這次程序設(shè)計。六、源程序代碼#include <

18、iostream>#include <iomanip>#include <string>#include <fstream>/輸入/輸出文件流類using namespace std;const int Maxr=100;/最多的讀者const int Maxb=100;/最多的圖書const int Maxbor=5;/每位讀者最多借五本書/讀者類,實現(xiàn)對讀者的信息的描述class Reader private:int tag; /刪除標記 1:已刪 0:未刪int no; /讀者編號char name10; /讀者姓名int borbookMaxb

19、or;/所借圖書 public:Reader() /構(gòu)造函數(shù)char *getname() return name; /獲取姓名 int gettag() return tag; /獲取刪除標記 int getno() return no; /獲取讀者編號 void setname(char na) /設(shè)置姓名 strcpy(name,na); void delbook() /設(shè)置刪除標記 tag=1; void addreader(int n,char *na); /增加讀者 void borrowbook(int bookid); /借書操作int retbook(int bookid);

20、 /還書操作void disp(); /輸出讀者信息; void Reader:addreader(int n,char *na) /增加讀者 tag=0; no=n; strcpy(name,na); for (int i=0;i<Maxbor;i+) borbooki=0; void Reader:borrowbook(int bookid) /借書操作 for (int i=0;i<Maxbor;i+) if (borbooki=0) borbooki=bookid; return; int Reader:retbook(int bookid) /還書操作 for(int i

21、=0;i<Maxbor;i+) if(borbooki=bookid) borbooki=0; return 1; else continue; return 0; void Reader:disp() /輸出讀者信息 cout << setw(5) << no << setw(10) << name << " 借書編號:" for (int i=0;i<Maxbor;i+) if (borbooki!=0) cout <<borbooki <<"|" cou

22、t<<""<<endl; /讀者類庫,實現(xiàn)建立讀者的個人資料 class RDatabase private: int top; /讀者記錄指針 Reader readMaxr;/讀者記錄public:RDatabase();/構(gòu)造函數(shù),將reader.txt讀到read中void clear()/刪除所有讀者信息top=-1;int addreader(int n,char *na); /增添讀者信息Reader *query(int readerid) /按編號查找for (int i=0;i<=top;i+)if(readi.getno(

23、)=readerid&&readi.gettag()=0)return &readi;return NULL;void disp();/輸出所有讀者信息int Readernum(); /得到讀者編號void readerdata();/讀者庫維護RDatabase();/ 析構(gòu)函數(shù),將read寫入reader.txt文件中;RDatabase:RDatabase()/構(gòu)造函數(shù),將reader.txt讀到read中Reader s;top=-1;fstream file("reader.txt",ios:in);while (1)file.read(

24、char *)&s,sizeof(s);if (!file) break;top+;readtop=s;file.close();RDatabase:RDatabase()/ 析構(gòu)函數(shù),將read寫入reader.txt文件中fstream file("reader.txt",ios:out);for (int i=0;i<=top;i+)if(readi.gettag()=0)file.write(char *)&readi,sizeof(readi);elsefile.close();int RDatabase:addreader(int n,ch

25、ar *na) /增添讀者信息Reader *p=query(n);if (p=NULL)top+;readtop.addreader(n,na);cout<<"讀者添加成功"<<endl;return 1;return 0;void RDatabase:disp()/輸出所有讀者信息for (int i=0;i<=top;i+)readi.disp();int RDatabase:Readernum()return top;void RDatabase:readerdata() /讀者庫維護 char choice;char rname100

26、; /讀者姓名int readerid;Reader *r;do cout <<"nnttt歡迎進入讀者維護界面nnntt 1 新 增nntt 2 更 改nntt 3 刪 除nntt 4 查 找nntt 5 顯 示nntt 6 全 刪nntt 0 退 出"<<endl;cin >> choice;switch (choice) case '1':cout << "輸入讀者編號:"cin >> readerid;cout << "輸入讀者姓名:"ci

27、n >> rname;addreader (readerid,rname);break; case '2':cout << "輸入讀者編號:"cin >> readerid;r=query(readerid);if (r=NULL)cout << " 該讀者不存在 "<<endl; break;cout << "輸入新的姓名:"cin >> rname;r->setname(rname); break; case '3&#

28、39;: cout << " 輸入讀者編號:" cin >> readerid;r=query(readerid);if (r=NULL) cout <<" 該讀者不存在" << endl; break;r->delbook();break;case '4':cout << "讀入讀者編號:"cin >> readerid;r=query(readerid);if (r=NULL)cout <<"該讀者不存在"

29、<< endl;break;r->disp();break;case '5':disp();break;case '6':clear();break;default:if (choice!='0') cout<<"輸入錯誤,請從新輸入:"break;while (choice!='0');/圖書類,實現(xiàn)對圖書的描述,圖書的編號,書名,借出,還入等class Bookprivate: int tag;/刪除標記 1:已刪 0:未刪int no;/圖書編號char name20;/書名

30、int onshelf;/是否再架 1:再架 0:已借public:Book()char *getname() return name; /獲取姓名int getno() return no; /獲取圖書編號int gettag() return tag; /獲取刪除標記void setname(char na)/設(shè)置書名strcpy(name,na);void delbook() tag=1;/刪除圖書void addbook(int n,char *na)/增加圖書tag=0;no=n;strcpy(name,na);onshelf=1;int borrowbook()/借書操作if (o

31、nshelf=1)onshelf=0;return 1;return 0;void retbook()/還書操作onshelf=1;void disp()/輸出圖書cout << setw(6) << no << setw(18) << name << setw(10)<<(onshelf=1? "在架":"已借") <<endl;/圖書庫類,實現(xiàn)對圖書的維護,查找,刪除等class BDatabaseprivate: int top; /圖書記錄指針Book bookM

32、axb; /圖書記錄public:BDatabase()/構(gòu)造函數(shù),將book.txt讀到book中 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 addbook(int n,char *na);/增加圖書 Book *query(int bookid)/查找圖書for (int i=0;i<=

33、top;i+)if (booki.getno()=bookid &&booki.gettag()=0)return &booki;return NULL;void bookdata();/圖書庫維護void disp() /輸出圖書 for (int i=0;i<=top;i+) if (booki.gettag()=0) booki.disp();BDatabase();/析構(gòu)函數(shù),將book寫到book.txt文件中;int BDatabase:addbook(int n,char *na)/增加圖書Book *p=query(n);if (NULL=p)to

34、p+;booktop.addbook(n,na);return 1;return 0;BDatabase:BDatabase()/析構(gòu)函數(shù),將book寫到book.txt文件中fstream file("book.txt",ios:out); 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 bname40;int bookid;Boo

35、k *b;do cout <<"nnnttt歡迎進入圖書維護界面 "<<endl<<endl;cout<<"tt1 新 增n tt2 更 改ntt3 刪 除ntt4 查 找ntt5 顯 示ntt6 全 刪ntt0 退 出"<<endl;cin >> choice;switch (choice) case '1':cout << "輸入圖書編號:"<<endl;cin >> bookid; cout <<

36、; "輸入圖書書名:"<<endl;cin >> bname;addbook(bookid,bname);break; case '2':cout << "輸入圖書編號:"<<endl;cin >> bookid;b=query(bookid);if (b=NULL)cout << " 該圖書不存在 "<<endl; break;cout << "輸入新的書名:"<<endl;cin >

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

38、;> bookid;b=query(bookid);if (b=NULL)cout <<" 該圖書不存在"<< endl;break;b->disp();break;case '5':disp();break;case '6':clear();break;default:if(choice!='0') cout<<"輸入錯誤,請從新輸入:"while (choice!='0');void showmenu()cout<<"

39、 "cout<<"|-|"<<endl;cout<<" "cout<<"|-設(shè)計者:童安蓉,楊丹,劉蕙娟,鄧小偉-完成時間:2010年12月28日-|"<<endl;cout<<" "cout<<"|-圖 書 管 理 系 統(tǒng)-|"<<endl;cout<<" "cout<<"|-|"<<endl;cout<&l

40、t;" "cout<<"| 1.借 書 |"<<endl;cout<<" "cout<<"| 2.還 書 |"<<endl;cout<<" "cout<<"| 3.圖 書 維 護 |"<<endl;cout<<" "cout<<"| 4.讀 者 維 護 |"<<endl;cout<<"

41、 "cout<<"| 0.退出:將數(shù)據(jù)保存到磁盤 |"<<endl;cout<<" "cout<<"|-|"<<endl;void showtip() cout<<"ntt-操作完成!-"<<endl;cout<<"tt-選擇0-5繼續(xù)-"<<endl; cout<<" "cout<<"|-|"<<end

42、l;cout<<" "cout<<"| 1.借 書 |"<<endl;cout<<" "cout<<"| 2.還 書 |"<<endl;cout<<" "cout<<"| 3.圖 書 維 護 |"<<endl;cout<<" "cout<<"| 4.讀 者 維 護 |"<<endl;cout<<" "cout<<"| 0.退出:將數(shù)據(jù)保存到磁盤 |"<<endl;cout<<" "cout<<"|-|"<<endl;/main() 函數(shù)的實現(xiàn),程序的主界面的引導(dǎo)int main() char

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論