📄 phonebook.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 + -