您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > C++简单通讯录管理 程序
#includeiostream.h#includeprocess.h#includefstream.h#includestdlib.h#includestring.h#includeiomanip.hclassAddrList;classNode{charID[20];charName[20];charOfficePhone[20];charHomePhone[20];charMobilePhone[20];charEmail[20];Node*Next;public:Node(char*id=0,char*name=0,char*op=0,char*hp=0,char*mp=0,char*email=0,Node*next=NULL){strcpy(ID,id);strcpy(Name,name);strcpy(OfficePhone,op);strcpy(HomePhone,hp);strcpy(MobilePhone,mp);strcpy(Email,email);Next=next;}voidShow(){coutsetw(12)IDsetw(6)Namesetw(12)OfficePhonesetw(12)HomePhonesetw(12)MobilePhonesetw(20)Emailendl;}friendclassAddrList;friendvoidadd(AddrList&addrlist);friendvoidquery(AddrList&addrlist);friendvoidmodify(AddrList&addrlist);};classAddrList{Node*HeadPtr;intTag;public:AddrList(Node*headptr=NULL,Node*tailptr=NULL,inttag=0){//构造函数,创建空链表,将Tag的值置为1HeadPtr=headptr;Tag=tag;}//将p指向的结点加入到链表尾部voidAddSort(char*id,char*name,char*op,char*hp,char*mp,char*email);//将p指向的结点按Tag指定的顺序插入到链表中Node*LookUp(char*name);//按姓名查找结点,返回该结点指针voidDelete(char*name);//删除指定姓名的结点intSort(int);//按tag指定的关键字重新排序intShowAll();//显示全部结点,每10个显示一//取Tag的值//统计链表中结点个数//取首指针~AddrList();//释放链表空间voidCreateList(char*filename);//从二进制文件中读入数据,构造链表voidWriteToFile(char*filename);//将链表中数据写入指定的二制文件voidWriteToTxtFile(char*filename);//将链表写到文本文件中voidCreateFromTxt(char*filename);friendvoidsort(AddrList&addrlist);//按姓名或办公室电话排序};voidAddrList::AddSort(char*id,char*name,char*op,char*hp,char*mp,char*email)//将p指向的结点按Tag指定的顺序插入到链表中{Node*p;p=newNode(id,name,op,hp,mp,email);Node*x1=HeadPtr;Node*x2=x1;if(id){if(HeadPtr){while(x1=x1-Next){x2=x1;}x2-Next=p;p-Next=NULL;}elseHeadPtr=p,p-Next=NULL;}}Node*AddrList::LookUp(char*name)//按姓名查找结点,返回该结点指针{Node*x=HeadPtr;while(x!=NULL&&strcmp(x-Name,name)!=0){x=x-Next;}if(x){returnx;}elsereturn0;}voidAddrList::Delete(char*name)//删除指定姓名的结点{Node*x1=HeadPtr;Node*x2=x1;while(strcmp(x2-Name,name)!=0&&x2!=NULL){x1=x2;x2=x2-Next;}if(x1!=x2){if(x2){x1-Next=x2-Next;deletex2;cout已删除endl;}else{cout未找到,请确认后再输入endl;}}else{HeadPtr=x1-Next;deletex2;}}intAddrList::Sort(intT_T)//按tag指定的关键字重新排序{switch(T_T){case1:{Node*x=HeadPtr,*t;if(!HeadPtr)return0;intm=0,n=0;Node*p[100]={0};while(x){p[m]=x;m++;x=x-Next;}n=m;inti,j,k;for(i=0;in-1;i++){k=i;for(j=i+1;jn;j++){if(strcmp(p[j]-Name,p[k]-Name)=0){k=j;}}{t=p[k];p[k]=p[i];p[i]=t;}}HeadPtr=p[0];i=0;while(im-1){p[i]-Next=p[i+1];i++;}p[i]-Next=NULL;Tag=1;break;}case2:{Node*x=HeadPtr,*t;if(!HeadPtr)return0;intm=0,n=0;Node*p[100]={0};while(x){p[m]=x;m++;x=x-Next;}n=m;inti,j,k;for(i=0;in-1;i++){k=i;for(j=i+1;jn;j++){if(strcmp(p[j]-ID,p[k]-ID)=0){k=j;}}{t=p[k];p[k]=p[i];p[i]=t;}}HeadPtr=p[0];i=0;while(im-1){p[i]-Next=p[i+1];i++;}p[i]-Next=NULL;Tag=2;break;}}}intAddrList::ShowAll()//显示全部结点,每10个显示一屏{Node*x=HeadPtr;if(x);elsereturn0;inti=1;while(1){coutsetw(12)学号setw(6)姓名setw(12)办公电话setw(12)家庭电话setw(12)移动电话setw(20)电子邮件endl;while(i=10){x-Show();i++;if(x=x-Next);elsebreak;}system(pause);i=1;if(x);elsebreak;}}AddrList::~AddrList()//释放链表空间{Node*x1=HeadPtr;Node*x2=x1;while(x2=x2-Next){deletex1;x1=x2;}deletex2;}voidAddrList::CreateList(char*filename)//从二进制文件中读入数据,构造链表{chara[30]={0},b[30]={0},c[30]={0},d[30]={0},e[30]={0},f[30]={0};ifstreamin(filename,ios::binary);while(ina){inbcdef;AddSort(a,b,c,d,e,f);}in.close();}voidAddrList::CreateFromTxt(char*filename)//从文本文件中读入数据,构造链表{chara[30],b[30],c[30],d[30],e[30],f[30];ifstreamin(filename);while(ina){inbcdef;AddSort(a,b,c,d,e,f);}}voidAddrList::WriteToFile(char*filename)//将链表中数据写入指定的二进制文件{Node*p=HeadPtr;ofstreamout(filename,ios::binary);outp-ID;outp-Name;outp-OfficePhone;outp-HomePhone;outp-MobilePhone;outp-Email;while(p=p-Next){outp-ID;outp-Name;outp-OfficePhone;outp-HomePhone;outp-MobilePhone;outp-Email;}out.close();}voidAddrList::WriteToTxtFile(char*filename)//将链表写到文本文件中{Node*x=HeadPtr;ofstreamout(filename);outsetw(12)学号setw(6)姓名setw(12)办公电话setw(12)家庭电话setw(12)移动电话setw(20)E-mailendl;outsetw(12)x-IDsetw(6)x-Namesetw(12)x-OfficePhonesetw(12)x-HomePhonesetw(12)x-MobilePhonesetw(20)x-Emailendl;while(x=x-Next){outsetw(12)x-IDsetw(12)x-Namesetw(12)x-OfficePhonesetw(12)x-HomePhonesetw(12)x-MobilePhonesetw(12)x-Emailendl;}out.close();}voidDisplayMenu()//显示菜单{inti;char*menu[]={,,,,***********小巧通讯录管理系统*************,,1.新增一个联系人,2.删除一个联系人,3.显示所有联系人,4.查找联系人,5.更改联系人记录,6.从TXT文档中增加记录,7.导出联系人到Txt文档,8.排序,9.退出,,******************************************,^_^欢迎使用^_^,NULL};system(cls);for(i=0;menu[i];i++)coutmenu[i]endl;cout请选择(1--9):;}voidadd(AddrList&addrlist)//按当前Tag标志插入结点,插入结点后,链表仍然保持升序{system(cls);chara[30],b[30],c[30],d[30],e[30],f[30];cout添加记录endl**************************************endl请输入一个联系人数据endl;cout学号setw(6)姓名setw(12)办公电话setw(12)家庭电话setw(12)移动电话setw(20)电子邮件endl;cinabcdef;addrlist.AddSort(a,b,c,d,e,f);cout添加完成
本文标题:C++简单通讯录管理 程序
链接地址:https://www.777doc.com/doc-7028789 .html