#include
class AddrList;
class Node { char ID[20]; char Name[20]; char OfficePhone[20]; char HomePhone[20]; char MobilePhone[20]; char Email[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; } void Show() { cout< friend class AddrList; friend void add(AddrList &addrlist); friend void query(AddrList &addrlist); friend void modify(AddrList &addrlist); }; class AddrList { Node *HeadPtr; int Tag; public: AddrList(Node *headptr=NULL,Node *tailptr=NULL,int tag=0) { 构造函数,创建空链表,将Tag的值置为1 HeadPtr=headptr; Tag=tag; // } //将p指向的结点加入到链表尾部 void AddSort(char* id,char *name,char* op,char* hp,char *mp,char *email); //将p指向的结点按Tag指定的顺序插入到链表中 Node *LookUp(char *name); //按姓名查找结点,返回该结点指针 void Delete(char *name); //删除指定姓名的结点 int Sort(int); //按tag指定的关键字重新排序 int ShowAll() ; //显示全部结点,每10个显示一 //取Tag的值 //统计链表中结点个数 //取首指针 ~AddrList(); //释放链表空间 void CreateList(char *filename); //从二进制文件中读入数据,构造链表 void WriteToFile(char *filename); //将链表中数据写入指定的二制文件 void WriteToTxtFile(char *filename); //将链表写到文本文件中 void CreateFromTxt(char *filename); friend void sort(AddrList &addrlist); // 按姓名或办公室电话排序 }; void AddrList::AddSort(char* id,char *name,char* op,char* hp,char *mp,char //将p指向的结点按Tag指定的顺序插入到链表中 { Node *p; p=new Node(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; } else HeadPtr=p,p->Next=NULL; } } Node * AddrList::LookUp(char *name) //按姓名查找结点,返回该结点指针 { Node* x=HeadPtr; while(x!=NULL && strcmp(x->Name,name)!=0) {x=x->Next;} *email) } if(x) {return x;} else return 0; void AddrList::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; delete x2; cout<<\已删除\ } else {cout<<\未找到,请确认后再输入\ } else {HeadPtr=x1->Next;delete x2;} } int AddrList::Sort(int T_T) //按tag指定的关键字重新排序 { switch(T_T) {case 1: { Node* x=HeadPtr,*t; if(!HeadPtr) return 0; int m=0,n=0; Node *p[100]={0}; while(x) {p[m]=x;m++;x=x->Next;} n=m; int i, j, k; for (i=0; i } } {t=p[k]; p[k]=p[i]; p[i]=t;} } HeadPtr=p[0]; i=0; while(i case 2: { Node* x=HeadPtr,*t; if(!HeadPtr) return 0; int m=0,n=0; Node *p[100]={0}; while(x) {p[m]=x;m++;x=x->Next;} n=m; int i, j, k; for (i=0; i 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C++简单通讯录管理 程序在线全文阅读。
相关推荐: