学生成绩管理系统详细操作过程Word格式文档下载.docx
《学生成绩管理系统详细操作过程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统详细操作过程Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。
【步骤2】在CMainFrame中的OnCreat()中添加代码如下,实现菜单的初始化工作,当用户没进入系统之前,只有“登陆”菜单下的“进入系统”菜单项可用,而“退出系统”和其他3个权限菜单都不可用,即都是灰色的。
intCMainFrame:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{
//使“退出系统”和其他3个权限菜单都不可用,即都是灰色的
GetMenu()->
GetSubMenu(0)->
EnableMenuItem(1,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);
GetMenu()->
EnableMenuItem(2,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);
EnableMenuItem(3,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);
}
【步骤3】在CMainFrame中添加自己定义的函数voidSetMenuSta(inttype),此函数在登陆对话框的OnOK()中被调用,即当用户进入系统后使“进入系统”菜单项不可用,并根据用户类型使相应菜单可用。
当类型为1时(学生),使“学生权限”菜单可用;
当类型为2时(教师),使“教师权限”菜单可用;
当类型为3时,使“管理员”菜单可用。
voidCMainFrame:
SetMenuSta(inttype)
AfxGetMainWnd()->
EnableMenuItem(0,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);
if(type==1)
{
EnableMenuItem(1,MF_BYPOSITION|MF_ENABLED);
//在上面的OnCreate中可以直接通过GetMenu()对菜单操作,
//但这里却必须先通过AfxGetMainWnd()获得主窗体指针,
//浪费了我一晚上时间,虽然解决了,但还不知道为什么。
}
if(type==2)
AfxGetMainWnd()->
EnableMenuItem(2,MF_BYPOSITION|MF_ENABLED);
if(type==3)
{
AfxGetMainWnd()->
EnableMenuItem(3,MF_BYPOSITION|MF_ENABLED);
【步骤4】通过上面两步并不能按我们的想法实现菜单变灰的操作,运行系统各菜单都是可用的,我们必须在CMainFrame的构造函数中添加下面一句代码:
m_bAutoMenuEnable=FALSE;
m_bAutoMenuEnable必须放在CMainFrame()里初始化,不可用放在登陆对话框的OnOK()函数中,要不其他三个菜单可用变灰,但“进入系统”菜单项却总是不能变灰。
数据库设计:
根据以上思路,我们使用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_NAMEchar10学生姓名
ENROLLMENT_TIMEdatetime8入学时间
DEPARTMENTchar20所在学院
MAJORchar20所在专业
SEXint4性别:
0表示男,1表示女
BIRTHDAYdatetime8生日
HOMETOWNvarchar50籍贯
ADDRESSvarchar50现在住址
PHONEchar20个人电话号码
RACEchar10民族
PARTYint4政治面貌:
0表示党员,1表示预备党员,2表示团员,3表示其他
DIRECTIONvarchar50其他信息
具体实现步骤:
(一)登陆模块设计
1、当刚进入系统时候,用户点击“进入系统”菜单项后系统界面如下:
按上面的登陆对话框摆放好控件,其中各个控件ID及对应变量如下图所示:
从上图中也可以看出,我们为该登陆对话框建立了个新类:
CLoginDlg,它的具体创建过程就不介绍了。
2、因为登陆对话框要使用SQL数据库中的USERS表,所以需要在程序中添加类CLoginSet,步骤如下:
【步骤1】在项目名“学生成绩管理系统”上单击鼠标右键,在弹出的NewClass对话框中的Name文本框中输入CLoginSet,在Baseclass下拉文本框中选择CRecordset。
【步骤2】单击OK按钮,弹出DatabaseOption对话框,在ODBC下拉文本框中选择“学生成绩管理系统”数据库,单击OK按钮,弹出SelectDatabaseTables对话框,选择dbo.USERS选项,单击OK按钮。
这样就建立了一个CRecordset的对象,就可以对数据库中的USERS表进行操作了。
3、在LoginDlg.cpp中引入头文件LoginSet.h,将CRecordSet对象CLoginSet引入登陆对话框:
#include“LoginSet.h”
4、声明全局变量。
在学生成绩管理系统.cpp文件中添加如下代码:
//CDatabase型变量,用于连接数据库
CDatabasem_database;
//学生登陆后在系统中的唯一ID值
CStringm_ID;
在LoginDlg.cpp添加如下语句,使用已经声明过的全局变量(记得在以后的每个模块中都要添加):
externCDatabasem_database;
externCStringm_ID;
5、为登陆对话框的“确定”按钮添加消息代码,如下:
voidCLoginDlg:
OnOK()
BOOLbLogin=FALSE;
CLoginSet*m_recordset=newCLoginSet(&
m_database);
CStringstrSQL;
UpdateData(TRUE);
if(m_usetype.Compare("
学生"
)==0)
type=1;
else
if(m_usetype.Compare("
教师"
type=2;
else
if(m_usetype.Compare("
管理员"
type=3;
strSQL.Format("
select*fromUSERSwhereUSER_ID='
%s'
ANDUSER_PASSWORD='
ANDUSER_TYPE='
%d'
"
m_useID,m_usepassword,type);
m_recordset->
Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_recordset->
GetRecordCount()==0)
if(count<
3)
MessageBox("
用户名或密码不正确!
);
m_useID="
;
m_usepassword="
UpdateData(FALSE);
//没有这条语句就不能实现使账号和密码文本框为空,很多人会忘记写这条语句。
count++;
}
错误次数达三次以上,本窗口即将关闭!
EndDialog(IDCANCEL);
else
m_recordset->
GetFieldValue("
USER_ID"
m_ID);
bLogin=TRUE;
if(bLogin)
MessageBox("
欢迎进入学生成绩管理系统!
EndDialog(IDOK);
CMainFrame*mainfrm=newCMainFrame();
mainfrm->
SetMenuSta(type);
m_database.Close();
//CDialog:
OnOK();
6、为登陆菜单下的“进入系统”添加响应函数,此函数是在CMainFrame类中添加的,代码如下:
OnLogin()
//TODO:
Addyourcommandhandlercodehere
CLoginDlglogin;
login.DoModal();
(二)学生成绩查询模块设计
1、如果用户类型是1,即学生时,用户可以查询自己的成绩。
在其中用户可以根据课程号或者课程名查询自己的成绩。
按上面的学生成绩查询对话框摆放好控件,其中各个控件ID及对应变量如下图所示:
从上图中也可以看出,我们为该学生成绩查询对话框建立了个新类:
CStuCheckScoreDlg,它的具体创建过程就不介绍了。
2、因为学生成绩查询对话框要使用SQL数据库中的COURSE_SCORE表,所以需要在程序中添加类CCourseScoreSet,步骤如下:
【步骤1】在项目名“学生成绩管理系统”上单击鼠