最新在线考试系统课程设计1.docx
- 文档编号:24294141
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:26
- 大小:465.42KB
最新在线考试系统课程设计1.docx
《最新在线考试系统课程设计1.docx》由会员分享,可在线阅读,更多相关《最新在线考试系统课程设计1.docx(26页珍藏版)》请在冰豆网上搜索。
最新在线考试系统课程设计1
一、需求分析
计算机技术没有应用到考试上时,组织一次考试只是要经过五步:
人工出题,考生考试,人工阅卷,成绩评估和试卷分析,这是一项十分繁琐和容易出错的工作,教师的工作量非常的大。
很明显,传统的考试方式已经不再适应现代考试的需要。
如今,信息技术的迅猛发展,应用不断扩大,教学和虚拟大学等相继出现,这些应用正逐步深入到千家万户,人们迫切要求利用这些技术来进行在线考试,以减少教师的工作负担并提高工作效率,同时提高考试的质量,从而使考试更趋于公正,客观,更加激发学生的兴趣。
例如,目前许多国际著名的计算机公司所举办的各种认证考试绝大部分是采用这种形式。
二、数据库设计
1,概念模型设计(E—R图)
2、E-R图转为逻辑模型的方法及过程
在sql中创建一个新的数据库CET6,以E—R图中的实体的名称创建表。
设计表时,以该E—R图中的属性为列名,根据实际情况确定其数据类型和长度,在必须唯一的列名处设计主键。
在sql中一共建立七个表来实现CET6模拟考试系统应用程序数据的连接。
其中,UserType表示数据类型,0表示学生,1表示管理员。
UserId表示用户账号,UserName表示用户姓名,UserPsw表示用户密码。
HaveIn,HaveTest分别表示用户是否登录和参加考试。
TypeId,TypeName分别表示试题类型和试题类型名。
XZT_BL,XZT_FZ分别表示选择题的分值和比例。
判断题和填空题类推。
StudentId表示考生考号,TopicId、PaperTopId分别表示试题在题库和试卷中的编号。
TopicName、TopicAnswer表示试题题目和答案。
3、逻辑模型
TB_User(用户信息表)
TB_TestType(试题类型表)
TB_Param(系统参数表)
TB_StuTest(学生考试试卷表)
TB_Grade(学生分数表)
TB_Test(试题安排)
TB_StuTest(学生考试试卷表)
4、数据库评价
首先,用sql设计数据库比较稳定,对数据的要求也比较严格。
这样在编码阶段数据这一块就基本没有不合理的数据出现在应用程序上。
减少了运行会出现的错误。
但是sql与应用程序的链接有时比较繁琐而且不易成功。
三、编码实现
1,登录模块
1)用户的不同类型进入到不同的界面,主要有一个combox控件,用于选择用户类型。
两个TextBox控件,Txt_id用于输入账号,Txt_Pse用于输入密码。
三个commandButton控件:
cmd_In用于登录系统,Cmd_Again用于清空用户信息重新输入,Cmd_Quit用于退出系统。
2)程序流程图
3)登录模块代码
OptionExplicit
PublicBAsBoolean'用户的登录信息是否正确
PrivateSubPD()'判断用户登录信息是否正确,正确B=true,否则B=false
DimrsAsNewADODB.Recordset'声明rs为记录集对象
IfTrim(Txt_Id.Text)=""Then'如果没有输入帐号
MsgBox"没有输入用户账号,请您正确填写!
",vbOKCancel+vbCriticalTxt_Id.SetFocus'设置焦点在问本框Txt_Id上
ElseIfTrim(Txt_Psw.Text)=""Then'如果密码为空
MsgBox"没有输入密码,请您正确填写!
",vbOKCancel+vbCritical
Txt_Psw.SetFocus'设置焦点在问本框Txt_Psw上
Else'
Cmd_In.Default=True'设置Cmd_In按Enter键触发Click事件
Sql="select*fromTB_UserwhereUserId='"&Trim(Txt_Id.Text)&"'"&_"andUserType='"&Cbx_UserType.ListIndex&"'"&_"andUserPsw='"&Trim(Txt_Psw.Text)&"'"
'把查询用户信息的SQL语句赋给变量Sql
rs.OpenSql,cnn,adOpenStatic,adLockReadOnly'以只读的方式静态的打开Sql执行的结果的记录集
IfNotrs.RecordCount>0Then'如果记录集为空
SelectCaseMsgBox("用户账号或密码不正确,请您正确填写!
",vbOKCancel+vbCritical)'显示提示信息
CasevbOK'如果选择了是
B=False
Txt_Id.Text=""'帐号清空
Txt_Psw.Text=""'密码清空
Txt_Id.SetFocus'是输入帐号的文本框获得焦点
CaseElse'选择了取消
End'结束程序
EndSelect
Cmd_In.Default=False'设置Cmd_In不是Enter的默认按钮
ElseIfrs.Fields("HaveIn")=0Then
'如果记录集不为空且此帐号没被其他用户使用
B=True'用户的登录信息正确
cnn.Execute"updateTB_UsersetHaveIn=1"&_"whereUserId='"&Trim(Txt_Id.Text)&"'"&_"andUserType='"&Cbx_UserType.ListIndex&"'"'设置HaveIn字段为1,限制其他用户用此帐户登录
UsId=Trim(Txt_Id.Text)'记录用户的帐号
Else'如果记录集不为空但此帐号正在被其他用户使用
MsgBox"用户已经登录!
",vbOKOnly+vbCritical'显示提示信息
B=False'用户的登录信息错误
Txt_Id.Text=""'帐号清空
Txt_Psw.Text=""'密码清空
Txt_Id.SetFocus'是输入帐号的文本框获得焦点
Cmd_In.Default=False'设置Cmd_In不是Enter的默认按钮
EndIf
rs.Close'关闭记录集
EndIf
EndSub
PrivateSubCbx_UserType_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=13Then'如果输入的字符是Enter键
Txt_Id.SetFocus'设置输入帐号的文本框获得焦点
Else'如果输入的是其它字符
KeyAscii=0'返回值为空即不输入任何字符
EndIf
EndSub
PrivateSubCmd_Again_Click()'用户信息输入错误,选择了“重输”按钮,开始重新输入。
CallForm_Load
EndSub
PrivateSubCmd_In_Click()'用户填写信息完毕,单击“确定”按钮,开始登录
OnErrorGoToErr1'出现错误转向错误处理
DimrsAsNewADODB.Recordset'声明rs为记录集对象
SelectCaseCbx_UserType.ListIndex'Select语句的条件是Cbx_UserType的ListIndex属性
Case0'如果选中的是第一条记录即考生
CallPD'判断考生的帐号和密码是否正确
IfB=TrueThen'如果考生的帐号和密码正确
Sql="selectHaveTestfromTB_UserwhereUserType=0"&_
"andUserId='"&Trim(Txt_Id.Text)&"'"'判断考生是否参加过考试
rs.OpenSql,cnn,adOpenStatic,adLockReadOnly'执行SQL语句
Ifrs.Fields("HaveTest")=FalseThen'如果考生没有参加过考试
Sql="deletefromTB_GradewhereStuId="&_
"'"&Trim(Txt_Id.Text)&"'"'删除成绩表中考生原有的记录
cnn.ExecuteSql'执行SQL语句
Sql="insertintoTB_Grade(StuId)values"&_
"('"&Trim(Txt_Id.Text)&"')"'把考生的帐号插入到成绩表中
cnn.ExecuteSql'执行SQL语句
EndIf
frm_Stu.Show'显示考生窗口
UnloadMe'卸载本窗体
EndIf
Case1
IfTxt_Id.Text="admin"AndTxt_Psw="admin"Then'设置超级用户
UnloadMe'卸载本窗体
frm_Manager.Show'显示管理员窗体
Else'如果不是超级用户
CallPD'判断管理员的帐号和密码是否正确
IfB=TrueThen'如果帐号和密码正确
UnloadMe'卸载本窗体
frm_Manager.Show'显示管理员窗体
EndIf
EndIf
CaseElse'不过没有选择用户的身份
MsgBox"您没有选择身份,请选择!
",vbOKCancel+vbCritical'提示选择身份
Cbx_UserType.SetFocus'组合框Cbx_UserType获得焦点
EndSelect
ExitSub'跳出Sub过程
Err1:
ErrMessageBox"打开窗口失败"'显示出错信息
frm_Login.Show'显示登录窗体
EndSub
PrivateSubCmd_Quit_Click()
IfMsgBox("真的要退出"&Me.Caption&"吗?
",vbYesNo+vbInformation)=vbNoThen
ExitSub
EndIf'弹出对话框询问是否退出系统
End'退出系统
EndSub
PrivateSubForm_Load()
Cbx_UserType.Text="请选择身份"
Txt_Id.Text=""
Txt_Psw.Text=""
EndSub
PrivateSubTxt_Id_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=13Then'判断如果用户输入的是Enter键
Txt_Psw.SetFocus'设置Txt_Psw获得焦点
EndIf
EndSub
PrivateSubTxt_Psw_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=13Then
CallCmd_In_Click
EndIf
EndSub
2、管理员模块
1)在窗体上添加一个SSTab控件,上面添加三个commandButton控件,分别为选择题,填空题,判断题。
添加一个DataGrid控件显示试题,添加一个Ado控件链接数据库。
编写菜单实现各种管理的功能。
2)
3)代码
OptionExplicit
DimSqlAsString'声明模块级变量
PrivateDeclareFunctionShellExecuteLib"shell32.dll"Alias"ShellExecuteA"(ByValhwndAsLong,ByVallpOperationAsString,ByVallpFileAsString,ByVallpParametersAsLong,ByVallpDirectoryAsLong,ByValnShowCmdAsLong)AsLong
PrivateFunctionFunAdo(ByValstrAsString)'构造连接ADO的函数
OnErrorGoToErr1'执行过程中如果发生错误转向错误处理
WithAdo1'使用With结构
.Visible=False'Ado不可见
.ConnectionString=cnn.ConnectionString'设置Ado的连接字符串
.CommandType=adCmdText'设置Ado的命令类型
.RecordSource=str'设置Ado的记录源
.Refresh'刷新Ado的记录集
EndWith'结束With结构
ExitFunction'结束函数
Err1:
ErrMessageBox"与数据库连接失败!
"'显示错误信息
Me.Show'显示窗口
EndFunction
PrivateSubCmd_Cancel_Click()
CallForm_Unload
(1)
EndSub
PrivateSubCmd_PDT_Click()
Sql="select类型号=tb_testtype.Typeid,题号=(tb_topicstor.topicid),"&_
"题目名称=topicname,答案=topicanswer"&_
"fromtb_topicstor,tb_testtypewheretb_testtype.typeid=tb_topicstor.typeidandtypename='判断题'"
CallFunAdo(Sql)
DG.Columns(0).Width=700
DG.Columns
(1).Width=500
DG.Columns
(2).Width=4000
DG.Columns(3).Width=500
EndSub
PrivateSubCmd_TKT_Click()
Sql="select类型号=tb_testtype.Typeid,题号=(tb_topicstor.topicid),"&_
"题目名称=topicname,答案=topicanswer"&_
"fromtb_topicstor,tb_testtypewheretb_testtype.typeid=tb_topicstor.typeidandtypename='填空题'"
CallFunAdo(Sql)
DG.Columns(0).Width=700
DG.Columns
(1).Width=500
DG.Columns
(2).Width=4000
EndSub
PrivateSubCmd_XZT_Click()
Sql="select类型号=tb_testtype.Typeid,题号=(tb_topicstor.topicid),"&_
"题目名称=topicname,答案=topicanswer,A,B,C,D,E,F"&_
"fromtb_topicstor,tb_testtypewheretb_testtype.typeid=tb_topicstor.typeid"&_
"andtypename='"&Cmd_XZT.Caption&"'"'把查看选择题的SQL语句赋给变量Sql
CallFunAdo(Sql)'调用函数执行SQL语句
DG.Columns(0).Width=700'设置DataGrid的第1列列宽
DG.Columns
(1).Width=500'设置DataGrid的第2列列宽
DG.Columns
(2).Width=4000'设置DataGrid的第3列列宽
DG.Columns(3).Width=500'设置DataGrid的第4列列宽
EndSub
PrivateSubDG_DblClick()
Iffrm_Manager.Ado1.Recordset.Fields("题号")=""Then'如果试题不存在
MsgBox"不存在记录,请您先添加记录",vbOKOnly'提示没有记录
ExitSub'跳出Sub过程
Else'如果题库中有试题
Me.Enabled=False'管理窗体不可以用
Bkm=Ado1.Recordset.Bookmark'记录当前DataGrid的指针的位置
EndIf
EndSub
PrivateSubForm_Load()
CallCmd_XZT_Click
EndSub
PrivateSubForm_Unload(CancelAsInteger)
IfMsgBox("真的要退出"&Me.Caption&"吗?
",vbYesNo+vbInformation)=vbNoThen'弹出消息对话框询问是否退出系统
Cancel=True'如果消息对话框返回值为常数vbNo,系统返回值为True
Else
cnn.Execute"updatetb_usersethavein=0whereuserid='"&UsId&"'andUserType='1'"
End'如果消息对话框返回值为常数vbNo,系统返回值为False,结束程序
EndIf
EndSub
PrivateSubMen_About_Click()
frm_About.Show
EndSub
PrivateSubMen_Help_Click()
SendKeys"{F1}"
EndSub
PrivateSubMen_SelGrd_Click()
frm_SelGrd.Show'打开查分窗体
Me.Hide'隐藏管理员窗体
EndSub
PrivateSubselect_Click()'设定参数
OnErrorGoToEndsub
frm_param.Show
Me.Hide
Endsub:
EndSub
PrivateSubT_AddPDT_Click()
OnErrorGoToEndsub
frm_PDT.Show
Me.Hide
Endsub:
EndSub
PrivateSubT_AddTKT_Click()
OnErrorGoToEndsub
frm_TKT.Show
Me.Hide
Endsub:
EndSub
PrivateSubT_AddXZT_Click()
OnErrorGoToEndsub
frm_XZT.Show
Me.Hide
Endsub:
EndSub
PrivateSubT_Exit_Click()
UnloadMe
EndSub
PrivateSubT_Update_Click()
OnErrorGoToEndsub
Me.Enabled=False
Endsub:
EndSub
PrivateSubUser_Click()
OnErrorGoToEndsub
frm_UpdateUser.Show
Me.Hide
Endsub:
EndSub
3、学生窗体
1)
2)
3)
OptionExplicit
DimHaveTestAsInteger
PrivateSubBegin_Click()
CallCmdOk_Click
EndSub
PrivateSubCmdOk_Click()
OnErrorGoToErr1
frm_Test.Show
Me.Hide
ExitSub
Err1:
ErrMessageBox"考试窗口打开出错"
EndSub
PrivateSubCmdQuit_Click()
UnloadMe
EndSub
PrivateSubForm_Load()
DimrsAsNewADODB.Recordset'声明认识rs为记录集对象
Sql="selecthavetestfromtb_userwhereusertype=0"&_
"anduserid='"&UsId&"'"'把查询是否参加考试的标识字段赋给变量Sql
rs.OpenSql,cnn,adOpenStatic,adLockReadOnly'执行SQL语句
HaveTest=rs.Fields("HaveTest")
ShowButton
EndSub
PrivateSubForm_Unload(CancelAsInteger)
IfMsgBox("真的要退出"&Me.Caption&"吗?
",vbYesNo+vbInformation)=vbNoThen'弹出对话框询问是否退出系统
Cancel=1
Else
cnn.Execute"updatetb_usersethavein=0whereuserid='"&UsId&"'andUserType='0'"
End
EndIf
EndSub
PrivateSubImg_PswCancel_Click()
Pte_StuPsw.Visible=False
ShowButton
EndSub
PrivateSubImg_PswOk_Click()
OnErrorGoToErr1'如果发生错误转向错误处理
DimrsAsNewADODB.Recordset'声明认识rs为记录集对象
Sql="select*fromTB_UserwhereUserId='"&UsId&"'"&_
"andUserType='0'andUserPsw='"&Txt_StuPsw.Text&"'"'把验证密码的SQL语句赋给变量Sql
rs.OpenSql,cnn,adOpenStatic,adLockReadOnly'执行SQL语句
IfNotrs.RecordCount>0Then'如果密码不正确
IfMsgBox("密码不正确,请您重新填写!
",vbOKCancel+vbCritical)=vbCancelThen'弹出提示框
Pte_StuPsw.Visible=False
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 在线 考试 系统 课程设计