📄 phbookex.c
字号:
/**********************************************************
*
*Copyright ? 2001-2003 National ASIC Center, All right Reserved
*
* FILE NAME: Phbookex.c
* PROGRAMMER: Christian-ren
* Date of Creation: 2002/08/28
*
* DESCRIPTION:
*
* NOTE:
*------------------------------------------------------------------
* FUNCTIONS LIST:
* -- PUBLIC FUNCTIONS --
* P_S8 GetCallFromPhbook()
* SAVESTS SaveCallIntoPhbook(P_S8 callstr,U32 hGC)
* STATUS FindNameFromPhbook(P_S8 callstr,P_S8 outname,P_S8 isfind);
*
*------------------------------------------------------------------
* -- LOCAL FUNCTIONS --
* void SelectSavePerson(SAVEPERSONSTY *personsel)
* void SelectSaveType(PHONESTYLE * select)
*------------------------------------------------------------------
*
* GLOBAL VARS LIST:
* DBLACB *phbooklacb;
*-------------------------------------------------------------------
*
* MODIFICATION HISTORY
*
*
* 2002/08/28 by Christian-ren Create the file
*
*************************************************************/
#include <string.h>
#include <asixwin.h>
#include <asixapp.h>
#include <asixwin\asix_lb.h>
#include <asixwin\asix_ed.h>
#include <resource\bitmap.h>
#include <database\carddb.h>
#include "phbook.h"
extern PHONEBOOK * LoadRelationData(RELATIONSHIP relation,U16 *len,DBLACB *phbooklacb);
extern void AddRecordToDB(PHONEBOOK *thisptr,SAVEMODE mode,DBLACB *phbooklacb);
extern U8 EditDetailNote(PHONEBOOK * thisptr, ACCESSSTYLE mode ,U8 PhStyle,U8 *outputname,SAVEMODE savemode,DBLACB *phbooklacb);
extern P_S8 PhoneBookProcess(ACCESSSTYLE accesstyle,PHONEBOOK *getitem);
extern STATUS NewRecordInf(PHONEBOOK * newptr);
//extern DBLACB *phbooklacb; //定义一个数据库控制块的变量
//如果返回的是NULL,表示没有数据输入,即没有选择电话
P_S8 GetCallFromPhbook()//返回的电话号码复制到外部缓存区
{
P_S8 findcall = NULL;
findcall = PhoneBookProcess(EXTER_ACCESS,NULL);
return findcall;
}
void SelectSavePerson(SAVEPERSONSTY *personsel)
{
SAVEPERSONSTY selectp=SEL_NEW;
U32 hGC;
MSG msg;
U32 seltypewin,lbox,bt1,bt2,st;
U8 quit = 0;
P_S8 inform1 = "请选择是新建联系人或者添加号码到已有联系人:";
struct LBOX_ITEM lboxitem[] =
{
ICON_ENABLE, UNDERLINE, "新建联系人",
ICON_ENABLE, UNDERLINE, "保存至已有联系人",
ICON_END, UNDERLINE, NULL
};
seltypewin = CreateWindow(WNDCLASS_WIN,
"提示信息",
WS_OVERLAPPEDWINDOW,
0,0,
PHY_LCD_W,PHY_LCD_H,
0,
0,
NULL);
bt1 = CreateWindow( WNDCLASS_BUTTON,
"确定",
WS_CHILD|BS_REGULAR,
(LCD_WIDTH - 75)/2, 130,
30,
20,
seltypewin,
0,
NULL);
bt2 = CreateWindow( WNDCLASS_BUTTON,
"取消",
WS_CHILD|BS_REGULAR,
(LCD_WIDTH - 75)/2 + 45,130,
30,
20,
seltypewin,
0,
NULL);
st = CreateWindow(WNDCLASS_STATIC, //提示信息
inform1,
WS_CHILD|SS_TEXT|SS_MULTILINE,
(LCD_WIDTH - 100)/2,36,
100,
62,
seltypewin,
0,
NULL);
lbox = CreateWindow( WNDCLASS_LIST,
"ListBox",
WS_CHILD|LBS_POPUP,
(LCD_WIDTH - 110)/2,86,
110,
16,
seltypewin,
0,
lboxitem);
hGC = GetGC();
// EnableWindow(bt1, FALSE);
while(!quit)
{
ASIXGetMessage(&msg, NULL, 0, 0);
switch(msg.message)
{
case WM_COMMAND:
if ( msg.lparam == bt1 )
{
*personsel = selectp;
quit = 1;
} else
if( msg.lparam == bt2 )
{
*personsel = SEL_EXITCHOOSE;
quit = 1;
}
break;
case WM_LISTBOX:
switch(msg.wparam)
{
case 0:selectp = SEL_NEW;
break;
case 1:selectp = SEL_SAVEDPERSON;
break;
default:break;
}
// EnableWindow(bt1, TRUE);
break;
case WM_QUIT:
*personsel = SEL_EXITCHOOSE;
quit = 1;
break;
}
DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam);
}
DestroyWindow( seltypewin );
}
void SelectSaveType(PHONESTYLE * select)
{
MSG msg;
U32 seltypewin,lbox,bt1,bt2,st;
U8 quit = 0;
PHONESTYLE tmpselect;
P_S8 inform1 = "请选择需要保存号码的类型:";
U32 hGC;
struct LBOX_ITEM lboxitem[] =
{
ICON_ENABLE, UNDERLINE, "固话",
ICON_ENABLE, UNDERLINE, "手机",
ICON_ENABLE, UNDERLINE, "寻呼",
ICON_END, UNDERLINE, NULL
};
seltypewin = CreateWindow(WNDCLASS_WIN,
"提示信息",
WS_OVERLAPPEDWINDOW,
0,0,
PHY_LCD_W,PHY_LCD_H,
0,
0,
NULL);
bt1 = CreateWindow( WNDCLASS_BUTTON,
"确定",
WS_CHILD|BS_REGULAR,
(LCD_WIDTH - 75)/2,100,
30,
20,
seltypewin,
0,
NULL);
bt2 = CreateWindow( WNDCLASS_BUTTON,
"取消",
WS_CHILD|BS_REGULAR,
(LCD_WIDTH - 75)/2 + 45,100,
30,
20,
seltypewin,
0,
NULL);
st = CreateWindow(WNDCLASS_STATIC, //提示信息
inform1,
WS_CHILD|SS_TEXT|SS_MULTILINE,
(LCD_WIDTH - 100)/2,36,
100,
22,
seltypewin,
0,
NULL);
lbox = CreateWindow( WNDCLASS_LIST,
"ListBox",
WS_CHILD|LBS_POPUP,
(LCD_WIDTH - 100)/2,66,
100,
16,
seltypewin,
0,
lboxitem);
hGC = GetGC();
// EnableWindow(bt1, FALSE);
tmpselect = TELEPHONE;
while(!quit)
{
ASIXGetMessage(&msg, NULL, 0, 0);
switch(msg.message)
{
case WM_COMMAND:
if ( msg.lparam == bt1 )
{
*select = tmpselect;
quit = 1;
} else
if( msg.lparam == bt2 )
{
*select = NOSTY;
quit = 1;
}
break;
case WM_LISTBOX:
switch(msg.wparam)
{
case 0:tmpselect = TELEPHONE;
break;
case 1:tmpselect = MOBILE;
break;
case 2:tmpselect = BP;
break;
default:break;
}
// EnableWindow(bt1, TRUE);
break;
case WM_QUIT:
*select = NOSTY;
quit = 1;
break;
}
DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam);
}
DestroyWindow( seltypewin );
}
//要求输入的数据不为空
//如果返回的是NULL,表示保存失败
//考虑,选择保存可以有新建,和保存到已经有的人名中
//issaveok 表示保存的状态,有可能在保存过程中用户会退出保存
//issaveok = saveok表示保存成功,否则,表示保存失败
SAVESTS SaveCallIntoPhbook(P_S8 callstr,P_S8 nameout)
{
SAVESTS issaveok = SAVE_CANCEL;
PHONEBOOK newrecord;
PHONEBOOK *newptr;
U8 len;
U32 databst;
PHONESTYLE select = TELEPHONE;
SAVEPERSONSTY personsel = SEL_NEW;
//U8 namebuf[100];
RELATIONSHIP rela = OTHERS;
U8 savetodbst = 0;
P_S8 str1 = "输入项目已满,请重新选择!";
P_S8 str2 = "电话号码本已满,请重新选择!";
U16 msgflag;
U32 hGC;
LOCALSEARCHLIST *findlist;
U16 databstlen=0;
DBLACB *phbooklacb;
hGC = GetGC();
if(callstr == NULL)//先判断输入的数据的正确与否
{
issaveok = SAVE_CANCEL;
return ASIX_ERROR;
}
//选择保存是新建还是添加到已经有的联系人
// CreateDataBase(); //创建数据库
phbooklacb = LinkDataBase(CARD_DATA_BASE);//连接数据库
//需要知道是否已经电话本满了
findlist = LocalFindRecord(phbooklacb, CARD_NAME_FIELD , NULL, GLOBAL_SEARCH );
databstlen = findlist->num; //表示电话本记录的长度
newptr = &newrecord; //新建一个记录
memset(newptr,0x0,sizeof(PHONEBOOK));
NewRecordInf(newptr);//指针赋值到缓冲区
len = (U8)strlen(callstr)+1;
//选择添加入新的联系人OR新建联系人
SelectSavePerson(&personsel);
switch(personsel)
{
case SEL_NEW:
if(databstlen >=PHBOOK_MAXNUM)
{
msgflag = MessageBox(0, str2,"提醒", MB_OK);
goto goout;
}
break;
case SEL_SAVEDPERSON:
PhoneBookProcess(SEARCH_ACCESS,newptr);//需要考虑如果没有选择XXXXX
if((P_S8)(*(newptr->name)) == NULL)
goto goout;
// else strcpy(nameout,newptr->name);
break;
case SEL_EXITCHOOSE: //用户在选择过程中不需要保存信息
issaveok = SAVE_CANCEL;
goto goout;
break;
default:break;
}
//在上面PhoneBookProcess是建立了数据库
//选择保存的数据类型
reselect:
SelectSaveType(&select);
if(personsel ==SEL_NEW)
{
switch(select)
{
case NOSTY://在选择框中,用户点击了退出,则表示不保存了
issaveok = SAVE_CANCEL;
goto goout;
break;
case TELEPHONE:
memcpy(newptr->telbuf[0],callstr,len); //复制电话到缓冲区
break;
case MOBILE:
memcpy(newptr->mobbuf[0],callstr,len); //复制电话到缓冲区
break;
case BP:
memcpy(newptr->bpbuf[0],callstr,len); //复制电话到缓冲区
break;
default:
break;
}
// CreateDataBase(); //创建数据库
phbooklacb = LinkDataBase(CARD_DATA_BASE);//连接数据库
savetodbst = EditDetailNote(newptr, SEARCH_ACCESS,NOSTY,nameout,SAVE_INNEW,phbooklacb);
databst = DetachDataBase(phbooklacb);//断开数据库
}
if(personsel ==SEL_SAVEDPERSON)
{
switch(select)
{
case NOSTY://在选择框中,用户点击了退出,则表示不保存了
issaveok = SAVE_CANCEL;
goto goout;
break;
case TELEPHONE:
if((P_S8)(*(newptr->tel[MAXTELNUM-1]))!=NULL) //如果是选择的类型已经满了
{
msgflag = MessageBox(0, str1,"提醒", MB_OK);
goto reselect;
}
//memcpy(newptr->telbuf[0],callstr,len); //复制电话到缓冲区
if((P_S8)(*(newptr->tel[0])) == NULL)
{
memcpy(newptr->tel[0],callstr,len);
}else
if((P_S8)(*(newptr->tel[1])) == NULL)
{
memcpy(newptr->tel[1],callstr,len);
}else
if((P_S8)(*(newptr->tel[2])) == NULL)
{
memcpy(newptr->tel[2],callstr,len);
}else
if((P_S8)(*(newptr->tel[3])) == NULL)
{
memcpy(newptr->tel[3],callstr,len);
}
break;
case MOBILE:
if((P_S8)(*(newptr->mobile[MAXMOBNUM-1]))!=NULL) //如果是选择的类型已经满了
{
msgflag = MessageBox(0, str1,"提醒", MB_OK);
goto reselect;
}
if((P_S8)(*(newptr->mobile[0])) == NULL)
{
memcpy(newptr->mobile[0],callstr,len);
}else
if((P_S8)(*(newptr->mobile[1])) == NULL)
{
memcpy(newptr->mobile[1],callstr,len);
}else
if((P_S8)(*(newptr->mobile[2])) == NULL)
{
memcpy(newptr->mobile[2],callstr,len);
}else
if((P_S8)(*(newptr->mobile[3])) == NULL)
{
memcpy(newptr->mobile[3],callstr,len);
}
break;
case BP:
if((P_S8)(*(newptr->bp[MAXBPNUM-1])!=0)) //如果是选择的类型已经满了
{
msgflag = MessageBox(0, str1,"提醒", MB_OK);
goto reselect;
}
if((P_S8)(*(newptr->bp[0])) == NULL)
{
memcpy(newptr->bp[0],callstr,len);
}else
if((P_S8)(*(newptr->bp[1])) == NULL)
{
memcpy(newptr->bp[1],callstr,len);
}
break;
default:
break;
}
//savetodbst = EditDetailNote(newptr, INTER_ACCESS,NOSTY, NULL,"新建电话本记录",SaveInNew,hGC);
AddRecordToDB(newptr,SAVE_INEDIT,phbooklacb);
//连接数据库//是编辑
savetodbst = 1;
databst = DetachDataBase(phbooklacb);//断开数据库
}
//如果没有存入数据库,则告诉上层
if(savetodbst == 1)
{
issaveok = SAVE_OK;
}else{
issaveok = SAVE_CANCEL;
}
goout:
//databst = DetachDataBase(cardlacb);//断开数据库
return issaveok;
}
//返回值如果是null,表示没有找到需要的姓名
//字符串比较,可以考虑字符串的过滤
STATUS FindNameFromPhbook(P_S8 callstr,P_S8 outname,P_S8 isfind)
{
PHONEBOOK * loadlist;
PHONEBOOK *pointer;
U16 len;
// U16 count;
U8 i;
U8 findcall = 0;
P_S8 getname = NULL;
U8 compare = 1;
U32 databst;
U8 slen=0;
DBLACB *phbooklacb;
if(callstr == NULL)//判断输入的数据
{
return ASIX_ERROR;
}
// CreateDataBase(CARD_DATA_BASE); //创建数据库
// CreateDataBase();
phbooklacb = LinkDataBase(CARD_DATA_BASE);//连接数据库
loadlist = LoadRelationData(AllRelation,&len,phbooklacb);//生成链表
databst = DetachDataBase(phbooklacb);//断开数据库,只要获得数据链表,就可以断开数据库
if(len == 0)//判断是否导入的链表为空
{
// return NULL;
// (*outname) = NULL;
return ASIX_OK;
}
pointer = loadlist;
while(pointer !=NULL)//遍历数据链表
{
for(i = 0;i<MAXTELNUM;i++)
{
compare = strcmp(callstr,pointer->tel[i]);
if(compare == 0)
{
findcall = 1;
}
}
for(i=0;i<MAXMOBNUM;i++)
{
compare = strcmp(callstr,pointer->mobile[i]);
if(compare == 0)
{
findcall = 1;
}
}
for(i=0;i<MAXBPNUM;i++)
{
compare = strcmp(callstr,pointer->bp[i]);
if(compare == 0)
{
findcall = 1;
}
}
if(findcall == 1)
{
getname = pointer->name;
if(getname == NULL)
{
return ASIX_ERROR;
}
slen = (U8)strlen(getname)+1;
memcpy(outname,getname,slen);
*isfind = 1;
return ASIX_OK;
}
pointer = pointer->next;
}
// (*outname) = NULL;
*isfind =0;
return ASIX_OK; //表示没有查询到数据
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -