#include<>#include<>#include<>#include<>#include<>#include<>classAddrList;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() { cout<<setw(12)<<ID<<setw(6)<<Name<<setw(12)<<OfficePhone<<setw(12)<<HomePhone<<setw(12)<<MobilePhone<<setw(20)<<Email<<endl; } 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的值置为1 HeadPtr=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!=
C 简单通讯录管理 程序 来自淘豆网m.daumloan.com转载请标明出处.