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

📄 idbusage.c

📁 该源码实现了为现场人员创建拥有GUI的嵌入式数据库,现场人员通过获得数据可以进行薪水调查,数据包括职位,企业类型,年收入,阅历
💻 C
字号:
#include "AEEModGen.h"
#include "AEEAppGen.h"
#include "AEEMenu.h"
#include "AEEDB.h"
#include "AEEText.h"
#include "AEEStdLib.h"
#include "AEEUsageAppIDs.h"
#include "idbusage_res.h"
#define APP_RES_FILE      "idbusage.bar"
#define ADDRECORD         102
#define CREATERECORD      104
#define GETNEXTRECORD     107
#define BORDER_WIDTH       5
typedef struct _CIDBApp
{
AEEApplet	a;        
IMenuCtl *  m_pIMenu;
ITextCtl *  m_pIText1;
ITextCtl *  m_pIText2;
ITextCtl *  m_pIText3;
ITextCtl *  m_pIText4;
ITextCtl *  m_pIText5;
IMenuCtl * m_pSKMenu;
AEEDeviceInfo   di;
AEERect         rc;
int             lh;
}CIDBApp;
char szResFile[] = APP_RES_FILE;
AECHAR buf1[50] = {0};
AECHAR buf2[50] = {0};
AECHAR buf3[50] = {0};
AECHAR buf4[50] = {0};
AECHAR buf5[50] = {0};
char str1[50];
char str2[50];
char str3[50];
char str4[50];
char str5[50];
static boolean DBApp_HandleEvent(IApplet * ap, AEEEvent ae,
uint16 wp, uint32 dwp);
static boolean IDB_InitAppData(IApplet* iap);
static void IDB_FreeAppData(IApplet* iap);
static void BuildMainMenu(CIDBApp *iap);
static void IDBUsage (CIDBApp * iap, uint16 wp);
static void DisplayOutput(CIDBApp * iap, int nline, char *str);
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,
IModule * po,void ** obj)
{
*obj = NULL;
if(ClsId == AEECLSID_DATABASE_APP)
{
if(AEEApplet_New(sizeof(CIDBApp), ClsId,pIShell,po,(IApplet**)obj,
(AEEHANDLER)DBApp_HandleEvent,(PFNFREEAPPDATA)IDB_FreeAppData)==
TRUE)
{
if (IDB_InitAppData((IApplet*)*obj) == TRUE)
{
return(AEE_SUCCESS);
}
}
}
return (EFAILED);
}
static boolean DBApp_HandleEvent(IApplet * ap, AEEEvent ae, 
uint16 wp, uint32 dwp)
{  
CIDBApp * iap = (CIDBApp*)ap;
AECHAR title[20], text[100];
switch (ae) 
{
case EVT_APP_START:
if(ISHELL_CreateInstance(iap->a.m_pIShell, AEECLSID_MENUCTL,
(void **)&iap->m_pIMenu)
!= SUCCESS)
{
return FALSE;
}
BuildMainMenu(iap);
return(TRUE);
case EVT_APP_STOP:
return(TRUE);
case EVT_KEY: 
if ((iap->m_pIText1 != NULL) && 
ITEXTCTL_HandleEvent(iap->m_pIText1, EVT_KEY, wp, 0))
return TRUE;
if ((iap->m_pIText2 != NULL) && 
ITEXTCTL_HandleEvent(iap->m_pIText2, EVT_KEY, wp, 0))
return TRUE;
if ((iap->m_pIText3 != NULL) && 
ITEXTCTL_HandleEvent(iap->m_pIText3, EVT_KEY, wp, 0))
return TRUE;
if ((iap->m_pIText4 != NULL) && 
ITEXTCTL_HandleEvent(iap->m_pIText4, EVT_KEY, wp, 0))
return TRUE;
if ((iap->m_pIText5 != NULL) && 
ITEXTCTL_HandleEvent(iap->m_pIText5, EVT_KEY, wp, 0))
return TRUE;        
if (iap->m_pSKMenu != NULL && IMENUCTL_HandleEvent(iap->m_pSKMenu, 
EVT_KEY, wp, 0))
return TRUE;
if(iap->m_pIMenu != NULL && IMENUCTL_HandleEvent(iap->m_pIMenu,
EVT_KEY, wp, 0))
return TRUE;
return FALSE;
case EVT_COMMAND:
switch(wp)
{
case IDS_RETURN_TO_MENU:
if (iap->m_pIText1 != NULL)
{
IMENUCTL_Release(iap->m_pIText1);
iap->m_pIText1 = NULL;
}
if (iap->m_pIText2 != NULL)
{
IMENUCTL_Release(iap->m_pIText2);
iap->m_pIText2 = NULL;
}
if (iap->m_pIText3 != NULL)
{
IMENUCTL_Release(iap->m_pIText3);
iap->m_pIText3 = NULL;
}
if (iap->m_pIText4 != NULL)
{
IMENUCTL_Release(iap->m_pIText4);
iap->m_pIText4 = NULL;
}
if (iap->m_pIText5 != NULL)
{
IMENUCTL_Release(iap->m_pIText5);
iap->m_pIText5 = NULL;
}
if (iap->m_pSKMenu != NULL)
{
IMENUCTL_Release(iap->m_pSKMenu);
iap->m_pSKMenu = NULL;
}
IMENUCTL_SetActive(iap->m_pIMenu, TRUE);
IMENUCTL_Redraw(iap->m_pIMenu);
return TRUE;					
case IDS_ITEM_1:
case IDS_ITEM_2:
case IDS_ITEM_3:
case IDS_ITEM_4:
case ADDRECORD:
case CREATERECORD:
case GETNEXTRECORD:
IDBUsage(iap, wp);
return TRUE;
default:
return FALSE;
}
default:
break;
}
return FALSE;
}
static boolean IDB_InitAppData(IApplet* ap)
{
int pnAscent;        
int pnDescent;      
CIDBApp * iap = (CIDBApp*)ap;
iap->m_pIMenu = NULL;
iap->lh = IDISPLAY_GetFontMetrics (iap->a.m_pIDisplay,
AEE_FONT_NORMAL,
&pnAscent, &pnDescent);
ISHELL_GetDeviceInfo(iap->a.m_pIShell,&iap->di);
iap->rc.x = BORDER_WIDTH;
iap->rc.y = BORDER_WIDTH;
iap->rc.dx = iap->di.cxScreen - (2 * BORDER_WIDTH);
iap->rc.dy = iap->di.cyScreen - (2 * BORDER_WIDTH);
return TRUE;
}
static void IDB_FreeAppData(IApplet* ap)
{
CIDBApp * iap = (CIDBApp*)ap;
if (iap->m_pIMenu != NULL)
{
IMENUCTL_Release (iap->m_pIMenu);
iap->m_pIMenu = NULL;
}   
}
static void IDBUsage (CIDBApp * iap, uint16 wp)
{
IShell *pIShell = iap->a.m_pIShell;
AEERect rect1,rect2,rect3;
AECHAR szBuf [50] = {0};
AECHAR szBuf1[50] = {0};
IDISPLAY_ClearScreen (iap->a.m_pIDisplay);
switch (wp)
{
case ADDRECORD:
{
ISHELL_CreateInstance(pIShell, AEECLSID_TEXTCTL,
(void **)&iap->m_pIText1);
STR_TO_WSTR("Designation :", szBuf1, sizeof(szBuf1));
ITEXTCTL_SetTitle(iap->m_pIText1, NULL, NULL, szBuf1);
ITEXTCTL_SetProperties(iap->m_pIText1, TP_FRAME | TP_MULTILINE );
SETAEERECT (&rect1, 10,50,120,40); 
ITEXTCTL_SetRect(iap->m_pIText1, &rect1);
ITEXTCTL_SetActive (iap->m_pIText1, TRUE);
if(ISHELL_CreateInstance(iap->a.m_pIShell, AEECLSID_SOFTKEYCTL, 
(void **)&iap->m_pSKMenu) != SUCCESS)
return TRUE;
STR_TO_WSTR("Next Feild >>", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(iap->m_pSKMenu, 0, 0, IDS_ITEM_1,szBuf , 0);
IMENUCTL_SetActive(iap->m_pSKMenu,TRUE);
}
break;
case IDS_ITEM_1:
{
ITEXTCTL_GetText (iap->m_pIText1, buf1, sizeof (buf1));
WSTR_TO_STR (buf1, str1, sizeof (str1));
if (iap->m_pIText1 != NULL)
{
ITEXTCTL_SetActive (iap->m_pIText1, FALSE);
}
IDISPLAY_ClearScreen (iap->a.m_pIDisplay);
ISHELL_CreateInstance(pIShell, AEECLSID_TEXTCTL, 
(void **)&iap->m_pIText2);
STR_TO_WSTR("Type of ORG :", szBuf1, sizeof(szBuf1));
ITEXTCTL_SetTitle(iap->m_pIText2, NULL, NULL, szBuf1);
ITEXTCTL_SetProperties(iap->m_pIText2, TP_FRAME | TP_MULTILINE );
SETAEERECT (&rect2, 10,50,120,40); 
ITEXTCTL_SetRect(iap->m_pIText2, &rect2);
ITEXTCTL_SetActive (iap->m_pIText2, TRUE);
if(ISHELL_CreateInstance(iap->a.m_pIShell, AEECLSID_SOFTKEYCTL, 
(void **)&iap->m_pSKMenu) != SUCCESS)
return TRUE;
STR_TO_WSTR("Next Feild >>", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(iap->m_pSKMenu, 0, 0, IDS_ITEM_2,szBuf , 0);
IMENUCTL_SetActive(iap->m_pSKMenu,TRUE);
}
break;
case IDS_ITEM_2:
{
ITEXTCTL_GetText (iap->m_pIText2, buf2, sizeof (buf2));
WSTR_TO_STR (buf2, str2, sizeof (str2));
if (iap->m_pIText2 != NULL)
{
ITEXTCTL_SetActive (iap->m_pIText2, FALSE);
}
IDISPLAY_ClearScreen (iap->a.m_pIDisplay);
ISHELL_CreateInstance(pIShell, AEECLSID_TEXTCTL,
(void **)&iap->m_pIText3);
STR_TO_WSTR("Annual Salary :", szBuf1, sizeof(szBuf1));
ITEXTCTL_SetTitle(iap->m_pIText3, NULL, NULL, szBuf1);
ITEXTCTL_SetProperties(iap->m_pIText3, TP_FRAME | TP_MULTILINE );
SETAEERECT (&rect3, 10,50,120,40); 
ITEXTCTL_SetRect(iap->m_pIText3, &rect3);
ITEXTCTL_SetActive (iap->m_pIText3, TRUE);
if(ISHELL_CreateInstance(iap->a.m_pIShell, AEECLSID_SOFTKEYCTL, 
(void **)&iap->m_pSKMenu) != SUCCESS)
return TRUE;
STR_TO_WSTR("Next Field >>", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(iap->m_pSKMenu, 0, 0, IDS_ITEM_3,szBuf , 0);
IMENUCTL_SetActive(iap->m_pSKMenu,TRUE);
}
break;
case IDS_ITEM_3:
{
ITEXTCTL_GetText (iap->m_pIText3, buf3, sizeof (buf3));
WSTR_TO_STR (buf3, str3, sizeof (str3));
if (iap->m_pIText3 != NULL)
{
ITEXTCTL_SetActive (iap->m_pIText3, FALSE);
}
IDISPLAY_ClearScreen (iap->a.m_pIDisplay);
ISHELL_CreateInstance(pIShell, AEECLSID_TEXTCTL,
(void **)&iap->m_pIText4);
STR_TO_WSTR("Service :", szBuf1, sizeof(szBuf1));
ITEXTCTL_SetTitle(iap->m_pIText4, NULL, NULL, szBuf1);
ITEXTCTL_SetProperties(iap->m_pIText4, TP_FRAME | TP_MULTILINE );
SETAEERECT (&rect1, 10,50,120,40); 
ITEXTCTL_SetRect(iap->m_pIText4, &rect1);
ITEXTCTL_SetActive (iap->m_pIText4, TRUE);
if(ISHELL_CreateInstance(iap->a.m_pIShell, AEECLSID_SOFTKEYCTL, 
(void **)&iap->m_pSKMenu) != SUCCESS)
return TRUE;
STR_TO_WSTR("Next Feild >>", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(iap->m_pSKMenu, 0, 0, IDS_ITEM_4,szBuf , 0);
IMENUCTL_SetActive(iap->m_pSKMenu,TRUE);
}
break;
case IDS_ITEM_4:
{
ITEXTCTL_GetText (iap->m_pIText4, buf4, sizeof (buf4));
WSTR_TO_STR (buf4, str4, sizeof (str4));
if (iap->m_pIText4 != NULL)
{
ITEXTCTL_SetActive (iap->m_pIText4, FALSE);
}
IDISPLAY_ClearScreen (iap->a.m_pIDisplay);
ISHELL_CreateInstance(pIShell, AEECLSID_TEXTCTL,
(void **)&iap->m_pIText5);
STR_TO_WSTR("Tot. Exp :", szBuf1, sizeof(szBuf1));
ITEXTCTL_SetTitle(iap->m_pIText5, NULL, NULL, szBuf1);
ITEXTCTL_SetProperties(iap->m_pIText5, TP_FRAME | TP_MULTILINE );
SETAEERECT (&rect1, 10,50,120,40); 
ITEXTCTL_SetRect(iap->m_pIText5, &rect1);
ITEXTCTL_SetActive (iap->m_pIText5, TRUE);
if(ISHELL_CreateInstance(iap->a.m_pIShell, AEECLSID_SOFTKEYCTL, 
(void **)&iap->m_pSKMenu) != SUCCESS)
return TRUE;
STR_TO_WSTR("Finish", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(iap->m_pSKMenu, 0, 0, CREATERECORD,szBuf , 0);
STR_TO_WSTR("Reutrn", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(iap->m_pSKMenu, 0, 0, IDS_RETURN_TO_MENU,szBuf ,
0);
IMENUCTL_SetActive(iap->m_pSKMenu,TRUE);
}
break;
case CREATERECORD:
{
IDBMgr *dbm = NULL;
IDatabase * db = NULL;
IDBRecord *rec = NULL;
int num = 5;
AEEDBField field[5]; 
const char desg[50] ;
const char org [50]; 
const char sal[50];
const char serv[50] ;
const char exp[50] ;
boolean bCreate = FALSE;
ITEXTCTL_GetText (iap->m_pIText5, buf5, sizeof (buf5));
WSTR_TO_STR (buf5, str5, sizeof (str5));
if (iap->m_pIText5 != NULL)
{
ITEXTCTL_SetActive (iap->m_pIText5, FALSE);
}
IDISPLAY_ClearScreen (iap->a.m_pIDisplay);
strcpy(desg,str1);
strcpy(org,str2);
strcpy(sal,str3);
strcpy(serv,str4);
strcpy(exp,str5);
field[0].fName = AEEDBFIELD_FULLNAME;
field[0].fType = AEEDB_FT_STRING;
field[0].pBuffer = (void *)desg;
field[0].wDataLen = STRLEN (desg);
field[1].fName = AEEDBFIELD_ADDRESS;
field[1].fType = AEEDB_FT_STRING;
field[1].pBuffer = (void *)org;
field[1].wDataLen = STRLEN (org);
field[2].fName = AEEDBFIELD_TEXT;;
field[2].fType = AEEDB_FT_STRING;
field[2].pBuffer = (void *)sal;
field[2].wDataLen = STRLEN (sal);
field[3].fName = AEEDBFIELD_TEXT;;
field[3].fType = AEEDB_FT_STRING;
field[3].pBuffer = (void *)serv;
field[3].wDataLen = STRLEN (serv);
field[4].fName = AEEDBFIELD_TEXT;;
field[4].fType = AEEDB_FT_STRING;
field[4].pBuffer = (void *)exp;
field[4].wDataLen = STRLEN (exp);
ISHELL_CreateInstance(pIShell, AEECLSID_DBMGR, (void **)&dbm);
if (dbm == NULL)
return;
if ((db = IDBMGR_OpenDatabase (dbm, "db1", bCreate))
== NULL)
{
bCreate = TRUE; 
if ((db = IDBMGR_OpenDatabase (dbm, "db1", bCreate))
!= NULL)
{
DisplayOutput (iap, 1, "Database open successful");
if ((rec = IDATABASE_CreateRecord (db, field,
num))
!= NULL)
{
DisplayOutput (iap, 2, "Create DB: successful");
IDBRECORD_Release (rec);
}
else
{
DisplayOutput (iap, -1, "Create DB: Failed");
}
IDATABASE_Release (db);
}
else
{
DisplayOutput (iap, -1, "Database open failed");
}
}
else
{
DisplayOutput (iap, 1, "Opened an already existing Database.");
if ((rec = IDATABASE_CreateRecord (db, field, 
num))!= NULL)
{
DisplayOutput (iap, 2, "Create DB: successful");
IDBRECORD_Release (rec);
}
else
{
DisplayOutput (iap, -1, "Create DB: Failed");
}
IDATABASE_Release (db); 
}
IDBMGR_Release (dbm);
}
break;
case GETNEXTRECORD:
{
IDBMgr    * dbm = NULL;
IDatabase * db = NULL;
IDBRecord * pIDBRec1 = NULL;
char szBuf[10] = {0};
char szBuf1[100] = {0};
AEEDBFieldType type;
AEEDBFieldName name;
uint16 len;
byte * data = NULL;
int i,j=1;
uint32 count=0;
ISHELL_CreateInstance(pIShell, AEECLSID_DBMGR, (void **)&dbm);
if (dbm == NULL)
return;
if ((db = IDBMGR_OpenDatabase (dbm, "db1", FALSE)) ==
NULL)
{
IDBMGR_Release (dbm);
return;
}
count=IDATABASE_GetRecordCount(db);
DisplayOutput (iap, 0,"Desg      Org   Sal   Serv   Exp" );
for(i=0;i<count;i++){
pIDBRec1 = IDATABASE_GetNextRecord (db);
if (pIDBRec1 != NULL)
{
type = IDBRECORD_NextField (pIDBRec1, &name, &len);
data = IDBRECORD_GetField (pIDBRec1, &name, &type, 
&len);
if (data != NULL)
{
SPRINTF (szBuf, "%4s", (char *)data);
strcat(szBuf1,szBuf);
}
type = IDBRECORD_NextField (pIDBRec1, &name, &len);
data = IDBRECORD_GetField (pIDBRec1, &name, &type, 
&len);
if (data != NULL)
{
SPRINTF (szBuf, " %10s", (char *)data);
strcat(szBuf1,szBuf);
}
type = IDBRECORD_NextField (pIDBRec1, &name, &len);
data = IDBRECORD_GetField (pIDBRec1, &name, &type, 
&len);
if (data != NULL)
{
SPRINTF (szBuf, " %6s",(char *)data);
strcat(szBuf1,szBuf);
}
type = IDBRECORD_NextField (pIDBRec1, &name, &len);
data = IDBRECORD_GetField (pIDBRec1, &name, &type, 
&len);
if (data != NULL)
{
SPRINTF (szBuf, " %3s",(char *)data);
strcat(szBuf1,szBuf);
}
type = IDBRECORD_NextField (pIDBRec1, &name, &len);
data = IDBRECORD_GetField (pIDBRec1, &name, &type,
&len);
if (data != NULL)
{
SPRINTF (szBuf, " %3s",(char *)data);
strcat(szBuf1,szBuf);
DisplayOutput (iap, ++j, szBuf1);
}
strcpy(szBuf1,"");
}
IDBRECORD_Release(pIDBRec1);
}
IDATABASE_Release (db);
IDBMGR_Release (dbm);         
}
break;
default:
return;
}
return;
}
static void BuildMainMenu(CIDBApp *iap)
{
AEERect rc;
AECHAR szBuf[40];
if (iap->m_pIMenu == NULL || iap->a.m_pIShell == NULL)
return;
STR_TO_WSTR("IDB Functions:", szBuf, sizeof(szBuf));
IMENUCTL_SetTitle(iap->m_pIMenu, NULL, 0, szBuf);
SETAEERECT (&rc, 0, 0, iap->di.cxScreen,
iap->di.cyScreen);
IMENUCTL_SetRect(iap->m_pIMenu, &rc);  
STR_TO_WSTR("1.  AddRecord", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(iap->m_pIMenu, 0, 0, ADDRECORD, szBuf, 0);
STR_TO_WSTR("2.  RetrieveRecords", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(iap->m_pIMenu, 0, 0, GETNEXTRECORD, szBuf, 0);	
IMENUCTL_SetActive(iap->m_pIMenu,TRUE);
}
static void DisplayOutput(CIDBApp * iap, int nline, char *str)
{
AECHAR * pszBuf = NULL;
AECHAR * psz = NULL;
int width;
AEEFont font = AEE_FONT_NORMAL;
int fits = 0, dy;
int tch = 0;
if (iap == NULL)
return;
if ((pszBuf = (AECHAR *)MALLOC(200)) == NULL)
return;
STR_TO_WSTR ((char *)str, pszBuf, 200);
if (nline < 0) {
dy = iap->di.cyScreen*2/5;
}
else{
dy = nline * iap->lh;
}
psz = pszBuf;
tch = STRLEN ((char *)str);
while ((tch > 0) && (*psz != NULL))
{ 
width = IDISPLAY_MeasureTextEx(iap->a.m_pIDisplay,
font, 
(AECHAR *) psz, 
-1,
iap->di.cxScreen - 5, 
&pnFits);         
if (fits== 0)
{
FREE (pszBuf);
return;
}
IDISPLAY_DrawText(iap->a.m_pIDisplay, AEE_FONT_NORMAL, psz,
pnFits, 5 ,dy, 0 , 0);
psz += pnFits;     
tch -= pnFits;  
dy += iap->lh;  
IDISPLAY_Update(iap->a.m_pIDisplay);
if (tch < pnFits)
fits= tch;  
}
FREE (pszBuf);
return;   
}

⌨️ 快捷键说明

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