学生成绩管理系统详细操作过程.docx

上传人:b****2 文档编号:1961366 上传时间:2022-10-25 格式:DOCX 页数:29 大小:219KB
下载 相关 举报
学生成绩管理系统详细操作过程.docx_第1页
第1页 / 共29页
学生成绩管理系统详细操作过程.docx_第2页
第2页 / 共29页
学生成绩管理系统详细操作过程.docx_第3页
第3页 / 共29页
学生成绩管理系统详细操作过程.docx_第4页
第4页 / 共29页
学生成绩管理系统详细操作过程.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统详细操作过程.docx

《学生成绩管理系统详细操作过程.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统详细操作过程.docx(29页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统详细操作过程.docx

学生成绩管理系统详细操作过程

学生成绩管理系统

我将把我的实现步骤完整的写出来,我是在VC6.0版本下用MFC实现的。

我创建的基于单文档的应用程序,过程不介绍,大家都会。

下面的是我系统菜单:

思路:

刚进入系统时,只有“登录”菜单可用,其他三个菜单项都是灰色不可用的。

当用户点“进入系统”菜单项时,用户输入用户名、密码和用户类型,系统将根据相应的用户权限使相应的菜单可用,并且“进入系统”菜单项变为不可用。

如:

如果用户类型是学生,那么只有学生权限菜单可用,而“教师权限”和“管理员权限”都不可用,同时“进入系统”变为不可用。

“学生权限”下只有“查询成绩”,因为学生只可以查询自己相应的成绩;“教师权限”下有“查询学生成绩”和“增改删学生成绩”两个菜单项,因为教师除了可以查询学生成绩还可以增加、修改和删除学生成绩;“管理员权限”下有“管理学生”和“管理教师”两个菜单项。

整体设计:

因为我们要设置系统菜单的状态,所以必须在CMainFrame中添加相应的函数和代码,具体步骤如下:

【步骤1】由于系统要使用ODBC类操作数据库,所以需要在stdafx.h中加入代码:

#include

【步骤2】在CMainFrame中的OnCreat()中添加代码如下,实现菜单的初始化工作,当用户没进入系统之前,只有“登陆”菜单下的“进入系统”菜单项可用,而“退出系统”和其他3个权限菜单都不可用,即都是灰色的。

intCMainFrame:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)

{

//使“退出系统”和其他3个权限菜单都不可用,即都是灰色的

GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);

GetMenu()->EnableMenuItem(1,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);

GetMenu()->EnableMenuItem(2,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);

GetMenu()->EnableMenuItem(3,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);

}

【步骤3】在CMainFrame中添加自己定义的函数voidSetMenuSta(inttype),此函数在登陆对话框的OnOK()中被调用,即当用户进入系统后使“进入系统”菜单项不可用,并根据用户类型使相应菜单可用。

当类型为1时(学生),使“学生权限”菜单可用;当类型为2时(教师),使“教师权限”菜单可用;当类型为3时,使“管理员”菜单可用。

voidCMainFrame:

:

SetMenuSta(inttype)

{

AfxGetMainWnd()->GetMenu()->GetSubMenu(0)->EnableMenuItem(0,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);

if(type==1)

{

AfxGetMainWnd()->GetMenu()->EnableMenuItem(1,MF_BYPOSITION|MF_ENABLED);

//在上面的OnCreate中可以直接通过GetMenu()对菜单操作,

//但这里却必须先通过AfxGetMainWnd()获得主窗体指针,

//浪费了我一晚上时间,虽然解决了,但还不知道为什么。

}

if(type==2)

{

AfxGetMainWnd()->GetMenu()->EnableMenuItem(2,MF_BYPOSITION|MF_ENABLED);

}

if(type==3)

{

AfxGetMainWnd()->GetMenu()->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_IDchar10学生ID,系统中学生的唯一标识

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("教师")==0)

type=2;

else

if(m_usetype.Compare("管理员")==0)

type=3;

strSQL.Format("select*fromUSERSwhereUSER_ID='%s'ANDUSER_PASSWORD='%s'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++;

}

else

{

MessageBox("错误次数达三次以上,本窗口即将关闭!

");

EndDialog(IDCANCEL);

}

}

else

{

m_recordset->GetFieldValue("USER_ID",m_ID);

bLogin=TRUE;

}

if(bLogin)

{

MessageBox("欢迎进入学生成绩管理系统!

");

EndDialog(IDOK);

CMainFrame*mainfrm=newCMainFrame();

mainfrm->SetMenuSta(type);

}

else

m_database.Close();

//CDialog:

:

OnOK();

}

6、为登陆菜单下的“进入系统”添加响应函数,此函数是在CMainFrame类中添加的,代码如下:

voidCMainFrame:

:

OnLogin()

{

//TODO:

Addyourcommandhandlercodehere

CLoginDlglogin;

login.DoModal();

}

(二)学生成绩查询模块设计

1、如果用户类型是1,即学生时,用户可以查询自己的成绩。

在其中用户可以根据课程号或者课程名查询自己的成绩。

按上面的学生成绩查询对话框摆放好控件,其中各个控件ID及对应变量如下图所示:

从上图中也可以看出,我们为该学生成绩查询对话框建立了个新类:

CStuCheckScoreDlg,它的具体创建过程就不介绍了。

2、因为学生成绩查询对话框要使用SQL数据库中的COURSE_SCORE表,所以需要在程序中添加类CCourseScoreSet,步骤如下:

【步骤1】在项目名“学生成绩管理系统”上单击鼠

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1