请教:想为自己的软件做一个身份确认界面 只有在正确输入用户命和密码的条件下才可运行,请问高手们,我该怎么做,同时,用户及密码信息怎么管理?怎么加密?需要用到数据库吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用户比较少就直接在代码里写上就可以了,如果比较多而且是动态的最好用数据库你可以用模式对话框控制,如果密码与用户名都正确,就OnOK(){},否则的话就是UpDateData(false)让重新输入用户名密码 BOOL CYourApp::InitInstance(){//some code //登陆系统 CString name; CLoginDlg theDlg; if (IDOK == theDlg.DoModal()) name = theDlg.m_name; else return FALSE;//some code}BOOL CLoginDlg::OnInitDialog() { CDialog::OnInitDialog(); HRESULT hr; try { hr = pCon.CreateInstance(__uuidof(Connection));///创建Connection对象 if(SUCCEEDED(hr)) { TCHAR szPath[MAX_PATH]; GetModuleFileName(NULL, szPath, sizeof(szPath) / sizeof(TCHAR)); if (_tcsrchr(szPath, _T('\\')) != NULL) { *_tcsrchr(szPath, _T('\\')) = _T('\0'); } CString s; s.Format(_T("File Name=%s\\xxxxx.udl"), szPath); pCon->ConnectionTimeout=5; pCon->ConnectionString = (_bstr_t)s; hr = pCon->Open("","","",adConnectUnspecified); } } catch(_com_error e)///捕捉异常 { CString errormessage; errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage()); AfxMessageBox(errormessage);///显示错误信息 } pRs.CreateInstance(__uuidof(Recordset)); _variant_t vFieldValue; CString strFieldValue; CString strSQL = "select name from login order by ID"; //创建并打开记录集对象 try{ pRs = pCon->Execute(_bstr_t(strSQL), NULL, adCmdText); while(!pRs->adoEOF) { vFieldValue = pRs->GetCollect("name"); strFieldValue = (char*)_bstr_t(vFieldValue); m_ctrlName.AddString(strFieldValue); pRs->MoveNext(); } } catch(_com_error e) { CString errormessage; errormessage.Format("读取数据库失败!\r\n错误信息:%s",e.ErrorMessage()); AfxMessageBox(errormessage);//显示错误信息 } if (m_ctrlName.GetCount()) m_ctrlName.SetCurSel(0);}void CLoginDlg::OnOK() { // TODO: Add extra validation here //初始化环境 UpdateData(); GetDlgItemText(IDC_COMBO, m_name); _variant_t vFieldValue; CString strFieldValue; CString strSQL = "select * from login where name=\'" + m_name + "\'"; //创建并打开记录集对象 try{ pRs = pCon->Execute(_bstr_t(strSQL), NULL, adCmdText); if (!pRs->adoEOF) { vFieldValue = pRs->GetCollect("password"); strFieldValue = (char*)_bstr_t(vFieldValue); if (strFieldValue==m_password) m_pass = TRUE; } } catch(_com_error e) { CString errormessage; errormessage.Format("读取数据库失败!\r\n错误信息:%s",e.ErrorMessage()); AfxMessageBox(errormessage);//显示错误信息 } if (!m_pass) { AfxMessageBox("用户名或密码错误!\n 请重新输入!"); m_password = _T(""); UpdateData(FALSE); return; } CDialog::OnOK();}void CLoginDlg::OnDestroy() { CDialog::OnDestroy(); // TODO: Add your message handler code here //关闭记录和连接 if(pCon->State) pCon->Close(); if(pRs->State) pRs->Close(); pRs.Release(); pCon.Release();} 需要的话密码存进数据库可以先HASH一下 求投影和重建的MATLAB代码 A窗口想让B窗口关闭 怎么办 有没有类似Word一样功能强劲的编辑框,能显示图片,多样字体,等等. 求助对话框收缩问题: 哪有VC开发office的电子书 求,把指定用户加到指定的目录中,并且给一定的权限的代码,谢谢! 执行DTS实现数据导出时出错,请问怎样捕获错误? 请问在word中怎么加入activex控件 求如何通过浏览器来控制机器的思路? 能介绍几个你经常去的论谈吗?VC方面的. 如何获得exe文件所在的文件夹? 关于CopyFile的问题
{
//some code
//登陆系统
CString name;
CLoginDlg theDlg;
if (IDOK == theDlg.DoModal()) name = theDlg.m_name;
else return FALSE;
//some code
}BOOL CLoginDlg::OnInitDialog()
{
CDialog::OnInitDialog(); HRESULT hr;
try {
hr = pCon.CreateInstance(__uuidof(Connection));///创建Connection对象
if(SUCCEEDED(hr))
{
TCHAR szPath[MAX_PATH];
GetModuleFileName(NULL, szPath, sizeof(szPath) / sizeof(TCHAR));
if (_tcsrchr(szPath, _T('\\')) != NULL)
{
*_tcsrchr(szPath, _T('\\')) = _T('\0');
}
CString s;
s.Format(_T("File Name=%s\\xxxxx.udl"), szPath);
pCon->ConnectionTimeout=5;
pCon->ConnectionString = (_bstr_t)s;
hr = pCon->Open("","","",adConnectUnspecified);
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
pRs.CreateInstance(__uuidof(Recordset)); _variant_t vFieldValue;
CString strFieldValue;
CString strSQL = "select name from login order by ID";
//创建并打开记录集对象
try{
pRs = pCon->Execute(_bstr_t(strSQL), NULL, adCmdText);
while(!pRs->adoEOF)
{
vFieldValue = pRs->GetCollect("name");
strFieldValue = (char*)_bstr_t(vFieldValue);
m_ctrlName.AddString(strFieldValue);
pRs->MoveNext();
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("读取数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);//显示错误信息
}
if (m_ctrlName.GetCount()) m_ctrlName.SetCurSel(0);
}void CLoginDlg::OnOK()
{
// TODO: Add extra validation here
//初始化环境
UpdateData();
GetDlgItemText(IDC_COMBO, m_name); _variant_t vFieldValue;
CString strFieldValue;
CString strSQL = "select * from login where name=\'" + m_name + "\'";
//创建并打开记录集对象
try{
pRs = pCon->Execute(_bstr_t(strSQL), NULL, adCmdText);
if (!pRs->adoEOF)
{
vFieldValue = pRs->GetCollect("password");
strFieldValue = (char*)_bstr_t(vFieldValue);
if (strFieldValue==m_password) m_pass = TRUE;
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("读取数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);//显示错误信息
}
if (!m_pass)
{
AfxMessageBox("用户名或密码错误!\n 请重新输入!");
m_password = _T("");
UpdateData(FALSE);
return;
}
CDialog::OnOK();
}void CLoginDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
//关闭记录和连接
if(pCon->State) pCon->Close();
if(pRs->State) pRs->Close();
pRs.Release();
pCon.Release();
}