C++課程設計報告 模板實現排行榜管理_第1頁
C++課程設計報告 模板實現排行榜管理_第2頁
C++課程設計報告 模板實現排行榜管理_第3頁
C++課程設計報告 模板實現排行榜管理_第4頁
C++課程設計報告 模板實現排行榜管理_第5頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論