C++圖書(shū)管理系統(tǒng)_第1頁(yè)
C++圖書(shū)管理系統(tǒng)_第2頁(yè)
C++圖書(shū)管理系統(tǒng)_第3頁(yè)
C++圖書(shū)管理系統(tǒng)_第4頁(yè)
C++圖書(shū)管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、學(xué) 號(hào): 面向?qū)ο蟪绦蛟O(shè)計(jì)大作業(yè)題 目圖書(shū)管理系統(tǒng)學(xué) 院信息工程學(xué)院專(zhuān) 業(yè)通信工程班 級(jí)姓 名ZXY指導(dǎo)教師鄢紅國(guó)2015年12月20日一、需求分析 圖書(shū)館管理系統(tǒng)是我國(guó)大部分院?;蚱渌块T(mén)不可缺少的部分,書(shū)籍是人類(lèi)精神食糧,尤其對(duì)一些學(xué)校,圖書(shū)館來(lái)說(shuō),非常重要。在軟件開(kāi)發(fā)中,以計(jì)算機(jī)圖書(shū)為主,稱(chēng)“計(jì)算機(jī)圖書(shū)管理系統(tǒng)”。計(jì)算機(jī)圖書(shū)管理系統(tǒng)能夠?yàn)橛脩?hù)實(shí)現(xiàn)借閱圖書(shū)、管理等,隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們深刻認(rèn)識(shí),它已進(jìn)入人類(lèi)社會(huì)的各個(gè)領(lǐng)域并發(fā)揮著越來(lái)越重要的作用。作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)圖書(shū)資源信息進(jìn)行管理,具有著手工管理所無(wú)法比擬的優(yōu)點(diǎn).例如:查閱迅

2、速、安全性高、可靠性高、存儲(chǔ)量大、保密性好、成本低等。這些優(yōu)點(diǎn)能夠極大地提高圖書(shū)館管理的效率。因此,開(kāi)發(fā)這樣一套管理軟件是很有必要. 并且,通過(guò)此課題,能使我們熟練掌握文件、數(shù)組、指針的各種操作,以及一些算法思想的應(yīng)用。(一) 系統(tǒng)總體功能需求 圖書(shū)館可以為借閱者提供借還書(shū)、查詢(xún)書(shū)目等服務(wù)。借閱者每次最多能借5本書(shū)。借書(shū)員主要負(fù)責(zé)借還及新增更改書(shū)目讀者,查詢(xún)等工作,圖書(shū)管理員負(fù)責(zé)圖書(shū)信息的增減及讀者信息的維護(hù)。所有人員都可以瀏覽和查詢(xún)圖書(shū)信息。經(jīng)過(guò)初步分析,圖書(shū)館管理系統(tǒng)應(yīng)該具有以下幾個(gè)模塊:1)借書(shū)模塊2)還書(shū)模塊3)圖書(shū)維護(hù)模塊4)讀者維護(hù)模塊5)統(tǒng)計(jì)分析模塊6)提示7)離開(kāi)(二)圖書(shū)借書(shū)

3、模塊功能分析 圖書(shū)借閱功能需要完成借閱者對(duì)相應(yīng)圖書(shū)的借閱。借閱者的借閱數(shù)量是有限定的,系統(tǒng)會(huì)自動(dòng)檢查是超過(guò)限定借閱的數(shù)量,若超過(guò)限定數(shù)量則不允許借閱。若當(dāng)前要借閱的圖書(shū)已經(jīng)被其他人預(yù)約,讀者也無(wú)法完成借閱。 輸出:是否允許借閱處理:系統(tǒng)進(jìn)行分析比較借閱數(shù)量及是否預(yù)約輸入:借閱者的編號(hào)及圖書(shū)的編號(hào)輸入:圖書(shū)的編號(hào) (三)圖書(shū)還書(shū)模塊功能分析圖書(shū)歸還功能需要完成圖書(shū)的歸還工作。(四)圖書(shū)維護(hù)模塊功能的需求實(shí)現(xiàn)對(duì)圖書(shū)的描述,圖書(shū)的編號(hào),書(shū)名,借出,還入等,需要實(shí)現(xiàn)的功能為:圖書(shū)編目,圖書(shū)注冊(cè),更新書(shū)目,圖書(shū)刪除。1、圖書(shū)的新增:首先給圖書(shū)編號(hào),在給圖書(shū)編號(hào)之前先判斷是否有圖書(shū)為該編號(hào),如果有則編號(hào)不

4、成功重新輸入編號(hào),如果沒(méi)有則編號(hào)成功,繼續(xù)添加圖書(shū)的其他信息,包括書(shū)名、作者、出版社、出版時(shí)間、價(jià)格等信息。 2、圖書(shū)的刪除:輸入圖書(shū)的編號(hào),刪除該編號(hào)圖書(shū)的所有信息,并提示刪除成功信息,若輸入無(wú)效的編號(hào)則提示刪除不成功。3、圖書(shū)的查找:輸入要查找圖書(shū)的編號(hào),輸出該編號(hào)圖書(shū)的所有信息,若輸入無(wú)效的編號(hào)則提示查找失敗。 4、圖書(shū)的顯示:按照出版時(shí)間的先后順序輸出圖書(shū)館所有書(shū)籍的信息。 5、圖書(shū)的全刪:刪除圖書(shū)館所有書(shū)籍的所有信息。(五) 讀者維護(hù)模塊功能的需求對(duì)讀者信息描述,建立讀者個(gè)人資料,借閱者管理需要實(shí)現(xiàn)的功能包括:借閱者注冊(cè),借閱者信息更新,借閱者注銷(xiāo),借閱者信息的查詢(xún)。1、讀者的新增:

5、先給讀者編號(hào),如果該編號(hào)已經(jīng)有人,則提示錯(cuò)誤,否則繼續(xù)輸入讀者的其他信息,包括讀者的名字和初始密碼輸出添加成功提示。 2、讀者的更改:輸入讀者的編號(hào),更改讀者的名字,若輸入的編號(hào)無(wú)效則更該失敗。 3、讀者的刪除:輸入要?jiǎng)h除讀者的編號(hào),判斷該編號(hào)是否有人,有則刪除該讀者的所有信息,沒(méi)有則提示刪除失敗。 4、讀者的查找:輸入要查找的讀者編號(hào),編號(hào)正確則輸出讀者的信息,否則查找失敗。 5、讀者的顯示:顯示圖書(shū)館里所有讀者的信息。 6、讀者的刪除:刪除圖書(shū)館里所有讀者的信息。(六)統(tǒng)計(jì)分析功能 隨時(shí)可以進(jìn)行統(tǒng)計(jì)分析,以便及時(shí)了解當(dāng)前的借閱情況和相關(guān)的資料狀態(tài)。(七) 提示功能當(dāng)出現(xiàn)庫(kù)存查無(wú)此書(shū)或讀者時(shí)

6、,給予相應(yīng)提示。(八) 離開(kāi)功能實(shí)現(xiàn)管理后的系統(tǒng)退出。 二、總體設(shè)計(jì)1.基本思路:采用面向?qū)ο蠓治龇椒?,把一個(gè)系統(tǒng)分成多個(gè)類(lèi)進(jìn)行處理。主要是運(yùn)用到類(lèi)和對(duì)象,還有帶參數(shù)的構(gòu)造函數(shù)以及析構(gòu)函數(shù)以及數(shù)組來(lái)實(shí)現(xiàn)本程序,并在主函數(shù)對(duì)各個(gè)功能模塊就行調(diào)用。即:1)讀者類(lèi),實(shí)現(xiàn)對(duì)讀者信息的描述 2)讀者庫(kù)類(lèi),實(shí)現(xiàn)建立讀者的個(gè)人資料 3)圖書(shū)類(lèi),實(shí)現(xiàn)對(duì)圖書(shū)的描述,圖書(shū)的編號(hào),書(shū)名,借出,還入等 4)圖書(shū)庫(kù)類(lèi),實(shí)現(xiàn)對(duì)圖書(shū)的維護(hù),查找,刪除等 最后用main函數(shù)做界面的引導(dǎo)。4.讀者維護(hù)3.圖書(shū)維護(hù)0.離開(kāi)2.還書(shū)1.借書(shū) 2.遇到的問(wèn)題及解決方法 1)用戶(hù)密碼驗(yàn)證的問(wèn)題:怎么讓用戶(hù)在輸入密碼時(shí)用號(hào)覆蓋密碼解決辦

7、法:通過(guò)翻閱之前的C語(yǔ)言教材,發(fā)現(xiàn)書(shū)中有類(lèi)似的例子,即getch()輸入密碼時(shí)屏幕上不顯示,然后用putch(*)就可以輸出*覆蓋密碼。 2)用getch()函數(shù) 編譯時(shí)出現(xiàn)問(wèn)題。解決辦法:通過(guò)仔細(xì)檢查代碼,發(fā)現(xiàn)忘記添加頭文件 conio.h 。添加后,即可編譯。 3)問(wèn)題三:指針的操作問(wèn)題:如果定義char a4=1,2,3,4;char *p=a; 然后輸出p指向的字符串,coutdelbook();Case4:輸出讀者信息break3. 圖書(shū)類(lèi),實(shí)現(xiàn)對(duì)圖書(shū)的描述,圖書(shū)的編號(hào),書(shū)名,借出,還入等函數(shù)清單:char *getname()/獲取姓名,int getno()/獲取圖書(shū)編號(hào),int

8、 gettag()/獲取刪除標(biāo)記,void setname(char na)/設(shè)置書(shū)名,char*Book:getwriter()/獲取書(shū)籍作者,char*Book:getconcem() return concem; /獲取書(shū)籍出版社,char* Book:gettime() return Time; ,float Book:getprice() return price; /獲取書(shū)籍價(jià)格,void delbook()/刪除圖書(shū),void Book:addbook(int n,char *na, char *wri, char *con, char* tm,float pr) /增加圖書(shū)形參

9、為書(shū)名,編號(hào),作者,出版社,出版時(shí)間,價(jià)格,int borrowbook()/借書(shū)操作,void retbook()/還書(shū)操作,void disp()/輸出圖書(shū)。4. 圖書(shū)庫(kù)類(lèi),實(shí)現(xiàn)對(duì)圖書(shū)的維護(hù),查找,刪除等函數(shù)清單:BDatabase()/構(gòu)造函數(shù),將book.txt讀到book中,void clear()/全刪,nt BDatabase:addbook(int n,char *na, char *wri, char *con,char *tm, float pr) /增加圖書(shū)形參為書(shū)名,編號(hào),作者,出版社,出版時(shí)間,價(jià)格,Book* BDatabase:query(int bookid)/

10、查找圖書(shū)形參為圖書(shū)編號(hào),int BDatabase:qname(char* nm),void bookdata();/圖書(shū)庫(kù)維護(hù),void disp()顯示函數(shù)。 四、程序運(yùn)行結(jié)果測(cè)試與分析運(yùn)行結(jié)果: 分析:由于時(shí)間有限,程序在顯示上仍有小問(wèn)題,待改進(jìn)。五、程序源代碼#include #include #include #include #include #include #includeusing namespace std;const int Maxr=100;/最多的讀者const int Maxb=100;/最多的圖書(shū)const int Maxbor=5;/每位讀者最多借五本書(shū)/*讀者

11、類(lèi),實(shí)現(xiàn)對(duì)讀者信息的描述*/class Readerprivate:int tag ;int no ;char name10 ;/讀者姓名int borbookMaxbor;/所借圖書(shū)char mima6; public:Reader()char *getname()return name;/獲取姓名int gettag()return tag;/獲取刪除標(biāo)記int getno()return no;/獲取讀者編號(hào)void setname(char na)strcpy(name,na);/設(shè)置姓名void delbook()tag=1;/設(shè)置刪除標(biāo)記 1:已刪 0:未刪char* getmim

12、a()/獲取讀者的密碼return mima;void addreader(int n,char*na,char* mi)tag=0;no=n;strcpy(name,na);strcpy(mima,mi); for(int i=0;iMaxbor;i+)borbooki=0;/增加讀者void borrowbook(int bookid)for(int i=0;iMaxbor;i+)if(borbooki=0)borbooki=bookid;return;/借書(shū)操作int retbook(int bookid)for(int i=0;iMaxbor;i+)if(borbooki=bookid

13、)borbooki=0;return 1;return 0;/還書(shū)操作void disp()coutsetw(5)nosetw(10)name借書(shū)編號(hào):;for(int i=0;iMaxbor;i+)if(borbooki!=0)coutborbooki|;coutendl;/*讀者庫(kù)類(lèi),實(shí)現(xiàn)建立讀者的個(gè)人資料*/class RDatabaseprivate:int top;/讀者記錄指針Reader readMaxr;/讀者記錄public:RDatabase() /構(gòu)造函數(shù),將reader.txt讀到read中Reader s;top=-1; fstream file(reader.txt

14、,ios:in);/打開(kāi)一個(gè)輸入文件while (1)file.read(char *)&s,sizeof(s); if (!file)break;top+; readtop=s;file.close(); /關(guān)閉reader.txt void clear()/刪除所有讀者信息top=-1;int addreader(int n,char *na,char* mi) /添加讀者時(shí)先查找是否存在Reader *p=query(n); if (p=NULL)top+; readtop.addreader(n,na,mi); return 1;return 0;Reader *query(int r

15、eaderid)/按編號(hào)查找 for (int i=0;i=top;i+) if (readi.getno()=readerid & readi.gettag()=0)return &readi; return NULL; void disp() /輸出所有讀者信息 for (int i=0;i=top;i+)if (readi.gettag()=0) readi.disp(); void readerdata();/讀者庫(kù)維護(hù)RDatabase() /析構(gòu)函數(shù),將read寫(xiě)到reader.txt文件中 fstream file(reader.txt,ios:out); for (int i=

16、0;i=top;i+) if (readi.gettag()=0)file.write(char *)&readi,sizeof(readi); file.close();void RDatabase:readerdata() char choice=1; char rname20; int readerid;char rmima6; Reader *r;while (choice!=0)cout ttt* 讀 者 維 護(hù) *endl;cout ttt 1.新 增 endl; cout ttt 2.更 改 endl; cout ttt 3.刪 除 endl; cout ttt 4.查 找 en

17、dl; cout ttt 5.顯 示 endl; cout ttt 6.全 刪 endl; cout ttt 0.退 出 choice; int i=0; switch (choice) case 1:cout readerid; while(query(readerid)!=NULL); cout 輸入讀者密碼:; for(i;i6;i+) rmimai=getch(); putch(*); cout rname;addreader(readerid,rname,rmima); break;case 2:cout readerid;r=query(readerid); if (r=NULL)

18、 cout 該讀者不存在endl;break;cout rname;r-setname(rname); break;case 3: cout readerid;r=query(readerid); if (r=NULL)cout 該讀者不存在 delbook(); break;case 4:cout readerid; r=query(readerid); if (r=NULL) cout 該讀者不存在 endl;break;cout您所查找的讀者信息如下disp(); break; case 5: disp(); break; case 6: clear(); break; default:

19、cout輸入錯(cuò)誤,請(qǐng)從新輸入;break; /*圖書(shū)類(lèi),實(shí)現(xiàn)對(duì)圖書(shū)的描述,圖書(shū)的編號(hào),書(shū)名,借出,還入等*/class Book private: int tag;/刪除標(biāo)記1:已刪0:未刪int no;/圖書(shū)編號(hào)char name20;/書(shū)名char writer10; /作者char concem30; /出版社char Time10; float price; int onshelf;/是否在架1:在架 2:已借public: Book() char *getname() return name; /獲取姓名int getno() return no; /獲取圖書(shū)編號(hào)int gettag

20、() return tag; /獲取刪除標(biāo)記void setname(char na)/設(shè)置書(shū)名strcpy(name,na); char*Book:getwriter() return writer; /獲取書(shū)籍作者char*Book:getconcem() return concem; /獲取書(shū)籍出版社char* Book:gettime() return Time; float Book:getprice() return price; /獲取書(shū)籍價(jià)格void delbook() tag=1;/刪除圖書(shū)void Book:addbook(int n,char *na, char *wri

21、, char *con, char* tm,float pr) /增加圖書(shū)tag=0; no=n; strcpy(name,na); strcpy(writer,wri); strcpy(concem,con); strcpy(Time,tm); price=pr; onshelf=1;int borrowbook()/借書(shū)操作if (onshelf=1) onshelf=0; return 1; return 0; void retbook()/還書(shū)操作onshelf=1; void disp()/輸出圖書(shū)cout setw(6) no setw(18) name setw(10)conce

22、msetw(10)writersetw(12)Timesetw(6) (onshelf=1? 在架:已借) endl; ;/*圖書(shū)庫(kù)類(lèi),實(shí)現(xiàn)對(duì)圖書(shū)的維護(hù),查找,刪除等*/class BDatabase private: int top; /圖書(shū)記錄指針Book bookMaxb; /圖書(shū)記錄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+; bo

23、oktop=b; file.close(); void clear()/全刪top=-1; int BDatabase:addbook(int n,char *na, char *wri, char *con,char *tm, float pr) /增加圖書(shū)B(niǎo)ook *p=query(n); if (NULL=p) top+; booktop.addbook(n,na,wri,con,tm,pr); return 1; return 0; Book* BDatabase:query(int bookid)/查找圖書(shū)for (int i=0;i=top;i+) if (booki.getno(

24、)=bookid &booki.gettag()=0) return &booki; return NULL; int BDatabase:qname(char* nm) int j=0; for(int i=0;i=top;i+) if(strcmp(booki.getname(),nm)=0)&booki.gettag()=0) j+; if(j=0) return 0; else return j; Book* BDatabase:Qname(char* nm) int j=0; Book b100; for (int i=0;i=top;i+) if (strcmp(booki.get

25、name(),nm)=0) & booki.gettag()=0) bj+=booki; if(j=0) return NULL; else return b; int BDatabase:qzuozhe(char *wr) int e=0; for (int i=0;i=top;i+) if (strcmp(booki.getwriter(),wr)=0) & booki.gettag()=0) e+; if(e=0) return 0; else return e; Book* BDatabase:Qzuozhe(char *wr) int f=0; Book b100; for (int

26、 i=0;i=top;i+) if (strcmp(booki.getwriter(),wr)=0) & booki.gettag()=0) bf+=booki; if(f=0) return NULL; else return b; int BDatabase:qchuban(char *cb) int g=0; for (int i=0;i=top;i+) if (strcmp(booki.getconcem(),cb)=0) & booki.gettag()=0)g+; if(g=0) return NULL; else return g;Book* BDatabase:Qchuban(

27、char *cb) int h=0; Book b100; for (int i=0;i=top;i+) if (strcmp(booki.getconcem(),cb)=0) & booki.gettag()=0) bh+=booki; if(h=0) return NULL; else return b; void bookdata();/圖書(shū)庫(kù)維護(hù)void disp() for (int i=0;i=top;i+) if (booki.gettag()=0) booki.disp(); BDatabase()/析構(gòu)函數(shù),將book寫(xiě)到book.txt文件中fstream file(boo

28、k.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; Book *b; char bwriter15; char bconcem15; char btime15; float bprice; int r=0; while (choice!=0) cout nnnttt* 圖 書(shū) 維 護(hù) *e

29、ndlendl; cout ttt 1.新 增 endl; cout ttt 2.更 改 endl; cout ttt 3.刪 除 endl; cout ttt 4.查 找 endl; cout ttt 5.顯 示 endl; cout ttt 6.全 刪 endl; cout ttt 0.退 出 choice; switch (choice) case 1: cout 輸入圖書(shū)編號(hào): bookid; cout 輸入圖書(shū)書(shū)名: bname; cout 輸入圖書(shū)作者: bwriter; cout 輸入圖書(shū)出版社: bconcem; cout 輸入圖書(shū)出版時(shí)間:btime; cout 輸入圖書(shū)價(jià)格

30、:bprice; addbook(bookid,bname,bwriter,bconcem,btime,bprice); cout圖書(shū)添加成功endl; break; case 2: cout 輸入圖書(shū)編號(hào): bookid; b=query(bookid); if (b=NULL) cout 該圖書(shū)不存在endl; break; cout 輸入新的書(shū)名: bname; b-setname(bname); break; case 3:cout 讀入圖書(shū)編號(hào): bookid; b=query(bookid); if (b=NULL) cout 該圖書(shū)不存在 delbook(); break; ca

31、se 4: cout 讀入圖書(shū)編號(hào): bookid; b=query(bookid); if (b=NULL) cout 該圖書(shū)不存在 endl; break; cout您所查找的圖書(shū)信息如下disp(); break; case 5: disp(); break; case 6: clear();cout所有圖書(shū)已刪除endl; break; default:cout輸入錯(cuò)誤,請(qǐng)從新輸入:; /*main() 函數(shù)的實(shí)現(xiàn),程序的主界面的引導(dǎo)*/void main() char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r

32、; BDatabase BookDB; Book *b; while(choice!=0) cout endlendl; cout tttendl; cout ttt endl;cout ttt 圖書(shū)管理系統(tǒng) endl;cout ttt endl; cout ttt 1 借 書(shū) endl; cout ttt 2 還 書(shū) endl; cout ttt 3 圖 書(shū) 維 護(hù) endl; cout ttt 4 讀 者 維 護(hù) endl; cout ttt 0 離 開(kāi) endl; cout ttt choice; switch (choice) case 1: cout readerid; cout bookid; r=ReaderDB.query(readerid);/按編號(hào)查找if (NULL=r) cout 不存在該讀者,不能借書(shū) endl; break; b=BookDB.query(bookid);if (b=NULL) cout 不存在該圖書(shū),不能借書(shū)borrowbook()=0) cout 該圖書(shū)有借出,不能借書(shū)borrowbook(b-getno(); break; case 2: coutreaderid; cout bookid; r=R

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論