没有合适的资源?快使用搜索试试~ 我知道了~
学生成绩管理系统详细操作过程.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 92 浏览量
2022-07-02
21:08:22
上传
评论
收藏 314KB DOC 举报
温馨提示
试读
23页
学生成绩管理系统详细操作过程
资源推荐
资源详情
资源评论
学生成绩管理系统
我将把我的实现步骤完整的写出来,我是在 VC 6.0 版本下用 MFC 实现的。
我创建的基于单文档的应用程序,过程不介绍,大家都会。下面的是我系
统菜单:
思路:
刚进入系统时,只有“登录”菜单可用,其他三个菜单项都是灰色不可用的 。
当用户点“进入系统”菜单项时,用户输入用户名、密码和用户类型,系统将根
据相应的用户权限使相应的菜单可用,并且“进入系统”菜单项变为不可用。如 :
如果用户类型是学生,那么只有学生权限菜单可用,而“教师权限”和“管理员权
限”都不可用,同时“进入系统”变为不可用。
“学生权限”下只有“查询成绩”,因为学生只可以查询自己相应的成绩;“教
师权限”下有“查询学生成绩”和“增改删学生成绩”两个菜单项,因为教师除了可
以查询学生成绩还可以增加、修改和删除学生成绩;“管理员权限”下有“管理学
生”和“管理教师”两个菜单项。
整体设计:
因为我们要设置系统菜单的状态,所以必须在 CMainFrame 中添加相应的
函数和代码,具体步骤如下:
【步骤 1】由于系统要使用 ODBC 类操作数据库,所以需要在 stdafx.h 中加
入代码:
#include <afxdb.h>
【步骤 2】在 CMainFrame 中的 OnCreat()中添加代码如下,实现菜单的初
始化工作,当用户没进入系统之前,只有“登陆”菜单下的“进入系统”菜单项可用 ,
而“退出系统”和其他 3 个权限菜单都不可用,即都是灰色的。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
//使“退出系统”和其他 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 中 添 加 自 己 定 义 的 函 数 void SetMenuSta(int
type),此函数在登陆对话框的 OnOK()中被调用,即当用户进入系统后使“进入
系统”菜单项不可用,并根据用户类型使相应菜单可用。当类型为 1 时(学生),
使“学生权限”菜单可用;当类型为 2 时(教师),使“教师权限”菜单可用;当类
型为 3 时,使“管理员”菜单可用。
void CMainFrame::SetMenuSta(int type)
{
AfxGetMainWnd()->GetMenu()->GetSubMenu(0)-
>EnableMenuItem(0,MF_BYPOSITION | MF_DISABLED |
MF_GRAYED);
if(type==1)
{
AfxGetMainWnd()->GetMenu()->EnableMenuItem(1,MF_BYPOSI
TION | 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_ID char 20 用户名
USER_PASSWORD char 20 密码
USER_TYPE int 4 1 为学生,2 为教师,3 为管理员
表 2 学生成绩表 COURSE_SCORE
字段名 类型 长度 说明
STU_ID char 10 学生 ID,系统中学生的唯一标识
COURSE_ID char 10 课程号,系统中课程的唯一标识
COURSE_NAME char 10 课程名
SCORE int 4 课程分数
表 3 学生信息表 STUDENT_INFO
字段名 类型 长度 说明
STU_ID char 10 学生 ID,系统中学生的唯一标识
STU_NAME char 10 学生姓名
ENROLLMENT_TIME datetime 8 入学时间
DEPARTMENT char 20 所在学院
MAJOR char 20 所在专业
SEX int 4 性别:0 表示男,1 表示女
BIRTHDAY datetime 8 生日
HOMETOWN varchar 50 籍贯
ADDRESS varchar 50 现在住址
PHONE char 20 个人电话号码
RACE char 10 民族
PARTY int 4 政治面貌:0 表示党员,1 表示预备党员,2 表示团
员,3 表示其他
DIRECTION varchar 50 其他信息
具体实现步骤:
(一)登陆模块设计
1、当刚进入系统时候,用户点击“进入系统”菜单项后系统界面如下:
按上面的登陆对话框摆放好控件,其中各个控件 ID 及对应变量如下图所
示:
从上图中也可以看出,我们为该登陆对话框建立了个新类:CLoginDlg,它
的具体创建过程就不介绍了。
2、因为登陆对话框要使用 SQL 数据库中的 USERS 表,所以需要在程序中
添加类 CLoginSet,步骤如下:
【步骤 1】在项目名“学生成绩管理系统”上单击鼠标右键,在弹出的 New
Class 对话框中的 Name 文本框中输入 CLoginSet,在 Base class 下拉文本框中选
择 CRecordset。
【步骤 2】单击 OK 按钮,弹出 Database Option 对话框,在 ODBC 下拉文
本框中选择“学生成绩管理系统”数据库,单击 OK 按钮,弹出 Select Database
Tables 对 话框,选 择 dbo.USERS 选项, 单击 OK 按钮。这 样就建立了一 个
CRecordset 的对象,就可以对数据库中的 USERS 表进行操作了。
3、在 LoginDlg.cpp 中引入头文件 LoginSet.h,将 CRecordSet 对象 CLoginSet
引入登陆对话框:
#include “LoginSet.h”
4、声明全局变量。在学生成绩管理系统.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;
else
if(m_usetype.Compare("教师")==0)
type=2;
else
if(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(count<3)
{
MessageBox("用户名或密码不正确!");
m_useID="";
m_usepassword="";
UpdateData(FALSE); //没有这条语句就不能实现使账号和密码
文本框为空,很多人会忘记写这条语句。
剩余22页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 83
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功