注册 登录
编程论坛 C++教室

电话本管理系统的实现

zhangmohan28 发布于 2010-11-04 13:32, 598 次点击
程序代码:
#ifndef PHONEMANAGER_H
#define PHONEMANAGER_H


#include <vector>
#include "Person.h"
using namespace std;


class CManager
{
private:

    vector<CPerson> m_vMembers;

public:

    void deleteMember(string vName);
    void addMember(CPerson vMember);
    void insertMember();
    bool findMember(string vName);
    void deleteAll();

};

#endif

#ifndef PERSON_H
#define PERSON_H

#include <string>
using namespace std;

class CPerson
{
private:

    string m_sName;
    int m_iPhoneNumber;

public:

    CPerson();
    CPerson(string vName,int vPhoneNumber);
    string getName();
    int getPhoneNumber();

};

#endif

person类中的函数都容易实现
但是manager类中的函数 findMember(string vName);deleteMember(string vName);void insertMember(); 实现起来比较困难
程序代码:

void CManager::deleteMember(string vName)
{
    for( unsigned int i = 0; i<m_vMembers.size(); i++ )
    {
        if( !strcmp(m_vMembers[i].getName().c_str(),vName.c_str()) )
            m_vMembers.erase(m_vMembers[i]);
    }

}


bool CManager::findMember(string vName)
{
    for( unsigned int i = 0; i<m_vMembers.size(); i++ )
    {
        if( !strcmp(m_vMembers[i].getName().c_str(),vName.c_str()) )
        {
            cout<<"你要查找的电话为:"<<endl;
            cout<<m_vMembers[i].getName()<<m_vMembers[i].getPhoneNumber<<endl;
            return true;
        }
    }
            return false;
}


这两个函数是我写的  可是不能实现~比较郁闷  求高手们指点  怎么改这个错误
2 回复
#2
shadow_rong2010-11-04 13:47
没看到你 add函数 ,先写 add函数吧..... 命名规范可以,代码风格不大好...

给电话本增加一个元素,  m_flag  做标志位,在删除电话本的时候,给标志位 填0,这样就实现了删除,你读取的时候查下标记位,就可以。。。

如果你真想做真删除,就不要做成数组,建议做成链表....至少数组你还要移动删除的位置..
#3
zhangmohan282010-11-05 09:40
回复 2楼 shadow_rong
程序代码:

void CManager::addMember(CPerson vMember)
{
    this->m_vMembers.push_back(vMember);
}
add函数还是比较容易实现的 我是想用vector做这个程序  该怎么改delete函数
编译器总是报错 error C2664: 'class CPerson *__thiscall std::vector<class CPerson,class std::allocator<class CPerson> >::erase(class CPerson *)' : cannot convert parameter 1 from 'class C
Person' to 'class CPerson *'
        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1