⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phonebook.cpp

📁 通过手机数据线连接手机
💻 CPP
字号:
// PhoneBook.cpp: implementation of the CPhoneBook class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MoblieX.h"
#include "PhoneBook.h"
#include "sms.h"
#include "strFilter.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CPhoneBook::CPhoneBook()
{
	m_itemIDMin = m_itemIDMax = -1;
	m_pbmID = PBM_NONE;
	m_nameLenMax = 32;
	m_phoneNoLenMax = 20;
}

CPhoneBook::~CPhoneBook()
{
}

int CPhoneBook::GetPhoneBookSize()
{
	return m_itemIDArray.GetSize();
}

BOOL CPhoneBook::EditItem( int id, int itemID, LPCSTR name, LPCSTR no )
{
	if( !CheckID( id ) )
		return FALSE;
	if( !IsValidItemID( itemID ) )
		return FALSE;
	m_itemIDArray[id] = UINT(itemID);
	m_nameArray[id] = name;
	m_phoneNoArray[id] = no;

	return TRUE;
}

int CPhoneBook::GetItemID( int id )
{
	if( !CheckID( id ) )
	{
		return 0;
	}
	return m_itemIDArray[id];
}

CString & CPhoneBook::GetItemName( int id )
{
	if( !CheckID( id ) )
	{
		m_strBuf.Empty();
		return m_strBuf;
	}
	return m_nameArray[id];
}

CString & CPhoneBook::GetItemPhoneNo( int id )
{
	if( !CheckID( id ) )
	{
		m_strBuf.Empty();
		return m_strBuf;
	}
	return m_phoneNoArray[id];
}

BOOL CPhoneBook::GetItem(int id, int & itemID, CString &name, CString &no)
{
	if( !CheckID( id ) )
		return FALSE;

	itemID = int(m_itemIDArray[id]);
	name = m_nameArray[id];
	no = m_phoneNoArray[id];

	return TRUE;
}

BOOL CPhoneBook::GetItemOStr( int id, CString & oStr )
{
	if( !CheckID( id ) )
		return FALSE;

CString oName;
CSMS sms;
int phoneNoType;

	sms.EncodeStr( m_nameArray[id], oName );

	phoneNoType = ( m_phoneNoArray[id].Find( '+' ) == 0 ) ? 145 : 129;

	oStr.Format( "%d,\"%s\",%d,\"%s\"",
		m_itemIDArray[id], m_phoneNoArray[id], phoneNoType, oName );

	return TRUE;
}

int CPhoneBook::GetEmptyItemID()
{
int i;
	for( i = m_itemIDMin; i <= m_itemIDMax; i++ )
	{
		if( IsEmptyItemID( i ) )
		{
			return i;
		}
	}
	return -1;
}

int CPhoneBook::AddItem( int itemID, const char *sName, const char *sPhoneNo)
{
	m_itemIDArray.Add( UINT(itemID) );
	m_nameArray.Add( sName );
	m_phoneNoArray.Add( sPhoneNo );

int id = m_itemIDArray.GetUpperBound();
	if( id < 0 )
	{
		return -1;
	}

	m_nameArray[id].TrimLeft();
	m_nameArray[id].TrimRight();
	m_phoneNoArray[id].TrimLeft();
	m_phoneNoArray[id].TrimRight();

	return id;
}

int CPhoneBook::AddItem( const char * oStr )
{
CStrFilter sBuf;
CStringArray saBuf;
CSMS sms;
CString name;

	sBuf = oStr;
	sBuf.SeparateAll( ',', saBuf );
	if( saBuf.GetSize() < 4 )
	{
		return -1;
	}

	saBuf[1].Remove( '"' );
	saBuf[3].Remove( '"' );
//	if( saBuf[2] == "129" )
	{//中文编码
		sms.DecodeStr( saBuf[3], name );
	}
//	else
	{//未编码或编码未知
//		name = saBuf[3];
	}
	return AddItem( atoi(saBuf[0]), name, saBuf[1] );
}

BOOL CPhoneBook::CheckID(int id)
{
	return (id >=  0 && id < m_itemIDArray.GetSize());
}

BOOL CPhoneBook::RemoveAt( int pbID, int nCount )
{
	if( !CheckID( pbID ) )
	{
		return FALSE;
	}

	m_itemIDArray.RemoveAt( pbID, nCount );
	m_nameArray.RemoveAt( pbID, nCount );
	m_phoneNoArray.RemoveAt( pbID, nCount );

	return TRUE;
}

void CPhoneBook::RemoveAll()
{
	m_itemIDArray.RemoveAll();
	m_nameArray.RemoveAll();
	m_phoneNoArray.RemoveAll();
}

const char * CPhoneBook::GetCommand( int commandID )
{
	switch( commandID )
	{
	case PBC_CPBS_QUERY:
		m_strBuf = "AT+CPBS=?\r";
		break;
	case PBC_CPBS_SET:
		if( m_pbmID == PBM_ME )
			m_strBuf = "AT+CPBS=\"ME\"\r";
		else if( m_pbmID == PBM_SM )
			m_strBuf = "AT+CPBS=\"SM\"\r";
		else
			m_strBuf.Empty();
		break;
	case PBC_CPBR_QUERY:
		m_strBuf = "AT+CPBR=?\r";
		break;
	case PBC_GET_ALL:
		m_strBuf.Format( "AT+CPBR=%d,%d\r", m_itemIDMin, m_itemIDMax );
		break;
	}
	return m_strBuf;
}

void CPhoneBook::SetPBM(int pbmID)
{
	m_pbmID = pbmID;
	switch( pbmID )
	{
	case PBM_ME:
		m_des = "话机号码本";
		break;
	case PBM_SM:
		m_des = "SIM卡号码本";
		break;
	default:
		m_des.Empty();
	}
}

const char * CPhoneBook::GetCommandWriteItem(int pbID)
{
CString oStr;

	if( !GetItemOStr( pbID, oStr ) )
	{
		return NULL;
	}
	m_strBuf.Format( "AT+CPBW=%s\r", oStr );
	return m_strBuf;
}

const char * CPhoneBook::GetCommandDelItem(int pbID)
{
	if( !CheckID( pbID ) )
	{
		return NULL;
	}
	m_strBuf.Format( "AT+CPBW=%d\r", m_itemIDArray[pbID] );
	return m_strBuf;
}

BOOL CPhoneBook::IsValidItemID(int itemID)
{
	return ( itemID >= m_itemIDMin ) && ( itemID <= m_itemIDMax );
}

int CPhoneBook::GetPhoneBookTotalSize()
{
	return (m_itemIDMax - m_itemIDMin + 1);
}

const char * CPhoneBook::GetItemShortDes(int pbID)
{
	if( !CheckID( pbID ) )
	{
		return NULL;
	}
	m_strBuf.Format( "[%d]%s;%s",
		m_itemIDArray[pbID],
		m_phoneNoArray[pbID],
		m_nameArray[pbID] );
	return m_strBuf;
}

BOOL CPhoneBook::IsEmptyItemID(int itemID)
{
int i, size = m_itemIDArray.GetSize();

	for( i = 0; i < size; i++ )
	{
		if( itemID == int(m_itemIDArray[i]) )
		{
			return FALSE;
		}
	}
	return TRUE;
}

BOOL CPhoneBook::IsSameItemID(int pdID, int itemID)
{
	if( !CheckID( pdID ) )
	{
		return FALSE;
	}
	return itemID == int(m_itemIDArray[pdID]);
}

BOOL CPhoneBook::Load(const char *fileName)
{
CStdioFile file;
CStrFilter sBuf;
CStringArray saBuf;

	RemoveAll();

	if( !file.Open( fileName, CFile::shareDenyRead ) )
	{
		return FALSE;
	}

	while( file.ReadString( sBuf ) )
	{
		if( !sBuf.IsEmpty() )
		{
			saBuf.RemoveAll();
			if( sBuf.SeparateAll( '\t', saBuf )
			 && saBuf.GetSize() >= 3 )
			{
				AddItem( atoi(saBuf[0]), saBuf[1], saBuf[2] );
			}
		}
	}
	return (GetPhoneBookSize() > 0);
}

BOOL CPhoneBook::Save(const char *fileName)
{
CStdioFile file;
int i, size = m_itemIDArray.GetSize();
CString sBuf;
char * sTAB = "\t";
char * sReturn = "\n";

	if( !file.Open( fileName, CFile::modeCreate | CFile::modeWrite ) )
	{
		return FALSE;
	}

	for( i = 0; i < size; i++ )
	{
		sBuf.Format( "%d", m_itemIDArray[i] );
		file.WriteString( sBuf );
		file.WriteString( sTAB );
		file.WriteString( m_nameArray[i] );
		file.WriteString( sTAB );
		file.WriteString( m_phoneNoArray[i] );
		file.WriteString( sReturn );
	}

	return TRUE;
}

BOOL CPhoneBook::RegularizeAllItem()
{
int i, size;

	i = GetPhoneBookSize() - GetPhoneBookTotalSize();
	if( i > 0 )
	{//条目数大于容量
		RemoveAt( GetPhoneBookTotalSize()-1, i );
		ResetAllItemID();
	}

	size = GetPhoneBookSize();
	for( i = 0; i < size; i++ )
	{
		RegularizeItem( i );
	}
	return TRUE;
}

BOOL CPhoneBook::ResetAllItemID()
{
int i, itemID;

	for( i = 0, itemID = m_itemIDMin; itemID <= m_itemIDMax; i++, itemID++ )
	{
		m_itemIDArray[i] = itemID;
	}
	return TRUE;
}

BOOL CPhoneBook::RegularizeItem(int pbID)
{
	return TRUE;
}

void CPhoneBook::Append(CPhoneBook & pb )
{
	m_itemIDArray.Append( pb.m_itemIDArray );
	m_nameArray.Append( pb.m_nameArray );
	m_phoneNoArray.Append( pb.m_phoneNoArray );
}

BOOL CPhoneBook::No2Name(const char *no, CString &name)
{
CString sNo( no ), noBuf;
int i, size = m_phoneNoArray.GetSize(), noLen = sNo.GetLength();
int minDef, curDef;

	if( noLen <= 0 )
	{
		return FALSE;
	}

	sNo.MakeReverse();
	minDef = 10000;
	curDef = 10000;
	for( i = 0; i < size; i++ )
	{
		noBuf = m_phoneNoArray[i];
		noBuf.MakeReverse();
		if( sNo.Find( noBuf ) == 0 )
		{//头匹配
			curDef = noLen - noBuf.GetLength();
		}
		else if( noBuf.Find( sNo ) == 0 )
		{//头匹配
			curDef = noBuf.GetLength() - noLen;
		}

		if( curDef <= 5 && curDef < minDef )
		{
			minDef = curDef;
			name = m_nameArray[i];
		}
	}
	return ( minDef <= 5 );
}

BOOL CPhoneBook::Name2No(const char *name, CString &no)
{
int i, size = m_nameArray.GetSize();

	for( i = 0; i < size; i++ )
	{
		if( m_nameArray[i] == name )
		{
			no = m_phoneNoArray[i];
			return TRUE;
		}
	}
	return FALSE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -