C++課程設(shè)計(jì)報(bào)告 模板實(shí)現(xiàn)排行榜管理_第1頁(yè)
C++課程設(shè)計(jì)報(bào)告 模板實(shí)現(xiàn)排行榜管理_第2頁(yè)
C++課程設(shè)計(jì)報(bào)告 模板實(shí)現(xiàn)排行榜管理_第3頁(yè)
C++課程設(shè)計(jì)報(bào)告 模板實(shí)現(xiàn)排行榜管理_第4頁(yè)
C++課程設(shè)計(jì)報(bào)告 模板實(shí)現(xiàn)排行榜管理_第5頁(yè)
已閱讀5頁(yè),還剩5頁(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)介

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