C++課程設(shè)計(jì)報(bào)告 模板實(shí)現(xiàn)排行榜管理_第1頁
C++課程設(shè)計(jì)報(bào)告 模板實(shí)現(xiàn)排行榜管理_第2頁
C++課程設(shè)計(jì)報(bào)告 模板實(shí)現(xiàn)排行榜管理_第3頁
C++課程設(shè)計(jì)報(bào)告 模板實(shí)現(xiàn)排行榜管理_第4頁
C++課程設(shè)計(jì)報(bào)告 模板實(shí)現(xiàn)排行榜管理_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

VC++課程設(shè)計(jì)報(bào)告題目:模板實(shí)現(xiàn)排行榜管理等級:A級院系:材料科學(xué)與工程系班級:xxxxxx班姓名:xxx學(xué)號:xxxxxxxxxx任課教師:xxxx時(shí)間:2010年3月得分:教師點(diǎn)評:目錄1.題目…………………(1)2.功能簡介……………………(1)3.課程設(shè)計(jì)要求………………(1)4.程序設(shè)計(jì)思想………………(1)5.設(shè)計(jì)過程與設(shè)計(jì)亮點(diǎn)……(3-4)6.部分關(guān)鍵程序代碼注解…………………(4-9)8.注意點(diǎn)……………………(3)9.附圖……………………(4)10.部分關(guān)鍵程序代碼注解…………………(4)11.個(gè)人心得體會(huì)……………(8)功能簡介模板形式的二叉樹操作的實(shí)現(xiàn)。定義了二叉樹的一些基本功能:插入、查找、刪除、刪除子樹、前序、中序及后序遍歷等,在示范例子中構(gòu)造了整型數(shù)據(jù)形式的二叉樹。課程設(shè)計(jì)要求(1)將模板類型用排行榜數(shù)據(jù)替代,構(gòu)建一棵二叉樹,表示游戲挑戰(zhàn)大賽積分排行榜;當(dāng)出現(xiàn)一個(gè)挑戰(zhàn)者,其成績能加到數(shù)據(jù)庫中;也可將棄權(quán)者的記錄從數(shù)據(jù)庫中刪除。(2)能顯示分?jǐn)?shù)的排行榜,能根據(jù)姓名的順序顯示分?jǐn)?shù)。(3)統(tǒng)計(jì)平均得分。(4)根據(jù)人名查找分?jǐn)?shù)。(5)根據(jù)分?jǐn)?shù)查找人名。(6)修改main函數(shù),可以從鍵盤輸入數(shù)據(jù),要求界面清楚,并可循環(huán)操作。程序設(shè)計(jì)思想1)類的結(jié)構(gòu)原程序已詳細(xì)定義了二叉樹的各種基本的操作,在設(shè)計(jì)時(shí)不必改變原程序的成員函數(shù),關(guān)鍵是要改變原程序的結(jié)點(diǎn)類中的數(shù)據(jù)類型,將模板類型變換成我們需要的排行榜的數(shù)據(jù)類型。由于課程設(shè)計(jì)中要求能分別根據(jù)姓名和成績排序,對于一個(gè)二叉樹對象來說,根據(jù)兩種不同類型的數(shù)據(jù)排序是很難實(shí)現(xiàn)的,而為了利用已編寫好的模板類的成員函數(shù),最好不要對已有的二叉樹的成員函數(shù)進(jìn)行變動(dòng),所以這里我們定義了兩個(gè)二叉樹對象,分別根據(jù)姓名和成績的順序進(jìn)行構(gòu)造,相應(yīng)地定義了兩個(gè)不同名的數(shù)據(jù)類,分別重載二叉樹類中成員函數(shù)所需的運(yùn)算符,這樣,用相同的類定義就可以實(shí)現(xiàn)不同的排序功能。2)main函數(shù)結(jié)構(gòu)main函數(shù)采用菜單選項(xiàng)的形式,具體的菜單選項(xiàng)參考如下:主菜單1.插入結(jié)點(diǎn)2.根據(jù)姓名刪除結(jié)點(diǎn)3.根據(jù)姓名查找結(jié)點(diǎn)4.根據(jù)姓名排序輸出5.根據(jù)成績刪除結(jié)點(diǎn)6.根據(jù)成績查找結(jié)點(diǎn)7.根據(jù)成績排序輸出0.退出各項(xiàng)操作應(yīng)能循環(huán)執(zhí)行。為使用戶界面更加友好,避免輸人數(shù)據(jù)類型錯(cuò)誤導(dǎo)致的程序無效循環(huán),在輸人數(shù)據(jù)時(shí)進(jìn)行判斷,對非法輸入予以提示,具體參見樣例程序說明第三部分。3)進(jìn)一步完善程序?yàn)榱耸钩绦蚋訉?shí)用,可以在程序中添加文件的輸入輸出功能,這樣,就可以保存排行榜數(shù)據(jù)并將不同的排行榜文件讀人程序進(jìn)行管理操作。設(shè)計(jì)過程與設(shè)計(jì)亮點(diǎn)拿到這次程序設(shè)計(jì)的要求和源程序代碼之后,我首先仔細(xì)閱讀了對程序功能的要求和程序設(shè)計(jì)的主要思想,認(rèn)真分析了已給出的關(guān)鍵源代碼,找出其中所缺少的部分,大體構(gòu)思出了設(shè)計(jì)和添補(bǔ)的方案。書中的模板中缺少主界面函數(shù),這使程序缺少實(shí)用性,最終界面不清晰,會(huì)嚴(yán)重影響用戶的使用。因此,我在其中添加了下面的這個(gè)函數(shù)。template<classT>voidTREESTRUCT<T>::xuanze()//*******顯示菜單,有用戶選擇要執(zhí)行的功能{cout<<endl;cout<<"##########排行榜管理系統(tǒng)##########"<<endl;cout<<"請選擇執(zhí)行功能"<<endl;cout<<"1:加入數(shù)據(jù)"<<endl;cout<<"2:刪除數(shù)據(jù)"<<endl;cout<<"3:統(tǒng)計(jì)平均分"<<endl;cout<<"4:用人名查分?jǐn)?shù)"<<endl;cout<<"5:用分?jǐn)?shù)查人名"<<endl;cout<<"6:由低到高輸出排行榜"<<endl;cout<<"7:由高到底輸出排行榜"<<endl;cout<<"0:退出"<<endl;cout<<endl;}2)設(shè)計(jì)要求可以計(jì)算并輸出平均分,但在書上給出的參考程序中,缺少可以實(shí)現(xiàn)這一功能的函數(shù)。因此,我增加下面的這個(gè)函數(shù)。voidshowAverage()//**統(tǒng)計(jì)平均分函數(shù){if(root!=NULL){doublex=jisuanAverage(root);showAverage(x);return;}else{cout<<"沒有數(shù)據(jù)以供求平均分!請先加入數(shù)據(jù)!"<<endl;cout<<"返回主菜單"<<endl;xuanze();return;}}doublejisuanAverage(TreeNode<T>*);//*****計(jì)算平均分函數(shù)voidshowAverage(double);//******顯示平均分3)“cout<<"沒有數(shù)據(jù)!請先加入數(shù)據(jù)!"<<endl;”語句的加入使程序更具可讀性,更加人性化。template<classT>classTREESTRUCT//**建立一棵二叉樹{public:TREESTRUCT(){root=NULL;cout<<"沒有數(shù)據(jù)!請先加入數(shù)據(jù)!"<<endl;}4)書中給出的程序?qū)τ诙鏄渲械臄?shù)據(jù)只能從低到高輸出,而在排序方面也顯得很復(fù)雜,程序也很繁瑣。因此,我沒有使用書中給出的參考程序,而是,重新定義了2個(gè)函數(shù)來實(shí)現(xiàn)排序的功能。voidshowNodesddg()//******低到高遍歷整棵樹voidshowNodesgdd()//******高到低遍歷整棵樹5)在書中給出了2個(gè)參考的排序類,分別是根據(jù)姓名和分?jǐn)?shù)進(jìn)行排序。但我個(gè)人認(rèn)為這兩個(gè)程序分開寫過于繁瑣。而且這兩個(gè)類可以合并到插入數(shù)據(jù)函數(shù)中。voidTREESTRUCT<T>::insertNode()這樣做簡化了程序,更加方便、可行。6)書中的函數(shù)并沒有提示語句,不利于用戶的操作。所以,我在程序中加入了一些提示語句,方便用戶的使用。部分關(guān)鍵程序代碼注解1)template<classT>//******刪除數(shù)據(jù)函數(shù)voidTREESTRUCT<T>::remove(){intx=0,y=0;Tdata;charname[20];if(root==NULL){cout<<"沒有數(shù)據(jù)以供刪除!請先加入數(shù)據(jù),返回菜單!"<<endl;xuanze();return;}else{cout<<"請輸入要?jiǎng)h除的數(shù)據(jù)的姓名:";cin>>name;cout<<"請輸入要?jiǎng)h除的數(shù)據(jù)的成績:";cin>>data;cout<<"您要?jiǎng)h除的數(shù)據(jù)是:"<<endl;cout<<"姓名為:"<<name<<"成績?yōu)?"<<data<<endl;cout<<"請確認(rèn)是否刪除:"<<endl;do{cout<<"1:是2:不是"<<endl;cin>>y;if(y==1)//***用戶確認(rèn)刪除操作{x=deleteNode(data,name,root,x=0);if(x==0)//*******刪除失敗cout<<"未找到符合要求的信息!刪除失??!選擇以下操作:"<<endl;elseif(x==1)//**刪除成功cout<<"刪除成功!選擇以下操作:"<<endl;break;}elseif(y==2)//*****用戶取消刪除操作{cout<<"沒有刪除數(shù)據(jù)!請選擇以下操作:!"<<endl;break;}elsecout<<"選擇錯(cuò)誤!請從新選擇!"<<endl;}while(y!=1&&y!=2);do//**確認(rèn)用戶是否繼續(xù)刪除{cout<<"1:繼續(xù)刪除2:返回菜單:"<<endl;cin>>x;if(x==1)//******用戶確認(rèn)繼續(xù)刪除操作{remove();x=0;break;}elseif(x==2)//********用戶確認(rèn)返回菜單操作{cout<<"正在退出,返回菜單。"<<endl;xuanze();x=0;break;}elsecout<<"選擇錯(cuò)誤,請從新選擇!"<<endl;}while(x!=1&&x!=2);return;}}2)template<classT>//*****計(jì)算平均分函數(shù)doubleTREESTRUCT<T>::jisuanAverage(TreeNode<T>*tRoot){staticintsum=0;staticinti=0;doubleaverage;TreeNode<T>*tempNodeptr=tRoot;if(tempNodeptr){sum+=tempNodeptr->data;i++;jisuanAverage(tempNodeptr->left);jisuanAverage(tempNodeptr->right);}average=double(sum)/i;returnaverage;}template<classT>voidTREESTRUCT<T>::showAverage(doublex)//*****顯示平均分函數(shù){cout<<"平均分是:"<<x<<endl;cout<<"正在返回主菜單"<<endl;xuanze();}3)template<classT>//*****用分?jǐn)?shù)查姓名voidTREESTRUCT<T>::searchNodeName(){TreeNode<T>*tRoot=root;Tdata;intx=0;if(tRoot==NULL){tRoot=0;cout<<"沒有數(shù)據(jù)以供查找!請先加入數(shù)據(jù)!返回主菜單"<<endl;xuanze();return;}else{cout<<"請輸入要查找的數(shù)據(jù)的分?jǐn)?shù):";cin>>data;while(tRoot!=NULL){if(data==tRoot->data)//*找到相同值時(shí),繼續(xù)查找左支樹{if(x==0)cout<<"找到符合要求的信息是:"<<endl;cout<<"姓名為:"<<tRoot->name<<'\t'<<"成績?yōu)椋?<<tRoot->data<<endl;tRoot=tRoot->left;x++;}elseif(data<tRoot->data)tRoot=tRoot->left;elseif(data>tRoot->data)tRoot=tRoot->right;}if(x==0)cout<<"未找到符合要求的信息!請選擇以下操作:"<<endl;//*********查找失敗else//****查找成功cout<<"查找成功!以下選擇以下操作:"<<endl;do//*****確認(rèn)用戶是否再查找{cout<<"1:繼續(xù)查找2:返回菜單:"<<endl;cin>>x;if(x==1)//****用戶確認(rèn)查找操作{searchNodeName();break;}elseif(x==2)//******用戶取消查找操作{cout<<"正在退出,返回主菜單。"<<endl;xuanze();break;}elsecout<<"選擇錯(cuò)誤,請從新選擇!"<<endl;}while(x!=1&&x!=2);}}4)template<classT>//*****用姓名查分?jǐn)?shù)voidTREESTRUCT<T>::searchNodeData(){TreeNode<T>*tRoot=root;charname[20];intx=0;if(tRoot==NULL){tRoot=0;cout<<"沒有數(shù)據(jù)以供查詢!請先加入數(shù)據(jù)!返回主菜單."<<endl;xuanze();return;}else{cout<<"請輸入要查找的數(shù)據(jù)的姓名:";cin>>name;tRoot=root;x=searchNodeData(tRoot,name);if(x==1)//********查找成功cout<<"查找成功!選擇以下操作:"<<endl;else//****查找失敗cout<<"未找到符合要求的信息!查找失?。∵x擇以下操作:"<<endl;do//**確認(rèn)用戶是否繼續(xù)查找{cout<<"1:繼續(xù)查找2:返回菜單:"<<endl;cin>>x;if(x==1)//*****用戶確認(rèn)繼續(xù)查找操作{searchNodeData();break;}elseif(x==2)//*******用戶確認(rèn)返回菜單操作{cout<<"正在退出,返回菜單。"<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論