一、需求分析计算机技术没有应用到考试上时,组织一次考试只是要经过五步:人工出题,考生考试,人工阅卷,成绩评估和试卷分析,这是一项十分繁琐和容易出错的工作,教师的工作量非常的大。
很明显,传统的考试方式已经不再适应现代考试的需要。
如今,信息技术的迅猛发展,应用不断扩大,教学和虚拟大学等相继出现,这些应用正逐步深入到千家万户,人们迫切要求利用这些技术来进行在线考试,以减少教师的工作负担并提高工作效率,同时提高考试的质量,从而使考试更趋于公正,客观,更加激发学生的兴趣。
例如,目前许多国际著名的计算机公司所举办的各种认证考试绝大部分是采用这种形式。
二、数据库设计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)登录模块代码Option ExplicitPublic B As Boolean '用户的登录信息是否正确Private Sub PD()'判断用户登录信息是否正确,正确B=true,否则B=falseDim rs As New ADODB.Recordset '声明rs为记录集对象If Trim(Txt_Id.Text) = "" Then '如果没有输入帐号MsgBox "没有输入用户账号,请您正确填写!", vbOKCancel + vbCriticalTxt_Id.SetFocus '设置焦点在问本框Txt_Id上ElseIf Trim(Txt_Psw.Text) = "" Then '如果密码为空MsgBox "没有输入密码,请您正确填写!", vbOKCancel + vbCriticalTxt_Psw.SetFocus '设置焦点在问本框Txt_Psw上Else 'Cmd_In.Default = True '设置Cmd_In按Enter键触发Click事件Sql = "select * from TB_User where UserId='" & Trim(Txt_Id.Text) & "'" & _"and UserType='" & Cbx_UserType.ListIndex & "' " & _"andUserPsw='" & Trim(Txt_Psw.Text) & "' "'把查询用户信息的SQL语句赋给变量Sqlrs.Open Sql, cnn, adOpenStatic, adLockReadOnly '以只读的方式静态的打开Sql执行的结果的记录集If Not rs.RecordCount > 0 Then '如果记录集为空Select Case MsgBox("用户账号或密码不正确,请您正确填写!",vbOKCancel + vbCritical) '显示提示信息Case vbOK '如果选择了是B = FalseTxt_Id.Text = "" '帐号清空Txt_Psw.Text = "" '密码清空Txt_Id.SetFocus '是输入帐号的文本框获得焦点Case Else '选择了取消End '结束程序End SelectCmd_In.Default = False '设置Cmd_In不是Enter的默认按钮ElseIf rs.Fields("HaveIn") = 0 Then'如果记录集不为空且此帐号没被其他用户使用B = True '用户的登录信息正确cnn.Execute "update TB_User set HaveIn=1 " & _"where UserId='"& Trim(Txt_Id.Text) & "'" & _"and UserType='" & 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的默认按钮 End Ifrs.Close '关闭记录集End IfEnd SubPrivate Sub Cbx_UserType_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then '如果输入的字符是Enter键Txt_Id.SetFocus '设置输入帐号的文本框获得焦点Else '如果输入的是其它字符KeyAscii = 0 '返回值为空即不输入任何字符End IfEnd SubPrivate Sub Cmd_Again_Click() '用户信息输入错误,选择了“重输”按钮,开始重新输入。
Call Form_LoadEnd SubPrivate Sub Cmd_In_Click() '用户填写信息完毕,单击“确定”按钮,开始登录On Error GoTo Err1 '出现错误转向错误处理Dim rs As New ADODB.Recordset '声明rs为记录集对象Select Case Cbx_UserType.ListIndex 'Select语句的条件是Cbx_UserType的ListIndex属性Case 0 '如果选中的是第一条记录即考生Call PD '判断考生的帐号和密码是否正确If B = True Then '如果考生的帐号和密码正确Sql = "select HaveTest from TB_User where UserType=0" & _"and UserId='" & Trim(Txt_Id.Text) & "'" '判断考生是否参加过考试rs.Open Sql, cnn, adOpenStatic, adLockReadOnly '执行SQL语句If rs.Fields("HaveTest") = False Then '如果考生没有参加过考试Sql = "delete from TB_Grade where StuId=" & _ "'" & Trim(Txt_Id.Text) & "'" '删除成绩表中考生原有的记录cnn.Execute Sql '执行SQL语句Sql = "insert into TB_Grade(StuId) values" & _"('" & Trim(Txt_Id.Text) & "')" '把考生的帐号插入到成绩表中cnn.Execute Sql '执行SQL语句End Iffrm_Stu.Show '显示考生窗口Unload Me '卸载本窗体End IfCase 1If Txt_Id.Text = "admin" And Txt_Psw = "admin" Then '设置超级用户Unload Me '卸载本窗体frm_Manager.Show '显示管理员窗体Else '如果不是超级用户Call PD '判断管理员的帐号和密码是否正确If B = True Then '如果帐号和密码正确Unload Me '卸载本窗体frm_Manager.Show '显示管理员窗体End IfEnd IfCase Else '不过没有选择用户的身份MsgBox "您没有选择身份,请选择!", vbOKCancel + vbCritical '提示选择身份Cbx_UserType.SetFocus '组合框Cbx_UserType获得焦点End SelectExit Sub '跳出Sub过程Err1:ErrMessageBox "打开窗口失败" '显示出错信息frm_Login.Show '显示登录窗体End SubPrivate Sub Cmd_Quit_Click()If MsgBox("真的要退出" & Me.Caption & " 吗?", vbYesNo + vbInformation) = vbNo ThenExit SubEnd If '弹出对话框询问是否退出系统End '退出系统End SubPrivate Sub Form_Load()Cbx_UserType.Text = "请选择身份"Txt_Id.Text = ""Txt_Psw.Text = ""End SubPrivate Sub Txt_Id_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then '判断如果用户输入的是Enter键Txt_Psw.SetFocus '设置Txt_Psw获得焦点End IfEnd SubPrivate Sub Txt_Psw_KeyPress(KeyAscii As Integer)If KeyAscii = 13 ThenCall Cmd_In_ClickEnd IfEnd Sub2、管理员模块1)在窗体上添加一个SSTab控件,上面添加三个commandButton控件,分别为选择题,填空题,判断题。