📄 userdata.cpp
字号:
#include "stdafx.h"
#include "userData.h"
#include "resource.h"
const LPWSTR VOLUMENAME=L"\\LoginVolum";
const LPWSTR DBNAME=L"LoginDB";
TCHAR g_username[ADDRESS_LENTH];
userDataDB::userDataDB(HINSTANCE hinst)
{
TCHAR vname[50];
g_hDB=NULL;
g_nLastSort=PID_NAME;
LoadString(hinst,IDS_STRING_APPDATAPATH,vname,50);
lstrcat(vname,VOLUMENAME);
if(CeMountDBVol(&m_ceguid,vname,OPEN_ALWAYS)==FALSE)
{
}
}
userDataDB::~userDataDB()
{
CloseHandle (g_hDB);
if(CeUnmountDBVol(&m_ceguid)==FALSE)
MessageBox(NULL,L"err",L"err",MB_OK|MB_ICONERROR);
}
BOOL userDataDB::OpenOrCreateDB()
{
int rc;
CEOID id = 0;
CEPROPID proid=PID_NAME;
g_oidDB=0;
g_hDB=CeOpenDatabaseEx(&m_ceguid,&id,DBNAME,PID_NAME,CEDB_AUTOINCREMENT,NULL);
if(g_hDB==INVALID_HANDLE_VALUE)
{
rc=GetLastError();
if(rc==ERROR_FILE_NOT_FOUND)
{
CEDBASEINFO dbinfo;
dbinfo.dwFlags = CEDB_VALIDNAME|CEDB_VALIDTYPE|CEDB_VALIDSORTSPEC;
lstrcpy(dbinfo.szDbaseName,DBNAME);
dbinfo.dwDbaseType = CEDB_VALIDNAME;
dbinfo.wNumSortOrder = 1;
dbinfo.rgSortSpecs[0].propid = PID_NAME;
dbinfo.rgSortSpecs[0].dwFlags = 0;
dbinfo.rgSortSpecs[1].propid = PID_PASSWD;
dbinfo.rgSortSpecs[1].dwFlags = 0;
dbinfo.rgSortSpecs[2].propid = PID_SMTP_SEVERNAME;
dbinfo.rgSortSpecs[2].dwFlags = 0;
dbinfo.rgSortSpecs[3].propid = PID_POP3_SEVERNAME;
dbinfo.rgSortSpecs[3].dwFlags = 0;
dbinfo.rgSortSpecs[4].propid = PID_PASSWD_MAIL;
dbinfo.rgSortSpecs[4].dwFlags = 0;
dbinfo.rgSortSpecs[5].propid = PID_DELETE_OPTION;
dbinfo.rgSortSpecs[5].dwFlags = 0;
dbinfo.rgSortSpecs[6].propid = PID_DIS_NAME;
dbinfo.rgSortSpecs[6].dwFlags = 0;
dbinfo.rgSortSpecs[7].propid = PID_SAVE_PASS;
dbinfo.rgSortSpecs[7].dwFlags = 0;
dbinfo.rgSortSpecs[8].propid = PID_RECE_MANU;
dbinfo.rgSortSpecs[8].dwFlags = 0;
if(CeCreateDatabaseEx(&m_ceguid,&dbinfo) == NULL)
{
DWORD error = GetLastError();
TCHAR szErr[128];
wsprintf(szErr,L"Database create failed, rc%d",GetLastError());
MessageBox(NULL,szErr,L"err",MB_OK|MB_ICONERROR);
return FALSE;
}
else
{
g_hDB=CeOpenDatabaseEx(&m_ceguid,&id,DBNAME,PID_NAME,CEDB_AUTOINCREMENT,NULL);
}
}
else if(rc==ERROR_INVALID_PARAMETER)
{
return FALSE;
}
}
getRecordNum();
return TRUE;
}
BOOL userDataDB::AddRecord(userData &record)
{
CEOID f;
if(NameExist(record.name,f))
{
return FALSE;
}
record.m_oidRecord=0;
CEPROPVAL newData[NUM_DBUSER_PROPS];
newData[0].propid=PID_NAME;
newData[0].wFlags = 0;
newData[0].val.lpwstr = record.name;
newData[1].propid=PID_PASSWD;
newData[1].wFlags = 0;
newData[1].val.lpwstr = record.password;
newData[2].propid=PID_SMTP_SEVERNAME;
newData[2].wFlags = 0;
newData[2].val.lpwstr = record.smtp_name;
newData[3].propid=PID_POP3_SEVERNAME;
newData[3].wFlags = 0;
newData[3].val.lpwstr = record.pop3_name;
newData[4].propid=PID_PASSWD_MAIL;
newData[4].wFlags = 0;
newData[4].val.lpwstr = record.pass_mail;
newData[5].propid=PID_DELETE_OPTION;
newData[5].wFlags = 0;
newData[5].val.boolVal = record.delete_option;
newData[6].propid=PID_DIS_NAME;
newData[6].wFlags = 0;
newData[6].val.lpwstr = record.display_name;
newData[7].propid=PID_SAVE_PASS;
newData[7].wFlags = 0;
newData[7].val.boolVal = record.save_pass;
newData[8].propid=PID_RECE_MANU;
newData[8].wFlags = 0;
newData[8].val.boolVal = record.rece_manu;
newData[9].propid = PID_USER_NAME;
newData[9].wFlags = 0;
newData[9].val.lpwstr = record.user_name;
if(CeWriteRecordProps(g_hDB,record.m_oidRecord,NUM_DBUSER_PROPS,newData) == 0)
return FALSE;
return TRUE;
}
BOOL userDataDB::DelRecord(userData &record)
{
return CeDeleteRecord(g_hDB,record.m_oidRecord);
}
BOOL userDataDB::EditRecord(userData &record)
{
CEPROPVAL newData[NUM_DBUSER_PROPS];
newData[0].propid=PID_NAME;
newData[0].wFlags = 0;
newData[0].val.lpwstr = record.name;
newData[1].propid=PID_PASSWD;
newData[1].wFlags = 0;
newData[1].val.lpwstr = record.password;
newData[2].propid=PID_SMTP_SEVERNAME;
newData[2].wFlags = 0;
newData[2].val.lpwstr = record.smtp_name;
newData[3].propid=PID_POP3_SEVERNAME;
newData[3].wFlags = 0;
newData[3].val.lpwstr = record.pop3_name;
newData[4].propid=PID_PASSWD_MAIL;
newData[4].wFlags = 0;
newData[4].val.lpwstr = record.pass_mail;
newData[5].propid=PID_DELETE_OPTION;
newData[5].wFlags = 0;
newData[5].val.boolVal = record.delete_option;
newData[6].propid=PID_DIS_NAME;
newData[6].wFlags = 0;
newData[6].val.lpwstr = record.display_name;
newData[7].propid=PID_SAVE_PASS;
newData[7].wFlags = 0;
newData[7].val.boolVal = record.save_pass;
newData[8].propid=PID_RECE_MANU;
newData[8].wFlags = 0;
newData[8].val.boolVal = record.rece_manu;
newData[9].propid = PID_USER_NAME;
newData[9].wFlags = 0;
newData[9].val.lpwstr = record.user_name;
if(CeWriteRecordProps(g_hDB,record.m_oidRecord,NUM_DBUSER_PROPS,newData) == 0)
return FALSE;
return TRUE;
}
BOOL userDataDB::ReadRecord(userData &record)
{
WORD wProps;
CEOID oid;
PCEPROPVAL pRecord;
PBYTE pBuff;
DWORD dwRecSize;
int i;
// Read all properties for the record.
pBuff = 0; // Let the function allocate the buffer.
oid = CeReadRecordProps(g_hDB, CEDB_ALLOWREALLOC, &wProps, NULL,
&(LPBYTE)pBuff, &dwRecSize);
// Failure on read.
if (oid == 0)
return FALSE;
// Copy the data from the record to the structure. The order
// of the array is not defined.
memset (&record, 0 , sizeof (userData)); // Zero return struct
record.m_oidRecord = oid;
pRecord = (PCEPROPVAL)pBuff; // Point to CEPROPVAL
// array.
for (i = 0; i < wProps; i++)
{
switch (pRecord->propid)
{
case PID_NAME:
lstrcpy (record.name, pRecord->val.lpwstr);
break;
case PID_PASSWD:
lstrcpy (record.password, pRecord->val.lpwstr);
break;
case PID_SMTP_SEVERNAME:
lstrcpy(record.smtp_name,pRecord->val.lpwstr);
break;
case PID_POP3_SEVERNAME:
lstrcpy(record.pop3_name,pRecord->val.lpwstr);
break;
case PID_PASSWD_MAIL:
lstrcpy(record.pass_mail,pRecord->val.lpwstr);
break;
case PID_DELETE_OPTION:
record.delete_option=pRecord->val.boolVal;
break;
case PID_DIS_NAME:
lstrcpy(record.display_name,pRecord->val.lpwstr);
break;
case PID_SAVE_PASS:
record.save_pass=pRecord->val.boolVal;
break;
case PID_RECE_MANU:
record.rece_manu=pRecord->val.boolVal;
break;
case PID_USER_NAME:
lstrcpy(record.user_name,pRecord->val.lpwstr);
break;
}
pRecord++;
}
LocalFree (pBuff);
return TRUE;
}
int userDataDB::getRecordNum()
{
HANDLE hDBList;
CEOID oidDB;
CEOIDINFO dbinfo;
hDBList = CeFindFirstDatabaseEx (&m_ceguid,CEDB_VALIDNAME);
if (hDBList != INVALID_HANDLE_VALUE)
{
oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
while (oidDB)
{
CeOidGetInfoEx(&m_ceguid,oidDB,&dbinfo);
if(dbinfo.wObjType == OBJTYPE_DATABASE)
{
if(lstrcmp(dbinfo.infDatabase.szDbaseName,DBNAME) == 0)
return dbinfo.infDatabase.wNumRecords;
}
oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
}
CloseHandle (hDBList);
}
return -1;
}
BOOL userDataDB::NameExist(LPWSTR username,CEOID &idid)//exist return true,or return false
{
CEPROPVAL pro;
pro.propid = PID_NAME;
pro.wLenData = 0;
pro.wFlags = 0;
pro.val.lpwstr = username;
CEOID res = CeSeekDatabaseEx(g_hDB,CEDB_SEEK_VALUEFIRSTEQUAL,(DWORD)(&pro),1,NULL);
if(res!=0)
{
idid = res;
return TRUE;
}
return FALSE;
}
BOOL userDataDB::EditUser(userData& record)
{
CEPROPVAL pro;
pro.propid = PID_NAME;
pro.wLenData = 0;
pro.wFlags = 0;
pro.val.lpwstr = record.name;
CEOID res = CeSeekDatabaseEx(g_hDB,CEDB_SEEK_VALUEFIRSTEQUAL,(DWORD)(&pro),1,NULL);
if(res!=0)
{
record.m_oidRecord=res;
EditRecord(record);
return TRUE;
}
return FALSE;
}
BOOL userDataDB::DelUser(LPWSTR username)
{
CEOID id;
if(NameExist(username,id)==TRUE)
{
return(CeDeleteRecord(g_hDB,id));
}
else
{
return FALSE;
}
}
BOOL userDataDB::AddUser(userData& record)
{
return (AddRecord(record));
}
BOOL userDataDB::GetUserInfo(LPWSTR username,userData& record)
{
CEPROPVAL pro;
pro.propid = PID_NAME;
pro.wLenData = 0;
pro.wFlags = 0;
pro.val.lpwstr = username;
if(CeSeekDatabaseEx(g_hDB,CEDB_SEEK_VALUEFIRSTEQUAL,(DWORD)(&pro),1,NULL)!=0)
{
ReadRecord(record);
return TRUE;
}
return FALSE;
}
BOOL userDataDB::CheckLoginProgram(LPWSTR username,LPWSTR password)
{
userData data;
if(!GetUserInfo(username,data))
return FALSE;
if(wcscmp(data.password,password)==0)
return TRUE;
return FALSE;
}
BOOL userDataDB::GetUserName(int index, TCHAR name[])
{
userData user;
if(index < 0 || index >= getRecordNum())
return FALSE;
if(CeSeekDatabaseEx(g_hDB,CEDB_SEEK_BEGINNING,index,0,NULL) == 0)
return FALSE;
ReadRecord(user);
lstrcpy(name,user.name);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -