c++通讯录管理系统

1、手机卡联系人类:

表示一个联系人
数据成员包括:姓名、电话号码
成员函数包括:
带参并带默认值的构造函数
一组set函数为数据成员赋值
一组modify函数,修改数据成员的值
重载>>,<<运算符,完成对象的输入和输出操作
实现代码:
class Phonecard_contact    //手机卡联系人类
{
protected:
    string name;          //姓名
    string pho_num;       //电话
public:
    Phonecard_contact(string tname="无姓名",string tpho_num="无号码")//有默认值的构造函数
    {
        name=tname;pho_num=tpho_num;
    }
    void Set(string tname,string tpho_num);     //赋值
    void modify();                              //修改联系人信息
    string getname();
    string getpho_num();
    friend istream&operator>>(istream &input,Phonecard_contact &);
    friend ostream&operator<<(ostream &output,Phonecard_contact &);
};
void Phonecard_contact::Set(string tname,string tpho_num)   //为数据成员赋值
{
    name=tname;pho_num=tpho_num;
}
void Phonecard_contact::modify()                            //修改手机卡簿联系人信息
{
    int a;
    change1:
    {
        cout<<"**************************************"<<endl;
        cout<<"*修改联系人:                         *"<<endl;
        cout<<"*                                    *"<<endl;
        cout<<"*      1.修改联系人姓名              *"<<endl;
        cout<<"*      2.修改联系人号码              *"<<endl;
        cout<<"*      3.修改联系人全部信息          *"<<endl;
        cout<<"*      4.返回上一级                  *"<<endl;
        cout<<"*                                    *"<<endl;
        cout<<"**************************************"<<endl;
        cout<<'\n'<<"修改联系人哪些信息?"<<'\n'<<endl;

        cin>>a;
        switch(a)
        {
            case 1:{
                    cout<<"请重新输入联系人姓名"<<endl;
                    cin>>name;
                    break;
            }
            case 2:{
                    cout<<"请重新输入联系人电话"<<endl;
                    cin>>pho_num;
                    break;
            }
            case 3:{
                    cout<<"请重新输入联系人姓名"<<endl;
                    cin>>name;
                    cout<<"请重新输入联系人电话"<<endl;
                    cin>>pho_num;
                    break;
            }
            case 4:{
                    return;//返回主菜单
            }
            default:{
                    cout<<"选择错误,请重新选择"<<endl;
                    goto change1;//回到change1,重新进行选择
            }
        }
    }
}
string Phonecard_contact::getname()                         //获取姓名
{
    return name;
}
string Phonecard_contact::getpho_num()                      //获取手机号
{
    return pho_num;
}
istream&operator>>(istream &input,Phonecard_contact &obj)   //重载运算符>>
{
    cout<<"请输入联系人姓名"<<endl;
    input>>obj.name;
    cout<<"请输入联系人号码"<<endl;
    input>>obj.pho_num;
    return input;
}
ostream&operator<<(ostream &output,Phonecard_contact &obj)  //重载运算符<<
{
    output<<"联系人姓名:"<<obj.name<<endl;
    output<<"联系人手机号:"<<obj.pho_num<<endl;
    return output;
}

2. 手机联系人(继承于手机卡联系人类):

新增数据成员:籍贯、QQ号
成员函数包括
一组set函数为数据成员赋值
一组modify函数,修改数据成员的值
重载>>,<<运算符,完成数据成员的输入输出操作
实现代码:
class Phone_contact:public Phonecard_contact//手机联系人类,继承手机卡联系人类
{
    string nat_pla;  //籍贯
    string qq;       //QQ
public:
    Phone_contact(string tname="无姓名",string tpho_num="无号码",string tnat_pla="无籍贯",string tqq="无QQ"):Phonecard_contact(tname,tpho_num)//带默认值的构造函数
    {
        nat_pla=tnat_pla;qq=tqq;
    }
    void Set(string tname,string tpho_num,string tnat_pla,string tqq);   //为数据成员赋值
    void modify();                                                       //修改手机簿联系人信息
    string getnat_pla();                                                 //获取籍贯
    string getqq();                                                      //获取QQ
    friend istream&operator>>(istream &input,Phone_contact &);           //重载运算符>>
    friend ostream&operator<<(ostream &output,Phone_contact &);          //重载运算符<<
};
void Phone_contact::Set(string tname,string tpho_num,string tnat_pla,string tqq)//为数据成员赋值
{
    name=tname;pho_num=tpho_num;
    nat_pla=tnat_pla;qq=tqq;
}
void Phone_contact::modify()                                              //修改手机簿联系人信息
{
    int a;                                                             //创建菜单类
    change2:                                                              //方便引用goto
    {
        cout<<"**************************************"<<endl;
        cout<<"*修改联系人:                         *"<<endl;
        cout<<"*                                    *"<<endl;
        cout<<"*      1.修改联系人姓名              *"<<endl;
        cout<<"*      2.修改联系人号码              *"<<endl;
        cout<<"*      3.修改联系人籍贯              *"<<endl;
        cout<<"*      4.修改联系人QQ                *"<<endl;
        cout<<"*      5.修改联系人全部信息          *"<<endl;
        cout<<"*      6.返回上一级                  *"<<endl;
        cout<<"*                                    *"<<endl;
        cout<<"**************************************"<<endl;
        cout<<'\n'<<"修改联系人哪些信息?"<<'\n'<<endl;

        cin>>a;
        switch(a)
        {
            case 1:{                                                       //修改姓名
                    cout<<"请重新输入联系人姓名"<<endl;
                    cin>>name;
                    break;
            }
            case 2:{                                                       //修改号码
                    cout<<"请重新输入联系人号码"<<endl;
                    cin>>pho_num;
                    break;
            }
            case 3:{                                                       //修改籍贯
                    cout<<"请重新输入联系人籍贯"<<endl;
                    cin>>nat_pla;
                    break;
            }
            case 4:{                                                        //修改QQ
                    cout<<"请重新输入联系人QQ"<<endl;
                    cin>>qq;
                    break;
            }
            case 5:{                                                         //全部修改
                    cout<<"请重新输入联系人姓名"<<endl;
                    cin>>name;
                    cout<<"请重新输入联系人号码"<<endl;
                    cin>>pho_num;
                    cout<<"请重新输入联系人籍贯"<<endl;
                    cin>>nat_pla;
                    cout<<"请重新输入联系人QQ"<<endl;
                    cin>>qq;
                    break;
            }
            case 6:{                                                         //返回主菜单
                    return;
            }
            default:{                                                        //错误输入
                    cout<<"选择错误,请重新选择"<<endl;
                    goto change2;                                            //回到change2
            }
        }
    }
}
string Phone_contact::getnat_pla()                                        //获取籍贯
{
    return nat_pla;
}
string Phone_contact::getqq()                                             //获取QQ
{
    return qq;
}
istream&operator>>(istream &input,Phone_contact &obj)                     //重载运算符>>
{
    cout<<"请输入联系人姓名"<<endl;
    input>>obj.name;
    cout<<"请输入联系人号码"<<endl;
    input>>obj.pho_num;
    cout<<"请输入联系人籍贯"<<endl;
    input>>obj.nat_pla;
    cout<<"请输入联系人QQ"<<endl;
    input>>obj.qq;
    return input;
}
ostream&operator<<(ostream &output,Phone_contact &obj)                    //重载运算符<<
{
    output<<"联系人姓名:"<<obj.name<<endl;
    output<<"联系人号码:"<<obj.pho_num<<endl;
    output<<"联系人籍贯:"<<obj.nat_pla<<endl;
    output<<"联系人QQ:"<<obj.qq<<endl;
    return output;
}


3. 定义一个通讯簿抽象类,用来封装以下函数(为支持多态,可以将以下函数封装为纯虚函数)

		增加函数:增加一个联系人
		删除操作:删除一个联系人
		Display:显示所有联系人的信息
		修改某一联系人的信息:
		查询并显示某一联系人的信息:
实现代码:
class Address_book                                  //通讯簿类,都设置成纯虚函数
{
public:
    virtual void newcontact()=0;                    //新建联系人
    virtual void deletecontact(string tpho_num)=0;  //删除联系人信息
    virtual void modify(string tpho_num)=0;         //修改联系人信息
    virtual void query(string tname)=0;             //查询联系人信息
    virtual void browse()=0;                        //显示所有联系人信息
};


4. 手机通讯簿类(这是一个数据库类,继承于通讯簿抽象类):

用于记录手机中存储的所有联系人的信息
	数据成员包括:手机联系人的数量、手机联系人对象数组
	成员函数包括
		构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组
		析构函数:将对象数组中的内容写入到文本文件中。
		增加函数:增加一个联系人
		删除操作:删除一个联系人
		Display:显示所有联系人的信息
		修改某一联系人的信息:
		查询并显示某一联系人的信息:
实现代码:
class Phone_address_book:public Address_book        //手机通讯簿类,继承Address_book类
{
protected:
    int phone_contact_num;                          //手机通讯簿中联系人个数
    vector<Phone_contact>phone_contact;             //利用动态数组储存联系人信息
public:
    Phone_address_book();                           //构造
    ~Phone_address_book();                          //析构
    void newcontact();                              //新建联系人到手机簿
    void deletecontact(string tpho_num);            //删除手机簿上的联系人
    void modify(string tpho_num);                   //修改手机簿上联系人信息
    void query(string tname);                       //查询手机簿上联系人
    void browse();                                  //显示手机簿上所有联系人
    int getphone_contact_num();                     //获取手机簿上联系人个数
    void copy(string tname,string tpho_num);        //将姓名,号码压入动态数组phone_contact
    string getname(int i);                          //获取姓名
    string getpho_num(int i);                       //获取号码
    void clear();                                   //清除手机通讯簿
};
Phone_address_book::Phone_address_book()            //构造函数,读取文本文件的信息,并创造联系人对象数组
{
    ifstream ist("手机.txt");                       //打开文件
    if(!ist)
    {
        cout<<"未找到手机.txt文件"<<endl;
        return;
    }
    char str[80];
    ist.getline(str,80);
    ist.getline(str,80);                          //将光标移到下一行
    ist.getline(str,80);
    ist.getline(str,80);
    phone_contact_num=-1;                           //数组存储从0开始,所以令初值为-1
    string tname,tpho_num,tnat_ple,tqq;
    while(ist>>tname>>tpho_num>>tnat_ple>>tqq)      //读取文件中联系人的姓名 号码 籍贯和QQ
    {
        Phone_contact temp;
        temp.Set(tname,tpho_num,tnat_ple,tqq);
        phone_contact.push_back(temp);              //利用动态数组储存联系人信息
        phone_contact_num++;                        //联系人个数
    }
    ist.close();                                    //关闭文件
}
Phone_address_book::~Phone_address_book()           //析构函数,将对象数组的内容写入文本文件
{
    ofstream ost("手机.txt");                        //打开文件
    ost<<"**************************************************"<<endl;
    ost<<"*                       手机联系人                                *"<<endl;
    ost<<"**************************************************"<<endl;
    //ost<<"姓名"<<'\t'<<'\t'<<"号码"<<'\t'<<'\t'<<"籍贯"<<'\t'<<'\t'<<"QQ"<<'\t'<<'\t'<<endl;
    ost.setf(ios::left);
    ost.width(16);
    ost<<"姓名";
    ost.width(16);
    ost<<"号码";
    ost.width(16);
    ost<<"籍贯";
    ost.width(16);
    ost<<"QQ"<<endl;
    for(int i=0;i<=phone_contact_num;i++)            //将对象数组的内容写入文本文件
    {
        ost.setf(ios::left);                         //格式控制,左对齐
        ost.width(16);                               //设置宽度为16,两个'\t'的长度
        ost<<phone_contact[i].getname();             //输出姓名
        ost.width(16);
        ost<<phone_contact[i].getpho_num();          //输出号码
        ost.width(16);
        ost<<phone_contact[i].getnat_pla();          //输出籍贯
        ost.width(16);
        ost<<phone_contact[i].getqq();               //输出QQ
        ost<<endl;
        //ost<<phone_contact[i]<<endl;
    }
    phone_contact_num=-1;                             //手机联系人人数归-1
    phone_contact.clear();                            //将动态数组容器清空
    ost.close();                                      //关闭文件
}
void Phone_address_book::newcontact()               //新建联系人
{
    if(phone_contact_num>=1000)                       //判断手机内存大小
    {
        cout<<"手机通讯簿内存已满。"<<endl;
        cout<<"请重新选择操作。"<<endl;
        return ;
    }
    else
    {
        Phone_contact temp;                           //建立手机联系人类
        cin>>temp;
        phone_contact.push_back(temp);                //将信息压入动态数组
        phone_contact_num++;                          //人数加1
        cout<<"新建联系人成功。"<<endl;
    }
}
void Phone_address_book::deletecontact(string tpho_num) //删除联系人
{
    if(phone_contact_num<0)                             //判断是否有联系人
    {
        cout<<"手机通讯部内无联系人,请重新选择操作。"<<endl;
        return ;
    }
    else
    {
        bool flag=false;                                 //判断是否找到目标联系人
        for(int i=0;i<=phone_contact_num;i++)            //遍历
        {
            if(phone_contact[i].getpho_num()==tpho_num)  //找到目标联系人
            {
                flag=true;                               //找到目标联系人
                cout<<"要删除的联系人信息是:"<<endl;
                cout<<phone_contact[i];
                cout<<"是否删除该联系人"<<endl;
                cout<<"1.确定删除"<<'\n'<<"2.取消删除"<<endl;
                int sign;
                cin>>sign;
                if(sign==1)                               //删除目标联系人
                {
                    phone_contact.erase(phone_contact.begin()+i);
                    phone_contact_num--;
                    cout<<"删除成功!"<<endl;
                }
                else
                {
                    continue;
                }
            }
        }
        if(!flag)
        {
            cout<<"手机通讯簿中无该联系人,请重新选择操作。"<<endl;
            return ;
        }
    }
}
void Phone_address_book::modify(string tpho_num)    //修改联系人
{
    if(phone_contact_num<0)                         //判断是否有联系人
    {
        cout<<"手机通讯簿无联系人,请重新选择。"<<endl;
        return ;
    }
    else
    {
        bool flag=false;                            //判断是否找到目标联系人
        for(int i=0;i<=phone_contact_num;i++)       //遍历
        {
            if(phone_contact[i].getpho_num()==tpho_num)//找到目标联系人
            {
                flag=true;                          //找到目标联系人
                cout<<"要修改的联系人信息是:"<<endl;
                cout<<phone_contact[i];
                cout<<"是否修改该联系人"<<endl;
                cout<<"1.确定修改"<<'\n'<<"2.取消修改"<<endl;
                int sign;
                cin>>sign;
                if(sign==1)
                {
                    phone_contact[i].modify();      //进行目标联系人的信息修改
                    cout<<"修改成功"<<endl;
                    return;
                }
                else continue;
            }
        }
        if(!flag)
        {
            cout<<"手机通讯簿中无该联系人,请重新选择。"<<endl;
            return;
        }
    }
}
void Phone_address_book::query(string tname)        //查询联系人
{
    if(phone_contact_num<0)                         //判断手机通讯簿是否有联系人
    {
        cout<<"手机通讯簿无联系人,请重新选择。"<<endl;
        return;
    }
    else
    {
        bool flag=false;                            //判断手机通讯簿是否有该联系人
        for(int i=0;i<=phone_contact_num;i++)       //遍历
        {
            if(phone_contact[i].getname()==tname)   //标记有该联系人,并输出
            {
                flag=true;
                cout<<"目标联系人信息"<<endl;
                cout<<phone_contact[i];
                return ;
            }
        }
        if(!flag)                                   //判断是否有该联系人
        {
            cout<<"手机通讯簿中无该人信息,请重新选择。"<<endl;
            return;
        }
    }
}
void Phone_address_book::browse()                   //显示联系人
{
    if(phone_contact_num<0)                         //判断手机通讯簿是否有联系人
    {
        cout<<"手机通讯簿无联系人信息,请重新选择。"<<endl;
        return;
    }
    else                                            //信息输出
    {
        cout<<"手机通讯簿中有联系人个数:"<<phone_contact_num+1<<endl;//输出个数
        cout<<"信息如下:"<<endl;
        vector<Phone_contact>::iterator temp;                       //phone_contact类型的指针
        for(temp=phone_contact.begin();temp!=phone_contact.end();temp++)//遍历
        {
            cout<<(*temp);
            cout<<endl;
        }
    }
}
int Phone_address_book::getphone_contact_num()      //获取联系人个数
{
    return phone_contact_num;
}
void Phone_address_book::copy(string tname,string tpho_num)//将目标姓名 号码压入动态数组
{
    for(int i=0;i<=phone_contact_num;i++)           //遍历
    {
        if(phone_contact[i].getname()==tname&&phone_contact[i].getpho_num()==tpho_num)
            {cout<<"姓名为;"<<tname<<"号码为:"<<tpho_num<<"的用户已存在!"<<endl;
        return;}
    }
    Phone_contact temp(tname,tpho_num,"无籍贯","无QQ");//建立临时对象
    phone_contact.push_back(temp);                  //压入动态数组
    phone_contact_num++;                            //人数+1
    cout<<"姓名为:"<<tname<<"号码为:"<<tpho_num<<"的用户已存储完!"<<endl;
}
string Phone_address_book::getname(int i)           //获取手机通讯簿中第i个联系人姓名
{
    return phone_contact[i].getname();
}
string Phone_address_book::getpho_num(int i)        //获取手机通讯簿中第i个联系人号码
{
    return phone_contact[i].getpho_num();
}
void Phone_address_book::clear()                    //手机通讯簿清空
{
    phone_contact.clear();                          //动态数组清空
    phone_contact_num=-1;                           //人数归为-1
}

5. 手机卡通信簿类(这是一个数据库类,继承于通讯簿抽象类):

用于记录手机卡中存储的所有联系人的信息
	数据成员包括:手机联系人的数量、手机联系人对象数组
	成员函数包括
		构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组
		析构函数:将对象数组中的内容写入到文本文件中。
		增加函数:增加一个联系人
		删除操作:删除一个联系人
		Display:显示所有联系人的信息
		修改某一联系人的信息:
		查询并显示某一联系人的信息:
实现代码
class Phonecard_address_book:public Address_book        //手机卡通讯簿类,继承Address_book类
{
protected:
    int phonecard_contact_num;                          //手机卡通讯簿中联系人个数
    vector<Phonecard_contact>phonecard_contact;         //利用动态数组储存联系人信息
public:
    Phonecard_address_book();                           //构造
    ~Phonecard_address_book();                          //析构
    void newcontact();                                  //新建联系人到手机卡簿
    void deletecontact(string tpho_num);                //删除手机卡簿上的联系人
    void modify(string tpho_num);                       //修改手机卡簿上联系人信息
    void query(string tname);                           //查询手机卡簿上联系人
    void browse();                                      //显示手机卡簿上所有联系人
    int getphonecard_contact_num();                     //获取手机卡簿上联系人个数
    void copy(string tname,string tpho_num);            //将姓名,号码压入动态数组phonecard_contact
    string getname(int i);                              //获取姓名
    string getpho_num(int i);                           //获取号码
    void clear();                                       //清除手机卡通讯簿
};
Phonecard_address_book::Phonecard_address_book()        //构造函数,读取文本文件的信息,并创造联系人对象数组
{
    ifstream ist("手机卡.txt");                         //打开文件
    if(!ist)
    {
        cout<<"未找到手机卡.txt文件"<<endl;
        return;
    }
    char str[80];
    ist.getline(str,80);
    ist.getline(str,80);                               //将光标移到下一行
    ist.getline(str,80);
    ist.getline(str,80);
    phonecard_contact_num=-1;                           //数组存储从0开始,所以令初值为-1
    string tname,tpho_num,tnat_ple,tqq;
    while(ist>>tname>>tpho_num)                         //读取文件中联系人的姓名和号码
    {
        Phonecard_contact temp;
        temp.Set(tname,tpho_num);
        phonecard_contact.push_back(temp);              //利用动态数组储存联系人信息
        phonecard_contact_num++;                        //联系人个数
    }
    ist.close();                                        //关闭文件
}
Phonecard_address_book::~Phonecard_address_book()       //析构函数,将对象数组的内容写入文本文件
{
    ofstream ost("手机卡.txt");                         //打开文件
    ost<<"*********************************************"<<endl;
    ost<<"*                 手机卡联系人                         *"<<endl;
    ost<<"*********************************************"<<endl;
    //ost<<"姓名"<<'\t'<<'\t'<<"号码"<<'\t'<<'\t'<<endl;
    ost.setf(ios::left);
    ost.width(16);
    ost<<"姓名";
    ost.width(16);
    ost<<"号码"<<endl;
    for(int i=0;i<=phonecard_contact_num;i++)            //将对象数组的内容写入文本文件
    {
        ost.setf(ios::left);                             //格式控制,左对齐
        ost.width(16);                                   //设置宽度为16,两个'\t'的长度
        ost<<phonecard_contact[i].getname();             //输出姓名
        ost.width(16);
        ost<<phonecard_contact[i].getpho_num();
        ost<<endl;                                       //输出号码
        //ost<<phonecard_contact[i]<<endl;
    }
    phonecard_contact_num=-1;                             //手机卡联系人人数归-1
    phonecard_contact.clear();                            //将动态数组容器清空
    ost.close();                                          //关闭文件
}
void Phonecard_address_book::newcontact()                 //新建联系人
{
    if(phonecard_contact_num>=1000)                       //判断手机卡内存大小
    {
        cout<<"手机卡通讯簿内存已满。"<<endl;
        cout<<"请重新选择操作。"<<endl;
        return ;
    }
    else
    {
        Phonecard_contact temp;                           //建立手机卡联系人类
        cin>>temp;
        phonecard_contact.push_back(temp);                //将信息压入动态数组
        phonecard_contact_num++;                          //人数加1
        cout<<"新建联系人成功。"<<endl;
    }
}
void Phonecard_address_book::deletecontact(string tpho_num) //删除联系人
{
    if(phonecard_contact_num<0)                             //判断是否有联系人
    {
        cout<<"手机卡通讯簿内无联系人,请重新选择操作。"<<endl;
        return ;
    }
    else
    {
        bool flag=false;                                     //判断是否找到目标联系人
        for(int i=0;i<=phonecard_contact_num;i++)            //遍历
        {
            if(phonecard_contact[i].getpho_num()==tpho_num)  //找到目标联系人
            {
                flag=true;                                   //找到目标联系人
                cout<<"要删除的联系人信息是:"<<endl;
                cout<<phonecard_contact[i];
                cout<<"是否删除该联系人"<<endl;
                cout<<"1.确定删除"<<'\n'<<"2.取消删除"<<endl;
                int sign;
                cin>>sign;
                if(sign==1)                                   //删除目标联系人
                {
                    phonecard_contact.erase(phonecard_contact.begin()+i);
                    phonecard_contact_num--;
                    cout<<"删除成功!"<<endl;
                }
                else
                {
                    continue;
                }
            }
        }
        if(!flag)
        {
            cout<<"手机卡通讯簿中无该联系人,请重新选择操作。"<<endl;
            return ;
        }
    }
}
void Phonecard_address_book::modify(string tpho_num)    //修改联系人
{
    if(phonecard_contact_num<0)                         //判断是否有联系人
    {
        cout<<"手机卡通讯簿无联系人,请重新选择。"<<endl;
        return ;
    }
    else
    {
        bool flag=false;                                 //判断是否找到目标联系人
        for(int i=0;i<=phonecard_contact_num;i++)        //遍历
        {
            if(phonecard_contact[i].getpho_num()==tpho_num)//找到目标联系人
            {
                flag=true;                               //找到目标联系人
                cout<<"要修改的联系人信息是:"<<endl;
                cout<<phonecard_contact[i];
                cout<<"是否修改该联系人"<<endl;
                cout<<"1.确定修改"<<'\n'<<"2.取消修改"<<endl;
                int sign;
                cin>>sign;
                if(sign==1)
                {
                    phonecard_contact[i].modify();       //进行目标联系人的信息修改
                    cout<<"修改成功"<<endl;
                    return;
                }
                else continue;
            }
        }
        if(!flag)
        {
            cout<<"手机卡通讯簿中无该联系人,请重新选择。"<<endl;
            return;
        }
    }
}
void Phonecard_address_book::query(string tname)        //查询联系人
{
    if(phonecard_contact_num<0)                         //判断手机通讯簿是否有联系人
    {
        cout<<"手机卡通讯簿无联系人,请重新选择。"<<endl;
        return;
    }
    else
    {
        bool flag=false;                                //判断手机通讯簿是否有该联系人
        for(int i=0;i<=phonecard_contact_num;i++)       //遍历
        {
            if(phonecard_contact[i].getname()==tname)   //标记有该联系人,并输出
            {
                flag=true;
                cout<<"目标联系人信息"<<endl;
                cout<<phonecard_contact[i];
                return ;
            }
        }
        if(!flag)                                       //判断是否有该联系人
        {
            cout<<"手机卡通讯簿中无该人信息,请重新选择。"<<endl;
            return;
        }
    }
}
void Phonecard_address_book::browse()                   //显示联系人
{
    if(phonecard_contact_num<0)                         //判断手机卡通讯簿是否有联系人
    {
        cout<<"手机卡通讯簿无联系人信息,请重新选择。"<<endl;
        return;
    }
    else                                                //信息输出
    {
        cout<<"手机卡通讯簿中有联系人个数:"<<phonecard_contact_num+1<<endl;//输出个数
        cout<<"信息如下:"<<endl;
        vector<Phonecard_contact>::iterator temp;                       //phone_contact类型的指针
        for(temp=phonecard_contact.begin();temp!=phonecard_contact.end();temp++)//遍历
        {
            cout<<(*temp);
            cout<<endl;
        }
    }
}
int Phonecard_address_book::getphonecard_contact_num()      //获取联系人个数
{
    return phonecard_contact_num;
}
void Phonecard_address_book::copy(string tname,string tpho_num)//将目标姓名 号码压入动态数组
{
    for(int i=0;i<=phonecard_contact_num;i++)           //遍历
    {
        //cout<<i<<endl;
        if(phonecard_contact[i].getname()==tname&&phonecard_contact[i].getpho_num()==tpho_num)
            {cout<<"姓名为:"<<tname<<"号码为:"<<tpho_num<<"的用户已存在!"<<endl;
        return;}
    }
    Phonecard_contact temp;                             //建立临时对象
    temp.Set(tname,tpho_num);
    phonecard_contact.push_back(temp);                  //压入动态数组
    phonecard_contact_num++;                            //人数+1
    cout<<"姓名为;"<<tname<<"号码为:"<<tpho_num<<"的用户已存储完!"<<endl;
}
string Phonecard_address_book::getname(int i)           //获取手机卡通讯簿中第i个联系人姓名
{
    return phonecard_contact[i].getname();
}
string Phonecard_address_book::getpho_num(int i)        //获取手机卡通讯簿中第i个联系人号码
{
    return phonecard_contact[i].getpho_num();
}
void Phonecard_address_book::clear()                    //手机卡通讯簿清空
{
    phonecard_contact.clear();                          //动态数组清空
    phonecard_contact_num=-1;                           //人数归为-1
}

6. 用户类(这是一个操作类,完成通讯簿的操作):

用户拥有两个通讯簿(一个是手机中存储的联系人,一个是手机卡中存储的联系人),并且可以对通讯录进行管理
	数据成员包括:两个通讯簿对象
	成员函数包括(成员函数体现用户的行为):
		添加联系人:利用基类指针,调用相应的通讯簿对象(手机通讯簿或手机卡通信簿)的增加函数完成联系人的添加。实现动态联编,体现出多态特点。(下同)
		删除联系人:调用相应的通讯簿对象的删除操作删除一个联系人
		Display:显示相应的通讯簿中联系人的信息
		修改某一联系人的信息:调用通讯簿对象的函数完成操作
		查询并显示某一联系人的信息:调用通讯簿对象的函数完成操作
		将手机卡中的存储的联系人的信息移动到手机中
		将手机中存储的联系人的信息移动到手机卡中
		将手机卡中的存储的联系人的信息复制到手机中
		将手机中存储的联系人的信息复制到手机卡中
实现代码:
class User
{
    Phone_address_book phone_address_book;
    Phonecard_address_book phonecard_address_book;
    Menu menu;
public:
    User();                         //构造
    ~User();                        //析构
    void New();                     //新建联系人
    void Delete();                  //删除联系人
    void modify();                  //修改联系人信息
    void query();                   //查询联系人信息
    void browse();                  //显示全部联系人信息
    void move_card_to_phone();      //将手机卡通讯簿的联系人转移到手机通讯簿上
    void move_phone_to_card();      //将手机通讯簿的联系人转移到手机卡通讯簿上
    void copy_card_to_phone();      //复制手机卡通讯簿联系人信息到手机通讯簿上
    void copy_phone_to_card();      //复制手机通讯簿联系人信息到手机卡通讯簿上
};
User::User()                        //构造函数,实现用户友好型
{
    cout<<"**********************************"<<endl;
    cout<<"*         欢迎来到窝瓜的         *"<<endl;
    cout<<"*         通讯录管理系统         *"<<endl;
    cout<<"*--------------------------------*"<<endl;
    cout<<"*当前联系人个数:                *"<<endl;
    cout<<"*   手机通讯簿上有"<<phone_address_book.getphone_contact_num()+1<<"个联系人      *"<<endl;
    cout<<"*   手机卡通讯簿上有"<<phonecard_address_book.getphonecard_contact_num()+1<<"个联系人    *"<<endl;
    cout<<"*                                *"<<endl;
    cout<<"**********************************"<<endl;
    cout<<'\n'<<endl;
    system("pause");
}
User::~User()                       //析构函数,实现用户友好型
{
    cout<<"**********************************"<<endl;
    cout<<"*         感谢使用窝瓜的         *"<<endl;
    cout<<"*         通讯录管理系统         *"<<endl;
    cout<<"*--------------------------------*"<<endl;
    cout<<"*当前联系人个数:                *"<<endl;
    cout<<"*   手机通讯簿上有"<<phone_address_book.getphone_contact_num()+1<<"个联系人      *"<<endl;
    cout<<"*   手机卡通讯簿上有"<<phonecard_address_book.getphonecard_contact_num()+1<<"个联系人    *"<<endl;
    cout<<"*                                *"<<endl;
    cout<<"**********************************"<<endl;
    cout<<'\n'<<endl;
    system("pause");                //冻解屏幕,便于观察程序的执行结果
	system("cls");                  //清屏

}
void User::New()                    //新建联系人
{
    change3:{
            system("cls");
            menu.newMenu();         //引用菜单类的新建菜单
            Address_book *temp;     //创建指向通讯簿类的指针
            int sign;               //进行选择
            cin>>sign;
            switch(sign)
            {
                case 1:{            //新建联系人到手机通讯簿
                        temp=&phone_address_book;//指针指向手机通讯簿对象
                        temp->newcontact();//调用手机通讯簿的新建联系人函数
                        break;
                }
                case 2:{            //新建联系人到手机卡通讯簿
                        temp=&phonecard_address_book;//指针指向手机卡通讯簿
                        temp->newcontact();//调用手机卡通讯簿的新建联系人函数
                        break;
                }
                case 3:{            //返回上一级
                        return;
                }
                default:{           //输入错误
                        cout<<"输入有误,请重新选择。"<<endl;
                        system("pause");
                        goto change3;//重新选择
                }
            }
    }
}
void User::Delete()                 //删除联系人
{
    change4:{
            system("cls");
            menu.deleteMenu();      //调用菜单类的删除菜单
            Address_book *temp;     //创建指向通讯簿类的指针
            int sign;               //用户进行选择
            cin>>sign;
            string tpho_num;
            switch(sign)
            {
                case 1:{            //删除手机通讯簿的联系人
                        cout<<"请输入要删除的联系人号码"<<endl;
                        cin>>tpho_num;
                        temp=&phone_address_book;//指针指向手机通讯簿
                        temp->deletecontact(tpho_num);//调用删除函数
                        break;
                }
                case 2:{            //删除手机卡通讯簿的联系人
                        cout<<"请输入要删除的联系人号码"<<endl;
                        cin>>tpho_num;
                        temp=&phonecard_address_book;//指针指向手机卡通讯簿
                        temp->deletecontact(tpho_num);//调用删除函数
                        break;
                }
                case 3:{            //返回上一级
                        return;
                }
                default:{           //输入错误
                        cout<<"输入有误,请重新选择。"<<endl;
                        system("pause");
                        goto change4;
                }
            }
    }
}
void User::modify()                 //修改联系人信息
{
    change5:{
            system("cls");
            Address_book *temp;     //创建指向通讯簿类的指针
            menu.modifyMenu();      //调用菜单类的修改函数
            int sign;
            cin>>sign;
            string tpho_num;
            switch(sign){
                        case 1:{                //修改手机通讯簿联系人信息
                                cout<<"请输入要修改联系人的号码。"<<endl;
                                cin>>tpho_num;
                                temp=&phone_address_book;//指针指向手机通讯簿
                                temp->modify(tpho_num);//调用修改函数
                                break;
                        }
                        case 2:{                //修改手机卡通讯簿联系人信息
                                cout<<"请输入要修改联系人的号码。"<<endl;
                                cin>>tpho_num;
                                temp=&phonecard_address_book;//指针指向手机卡通讯簿
                                temp->modify(tpho_num);//调用修改函数
                                break;
                        }
                        case 3:{                //同时修改手机和手机卡通讯簿中联系人信息
                                cout<<"请输入要修改联系人的号码。"<<endl;
                                cin>>tpho_num;
                                cout<<"--------------手机通讯簿------------"<<endl;
                                temp=&phone_address_book;//指针指向手机通讯簿
                                temp->modify(tpho_num);
                                cout<<"-------------手机卡通讯簿-----------"<<endl;
                                temp=&phonecard_address_book;//指针指向手机卡通讯簿
                                temp->modify(tpho_num);
                                break;
                        }
                        case 4:{                //返回上一级
                                return;
                        }
                        default:{               //输入错误
                                cout<<"输入有误,请重新输入。"<<endl;
                                system("pause");
                                goto change5;
                        }
            }
    }
}
void User::query()                  //查询联系人信息
{
    change6:
    {
        system("cls");
        menu.queryMenu();           //调用菜单类的查询函数
        Address_book *temp;         //创建指向通讯簿的指针
        int sign;
        string tname;
        cin>>sign;
        switch(sign)
        {
            case 1:{                //查询手机通讯簿中联系人信息
                    cout<<"请输入要查询的联系人姓名"<<endl;
                    cin>>tname;
                    temp=&phone_address_book;//指针指向手机通讯簿
                    temp->query(tname);//调用查询函数
                    break;
            }
            case 2:{                //查询手机卡通讯簿中联系人信息
                    cout<<"请输入要查询的联系人姓名"<<endl;
                    cin>>tname;
                    temp=&phonecard_address_book;//指针指向手机卡通讯簿
                    temp->query(tname);//调用查询函数
                    break;
            }
            case 3:{                    //查询手机和手机卡通讯簿中联系人信息
                    cout<<"请输入要查询的联系人姓名"<<endl;
                    cin>>tname;
                    cout<<"--------------手机通讯簿------------"<<endl;
                    temp=&phone_address_book;//指针指向手机通讯簿
                    temp->query(tname);//调用查询函数
                    cout<<"-------------手机卡通讯簿-----------"<<endl;
                    temp=&phonecard_address_book;//指针指向手机卡通讯簿
                    temp->query(tname);//调用查询函数
                    break;
            }
            case 4:{                    //返回上一级
                    return;
            }
            default:{                   //输入有误
                    cout<<"输入有误,请重新输入。"<<endl;
                    goto change6;
            }
        }
    }
}
void User::browse()                 //显示联系人信息
{
    change7:
    {
        system("cls");
        menu.browseMenu();          //调用菜单浏览函数
        Address_book *temp;         //创建指向通讯簿的指针
        int sign;
        cin>>sign;
        switch(sign)
        {
            case 1:{                //显示手机通讯簿中的联系人信息
                    cout<<"--------------手机通讯簿------------"<<endl;
                    temp=&phone_address_book;//指向手机通讯簿
                    temp->browse();
                    break;
            }
            case 2:{                //显示手机卡通讯簿中联系人信息
                    cout<<"-------------手机卡通讯簿-----------"<<endl;
                    temp=&phonecard_address_book;//只想手机卡通讯簿
                    temp->browse();
                    break;
            }
            case 3:{                //显示手机和手机卡通讯簿中联系人信息
                    cout<<"--------------手机通讯簿------------"<<endl;
                    temp=&phone_address_book;
                    temp->browse();
                    cout<<"-------------手机卡通讯簿-----------"<<endl;
                    temp=&phonecard_address_book;
                    temp->browse();
                    break;
            }
            case 4:{                //返回上一级
                    return;
            }
            default:{               //输入有误
                    cout<<"输入有误,请重新输入。"<<endl;
                    system("pause");
                    goto change7;
            }
        }
    }
}
void User::move_phone_to_card()     //将手机通讯簿中的联系人转移到手机卡通讯簿上
{
    if(phone_address_book.getphone_contact_num()<0)//判断手机通讯簿中有无联系人
    {
        cout<<"手机通讯簿内无联系人。"<<endl;
        return;
    }
    else
    {
        for(int i=0;i<=phone_address_book.getphone_contact_num();i++)//遍历手机通讯簿联系人
        {
            if(phonecard_address_book.getphonecard_contact_num()>=1000)//判断手机卡通讯簿内存是否已满
            {
                cout<<"手机卡通讯簿容量已满。"<<endl;
                return;
            }
            phonecard_address_book.copy(phone_address_book.getname(i),phone_address_book.getpho_num(i));
        }
        phone_address_book.clear();//手机通讯簿清空
        cout<<"移动成功。"<<endl;
    }
}
void User::move_card_to_phone()     //将手机卡通讯簿中的联系人转移到手机通讯簿上
{
    if(phonecard_address_book.getphonecard_contact_num()<0)//判断手机卡通讯簿中有无联系人
    {
        cout<<"手机卡通讯簿内无联系人。"<<endl;
        return;
    }
    else
    {
        for(int i=0;i<=phonecard_address_book.getphonecard_contact_num();i++)//遍历手机卡通讯簿
        {
            if(phone_address_book.getphone_contact_num()>=1000)//判断手机通讯簿内存是否已满
            {
                cout<<"手机通讯簿容量已满。"<<endl;
                return;
            }
            phone_address_book.copy(phonecard_address_book.getname(i),phonecard_address_book.getpho_num(i));
        }
        phonecard_address_book.clear();//手机卡通讯簿清空
        cout<<"移动成功。"<<endl;
    }
}
void User::copy_phone_to_card()     //将手机通讯簿中的联系人复制到手机卡通讯簿上
{
    //cout<<phone_address_book.getphone_contact_num()<<endl;
    if(phone_address_book.getphone_contact_num()<0)//判断手机通讯簿中有无联系人
    {
        cout<<"手机通讯簿内无联系人。"<<endl;
        return;
    }
    else
    {
        for(int i=0;i<=phone_address_book.getphone_contact_num();i++)//遍历手机通讯簿联系人
        {
            //cout<<i<<endl;
            if(phonecard_address_book.getphonecard_contact_num()>=1000)//判断手机卡通讯簿内存是否已满
            {
                cout<<"手机卡通讯簿容量已满。"<<endl;
                return;
            }
            phonecard_address_book.copy(phone_address_book.getname(i),phone_address_book.getpho_num(i));
        }
        cout<<"复制成功。"<<endl;
    }
}
void User::copy_card_to_phone()     //将手机卡通讯簿中的联系人复制到手机通讯簿上
{
    if(phonecard_address_book.getphonecard_contact_num()<0)//判断手机卡通讯簿中有无联系人
    {
        cout<<"手机卡通讯簿内无联系人。"<<endl;
        return;
    }
    else
    {
        for(int i=0;i<=phonecard_address_book.getphonecard_contact_num();i++)//遍历手机卡通讯簿
        {
            if(phone_address_book.getphone_contact_num()>=1000)//判断手机通讯簿内存是否已满
            {
                cout<<"手机通讯簿容量已满。"<<endl;
                return;
            }
            phone_address_book.copy(phonecard_address_book.getname(i),phonecard_address_book.getpho_num(i));
        }
        cout<<"复制成功。"<<endl;
    }
}

7. 界面菜单类:用来给出操作提示

数据成员:可以不定义数据成员
成员函数:Display函数:显示操作菜单的提示。说明:可以根据需要定义多个函数,显示不同的菜单(操作提示)。
实现代码:
class Menu//界面菜单类
{
public:
    void mainMenu();//主菜单
    void newMenu();//新建菜单
    void deleteMenu();//删除菜单
    void modifyMenu();//修改菜单
    void queryMenu();//查询菜单
    void browseMenu();//浏览菜单
    void archivedMenu();//转存菜单
};
void Menu::mainMenu()               //主菜单
{
    cout<<"**************************************"<<endl;
    cout<<"*----------欢迎来到窝瓜的------------*"<<endl;
    cout<<"*----------通讯录管理系统------------*"<<endl;
    cout<<"**************************************"<<endl;
    cout<<"*主菜单:                             *"<<endl;
    cout<<"*           0.退出                   *"<<endl;
    cout<<"*           1.新建联系人             *"<<endl;
    cout<<"*           2.删除联系人             *"<<endl;
    cout<<"*           3.修改联系人             *"<<endl;
    cout<<"*           4.查询联系人             *"<<endl;
    cout<<"*           5.浏览联系人             *"<<endl;
    cout<<"*           6.转存联系人             *"<<endl;
    cout<<"**************************************"<<endl;
    cout<<'\n'<<"请输入你的选择"<<'\n'<<endl;
}
void Menu::newMenu()                //新建菜单
{
    cout<<"**************************************"<<endl;
    cout<<"*新建联系人:                         *"<<endl;
    cout<<"*                                    *"<<endl;
    cout<<"*          1.手机通讯录              *"<<endl;
    cout<<"*          2.手机卡通讯录            *"<<endl;
    cout<<"*          3.返回主菜单              *"<<endl;
    cout<<"*                                    *"<<endl;
    cout<<"**************************************"<<endl;
    cout<<'\n'<<"新建联系人到那个通讯录?"<<"\n"<<endl;
}
void Menu::deleteMenu()             //删除菜单
{
    cout<<"**************************************"<<endl;
    cout<<"*删除联系人:                         *"<<endl;
    cout<<"*                                    *"<<endl;
    cout<<"*          1.手机通讯录              *"<<endl;
    cout<<"*          2.手机卡通讯录            *"<<endl;
    cout<<"*          3.返回主菜单              *"<<endl;
    cout<<"*                                    *"<<endl;
    cout<<"**************************************"<<endl;
    cout<<'\n'<<"删除哪个通讯录的联系人?"<<'\n'<<endl;
}
void Menu::modifyMenu()        //修改菜单
{
    cout<<"**************************************"<<endl;
    cout<<"*修改联系人:                         *"<<endl;
    cout<<"*                                    *"<<endl;
    cout<<"*      1.手机通讯簿                  *"<<endl;
    cout<<"*      2.手机卡通讯簿                *"<<endl;
    cout<<"*      3.手机和手机卡通讯簿          *"<<endl;
    cout<<"*      4.返回主菜单                  *"<<endl;
    cout<<"*                                    *"<<endl;
    cout<<"**************************************"<<endl;
    cout<<'\n'<<"修改哪个通讯簿联系人?"<<'\n'<<endl;
}
void Menu::queryMenu()              //查询菜单
{
    cout<<"**************************************"<<endl;
    cout<<"*查询联系人:                         *"<<endl;
    cout<<"*                                    *"<<endl;
    cout<<"*      1.手机通讯录                  *"<<endl;
    cout<<"*      2.手机卡通讯录                *"<<endl;
    cout<<"*      3.手机通讯录和手机卡通讯录    *"<<endl;
    cout<<"*      4.返回主菜单                  *"<<endl;
    cout<<"*                                    *"<<endl;
    cout<<"**************************************"<<endl;
    cout<<'\n'<<"查询哪个通讯录的联系人?"<<'\n'<<endl;
}
void Menu::browseMenu()             //浏览菜单
{
    cout<<"**************************************"<<endl;
    cout<<"*浏览联系人:                         *"<<endl;
    cout<<"*                                    *"<<endl;
    cout<<"*      1.手机通讯录                  *"<<endl;
    cout<<"*      2.手机卡通讯录                *"<<endl;
    cout<<"*      3.手机通讯录和手机卡通讯录    *"<<endl;
    cout<<"*      4.返回主菜单                  *"<<endl;
    cout<<"*                                    *"<<endl;
    cout<<"**************************************"<<endl;
    cout<<'\n'<<"浏览哪个通讯录的联系人?"<<'\n'<<endl;
}
void Menu::archivedMenu()           //转存菜单
{
    cout<<"**************************************"<<endl;
    cout<<"*转存联系人:                         *"<<endl;
    cout<<"*                                    *"<<endl;
    cout<<"* 1.将联系人信息从手机移动到手机卡上 *"<<endl;
    cout<<"* 2.将联系人信息从手机卡移动到手机上 *"<<endl;
    cout<<"* 3.将联系人信息从手机复制到手机卡上 *"<<endl;
    cout<<"* 4.将联系人信息从手机卡复制到手机上 *"<<endl;
    cout<<"* 5.返回上一级                       *"<<endl;
    cout<<"*                                    *"<<endl;
    cout<<"**************************************"<<endl;
    cout<<'\n'<<"请输入你的选择"<<'\n'<<endl;
}

主函数:

int main()
{
    User user;
    Menu menu;
    int sign=1;
    while(sign!=0)
    {
        change8:{
                system("cls");      //清屏
                menu.mainMenu();    //调用菜单类中的主菜单函数
                cin>>sign;          //用户进行选择
                switch(sign)
                {
                    case 1:{        //新建联系人
                            user.New();
                            goto change8;
                    }
                    case 2:{        //删除联系人
                            user.Delete();
                            goto change8;
                    }
                    case 3:{        //修改联系人
                            user.modify();
                            system("pause");
                            goto change8;
                    }
                    case 4:{        //查询联系人
                            user.query();
                            system("pause");
                            goto change8;
                    }
                    case 5:{        //显示联系人
                            user.browse();
                            system("pause");
                            goto change8;
                    }
                    case 6:{        //转存联系人
                            change9:{
                                    system("cls");
                                    int n;
                                    menu.archivedMenu();
                                    cin>>n;
                                    switch(n)
                                    {
                                        case 1:{        //手机通讯簿信息移动到手机卡通讯簿
                                                user.move_phone_to_card();
                                                system("pause");
                                                goto change8;
                                        }
                                        case 2:{        //手机卡通讯簿信息移动到手机通讯簿
                                                user.move_card_to_phone();
                                                system("pause");
                                                goto change8;
                                        }
                                        case 3:{        //手机通讯簿信息复制到手机卡通讯簿
                                                user.copy_phone_to_card();
                                                system("pause");
                                                goto change8;
                                        }
                                        case 4:{        //手机卡通讯簿信息复制到手机通讯簿
                                                user.copy_card_to_phone();
                                                system("pause");
                                                goto change8;
                                        }
                                        case 5:{        //返回上一级
                                                goto change8;
                                        }
                                        default:{       //输入有误
                                                cout<<"输入有误,请重新输入。"<<endl;
                                                system("pause");
                                                goto change9;
                                        }
                                    }
                                    }
                            }
                    case 0:{        //退出
                            //system("pause");//退出时暂停可有可无
                            system("cls");
                            break;
                    }
                    default:{       //输入有误
                            cout<<"输入有误,请重新输入"<<endl;
                            system("pause");
                            goto change8;
                    }
                }
        }
    }
    return 0;
}

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值