版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
-.z.1設計任務1.1設計目的運用所學知識,完成圖書館管理系統,通過實踐加強對所學知識的理解和鞏固1.2設計容建立圖書館管理系統,用戶分為圖書管理人員,讀者。管理人員可以增加刪除查看圖書、讀者。讀者只能查看自身信息,和借還書1.3設計指標或者要求管理人員可以訪問任意圖書和讀者,而讀者只能借還圖書館存在的圖書和查看自己的信息。2設計過程分析:由于管理系統用戶有圖書管理員和讀者,但兩者的權限不同,管理員有權訪問所有圖書信息和管理員信息,而讀者只能訪問所有圖書信息和自身的信息。所以他們的相同點:都能訪問所有圖書信息不同點:管理員能訪問所有讀者信息而管理員只能訪問自身信息而不能訪問其它讀者信息;故此設計了三個類程序包含三個類:圖書類(books),管理員類(manager),讀者類reader,books類為抽象類,manager,和reader類為books類的派生類。為了能讓管理員和讀者訪問所有圖書信息,所有都繼承了books類;而為了分出兩者的權限的不同,所以把所有讀者的信息做為一個鏈表作為管理員的一個私有成員,而讀者卻只能放一個自身節點作為讀者的私有成員,然后分別設計各個類的成員函數。2.1程序功能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*);};2.2程序流程圖開始菜單開始菜單管理員菜單讀者菜單添刪加除圖圖書書添刪加除讀讀者者借還查查看看所自有身圖信書書書息讀者管理員圖書維護讀者維護后退后退后退后退后退3軟件運行或者測試結果(1)管理員身份登錄:(2)讀者身份登錄:4軟件設計過程中遇到的問題以及解決辦法由于編寫前期做了大量的設計工作,在編寫過程中基本沒有遇到難解決的問題提,倒是在設計類時有些茫然,經過反復斟酌還是做了一些取舍,比如把讀取讀者文件放在了類的外面等。。5總結通過本次課程設計學到了很多東西,對于c++對象的含義有了進一步的認識,從而對類的封裝和設計有了一種新的認識,不只是停留在表面,為以后的學習積累了經驗,設計不比編寫容易,類設計好是整個程序寫好的前提,只有一個好的規劃才能寫出好的程序。不過也通過本次發現了自己的不足之處。總是:本次課程設計受益匪淺,動手能力大大增強;附錄(程序源代碼)*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<<"暫時沒有圖書數據"<<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<<"書的編號:"<<r->book_num<<endl;break; } r=r->ne*t; } if(r==NULL)cout<<"對不起,沒有此書"<<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<<"書的編號:"<<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<<"輸入總數:"; cin>>r->total_num; r->ne*t=L->ne*t; L->ne*t=r; cout<<"addmore"(n終止,其它鍵繼續)"; charsign; cin>>sign; if(sign=='n'||sign=='N') break; } broot=L; savebooks(); }manager::delet_book(){ chardeleted[15]; cout<<"輸入要刪除的圖書名字:"; 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<<"對不起,暫時不能刪除,因為還有沒有歸還的書"<<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終止,其它鍵繼續)"; charsign; cin>>sign; if(sign=='n'||sign=='N') break; } rroot=L; savereaders(); }manager::delet_reader(){ chardeleted[15]; cout<<"輸入要刪除讀者的名字:"; 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<<"編號:"<<r->reader_no<<"借書總數:"<<r->reader_borrow_num<<endl; for(inti=0;i<r->reader_borrow_num;i++) { cout<<"書名:"<<r->reader_borrow_book[i].borrow_books_name<<""<<"書的編號:"<<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<<"編號借書總數"<<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<<""<<"書的編號:"<<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<<"對不起,沒有你要還的書或者所還書被刪除"<<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<<"對不起,沒有你要借的書或者所要借的書已經借完!"<<endl; } elsecout<<"對不起,你借書的數量已經超過最大借數量"<<endl;}reader::print_me(){ cout<<""<<personnel->reader_name<<"編號:"<<personnel->reader_no<<"借書總數:"<<personnel->reader_borrow_num<<endl; for(inti=0;i<personnel->reader_borrow_num;i++) { printf("書名:%s,書的編號:%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請輸入密碼,你將擁有3次機會:\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("你已經超過輸入次數,系統將退出\n"); getch(); } if(strcmp(a,b)==0)break; elsecout<<"密碼錯誤,請重新輸入\n"; cerr<<"\n"; }}voidmanager_menu_1(managerM){ intN; while(1) { cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout<<"┃圖書管圖書管理系統┃\n"; cout<<"┃菜單┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①增加圖書┃\n"; cout<<"┃②.刪除圖書┃\n"; cout<<"┃③.查找圖書┃\n"; cout<<"┃④.輸出所有┃\n"; cout<<"┃退出請按0┃\n"; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout<<"請輸入您的選擇(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<<"┃圖書管圖書管理系統┃\n"; cout<<"┃菜單┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①增加讀者┃\n"; cout<<"┃②刪除讀者┃\n"; cout<<"┃③查找讀者┃\n"; cout<<"┃④輸出所有┃\n"; cout<<"┃退出請按0┃\n"; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout<<"請輸入您的選擇(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<<"┃圖書管圖書管理系統┃\n"; cout<<"┃菜單┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①圖書維護┃\n"; cout<<"┃②讀者維護┃\n"; cout<<"┃退出請按0┃\n"; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout<<"請輸入您的選擇(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<<"┃圖書管圖書管理系統┃\n"; cout<<"┃菜單┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①借書┃\n"; cout<<"┃②還書┃\n"; cout<<"┃③查找書┃\n"; cout<<"┃④.輸出所有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026Fast芯片組行業投融資機會與風險評估報告
- 公司內控管理專項試題及答案展示
- 2026中國智能汽車配件行業市場發展分析及投資開發展望研究報告
- 2026-高中道德與法治公共利益題目及答案
- 微光成像技術練習題及答案展示
- 2026北京中醫藥大學第三附屬醫院招聘精誠博士后兼職合作導師筆試題庫附答案詳解【鞏固】
- 2026河北大學建筑工程學院公開招聘教學助理1名模擬試卷(滿分必刷)附答案詳解
- 甘肅國投集團招聘筆試內容及題型分布情況
- 2026四川涼州普格縣就業創業促進中心見習基地招收青年就業見習23人考前沖刺密卷審定版附答案詳解
- 2026陜西西咸新區第二初級中學招聘10人考前沖刺試卷及完整答案詳解一套
- 中醫診斷學舌診介紹
- GB/T 4706.7-2024家用和類似用途電器的安全第7部分:真空吸塵器和吸水式清潔器具的特殊要求
- 農業機械租賃模式創新研究
- 抗菌藥物培訓試題含答案
- 史上最全花鰱養殖技術
- 三年級上冊語文作業設計:10《在牛肚子里旅行》課時練(部編版含答案)
- 光纖信道眼圖觀察講解
- XXX黨支部2023年“黨建引領+提質增效”行動實施方案
- JJF 1255-2010厚度表校準規范
- 《西方文明史》詞匯表
- GB/T 4604.1-2012滾動軸承游隙第1部分:向心軸承的徑向游隙
評論
0/150
提交評論