180 likes | 422 Vues
系统登录界面设计. 功能要求. 登录界面样式如上图所示; 用户输入正确的用户名和密码方能成功进入系统; 用户名和密码存放在数据库中; 通过“选项按扭”可以显示或隐藏“数据源和数据库名”; 数据源名和数据库名可以使用默认值也可以修改;. 设计步骤. 建立 ODBC 数据源和应用程序框架: 在控制面版中建立数据源 DSN ,数据源名为 ShopAssistant, 连接到 SQLServer 或 Access 数据库,数据库中要建立一个表 TableAccount, 表中有两个字段,一个为 AccountNo, 一个为 Pswd.
E N D
功能要求 • 登录界面样式如上图所示; • 用户输入正确的用户名和密码方能成功进入系统; • 用户名和密码存放在数据库中; • 通过“选项按扭”可以显示或隐藏“数据源和数据库名”; • 数据源名和数据库名可以使用默认值也可以修改;
设计步骤 • 建立ODBC数据源和应用程序框架: • 在控制面版中建立数据源DSN,数据源名为ShopAssistant,连接到SQLServer或Access数据库,数据库中要建立一个表TableAccount,表中有两个字段,一个为AccountNo,一个为Pswd. • 使用VC++应用程序向导创建一个单文档应用程序SysLogin;
5)添加成员变量 • 使用类向导按上图添加成员变量: m_User,m_PassWord,m_DSN,m_DataBase • 在Login.h中修改类,添加另一个成员变量 LoginFlag。 格式为:BOOL LoginFlag;
6)初始化成员变量 • 在Login.cpp中的对话框类的构造函数中初始化成员变量; 格式如下:CLogin::CLogin(CWnd* pParent /*=NULL*/) : CDialog(CLogin::IDD, pParent) { //{{AFX_DATA_INIT(CLogin) m_CheckSet = FALSE; m_User = _T(""); m_PassWord = _T(""); m_DSN = _T("ShopAssistant"); m_DataBase = _T("TableAccount"); LoginFlag=FALSE; //}}AFX_DATA_INIT }
7)导入ADO类库 • 在StdAfx.h中加入如下代码: #import “c:\program files\common files\system\ado\msado15.dll"no_namespace rename("EOF","adoEOF")
8)初始化ADO • 在应用程序文件SysLogin.cpp的系统初始化函数BOOL CSysLoginApp::InitInstance()中加入如下代码:位置在预处理命令之后。 //初始化ADO if(!AfxOleInit()) { AfxMessageBox("OLE/COM初始化失败!"); return FALSE; }
9)显示登录窗口 • 在函数BOOL CSysLoginApp::InitInstance()中,在初始化主窗口之前调用登录窗口,(位置在函数的末尾)代码如下: CLogin login; login.DoModal(); if(login.LoginFlag==TRUE) return TRUE; else return FALSE;
10)设置登录对话框的初始大小 • 应用类向导,给对话框类添加消息WM_INITDIALOG处理函数: BOOL CLogin::OnInitDialog() 增加如下代码: SetWindowPos(NULL,0,0,350,200,SWP_NOZORDER|SWP_NOMOVE); 其中:350,200为窗口的宽度和高度,要根据你所设计的窗口的大小调整,以便能完全显示内容。
11)编写复选框的消息处理函数,以便实现窗口的折叠11)编写复选框的消息处理函数,以便实现窗口的折叠 void CLogin::OnCheck1() { // TODO: Add your control notification handler code here if (m_CheckSet) m_CheckSet=FALSE; else m_CheckSet=TRUE; int bottom; if (m_CheckSet==TRUE) bottom=300; else bottom=200; SetWindowPos(NULL,0,0,350,bottom,SWP_NOZORDER|SWP_NOMOVE); }
12)编写登录按钮的消息处理函数 void CLogin::OnOK() 该函数代码包括连接数据源、连接记录集、口令验证。
13)连接数据源 //连接数据源 this->UpdateData(TRUE);//将控件的值传给内存变量 _ConnectionPtr pConn; _RecordsetPtr pSet; pConn.CreateInstance(_uuidof(Connection)); pSet.CreateInstance(_uuidof(Recordset)); try { _bstr_t Conn="DSN="+_bstr_t(m_DSN)+";"; pConn->Open(Conn,"","",adModeUnknown); if (pConn->State) AfxMessageBox("数据库连接成功!"); } catch(_com_error e) { AfxMessageBox("数据库连接失败!请查看数据源连接是否正确!"); }
14)连接记录集 //连接记录集 try { _bstr_t strSQL=" select * from "+_bstr_t(m_DataBase)+" where AccountNo like '"; strSQL+=_bstr_t(m_User); strSQL+="' And Pswd like '"; strSQL+=_bstr_t(m_PassWord); strSQL+="'"; //AfxMessageBox(strSQL); pSet->Open(strSQL,pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); if (pSet->State) AfxMessageBox("记录集连接成功!"); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); }
15)口令验证 if(pSet->adoEOF) { MessageBox("用户名或密码错!,请重输!"); LoginFlag=FALSE; return; } else { LoginFlag=TRUE; MessageBox("密码正确,欢迎进入本系统!!!"); }
完成实验报告 • 同学们根据以上实验步骤完成“系统登录界面设计”的设计、编码、调试和运行,并完成实验报告。 • 实验报告格式另附。