圖書(shū)館流通系統(tǒng)教學(xué)課件_第1頁(yè)
圖書(shū)館流通系統(tǒng)教學(xué)課件_第2頁(yè)
圖書(shū)館流通系統(tǒng)教學(xué)課件_第3頁(yè)
圖書(shū)館流通系統(tǒng)教學(xué)課件_第4頁(yè)
圖書(shū)館流通系統(tǒng)教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

圖書(shū)館流通系統(tǒng)圖書(shū)館流通系統(tǒng)圖書(shū)館流通系統(tǒng)面向?qū)ο髴?yīng)用實(shí)例講解------圖書(shū)館流通系統(tǒng)——對(duì)象與類的識(shí)別1、對(duì)象和類的識(shí)別圖書(shū)館流通系統(tǒng)內(nèi),有書(shū)、讀者、借書(shū)證、管理人員、借書(shū)還書(shū)行為等對(duì)象和事件,他們分別各是一個(gè)群體。在圖書(shū)流通系統(tǒng)內(nèi),有以下類:讀者(Reader)類圖書(shū)類(暫用Item款目表示)圖書(shū)借閱信息類(Loan)管理人員類(Manager),是借書(shū)還書(shū)行為的操作人。借書(shū)證對(duì)象只作為讀者類的一個(gè)數(shù)據(jù)成員。圖書(shū)流通管理系統(tǒng)中的類——對(duì)象與類的識(shí)別圖書(shū)流通管理系統(tǒng)的對(duì)象若定義類的對(duì)象:Itemitem;Readerreader1;Managermanager1;Loanloan1;則下圖可表示這些對(duì)象。 ——對(duì)象與類的識(shí)別定義了類和對(duì)象,它們之間就可以互相通訊,完成特定的功能了。圖5.20表示了對(duì)象之間的相互通訊關(guān)系。圖5.19圖書(shū)流通管理系統(tǒng)的對(duì)象——對(duì)象與類的識(shí)別——改進(jìn)類的封裝根據(jù)面向?qū)ο蟮乃枷?,?shù)據(jù)和對(duì)它們的操作可以封裝為類,很自然,我們可以將圖書(shū)館的信息(書(shū)、讀者、借閱情況及管理員)與業(yè)務(wù)(創(chuàng)建書(shū)目、讀者庫(kù)、管理員庫(kù)及借書(shū)、還書(shū)、查詢等操作函數(shù))封裝為圖書(shū)館類Library,分別作為圖書(shū)館類的數(shù)據(jù)成員和函數(shù)成員。而且,由于操作對(duì)象定義為類的數(shù)據(jù)成員,圖書(shū)館類的函數(shù)成員所進(jìn)行的業(yè)務(wù)操作就不再需要參數(shù),可以直接訪問(wèn)數(shù)據(jù)成員,簡(jiǎn)化了編程。Library類的成員函數(shù)中多了一個(gè)Run函數(shù),這是圖書(shū)館業(yè)務(wù)開(kāi)始執(zhí)行的入口,因此原來(lái)在main函數(shù)中執(zhí)行的操作,都要在Run中執(zhí)行,如創(chuàng)建書(shū)目、讀者信息、管理員信息等,主菜單的顯示也應(yīng)放在Run中。

圖6.18圖書(shū)館類

——改進(jìn)類的封裝voidLibrary::Run(){intchoice;charc;do{ choice=ShowMainMenu(); switch(choice){ case1:CreateBibliotheca();break;//創(chuàng)建書(shū)目

case2:CreateReader();break;//創(chuàng)建讀者信息 case3:CreateManager();break;//創(chuàng)建管理員信息 case4:do{Borrow(); cout<<"繼續(xù)嗎?Y(y)es/N(n)o\n"; cin>>c; cin.get();}while(c=='Y'||c=='y');//借書(shū)操作 break; case5:do{Return(); cout<<"繼續(xù)嗎?Y(y)es/N(n)o\n"; cin>>c; cin.get();}while(c=='Y'||c=='y');//還書(shū)操作 break; ——改進(jìn)類的封裝

case6:do{Require(); cout<<"繼續(xù)嗎?Y(y)es/N(n)o\n"; cin>>c; cin.get();}while(c=='Y'||c=='y');//查詢操作 break; case0:exit(0);break;//退出 default:cout<<"請(qǐng)重新輸入"<<endl;break; }}while(1);}main函數(shù)所要做的就是定義一個(gè)Library的對(duì)象,然后調(diào)用該對(duì)象的Run函數(shù):voidmain(){Librarylib;//定義圖書(shū)館類對(duì)象lib.Run();//調(diào)用運(yùn)行函數(shù),開(kāi)始執(zhí)行圖書(shū)館功能return;}更符合面向?qū)ο筇岢龅摹俺绦颍綄?duì)象+對(duì)象”這一思想。下面給出借書(shū)函數(shù):——改進(jìn)類的封裝voidLibrary::Borrow(){ //借書(shū)操作intcode,barcode;Itemit;Loanln;cout<<"借書(shū),請(qǐng)輸入借書(shū)證號(hào)碼:\n";cin>>code;for(inti=0;i<readerNum;i++){ //查找讀者if(code==reader[i].GetCode())break;}if(i==readerNum){cout<<"沒(méi)有此號(hào)碼,請(qǐng)重新輸入!\n";return;}cout<<"借書(shū),請(qǐng)選擇書(shū)的條碼\n";cout<<"書(shū)名\t作者\(yùn)t分類號(hào)\t條碼\n";for(intj=0;j<itemNum;j++) item[j].Show();//查找書(shū)cin>>barcode;for(j=0;j<itemNum;j++)if(item[j].GetBarCode()==barcode){//若找到書(shū)it=item[j];reader[i].AddBook(it);//添加到讀者所借書(shū)數(shù)組——改進(jìn)類的封裝for(intk=j;k<itemNum-1;k++){//從可借書(shū)中刪除item[k]=item[k+1];}itemNum--;break;}cout<<"請(qǐng)輸入管理員工號(hào):\n";cout<<"姓名\t年齡\t工號(hào)\n";for(j=0;j<managerNum;j++) cout<<manager[j].Name<<'\t'<<manager[j].Age<<'\t‘<<manager[j].Code<<endl;cin>>code;for(j=0;j<managerNum;j++){ //查找管理員if(manager[j].Code==code)break;}ln.manager=manager[j]; //添加借閱信息ln.reader=reader[i]; ln.item=it;loan[loanNum++]=ln;return;}——鏈表類應(yīng)用在圖書(shū)館類中,存儲(chǔ)在館圖書(shū)、讀者、管理員及借閱信息的數(shù)組的大小都是固定的。當(dāng)這些對(duì)象的數(shù)目超過(guò)數(shù)組大小時(shí),就必然發(fā)生溢出,通??偸恰按箝_(kāi)小用”??紤]采用動(dòng)態(tài)數(shù)組或鏈表結(jié)構(gòu)來(lái)存儲(chǔ)對(duì)象。

首先,定義雙向環(huán)形鏈表類模板template<typenameT>classDblList; //鏈表類模板聲明template<typenameT>classDblNode{//結(jié)點(diǎn)類模板聲明TInfo; //數(shù)據(jù)域DblNode<T>*llink,*rlink;//前驅(qū)(左鏈)、后繼(右鏈)指針public:DblNode(Tdata); //一般結(jié)點(diǎn)DblNode(); //頭結(jié)點(diǎn)TGetInfo(){returnInfo;};friendclassDblList<T>; //將鏈表類聲明為友元

friendclassLibrary; //將圖書(shū)館類聲明為友元};——鏈表類應(yīng)用template<typenameT>classDblList{ //鏈表類模板定義 DblNode<T>*head,*current;public: DblList(); ~DblList(); voidInsert(constT&data); DblNode<T>*Remove(DblNode<T>*p); voidPrint(); intLength(); //計(jì)算鏈表長(zhǎng)度 DblNode<T>*Find(Tdata);//搜索數(shù)據(jù)與定值相同的結(jié)點(diǎn)

DblNode<T>*Find(intdata);//按某個(gè)關(guān)鍵字搜索 voidMakeEmpty(); //清空鏈表 voidShowList(); //顯示鏈表所有元素};新增加按照關(guān)鍵字搜索的函數(shù):template<typenameT>DblNode<T>*DblList<T>::Find(intdata){ current=head->rlink; inttemp=current->Info.GetCode(); while(current!=head&&temp!=data){ current=current->rlink; temp=current->Info.GetCode(); } if(current==head)current=NULL; returncurrent;}圖書(shū)館類中記錄在館圖書(shū)、讀者、管理員及借閱信息的數(shù)組改為鏈表類,參見(jiàn)圖7.27。classLibrary{ //封裝圖書(shū)館流通DblList<Item>item;//記錄書(shū)目的鏈表

DblList<Reader>reader;//記錄讀者的鏈表DblList<Loan>loan;//記錄借閱信息的鏈表DblList<Manager>manager;//記錄管理員的鏈表——鏈表類應(yīng)用圖7.27圖書(shū)館類intitemNum;//記錄在館圖書(shū)數(shù)目intreaderNum;//記錄讀者數(shù)目intloanNum; //記錄借閱信息數(shù)目intmanagerNum;//記錄管理員數(shù)目public:Library();//構(gòu)造函數(shù)voidRun();//運(yùn)行圖書(shū)館業(yè)務(wù)函數(shù)voidCreateBibliotheca();//創(chuàng)建書(shū)目voidCreateReader();//創(chuàng)建讀者voidCreateManager();//創(chuàng)建管理員intShowMainMenu();//顯示主菜單voidBorrow();//借書(shū)操作voidReturn();//還書(shū)操作voidRequire();//查詢操作};——鏈表類應(yīng)用修改讀者、在館圖書(shū)、管理員及借閱信息類。首先,讀者類Reader原來(lái)用數(shù)組記錄所借的書(shū),在此用一個(gè)Item類的指針代替,用單鏈表記錄所借的書(shū),該指針是單鏈表頭指針。對(duì)讀者進(jìn)行借書(shū)或還書(shū)操作是通過(guò)對(duì)單鏈表插入或刪除結(jié)點(diǎn)實(shí)現(xiàn)。這個(gè)單鏈表只是附在讀者類中,不是一個(gè)規(guī)范的單鏈表類。

圖書(shū)類Item的條碼是識(shí)別圖書(shū)的關(guān)鍵字,原來(lái)取名BarCode,現(xiàn)在為了與鏈表模板統(tǒng)一,將其改為Code,并增加GetCode函數(shù)以訪問(wèn)其條碼。為了在Reader類所借書(shū)單鏈表中操作,為Item類增加指向Item類的指針Next。

管理員類ManagerGetCode函數(shù)訪問(wèn)其編號(hào),增加Show函數(shù)顯示其基本信息。

借閱信息類Loan除了增加GetCode和Show函數(shù),還增加一個(gè)long類型的數(shù)據(jù)成員Code,定義為所借書(shū)的條碼。修改后的各類可表示為圖7.28,圖中斜體字表示與圖5.18的不同之處。

——鏈表類應(yīng)用圖書(shū)流通管理系統(tǒng)中的類借書(shū)操作:voidLibrary::Borrow(){intcode,barcode;Loanln; DblNode<Item>*ti=NULL;//定義數(shù)據(jù)為Item類型的結(jié)點(diǎn)指針DblNode<Manager>*tm=NULL;//定義數(shù)據(jù)為Manager類型的結(jié)點(diǎn)指針DblNode<Reader>*tr=NULL;//定義數(shù)據(jù)為Reader類型的結(jié)點(diǎn)指針cout<<"借書(shū),請(qǐng)輸入借書(shū)證號(hào):\n";cin>>code;tr=reader.Find(code);//查找讀者if(tr){cout<<"借書(shū),請(qǐng)選擇書(shū)的條碼\n";

cout<<"書(shū)名\t作者\(yùn)t分類號(hào)\t條碼\n";item.ShowList();//顯示可借閱書(shū)cin>>barcode;ti=item.Find(barcode);//查找管理員if(ti){cout<<"請(qǐng)輸入管理員工號(hào):\n";

cout<<"姓名\t年齡\t工號(hào)\n";manager.ShowList();//顯示所有管理員信息cin>>code;——鏈表類應(yīng)用——鏈表類應(yīng)用

tm=manager.Find(code);//查找書(shū)if(tm){tr->Info.AddBook(ti->GetInfo());//添加到讀者所借書(shū)數(shù)組

item.Remove(ti);//從可借書(shū)中刪除itemNum--;ln.reader=tr->GetInfo();//添加借閱信息ln.item=ti->GetInfo();ln.manager=tm->GetInfo();ln.Code=ti->GetInfo().GetCode();loan.Insert(ln);//添加到借閱信息鏈表

}

else{cout<<"沒(méi)有此工號(hào),請(qǐng)重新輸入!";return;}//工號(hào)錯(cuò)

}

else{cout<<"沒(méi)有此條碼,請(qǐng)重新輸入!";return;}//條碼錯(cuò)}else{cout<<"沒(méi)有此借書(shū)證,請(qǐng)重新輸入!";return;}//借書(shū)證號(hào)錯(cuò)return;}——鏈表類應(yīng)用采用面向?qū)ο蟮南到y(tǒng)分析與設(shè)計(jì)方法,其優(yōu)勢(shì)從編程實(shí)踐中可以體現(xiàn)出來(lái)。對(duì)程序局部所作的改動(dòng),只要其接口(函數(shù)類型和參數(shù))不變,就不會(huì)影響程序的其它部分。如讀者類的所借書(shū),原來(lái)用數(shù)組存儲(chǔ),現(xiàn)在改為單鏈表存儲(chǔ),只要修改借書(shū)(AddBook)和還書(shū)(DelBook)的成員函數(shù)代碼,改數(shù)組操作為鏈表操作,而圖書(shū)館類中的借書(shū)業(yè)務(wù)函數(shù)Borrow不需作任何改動(dòng),這樣可大大提高代碼通用性,最大限度地減少程序修改所帶來(lái)的變動(dòng)。

使用類模板并不需要為每個(gè)類定義鏈表類,提高了代碼的通用性,簡(jiǎn)化了編程?!^承與多態(tài)的應(yīng)用

本節(jié)為圖書(shū)館流通業(yè)務(wù)增加雜志借閱功能。雜志是圖書(shū)的一種,對(duì)于現(xiàn)刊,是以期為借閱單位,對(duì)于過(guò)刊以卷(Volume)為借閱單位,為簡(jiǎn)化問(wèn)題,我們只處理過(guò)刊借閱,即以卷為借閱單位,每卷分配一個(gè)條碼。與書(shū)籍的不同之處在于,雜志沒(méi)有單一的作者,只以刊名和卷號(hào)借閱。書(shū)籍和雜志圖書(shū)都有書(shū)(雜志)名、條碼等共性,都有設(shè)置條碼、讀取條碼及顯示等接口,提取二者的共性和公共接口,定義一個(gè)圖書(shū)類Book,作為基類。

派生出Item書(shū)籍和Magazine雜志兩個(gè)類。Item有作者、分類號(hào)等特性,Magazine有卷號(hào)、語(yǔ)言等特性,分別定義相應(yīng)的接口,雜志的語(yǔ)言用一個(gè)枚舉類型LANG表示。基類Book中還增加一個(gè)整型變量Type,目的在于區(qū)別派生類是Item還是Magazine。派生類應(yīng)對(duì)顯示虛函數(shù)Show()進(jìn)行重定義顯示自身的特殊屬性。

——繼承與多態(tài)的應(yīng)用classBook{ //圖書(shū)基類protected: charTitle[40]; //書(shū)名 longCode; //條碼 intType; //0表示書(shū)本,1表示雜志

Book*Next;

//為構(gòu)造讀者所借書(shū)鏈表定義的指針public: Book(); Book(char*title,longcode); voidSetCode(longcode){Code=code; } voidSetTitle(char*tl){strcpy(Title,tl);} voidSetType(booltype){Type=type;} boolGetType(){returnType; } longGetCode(){returnCode;} virtualvoidShow();};//顯示函數(shù)定義為虛函數(shù)——繼承與多態(tài)的應(yīng)用classItem:publicBook{ //書(shū)籍類charAuthor[20]; //作者charIndexCode[10]; //分類號(hào)public:Item(); //缺省構(gòu)造函數(shù)Item(char*author,char*title,char*index,intcode);//構(gòu)造函數(shù)Item(Item&); //拷貝構(gòu)造函數(shù)voidSetAuthor(char*);voidSetIndexCode(char*);voidShow(); //重定義顯示函數(shù)friendclassReader;};——繼承與多態(tài)的應(yīng)用classMagazine:publicBook{ //雜志類intVolume;enumLANG{CHINESE=1,ENGLISH}Lang; //語(yǔ)言種類public:Magazine():Book(){Volume=0;Lang=CHINESE;Type=1;}Magazine(char*title,intvol,LANGlang,intcode);//構(gòu)造函數(shù)Magazine(Magazine&);//拷貝構(gòu)造函數(shù)voidSetVolume(intvol){Volume=vol;}voidSetLang(intlang){Lang=(LANG)lang;}voidShow(); //重定義顯示函數(shù)friendclassReader;};讀者類要存儲(chǔ)所借書(shū)?,F(xiàn)在圖書(shū)類一個(gè)派生類體系,它們的公共基類Book提供了統(tǒng)一接口??啥x一個(gè)單鏈表來(lái)同時(shí)存儲(chǔ)讀者所借書(shū)籍Item和雜志Magazine。Book類有一個(gè)指向Book類的指針Next,用來(lái)構(gòu)成鏈表?!^承與多態(tài)的應(yīng)用讀者類Reader的AddBook函數(shù)完成所借書(shū)單鏈表的構(gòu)造,現(xiàn)在由于借閱對(duì)象有書(shū)籍Item和雜志Magazine兩種,需要重載這個(gè)函數(shù)實(shí)現(xiàn)兩種對(duì)象的添加。voidReader::AddBook(Itemit){//添加書(shū)籍Item*p; p=newItem; //創(chuàng)建一個(gè)新結(jié)點(diǎn)if(p){*p=it;p->Next=; //插入表頭,items為鏈表頭指針 items=p;Counter++;}}voidReader::AddBook(Magazineit){//添加雜志Magazine*p; p=newMagazine;//創(chuàng)建一個(gè)新結(jié)點(diǎn)if(p){ *p=it; p->Next=items; //插入表頭 items=p;Counter++;}}——繼承與多態(tài)的應(yīng)用

在圖書(shū)館類中增加存儲(chǔ)雜志的雙鏈表對(duì)象,及對(duì)雜志計(jì)數(shù)的數(shù)據(jù)成員:classLibrary{ …DblList<Magazine>mag; //存儲(chǔ)在館雜志的鏈表intmagNum; //存儲(chǔ)在館雜志數(shù)目…};借閱信息類Loan由于借閱對(duì)象發(fā)生變化,增加一個(gè)整型數(shù)據(jù)成員Type,判斷借出的是雜志還是書(shū)籍。圖書(shū)館的業(yè)務(wù)操作函數(shù)有較大變化,主要體現(xiàn)在借書(shū)和還書(shū)兩個(gè)操作,請(qǐng)同學(xué)閱讀書(shū)上相關(guān)內(nèi)容。修改后的圖書(shū)館業(yè)務(wù)類及各對(duì)象類標(biāo)記如圖8.13示。查詢功能也可以通過(guò)修改Require函數(shù)加強(qiáng)。如果要增加其它借閱對(duì)象,則可以從Book派生出其它類,并為L(zhǎng)ibrary添加數(shù)據(jù)成員進(jìn)行管理,并對(duì)圖書(shū)館業(yè)務(wù)操作函數(shù)進(jìn)行修改。圖8.13圖書(shū)館類和圖書(shū)類派生關(guān)系——輸出/輸入流的應(yīng)用本節(jié)中,我們?yōu)槌绦蛱砑颖4婀δ?,利用C++的流類,為圖書(shū)館流通管理系統(tǒng)中的各種類重載提取和插入運(yùn)算符,通過(guò)文件流將數(shù)據(jù)保存到磁盤文件。首先要為各對(duì)象類重載提取和插入運(yùn)算符,它們都重載為這些類的友元函數(shù)。請(qǐng)先在VC++平臺(tái)上運(yùn)行step5。各函數(shù)的定義如下:ostream&operator<<(ostream&os,Item&it){//重載款目類插入運(yùn)算符os<<it.Title<<''<<it.Author<<''<<it.IndexCode<<''<<it.Code<<'\n';returnos;}istream&operator>>(istream&is,Item&it){//重載款目類提取運(yùn)算符is>>it.Title>>it.Author>>it.IndexCode>>it.Code;returnis;}ostream&operator<<(ostream&os,Magazine&mg){//重載雜志類插入符

os<<mg.Title<<''<<mg.Volume<<''<<Magazine::LANG(mg.Lang)<<''<<mg.Code<<'\n';returnos;}istream&operator>>(istream&is,Magazine&mg){//重載雜志類提取符intj;is>>mg.Title>>mg.Volume>>j;mg.Lang=Magazine::LANG(j);//讀入的整數(shù)轉(zhuǎn)換為枚舉類型is>>mg.Code;returnis;}——輸出/輸入流的應(yīng)用ostream&operator<<(ostream&os,Loan&ln){

//重載借閱信息類插入符os<<ln.Type<<''<<ln.Code<<''<<ln.reader<<'';if(ln.Type)os<<ln.mag<<'';//雜志elseos<<ln.item<<'';//書(shū)本os<<ln.manager<<'\n';returnos;}istream&operator>>(istream&is,Loan&ln){//重載借閱信息類提取運(yùn)算符inti;is>>i>>ln.Code>>ln.reader;ln.Type=(bool)i;//將讀入的整數(shù)轉(zhuǎn)換為bool型if(ln.Type)is>>ln.mag; //雜志elseis>>ln.item; //書(shū)本is>>ln.manager;returnis;}ostream&operator<<(ostream&os,Manager&mgr){//重載管理員插入符os<<mgr.Name<<''<<mgr.Age<<''<<mgr.Code<<'\n';returnos;}istream&operator>>(istream&is,Manager&mgr){//重載管理員類提取符is>>mgr.Name>>mgr.Age>>mgr.Code;returnis;}——輸出/輸入流的應(yīng)用以上類的情況都很簡(jiǎn)單,直接輸出輸入各數(shù)據(jù)項(xiàng)就可以了。重點(diǎn)是讀者類:

istream&operator>>(istream&is,Reader&rd){

//重載讀者類提取運(yùn)算符,重建對(duì)象Itemit;Magazinemg; inttype,count;is>>rd.Name>>rd.Position>>rd.Age>>rd.Code>>count;

//A讀入讀者基本信息for(inti=0;i<count;i++){//讀入讀者所借書(shū)is>>type;//先讀入所借書(shū)的類別(書(shū)本or雜志)if(type){//如果是雜志is>>mg;//讀入一個(gè)雜志信息rd.AddBook(mg);}//將雜志添加到讀者所借書(shū)else{//書(shū)籍is>>it;//讀入一個(gè)書(shū)籍信息rd.AddBook(it);}}//將書(shū)籍添加到讀者所借書(shū)

returnis;}——輸出/輸入流的應(yīng)用ostream&operator<<(ostream&os,Reader&rd){

//重載讀者類插入符,寫(xiě)入文件os<<rd.Name<<''<<rd.Position<<''<<rd.Age<<''<<rd.Code<<'‘<<rd.Counter<<'\n';//輸出讀者基本信息Book*p=rd.items;while(p){//輸出讀者所借書(shū)os<<p->GetType()<<'';//先輸出所借書(shū)的類別(書(shū)本or雜志)if(p->GetType())os<<*(Magazine*)p;

//基類指針轉(zhuǎn)換為派生類指針輸出對(duì)象elseos<<*(Item*)p;//將基類指針轉(zhuǎn)換為派生類指針輸出對(duì)象p=p->Next;}returnos;}讀者類除了輸出、輸入基本信息,還有所借書(shū)鏈表,并且鏈表的長(zhǎng)度對(duì)不同對(duì)象是不同的。當(dāng)從文件讀入數(shù)據(jù)重構(gòu)對(duì)象時(shí),要先獲得讀者所借書(shū)總數(shù)(rd.Counter)。并且先將這個(gè)數(shù)目讀入局部變量count中,控制讀入數(shù)據(jù)的數(shù)量,而重構(gòu)的讀者對(duì)象的所借書(shū)總數(shù)(rd.Counter)由構(gòu)造函數(shù)賦值0,每次讀入一項(xiàng)數(shù)據(jù),由AddBook插入讀者對(duì)象的所借書(shū)鏈表,而讀者對(duì)象的所借書(shū)總數(shù)(rd.Counter)由AddBook函數(shù)自動(dòng)增加。

——輸出/輸入流的應(yīng)用下面給雙向鏈表模板類重載提取和插入運(yùn)算符。template<typenameT>ostream&operator<<(ostream&os,DblList<typenameT>&dlist){//重載插入運(yùn)算符,鏈表存入文件DblNode<T>*tempP;intlen=dlist.Length();os<<len<<'';//取得鏈表長(zhǎng)度并輸出tempP=dlist.head->rlink;while(tempP!=dlist.head){//循環(huán)輸出鏈表各結(jié)點(diǎn)數(shù)據(jù)域os<<tempP->Info;//這里使用前面重載的五種“<<”之一,對(duì)應(yīng)類型TtempP=tempP->rlink;}returnos;}template<typenameT>istream&operator>>(istream&is,DblList<typenameT>&dlist){//重載提取運(yùn)算符,由文件重構(gòu)鏈表intlen;Ttt;//結(jié)點(diǎn)數(shù)據(jù)域變量is>>len;//先讀入鏈表長(zhǎng)度f(wàn)or(inti=0;i<len;i++){is>>tt;//讀入結(jié)點(diǎn)數(shù)據(jù),這里使用前面重載的五種“>>”之一,對(duì)應(yīng)類型Tdlist.Insert(tt);}//插入鏈表,即建立一個(gè)新結(jié)點(diǎn)returnis;}圖書(shū)館類對(duì)象是整個(gè)流體系運(yùn)行的源頭,因此為圖書(shū)館類添加一組輸入文件流對(duì)象,一組輸出文件流對(duì)象,添加保存信息和讀入信息的函數(shù)。classLibrary{//封裝圖書(shū)館流通業(yè)務(wù)的類 … //其它數(shù)據(jù)成員ofstreamitemFileOut;//文件流對(duì)象,保存可借閱書(shū)籍?dāng)?shù)據(jù)ifstreamitemFileIn;//文件流對(duì)象,讀入可借閱書(shū)籍?dāng)?shù)據(jù)ofstreammagFileOut; //文件流對(duì)象,保存可借閱雜志數(shù)據(jù)ifstreammagFileIn;//文件流對(duì)象,讀入可借閱雜志數(shù)據(jù)ofstreamreaderFileOut;//文件流對(duì)象,保存讀者數(shù)據(jù)ifstreamreaderFileIn;//文件流對(duì)象,讀入讀者數(shù)據(jù)ofstreammanagerFileOut;//文件流對(duì)象,保存管理員數(shù)據(jù)ifstreammanagerFileIn;//文件流對(duì)象,讀入管理員數(shù)據(jù)ofstreamloanFileOut;//文件流對(duì)象,保存借閱信息數(shù)據(jù)ifstreamloanFileIn;//文件流對(duì)象,讀入借閱信息數(shù)據(jù)public:… //其它函數(shù)成員voidSaveitem();voidOpenitem();};//在修改款目后分別保存和讀入分類信息

voidSaveInfo();//保存圖書(shū)館信息

voi

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論