c++课程设计

通讯录管理系统

手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(每个位置上的存储容量为1000,即手机卡中或手机上最多只能存储1000个联系人)。存储在手机卡的联系人的信息只包含用户名和电话号码两项信息。存储在手机上的联系人的信息除了上面提到的两项信息外,还包含籍贯,QQ号等信息。

根据通用的手机通讯录的使用方式,采用OOP(Object Oriented Programming,面向对象编程)方法编写一个手机通讯录管理。

要求:

1. 创建文本文件,记录联系人的信息(需要创建两个文本文件,分别存储手机和手机卡上的存储的联系人的信息)。 

2. 以菜单方式工作(字符界面即可)

3. 存储在手机卡上的联系人的信息包括:姓名和电话号码;存储在手机上的联系人的信息包括姓名,籍贯,电话号码,QQ号等信息

4. 管理系统的功能包括:

a) 新建联系人:添加新的联系人(添加时确定是添加到手机上还是手机卡中)

b) 删除:删除一个联系人(输入电话号码,删除该联系人。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作)

c) 修改:修改某个联系人的信息(输入电话号码,查询到联系人之后进行信息的修改。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行修改操作)

d) 查询:根据名字查询联系人信息(查询结果不唯一)

e) 浏览:显示所有联系人的信息

f) 将联系人的信息从手机转存到手机卡上(同时要避免重复数据的存在。并且在转存是要检查容量是否受限。下同。)

g) 将联系人的信息从手机卡上转存到手机上(同时要避免重复数据的存在)

5. 要支持继承、多态、重载(运算符重载、函数重载)等面向对象的基本特点

6. 提交程序源码和课程设计报告。

实现过程分析:

建立两个文本文件,记录存储在手机上联系人的基本信息和存储在手机卡上的联系人的信息

建立以下几个类:

1. 手机卡联系人类:表示一个联系人

​数据成员包括:

姓名

电话号码

成员函数包括

带参并带默认值的构造函数

一组set函数为数据成员赋值

一组modify函数,修改数据成员的值

重载>>,<<运算符,完成对象的输入和输出操作

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

新增数据成员:

籍贯

QQ号
成员函数包括

一组set函数为数据成员赋值

一组modify函数,修改数据成员的值

重载>>,<<运算符,完成数据成员的输入输出操作

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

​增加函数:增加一个联系人

​删除操作:删除一个联系人

​Display:显示所有联系人的信息

​修改某一联系人的信息:

​查询并显示某一联系人的信息:

4. 手机通讯簿类(这是一个数据库类,继承于通讯簿抽象类):用于记录手机中存储的所有联系人的信息

​数据成员包括:

​手机联系人的数量

​手机联系人对象数组

​成员函数包括

​构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组

​析构函数:将对象数组中的内容写入到文本文件中。

​增加函数:增加一个联系人

​删除操作:删除一个联系人

​Display:显示所有联系人的信息

​修改某一联系人的信息:

​查询并显示某一联系人的信息:

5. 手机卡通信簿类(这是一个数据库类,继承于通讯簿抽象类):用于记录手机卡中存储的所有联系人的信息

​数据成员包括:

​手机联系人的数量

​手机联系人对象数组

​成员函数包括

​构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组

​析构函数:将对象数组中的内容写入到文本文件中。

​增加函数:增加一个联系人

​删除操作:删除一个联系人

​Display:显示所有联系人的信息

​修改某一联系人的信息:

​查询并显示某一联系人的信息:

6. 用户类(这是一个操作类,完成通讯簿的操作):用户拥有两个通讯簿(一个是手机中存储的联系人,一个是手机卡中存储的联系人),并且可以对通讯录进行管理

​数据成员包括:

​两个通讯簿对象

​成员函数包括(成员函数体现用户的行为):

​添加联系人:利用基类指针,调用相应的通讯簿对象(手机通讯簿或手机卡通信簿)的增加函数完成联系人的添加。实现动态联编,体现出多态特点。(下同)

​删除联系人:调用相应的通讯簿对象的删除操作删除一个联系人

​Display:显示相应的通讯簿中联系人的信息

​修改某一联系人的信息:调用通讯簿对象的函数完成操作

​查询并显示某一联系人的信息:调用通讯簿对象的函数完成操作

​将手机卡中的存储的联系人的信息移动到手机中

​将手机中存储的联系人的信息移动到手机卡中

​将手机卡中的存储的联系人的信息复制到手机中

​将手机中存储的联系人的信息复制到手机卡中

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

​数据成员:可以不定义数据成员

​成员函数:

​Display函数:显示操作菜单的提示。说明:可以根据需要定义多个函数,显示不同的菜单(操作提示)。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<fstream>
#include<iomanip>
#include<cstring>
#define MAX 1005
using namespace std;

//菜单
void showMenu()
{
    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;
}



//手机卡联系人类
class SIMcard_Contact                                   
{
public:
    SIMcard_Contact() :Name(nullptr), Telnumber("0") {};//构造函数

    ~SIMcard_Contact() { delete[] Name; }               //析构函数

    void setName(string tempname);                      //设置姓名

    void setTelnumber(string tempnumber);               //设置电话号码
     
    void modifyName(string tempname);                   //修改姓名

    void modifyTelnumber(string tempnumber);            //修改电话号码

    void get();                                         //展示信息

    char* getName();                                    //获取姓名

    string getTelnumber();                              //获取电话号码

    friend istream& operator>>(istream& cin, SIMcard_Contact& p);  //重载>>

    friend ostream& operator<< (ostream& cout, SIMcard_Contact& p);//重载<<



protected:
    char* Name;  //姓名
    string Telnumber;//电话号码
};
//设置姓名
void SIMcard_Contact::setName(string tempname)
{

    Name = new char[tempname.size() + 1];
    strcpy(Name, tempname.c_str());

}
//设置电话号码
void SIMcard_Contact::setTelnumber(string tempnumber)
{
    Telnumber = tempnumber;
}
//修改姓名
void SIMcard_Contact::modifyName(string tempname)
{
    if (Name != nullptr) { delete[] Name; }
    Name = new char[tempname.size() + 1];
    strcpy(Name, tempname.c_str());
}
//修改电话号码
void SIMcard_Contact::modifyTelnumber(string tempnumber)
{
    Telnumber = tempnumber;
}
//展示信息
void SIMcard_Contact::get()
{
    cout << "姓名:" << Name << "\t" << "电话号码:" << Telnumber << endl;
}
//获取姓名
char* SIMcard_Contact::getName()
{
    return Name;
}
//获取电话号码
string SIMcard_Contact::getTelnumber()
{
    return Telnumber;
}
//重载>>
istream& operator>>(istream& cin, SIMcard_Contact& p)
{

    string tempname;
    cout << "请输入姓名:" << endl;
    cin >> tempname;
    p.Name = new char[tempname.size() + 1];
    strcpy(p.Name, tempname.c_str());
    cout << "请输入电话号码:" << endl;
    cin >> p.Telnumber;

    return cin;
}
//重载<<
ostream& operator<<(ostream& cout, SIMcard_Contact& p)
{
    cout << "姓名:" << p.Name << "\t" << "电话号码:" << p.Telnumber << endl;
    return cout;

}



//手机联系人类
class Phone_Contact :public SIMcard_Contact 
{
public:
    

    void setAddress(string tempaddress);//设置家庭住址

    void setQQ(string tempQQ);//设置QQ号码

    string getAddress();//获取地址

    string getQQ();//获取QQ号码

    void modifyAddress(string tempaddress);//修改地址

    void modifyQQ(string tempQQ);//修改QQ号码

    void get();//输出

    friend istream& operator>>(istream& cin, Phone_Contact& p);//重载>>
    friend ostream& operator<<(ostream& cout, Phone_Contact& p);//重载<<




protected:
    string Address;//家庭住址
    string QQ;//QQ号码
};
//设置地址
void Phone_Contact::setAddress(string tempaddress)
{
    Address = tempaddress;
}
//设置QQ号码
void Phone_Contact::setQQ(string tempQQ)
{
    QQ = tempQQ;
}
//修改地址
void Phone_Contact::modifyAddress(string tempaddress)
{
    Address = tempaddress;
}
//修改QQ号码
void Phone_Contact::modifyQQ(string tempQQ)
{
    QQ = tempQQ;
}
//获取地址
string Phone_Contact::getAddress()
{
    return Address;
}
//获取QQ号码
string Phone_Contact::getQQ()
{
    return QQ;
}
//输出
void Phone_Contact::get()
{
    cout << "姓名:" << Name << "\t" << "电话号码:" << Telnumber << "\t" << "家庭住址:" << Address << "\t" << "QQ号码:" << QQ << endl;
}
//重载>>
istream& operator>>(istream& cin, Phone_Contact& p)
{
    string tempname;
    cout << "请输入姓名:" << endl;
    cin >> tempname;
    p.Name = new char[tempname.size() + 1];
    strcpy(p.Name, tempname.c_str());
    cout << "请输入电话号码:" << endl;
    cin >> p.Telnumber;
    cout << "请输入家庭住址:" << endl;
    cin >> p.Address;
    cout << "请输入QQ号:" << endl;
    cin >> p.QQ;
    return cin;

}
//重载<<
ostream& operator<<(ostream& cout, Phone_Contact& p)
{
 
    cout << "姓名:"     << p.Name <<"\t";
    cout << "电话号码:" << p.Telnumber<<"\t";
    cout << "家庭住址:" << p.Address <<"\t";
    cout << "QQ:"       << p.QQ << endl;
    return cout;

}





//通讯簿类
class Contact_Book 
{
public:
    virtual void AddContact() = 0;//增

    virtual void DeleteContact() = 0;//删

    virtual void DisplayContact() = 0;//浏览

    virtual void ModifyContact() = 0;//改

    virtual void SearchContact() = 0;//查


};






//手机通讯簿类
class Phone_Contact_Book :public Contact_Book 
{
public:


    Phone_Contact_Book()//构造函数
    {
        ifstream in("D:\\Phone_Contact_Book.txt", ios::in);//打开文件,只读
         if (!in.is_open())//判断是否打开
         {
             cout << "Can not open the txt" << endl;
         }

        string pName, pTelNumber, pAddress, pQQ;
        while (in >> pName >> pTelNumber >> pAddress >> pQQ)//读文件,写到数组中
        {
            PhoneContactArrey[TotalPhoneContacts].setName(pName);
            PhoneContactArrey[TotalPhoneContacts].setTelnumber(pTelNumber);
            PhoneContactArrey[TotalPhoneContacts].setAddress(pAddress);
            PhoneContactArrey[TotalPhoneContacts].setQQ(pQQ);

            TotalPhoneContacts++;//总人数+1
        }
        in.close();//关闭文件


    }

    ~Phone_Contact_Book();//析构函数

    void AddContact();//增

    void DeleteContact();//删

    void ModifyContact();//改

    void SearchContact();//查

    void DisplayContact();//浏览

    Phone_Contact PhoneContactArrey[MAX];//手机联系人类的数组,存放手机联系人

    int TotalPhoneContacts = 0;//初始化总人数==0


};
//增
void Phone_Contact_Book::AddContact()
{

    cin >> PhoneContactArrey[TotalPhoneContacts];//输入新建联系人信息
    TotalPhoneContacts++;//总人数+1
    cout << "添加成功" << endl;
    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;
}
//删
void Phone_Contact_Book::DeleteContact()
{
    if (TotalPhoneContacts == 0)cout << "手机通讯簿没有人" << endl;
    else
    {
        string pTelnumber;
        cout << "请输入要删除的联系人的电话号码:" << endl;
        cin >> pTelnumber;

        for (int i = 0; i < TotalPhoneContacts; i++)//遍历数组
        {
            if (pTelnumber.compare(PhoneContactArrey[i].getTelnumber()) == 0)//如果发现要删除的联系人在数组中能匹配到
            {
                for (int j = i; j < TotalPhoneContacts - 1; j++)
                {
                    PhoneContactArrey[j] = PhoneContactArrey[j + 1];//把要删除的联系人后面的联系人信息赋值给前面。
                }

                TotalPhoneContacts--;//总人数-1
                cout << "删除成功" << endl;
            }

            else if (i == TotalPhoneContacts - 1) cout << "查无此人" << endl;//如果遍历完了没有发现,就输出
        }

    }
    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;

}
//改
void Phone_Contact_Book::ModifyContact()
{
    if (TotalPhoneContacts == 0) cout << "手机通讯簿没有人" << endl;

    else
    {
        string pName;
        cout << "请输入要修改的联系人姓名:" << endl;
        cin >> pName;
        for (int i = 0; i < TotalPhoneContacts; i++)//遍历
        {
            if (pName.compare(PhoneContactArrey[i].getName()) == 0)//匹配数组中的信息
            {
                cout << "请选择要修改的内容:1.修改姓名 2.修改电话号码 3.修改家庭住址 4.修改QQ号码" << endl;
                int select;
                cin >> select;

                if (select == 1)
                {
                    cout << "请输入修改后的姓名:" << endl;
                    cin >> pName;
                    PhoneContactArrey[i].modifyName(pName);//调用修改姓名函数
                    cout << "姓名修改成功" << endl;
                    break;
                }

                else if (select == 2)
                {
                    cout << "请输入修改后的电话号码:" << endl;
                    string pTelnumber;
                    cin >> pTelnumber;
                    PhoneContactArrey[i].modifyTelnumber(pTelnumber);//调用修改电话号码函数
                    cout << "电话号码修改成功" << endl;
                    break;
                }

                else if (select == 3)
                {
                    cout << "请输入修改后的家庭住址:" << endl;
                    string pAddress;
                    cin >> pAddress;
                    PhoneContactArrey[i].modifyAddress(pAddress);//调用修改地址函数
                    cout << "家庭住址修改成功" << endl;
                    break;
                }

                else if (select == 4)
                {
                    cout << "请输入修改后的QQ号码:" << endl;
                    string pQQ;
                    cin >> pQQ;
                    PhoneContactArrey[i].modifyQQ(pQQ);//调用修改QQ号码函数
                    cout << "QQ号码修改成功" << endl;
                    break;
                }
            }

            else if (i == TotalPhoneContacts - 1) cout << "查无此人" << endl;
        }
    }
    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;



}
//查
void Phone_Contact_Book::SearchContact()
{
    if (TotalPhoneContacts == 0) { cout << "手机通讯录没有联系人" << endl; }

    else
    {
        string pName, pTelnumber, pAddress, pQQ;

        cout << "请输入查找方式:1.根据姓名查找 2.根据电话号码查找 3.根据家庭住址查找 4.根据QQ号码查找" << endl;
        int select;
        cin >> select;
        int i = 0;
        if (select == 1)
        {
            cout << "请输入要查找的联系人姓名:" << endl;
            cin >> pName;
            for ( i = 0; i < TotalPhoneContacts; i++)//遍历
            {
                if (pName.compare(PhoneContactArrey[i].getName()) == 0)//匹配数组中的姓名信息
                {
                    PhoneContactArrey[i].get();//输出信息
                    //这里不写break,因为联系人可能重名
                }
                
            }
            if (i == TotalPhoneContacts - 1) cout << "查无此人" << endl;
        }

        else if (select == 2)
        {
            cout << "请输入要查找的联系人电话号码:" << endl;
            cin >> pTelnumber;
            for (int i = 0; i < TotalPhoneContacts; i++)//遍历
            {
                if (pTelnumber.compare(PhoneContactArrey[i].getTelnumber()) == 0)//匹配数组中的电话号码信息
                {
                    PhoneContactArrey[i].get();//输出信息
                    break;
                }
                else if (i == TotalPhoneContacts - 1) cout << "查无此人" << endl;
            }
        }

        else if (select == 3)
        {
            cout << "请输入要查找的联系人家庭住址:" << endl;
            cin >> pAddress;
            for (int i = 0; i < TotalPhoneContacts; i++)//遍历
            {
                if (pAddress.compare(PhoneContactArrey[i].getAddress()) == 0)//匹配数组中的家庭住址信息
                {
                    PhoneContactArrey[i].get();//输出信息
                    //不写break,联系人的家庭住址可能相同
                }
                else if (i == TotalPhoneContacts - 1) cout << "查无此人" << endl;
            }
        }

        else if (select == 4)
        {
            cout << "请输入要查找的联系人QQ号码:" << endl;
            cin >> pQQ;
            for (int i = 0; i < TotalPhoneContacts; i++)//遍历
            {
                if (pQQ.compare(PhoneContactArrey[i].getQQ()) == 0)//匹配数组中的QQ号码信息
                {
                    PhoneContactArrey[i].get();//输出信息
                    break;
                }
                else if (i == TotalPhoneContacts - 1) cout << "查无此人" << endl;
            }
        }

    }

    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;
}
//展示
void Phone_Contact_Book::DisplayContact()
{
    if (TotalPhoneContacts == 0) { cout << "手机通讯簿没有人" << endl; }

    else 
    {
        for (int i = 0; i < TotalPhoneContacts; i++)//循环遍历数组
        {
            cout << PhoneContactArrey[i];//输出信息
        }
        
    }

    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;

}
//析构函数
Phone_Contact_Book::~Phone_Contact_Book()
{
    ofstream out("D:\\Phone_Contact_Book.txt", ios::out);//打开文件,只写
    if (!out.is_open())//判断是否打开
    {
        cout << "Can not open the txt" << endl;
    }
    int i = 0;
    while (i < TotalPhoneContacts)//遍历数组
    {
        //写文件
        out << PhoneContactArrey[i].getName() << "\t" << PhoneContactArrey[i].getTelnumber()
            << "\t" << PhoneContactArrey[i].getAddress() << "\t" << PhoneContactArrey[i].getQQ() << endl;
        i++;//写完一个总数+1。全写完了就跳出循环
    }
    out.close();//关闭文件
}




//手机卡通讯簿
class SIMcard_Contact_Book :public Contact_Book
{
public:

    SIMcard_Contact_Book()//构造函数
    {
        ifstream in("D:\\SIMcard_Contact_Book.txt", ios::in);//打开文件,只读
        if (!in.is_open())//判断是否打开
        {
            cout << "Can not open the txt";
        }

        string pName, pTelNumber;
        while (in >> pName >> pTelNumber)//读文件,写到数组中
        {
            SIMcardContactArrey[TotalSIMcardContacts].setName(pName);
            SIMcardContactArrey[TotalSIMcardContacts].setTelnumber(pTelNumber);

            TotalSIMcardContacts++;//总人数+1
        }
        in.close();//关闭文件


    }

    ~SIMcard_Contact_Book();//析构函数

    void AddContact();//增

    void DeleteContact();//删

    void ModifyContact();//改

    void SearchContact();//查

    void DisplayContact();//展示

    SIMcard_Contact SIMcardContactArrey[MAX];//手机卡联系人类的数组,存放手机联系人

    int TotalSIMcardContacts = 0;//初始化总人数==0

};
//增
void SIMcard_Contact_Book::AddContact()
{
    cin >> SIMcardContactArrey[TotalSIMcardContacts];//输入新建联系人信息
    TotalSIMcardContacts++;//总人数+1
    cout << "添加成功" << endl;
    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;
}
//删
void SIMcard_Contact_Book::DeleteContact()
{
    if (TotalSIMcardContacts == 0)cout << "手机卡通讯簿没有人" << endl;
    else
    {
        string pTelnumber;
        cout << "请输入要删除的联系人的电话号码:" << endl;
        cin >> pTelnumber;

        for (int i = 0; i < TotalSIMcardContacts; i++)//遍历数组
        {
            if (pTelnumber.compare(SIMcardContactArrey[i].getTelnumber()) == 0)//如果发现要删除的联系人在数组中能匹配到
            {
                for (int j = i; j < TotalSIMcardContacts - 1; j++)
                {
                    SIMcardContactArrey[j] = SIMcardContactArrey[j + 1];//把要删除的联系人后面的联系人信息赋值给前面。
                }

                TotalSIMcardContacts--;
                cout << "删除成功" << endl;//总人数-1
            }

            else if (i == TotalSIMcardContacts - 1) cout << "查无此人" << endl;
        }

    }
    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;

}
//改
void SIMcard_Contact_Book::ModifyContact()
{
    if (TotalSIMcardContacts == 0) cout << "手机卡通讯簿没有人" << endl;

    else
    {
        string pName;
        cout << "请输入要修改的联系人姓名:" << endl;
        cin >> pName;
        for (int i = 0; i < TotalSIMcardContacts; i++)//遍历
        {
            if (pName.compare(SIMcardContactArrey[i].getName()) == 0)//匹配数组中的信息
            {
                cout << "请选择要修改的内容:1.修改姓名 2.修改电话号码 " << endl;
                int select;
                cin >> select;

                if (select == 1)
                {
                    cout << "请输入修改后的姓名:" << endl;
                    cin >> pName;
                    SIMcardContactArrey[i].modifyName(pName);//调用修改姓名函数
                    cout << "姓名修改成功" << endl;
                    break;
                }

                else if (select == 2)
                {
                    cout << "请输入修改后的电话号码:" << endl;
                    string pTelnumber;
                    cin >> pTelnumber;
                    SIMcardContactArrey[i].modifyTelnumber(pTelnumber);//调用修改电话号码函数
                    cout << "电话号码修改成功" << endl;
                    break;
                }

            }

            else if (i == TotalSIMcardContacts - 1) cout << "查无此人" << endl;
        }
    }
    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;


}
//查
void SIMcard_Contact_Book::SearchContact()
{
    if (TotalSIMcardContacts == 0) { cout << "手机通讯录没有联系人" << endl; }

    else
    {
        string pName, pTelnumber, pAddress, pQQ;

        cout << "请输入查找方式:1.根据姓名查找 2.根据电话号码查找" << endl;
        int select;
        cin >> select;

        if (select == 1)
        {
            cout << "请输入要查找的联系人姓名:" << endl;
            cin >> pName;
            int i = 0;
            for ( i = 0; i < TotalSIMcardContacts; i++)//遍历
            {
                if (pName.compare(SIMcardContactArrey[i].getName()) == 0)//匹配数组中的姓名信息
                {
                    SIMcardContactArrey[i].get();//输出信息
                 //不写break,联系人姓名可能相同
                }
                
            }
            if (i == TotalSIMcardContacts - 1) cout << "查无此人" << endl;

        }

        else if (select == 2)
        {
            cout << "请输入要查找的联系人电话号码:" << endl;
            cin >> pTelnumber;
            for (int i = 0; i < TotalSIMcardContacts; i++)//遍历
            {
                if (pTelnumber.compare(SIMcardContactArrey[i].getTelnumber()) == 0)//匹配数组中的电话号码信息
                {
                    SIMcardContactArrey[i].get();//输出信息
                    break;
                }
                else if (i == TotalSIMcardContacts - 1) cout << "查无此人" << endl;
            }
        }


    }

    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;
}
//展示
void SIMcard_Contact_Book::DisplayContact()
{
    if (TotalSIMcardContacts == 0)cout << "手机卡通讯簿没有联系人" << endl;
    for (int i = 0; i < TotalSIMcardContacts; i++)//循环遍历数组
    {
        cout << SIMcardContactArrey[i];//输出信息
    }
    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;
}
//析构函数
SIMcard_Contact_Book::~SIMcard_Contact_Book()
{
    ofstream out("D:\\SIMcard_Contact_Book.txt", ios::out);//打开文件,只写
    if (!out.is_open())//判断是否打开
    {
        cout << "Can not open the txt" << endl;
    }
    int i = 0;
    while ( i < TotalSIMcardContacts)//遍历数组
    {
        //写文件
        out << SIMcardContactArrey[i].getName() << "\t" << SIMcardContactArrey[i].getTelnumber() << endl;
        i++;//写完一个总数+1。全写完了就跳出循环
    }
    out.close();//关闭文件
}





class User
{
public:

    void Add();//增

    void Delete();//删

    void Search();//查

    void Modify();//改

    void Display();//展示

    void Move_Phone2SIMcard();//手机移动到手机卡

    void Move_SIMcard2Phone();//手机卡移动到手机

    void Copy_Phone2SIMcard();//手机复制到手机卡

    void Copy_SIMcard2Phone();//手机卡复制到手机


protected:
    Contact_Book* ptr;//通讯簿类的指针,用于实现多态
    Phone_Contact_Book P_Book;//手机通讯簿类的对象
    SIMcard_Contact_Book S_Book;//手机卡通讯簿类的对象
};
//增
void User::Add()
{
    int select;
    cout << "请输入要添加联系人的位置:1.手机 2.手机卡" << endl;
    cin >> select;

    if (select == 1)
    {
        ptr = &P_Book;//基类指针指向子类对象
        ptr->AddContact();//调用手机通讯簿类的AddContact
    }

    else if (select == 2)
    {
        ptr = &S_Book;//基类指针指向子类对象
        ptr->AddContact();//调用手机卡通讯簿类的AddContact

    }

}
//删
void User::Delete()
{
   
     string pTelnumber;
     cout << "请输入要删除的联系人的电话号码:" << endl;

     cin >> pTelnumber;//根据电话号码删除
     for (int i = 0; i < P_Book.TotalPhoneContacts; i++)//遍历手机通讯簿
     {
         if (pTelnumber.compare(P_Book.PhoneContactArrey[i].getTelnumber()) == 0)//匹配信息
         {
             for (int j = i; j < P_Book.TotalPhoneContacts - 1; j++)
             {
                 P_Book.PhoneContactArrey[j] = P_Book.PhoneContactArrey[j + 1];//后面的赋值给前面
             }

             P_Book.TotalPhoneContacts--;//总数-1
           
         }

     }
     for (int i = 0; i < S_Book.TotalSIMcardContacts; i++)//遍历手机卡通讯簿
     {
         if (pTelnumber.compare(S_Book.SIMcardContactArrey[i].getTelnumber()) == 0)//匹配信息
         { 
             for (int j = i; j < S_Book.TotalSIMcardContacts - 1; j++)
             {
                 S_Book.SIMcardContactArrey[j] = S_Book.SIMcardContactArrey[j + 1];//后面的赋值给前面
             }

             S_Book.TotalSIMcardContacts--;//总数-1
             
         }

     }

     cout << "删除成功" << endl;
     system("pause");
     system("cls");
     showMenu();
     cout << "请输入要使用的功能序号" << endl;

}
//查
void User::Search()
{
    cout << "请输入要在哪查找:1.手机 2.手机卡" << endl;
    int search = 0;
    cin >> search;
    if (search == 1)
    {
        ptr = &P_Book;//基类指针指向子类对象
        ptr->SearchContact();//调用手机通讯簿类的SearchContact
    }
    else if (search == 2)
    {
        ptr = &S_Book;//基类指针指向子类对象
        ptr->SearchContact();//调用手机卡通讯簿类的SearchContact
    }

}
//改
void User::Modify()
{
    string pTelnumber;
    cout << "请输入要修改的联系人电话号码:" << endl;
    cin >> pTelnumber;
    int select;
    cout << "请选择要修改的内容:1.修改姓名 2.修改电话号码 3.修改家庭住址 4.修改QQ号码" << endl;
    cin >> select;
    if (select == 1)
    {
        cout << "请输入修改后的姓名:" << endl;
        string pName;
        cin >> pName;
        for (int i = 0; i < P_Book.TotalPhoneContacts; i++)//遍历
        {
            if (pTelnumber.compare(P_Book.PhoneContactArrey[i].getTelnumber()) == 0)//匹配信息
            {
                P_Book.PhoneContactArrey[i].modifyName(pName);//调用修改函数
            }
        }

        for (int i = 0; i < S_Book.TotalSIMcardContacts; i++)//遍历
        {
            if (pTelnumber.compare(S_Book.SIMcardContactArrey[i].getTelnumber()) == 0)//匹配信息
            {
                S_Book.SIMcardContactArrey[i].modifyName(pName);//调用修改函数
            }
        }
        
        cout << "姓名修改成功" << endl;

    }

    else if (select == 2)
    {
        cout << "请输入修改后的电话号码:" << endl;
        string pTelnumber;
        cin >> pTelnumber;

        for (int i = 0; i < P_Book.TotalPhoneContacts; i++)//遍历
        {
            if (pTelnumber.compare(P_Book.PhoneContactArrey[i].getTelnumber()) == 0)//匹配信息
            {
                P_Book.PhoneContactArrey[i].modifyTelnumber(pTelnumber);//调用修改函数
            }

        }

        for (int i = 0; i < S_Book.TotalSIMcardContacts; i++)//遍历
        {
            if (pTelnumber.compare(S_Book.SIMcardContactArrey[i].getTelnumber()) == 0)//匹配信息
            {
                S_Book.SIMcardContactArrey[i].modifyTelnumber(pTelnumber);//调用修改函数
            }
        }

        cout << "电话号码修改成功" << endl;
    }

    else if (select == 3)
    {
        cout << "请输入修改后的家庭住址:" << endl;
        string pAddress;
        cin >> pAddress;

        for (int i = 0; i < P_Book.TotalPhoneContacts; i++)//遍历
        {
            if (pTelnumber.compare(P_Book.PhoneContactArrey[i].getTelnumber()) == 0)//匹配信息
            {
                P_Book.PhoneContactArrey[i].modifyAddress(pAddress);//调用修改函数
            }

        }
        cout << "家庭住址修改成功" << endl;
    }

    else if (select == 4)
    {
        cout << "请输入修改后的QQ号码:" << endl;
        string pQQ;
        cin >> pQQ;
        for (int i = 0; i < P_Book.TotalPhoneContacts; i++)//遍历
        {
            if (pTelnumber.compare(P_Book.PhoneContactArrey[i].getTelnumber()) == 0)//匹配信息
            {
                P_Book.PhoneContactArrey[i].modifyQQ(pQQ);//调用修改函数
            }

        }
        cout << "QQ号码修改成功" << endl;
        
    }
   
    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;


}
//展示
void User::Display()
{
    cout << "请输入在哪浏览所有联系人:1.手机 2.手机卡" << endl;
    int select = 0;
    cin >> select;
    if (select == 1)
    {
        ptr = &P_Book;//基类指针指向子类对象
        ptr->DisplayContact();//调用手机通讯簿类的DisplayContact
    }

    else if (select == 2)
    {
        ptr = &S_Book;//基类指针指向子类对象
        ptr->DisplayContact();//调用手机卡通讯簿类的DisplayContact
    }


}
//手机移动到手机卡
void User::Move_Phone2SIMcard()
{
    cout << "请输入要移动的联系人姓名:" << endl;
    string pName;
    cin >> pName;
    int flag = 0;
    for (int i = 0; i < P_Book.TotalPhoneContacts; i++)//遍历
    {

        if (pName.compare(P_Book.PhoneContactArrey[i].getName()) == 0)//匹配信息
        {
            for (int k = 0; k < S_Book.TotalSIMcardContacts - 1; k++)
            {
                if (pName.compare(S_Book.SIMcardContactArrey[k].getName()) == 0)
                {
                    cout << "手机卡已经有" << pName << "啦" << endl;//避免重复数据存在
                    flag = 1;
                    break;
                }
            }

            if (flag == 0 && (S_Book.TotalSIMcardContacts + 1<=1000))//容量是否够
            {
                S_Book.SIMcardContactArrey[S_Book.TotalSIMcardContacts].setName(P_Book.PhoneContactArrey[i].getName());//手机卡联系人数组[手机卡里的总人数].设置姓名(手机联系人数组[匹配到要移动的信息的索引])
                S_Book.SIMcardContactArrey[S_Book.TotalSIMcardContacts].setTelnumber(P_Book.PhoneContactArrey[i].getTelnumber());//把匹配到的信息赋给手机卡
                S_Book.TotalSIMcardContacts++;//联系人总数+1
                
                //删除手机联系人数组的相应联系人
                for (int j = i; j < P_Book.TotalPhoneContacts - 1; j++)
                {
                    P_Book.PhoneContactArrey[j] = P_Book.PhoneContactArrey[j + 1];
                }
                P_Book.TotalPhoneContacts--;
                cout << "移动成功" << endl;
                break;
            }
        }
        else if (i == P_Book.TotalPhoneContacts - 1) cout << "未找到该联系人" << endl;
    }

    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;
}
//手机卡移动到手机
void User::Move_SIMcard2Phone()
{
    cout << "请输入要移动的联系人姓名:" << endl;
    string pName;
    cin >> pName;
    int flag = 0;
    for (int i = 0; i < S_Book.TotalSIMcardContacts; i++)//遍历
    {

        if (pName.compare(S_Book.SIMcardContactArrey[i].getName()) == 0)//匹配信息
        {
            for (int k = 0; k < P_Book.TotalPhoneContacts - 1; k++)
            {
                if (pName.compare(P_Book.PhoneContactArrey[k].getName()) == 0)
                {
                    cout << "手机已经有" << pName << "啦" << endl;//避免重复数据存在
                    flag = 1;
                    break;
                }
            }
            if (flag == 0 && (P_Book.TotalPhoneContacts + 1<=1000))//容量是否够
            {
                P_Book.PhoneContactArrey[P_Book.TotalPhoneContacts].setName(S_Book.SIMcardContactArrey[i].getName());//把匹配到的信息赋给手机

                P_Book.PhoneContactArrey[P_Book.TotalPhoneContacts].setTelnumber(S_Book.SIMcardContactArrey[i].getTelnumber());
                
                P_Book.TotalPhoneContacts++;//联系人总数+1

                //删除手机卡联系人数组的相应联系人
                for (int j = i; j < S_Book.TotalSIMcardContacts ; j++)
                {
                    S_Book.SIMcardContactArrey[j] = S_Book.SIMcardContactArrey[j + 1];
                }
                S_Book.TotalSIMcardContacts--;
                cout << "移动成功" << endl;
                break;
            }

        }
        else if (i == S_Book.TotalSIMcardContacts - 1) cout << "未找到该联系人" << endl;
    }

    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;


}
//手机复制到手机卡
void User::Copy_Phone2SIMcard()
{
    cout << "请输入要复制的联系人姓名:" << endl;
    string pName;
    cin >> pName;
    int flag = 0;
    for (int i = 0; i < P_Book.TotalPhoneContacts; i++)//遍历
    {

        if (pName.compare(P_Book.PhoneContactArrey[i].getName()) == 0)//匹配信息
        {
            for (int k = 0; k < S_Book.TotalSIMcardContacts - 1; k++)
            {
                if (pName.compare(S_Book.SIMcardContactArrey[k].getName()) == 0)//避免重复数据存在
                {
                    cout << "手机卡已经有" << pName << "啦" << endl;
                    flag = 1;
                    break;
                }
            }

            if (flag == 0 && (S_Book.TotalSIMcardContacts + 1 <= 1000))
            {
                S_Book.SIMcardContactArrey[S_Book.TotalSIMcardContacts].setName(P_Book.PhoneContactArrey[i].getName());

                S_Book.SIMcardContactArrey[S_Book.TotalSIMcardContacts].setTelnumber(P_Book.PhoneContactArrey[i].getTelnumber());

                S_Book.TotalSIMcardContacts++;

                cout << "复制成功" << endl;
                break;
            }
        }
        
    }
    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;

}
//手机卡复制到手机
void User::Copy_SIMcard2Phone()
{
    cout << "请输入要复制的联系人姓名:" << endl;
    string pName;
    cin >> pName;
    int flag = 0;
    for (int i = 0; i < S_Book.TotalSIMcardContacts ; i++)//遍历
    {

        if (pName.compare(S_Book.SIMcardContactArrey[i].getName()) == 0)//匹配信息
        {
            for (int k = 0; k < P_Book.TotalPhoneContacts - 1; k++)
            {
                if (pName.compare(P_Book.PhoneContactArrey[k].getName()) == 0)//避免重复数据存在
                {
                    cout << "手机已经有" << pName << "啦" << endl;
                    flag = 1;
                }
            }
            if (flag == 0 && (P_Book.TotalPhoneContacts + 1 <= 1000))
            {
                P_Book.PhoneContactArrey[P_Book.TotalPhoneContacts].setName(S_Book.SIMcardContactArrey[i].getName());
                P_Book.PhoneContactArrey[P_Book.TotalPhoneContacts].setTelnumber(S_Book.SIMcardContactArrey[i].getTelnumber());
                P_Book.TotalPhoneContacts++;

                cout << "复制成功" << endl;
                break;
            }

        }
        else if (i == S_Book.TotalSIMcardContacts - 1) cout << "未找到该联系人" << endl;
    }


    system("pause");
    system("cls");
    showMenu();
    cout << "请输入要使用的功能序号" << endl;
}




int main()
{
    showMenu();
    cout << "请输入要使用的功能序号" << endl;
    int select;
    User user;
    while (cin >> select)
    {
        if (select == 0)
        {
            system("pause");
            break;
       
        }
        else if(select != 0)
        {

            switch (select)
            {
            case 1://增
                user.Add();
                break;
            case 2://删
                user.Delete();
                break;
            case 3://查
                user.Search();
                break;
            case 4://改
                user.Modify();
                break;
            case 5://显示全部联系人
                user.Display();
                break;
            case 6:
                cout << "请输入要移动的方向:1.手机-->手机卡 2.手机卡-->手机" << endl;

                cin >> select;
                if (select == 1)
                {
                    user.Move_Phone2SIMcard();
                }
                else if (select == 2)
                {
                    user.Move_SIMcard2Phone();
                }
                break;
            case 7:
                cout << "请输入要复制的方向:1.手机-->手机卡 2.手机卡-->手机" << endl;

                cin >> select;
                if (select == 1)
                {
                    user.Copy_Phone2SIMcard();
                }
                else if (select == 2)
                {
                    user.Copy_SIMcard2Phone();
                }
                break;
            default:
                break;
            }
        }
    }
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值