通讯录实现代码 C++ 链表

#include<iostream>
#include<malloc.h>
#include<string>
#include<iomanip>
#include<fstream>
#include <conio.h>
#include <stdlib.h>

using namespace std;

unsigned int num=0;

struct information
{
    string name;
    string phone;
    string street;
    string city;
    string eip;
    string state;
};
struct information a[120];


typedef struct doublelink   //定义
{
    struct information data;
    struct doublelink *Llink,*Rlink;
} dlink;

dlink *enter(dlink *h);
dlink *insert(dlink *h) ;
int menu_select();
dlink *add(dlink *h);
void search(dlink *h) ;
dlink *deletebyname(dlink *h);
dlink *deletebyphone(dlink *h) ;
void output(dlink *h);

dlink *creatlist()
{
    dlink *head,*p,*r;
    p=new dlink;
    head=p;
    r=head;
    p->Rlink=NULL;
    return head;
}


创建*************************************************
dlink *enter(dlink *h)
{
    dlink *head,*r,*p,*q;
    head=h;
    r=h;
    q=h->Rlink;
    system("cls");
    p=new dlink;
    cout<<"\n\t\t**************** 请输入联系人信息 ****************"<<endl;
    cout<<"请输入姓名:"<<endl;
    cin>>p->data.name;
    cout<<"请输入电话:"<<endl;
    cin>>p->data.phone;
    cout<<"请输入街道名: "<<endl;
    cin>>p->data.street;
    cout<<"请输入城市名: "<<endl;
    cin>>p->data.city;
    cout<<"请输入邮编: "<<endl;
    cin>>p->data.eip;
    cout<<"请输入国家名: "<<endl;
    cin >>p->data.state;
    p->Rlink=NULL;

    while(q!=NULL)
    {
        r=q;
        q=q->Rlink;
    }
    p->Llink=r;
    r->Rlink=p;
    r=p;
    num++;
    char z;

    cout<<" 是否要继续插入新联系人信息? (Y/N):"<<endl;
    cin>>z;
    if((z=='y')||(z=='Y'))
        head=insert(head);
    else if((z!='n')&&(z!='N'))
    {
        cout<<"输入有误,返回主菜单"<<endl;
    }
    else
        return 0;
    return head;
}



//***********************************************************************


dlink *insert(dlink *h)  //插入新用户信息
{
    dlink *head=h;
    if(num==0)
    {
        cout<<"\n\t通讯录中没有任何联系人信息,确认要添加吗?(Y/N)"<<endl;
        char z;
        cin>>z;
        if((z=='y')||(z=='Y'))
            head=add(head);
        else if((z!='n')&&(z!='N'))
        {
            cout<<"输入有误,返回主菜单"<<endl;
        }
        else
        {
            return 0;
        }


    }
    else
        head=add(head);
    return head;
}
//*****************************************************************
dlink *add(dlink *h)
{
    dlink *head,*r,*p,*q;
    head=h;
    r=h;
    q=h->Rlink;
    system("cls");
//新建用户信息
    p=new dlink;
    cout<<"\n\t\t**************** 请输入联系人信息 ****************"<<endl;
    cout<<"请输入姓名:"<<endl;
    cin>>p->data.name;
    cout<<"请输入电话:"<<endl;
    cin>>p->data.phone;
    cout<<"请输入街道名: "<<endl;
    cin>>p->data.street;
    cout<<"请输入城市名: "<<endl;
    cin>>p->data.city;
    cout<<"请输入邮编: "<<endl;
    cin>>p->data.eip;
    cout<<"请输入国家名: "<<endl;
    cin >>p->data.state;
    p->Rlink=NULL;

    while(q!=NULL)
    {
        r=q;
        q=q->Rlink;
    }  //while
    p->Llink=r;
    r->Rlink=p;
    r=p;
    num++;
    char z;

    cout<<" 是否要继续插入新联系人信息? (Y/N):"<<endl;
    cin>>z;
    if((z=='y')||(z=='Y'))
        head=insert(head);
    else if((z!='n')&&(z!='N'))
        cout<<"输入有误,返回主菜单"<<endl;
    else;

    return head;
}



//*******************************************************************************************
void searchbyname(dlink *h)   //按姓名查找
{
    if(num==0)
    {
        cout<<"\n\t当  前  通   讯   录   没   有   任   何   联   系   人   信   息!!!"<<endl;
        cout<<"\n**********无法执行查找操作***********"<<endl;
        cout<<endl;
    }
    else
    {
        dlink *head,*p,*q;
        string nam;
        head=h;
        p=h->Rlink;
        int i,j=1,k=1,mark=0;
        system("cls");
        cout<<"请输入要查找的联系人姓名: "<<endl;
        cin>>nam;
        for(i=k; i<=num; i++,p=p->Rlink)
        {
            while(p&&p->data.name!=nam)
            {
                q=p;
                p=p->Rlink;
                j++;

            }
            if(p)
            {
                cout<<"您要查找的联系人信息为:"<<endl;

                cout<<"*******************************************************************************"<<endl;
                cout<<"\n\t姓名: "<<p->data.name<<endl;
                cout<<"\n\t电话号码:"<<p->data.phone<<endl;
                cout<<"\n\t街道名: "<<p->data.street<<endl;
                cout<<"\n\t城市名: "<<p->data.city<<endl;
                cout<<"\n\t邮编: "<<p->data.eip<<endl;
                cout<<"\n\t国家: "<<p->data.state<<endl;
                cout<<"*******************************************************************************"<<endl;
                cout<<endl;
                mark=1;
                if(p->Rlink==NULL)
                {
                    cout<<"\n\t已无重名信息"<<endl;
                    cout<<"\n\t您是否继续下一个查找?(Y/N)"<<endl;
                    char z;
                    cin>>z;
                    if((z=='y')||(z=='Y'))
                        search(head);
                    else if((z!='n')&&(z!='N'))
                    {
                        cout<<"输入错误"<<endl;
                        break;   
                    }
                    else
                        break;
                }
            }

            if(p==NULL)
            {
                if(mark==1)
                {
                    if(q->data.name!=nam)

                    {
                        cout<<"\n\t已无重名信息"<<endl;
                        cout<<"\n\t您是否继续下一个查找?(Y/N)"<<endl;
                        char z;
                        cin>>z;
                        if((z=='y')||(z=='Y'))
                            search(head);
                        else break;
                    }
                }
                else

                {
                    cout<<"\n搜索的联系人不存在!"<<endl;
                    cout<<endl;
                    cout<<"\n\t您是否继续下一个查找?(Y/N)"<<endl;
                    char z;
                    cin>>z;
                    if((z=='y')||(z=='Y'))
                        search(head);
                    else if((z!='n')||(z!='N'))
                         {cout<<"输入有误,返回主菜单"<<endl;
                         break;}
                    else
                         break;
                    ;
                }
            }

        }
    }
}
//**************************************************************************


void searchbyphone(dlink *h)   //按电话号码查找
{
    if(num==0)
    {
        cout<<"\n当前通讯录没有任何联系人信息!!!"<<endl;
        cout<<"\n*****无法执行查找操作!******"<<endl;
        cout<<endl;
    }
    else
    {
        dlink *head,*p,*q;
        string callnum;
        head=h;
        p=h->Rlink;
        int j=0,k=1;
        system("cls");
        cout<<"请输入要查找的联系人电话号码: "<<endl;
        cin>>callnum;

        while(p&&p->data.phone!=callnum)
        {
            q=p;
            p=p->Rlink;
            j++;
        }
        if(p)
        {
            cout<<"您要查找的联系人信息为:"<<endl;
            cout<<"*******************************************************************************"<<endl;
            cout<<"\n\t姓名: "<<p->data.name<<endl;
            cout<<"\n\t电话号码:"<<p->data.phone<<endl;
            cout<<"\n\t街道名: "<<p->data.street<<endl;
            cout<<"\n\t城市名: "<<p->data.city<<endl;
            cout<<"\n\t邮编: "<<p->data.eip<<endl;
            cout<<"\n\t国家: "<<p->data.state<<endl;
            cout<<"*******************************************************************************"<<endl;
            cout<<endl;
        }
        else
        {
            cout<<"\n\t\t搜索的联系人不存在!"<<endl;
            cout<<endl;
            cout<<"\n\t您是否继续下一个查找?(Y/N)"<<endl;
            char z;
            cin>>z;
            if((z=='y')||(z=='Y'))
                search(head);
            else if((z!='n')||(z!='N'))
                 cout<<"输入有误,返回主菜单"<<endl;
            else ;
        }
    }
}


//*********************************************************************************
void search(dlink *h)
{
    dlink *head;
    head=h;
    int choic;
    cout<<"\n-按电话号码查找 2-按姓名查找";
    cout<<"\n请选择:";
    cin>>choic;
    switch (choic)
    {
    case 1:
        searchbyphone(head);
        break;
    case 2:
        searchbyname(head);
        break;
    }
}

//按姓名删除****************************************************************
dlink *deletebyname(dlink *h)
{
    dlink *head,*p,*q;
    if(num==0)
    {
        cout<<"\n当前通讯录没有任何联系人信息"<<endl;
        cout<<"\n删除操作无法执行"<<endl;
    }
    else
    {
        string nam;
        int flag=1,k=1,i,j=1;
        head=h;
        p=h->Rlink;
        system("pause");
        system("cls");
        cout<<"请输入要删除的联系人姓名: "<<endl;

        cin>>nam;
        for(i=k; i<=num; i++,p=p->Rlink)
        {
            while(p&&p->data.name!=nam)
            {
                q=p;
                p=p->Rlink;
                j++;
            }
            if(p)   
            {
                cout<<"您要删除的联系人信息为:"<<endl;
                cout<<"weiyu"<<j+1<<"weizhi"<<endl;

                cout<<"*******************************************************************************"<<endl;
                cout<<"\n\t姓名: "<<p->data.name<<endl;
                cout<<"\n\t电话号码:"<<p->data.phone<<endl;
                cout<<"\n\t街道名: "<<p->data.street<<endl;
                cout<<"\n\t城市名: "<<p->data.city<<endl;
                cout<<"\n\t邮编: "<<p->data.eip<<endl;
                cout<<"\n\t国家: "<<p->data.state<<endl;
                cout<<"*******************************************************************************"<<endl;

                char z;
                cout<<"您确定要删除该联系人信息吗?(Y/N)"<<endl;
                cin>>z;
                if((z=='y')||(z=='Y'))
                {
                    if(num==1)
                    {
                        p->Llink->Rlink=NULL;
                        free(p);
                        num--;
                    }
                    else if(p->Llink==head)
                    {
                        p->Rlink->Llink=head;
                        p->Llink->Rlink=p->Rlink;
                        free(p);
                        num--;
                    }
                    else if(p->Rlink==NULL)
                    {
                        p->Llink->Rlink=NULL;
                        free(p);
                        num--;
                    }
                    else
                    {
                        p->Rlink->Llink=p->Llink;
                        q->Rlink=p->Rlink;
                        free(p);
                        num--;
                    }
                    cout<<"\n\t\t已删除成功!"<<endl;
                    break;
                }
                else
                {
                    cout<<"\n已放弃删除!!"<<endl;
                    char d;
                    cout<<"\n您是否继续删除相同姓名的联系人?(Y/N)"<<endl;
                    cin>>d;
                    if((d=='y')||(d=='Y'))
                        continue;
                    else break;

                }

            }//waiif

            else
            {
                cout<<"没有此联系人信息"<<endl;
                char a;
                cout<<"\n您是否要继续删除?(Y/N)"<<endl;
                cin>>a;
                if((a=='y')||(a=='Y'))
                    head=deletebyname(head);
                else if((a!='n')||(a!='N'))
                    cout<<"输入有误,返回主菜单"<<endl;
                else
                    break;
            }
        }
    }
    cout<<endl;
    return head;
}

//按电话号码删除***************************************************
dlink *deletebyphone(dlink *h)
{
    dlink *head,*p,*q;
    if(num==0)
    {
        cout<<"\n没有联系人信息  请先输入"<<endl;
        cout<<"\n删除操作无法执行!"<<endl;
    }
    else
    {
        string callnum;
        int flag=1,k=1,j=0;
        head=h;
        p=h->Rlink;
        system("pause");
        system("cls");
        cout<<"请输入要删除的联系人电话号码: "<<endl;

        cin>>callnum;
        while(p&&p->data.phone!=callnum)
        {
            q=p;
            p=p->Rlink;
            j++;
        }
        if(p)
        {
            cout<<"您要删除的联系人信息为:"<<endl;
            cout<<"*******************************************************************************"<<endl;
            cout<<"\n\t姓名: "<<p->data.name<<endl;
            cout<<"\n\t电话号码:"<<p->data.phone<<endl;
            cout<<"\n\t街道名: "<<p->data.street<<endl;
            cout<<"\n\t城市名: "<<p->data.city<<endl;
            cout<<"\n\t邮编: "<<p->data.eip<<endl;
            cout<<"\n\t国家: "<<p->data.state<<endl;
            cout<<"*******************************************************************************"<<endl;

            char z;
            cout<<"您确定要删除该联系人信息吗?(Y/N)"<<endl;
            cin>>z;
            if((z=='y')||(z=='Y'))
            {
                if(num==1)
                {
                    p->Llink->Rlink=NULL;
                    free(p);
                    num--;
                }
                else if(p->Llink==head)
                {
                    p->Rlink->Llink=head;
                    p->Llink->Rlink=p->Rlink;
                    free(p);
                    num--;
                }
                else if(p->Rlink==NULL)
                {
                    p->Llink->Rlink=NULL;
                    free(p);
                    num--;
                }
                else
                {
                    p->Rlink->Llink=p->Llink;
                    q->Rlink=p->Rlink;
                    free(p);
                    num--;
                }
                cout<<"\n\t\t已删除成功!"<<endl;

                char a;
                cout<<"\n您是否要继续删除???(Y/N)"<<endl;
                cin>>a;
                if((a=='y')||(a=='Y'))
                    head=deletebyphone(head);
                else if((a!='n')||(a!='N'))
                    cout<<"输入有误,返回主菜单"<<endl;
                else ;

            }
            else
            {
                cout<<"\n\t\t已放弃删除!!"<<endl;
                char a;
                cout<<"\n您是否要继续删除?(Y/N)"<<endl;
                cin>>a;
                if((a=='y')||(a=='Y'))
                    head=deletebyphone(head);
                else if((a!='n')&&(a!='N'))
                    cout<<"输入有误,返回主菜单"<<endl;
                else
                    return 0;

            }
        }
        else
        {
            cout<<"\n\t没有此联系人信息"<<endl;
            char a;
            cout<<"\n\n您是否要继续删除???(Y/N)"<<endl;
            cin>>a;
            if((a=='y')||(a=='Y'))
                head=deletebyphone(head);
            else if((a!='n')||(a!='N'))
                cout<<"输入有误,返回主菜单"<<endl;
            else ;

        }
    }
    cout<<endl;
    return head;
}



dlink *dele(dlink *h)

{
    dlink *head;
    head=h;
    int choic;
    cout<<"\n    1-按电话号码删除 2-按姓名删除";
    cout<<"\n请选择:";
    cin>>choic;
    switch (choic)
    {
    case 1:
        head=deletebyphone(head);
        break;
    case 2:
        head=deletebyname(head);
        break;

    }


    return head;
}


void output(dlink *h) // 输出
{
    dlink *p;

    if(num==0)
    {
        cout<<"\n\t\t当  前  通   讯   录   没   有   任   何   联   系   人   信   息!!!"<<endl;
        cout<<"\n\t\t\t*****无法执行显示操作!!!!******"<<endl;
    }
    else
    {
        int i=0;
        p=h->Rlink;
        system("pause");
        system("cls");
        cout<<"\n\t\t输出所有联系人的信息:"<<endl;

        cout<<"\n\t\t\t当前通讯录共有"<<num<<"个联系人信息"<<endl;
        for(i=1; i<=num; i++)
        {
            cout<<"\n\t\t\t第 "<<i<<"个联系人信息为:"<<endl;
            cout<<"*******************************************************************************"<<endl;
            cout<<"\n\t姓名: "<<p->data.name<<endl;
            cout<<"\n\t电话号码:"<<p->data.phone<<endl;
            cout<<"\n\t街道名: "<<p->data.street<<endl;
            cout<<"\n\t城市名: "<<p->data.city<<endl;
            cout<<"\n\t邮编: "<<p->data.eip<<endl;
            cout<<"\n\t国家: "<<p->data.state<<endl;
            cout<<"*******************************************************************************"<<endl;

            p=p->Rlink;
        }
    }
    cout<<endl;
}




int menu_select()
{
    int b;
    cout<<"********欢迎使用通讯录管理软件 请按任意键进入主菜单!********"<<endl;
    getch();
    system("cls");
    cout<<"\t\t*****WELCOME TO USE THIS SOFTWARE *****************"<<endl;
    cout<<"\t\t*****************通讯录管理软件********************"<<endl;
    cout<<"\t\t*************  COPYRIGHT 2011 *********************"<<endl;
    cout<<"\t\t******DESIGNED BY DaiJunYou  O (∩_∩)O哈哈~  *****"<<endl;
    cout<<"\t\t*****************  MENU   *************************"<<endl;
    cout<<"\n\t\t1: 输入联系人信息"<<endl;
    cout<<"\n\t\t2: 查找联系人信息"<<endl;
    cout<<"\n\t\t3: 显示联系人信息"<<endl;
    cout<<"\n\t\t4: 增加联系人信息"<<endl;
    cout<<"\n\t\t5: 删除联系人信息"<<endl;
    cout<<"\n\t\t6: 存储联系人信息"<<endl;
    cout<<"\n\t\t7: 退出本程序"<<endl;
    for(;;)
    {
        cout<<"\n****Please make your choice(1~7)****  "<<endl;
        cout<<"\nYour choice is :  ";
        cin>>b;
        if(b<1||b>7)
            continue;
        else
        {
            return b;
            break;
        }
    }
}

int WriteLinklistToFile(dlink *h)
{
    ofstream fin("E:\\学习\\数据结构(C)\\课设资料\\链表\\test.txt",ios::app);
    dlink *head = h;
    dlink *p;
    p=head->Rlink;

    while(p)
    {
        //fprintf(fpFile,"%s\t%s\t%s\t%s\t%s\t%s\t\n",p->data.name,p->data.phone,p->data.street,p->data.city,p->data.eip,p->data.state);
        fin<<p->data.name<<" "<<p->data.phone<<" "<<p->data.street<<" "<<p->data.city<<" "<<p->data.eip<<" "<<p->data.state<<" "<<endl;
        p=p->Rlink;
    }
    fin.close();
    return 1;
};



int main()
{
    dlink *head;
    head=creatlist();
    system("cls");
    for(;;)
    {
        switch(menu_select())
        {
        case 1:
            head=enter(head);
            break;
        case 2:
            search(head);
            break;
        case 3:
            output(head);
            break;
        case 4:
            head=insert(head);
            break;
        case 5:
            head=dele(head);
            break;
        case 6:
            WriteLinklistToFile(head) ;
            break;
        case 7:
            exit(0);

        }
    }
    return 0;
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值