版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海南铺面租赁合同书电子版
- 合同产生质量事故考核
- 2024高考政治一轮复习课时练16中国特色社会主义最本质的特征含解析新人教版
- 2024年高考生物二轮复习第一篇专题6考向3生物的进化和生物多样性学案
- 完美国际黄昏圣殿装备属性、所需材料系列介绍(武器篇)投
- 2024购买服务的合同协议书
- 2024新疆事业编制合同到期后单位可以选择不续签
- 2024机动车辆保险合同样本
- 2024北京市猪肉入市场厂挂钩合同范本
- 2024消防工程改造合同
- 20200310公园安全风险辨识清单
- 华中科技大学官方信纸
- 60立方油罐容积细表
- WI-QA-02-034A0 灯具成品检验标准
- 农业信息技术 chapter5 地理信息系统
- 部编版六年级上语文阅读技巧及解答
- 斯派克max操作手册
- 项目四 三人表决器ppt课件
- 结合子的机械加工工艺规程及铣槽的夹具设计
- 林武樟 完整阳宅讲义 笔记版[方案]
- 《会滚的汽车》ppt课件
评论
0/150
提交评论