登录界面
如何用vc制作带密码检验功能的登录界面????? 问题点数:0、回复次数:10Top
1 楼lifengli(lifengli)回复于 2003-12-02 12:33:59 得分 0
用数据查找的功能Top
2 楼arvid_gs(west)回复于 2003-12-02 12:37:45 得分 0
?Top
3 楼bohut(●伯虎● )回复于 2003-12-02 13:36:10 得分 0
做一个对话框,放置你的几个editbox,至于你的密码可以存放在文件中也可以放在数据库中。Top
4 楼yanw0212(爱家的男人)回复于 2003-12-05 15:24:38 得分 0
1.在对话框的OnInitDialog() 中
BOOL CAdminisLogin::OnInitDialog()
{
CDialog::OnInitDialog();
::SetFocus(m_combobox.m_hWnd);
m_combobox.DeleteString(0);
sql.Empty();
sql = "SELECT LoginName FROM t_UserInfo WHERE UserTypeID=0 AND EnableFlag<>0";
if(!m_pDb.IsOpen())
{
if(m_pDb.Open(strConnection))
{
m_pRs.Close();
m_pRs = CADORecordset(&m_pDb);
}
else
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"请确认数据库服务器是否打开,连接是否正常,然后单击“确定”按钮!","ExceptionManager提示", 0 | MB_ICONERROR );
::EnableWindow(GetDlgItem(IDOK)->m_hWnd,false);
return false;
}
}
if(m_pRs.Open(sql, CADORecordset::openQuery))
{
while(!m_pRs.IsEOF())
{
if( !m_pRs.GetFieldValue(0,LoginName) )
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"数据库操作异常!","ExceptionManager提示信息", 0 | MB_ICONASTERISK | MB_TOPMOST) ;
return false;
}
m_pRs.MoveNext();
}
}
else
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"数据库操作异常!","ExceptionManager提示信息", 0 | MB_ICONASTERISK | MB_TOPMOST) ;
return false;
}// 结束数据库查询
m_combobox.AddString(LoginName);
sql.Empty();
sql = "SELECT LoginName,LoginPWD ,UserTypeID FROM t_UserInfo WHERE EnableFlag<>0 AND UserTypeID<>0";
if(m_pRs.Open(sql, CADORecordset::openQuery))
{
while(!m_pRs.IsEOF())
{
if( !m_pRs.GetFieldValue(0,LoginName) )
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"数据库操作异常!","ExceptionManager提示信息", 0 | MB_ICONASTERISK | MB_TOPMOST) ;
return false;
}
if( !m_pRs.GetFieldValue(1,LoginPWD) )
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"数据库操作异常!","ExceptionManager提示信息", 0 | MB_ICONASTERISK | MB_TOPMOST) ;
return false;
}
if( !m_pRs.GetFieldValue(2,UserTypeID) )
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"数据库操作异常!","ExceptionManager提示信息", 0 | MB_ICONASTERISK | MB_TOPMOST) ;
return false;
}
m_combobox.AddString(LoginName);
m_pRs.MoveNext();
}
}
else
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"数据库操作异常!","ExceptionManager提示信息", 0 | MB_ICONASTERISK | MB_TOPMOST) ;
return false;
}// 结束数据库查询
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
2 。当用户添入了登陆名和密码后,点击登陆按钮
void CAdminisLogin::OnOK()
{
UpdateData(true);
static int count = 1;
if( m_LoginName.IsEmpty() )
{
::MessageBox(NULL,"登录名不能为空,请重新输入!","ExceptionManager提示信息" ,0 | MB_ICONHAND) ;
return;
}
bool havedata = false;
sql.Empty();
sql = "SELECT LoginPWD,UserID FROM t_UserInfo WHERE EnableFlag<>0 AND LoginName='";
sql += m_LoginName;
sql += "'";
if(m_pRs.Open(sql, CADORecordset::openQuery))
{
while(!m_pRs.IsEOF())
{
havedata = true;
if( !m_pRs.GetFieldValue(0,m_dbpassword) )
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"数据库操作异常!","ExceptionManager提示信息", 0 | MB_ICONASTERISK | MB_TOPMOST) ;
return;
}
if( !m_pRs.GetFieldValue(1,m_dbuserid) )
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"数据库操作异常!","ExceptionManager提示信息", 0 | MB_ICONASTERISK | MB_TOPMOST) ;
return;
}
m_pRs.MoveNext();
}
}
else
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"数据库操作异常!","ExceptionManager提示信息", 0 | MB_ICONASTERISK | MB_TOPMOST) ;
return;
}// 结束数据库查询
if(!havedata)
{
if (count >= 3)
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"非法用户不能登录,系统将关闭","ExceptionManager提示信息" ,0 | MB_ICONHAND) ;
PostQuitMessage(WM_QUIT);
}
else
{
::MessageBox(NULL,"登录名无效,不能登录","ExceptionManager提示信息" ,0 | MB_ICONHAND) ;
}
count ++;
return;
}
else
{
m_password.MakeUpper();
m_dbpassword.MakeUpper();
if((m_password == m_dbpassword) )
{
AdminisName.Empty();
AdminisName = m_LoginName;
AdminisID = 0;
AdminisID = m_dbuserid;
CString LogID;
LogID.Empty();
LogID.Format("%d",m_dbuserid) ;
sql.Empty();
sql = "INSERT INTO t_UserLog(UserID,LoginName,SystemFunction,HappenTime,UserAction,Description ) VALUES( ";
sql += LogID ;
sql += ",'";
sql += m_LoginName;
sql += "' ,'BasicManager', GETDATE(),'Login', '用户登录' )";
if ( !m_pDb.IsOpen() )
{
if ( !m_pDb.Open() )
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"请确认数据库服务器是否打开,连接是否正常,然后单击“确定”按钮!","ExceptionManager提示", 0 | MB_ICONERROR );
}
}
m_pDb.Execute(sql);
CDialog::OnOK();
}
else
{
if (count >= 3)
{
m_pRs.Close();
m_pDb.Close();
::MessageBox(NULL,"非法用户不能登录,系统将关闭","ExceptionManager提示信息" ,0 | MB_ICONHAND) ;
PostQuitMessage(WM_QUIT);
}
else
{
::MessageBox(NULL,"登录密码错误,不能登录","ExceptionManager提示信息" ,0 | MB_ICONHAND) ;
}
count ++;
return;
}
}
m_pRs.Close();
m_pDb.Close();
}Top
5 楼chenlin526(chenlin)回复于 2003-12-10 17:07:39 得分 0
非常感谢诸位!特别是yanw0212()!Top
6 楼chenlin526(chenlin)回复于 2003-12-10 17:24:02 得分 0
请问yanw0212(),我怎么给分给你?Top
7 楼checkyvc6(已所不欲,勿施于人)回复于 2003-12-10 17:28:54 得分 0
如果问题解决了话,赶快揭帖啊!
你可以对密码进行简单的加密这样文件中或者数据库中显示的密码不是昵登陆时的密码
下面给你一个加密类直接用就可以了
class CCrypt
{
public:
CCrypt();
virtual ~CCrypt();
public:
static CString Encrypt(CString S, WORD Key); // 加密函数
static CString Decrypt(CString S, WORD Key); // 解密函数
};
// 常量
#define C1 52845
#define C2 22719
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCrypt::CCrypt()
{
}
CCrypt::~CCrypt()
{
}
CString CCrypt::Encrypt(CString S, WORD Key) // 加密函数
{
CString Result,str;
int i,j;
Result=S; // 初始化结果字符串
for(i=0; i<S.GetLength(); i++) // 依次对字符串中各字符进行操作
{
Result.SetAt(i, S.GetAt(i)^(Key>>8)); // 将密钥移位后与字符异或
Key = ((BYTE)Result.GetAt(i)+Key)*C1+C2; // 产生下一个密钥
}
S=Result; // 保存结果
Result.Empty(); // 清除结果
for(i=0; i<S.GetLength(); i++) // 对加密结果进行转换
{
j=(BYTE)S.GetAt(i); // 提取字符
// 将字符转换为两个字母保存
str="12"; // 设置str长度为2
str.SetAt(0, 65+j/26);
str.SetAt(1, 65+j%26);
Result += str;
}
return Result;
}
CString CCrypt::Decrypt(CString S, WORD Key) // 解密函数
{
CString Result,str;
int i,j;
Result.Empty(); // 清楚结果
for(i=0; i < S.GetLength()/2; i++) // 将字符串两个字母一组进行处理
{
j = ((BYTE)S.GetAt(2*i)-65)*26;
j += (BYTE)S.GetAt(2*i+1)-65;
str="1"; // 设置str长度为1
str.SetAt(0, j);
Result+=str; // 追加字符,还原字符串
}
S=Result; // 保存中间结果
for(i=0; i<S.GetLength(); i++) // 依次对字符串中各字符进行操作
{
Result.SetAt(i, (BYTE)S.GetAt(i)^(Key>>8)); // 将密钥移位后与字符异或
Key = ((BYTE)S.GetAt(i)+Key)*C1+C2; // 产生下一个密钥
}
return Result;
}
Top
8 楼canjian(奋斗,探求,不达目的誓不罢休!)回复于 2003-12-10 18:30:50 得分 0
收藏Top
9 楼lxz9117()回复于 2003-12-10 19:56:53 得分 0
dingTop
10 楼yanw0212(爱家的男人)回复于 2003-12-25 13:12:06 得分 0
在论坛里找到你的帖自,点击管理菜单,然后给分!Top




