版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
-.z.1設(shè)計(jì)任務(wù)1.1設(shè)計(jì)目的運(yùn)用所學(xué)知識(shí),完成圖書館管理系統(tǒng),通過實(shí)踐加強(qiáng)對(duì)所學(xué)知識(shí)的理解和鞏固1.2設(shè)計(jì)容建立圖書館管理系統(tǒng),用戶分為圖書管理人員,讀者。管理人員可以增加刪除查看圖書、讀者。讀者只能查看自身信息,和借還書1.3設(shè)計(jì)指標(biāo)或者要求管理人員可以訪問任意圖書和讀者,而讀者只能借還圖書館存在的圖書和查看自己的信息。2設(shè)計(jì)過程分析:由于管理系統(tǒng)用戶有圖書管理員和讀者,但兩者的權(quán)限不同,管理員有權(quán)訪問所有圖書信息和管理員信息,而讀者只能訪問所有圖書信息和自身的信息。所以他們的相同點(diǎn):都能訪問所有圖書信息不同點(diǎn):管理員能訪問所有讀者信息而管理員只能訪問自身信息而不能訪問其它讀者信息;故此設(shè)計(jì)了三個(gè)類程序包含三個(gè)類:圖書類(books),管理員類(manager),讀者類reader,books類為抽象類,manager,和reader類為books類的派生類。為了能讓管理員和讀者訪問所有圖書信息,所有都繼承了books類;而為了分出兩者的權(quán)限的不同,所以把所有讀者的信息做為一個(gè)鏈表作為管理員的一個(gè)私有成員,而讀者卻只能放一個(gè)自身節(jié)點(diǎn)作為讀者的私有成員,然后分別設(shè)計(jì)各個(gè)類的成員函數(shù)。2.1程序功能Classbooks///虛基類{protected: books_node*broot;public: books();//構(gòu)造函數(shù) savebooks();//保存修改的容 search_book();//查找*一本書 print_books();//輸出所有書的信息 virtualadd_book()=0;//對(duì)于讀者是還書,對(duì)于管理員添加書 virtualdelet_book()=0;//對(duì)于讀者是借書,對(duì)于管理員是去掉*一本書};Classmanager:publicbooks//管理員類{protected: readers_node*rroot;public: manager(readers_node*); savereaders(); add_book();//添加圖書信息 delet_book();//刪除圖書 search_reader();//查找讀者信息 add_reader();//添加讀者 delet_reader();//刪除讀者 print_readers();//輸出所有讀者};classreader:publicbooks{//讀者類private:readers_node*personnel;//存放讀者自身信息public: reader(readers_node*); add_book();//還書 reader_borrow(); delet_book(); reader_return();//借書 print_me();//查看自己借書情況 save_readers(readers_node*);};2.2程序流程圖開始菜單開始菜單管理員菜單讀者菜單添刪加除圖圖書書添刪加除讀讀者者借還查查看看所自有身圖信書書書息讀者管理員圖書維護(hù)讀者維護(hù)后退后退后退后退后退3軟件運(yùn)行或者測(cè)試結(jié)果(1)管理員身份登錄:(2)讀者身份登錄:4軟件設(shè)計(jì)過程中遇到的問題以及解決辦法由于編寫前期做了大量的設(shè)計(jì)工作,在編寫過程中基本沒有遇到難解決的問題提,倒是在設(shè)計(jì)類時(shí)有些茫然,經(jīng)過反復(fù)斟酌還是做了一些取舍,比如把讀取讀者文件放在了類的外面等。。5總結(jié)通過本次課程設(shè)計(jì)學(xué)到了很多東西,對(duì)于c++對(duì)象的含義有了進(jìn)一步的認(rèn)識(shí),從而對(duì)類的封裝和設(shè)計(jì)有了一種新的認(rèn)識(shí),不只是停留在表面,為以后的學(xué)習(xí)積累了經(jīng)驗(yàn),設(shè)計(jì)不比編寫容易,類設(shè)計(jì)好是整個(gè)程序?qū)懞玫那疤幔挥幸粋€(gè)好的規(guī)劃才能寫出好的程序。不過也通過本次發(fā)現(xiàn)了自己的不足之處??偸牵罕敬握n程設(shè)計(jì)受益匪淺,動(dòng)手能力大大增強(qiáng);附錄(程序源代碼)*include<iostream.h>*include<fstream.h>*include<string.h>*include<stdlib.h>*include<stdio.h>*include<conio.h>*definema*3typedefstructBooks{ charbook_name[15]; inttotal_num; intborrow_num; charbook_num[15]; Books*ne*t;}books_node;typedefstructReaders{ charreader_name[15]; charreader_no[15]; intreader_borrow_num; structReader_borrow_books{ charborrow_books_name[15]; charborrow_books_no[15]; }reader_borrow_book[ma*]; Readers*ne*t;}readers_node;classbooks{protected: books_node*broot;public: books(); savebooks(); search_book(); print_books(); virtualadd_book()=0; virtualdelet_book()=0;};classmanager:publicbooks{protected: readers_node*rroot;public: manager(readers_node*); savereaders(); add_book(); delet_book(); search_reader(); add_reader(); delet_reader(); print_readers();};classreader:publicbooks{private:readers_node*personnel;public: reader(readers_node*); add_book(); reader_borrow(); delet_book(); reader_return(); print_me(); save_readers(readers_node*);};books::books(){ books_node*r; broot=newbooks_node; r=newbooks_node; r->ne*t=NULL; broot=r; ifstreaminFile; inFile.open("c:\\books.dat",ios::binary); if(inFile.is_open()==-1)cout<<"con'topenbooks.dat"<<endl; else { inti=0; while(1) { i++; books_node*node; node=newbooks_node; inFile.read((char*)node,sizeof(books_node)); if(inFile.eof())break; node->ne*t=r->ne*t; r->ne*t=node; } inFile.close(); if(i<2)cout<<"暫時(shí)沒有圖書數(shù)據(jù)"<<endl; }}books::savebooks(){ books_node*L; L=newbooks_node; L=broot->ne*t; ofstreamoutFile; outFile.open("c:\\books.dat",ios::binary); while(L) { outFile.write((char*)L,sizeof(books_node)); L=L->ne*t; } outFile.close(); }books::search_book(){ charsearchedbook[15]; cout<<"輸入要查找的書的名子:"; cin>>searchedbook; books_node*r; r=newbooks_node; r=broot->ne*t; while(r) { if((strcmp(searchedbook,r->book_name))==0) { cout<<"書名:"<<r->book_name<<"書的總量:"<<r->total_num<<"借出:"<<r->borrow_num<<"書的編號(hào):"<<r->book_num<<endl;break; } r=r->ne*t; } if(r==NULL)cout<<"對(duì)不起,沒有此書"<<endl; }books::print_books(){ books_node*r;r=newbooks_node; r=broot->ne*t; while(r) { cout<<"書名:"<<r->book_name<<"書的總量:"<<r->total_num<<"借出:"<<r->borrow_num<<"書的編號(hào):"<<r->book_num<<endl; r=r->ne*t; } deleter;}manager::add_book(){ books_node*L; L=newbooks_node; L=broot; while(1) { books_node*r; r=newbooks_node; r->ne*t=NULL; cout<<"輸入書名:"; cin>>r->book_name; cout<<"輸入書的"; cin>>r->book_num; r->borrow_num=0; cout<<"輸入總數(shù):"; cin>>r->total_num; r->ne*t=L->ne*t; L->ne*t=r; cout<<"addmore"(n終止,其它鍵繼續(xù))"; charsign; cin>>sign; if(sign=='n'||sign=='N') break; } broot=L; savebooks(); }manager::delet_book(){ chardeleted[15]; cout<<"輸入要?jiǎng)h除的圖書名字:"; cin>>deleted;books_node*node,*L; node=newbooks_node; L=newbooks_node; node=broot; while(node->ne*t) { if((strcmp(deleted,node->ne*t->book_name))==0)break; node=node->ne*t; } if(node->ne*t==NULL) { cout<<"sorry!Thereisnothebook!"<<endl; } else { if(node->ne*t->borrow_num==0) { node->ne*t=node->ne*t->ne*t; savebooks(); } else cout<<"對(duì)不起,暫時(shí)不能刪除,因?yàn)檫€有沒有歸還的書"<<endl; }}manager::manager(readers_node*node){ rroot=newreaders_node; rroot=node;}manager::savereaders(){ readers_node*L; L=newreaders_node; L=rroot->ne*t; ofstreamoutFile; outFile.open("c:\\Readers.dat",ios::binary); while(L) { outFile.write((char*)L,sizeof(readers_node)); L=L->ne*t; } outFile.close();}manager::add_reader(){ readers_node*L; L=newreaders_node; L=rroot; intsign=0; while(1) { readers_node*r; r=newreaders_node; r->ne*t=NULL; cout<<"輸入:"; cin>>r->reader_name; cout<<"輸入讀者的"; cin>>r->reader_no; r->reader_borrow_num=0; r->ne*t=L->ne*t; L->ne*t=r; cout<<"addmore"(n終止,其它鍵繼續(xù))"; charsign; cin>>sign; if(sign=='n'||sign=='N') break; } rroot=L; savereaders(); }manager::delet_reader(){ chardeleted[15]; cout<<"輸入要?jiǎng)h除讀者的名字:"; cin>>deleted;readers_node*node,*L; node=newreaders_node; L=newreaders_node; node=rroot; while(node->ne*t) { if((strcmp(deleted,node->ne*t->reader_name))==0)break; node=node->ne*t; } if(node->ne*t==NULL) { cout<<"sorry!Thereisnothereader!"<<endl; } else { node->ne*t=node->ne*t->ne*t; savereaders(); } }manager::search_reader(){readers_node*r; r=newreaders_node; r=rroot->ne*t; charreader[15]; cout<<"輸入要查找讀者的:"; cin>>reader; while(r) { if((strcmp(reader,r->reader_name))==0) { cout<<":"<<r->reader_name<<"編號(hào):"<<r->reader_no<<"借書總數(shù):"<<r->reader_borrow_num<<endl; for(inti=0;i<r->reader_borrow_num;i++) { cout<<"書名:"<<r->reader_borrow_book[i].borrow_books_name<<""<<"書的編號(hào):"<<r->reader_borrow_book[i].borrow_books_no; } break; } elser=r->ne*t; } if(!r)cout<<"沒有此人"<<endl;}manager::print_readers(){ readers_node*printL; printL=newreaders_node; printL=rroot->ne*t; while(printL) { cout<<"編號(hào)借書總數(shù)"<<endl; cout<<printL->reader_name<<""<<printL->reader_no<<""<<printL->reader_borrow_num<<endl; for(inti=0;i<printL->reader_borrow_num;i++) { cout<<"書名:"<<printL->reader_borrow_book[i].borrow_books_name<<""<<"書的編號(hào):"<<printL->reader_borrow_book[i].borrow_books_no; } printL=printL->ne*t; }deleteprintL;}reader::reader(readers_node*node){ (personnel)=newreaders_node; personnel=node;}reader::add_book(){ books_node*node; node=newbooks_node; node=broot->ne*t; charreturned[15]; cout<<"輸入要還書的名子:"; cin>>returned;for(inti=0;i<personnel->reader_borrow_num;i++) { if((strcmp(returned,personnel->reader_borrow_book[i].borrow_books_name))==0)break; } if(i==personnel->reader_borrow_num+1) { printf("不好意思,你沒有此書");system("pause"); }else{ while(node) { if((strcmp(node->book_name,returned)==0))break; elsenode=node->ne*t; } if(node) { personnel->reader_borrow_num--; node->borrow_num--; savebooks(); } elsecout<<"對(duì)不起,沒有你要還的書或者所還書被刪除"<<endl; }}reader::delet_book(){ if(personnel->reader_borrow_num<ma*) { books_node*node; node=newbooks_node; node=broot->ne*t; charborrowed[15]; cout<<"輸入要借書的名子:"; cin>>borrowed; while(node) { if((strcmp(node->book_name,borrowed)==0))break; elsenode=node->ne*t; } if(node&&(node->total_num-node->borrow_num)>0) { strcpy(personnel->reader_borrow_book[personnel->reader_borrow_num].borrow_books_name,node->book_name); strcpy(personnel->reader_borrow_book[personnel->reader_borrow_num++].borrow_books_no,node->book_num); node->borrow_num++; savebooks(); } elsecout<<"對(duì)不起,沒有你要借的書或者所要借的書已經(jīng)借完!"<<endl; } elsecout<<"對(duì)不起,你借書的數(shù)量已經(jīng)超過最大借數(shù)量"<<endl;}reader::print_me(){ cout<<""<<personnel->reader_name<<"編號(hào):"<<personnel->reader_no<<"借書總數(shù):"<<personnel->reader_borrow_num<<endl; for(inti=0;i<personnel->reader_borrow_num;i++) { printf("書名:%s,書的編號(hào):%s",personnel->reader_borrow_book[i].borrow_books_name,personnel->reader_borrow_book[i].borrow_books_no); }}voidPause(){ getch(); fflush(stdin);}reader::reader_borrow(){ delet_book();}reader::reader_return(){ add_book();}reader::save_readers(readers_node*L){ readers_node*root; root=newreaders_node; root=L->ne*t; ofstreamoutFile; outFile.open("c:\\Readers.dat",ios::binary); while(root) { outFile.write((char*)root,sizeof(readers_node)); root=root->ne*t; } outFile.close();}readers_node*read_readers(){ readers_node*r; r=newreaders_node; r->ne*t=NULL; intflag=0; ifstreaminFile; inFile.open("c:\\Readers.dat",ios::binary); if(inFile.is_open()==-1) { cout<<"con'topenreaders.dat"<<endl;returnr; } else { while(1) { flag++; readers_node*node; node=newreaders_node; inFile.read((char*)node,sizeof(readers_node)); if(inFile.eof())break; node->ne*t=r->ne*t; r->ne*t=node; } inFile.close(); if(flag<2) { cout<<"暫無讀者"<<endl;returnr; } else returnr; } }password(){ system("cls"); chara[]="111111",b[10],c;intn=0,k; cerr<<"\n\n\n\n\t\t\t請(qǐng)輸入密碼,你將擁有3次機(jī)會(huì):\n"; while(1) { n++; k=0; cerr<<"\t\t\t輸入密碼:"; while(1) { c=getch(); if(c==13)break; b[k]=c;k++; cerr<<"*"; } b[k]='\0'; cout<<"\n"; if(n>2) { printf("你已經(jīng)超過輸入次數(shù),系統(tǒng)將退出\n"); getch(); } if(strcmp(a,b)==0)break; elsecout<<"密碼錯(cuò)誤,請(qǐng)重新輸入\n"; cerr<<"\n"; }}voidmanager_menu_1(managerM){ intN; while(1) { cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout<<"┃圖書管圖書管理系統(tǒng)┃\n"; cout<<"┃菜單┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①增加圖書┃\n"; cout<<"┃②.刪除圖書┃\n"; cout<<"┃③.查找圖書┃\n"; cout<<"┃④.輸出所有┃\n"; cout<<"┃退出請(qǐng)按0┃\n"; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout<<"請(qǐng)輸入您的選擇(0--4):()\b\b"; cin>>N; switch(N) { case1:M.add_book();getch();break; case2: M.delet_book();getch();break; case3:M.search_book();getch();break; case4:M.print_books();getch();break; case0:return; } system("cls"); } }voidmanager_menu_2(managerM){ intN; while(1) { cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout<<"┃圖書管圖書管理系統(tǒng)┃\n"; cout<<"┃菜單┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①增加讀者┃\n"; cout<<"┃②刪除讀者┃\n"; cout<<"┃③查找讀者┃\n"; cout<<"┃④輸出所有┃\n"; cout<<"┃退出請(qǐng)按0┃\n"; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout<<"請(qǐng)輸入您的選擇(0--4):()\b\b"; cin>>N; switch(N) { case1:M.add_reader();getch();break; case2: M.delet_reader();getch();break; case3:M.search_reader();getch();break; case4:M.print_readers();getch();break; case0:return; } system("cls"); } }voidmanager_menu(readers_node*L){ system("cls"); password(); managerManager(L); intN;while(1) { cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout<<"┃圖書管圖書管理系統(tǒng)┃\n"; cout<<"┃菜單┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①圖書維護(hù)┃\n"; cout<<"┃②讀者維護(hù)┃\n"; cout<<"┃退出請(qǐng)按0┃\n"; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout<<"請(qǐng)輸入您的選擇(0--2):()\b\b"; cin>>N; switch(N) { case1:system("cls");manager_menu_1(Manager); break; case2: system("cls");manager_menu_2(Manager);break; case0:return; } system("cls"); } }reader_menu(readers_node*L){ charname[15]; cout<<"輸入用戶名:"; cin>>name; readers_node*node; node=newreaders_node; node=L->ne*t; while(node) { if((strcmp(name,node->reader_name))==0) break; else node=node->ne*t; } if(node) { readerReader(node); intN; while(1) { cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout<<"┃圖書管圖書管理系統(tǒng)┃\n"; cout<<"┃菜單┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①借書┃\n"; cout<<"┃②還書┃\n"; cout<<"┃③查找書┃\n"; cout<<"┃④.輸出所有
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 生產(chǎn)車間消防演練
- 氣象學(xué)教師勞動(dòng)合同樣本
- 無人駕駛技術(shù)董事聘用合同
- 本溪市供熱環(huán)保政策實(shí)施
- 經(jīng)濟(jì)適用房交易附加協(xié)議
- 畜牧業(yè)會(huì)計(jì)聘用合同樣本
- 停車場(chǎng)綠化工程合同
- 商務(wù)樓宇電梯安全運(yùn)行規(guī)范
- 采礦技術(shù)人員培訓(xùn)課件
- 校園文明禮貌教育活動(dòng)
- 殯葬專業(yè)職業(yè)生涯規(guī)劃與管理
- QGDW11957.2-2020國家電網(wǎng)有限公司電力建設(shè)安全工作規(guī)程 第2部分:線路
- 中國抗日戰(zhàn)爭(zhēng)史智慧樹知到課后章節(jié)答案2023年下浙江大學(xué)
- 軌道工程(第三版) 課件 高亮第6章 道岔
- 深圳市建設(shè)工程消防設(shè)計(jì)疑難解析(2023年)
- 特侖蘇廣告效果調(diào)查報(bào)告
- 機(jī)動(dòng)車檢測(cè)站事故隱患排查治理體系作業(yè)指導(dǎo)書
- 2022年12月英語四級(jí)真題試卷第1套(含答案解析)
- 《大自然的色彩》教學(xué)課件
- 湖南省衡陽市雁峰區(qū)成章實(shí)驗(yàn)學(xué)校2022-2023學(xué)年九年級(jí)上學(xué)期期中物理試卷
- 第5章 自動(dòng)駕駛技術(shù)
評(píng)論
0/150
提交評(píng)論