电话薄程序的雏型

原创 2004年07月17日 15:06:00

include<string>
#include<iomanip>
#include<cassert>

using namespace std;

class PhoneBookEntry
{
public:
    typedef unsigned long  PhoneNumber;
    typedef char const*    NameString;

    PhoneBookEntry(NameString person, PhoneNumber telephone);
    ~PhoneBookEntry(void){}

    //
    //bit-wise copy is fine
    //
    //PhoneBookEntry(PhoneBookEntry const&);
    //PhoneBookEntry operator=(PhoneBookEntry const&);

    void SetName(NameString name);
    NameString const GetName(void) const;

    void SetPhoneNumber(PhoneNumber telephone);
    PhoneNumber const GetPhoneNumber(void) const;

    friend ostream& operator << ( ostream &out, PhoneBookEntry const &entry );
    friend bool operator ==( PhoneBookEntry const& lhs, PhoneBookEntry const& rhs);

private:
    static int const MAX_NAME_LEN = 60;

    PhoneNumber mPhoneNumber;
    char mPersonName[MAX_NAME_LEN];
};

PhoneBookEntry::PhoneBookEntry(NameString person, PhoneNumber telephone)
    : mPhoneNumber(telephone)
{
    strncpy(mPersonName, person, MAX_NAME_LEN);
}

void PhoneBookEntry::SetName(NameString name)
{
    strncpy(mPersonName, name,  MAX_NAME_LEN);
}

PhoneBookEntry::NameString const PhoneBookEntry::GetName(void) const
{
    return mPersonName;
}

void PhoneBookEntry::SetPhoneNumber(PhoneNumber telephone)
{
    mPhoneNumber = telephone;
}

PhoneBookEntry::PhoneNumber const PhoneBookEntry::GetPhoneNumber(void) const
{
    return  mPhoneNumber;
}

bool operator ==( PhoneBookEntry const& lhs, PhoneBookEntry const& rhs)
{
    return ( 0 == strcmp(lhs.mPersonName,rhs.mPersonName)
        && lhs.mPhoneNumber == rhs.mPhoneNumber);
}

ostream & operator<<( ostream &out, PhoneBookEntry const& entry )
{
    out << "姓名:"     << entry.mPersonName << '/t'
        << "电话号码:" <<entry.mPhoneNumber;

    return out;
}


template <class T>
class List
{
public:
    List();
    ~List();
    void Add(T const& );

    //T * Namefind( char *name );
    //T * Telfind( unsigned int tl );
    //void PrintList();

protected:
    struct Node
    {
        Node *next;
        T value;

        Node(Node* aNode, T aValue)
            : next(aNode), value(aValue)
        {
        }
        virtual ~Node(){}
    };
    Node *mFirst;

    virtual Node* Create(Node* next, T aValue);
    virtual void Delete(Node* node);
};

template <class T>
List<T>::List() : mFirst(0)
{
}

template <class T>
List<T>::~List()
{
    Node * p = mFirst;
    while( mFirst )
    {
        mFirst = mFirst->next;
        Delete(p);
        p = mFirst;
    }
}


template <class T>
void List<T>::Add(T const& value)
{
    mFirst = Create(mFirst, value);
}

template <class T>
typename List<T>::Node* List<T>::Create(Node* next, T aValue)
{
    return new Node(next, aValue);
}

template <class T>
void List<T>::Delete(Node* node)
{
    delete node;
}


class PhoneBook : public List<PhoneBookEntry *>
{
public:
    typedef PhoneBookEntry::PhoneNumber PhoneNumber;
    typedef PhoneBookEntry::NameString  NameString;

    PhoneBookEntry* const FindByName(NameString person) const;
    PhoneBookEntry* const FindByPhoneNumber(PhoneNumber telephone) const;

    friend ostream & operator<<( ostream &out, PhoneBook const& entry);

};

PhoneBookEntry* const PhoneBook::FindByName(NameString person) const
{
    Node * p = mFirst;
    while( p )
    {
        if( 0 == strcmp(person, p->value->GetName()))
        {
            return p->value;
        }
        p = p->next;
    }
    return 0;
}

PhoneBookEntry* const PhoneBook::FindByPhoneNumber(PhoneNumber telephone) const
{
    Node * p = mFirst;
    while( p )
    {
        if( telephone == p->value->GetPhoneNumber())
        {
            return p->value;
        }
        p = p->next;
    }
    return 0;
}

ostream & operator<<( ostream &out, PhoneBook const& entry)
{
    PhoneBook::Node * p = entry.mFirst;
    out <<"---PhoneBook Begin--" << endl;

    while(p)
    {
        cout << *(p->value) <<endl;
        p = p->next;
    }
    out <<"---PhoneBook end---" <<endl;
    return out;
}

void test1()
{
    cout<<endl<<"!!!!!!!test 1 !!!!!!!"<<endl;
    PhoneBook aPhoneBook;

    cout << aPhoneBook;

    assert( 0 == aPhoneBook.FindByName("杨文"));
    assert( 0 == aPhoneBook.FindByPhoneNumber(85424161));
}

void test2()
{
    cout<<endl<<"!!!!!!!test 2 !!!!!!!"<<endl;
    PhoneBook aPhoneBook;

    PhoneBookEntry cc( "杨文", 85424161 );
    aPhoneBook.Add(&cc);
    cout << aPhoneBook;

    assert( cc == *aPhoneBook.FindByName("杨文"));

    assert( &cc == aPhoneBook.FindByName("杨文"));
    cout << *aPhoneBook.FindByPhoneNumber(85424161)<<endl;
}

void test3()
{
    cout<<endl<<"!!!!!!!test 3 !!!!!!!"<<endl;
    PhoneBook aPhoneBook;

    PhoneBookEntry a1 = PhoneBookEntry( "杨文", 85424161 );
    PhoneBookEntry a2 = PhoneBookEntry( "张三", 85424161 );
    PhoneBookEntry a3 = PhoneBookEntry( "李四", 85424161 );

    aPhoneBook.Add(&a1);
    aPhoneBook.Add(&a2);
    aPhoneBook.Add(&a3);

    cout << aPhoneBook;

    assert( a3 == *aPhoneBook.FindByName("李四"));
    assert( &a3 == aPhoneBook.FindByName("李四"));

    cout << *aPhoneBook.FindByPhoneNumber(85424161)<<endl;
}

void main()
{
    test1();
    test2();
    test3();
}

功能不完整.

Java 写 电话薄

对象类 package TelephoneBook; public class Contacts { private String name; private String sex; ...
  • baidu_38172265
  • baidu_38172265
  • 2017年08月10日 19:43
  • 103

c语言之电话薄程序

电话薄程序。建立一个结构体数组,存放若干人的信息,包括:姓名,电话,职业,住址。要求这个管理小程序可以完成的任务:...
  • qq_34361514
  • qq_34361514
  • 2016年10月18日 22:10
  • 1051

项目实践:电话薄程序

6.38电话薄程序。 一、问题描述:      建立一个结构体数组,存放若干人的信息,包括:姓名,电话,职业,住址。要求这个管理小程序可以完成的任务: (1)电话簿的内容显示。 (...
  • LJ_King
  • LJ_King
  • 2016年06月30日 19:11
  • 133

获取电话薄联系人,一个联系人的多个号码

1.最简洁的方法 使用类 android.provider.ContactsContract.CommonDataKinds.Phone; 代码如下: Cursor c = ge...
  • qinxiaojiexxx
  • qinxiaojiexxx
  • 2013年03月22日 16:53
  • 1471

电话薄Java实现小程序

这是一个Java实现的电话薄小程序,该电话薄实现简单的存储联系人,会将联系人保存到磁盘上。查询联系人,输入名字会显示出他的电话号码。 该程序使用了Properties类的两个方法store() 和 ...
  • firethinks
  • firethinks
  • 2013年08月17日 22:20
  • 623

电话薄

电话薄 Time Limit:10000MS  Memory Limit:65536K Total Submit:119 Accepted:42  Case Time Limit:1000MS Des...
  • Formiko
  • Formiko
  • 2015年07月27日 11:09
  • 236

第六次实验报告(3)---电话薄程序

电话薄程序。建立一个结构体数组,存放若干人的信息,包括:姓名,电话,职业,住址。要求这 个管理小程序可以完成的任务: (1)电话簿的内容显示。 (2)按姓名、电话查询联系人信息。 (3)按输入...
  • wzy_112099
  • wzy_112099
  • 2016年04月13日 16:30
  • 295

web通讯录之搜索功能

手机号搜索: 姓名搜索: 拼音搜索: 城市搜索: 性别搜索: 点击姓名或者电话显示完整信息 相信大家期待自己所写的搜索功能类似于百度、谷歌这种搜索引擎,有兴趣的读者可以去学学SEO,在...
  • dreamzuora
  • dreamzuora
  • 2018年01月22日 19:40
  • 48

Android 6.0 动态权限申请详解

1.介绍Runtime Permissions官方说明Android 6.0之前,权限在应用安装过程中只询问一次,以列表的形式展现给用户,然而大多数用户并不会注意到这些,直接就下一步了,应用安装成功后...
  • amoscxy
  • amoscxy
  • 2016年11月01日 14:44
  • 689

二叉排序树实现简单的通讯录

头文件#ifndef TOU_H_INCLUDED #define TOU_H_INCLUDED #include #include #include using namespace std; typ...
  • lidekun9132
  • lidekun9132
  • 2017年05月11日 09:56
  • 201
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:电话薄程序的雏型
举报原因:
原因补充:

(最多只允许输入30个字)