通讯簿管理(C++顺序表的应用).doc
3 通讯簿管理(顺序表的应用)【问题描述】通讯簿是一个线性表,可以存储一定数量的联系人记录,提供查找、插入、删除和修改等操作。通讯簿的特点是以查找为主要操作,要求快速查找到指定对象的位置,故宜采用具有随机访问功能的顺序表。【数据结构】使用顺序表SeqList建立通讯簿。作为表项的联系人记录,至少应包括以下属性: 序号,姓名,与本人关系,电话号码其中序号具有唯一性。序号和姓名可作为查找的主要关键字。与本人关系可枚举为“亲人”、“朋友”和“同事”,主要作用是为联系人分组,并作为次要关键字。将上述联系人记录定义为一个结构(struct),在主程序中建立模板类顺序表SeqList的对象时用该结构实例化表结点的类型。【主要功能】程序应为用户提供操作选择界面,必要的操作包括:查找某人电话号码,添加新记录,修改记录,删除记录,打印亲人清单、朋友清单或同事清单以及退出等。另外,为初始化方便,原始数据可存储在磁盘文件中。【主要代码】#include<iostream.h>#include<string.h>#include<stdlib.h>static n=1;enum RelationFriends,Familiers,Colleague;template<class T>struct Person char Num10;/编号 char PhoNum12;/电话号码 char Name20;/姓名 int m;/关系 Person( int &ite) m=ite;Person(int &p1,char Name,char P, char item) for(int i=0;i<20;i+) Namei=Namei; for(int j=0;j<11;j+)PhoNumj=Pj; for(int k=0;k<10;k+) Numk=itemk; m=p1; ;template<class T>class SeqListprotected: Person<T> *data;public: SeqList<T>(T& x)data=new Person<T>(x); bool Input(); void Output(); void Insert(); void Search(); void Show_All(); void Delete(); void Correct(); void Show_Select(); void Show_Friends(); void Show_Familiers(); void Show_Colleague();template <class T>bool SeqList<T>:Input() static l;cout<<"请输入您要添加的人的编号:" cin>>datal.Num;cout<<"请输入您要添加的人的姓名:" cin>>datal.Name;cout<<"请输入您要添加的人的电话:" cin>>datal.PhoNum;cout<<"请输入您要添加人与您的关系亲人(1)朋友(2)同事(3)" cin>>datal.m; l+; n+; return true;template <class T>void SeqList<T>:Insert() this->Input(); cout<<"信息已保存好!"<<endl; template <class T>void SeqList<T>:Search() char pr20; cout<<"请输入您要查找的序号或姓名:" cin>>pr; bool flag=1; for(int li=0;li<n-1;li+) if(IfEqual(pr,datali.Name)|IfEqual(pr,datali.Num) cout<<"序号:"<<datali.Num<<"tt"<<"姓名:"<<datali.Name<<"t"<<"电话:" for(int k=0;datali.PhoNumk!='0'k+) cout<<datali.PhoNumk; cout<<'t'Switch(datali.m);flag=0; if(flag) cout<<"查找失败!请查证后再试!"<<endl;template <class T>void SeqList<T>:Show_All() cout<<"所有人的信息如下:"<<endl; for(int lm=0;lm<n-1;lm+) cout<<"序号:"<<datalm.Num<<"tt"<<"姓名:"<<datalm.Name<<"t"<<"电话:" for(int k=0;datalm.PhoNumk!='0'k+) cout<<datalm.PhoNumk; cout<<'t' Switch(datalm.m); template <class T>void SeqList<T>:Show_Select()cout<<"请选择要显示联系人与您的关系:亲人(1),朋友(2),同事(3),个人(4):" int m;cin>>m;switch(m)case 1:Show_Familiers();break; case 2:Show_Friends();break; case 3:Show_Colleague();break;case 4:Search();break; default: cout<<"关系设置错误!"break;template <class T>void SeqList<T>:Show_Friends() cout<<"所有朋友的信息如下:"<<endl; for(int lm=0;lm<n-1;lm+) if(datalm.m=0) cout<<"序号:"<<datalm.Num<<"tt"<<"姓名:"<<datalm.Name<<"t"<<"电话:" for(int k=0;datalm.PhoNumk!='0'k+) cout<<datalm.PhoNumk; cout<<'t'Switch(datalm.m); template <class T>void SeqList<T>:Show_Familiers() cout<<"所有亲人的信息如下:"<<endl; for(int lmm=0;lmm<n-1;lmm+) if(datalmm.m=1) cout<<"序号:"<<datalmm.Num<<"tt"<<"姓名:"<<datalmm.Name<<"t"<<"电话:" for(int k=0;datalmm.PhoNumk!='0'k+) cout<<datalmm.PhoNumk; cout<<'t' Switch(datalmm.m); template <class T>void SeqList<T>:Show_Colleague() cout<<"所有同事的信息如下:"<<endl;for(int lmp=0;lmp<n-1;lmp+) if(datalmp.m=2) cout<<"序号:"<<datalmp.Num<<"tt"<<"姓名:"<<datalmp.Name<<"t"<<"电话:" for(int k=0;datalmp.PhoNumk!='0'k+) cout<<datalmp.PhoNumk; cout<<'t' Switch(datalmp.m); template <class T>void SeqList<T>:Correct() char ptk20; cout<<"请输入您要修改联系人的序号或姓名:"cin>>ptk; bool flag=1; for(int lp=0;lp<n-1;lp+)if(IfEqual(ptk,datalp.Name)|IfEqual(ptk,datalp.Num) cout<<"修改编号:" cin>>datalp.Num; cout<<"修改姓名:" cin>>datalp.Name; cout<<"修改电话号码:"cin>>datalp.PhoNum; cout<<"修改与您的关系:亲人(1),朋友(2),同事(3):" cin>>datalp.m; flag=0; if(flag) cout<<"您要修改的联系人不存在!"<<endl;template <class T>void SeqList<T>:Delete() char ptr20; cout<<"请输入您要删除的联系人的序号或姓名:"cin>>ptr;bool flag=1; for(int lr=0;lr<n-1;lr+)if(IfEqual(ptr,datalr.Name)|IfEqual(ptr,datalr.Num) strcpy(datalr.Num,datan-2.Num);strcpy(datalr.Name,datan-2.Name); strcpy(datalr.PhoNum,datan-2.PhoNum); datalr.m=datan-2.m; n-; cout<<"信息已删除!"<<endl; flag=0; if(flag) cout<<"删除失败!"<<endl; void Switch(int i)switch(i)case 1: cout<<"亲人"<<'t'<<endl;break;case 2: cout<<"朋友"<<'t'<<endl;break; case 3: cout<<"同事"<<'t'<<endl;break;default: cout<<"关系设置错误!"break;int IfEqual(char p1,char p2)int flag=strcmp(p1,p2);return fla