3.5.4 登录界面的实现(1)
上一节主要完成了界面的设计,由于功能代码均没添加,所以单击界面上的控件都不会起作用。本节将介绍如何实现登录功能。
首先,在对话框上空白区域双击,给登录对话框建立一个类PASSDLG,通过类向导给两个编辑框添加字符串变量m_user、m_pass保存用户名和密码,在应用类中编写代码实现模块功能。代码如下:
代码位置:见光盘中本章源代码的应用类CHCDBApp。
- 1 PASSDLG dlg1; //定义对话框对象
- 2 CString str; //定义字符串变量
- 3 m_pMainWnd->ShowWindow(SW_HIDE); //隐藏窗口
- 4 if(dlg1.DoModal()==IDOK) //单击【确定】按钮
- 5 { CString sqlstr; //定义SQL语句变量
- 6 sqlstr.Format("select * from tb_operator where operid='%s' and
- 7 operpassword='%s'",dlg1.m_user,dlg1.m_pass); //构造查找SQL语句
- 8 if(GetRecord(sqlstr)==0){AfxMessageBox("没有该用户!");return true;}
- 9 operid=dlg1.m_user; //保存登录用户名
- 10 str=(LPCSTR)(_bstr_t)m_record->Fields->GetItem("operlevel")->Value; //取当前用户权限
- 11 str.TrimRight(); //去掉字符串右边的空格
- 12 }
- 13 else return true;
- 14 if(str!="管理员")
- 15 {
- 16 CForeMange dlg; //定义对话框对象
- 17 dlg.DoModal(); //显示前台界面
- 18 m_pMainWnd->ShowWindow(SW_HIDE); //隐藏主框架窗口
- 19 }
- 20 else
- 21 {
- 22 m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED); //主框架窗口最大化
- 23 m_pMainWnd->UpdateWindow(); //更新主框架窗口
- 24 m_pMainWnd->SetWindowText("超市管理系统--HC1.0"); //修改主框架窗口标题
- 25 }
第14~25行代码是根据用户身份不同显示不同界面的代码。
第8行代码实现了获取数据表中的记录个数。
上面的代码实现了对用户权限的判断:当用户是非管理员时,只显示前台销售界面;当用户是管理员时,系统主框架正常显示,用户可操作任何模块界面。其中,获取数据表中的记录的个数,操作系统用GetRecord()函数封装,下面给出该函数的主要部分。代码如下:
代码位置:见光盘中本章源代码的应用类CHCDBApp。
- 1 m_record=NULL; //记录集初始化
- 2 m_record.CreateInstance(__uuidof(Recordset)); //初始化指针
- 3 m_record->Open((_variant_t )sqlstr,theApp.m_connection.GetInterfacePtr(),
- 4 adOpenDynamic,adLockOptimistic,adCmdText); //打开数据表
- 5 int count=0; //保存记录个数
- 6 if(m_record!=NULL) //如果有记录
- 7 {
- 8 try
- 9 {
- 10 m_record->MoveFirst(); //移动到第一条记录
- 11 }
- 12 catch(...) //打开失败
- 13 {
- 14 return 0; //返回0条记录
- 15 }
- 16 if(m_record->_EOF)return 0; //记录为空,返回0
- 17 while(!m_record->_EOF) //如果还有记录
- 18 {
- 19 m_record->MoveNext(); //移动到下一条记录
- 20 count++; //记录个数加1
- 21 }
- 22 }
- 23 m_record->MoveFirst();
- 24 return count;
第3行代码实现打开数据表,sqlstr是该函数的唯一参数,用户在使用时可以根据需要随意构造出不同的连接字符串打开对应的表。
第16~21行代码实现了计算数据表中的记录个数。
第24行代码返回数据表中的记录个数。