编写通讯录管理程序c++

定义一个Friend类,包括姓名,性别,年龄,电话,邮箱,QQ号码,单位等属性和对这些属性的操作函数,再定义通讯录类,实现通讯录列表、查询、修改、删除、保存、退出等功能

#include<bits/stdc++.h>
using namespace std;
class phone_contact
{
protected:
    string name;
    string tell;
public:
    phone_contact(string name1="0",string tell1="0")
    {
        name=name1;
        tell=tell;
    }
    void set_(string name1="0",string tell1="0")
    {
        name=name1;
        tell=tell1;
 
    }
    void modify();//修改
    string get_name()
    {
        return name;
    }
    string get_tell()
    {
        return tell;
    }
    friend ostream & operator<<(ostream & output,phone_contact &);//因为ofstream是ostream类的一个子类,
    friend istream & operator >>(istream &input,phone_contact &);//所以,只需要对<<运算符按照之前的方法重载一次即可
};
/*手机类phone_contact成员函数的定义*/
void phone_contact::modify()//修改手机信息
{
    string new_name,new_tell;
    int n;
    cout<<"请选择你要修改的信息:1.仅修改手机号 2.仅修改姓名 3.修改手机号和姓名:";
    cin>>n;
    switch(n)
    {
    case 1:
        cout<<"请输入新手机号:";
        cin>>new_tell;
        tell=new_tell;
        cout<<"修改存储信息成功"<<endl;
        break;
    case 2:
        cout<<"请输入新姓名:";
        cin>>new_name;
        name=new_name;
        cout<<"修改手机存储信息成功"<<endl;
        break;
    case 3:
        cout<<"请输入新手机号以及姓名:";
        cin>>new_tell>>new_name;
        name=new_name;
        tell=new_tell;
        cout<<"修改手机手机存储信息成功"<<endl;
        break;
    default:
        cout<<"输入错误!"<<endl;
    }
}
ostream & operator<<(ostream & output,phone_contact & a)//重载输出运算符
{
 
    output<<a.get_name()<<"         "<<a.get_tell()<<endl;
    return output;
}
istream & operator >>(istream & input,phone_contact & b)
{
    string name2,tell2;
    cout<<"请输入 姓名 手机号:";
    input>>name2>>tell2;
    b.set_(name2,tell2);
    return input;
}
/*第二个类:手机卡类的定义及成员函数的定义*/
class card_contact:public phone_contact
{
    string address;
    string QQ;
public:
    card_contact(string a="0",string b="0",string address2="0",string QQ2="0"):phone_contact(a,b)
    {
        address=address2;
        QQ=QQ2;
    }
    void set_(string a="0",string b="0",string address2="0",string QQ2="0")
    {
        phone_contact::set_(a,b);
        address=address2;
        QQ=QQ2;
    }
    string get_address()
    {
        return address;
    }
    string get_QQ()
    {
        return QQ;
    }
    void modify();
    friend ostream & operator<<(ostream & output,card_contact &);
    friend istream & operator >>(istream &input,card_contact &);
};
void card_contact::modify()//修改手机卡信息
{
    string new_name,new_tell,new_address,new_QQ;
    int n;
    cout<<"请输入你所修改内容对应的操作:1.仅修改姓名 2.仅修改手机号 3.仅修改籍贯 4.仅修改 QQ 5.修改以上所有内容"<<endl;
    cin>>n;
    switch(n)
    {
        case 1:cout<<"请输入新姓名:";
               cin>>new_name;
               name=new_name;
               cout<<"修改手机卡存储信息成功"<<endl;
               break;
        case 2:cout<<"请输入新手机号:";
               cin>>new_tell;
               tell=new_tell;
               cout<<"修改手机卡存储信息成功"<<endl;
               break;
        case 3:cout<<"请输入新籍贯:";
               cin>>new_address;
               address=new_address;
               cout<<"修改手机卡存储信息成功"<<endl;
               break;
        case 4:cout<<"请输入新QQ:";
               cin>>new_QQ;
               QQ=new_QQ;
               cout<<"修改手机卡存储信息成功"<<endl;
               break;
        case 5:cout<<"请输入 新姓名 新手机号 新籍贯 以及新QQ:";
               cin>>new_name>>new_tell>>new_address>>new_QQ;
               name=new_name;   tell=new_tell;
               address=new_address; QQ=new_QQ;
               break;
      default: cout<<"输入错误!"<<endl;
    }
}
ostream & operator<<(ostream & output,card_contact &a)
{
    output<<a.get_name()<<"          "<<a.get_tell()<<"            "<<a.get_address()<<"            "<<a.get_QQ()<<endl;
    return output;
}
istream & operator >>(istream &input,card_contact &a)
{
    string name3,tell3,address3,QQ3;
    cout<<"请输入 姓名 手机号 籍贯 QQ号:";
    input>>name3>>tell3>>address3>>QQ3;
    a.set_(name3,tell3,address3,QQ3);
    return input;
}
 
/*定义第三个类:address_list抽象类*/
class address_list//抽象类 通讯薄类封装函数用于支持多态
{
public:
       virtual void add()=0;//添加联系人
       virtual void cut_bytell(string bytell)=0;//删除 通过
       virtual void cut_bytell2(string bytell2)=0;//直接删除
       virtual void display()=0;//显示所有联系人的信息
       virtual void change_bytell(string bytell)=0;//修改
       virtual void query_byname(string byname)=0;//修改
 
};
/*第四个类:公有继承于抽象类*/
class phone_list:public address_list//手机通讯薄类
{
    int number;
    vector<phone_contact>my_phonelist;
 
public:
    phone_list();//读取文件,创建联系人对象数组
    void add();
    void cut_bytell(string bytell);
    void cut_bytell2(string bytell2);
    void display();
    void change_bytell(string bytell);
    void query_byname(string byname);
    void copy_set(string pname,string ptell);
    void clear_phone();//"清空通讯录"
    int get_number()
    {
        return number;
    }
    string get_name(int i)//返回第i个联系人的名字
    {
        return my_phonelist[i].get_name();
    }
    string get_tell(int i)//返回第i个联系人的手机号
    {
        return my_phonelist[i].get_tell();
    }
    ~phone_list();//析构函数存入
};
phone_list::phone_list()
{
    number=-1;
    char name4[20],tell4[20];
    phone_contact p;
    ifstream fin("D://my_phonelist.txt",ios::in);
    if(!fin){cout<<"con't open file";abort();}
    char s[100];
    fin.getline(s,100);
    fin.getline(s,100);
    fin.getline(s,100);
    fin.getline(s,100);
    while(fin>>name4>>tell4&&strcmp(name4,"Noname")!=0)
    {
        p.set_(name4,tell4);
        my_phonelist.push_back(p);
        number++;
    }
     fin.close();
}
void phone_list::clear_phone()
{
    my_phonelist.clear();
    number=-1;
}
void phone_list::add()
{
    if(number>999){cout<<"手机通讯录已满!"<<endl;return;}
    phone_contact p;
    cin>>p;
    my_phonelist.push_back(p);
    number++;
    cout<<"添加成功!"<<endl;
}
void phone_list::cut_bytell(string bytell)//删除
{
 
    if(number<0){cout<<"没有可以删除的联系人!"<<endl;return;}
    while(1)
    {
        int flag=0;
        for(int i=0;i<=number;i++)
        {
            if(my_phonelist[i].get_tell()==bytell)
            {
                flag=1;
                number--;
                 break;
            }
        }
         if(flag==1) {cout<<"删除成功"<<endl;return;}
         else if(flag==0)
              {
                 int choose;
                 cout<<"通讯录内没有此联系人,继续查找删除请输入1,取消请输入0";
                 cin>>choose;
                 if(choose==1) continue;
                 else return;
              }
 
    }
 
}
void phone_list::cut_bytell2(string bytell2)
{
     while(1)
    {
        int flag=0;
        for(int i=0;i<=number;i++)
        {
            if(my_phonelist[i].get_tell()==bytell2)
            {
                flag=1;
                number--;
                 break;
            }
        }
         if(flag==1) {cout<<"在手机上发现同一电话号码信息并删除成功"<<endl;return;}
         else
         {
            cout<<"未在手机上发现删除人联系信息 "<<endl;
            return;
         }
    }
}
void phone_list::display()
{
    for(int i=0;i<=number;i++)
    cout<<my_phonelist[i]<<endl;
}
void phone_list::change_bytell(string bytell)//修改
{
    if(number<0) return;
    while(1)
    {
        int flag=0;
        for(int i=0;i<=flag;i++)
        {
            if(my_phonelist[i].get_tell()==bytell)
            {
                flag=1;
               my_phonelist[i].modify();
               break;
            }
        }
        if(flag==1) return;
        else
        {
           int choose;
           cout<<"未查到修改的联系人"<<endl;
           cout<<"1.继续查找 phone2.取消"<<endl;
           if(choose==1) continue;
           else return;
        }
    }
}
 
void phone_list::copy_set(string pname,string ptell)
{
    for(int i=0;i<=number;i++)
    {
        if(my_phonelist[i].get_name()==pname&&my_phonelist[i].get_tell()==ptell)
            {
             cout<<"所复制联系人的信息中,有原本原来已经存在,跳过存在联系人的复制"<<endl;
             return ;
            }
    }
    phone_contact temp;
    temp.set_(pname,ptell);
    my_phonelist.push_back(temp);
    number++;
}
void phone_list::query_byname(string byname)
{
    if(number<0) {cout<<"没有可以查询的联系人"<<endl;return;}
    while(1)
    {
       int flag=0;
       for(int i=0;i<=number;i++)
       {
           if(my_phonelist[i].get_name()==byname)
           {
             cout<<my_phonelist[i]<<endl;
             flag=1;
             break;
           }
       }
       if(flag==1) return;
       else
        {
            int choose;
            cout<<"未查询到联系人"<<endl;
            cout<<"1.继续查询 2.取消"<<endl;
            cin>>choose;
            if(choose==1) continue;
            else return;
        }
    }
 
}
phone_list::~phone_list()
{
    ofstream fout("D://my_phonelist.txt",ios::out);
    if(!fout)
    {
        cout<<"con't open file"<<endl;
        abort();
    }
    fout<<"*********************************************"<<endl;
    fout<<"                手机通讯录                  *"<<endl;
    fout<<"*********************************************"<<endl;
    fout<<"姓名"<<"\t\t手机号"<<endl;
    for(int i=number;i>=0;i--)
    {
        fout<<my_phonelist[i]<<endl;
    }
    fout.close();
}
/*第5个类:定义手机卡通信类*/
 
class card_list:public address_list//手机通讯薄类
{
    int number;
    vector<card_contact>my_cardlist;
public:
    card_list();//读取文件,创建联系人对象数组
    void add();
    void cut_bytell(string bytell);
    void display();
    void change_bytell(string bytell);
    void cut_bytell2(string bytell2);
    void query_byname(string byname);
    void copy_set(string pname,string ptell);
    void clear_card();//清空手机卡
    int get_number()
    {
        return number;
    }
    string get_name(int i)//返回第i个联系人的名字
    {
        return my_cardlist[i].get_name();
    }
    string get_tell(int i)//返回第i个联系人的手机号
    {
        return my_cardlist[i].get_tell();
    }
    ~card_list();//析构函数存入
};
card_list::card_list()
{
    number=-1;
    char name4[20],tell4[20],address4[20],QQ4[20];
    card_contact p;
    ifstream fin("D://my_cardlist.txt",ios::in);
    if(!fin){cout<<"con't open file";abort();}
    char s[100];
    fin.getline(s,100);
    fin.getline(s,100);
    fin.getline(s,100);
    fin.getline(s,100);
    while(fin>>name4>>tell4>>address4>>QQ4&&strcmp(name4,"Noname")!=0)
    {
        p.set_(name4,tell4,address4,QQ4);
        my_cardlist.push_back(p);
        number++;
    }
     fin.close();
}
void card_list::clear_card()
{
    my_cardlist.clear();
    number=-1;
}
void card_list::add()
{
    if(number>999){cout<<"手机通讯录已满!"<<endl;return;}
    card_contact p;
    cin>>p;
    my_cardlist.push_back(p);
    number++;
    cout<<"添加成功!"<<endl;
}
void  card_list::copy_set(string pname,string ptell)
{
    for(int i=0;i<=number;i++)
    {
        if(my_cardlist[i].get_name()==pname&&my_cardlist[i].get_tell()==ptell)
        {
            {
                cout<<"所复制的信息有原本存在的,跳过其中存在的联系人"<<endl;
                return;
            }
        }
 
    }
    card_contact temp;
    temp.set_(pname,ptell,"NOaddress","NoQQ" );
    my_cardlist.push_back(temp);
    number++;
 
}
void card_list::cut_bytell(string bytell)//删除
{
 
    if(number<0){cout<<"没有可以删除的联系人!"<<endl;return;}
    while(1)
    {
        int flag=0;
        for(int i=0;i<=number;i++)
        {
            if(my_cardlist[i].get_tell()==bytell)
            {
                flag=1;
                number--;
                break;
            }
        }
         if(flag==1) {cout<<"删除成功"<<endl;return;}
         else if(flag==0)
              {
                 int choose;
                 cout<<"通讯录内没有此联系人,继续查找删除请输入1,取消请输入0";
                 cin>>choose;
                 if(choose==1) continue;
                 else return;
              }
 
    }
 
}
void card_list::cut_bytell2(string bytell2)
{
    while(1)
    {
        int flag=0;
        for(int i=0;i<=number;i++)
        {
            if(my_cardlist[i].get_tell()==bytell2)
            {
                flag=1;
                number--;
                break;
            }
        }
         if(flag==1) {cout<<"在手机卡上发现同一号码的联系人信息并删除成功"<<endl;return;}
         else if(flag==0)
              {
                 cout<<"未在手机卡上发现同一号码的联系人信息:"<<endl;
                 return;
              }
    }
}
void card_list::display()
{
    for(int i=0;i<=number;i++)
    cout<<my_cardlist[i]<<endl;
}
void card_list::change_bytell(string bytell)//修改
{
    if(number<0) return;
    while(1)
    {
        int flag=0;
        for(int i=0;i<=number;i++)
        {
            if(my_cardlist[i].get_tell()==bytell)
            {
                flag=1;
                my_cardlist[i].modify();
                break;
            }
        }
        if(flag==1) return;
        else
        {
           int choose;
           cout<<"未查到修改的联系人"<<endl;
           cout<<"1.继续查找  2.取消"<<endl;
           cin>>choose;
           if(choose==1) continue;
           else return;
        }
    }
}
void card_list::query_byname(string byname)
{
    if(number<0) {cout<<"没有可以查询的联系人"<<endl;return;}
    while(1)
    {
       int flag=0;
       for(int i=0;i<=number;i++)
       {
           if(my_cardlist[i].get_name()==byname)
           {
             cout<<my_cardlist[i]<<endl;
             flag=1;
             break;
           }
       }
       if(flag==1) return;
       else
        {
            int choose;
            cout<<"未查询到联系人"<<endl;
            cout<<"1.继续查询 2.取消"<<endl;
            cin>>choose;
            if(choose==1) continue;
            else return;
        }
    }
 
}
card_list::~card_list()
{
     ofstream fout("D://my_cardlist.txt",ios::out);
    if(!fout)
    {
        cout<<"con't open file"<<endl;
        abort();
    }
    fout<<"*********************************************"<<endl;
    fout<<"                手机卡通讯录                  *"<<endl;
    fout<<"*********************************************"<<endl;
    fout<<"姓名"<<"\t\t手机号"<<"\t\t籍贯"<<"\t\tQQ"<<endl;
    for(int i=number;i>=0;i--)
    {
        fout<<my_cardlist[i];
    }
    fout.close();
 
}
/*第 6个类,菜单类*/
class menu
{
public:
    void descript();
    void main_menu();
    void add_menu();
    void cut_menu();
    void query_menu();
    void change_menu();
};
void menu::change_menu()
{
      cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
      cout<<"$$              请选择在哪个通讯录修改联系             $$"<<endl;
      cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
      cout<<"$$               1.   手机通讯录                       $$"<<endl;
      cout<<"$$               2.   手机卡通讯录                     $$"<<endl;
      cout<<"$$               3.   同时修改手机和手机卡的通讯录     $$"<<endl;
      cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
      cout<<"请输入你的选择:"<<endl;
}
void menu::descript()
{
    cout<<"*************************************************************"<<endl;
    cout<<"*        系统默认对手机联系人在my_phonelist.txt文件中进     *"<<endl;
    cout<<"*    行读写,默认对手机卡联系人在my_cardlist.txt文件中进    *"<<endl;
    cout<<"*    行读写,0键退出系统保存文件。                           *"<<endl;
    cout<<"*************************************************************"<<endl;
}
void menu::main_menu()
{
      cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
      cout<<"$$                请输入相应的操作                     $$"<<endl;
      cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
      cout<<"$$             1.    新建联系人                        $$"<<endl;
      cout<<"$$             2.    删除一个联系人                    $$"<<endl;
      cout<<"$$             3.    修改联系人的信息                  $$"<<endl;
      cout<<"$$             4.    查询联系人的信息                  $$"<<endl;
      cout<<"$$             5.    浏览所有人的信息                  $$"<<endl;
      cout<<"$$             6.    将联系人的信息从手机卡转移到手机  $$"<<endl;
      cout<<"&&             7.    将联系人的信息从手机转移到手机卡  $$"<<endl;
      cout<<"$$             0.    退出程序,保存文件                $$"<<endl;
      cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
      cout<<"$$               欢迎使用通讯录系统                    $$"<<endl;
      cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
      cout<<"请输入你的选择:"<<endl;
}
void menu::add_menu()
{
      cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
      cout<<"$$              请选择添加联系人到哪个通讯录           $$"<<endl;
      cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
      cout<<"$$               1.   手机通讯录                       $$"<<endl;
      cout<<"$$               2.   手机卡通讯录                     $$"<<endl;
      cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
      cout<<"请输入你的选择:"<<endl;
}
void menu::cut_menu()
{
      cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
      cout<<"$$              请选择在哪个通讯录删除联系             $$"<<endl;
      cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
      cout<<"$$               1.   手机通讯录                       $$"<<endl;
      cout<<"$$               2.   手机卡通讯录                     $$"<<endl;
      cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
      cout<<"请输入你的选择:"<<endl;
}
void menu::query_menu()
{
      cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
      cout<<"$$              请选择在哪个通讯录查找联系人           $$"<<endl;
      cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
      cout<<"$$               1.   手机通讯录                       $$"<<endl;
      cout<<"$$               2.   手机卡通讯录                     $$"<<endl;
      cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
      cout<<"请输入你的选择:"<<endl;
}
void menu_display_menu()
{
      cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
      cout<<"$$      请选择你要显示哪个通讯录的所有联系人           $$"<<endl;
      cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
      cout<<"$$               1.   手机通讯录                       $$"<<endl;
      cout<<"$$               2.   手机卡通讯录                     $$"<<endl;
      cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
      cout<<"请输入你的选择:"<<endl;
}
/*第7个类:user类*/
class user
{
    phone_list my_phone;
    card_list  my_card;
    menu my_menu;
public:
    user();
    void add();
    void cut();//利用基类指针,调用相应的通讯簿对象(手机通讯簿或手机卡通信簿)的增加函数完成联系人的添加。实现动态联编,体现出多态特点。(下同)
    void display();
    void change();
    void query();
    void move_tophone();
    void move_tocard();
    void copy_tophone();
    void copy_tocard();
    ~user();
};
user::user()
{
    cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"<<endl;
    cout<<"                欢迎进入通讯录管理系统                    "<<endl;
    cout<<"          你目前的手机联系人有:"<<my_phone.get_number()+1<<"人"<<endl;
    cout<<"          你目前的手机卡联系人有:"<<my_card.get_number()+1<<"人"<<endl;
    cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"<<endl;
}
void user::add()
{
    my_menu.add_menu();
    address_list *p;
    int choose;
    cin>>choose;
    switch(choose)
    {
        case 1:  p=&my_phone;
                 p->add();
                 break;
        case 2:  p=&my_card;
                 p->add();
                 break;
        default: cout<<"输入错误,操作介绍"<<endl;
                 return ;
    }
 
}
 
void user::query()
{
    my_menu.query_menu();
    address_list *p;
    int choose;
    string byname;
    cin>>choose;
    switch(choose)
    {
        case 1:  p=&my_phone;
                 cout<<"请输入查询的联系人姓名:";
                 cin>>byname;
                 p->query_byname(byname);
                 break;
        case 2:  p=&my_card;
                 cout<<"请输入查询的联系人姓名:";
                 cin>>byname;
                 p->query_byname(byname);
                 break;
        default: cout<<"输入错误,操作结束"<<endl;
                 return ;
    }
 
}
 
void user::cut()
{
    my_menu.cut_menu();
    address_list *p;
    int choose;
    string bytell;
    cin>>choose;
    switch(choose)
    {
        case 1:p=&my_phone;
               cout<<"请输入要删除的手机号:";
               cin>>bytell;
               p->cut_bytell(bytell);
               cout<<"正在检测手机卡上是否有该联系人信息:"<<endl;
               p=&my_card;
               p->cut_bytell2(bytell);
               break;
 
        case 2:p=&my_card;
               cout<<"请输入要删除的手机号:";
               cin>>bytell;
               p->cut_bytell(bytell);
               cout<<"正在检测手机上是否有该联系人信息:"<<endl;
               p=&my_phone;
               p->cut_bytell2(bytell);
               break;
     default: cout<<"输入错误,操作结束"<<endl;
              return ;
    }
}
 
void user::change()
{
    my_menu.change_menu();
    address_list *p;
    int choose;
    string bytell;
    cin>>choose;
    switch(choose)
    {
        case 1:p=&my_phone;
               cout<<"请输入要修改的手机号:";
               cin>>bytell;
               p->change_bytell(bytell);
               break;
        case 2:p=&my_card;
               cout<<"请输入要修改的手机号:";
               cin>>bytell;
               p->change_bytell(bytell);
               break;
        case 3:
               cout<<"对手机里的信息进行修改 "<<endl;
               p=&my_phone;
               cout<<"请输入要修改的手机号:";
               cin>>bytell;
               p->change_bytell(bytell);
               cout<<"对手机卡里的信息进行修改"<<endl;
               p=&my_card;
               cout<<"请输入要修改的手机号:";
               cin>>bytell;
               p->change_bytell(bytell);
               break;
     default: cout<<"输入错误,操作结束"<<endl;
              return ;
    }
 
}
void user::display()
{
    address_list *p;
    p=&my_phone;
    cout<<"手机联系人:"<<endl;
    p->display();
    p=&my_card;
    cout<<"手机卡联系人:"<<endl;
    p->display();
}
 
void user::copy_tocard()
{
    if(my_phone.get_number()<0) {cout<<"手机通讯录当前没有联系人!"<<endl; return;}
    for(int i=0;i<=my_phone.get_number();i++)
    {
        if(my_card.get_number()>999) {cout<<"手机通讯录容量已满!无法增加新联系人!"<<endl; return ;}
        my_card.copy_set(my_phone.get_name(i),my_phone.get_tell(i));
    }
    cout<<"操作成功!"<<endl;
}
void user::copy_tophone()
{
    if(my_card.get_number()<0) {cout<<"手机卡通讯录当前没有联系人!"<<endl; return;}
    for(int i=0;i<=my_card.get_number();i++)
    {
        if(my_phone.get_number()>999) {cout<<"手机通讯录容量已满!无法增加新联系人!"<<endl; return ;}
         my_phone.copy_set(my_card.get_name(i),my_card.get_tell(i));
 
    }
    cout<<"操作成功!"<<endl;
}
void user::move_tocard()
{
    if(my_phone.get_number()<0) {cout<<"手机通讯录当前没有联系人!"<<endl; return;}
    for(int i=0;i<=my_phone.get_number();i++)
    {
        if(my_phone.get_number()>999) {cout<<"手机卡通讯录容量已满!无法增加新联系人!"<<endl; return ;}
          my_card.copy_set(my_phone.get_name(i),my_phone.get_tell(i));
    }
    my_phone.clear_phone();
    cout<<"操作成功!"<<endl;
}
void user::move_tophone()
{
    if(my_card.get_number()<0) {cout<<"手机卡通讯录当前没有联系人!"<<endl; return;}
    for(int i=0;i<=my_card.get_number();i++)
    {
        if(my_phone.get_number()>999) {cout<<"手机卡通讯录容量已满!无法增加新联系人!"<<endl; return ;}
        my_phone.copy_set(my_card.get_name(i),my_card.get_tell(i));
    }
    my_card.clear_card();
    cout<<"操作成功!"<<endl;
}
user::~user()
{
    cout<<"谢谢使用本系统!您的联系人已存入相关文件中!"<<endl;
}
int main()
{
    menu  my_menu;
    user me;
    my_menu.descript();
    int choose=1,c;
    while(choose!=0)
    {
        my_menu.main_menu();
        cin>>choose;
        switch(choose)
        {
            case 0:
                   break;
            case 1:
                   me.add();
                   break;
            case 2:
                   me.cut();
                   break;
            case 3:
                   me.change();
                   break;
            case 4:
                   me.query();
                   break;
            case 5:
                   me.display();
                   break;
            case 6:
                  cout<<"请选择 1.复制 2移动"<<endl;
                  cin>>c;
                  switch(c)
                  {
                    case 1:
                           me.copy_tophone();
                           break;
                    case 2:
                           me.move_tophone();
                           break;
                    default:
                           cout<<"操作错误!"<<endl;
                           break;
 
                   }
                   break;
            case 7:
                  cout<<"请选择 1.复制 2移动"<<endl;
                  cin>>c;
                  switch(c)
                  {
                    case 1:
                           me.copy_tocard();
                           break;
                    case 2:
                           me.move_tocard();
                           break;
                    default:
                           cout<<"操作错误!"<<endl;
                           break;
                  }
                  break;
 
            }
    }
    return 0;
}