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

📄 userdata.cpp

📁 这个基于嵌入式平台SMART PHONE电子邮件收发管理系统(MAIL MAN是一个电子邮件客户端软件。它以很小的体积
💻 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 + -