⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treemain.cpp

📁 数据结构清华大学出版社出版 有书上例子的源代码
💻 CPP
字号:
#include <iostream>
#include <string>
#include"tree.cpp"
#include"member.h"
using namespace std;

void printMemberFunction(void* node)          //打印函数
{
	Node<Member>* memberNode = (Node<Member>*)node;
	(memberNode->getData( ))->print( );
}
int main( ) 
{
	Member* memberChair = new Member("学生会主席", "张三", "男", "三", 2);      //初始化一棵树
	Member* memberSubChairOne = new Member("副主席", "李一", "男", "三", 2);
	Member* memberSubChairTwo = new Member("副主席", "李二", "男", "二", 2);
	Member* memberSubChairThree = new Member("副主席", "李三", "女", "三", 3);
	Member* memberSubChairFour = new Member("秘书长", "李四", "女", "一", 4);

	Member* member1 = new Member("文艺部长", "王一", "女", "一", 5);
	Member* member2 = new Member("女生部长", "王二", "女", "二", 4);
	Member* member3 = new Member("外联部长", "王三", "男", "二", 5);

	Member* member4 = new Member("舍管部长", "赵一", "男", "三", 1);
	Member* member5 = new Member("体育部长", "赵二", "男", "一", 4);
	Member* member6 = new Member("治保部长", "赵三", "男", "三", 3);

	Member* member7 = new Member("学习部长", "刘一", "女", "二", 4);
	Member* member8 = new Member("生活部长", "刘二", "女", "二", 6);

	Member* member9 = new Member("秘书部长", "周一", "女", "一", 3);
	Member* member10 = new Member("宣传部长", "周二", "男", "一", 4);

	Tree<Member> tree = Tree<Member>(memberChair);       //构造树的根结点

	tree.Insert(memberChair, memberSubChairOne);
	tree.Insert(memberChair, memberSubChairTwo);
	tree.Insert(memberChair, memberSubChairThree);
	tree.Insert(memberChair, memberSubChairFour);

	tree.Insert(memberSubChairOne, member1);
	tree.Insert(memberSubChairOne, member2);
	tree.Insert(memberSubChairOne, member3);

	tree.Insert(memberSubChairTwo, member4);
	tree.Insert(memberSubChairTwo, member5);
	tree.Insert(memberSubChairTwo, member6);

	tree.Insert(memberSubChairThree, member7);
	tree.Insert(memberSubChairThree, member8);

	tree.Insert(memberSubChairFour, member9);
	tree.Insert(memberSubChairFour, member10);       //初始化结束
    
 
	int control=1;          //声明控制变量来控制程序的执行与结束
	int which;              //选择变量用来选择执行的操作
	char flag;               //标志变量用来确认是否执行操作
   
	                        //声明要插入结点的父结点数据域的信息属性
	string parentposition;   
	string parentname;
	string parentsex;
	string parentgrade;
	int parentclasses;
                            //声明新结点数据域的信息属性
	string position;
	string name;
	string sex;
	string grade;
	int classes;
                            //声明要删除结点数据域的信息属性
	string oldposition;
	string oldname;
	string oldsex;
	string oldgrade;
	int oldclasses;
	
	while(control)
	{
	
		cout<<"请选择你要进行的操作:"<<endl;  //选择你要进行的操作
		cout<<"插入请选择1"<<endl;
		cout<<"删除请选择2"<<endl;
		cout<<"修改请选择3"<<endl;
		cout<<"查询请选择4"<<endl;
		cout<<"输出请选择5"<<endl;
		cout<<"退出请选择6"<<endl;
		cin>>which;
		switch (which)
		{
		   case 1:                                    //插入一个学生会成员
			   cout<<"插入的学生职务:";
			   cin>>position;
			   cout<<"插入的学生姓名:";
			   cin>>name;
			   cout<<"插入的学生性别:";
			   cin>>sex;
			   cout<<"插入的学生所在年级:";
			   cin>>grade;
			   cout<<"插入的学生所在班级:";
			   cin>>classes;

			   cout<<"插入在某职位下:";
			   cin>>parentposition;
			   cout<<"该职位的学生姓名:";
			   cin>>parentname;
			   cout<<"该职位的学生性别:";
			   cin>>parentsex;
			   cout<<"该职位的学生所在年级:";
			   cin>>parentgrade;
			   cout<<"该职位的学生所在班级:";
			   cin>>parentclasses;
			   cout<<"确定要插入?确定请按Y或y:" ;
			   cin>>flag;
			   if(flag=='Y'||'y')
			   {
                  Member* newmember=new Member(position,name,sex,grade,classes);	
                  Member* parentmember=new Member(parentposition,parentname,parentsex,parentgrade,parentclasses);	
				  try
				  {
			         tree.Insert(parentmember,newmember);
					 cout<<"插入成功!\n";
				  }
				  catch(char*)
				  {
					  cout<<"插入失败!\n";
				  }
                  delete parentmember;    //释放结点的存储空间
			   }		 			
			   break;			  
		   case 2:                       //删除学生会成员

			   cout<<"删除的学生职务:";
			   cin>>position;
			   cout<<"删除的学生姓名:";
			   cin>>name;
			   cout<<"删除的学生性别:";
			   cin>>sex;
			   cout<<"删除的学生所在年级:";
			   cin>>grade;
			   cout<<"删除的学生所在班级:";
			   cin>>classes;
			   cout<<"确定要删除?确定请按Y或y:" ;
			   cin>>flag;			   
			   if(flag=='Y'||flag=='y')
			   {
                   Member* member=new Member(position,name,sex,grade,classes);
				   try
				   {
					   tree.Delete(member);
					   cout<<"删除成功!\n";
				   }
				   catch(char*)
				   {	   
				       cout<<"删除失败!!!"<<endl;
				   }				
			   }
			   break;			 
		   case 3:                               //修改学生会的成员信息			  
			   cout<<"要修改的学生职位:";
			   cin>>oldposition;
			   cout<<"要修改的学生姓名:";
			   cin>>oldname;
			   cout<<"要修改的学生性别:";
               cin>>oldsex;
			   cout<<"要修改的学生所在年级:";
               cin>>oldgrade;
			   cout<<"要修改的学生所在班级:";
               cin>>oldclasses;

               cout<<"新职位:";
			   cin>>position;			   
               cout<<"新学生的姓名:";
			   cin>>name;
               cout<<"新学生的性别:";
			   cin>>sex;
               cout<<"新学生所在年级:";
               cin>>grade;
               cout<<"新学生所在班级:";
			   cin>>classes;
		
			   cout<<"确定要修改?确定请按Y或y:" ;
			   cin>>flag;

               if(flag=='Y'||flag=='y')                   //修改学生会的成员信息
			   {
                  Member* oldmember=new Member(oldposition,oldname,oldsex,oldgrade,oldclasses);
				  Member* newmember=new Member(position,name,sex,grade,classes);
				  try                         //捕捉异常
				  {
					  tree.Update(oldmember,newmember);
					  cout<<"修改成功!\n";
				  }
				  catch(char*)
				  {
					  cout<<"修改失败!"<<endl;
				  }
				  delete oldmember;
			   }
			   break;
		   case 4:                    //输出学生会组织情况 			  
			   cout<<"请输入你要查询的职务名称"<<endl;
			   cin>>position;			  
			   cout<<"确定要查询?确定请按Y或y:" ;
			   cin>>flag;
			   if(flag=='Y'||flag=='y')
			   {
			     try
				 {
			        tree.FindNode(position,printMemberFunction);
				 }
			     catch(char*)
				 {
				    cout<<"查询失败!"<<endl;	
				 }
			   }
			   break;
		   case 5:                    //输出学生会所有成员
               try
			   {
				   tree.LeverOrder(printMemberFunction);
			   }
			   catch(char*)
			   {
				   cout<<"没有任何成员!"<<endl;
				   control=0;
			   }
			   break;
		   case 6:                     //退出操作
			   control=0;
			   break;
		   default: 
			   cout<<"请选择正确的操作:\n";
			   break;
		}
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -