资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
学生成绩管理系统我将把我的实现步骤完整的写出来,我是在 VC 6.0版本下用MFC实现的。 我创立的基于单文档的应用程序,过程不介绍,大家都会。下面的是我系统 菜单:思路:刚进入系统时,只有“登录菜单可用,其他三个菜单项都是灰色不可用的。 当用户点“进入系统菜单项时,用户输入用户名、密码和用户类型,系统将根 据相应的用户权限使相应的菜单可用,并且“进入系统菜单项变为不可用。女口: 如果用户类型是学生,那么只有学生权限菜单可用,而“教师权限和“管理员 权限都不可用,同时“进入系统变为不可用。“学生权限下只有“查询成绩,因为学生只可以查询自己相应的成绩;“教师权限下有“查询学生成绩和“增改删学生成绩两个菜单项, 因为教 师除了可以查询学生成绩还可以增加、修改和删除学生成绩;“管理员权限下有“管理学生和“管理教师两个菜单项。整体设计:因为我们要设置系统菜单的状态,所以必须在CMainFrame中添加相应的函 数和代码,具体步骤如下:【步骤1】由于系统要使用ODBC类操作数据库,所以需要在stdafx.h中参 加代码:#in elude 【步骤2】在CMainFrame中的OnCreat()中添加代码如下,实现菜单的初始 化工作,当用户没进入系统之前,只有“登陆菜单下的“进入系统菜单项可 用,而“退出系统和其他3个权限菜单都不可用,即都是灰色的。int CMai nFrame:O nCreate(LPCREATESTRUCT IpCreateStruct)使“退出系统和其他3个权限菜单都不可用,即都是灰色的GetMe nu()-GetSubMe nu(0)- En ableMe nultem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);GetMenu()- EnableMenultem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);GetMenu()- EnableMenultem(2,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);GetMenu()- EnableMenultem(3,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);【步骤3】在CMainFrame中添加自己定义的函数 void SetMenuSta(int type), 此函数在登陆对话框的 On OK()中被调用,即当用户进入系统后使“进入系统菜单项不可用,并根据用户类型使相应菜单可用。当类型为1时学生,使“学 生权限菜单可用;当类型为 2时教师,使“教师权限菜单可用;当类型 为3时,使“管理员菜单可用。void CMai nFrame:SetMe nuSta( int type)AfxGetMai nWnd()-GetMe nu()-GetSubMe nu(0)-E nableMe nultem(0, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);if(type=1)AfxGetMai nWnd()-GetMe nu()-E nableMe nultem(1,MF_BYPOSI TION | MF_ENABLED);/在上面的On Create中可以直接通过GetMe nu()对菜单操作,但这里却必须先通过AfxGetMainWnd()获得主窗体指针, 浪费了我一晚上时间,虽然解决了,但还不知道为什么if(type=2)AfxGetMa in Wnd()-GetMe nu()-E nableMe nultem(2,MF_BYPOSIT ION | MF_ENABLED);if(type=3)AfxGetMa in Wnd()-GetMe nu()-E nableMe nultem(3,MF_BYPOSIT ION | MF_ENABLED);【步骤4】通过上面两步并不能按我们的想法实现菜单变灰的操作,运行系 统各菜单都是可用的,我们必须在CMainFrame的构造函数中添加下面一句代码: m_bAutoMe nuE nable=FALSE;m_bAutoMenuEnable必须放在 CMainFrame()里初始化,不可用放在登陆对 话框的_On OK()函数中,要不其他三个菜单可用变灰,但“进入系统菜单项却 总是不能变灰。数据库设计:根据以上思路,我们使用 SQL数据库建立一个“学生成绩管理系统,其 下有4张表,分别为用户表 USERS、学生成绩表COURSE_SCORE、学生信息 表 STUDENT_INFO 和教师信息表 TEACHER_INFO。表1用户表USERS字段名类型 长度说明USER IDchar20用户名USER_PASSWORDchar20密码USER TYPEint41为学生,2为教师,3为管理员表2学生成绩表COURSE_SCORE字段名类型长度说明STU_IDchar10学生ID,系统中学生的唯一标识COURSE_IDchar10课程号,系统中课程的唯一标识COURSE_NAMEchar10课程名SCOREint4课程分数表3学生信息表STUDENT INFO字段名类型长度说明STU_IDchar10学生ID,系统中学生的唯一标识STU_NAMEchar10学生姓名ENROLLMENT_TIME datetime8入学时间DEPARTMENTchar20所在学院MAJORchar20所在专业SEXint4性别:0表示男,1表示女BIRTHDAYdatetime8生日HOMETOWNvarchar50籍贯ADDRESSvarchar50现在住址PHONEchar20个人 号码RACEchar10民族PARTYint4政治面貌:0表示党员,1表示预 备党员,2表示团员,3表示其他DIRECTIONvarchar50其他信息具体实现步骤:一登陆模块设计1、当刚进入系统时候,用户点击“进入系统菜单项后系统界面如下:按上面的登陆对话框摆放好控件,其中各个控件ID及对应变量如下列图所示:从上图中也可以看出,我们为该登陆对话框建立了个新类:CLog in Dig,它的具体创立过程就不介绍了。2、因为登陆对话框要使用SQL数据库中的USERS表,所以需要在程序中 添加类CLoginSet,步骤如下:【步骤1】在工程名“学生成绩管理系统上单击鼠标右键,在弹出的NewClass对话框中的Name文本框中输入 CLog in Set,在Base class下拉文本框中选 择 CRecordse。【步骤2】单击0K按钮,弹出Database Option对话框,在ODBC下拉文本框中选择“学生成绩管理系统数据库,单击OK按钮,弹出Select DatabaseTables 对话框,选择 dbo.USERS 选项,单击 OK 按钮。这样就建立了一个 CRecordset的对象,就可以对数据库中的 USERS表进展操作了。3、在 LoginDlg.cpp 中引入头文件 LoginSet.h,将 CRecordSet对象 CLoginSet 引入登陆对话框:#include “LoginSet.h4、声明全局变量。在学生成绩管理系统.cpp文件中添加如下代码:/ CDatabase型变量,用于连接数据库CDatabase m_database;/学生登陆后在系统中的唯一 ID 值CString m_ID;在 LoginDlg.cpp 添加如下语句, 使用已经声明过的全局变量 记得在以后 的每个模块中都要添加 :extern CDatabase m_database;extern CString m_ID;5、为登陆对话框的“确定按钮添加消息代码,如下:void CLoginDlg:OnOK()BOOL bLogin=FALSE;CLoginSet *m_recordset=new CLoginSet(&m_database);CString strSQL;UpdateData(TRUE);if(m_usetype.Compare( 学生)=0)type=1;elseif(m_usetype.Compare(教师)=0)type=2;elseif(m_usetype.Compare(管理员)=0)type=3;strSQL.Format(select * from USERS where USER_ID=%s AND USER_PASSWORD=%s AND USER_TYPE=%d, m_useID,m_usepassword,type);m_recordset-Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_recordset-GetRecordCount()=0)if(countGetFieldValue(USER_ID,m_ID); bLogin=TRUE;if(bLogin)MessageBox( 欢送进入学生成绩管理系统 !);EndDialog(IDOK);CMainFrame *mainfrm=new CMainFrame(); mainfrm-SetMenuSta(type);else m_database.Close();/ CDialog:OnOK();6、为登陆菜单下的 “进入系统添加响应函数, 此函数是在 CMainFrame 类中添加的,代码如下:void CMainFrame:OnLogin()/ TODO: Add your command handler code here CLoginDlg login;login.DoModal();二学生成绩查询模块设计1、如果用户类型是 1,即学生时,用户可以查询自己的成绩。在其中用户可以根据课程号或者课程名查询自己的成绩。按上面的学生 成绩查询对话框摆放好控件,其中各个控件ID及对应变量如下列图所示:从上图中也可以看出,我们为该学生成绩查询对话框建立了个新类:CStuCheckScoreDIg它的具体创立过程就不介绍了。2、因为学生成绩查询对话框要使用 SQL数据库中的COURSE_SCORE表,所以
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号