通用心理测试系统的设计和开发.ppt

上传人:小飞机 文档编号:5387915 上传时间:2023-07-02 格式:PPT 页数:47 大小:1.08MB
返回 下载 相关 举报
通用心理测试系统的设计和开发.ppt_第1页
第1页 / 共47页
通用心理测试系统的设计和开发.ppt_第2页
第2页 / 共47页
通用心理测试系统的设计和开发.ppt_第3页
第3页 / 共47页
通用心理测试系统的设计和开发.ppt_第4页
第4页 / 共47页
通用心理测试系统的设计和开发.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《通用心理测试系统的设计和开发.ppt》由会员分享,可在线阅读,更多相关《通用心理测试系统的设计和开发.ppt(47页珍藏版)》请在三一办公上搜索。

1、附录 通用心理测试系统的设计和开发,1、系统需求分析,意义:人的心理特性是不能被直接观察到的,而且还存在着明显的个体差异,但是任何一种心理特性总会以一定的行为表现出来。心理测验就是让人们在测验时产生某些行为,即个体对测验题目的反应,并根据这些行为反应来推论其相应的心理特性。在一定程度上有助于我们了解人类的心理活动,并从中得到帮助。例如在现实生活领域,心理测验可以帮助评价个人的智力水平和了解个性特征;可以用于对各种智能缺陷、精神疾病和脑功能障碍的临床诊断;可以为特殊人才的选拔提供参考;心理测验结合心理咨询有助于消除情绪困扰和人格障碍,提高生活品质。,1、系统需求分析,现状分析:传统的纸笔测试方法

2、操作烦琐,人工结果统计费时费力,还可能存在计算错误的可能性,而且不利于对测试情况做到汇总分析。因此需要开发一套科学、灵活、易用的通用心理测试系统,能够进行多种类型的心理测试,界面友好,操作简单,能够自动计算分数,实现数据存档和查询功能。,1、系统需求分析,通用心理测试系统设计的具体要求包括:1.高效地录入和保存信息。例如测试者的姓名、性别、籍贯、学历数据等。2.方便地完成测试过程,并保证测试的客观性.如自动计时、自动汇总统计结果等。3.实现多次测试结果的汇总。4.实现基于数据库的电子化信息管理。5.具有较强的扩充性,能够适应新的测试内容变化要求等。,2、系统流程图,通用心理测试系统的使用者包括

3、两类,测试者和管理员。对于每个新的测试者而言,需要录入其姓名、性别、文化程度等基本信息,然后开始测试,完成所有题目或测试时间到后,显示其测试结果,并把测试结果自动保存到数据库中。对于管理员而言,需要通过口令进行登录,然后可以从数据库中汇总测试结果等操作。,3、系统设计思路,界面设计通用心理测试系统的应用程序界面,即MVC模型中的View。包括主窗体、关于窗体、新测试者基本信息录入窗体、显示测试题目并作答窗体、显示测试结果窗体、管理员登录窗体和测试结果汇总窗体等界面。,3、系统设计思路,代码设计程序代码设计采用面向对象的事件驱动机制,针对用户界面上的对象的相应事件(主要是Click事件和定时器事

4、件)来激发对象执行所需的操作,即MVC模型中的Controller部分。,开始新的测试显示V2:新测试者信息窗口显示V3:测试窗口查看测试记录显示V5:测试结果窗口退出结束系统帮助显示V1:关于窗口,3、系统设计思路,数据库设计本系统使用ACCESS数据库作为后台数据库,即MVC模型中的Model部分。在名为test的MDB数据库文件中建立5张表。,4、系统实现方法数据库设计,用户表用途:存放具有查询测试结果权限的用户姓名和口令。,用于存放具有查询测试结果权限的用户姓名和口令。管理员登录时输入用户名称和登录口令后,系统将到用户表中查询是否存在输入的用户名称,如果存在则进一步判断输入的登录口令和

5、数据库中的口令是否相同。如果正确,则显示测试结果汇总窗口,否则予以错误提示。,4、系统实现方法数据库设计,试卷表用途:保存试卷的名称、测试时间、测试结果的判定标准和相应结论内容。,为实现通用,对现有纸笔类型的心理测试进行分析,归纳出心理测试试题一般规律是通过若干选择题的测试,根据得分所在范围给出测试结论。一般的,一套试题的结论不超过8个。所以试卷表定义了8组结论,分别包括标准和内容两部分。同时考虑到某些测试对时间有所要求,因此定义了每套试卷的测试时间。,4、系统实现方法数据库设计,试卷表用途:保存试卷的名称、测试时间、测试结果的判定标准和相应结论内容。,试卷表中的试卷编号字段为主键,通过该主键

6、与试题表连接。执行主窗口中的“系统”“开始新的测试”命令,系统显示新测试者信息对话框。其中选择试卷下拉列表的项目是通过读取试卷表的各条记录的试卷名称字段逐一添加。选择试卷后,将记录其对应的试卷编号,以便在测试窗口中显示该试卷对应的试题。,4、系统实现方法数据库设计,试题表用途:试题表与试卷表间为一对多的关系。即试卷表中的一条记录,通过试卷编号与试题表中的多条记录对应,从而形成一份试卷中的多道测试题。,每道测试题提供8个选择项。(本案例中考虑的是单选测试题的形式)使用者选择试卷后,记录其对应的试卷编号,通过该试卷编号到试题表中查询相应的记录,并在测试窗口中显示该试题的内容和对应的选择项目。,4、

7、系统实现方法数据库设计,测试者表用途:记录测试者的信息。,执行主窗口中的“系统”“开始新的测试”命令,完成所有试题的测试后系统将测试信息保存到测试者表中,并自动为每个新测试者分配一个ID。,4、系统实现方法数据库设计,测试结果表用途:保存每个测试者所进行的测试的试卷编号和成绩。,测试结果表通过“测试者ID”字段与测试者表连接。通过“试卷编号”字段与试卷表连接。执行主窗口中的“系统”“查看测试记录”命令,系统登录对话框,成功登录后显示测试结果汇总窗口,窗口中的数据来自测试结果表的记录。,4、系统实现方法数据库设计,测试结果表用途:保存每个测试者所进行的测试的试卷编号和成绩。,测试结果表通过“测试

8、者ID”字段与测试者表连接。通过“试卷编号”字段与试卷表连接。执行主窗口中的“系统”“查看测试记录”命令,系统登录对话框,成功登录后显示测试结果汇总窗口,窗口中的数据来自测试结果表的记录。,4、系统实现方法窗体设计,建立应用程序启动Visual Basic程序,建立“标准.EXE”项目。,4、系统实现方法窗体设计,主窗体修改窗体属性。拖动窗体右下角,调整窗体大小符合背景图像的大小。编辑主窗体菜单。,4、系统实现方法窗体设计,新测试者、测试、用户登录、显示测试记录和关于窗体添加新窗体执行“工程”菜单中的“添加窗体”命令,显示“添加窗体”对话框,选择“新建”选项卡中的“窗体”图标,单击“打开”按钮

9、,在工程中添加一个新的窗体。修改窗体属性(参见教材)添加控件,设置控件属性、调整控件位置(参见教材),4、系统实现方法代码编程,主窗体菜单代码,系统菜单-开始新的测试命令Private Sub mnuStartTest_Click()以模态窗口方式显示新测试者信息窗口frmTesterInfo.Show 1End Sub说明:show方法的参数1表示显示的窗体模式为模态窗体,即关闭显示窗体前对调用它的父窗体不做响应。系统菜单-查看测试记录命令Private Sub mnuDisplayResult_Click()以模态窗口方式显示登录窗口frmLogin.Show 1End Sub系统菜单-退

10、出命令Private Sub mnuExit_Click()结束系统EndEnd Sub帮助菜单-关于命令Private Sub mnuAbout_Click()以模态窗口方式显示关于窗口frmAbout.Show 1End Sub,4、系统实现方法代码编程,新测试者窗体代码通用模块,定义窗体级变量保存测试者姓名的变量Public testerName As String保存测试者性别的变量Public testerSex As String保存测试者教育程度的变量Public testerEduLevel As String保存测试者籍贯的变量Public testerBirthPlace

11、As String注:本例中没有对测试者的信息做检验和保存,只是展现了复选按钮的使用方法。定义数据库连接所需要的变量。Dim sConnect As StringDim sSQL As StringDim dfwConn As ADODB.ConnectionDim rs As ADODB.Recordset保存用户选择的试卷对应的试卷编号。Public paperID As String,4、系统实现方法代码编程,新测试者窗体代码Load事件用于初始化窗体控件的内容,Private Sub Form_Load()AddItem用于向列表框/组合框中添加一项 北京市 天津市“定义后台数据库路径

12、和名称DatabasePath=App.Path 定义SQL查询语言sSQL=select*from 试卷 order by 试卷编号根据SQL查询语言,从数据库中检索相应记录,并在记录集中打开rs.Open sSQL,dfwConn,1,3,4、系统实现方法代码编程,新测试者窗体代码Load事件用于初始化窗体控件的内容,遍历记录集For i=0 To rs.RecordCount-1 将记录集中的试卷名称内容添加到cmbPaper控件中 rs.Fields(试卷名称)将记录集中的试卷编号内容添加到cmbPaperID控件中 rs.Fields(试卷编号)移动记录集指针,指向下一条记录 rs.

13、MoveNextNext关闭记录集rs.Close关闭连接dfwConn.CloseEnd Sub,4、系统实现方法代码编程,新测试者窗体代码取消按钮的Click事件从内存中卸载当前窗体,Private Sub cmdCancel_Click()卸载本窗口Unload MeEnd Sub,4、系统实现方法代码编程,新测试者窗体代码确定按钮的Click事件检验用户信息是否完整,Private Sub cmdOK_Click()检验是否填写了测试者姓名If=Then MsgBox 请填写姓名,vbInformation Exit SubEnd If检验是否选择了测试者性别,单选按钮的Value属性

14、为True,表示选择,False表示未选择。If=False And=False Then MsgBox 请选择性别,vbInformation Exit SubEnd If检验是否选择了测试者文化程度,列表框控件的ListIndex属性未-1表示未选择。If=-1 Then MsgBox 请选择文化程度,vbInformation Exit SubEnd If,4、系统实现方法代码编程,新测试者窗体代码确定按钮的Click事件保存相关信息到全局变量,如果所有信息均填写或选择,则保存到相应的全局变量中。testerName=If=True ThentesterSex=男ElsetesterSe

15、x=女End If列表框中选择的项目内容保存在Text属性中,将该属性的内容保存在testerEduLevel变量中。testerEduLevel=组合框中选择的项目内容保存在Text属性中,将该属性的内容保存在testerBirthPlace变量中。testerBirthPlace=用户选择的试卷名称,可通过cmbPaper的ListIndex获得。通过读取cmbPaperID的list数组的相应项目得到用户选择的试卷名称所对应的试卷编号。保存该试卷标号到paperID变量中,以便在测试窗体中显示该试卷所包含的试题。paperID=),4、系统实现方法代码编程,新测试者窗体代码确定按钮的Cl

16、ick事件执行窗体切换,从内存中卸载当前窗体,注:VB中用关键字me代表当前窗体。Unload Me从内存中卸载frmMain窗体。Unload frmMain加载并显示测试窗体frmTestfrmTest.ShowEnd Sub,4、系统实现方法代码编程,测试窗体代码通用模块定义窗体级变量,定义数据库连接所需要的变量。Dim sConnect As StringDim sSQL As StringDim dfwConn As ADODB.ConnectionDim rs As ADODB.Recordset用于保存测试总分Dim totalScore As Integer用于保存每道题的8个

17、选择项目对应的分值Dim scores(1 To 8)As Integer用于保存该试卷规定的测试时间Dim testTime As Integer用于保存已用的测试时间Dim usedTime As Long用于判断测试是否结束Dim testOver As Boolean,4、系统实现方法代码编程,测试窗体代码Load事件初始化控件与变量,Private Sub Form_Load()使用frmTesterInfo窗体的窗体级变量为当前窗体的控件赋初值Me.lblName=姓名:&frmTesterInfo.testerNameMe.lblSex=性别:&frmTesterInfo.tes

18、terSexMe.lblEduLevel=文化程度:&frmTesterInfo.testerEduLevelMe.lblBirthPlace=籍贯:&frmTesterInfo.testerBirthPlace隐藏测试结论显示所用的文本框控件=False隐藏显示试题的Frame控件Me.Frame3.Visible=False初始化总分变量,为0totalScore=0定义后台数据库路径DatabasePath=App.Path&DatabaseName=test.mdb“,4、系统实现方法代码编程,测试窗体代码Load事件连接数据库,定义数据库连接字符串sConnect=Provider=

19、Microsoft.Jet.OLEDB.4.0;Password=;User ID=Admin;Data Source=定义数据库连接对象,并建立数据库连接Set dfwConn=New ConnectiondfwConn.Open sConnect定义记录集对象Set rs=New Recordsetrs.CursorLocation=adUseClient创建SQL查询字符串,根据测试者选择的试卷编号,到试卷表中查询对应的试卷信息sSQL=select*from 试卷 where 试卷编号=&frmTesterInfo.paperID&根据SQL查询字符串,打开记录集,返回查询结果rs.O

20、pen sSQL,dfwConn,1,3,4、系统实现方法代码编程,测试窗体代码Load事件设置控件内容,将记录集中对应的试卷名称内容显示到当前窗体的标题栏上Me.Caption=Me.Caption&-&rs.Fields(试卷名称)将记录集中测试时间字段的值赋给变量testTimetestTime=rs.Fields(测试时间)设置窗体上显示剩余时间的控件Me.lbl剩余时间.Caption=testTime&分钟设置窗体上显示已用时间的控件Me.lbl已用时间.Caption=0 分钟关闭记录集rs.Close构建新的SQL查询字符串,根据试卷编号在试题表中查询对应的试题信息sSQL=s

21、elect*from 试题 where 试卷编号=&frmTesterInfo.paperID&order by 试题编号根据SQL字符串打开记录集,发挥查询结果rs.Open sSQL,dfwConn,1,3调用showQuestion自定义函数,显示试题内容showQuestionEnd Sub,4、系统实现方法代码编程,测试窗体代码showQuestion过程显示题目及选项,Private Sub showQuestion()利用lbl试题控件显示试题内容Me.lbl试题.Caption=rs.Fields(试题编号)&、&rs.Fields(试题内容)如果该题的选项A字段不为空,则利用

22、控件Option1显示选项A,并使Option1可见,并将选项A对应的分值保存在scores数组的对应元素中。如果该选项为空,则隐藏对应控件选项B到选项H都按此方法判断和设置。If rs.Fields(选项A)Then Me.Option1.Caption=rs.Fields(选项A)scores(1)=rs.Fields(选项A分值)Me.Option1.Visible=TrueElse Me.Option1.Visible=FalseEnd If设置默认选择为选项AMe.Option1.Value=TrueEnd Sub,4、系统实现方法代码编程,测试窗体代码开始测试按钮的Click事件设

23、置控件状态启动计时器,Private Sub cmdStartTest_Click()显示包含题目和选项的Frame3控件Me.Frame3.Visible=True使下一题按钮可用=True使开始测试按钮不可用=False初始化已用测试时间变量usedTime=0激活定时器,定时执行Timer1的Timer事件,显示测试时间信息Me.Timer1.Enabled=TrueEnd Sub,4、系统实现方法代码编程,测试窗体代码定时器Timer1的Timer事件设置控件状态启动计时器,Private Sub Timer1_Timer()Timer1的Interval属性为1000,相对于1秒钟,

24、因此每次执行Timer事件时将已用时间加1usedTime=usedTime+1将已用时间转换成分钟并显示,同时计算剩余时间并显示Me.lbl已用时间.Caption=Format(usedTime/60,0)&分钟Me.lbl剩余时间.Caption=Format(testTime-usedTime/60,0)&分钟如果剩余时间小于5分钟,则通过变换Frame2的背景颜色和时间信息控件的前景颜色提示测试者If testTime-usedTime/60 5 Then Me.lbl剩余时间.ForeColor=vbRed Me.Frame2.BackColor=QBColor(Int(Rnd()

25、*15)+1)Me.lbl已用时间.ForeColor=RGB(0,255,0)Me.Label5.ForeColor=&HFF0000End If如果测试时间到,提示测试者If testTime-usedTime/60 0 Then MsgBox 测试时间到,请单击确定按钮察看得分,vbInformation+vbOKOnly Me.Timer1.Enabled=False=TrueEnd IfEnd Sub,4、系统实现方法代码编程,测试窗体代码下一题按钮的Click事件计算得分显示下一题内容,Private Sub cmdNext_Click()判断当前显示的是否是最后一题如果不是最后一

26、题,则根据测试者选择的项目,即哪个Option的Value为True,计算当前总分If Not rs.EOF()ThenIf Me.Option1.Value=True Then totalScore=totalScore+scores(1)If Me.Option2.Value=True Then totalScore=totalScore+scores(2)移动记录集的指针指向下一记录rs.MoveNextEnd If,4、系统实现方法代码编程,测试窗体代码下一题按钮的Click事件完成全部试题后的处理,If rs.EOF And rs.RecordCount 0 Then已到记录集的最后

27、,则返回最后一题 rs.MoveLast 禁用下一题按钮=False 使查看结果按钮可用=True 设置测试结束变量为True testOver=True提示测试者查看结果 MsgBox 您已经完成了全部测试题,单击查看结果显示测试结论,vbInformation退出子过程 Exit SubEnd If如果没有到达记录集的最后,则调用showQuestion子过程,根据当前记录的内容显示新的题目及选项。showQuestionEnd Sub,4、系统实现方法代码编程,测试窗体代码查看结果按钮的Click事件根据得分显示结论停止计时,Private Sub cmdShowResult_Click

28、()关闭当前显示题目的记录集rs.Close重新建立SQL查询字符串,用于从试卷库中查询相应试卷编号的记录sSQL=select*from 试卷 where 试卷编号=&frmTesterInfo.paperID&rs.Open sSQL,dfwConn,1,3根据测试总分所在的范围,显示对应的结论If totalScore=rs.Fields(结论1标准)Then=rs.Fields(结论1内容)End IfIf totalScore=rs.Fields(结论2标准)Then=-测试结论-&vbCrLf&vbCrLf&=&vbCrLf&vbCrLf&vbCrLf&-测试结论仅作参考-隐藏题目

29、和选项所在的Frame3控件Me.Frame3.Visible=False显示测试结论所在的txtResult控件=True停止测试时间计时Me.Timer1.Enabled=FalseEnd Sub,4、系统实现方法代码编程,测试窗体代码关闭按钮的Click事件保存测试者信息,Private Sub cmdClose_Click()如果测试者完成了全部试题的测试,则保存测试者信息和测试结果。如果测试者没有完成全部试题的测试,由于测试时间已到结束,则为不完整测试,不保存相关信息。If testOver=True Then关闭当前记录集rs.Close打开测试者表sSQL=select*from

30、 测试者rs.Open sSQL,dfwConn,1,3在测试者表中新建一条记录rs.AddNew为新记录的各个字段赋值ID字段为自动产生,其内容是当前的记录数Dim testerIDtesterID=rs.RecordCountrs.Fields(ID)=testerID姓名字段等用frmTesterInfo的窗体级变量赋值rs.Fields(姓名)=frmTesterInfo.testerNamers.Fields(性别)=frmTesterInfo.testerSexrs.Fields(文化程度)=frmTesterInfo.testerEduLevelrs.Fields(籍贯)=frm

31、TesterInfo.testerBirthPlace更新记录集,实现新记录的保存rs.Updaters.Close,4、系统实现方法代码编程,测试窗体代码关闭按钮的Click事件保存测试结果,使用类似方法,在测试结果中建立新记录,并保存测试者ID、试卷编号和成绩。sSQL=select*from 测试结果rs.Open sSQL,dfwConn,1,3rs.AddNewrs.Fields(测试者ID)=testerIDrs.Fields(试卷编号)=frmTesterInfo.paperIDrs.Fields(成绩)=totalScorers.Updaters.CloseEnd If卸载本窗

32、体Unload Me显示主窗体frmMain.ShowEnd Sub,4、系统实现方法代码编程,测试窗体代码窗体的Unload事件关闭数据库连接,Private Sub Form_Unload(Cancel As Integer)卸载窗体时关闭后台数据库连接dfwConn.CloseEnd Sub,4、系统实现方法代码编程,用户登录窗体代码确定按钮的Click事件验证数据库中是否存在相应的用户名称,Private Sub cmdOK_Click()定义变量用于保存用户输入的名称Dim strUserName As StringstrUserName=Me.txtUserName定义后台数据库路

33、径和名称DatabasePath=App.Path 建立SQL查询语句,,从用户表中查询姓名等于输入内容的记录sSQL=SELECT*FROM 用户 where 姓名=&strUserName&rs.Open sSQL,dfwConn,1,3如果记录集的记录数量为0,表示没有该用户,显示提示信息。If rs.RecordCount=0 Then MsgBox 无此用户,请重新输入!Exit SubEnd If,4、系统实现方法代码编程,用户登录窗体代码确定按钮的Click事件验证口令是否正确,定义变量保存用户输入的口令Dim strPassword As StringstrPassword=t

34、xtUserPassword.Text如果输入的口令和记录集中的口令相等,则显示测试记录窗体,否则显示错误信息If strPassword=rs.Fields(口令)Then Unload Me frmDisplayResult.ShowElse MsgBox 口令错误,请重新输入!End If关闭记录集和数据库连接rs.ClosedfwConn.CloseEnd Sub,4、系统实现方法代码编程,用户登录窗体代码取消按钮的Click事件卸载当前窗口,Private Sub cmdExit_Click()卸载当前窗体Unload MeEnd Sub,4、系统实现方法代码编程,显示测试记录窗体代

35、码窗体的Load事件用MSHFlexGrid显示记录集内容,Private Sub Form_Load()DatabasePath=App.Path Set dfwConn=New ConnectiondfwConn.Open sConnectSet rs=New Recordsetrs.CursorLocation=adUseClientsSQL=SELECT 测试结果.试卷编号,测试者.姓名,测试者.性别,测试者.文化程度,测试者.籍贯,测试结果.成绩 FROM 测试者 INNER JOIN 测试结果 ON 测试者.ID=测试结果.测试者IDrs.Open sSQL,dfwConn,1,3

36、绑定MSHFlexGrid1数据源为记录集,实现记录集内容的显示Set Me.MSHFlexGrid1.DataSource=rsEnd Sub,4、系统实现方法代码编程,关于窗体代码窗体的Load事件显示版权等信息,Private Sub Form_Load()Me.Caption=关于&App.Title lblVersion.Caption=版本&App.Major&.&App.Minor&.&App.Revision lblTitle.Caption=App.TitleEnd Sub代码中的App对象作为VB内置的对象,表示应用程序运行时的实例。App.Title表示应用程序的标题。App对象的属性设置可以通过“工程”菜单的“工程 1 属性”命令,打开“工程属性”对话框进行设置。在该对话框中“通用”选项卡中,设置“工程名称”为“通用心理测试系统”,在“生成”选项卡中,设置“标题”为“通用心理测试系统”。,4、系统实现方法生成可执行文件,执行“文件”菜单中的“生成工程”命令,编译生成可脱离VB集成开发环境的EXE文件。,小 结,小 结,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号