c语言题库管理系统设计—毕业设计论文内容摘要:

LSE。 return DB_NOT_OPEN。 } AND_CATCH(CMemoryException,pEx) { pExReportError()。 m_IsDBOpen = FALSE。 return MEMORY_EXCEPTION。 } AND_CATCH(CException,e) { m_IsDBOpen = FALSE。 return MS_OTHER_EXCEPTION。 } END_CATCH m_IsDBOpen = TRUE。 return S_OK。 } void COdbcDB::DisConnect() { m_IsDBOpen = FALSE。 ()。 } void COdbcDB::ExecuteQueryValue(LPCTSTR lpszSQL,CStringamp。 value) { if(!()){ return。 } TRY{ CRecordset rs(amp。 m_db)。 //打开记录集 . (CRecordset::dynaset, lpszSQL)。 if (!()) { ((short)0, value)。 } ()。 }//异常处理 CATCH(CDBException,ex) { AfxMessageBox (exm_strError)。 AfxMessageBox (exm_strStateNativeOrigin)。 } AND_CATCH(CMemoryException,pEx) { pExReportError()。 AfxMessageBox (memory exception)。 } AND_CATCH(CException,e) { TCHAR szError[100]。 eGetErrorMessage(szError,100)。 AfxMessageBox (szError)。 } END_CATCH } void COdbcDB::ExecuteQuery(LPCTSTR lpszSQL,CDStrsamp。 Fields) { if(!()){ return。 } TRY{ CRecordset rs(amp。 m_db)。 //打开所有的信息记录 . (CRecordset::dynaset, lpszSQL)。 while (!()) { CStrs strs。 CString temp。 //获取一条记录中的所有字段值保存到字符串数组 strs 中 for(short i = 0。 i。 i++){ ((short)i, temp)。 (temp)。 } //保存一条记录到二维字符串数组中 (strs)。 //转到下一条纪录 ()。 } ()。 }//异常处理 CATCH(CDBException,ex) { AfxMessageBox (exm_strError)。 AfxMessageBox (exm_strStateNativeOrigin)。 } AND_CATCH(CMemoryException,pEx) { pExReportError()。 AfxMessageBox (memory exception)。 } AND_CATCH(CException,e) { TCHAR szError[100]。 eGetErrorMessage(szError,100)。 AfxMessageBox (szError)。 } END_CATCH } 以上是 用于数据库操作的封装类,只要在本系统的工程中引入上面四个文件 , , , ,然后在系统的 文件中加上 include 就可以在本工程中的所有类中使用 对象 g_odbcDB 进行数据库操作了。 系统登录 系统 登录,是系统安全的关口,可以限制没有操作权限的用户对系统的重要信息的更改,所以在登录窗口中要对用户的合法性进行检查,还要对用户的权限进行确定。 所以要在用户输入用户名和密码后,查询数据库来确认用户合法性,和赋予用户对应的权限,关于用户的权限和用户信息都 放在表: user_stu: 字段名 数据类型 字段大小 主键 stuid 文本 50 是 stuname 文本 8 否 stupwd 文本 20 否 user_admi 数字 长整型 否 用户登录界面要简洁明了 ,其中的图片是要从外部引入,效果如下: 对应的对话框要接受用户名和密码,然后查询数据库表,来进行确认,并读取user_admi 字段来设定用户的权限。 如果,没有通过确认,则提示用户:用户名或密码有错。 本对话框为了更容易操作,在登录对话框的初始化中把用户表中的用户名读取出来, 放到用户名栏(接受用户名的控件是一个可以下拉的组合框);对应对话框的的控件绑定的变量如下: 给 对话框的 登录 按钮添加消息响应函数: OnOk();为对话框添加初始化函数:OnInitDialog(); 实现代码如下: BOOL CLoginDlg::OnInitDialog() { CDialog::OnInitDialog()。 CDStrs m_name。 CString strSQL。 UpdateData(TRUE)。 //(select * from password where user=39。 %s39。 AND passwd=39。 %s39。 ,m_strUser,m_strPass)。 strSQL=select stuid from user_stu。 (strSQL,m_name)。 for(int i=0。 i()。 i++) { CStrs strs=m_name[i]。 (strs[0])。 // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } // TODO: Add extra initialization here return TRUE。 // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CLoginDlg::OnOK() { // TODO: Add extra validation here CDStrs value。 CString strSQL。 CTestingApp* ptheApp = (CTestingApp *) AfxGetApp()。 UpdateData(TRUE)。 //检查用户名是否输入 if(()) { AfxMessageBox(请输入用户名。 )。 ()。 return。 } if(()) { AfxMessageBox(请输入密码。 )。 ()。 return。 } //从用户表中检查用户名密码是否正确 (select * from user_stu where stuid=39。 %s39。 AND stupwd=39。 %s39。 ,m_strUser,m_strPwd)。 (strSQL,value)。 if(()==0) { //密码错误处理 MessageBox(密码错误,请重新输入 )。 m_strPwd=。 ()。 UpdateData(FALSE)。 } else { //分配用户权限 if(value[0][3]==0) ptheAppm_bIsAdmin = FALSE。 else ptheAppm_bIsAdmin = TRUE。 Userid=m_strUser。 CStrs strs。 CDStrs strShijName。 (select shijname from chengj_tab where stuid=39。 %s39。 and handup=39。 no39。 ,Userid)。 (strSQL,strShijName)。 if(()!=0) { HavEx=TRUE。 } else { HavEx=FALSE。 } CDialog::OnOK()。 } } 试题库系统主界面 用户登录后,要出现一个主界面,用户的所有操作都在这里实现。 主界面包括了菜单的设计,和工具栏的设计: 菜单如下: 在菜单的设计中,给每一个菜单设定一个不同的 ID,但是工具栏的设计中要用到菜单的 ID,对应特定的菜单的工具按钮,是为了实现菜单功能的一个快捷途径。 所以工具栏按钮的 ID都对应一个菜单项。 工具栏设计: 要 使用数据库中的表中的信息,要在程序运行前的初始化中连接数据库,所以要在主程序的初始化函数 BOOL CTestingApp::InitInstance()中添加如下语句: CString a,b,c。 a=shitiku。 (a,b,c)。 AfxEnableControlContainer()。 要 控制系统安全,必须使登录界面早于主界面运行,所以要在主程序初始化函数中上面的语句后添加如下代码: CLoginDlg loginDlg。 if(()!=IDOK) { return FALSE。 } 并且在主程序的 文件开始处添加 include ,声明对 CLoginDlg 的对象的使用。 要处理用户对菜单和工具条按钮的操作信息,要在主框架类 CMainFrame的 CPP 文件中添加对应按钮和菜单的 COMMAND 消息响应函数:并且要在主程序中添加一个变量 BOOL m_bIsAdmin 用来标识管理员用户,在非管理员和管理员不能同时使用的功能,要给对应的菜单添加 UPDATE_COMMACD_UI 类型的消息响应函数,并且在菜单的 pCmdUIEnable()。 函数中用主函数 CTstingApp 中的变量m_bIsAdmin 作为 pCmdUIEnable()。 的参数,就能限制非管理员用户使用对应的菜单。 关于添加菜单响应函数,如下图: 函数具体实现如下: void CMainFrame::OnSysQuit() { // TODO: Add your mand handler code here if(AfxMessageBox( 您确定要退出系统吗 ?,MB_OKCANCEL)==IDCANCEL) { return。 } CFrameWnd::OnClose()。 } void CMainFrame::OnSysReload() { // TODO: Add your mand handler code here CLoginDlg Dlg。 ()。 } void CMainFrame::OnSysUser() { // TODO: Add your mand handler code here CUserDlg UserDlg。 ()。 } void CMainFrame::OnUpdateSysUser(CCmdUI* pCmdUI) { // TODO: Add your mand update UI handler code here CTestingApp* ptheApp = (CTest。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。