51STL_list联系人demo

示例代码

#include <iostream>
#include <list>
#include <string>

using namespace std;

enum MenuOptionSelection
{
    InsertContactListEntry = 0,
    SortOnName = 1,
    SortOnNumber = 2,
    DisplayEntries = 3,
    EraseEntry = 4,
    QuitContactList = 5
};

class ContactListItem      //一个联系人
{
public:
    string strContactName;
    string strPhoneNumber;

    ContactListItem(const string& strName, const string& strNumber)
    {
        strContactName = strName;
        strPhoneNumber = strNumber;
    }

    bool operator < (const ContactListItem itemToCompare) const     // < 运算符重载,用于按姓名排序
    {
        return (this->strContactName < itemToCompare.strContactName);
    }

    bool operator == (const ContactListItem& itemToCompare) const
    {
        return (itemToCompare.strContactName == this->strContactName); //参数传进来的联系人是否等于当前联系人
    }
};

int ShowMenu()
{
    cout << "*** 选择你的操作 ***" << endl;
    cout << "0. 输入新的联系人" << endl;
    cout << "1. 按姓名排序" << endl;
    cout << "2. 按照电话号码排序" << endl;
    cout << "3. 显示所有联系人" << endl;
    cout << "4. 删除一个联系人" << endl;
    cout << "5. 退出" << endl;

    int nOptionSelected = 0;

    cin >> nOptionSelected;
    cout << endl;

    return nOptionSelected;
}

ContactListItem GetContactInfo()
{
    cout << "*** 输入新的联系人 ***" << endl;
    string strName;
    cout << "联系人姓名:";
    cin >> strName;

    string strPhoneNumber;
    cout << "联系人电话:";
    cin >> strPhoneNumber;

    return ContactListItem(strName, strPhoneNumber);
}

void DisplayContactList(const list<ContactListItem>& listContacts)      //显示联系人函数
{
    cout << "*** 这是所有联系人的信息 ***" << endl;
    cout << "一共有" << listContacts.size() << "个联系人" << endl;

    list<ContactListItem>::const_iterator iContact;
    for(iContact = listContacts.begin();
        iContact != listContacts.end();
        ++iContact)
    {
        cout << endl << "姓名:" << iContact->strContactName << endl;
        cout << "电话:" << iContact->strPhoneNumber << endl;
    }

    cout << endl;

}

bool Predicate_CheckItemOnNumber(const ContactListItem& item1, const ContactListItem& item2)
{
    return item1.strPhoneNumber < item2.strPhoneNumber;
}

void EraseEntryFromList(list<ContactListItem>& listContacts)
{
    cout << "*** 删除一个联系人 ***" << endl;
    cout << "被删除的联系人姓名:";
    string strNameToErase;
    cin >> strNameToErase;

    listContacts.remove(ContactListItem(strNameToErase, " "));   //用姓名构造了一个联系人,再放到list容器中进行删除
}


int main()
{
    list<ContactListItem> listContacts;

    int nUserSelection = 0;

    while((nUserSelection = ShowMenu()) != QuitContactList)
    {
        switch(nUserSelection)
        {
        case InsertContactListEntry:                    //使用枚举替换掉数字,增强可读性
            listContacts.push_back(GetContactInfo());
            cout << "联系人添加成功!" << endl;
            break;
        case SortOnName:
            listContacts.sort();
            DisplayContactList(listContacts);
            break;
        case SortOnNumber:
            listContacts.sort(Predicate_CheckItemOnNumber);
            DisplayContactList(listContacts);
            break;
        case DisplayEntries:
            DisplayContactList(listContacts);
            break;
        case EraseEntry:
            EraseEntryFromList(listContacts);
            DisplayContactList(listContacts);
            break;
        case QuitContactList:
            cout << "现在退出了,再见!" << endl;
            break;
        default:
            cout << "非法的输入!" << nUserSelection << ", " << "有效的选项是数字0-4" << endl;
            break;
        }
    }


    return 0;
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐