7.6.3 管理员登录的实现
管理员的登录几乎是每个系统中必不可少的部分,这个功能的实现其实并不复杂,只需要通过用户输入的用户名和密码在数据表中查找匹配的数据。如果查找到则登录成功,可以进行相关的操作;否则登录失败。添加一个对话框资源将ID改为IDD_DLG_PASSWORD,添加如图7-22所示的控件。
|
| 图7-22 用户登录界面 |
在对话框的空白区域双击,进入添加类对话框。为对话框资源创建一个新类CLoginDlg,通过类向导为控件关联相关的变量,并给对话框添加WM_INITDIALOG初始化消息,该消息函数中代码如下:
代码位置:见光盘中本章源代码的CLoginDlg类。
- 1 BOOL CLoginDlg::OnInitDialog()
- 2 {
- 3 CDialog::OnInitDialog();
- 4 LOGFONT LogFont; //定义结构变量
- 5 GetFont()->GetLogFont(&LogFont); //获取字体的信息
- 6 LogFont.lfHeight+=LogFont.lfHeight/2; //修改字体的信息
- 7 LogFont.lfWidth+=LogFont.lfWidth/2;
- 8 CFont m_font; //定义字体变量
- 9 m_font.CreateFontIndirect(&LogFont); //创建字体
- 10 GetDlgItem(IDC_STATIC_LOG)->SetFont(&m_font); //设置对话框的字体
- 11 SetWindowText("用户登录"); //设置对话框的标题
- 12 return TRUE;
- 13 }
第4~10行代码设置对话框显示的字体。
第11行代码设置对话框的标题。
上述代码中调用函数GetFont()获取当前字体的信息,对字体的信息进行修改后,调用函数CreateFontIndirect()创建新的字体的信息。给【登录】按钮添加消息响应函数,其中的代码如下:
代码位置:见光盘中本章源代码的CTransView类。
- 1 void CLoginDlg::OnUserlog()
- 2 {
- 3 CPasswordSet m_pset; //定义记录集对象
- 4 UpdateData(); //更新数据
- 5 try
- 6 {
- 7 if(m_pset.Open()) //如果已经打开记录集
- 8 m_pset.Close(); //则关闭
- 9 m_pset.m_strFilter.Format("USER_ID='%s'",m_name); //设置查询内容
- 10 m_pset.Open(CRecordset::snapshot,NULL,CRecordset::none); //打开记录集
- 11 if(m_pset.IsEOF()) //遍历记录集
- 12 {
- 13 m_pset.Close(); //关闭记录集
- 14 MessageBox("用户名错误请重试!","提示!",MB_ICONWARNING);
- 15 m_name=""; //清空字符串
- 16 m_pass="";
- 17 UpdateData(false);
- 18 return;
- 19 }
- 20 m_pset.m_strFilter="";
- 21 m_pset.Close();
- 22 m_pset.m_strFilter.Format("USER_PASSWORD='%s'",m_pass); //设置查询内容
- 23 m_pset.Open(CRecordset::snapshot,NULL,CRecordset::none);
- 24 if(m_pset.IsEOF()) //遍历记录集查询
- 25 {
- 26 m_pset.Close();
- 27 MessageBox("密码错误请重试!","提示!",MB_ICONWARNING);
- 28 m_pass="";
- 29 UpdateData(false);
- 30 return;
- 31 }
- 32 else
- 33 {
- 34 //… //省略添加日志代码
- 35 EndDialog(IDOK);
- 36 CMapPublicApp *app=(CMapPublicApp *)AfxGetApp(); //获取应用类指针
- 37 app->m_User_ID=m_name; //变量的赋值
- 38 app->bEnableMenu=true;
- 39 }
- 40 }
- 41 catch(CDBException *e) //捕捉异常
- 42 {
- 43 e->ReportError();
- 44 return;
- 45 }
- 46 }
第7~19行代码从数据表中查找用户名和密码是否存在。
第24~31行代码为当用户名密码错误时进行的操作。
第32~39行代码为用户登录成功后,将用户的操作添加到用户日志表中。
第41~45行代码为数据库操作出错时捕捉异常处理。
上述代码中的查找是通过记录集的成员变量m_strFilter来实现的,先判断用户名是否存在,再判断密码是否正确。如果登录成功,则把用户登录的信息添加到日志表中,记录用户的操作信息。