版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、附录 通用心理测试系统的设计和开发,1、系统需求分析,意义: 人的心理特性是不能被直接观察到的,而且还存在着明显的个体差异,但是任何一种心理特性总会以一定的行为表现出来。 心理测验就是让人们在测验时产生某些行为,即个体对测验题目的反应,并根据这些行为反应来推论其相应的心理特性。在一定程度上有助于我们了解人类的心理活动,并从中得到帮助。 例如在现实生活领域,心理测验可以帮助评价个人的智力水平和了解个性特征;可以用于对各种智能缺陷、精神疾病和脑功能障碍的临床诊断;可以为特殊人才的选拔提供参考;心理测验结合心理咨询有助于消除情绪困扰和人格障碍,提高生活品质。,1、系统需求分析,现状分析: 传统的纸笔
2、测试方法操作烦琐,人工结果统计费时费力,还可能存在计算错误的可能性,而且不利于对测试情况做到汇总分析。因此需要开发一套科学、灵活、易用的通用心理测试系统,能够进行多种类型的心理测试,界面友好,操作简单,能够自动计算分数,实现数据存档和查询功能。,1、系统需求分析,通用心理测试系统设计的具体要求包括: 1.高效地录入和保存信息。例如测试者的姓名、性别、籍贯、学历数据等。 2.方便地完成测试过程,并保证测试的客观性.如自动计时、自动汇总统计结果等。 3.实现多次测试结果的汇总。 4.实现基于数据库的电子化信息管理。 5. 具有较强的扩充性,能够适应新的测试内容变化要求等。,2、系统流程图,通用心理
3、测试系统的使用者包括两类,测试者和管理员。 对于每个新的测试者而言,需要录入其姓名、性别、文化程度等基本信息,然后开始测试,完成所有题目或测试时间到后,显示其测试结果,并把测试结果自动保存到数据库中。 对于管理员而言,需要通过口令进行登录,然后可以从数据库中汇总测试结果等操作。,3、系统设计思路,界面设计 通用心理测试系统的应用程序界面,即MVC模型中的View。 包括主窗体、关于窗体、新测试者基本信息录入窗体、显示测试题目并作答窗体、显示测试结果窗体、管理员登录窗体和测试结果汇总窗体等界面。,3、系统设计思路,代码设计 程序代码设计采用面向对象的事件驱动机制,针对用户界面上的对象的相应事件(
4、主要是Click事件和定时器事件)来激发对象执行所需的操作,即MVC模型中的Controller部分。,开始新的测试显示V2:新测试者信息窗口显示V3:测试窗口 查看测试记录显示V5:测试结果窗口 退出结束系统 帮助显示V1:关于窗口,3、系统设计思路,数据库设计 本系统使用ACCESS数据库作为后台数据库,即MVC模型中的Model部分。 在名为test的MDB数据库文件中建立5张表。,4、系统实现方法数据库设计,用户表 用途:存放具有查询测试结果权限的用户姓名和口令。,用于存放具有查询测试结果权限的用户姓名和口令。管理员登录时输入用户名称和登录口令后,系统将到用户表中查询是否存在输入的用户
5、名称,如果存在则进一步判断输入的登录口令和数据库中的口令是否相同。如果正确,则显示测试结果汇总窗口,否则予以错误提示。,4、系统实现方法数据库设计,试卷表 用途:保存试卷的名称、测试时间、测试结果的判定标准和相应结论内容。,为实现通用,对现有纸笔类型的心理测试进行分析,归纳出心理测试试题一般规律是通过若干选择题的测试,根据得分所在范围给出测试结论。 一般的,一套试题的结论不超过8个。所以试卷表定义了8组结论,分别包括标准和内容两部分。 同时考虑到某些测试对时间有所要求,因此定义了每套试卷的测试时间。,4、系统实现方法数据库设计,试卷表 用途:保存试卷的名称、测试时间、测试结果的判定标准和相应结
6、论内容。,试卷表中的试卷编号字段为主键,通过该主键与试题表连接。 执行主窗口中的“系统”“开始新的测试”命令,系统显示新测试者信息对话框。 其中选择试卷下拉列表的项目是通过读取试卷表的各条记录的试卷名称字段逐一添加。 选择试卷后,将记录其对应的试卷编号,以便在测试窗口中显示该试卷对应的试题。,4、系统实现方法数据库设计,试题表 用途:试题表与试卷表间为一对多的关系。即试卷表中的一条记录,通过试卷编号与试题表中的多条记录对应,从而形成一份试卷中的多道测试题。,每道测试题提供8个选择项。(本案例中考虑的是单选测试题的形式) 使用者选择试卷后,记录其对应的试卷编号,通过该试卷编号到试题表中查询相应的
7、记录,并在测试窗口中显示该试题的内容和对应的选择项目。,4、系统实现方法数据库设计,测试者表 用途:记录测试者的信息。,执行主窗口中的“系统”“开始新的测试”命令,完成所有试题的测试后系统将测试信息保存到测试者表中,并自动为每个新测试者分配一个ID。,4、系统实现方法数据库设计,测试结果表 用途:保存每个测试者所进行的测试的试卷编号和成绩。,测试结果表通过“测试者ID”字段与测试者表连接。 通过“试卷编号”字段与试卷表连接。 执行主窗口中的“系统”“查看测试记录”命令,系统登录对话框,成功登录后显示测试结果汇总窗口,窗口中的数据来自测试结果表的记录。,4、系统实现方法数据库设计,测试结果表 用
8、途:保存每个测试者所进行的测试的试卷编号和成绩。,测试结果表通过“测试者ID”字段与测试者表连接。 通过“试卷编号”字段与试卷表连接。 执行主窗口中的“系统”“查看测试记录”命令,系统登录对话框,成功登录后显示测试结果汇总窗口,窗口中的数据来自测试结果表的记录。,4、系统实现方法窗体设计,建立应用程序 启动Visual Basic程序,建立“标准.EXE”项目。,4、系统实现方法窗体设计,主窗体 修改窗体属性。 拖动窗体右下角,调整窗体大小符合背景图像的大小。 编辑主窗体菜单。,4、系统实现方法窗体设计,新测试者、测试、用户登录、显示测试记录和关于窗体 添加新窗体 执行“工程”菜单中的“添加窗
9、体”命令,显示“添加窗体”对话框,选择“新建”选项卡中的“窗体”图标,单击“打开”按钮,在工程中添加一个新的窗体。 修改窗体属性(参见教材) 添加控件,设置控件属性、调整控件位置(参见教材),4、系统实现方法代码编程,主窗体菜单代码,系统菜单-开始新的测试命令 Private Sub mnuStartTest_Click() 以模态窗口方式显示新测试者信息窗口 frmTesterInfo.Show 1 End Sub 说明:show方法的参数1表示显示的窗体模式为模态窗体,即关闭显示窗体前对调用它的父窗体不做响应。 系统菜单-查看测试记录命令 Private Sub mnuDisplayRes
10、ult_Click() 以模态窗口方式显示登录窗口 frmLogin.Show 1 End Sub 系统菜单-退出命令 Private Sub mnuExit_Click() 结束系统 End End Sub 帮助菜单-关于命令 Private Sub mnuAbout_Click() 以模态窗口方式显示关于窗口 frmAbout.Show 1 End Sub,4、系统实现方法代码编程,新测试者窗体代码 通用模块,定义窗体级变量 保存测试者姓名的变量 Public testerName As String 保存测试者性别的变量 Public testerSex As String 保存测试者教
11、育程度的变量 Public testerEduLevel As String 保存测试者籍贯的变量 Public testerBirthPlace As String 注:本例中没有对测试者的信息做检验和保存,只是展现了复选按钮的使用方法。 定义数据库连接所需要的变量。 Dim sConnect As String Dim sSQL As String Dim dfwConn As ADODB.Connection Dim rs As ADODB.Recordset 保存用户选择的试卷对应的试卷编号。 Public paperID As String,4、系统实现方法代码编程,新测试者窗体代码
12、 Load事件 用于初始化窗体控件的内容,Private Sub Form_Load() AddItem用于向列表框/组合框中添加一项 Me.cmbBirthPlace.AddItem 北京市 Me.cmbBirthPlace.AddItem 天津市“ 定义后台数据库路径和名称 DatabasePath = App.Path 定义SQL查询语言 sSQL = select * from 试卷 order by 试卷编号 根据SQL查询语言,从数据库中检索相应记录,并在记录集中打开 rs.Open sSQL, dfwConn, 1, 3 ,4、系统实现方法代码编程,新测试者窗体代码 Load事件
13、 用于初始化窗体控件的内容, 遍历记录集 For i = 0 To rs.RecordCount - 1 将记录集中的试卷名称内容添加到cmbPaper控件中 Me.cmbPaper.AddItem rs.Fields(试卷名称) 将记录集中的试卷编号内容添加到cmbPaperID控件中 Me.cmbPaperID.AddItem rs.Fields(试卷编号) 移动记录集指针,指向下一条记录 rs.MoveNext Next 关闭记录集 rs.Close 关闭连接 dfwConn.Close End Sub,4、系统实现方法代码编程,新测试者窗体代码 取消按钮的Click事件 从内存中卸载当
14、前窗体,Private Sub cmdCancel_Click() 卸载本窗口 Unload Me End Sub,4、系统实现方法代码编程,新测试者窗体代码 确定按钮的Click事件 检验用户信息是否完整,Private Sub cmdOK_Click() 检验是否填写了测试者姓名 If Me.txtName.Text = Then MsgBox 请填写姓名, vbInformation Me.txtName.SetFocus Exit Sub End If 检验是否选择了测试者性别,单选按钮的Value属性为True,表示选择,False表示未选择。 If Me.optSexFemal.V
15、alue = False And Me.optSexMale.Value = False Then MsgBox 请选择性别, vbInformation Me.optSexMale.SetFocus Exit Sub End If 检验是否选择了测试者文化程度,列表框控件的ListIndex属性未-1表示未选择。 If Me.lstEduLevel.ListIndex = -1 Then MsgBox 请选择文化程度, vbInformation Me.lstEduLevel.SetFocus Exit Sub End If ,4、系统实现方法代码编程,新测试者窗体代码 确定按钮的Click
16、事件 保存相关信息到全局变量,如果所有信息均填写或选择,则保存到相应的全局变量中。 testerName = Me.txtName.Text If Me.optSexMale.Value = True Then testerSex = 男 Else testerSex = 女 End If 列表框中选择的项目内容保存在Text属性中,将该属性的内容保存在testerEduLevel变量中。 testerEduLevel = Me.lstEduLevel.Text 组合框中选择的项目内容保存在Text属性中,将该属性的内容保存在testerBirthPlace变量中。 testerBirthPl
17、ace = Me.cmbBirthPlace.Text 用户选择的试卷名称,可通过cmbPaper的ListIndex获得。 通过读取cmbPaperID的list数组的相应项目得到用户选择的试卷名称所对应的试卷编号。 保存该试卷标号到paperID变量中,以便在测试窗体中显示该试卷所包含的试题。 paperID = Me.cmbPaperID.List(Me.cmbPaper.ListIndex) ,4、系统实现方法代码编程,新测试者窗体代码 确定按钮的Click事件 执行窗体切换, 从内存中卸载当前窗体,注:VB中用关键字me代表当前窗体。 Unload Me 从内存中卸载frmMain窗
18、体。 Unload frmMain 加载并显示测试窗体frmTest frmTest.Show End Sub,4、系统实现方法代码编程,测试窗体代码 通用模块 定义窗体级变量,定义数据库连接所需要的变量。 Dim sConnect As String Dim sSQL As String Dim dfwConn As ADODB.Connection Dim rs As ADODB.Recordset 用于保存测试总分 Dim totalScore As Integer 用于保存每道题的8个选择项目对应的分值 Dim scores(1 To 8) As Integer 用于保存该试卷规定的测
19、试时间 Dim testTime As Integer 用于保存已用的测试时间 Dim usedTime As Long 用于判断测试是否结束 Dim testOver As Boolean,4、系统实现方法代码编程,测试窗体代码 Load事件 初始化控件与变量,Private Sub Form_Load() 使用frmTesterInfo窗体的窗体级变量为当前窗体的控件赋初值 Me.lblName = 姓名: Password=;User ID=Admin;Data Source= 定义数据库连接对象,并建立数据库连接 Set dfwConn = New Connection dfwConn
20、.Open sConnect 定义记录集对象 Set rs = New Recordset rs.CursorLocation = adUseClient 创建SQL查询字符串,根据测试者选择的试卷编号,到试卷表中查询对应的试卷信息 sSQL = select * from 试卷 where 试卷编号= & frmTesterInfo.paperID & 根据SQL查询字符串,打开记录集,返回查询结果 rs.Open sSQL, dfwConn, 1, 3 ,4、系统实现方法代码编程,测试窗体代码 Load事件 设置控件内容,将记录集中对应的试卷名称内容显示到当前窗体的标题栏上 Me.Capt
21、ion = Me.Caption & - & rs.Fields(试卷名称) 将记录集中测试时间字段的值赋给变量testTime testTime = rs.Fields(测试时间) 设置窗体上显示剩余时间的控件 Me.lbl剩余时间.Caption = testTime & 分钟 设置窗体上显示已用时间的控件 Me.lbl已用时间.Caption = 0 分钟 关闭记录集 rs.Close 构建新的SQL查询字符串,根据试卷编号在试题表中查询对应的试题信息 sSQL = select * from 试题 where 试卷编号= & frmTesterInfo.paperID & order
22、by 试题编号 根据SQL字符串打开记录集,发挥查询结果 rs.Open sSQL, dfwConn, 1, 3 调用showQuestion自定义函数,显示试题内容 showQuestion End Sub,4、系统实现方法代码编程,测试窗体代码 showQuestion过程 显示题目及选项,Private Sub showQuestion() 利用lbl试题控件显示试题内容 Me.lbl试题.Caption = rs.Fields(试题编号) & 、 & rs.Fields(试题内容) 如果该题的选项A字段不为空,则利用控件Option1显示选项A,并使Option1可见,并将选项A对应的
23、分值保存在scores数组的对应元素中。 如果该选项为空,则隐藏对应控件 选项B到选项H都按此方法判断和设置。 If rs.Fields(选项A) Then Me.Option1.Caption = rs.Fields(选项A) scores(1) = rs.Fields(选项A分值) Me.Option1.Visible = True Else Me.Option1.Visible = False End If 设置默认选择为选项A Me.Option1.Value = True End Sub,4、系统实现方法代码编程,测试窗体代码 开始测试按钮的Click事件 设置控件状态 启动计时器,
24、Private Sub cmdStartTest_Click() 显示包含题目和选项的Frame3控件 Me.Frame3.Visible = True 使下一题按钮可用 Me.cmdNext.Enabled = True 使开始测试按钮不可用 Me.cmdStartTest.Enabled = False 初始化已用测试时间变量 usedTime = 0 激活定时器,定时执行Timer1的Timer事件,显示测试时间信息 Me.Timer1.Enabled = True End Sub,4、系统实现方法代码编程,测试窗体代码 定时器Timer1的Timer事件 设置控件状态 启动计时器,Pr
25、ivate Sub Timer1_Timer() Timer1的Interval属性为1000,相对于1秒钟,因此每次执行Timer事件时将已用时间加1 usedTime = usedTime + 1 将已用时间转换成分钟并显示,同时计算剩余时间并显示 Me.lbl已用时间.Caption = Format(usedTime / 60, 0) & 分钟 Me.lbl剩余时间.Caption = Format(testTime - usedTime / 60, 0) & 分钟 如果剩余时间小于5分钟,则通过变换Frame2的背景颜色和时间信息控件的前景颜色提示测试者 If testTime -
26、usedTime / 60 5 Then Me.lbl剩余时间.ForeColor = vbRed Me.Frame2.BackColor = QBColor(Int(Rnd() * 15) + 1) Me.lbl已用时间.ForeColor = RGB(0, 255, 0) Me.Label5.ForeColor = &HFF0000 End If 如果测试时间到,提示测试者 If testTime - usedTime / 60 0 Then MsgBox 测试时间到,请单击确定按钮察看得分, vbInformation + vbOKOnly Me.Timer1.Enabled = Fal
27、se Me.cmdShowResult.Value = True End If End Sub,4、系统实现方法代码编程,测试窗体代码 下一题按钮的Click事件 计算得分 显示下一题内容,Private Sub cmdNext_Click() 判断当前显示的是否是最后一题 如果不是最后一题,则根据测试者选择的项目,即哪个Option的Value为True,计算当前总分 If Not rs.EOF() Then If Me.Option1.Value = True Then totalScore = totalScore + scores(1) If Me.Option2.Value = Tr
28、ue Then totalScore = totalScore + scores(2) 移动记录集的指针指向下一记录 rs.MoveNext End If ,4、系统实现方法代码编程,测试窗体代码 下一题按钮的Click事件 完成全部试题后的处理,If rs.EOF And rs.RecordCount 0 Then 已到记录集的最后,则返回最后一题 rs.MoveLast 禁用下一题按钮 Me.cmdNext.Enabled = False 使查看结果按钮可用 Me.cmdShowResult.Enabled = True 设置测试结束变量为True testOver = True 提示测试
29、者查看结果 MsgBox 您已经完成了全部测试题,单击查看结果显示测试结论, vbInformation 退出子过程 Exit Sub End If 如果没有到达记录集的最后,则调用showQuestion子过程,根据当前记录的内容显示新的题目及选项。 showQuestion End Sub,4、系统实现方法代码编程,测试窗体代码 查看结果按钮的Click事件 根据得分显示结论 停止计时,Private Sub cmdShowResult_Click() 关闭当前显示题目的记录集 rs.Close 重新建立SQL查询字符串,用于从试卷库中查询相应试卷编号的记录 sSQL = select *
30、 from 试卷 where 试卷编号= & frmTesterInfo.paperID & rs.Open sSQL, dfwConn, 1, 3 根据测试总分所在的范围,显示对应的结论 If totalScore = rs.Fields(结论1标准) Then Me.txtResult.Text = rs.Fields(结论1内容) End If If totalScore = rs.Fields(结论2标准) Then Me.txtResult.Text = -测试结论- & vbCrLf & vbCrLf & Me.txtResult.Text Me.txtResult.Text =
31、Me.txtResult.Text & vbCrLf & vbCrLf & vbCrLf & -测试结论仅作参考- 隐藏题目和选项所在的Frame3控件 Me.Frame3.Visible = False 显示测试结论所在的txtResult控件 Me.txtResult.Visible = True 停止测试时间计时 Me.Timer1.Enabled = False End Sub,4、系统实现方法代码编程,测试窗体代码 关闭按钮的Click事件 保存测试者信息,Private Sub cmdClose_Click() 如果测试者完成了全部试题的测试,则保存测试者信息和测试结果。如果测试者
32、没有完成全部试题的测试,由于测试时间已到结束,则为不完整测试,不保存相关信息。 If testOver = True Then 关闭当前记录集 rs.Close 打开测试者表 sSQL = select * from 测试者 rs.Open sSQL, dfwConn, 1, 3 在测试者表中新建一条记录 rs.AddNew 为新记录的各个字段赋值 ID字段为自动产生,其内容是当前的记录数 Dim testerID testerID = rs.RecordCount rs.Fields(ID) = testerID 姓名字段等用frmTesterInfo的窗体级变量赋值 rs.Fields(姓
33、名) = frmTesterInfo.testerName rs.Fields(性别) = frmTesterInfo.testerSex rs.Fields(文化程度) = frmTesterInfo.testerEduLevel rs.Fields(籍贯) = frmTesterInfo.testerBirthPlace 更新记录集,实现新记录的保存 rs.Update rs.Close,4、系统实现方法代码编程,测试窗体代码 关闭按钮的Click事件 保存测试结果,使用类似方法,在测试结果中建立新记录,并保存测试者ID、试卷编号和成绩。 sSQL = select * from 测试结果
34、 rs.Open sSQL, dfwConn, 1, 3 rs.AddNew rs.Fields(测试者ID) = testerID rs.Fields(试卷编号) = frmTesterInfo.paperID rs.Fields(成绩) = totalScore rs.Update rs.Close End If 卸载本窗体 Unload Me 显示主窗体 frmMain.Show End Sub,4、系统实现方法代码编程,测试窗体代码 窗体的Unload事件 关闭数据库连接,Private Sub Form_Unload(Cancel As Integer) 卸载窗体时关闭后台数据库连接
35、 dfwConn.Close End Sub,4、系统实现方法代码编程,用户登录窗体代码 确定按钮的Click事件 验证数据库中是否存在相应的用户名称,Private Sub cmdOK_Click() 定义变量用于保存用户输入的名称 Dim strUserName As String strUserName = Me.txtUserName 定义后台数据库路径和名称 DatabasePath = App.Path 建立SQL查询语句,,从用户表中查询姓名等于输入内容的记录 sSQL = SELECT * FROM 用户 where 姓名= & strUserName & rs.Open sSQL, dfwConn, 1, 3 如果记录集的记录数量为0,表示没有该用户,显示提示信息。 If rs.RecordCount = 0 Then MsgBox 无此用户,请重新输入! Me.txtUserName.SetFocus Exit Sub End If ,4、系统实现方法代码编程,用户登录窗体代码 确定按钮的Click事件 验证口令是否正确,定义变量保存用户输入的口令 Dim strPassword As String strPa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年数字政府服务平台建设合同协议
- PE管施工技术交底记录
- 2025年广东烟草招聘考试真题
- 儿科感染暴发应急预案演练脚本
- 高铁应急预案演练脚本范文
- 2025年青海民族大学招聘真题(行政管理岗)
- 2026内蒙古通辽市科尔沁区招聘政府专职消防队员、专职消防车驾驶员30人备考题库完整参考答案详解
- 2026山东临沂市兰陵县部分事业单位招聘综合类岗位工作人员34人备考题库及答案详解(夺冠系列)
- 2025山东省水利勘测设计院有限公司招聘2人备考题库及完整答案详解
- 交通信号控制与城市交通流仿真结合
- 2026届南通市高二数学第一学期期末统考试题含解析
- 2026中国电信四川公用信息产业有限责任公司社会成熟人才招聘备考题库有完整答案详解
- 运输人员教育培训制度
- 2026中国电信四川公用信息产业有限责任公司社会成熟人才招聘备考题库有答案详解
- 升降货梯买卖安装与使用说明书合同
- 河南豫能控股股份有限公司及所管企业2026届校园招聘127人考试备考题库及答案解析
- 房地产公司2025年度总结暨2026战略规划
- 物业管家客服培训课件
- 虚假贸易十不准培训课件
- 中央空调多联机施工安全管理方案
- 【初中 地理】2025-2026学年人教版七年级上册地理期末复习提纲
评论
0/150
提交评论