通用心理测试系统的设计和开发教学提纲_第1页
通用心理测试系统的设计和开发教学提纲_第2页
通用心理测试系统的设计和开发教学提纲_第3页
通用心理测试系统的设计和开发教学提纲_第4页
通用心理测试系统的设计和开发教学提纲_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通用心理测试系统的设计和开发1、系统需求分析现状分析:传统的纸笔测试方法操作烦琐,人工结果统计费时费力,还可能存在计算错误的可能性,而且不利于对测试情况做到汇总分析。因此需要开发一套科学、灵活、易用的通用心理测试系统,能够进行多种类型的心理测试,界面友好,操作简单,能够自动计算分数,实现数据存档和查询功能。1、系统需求分析通用心理测试系统设计的具体要求包括:

1.高效地录入和保存信息。

例如测试者的姓名、性别、籍贯、学历数据等。2.方便地完成测试过程,并保证测试的客观性.

如自动计时、自动汇总统计结果等。3.实现多次测试结果的汇总。4.实现基于数据库的电子化信息管理。5.具有较强的扩充性,能够适应新的测试内容变化要求等。2、系统流程图通用心理测试系统的使用者包括两类,测试者和管理员。对于每个新的测试者而言,需要录入其姓名、性别、文化程度等基本信息,然后开始测试,完成所有题目或测试时间到后,显示其测试结果,并把测试结果自动保存到数据库中。对于管理员而言,需要通过口令进行登录,然后可以从数据库中汇总测试结果等操作。。测试者登录开始测试显示结果存储结果管理员登录测试结果汇总数据库3、系统设计思路界面设计通用心理测试系统的应用程序界面,即MVC模型中的View。包括主窗体、关于窗体、新测试者基本信息录入窗体、显示测试题目并作答窗体、显示测试结果窗体、管理员登录窗体和测试结果汇总窗体等界面。V0主窗口V1关于窗口V2新测试者信息窗口V3测试窗口V4显示测试结果窗口主窗口菜单:V5登录窗口3、系统设计思路代码设计程序代码设计采用面向对象的事件驱动机制,针对用户界面上的对象的相应事件(主要是Click事件和定时器事件)来激发对象执行所需的操作,即MVC模型中的Controller部分。开始新的测试——显示V2:新测试者信息窗口——显示V3:测试窗口查看测试记录——显示V5:测试结果窗口退出——结束系统帮助——显示V1:关于窗口3、系统设计思路数据库设计本系统使用ACCESS数据库作为后台数据库,即MVC模型中的Model部分。在名为test的MDB数据库文件中建立5张表。数据库试卷试题测试者测试结果用户4、系统实现方法——数据库设计用户表用途:存放具有查询测试结果权限的用户姓名和口令。用于存放具有查询测试结果权限的用户姓名和口令。管理员登录时输入用户名称和登录口令后,系统将到用户表中查询是否存在输入的用户名称,如果存在则进一步判断输入的登录口令和数据库中的口令是否相同。如果正确,则显示测试结果汇总窗口,否则予以错误提示。4、系统实现方法——数据库设计试卷表用途:保存试卷的名称、测试时间、测试结果的判定标准和相应结论内容。为实现通用,对现有纸笔类型的心理测试进行分析,归纳出心理测试试题一般规律是通过若干选择题的测试,根据得分所在范围给出测试结论。一般的,一套试题的结论不超过8个。所以试卷表定义了8组结论,分别包括标准和内容两部分。同时考虑到某些测试对时间有所要求,因此定义了每套试卷的测试时间。4、系统实现方法——数据库设计试卷表用途:保存试卷的名称、测试时间、测试结果的判定标准和相应结论内容。试卷表中的试卷编号字段为主键,通过该主键与试题表连接。执行主窗口中的“系统”—“开始新的测试”命令,系统显示新测试者信息对话框。其中选择试卷下拉列表的项目是通过读取试卷表的各条记录的试卷名称字段逐一添加。选择试卷后,将记录其对应的试卷编号,以便在测试窗口中显示该试卷对应的试题。4、系统实现方法——数据库设计试题表用途:试题表与试卷表间为一对多的关系。即试卷表中的一条记录,通过试卷编号与试题表中的多条记录对应,从而形成一份试卷中的多道测试题。每道测试题提供8个选择项。(本案例中考虑的是单选测试题的形式)使用者选择试卷后,记录其对应的试卷编号,通过该试卷编号到试题表中查询相应的记录,并在测试窗口中显示该试题的内容和对应的选择项目。4、系统实现方法——数据库设计测试者表用途:记录测试者的信息。执行主窗口中的“系统”—“开始新的测试”命令,完成所有试题的测试后系统将测试信息保存到测试者表中,并自动为每个新测试者分配一个ID。4、系统实现方法——数据库设计测试结果表用途:保存每个测试者所进行的测试的试卷编号和成绩。测试结果表通过“测试者ID”字段与测试者表连接。通过“试卷编号”字段与试卷表连接。执行主窗口中的“系统”—“查看测试记录”命令,系统登录对话框,成功登录后显示测试结果汇总窗口,窗口中的数据来自测试结果表的记录。4、系统实现方法——数据库设计测试结果表用途:保存每个测试者所进行的测试的试卷编号和成绩。测试结果表通过“测试者ID”字段与测试者表连接。通过“试卷编号”字段与试卷表连接。执行主窗口中的“系统”—“查看测试记录”命令,系统登录对话框,成功登录后显示测试结果汇总窗口,窗口中的数据来自测试结果表的记录。4、系统实现方法——窗体设计建立应用程序启动VisualBasic程序,建立“标准.EXE”项目。4、系统实现方法——窗体设计主窗体修改窗体属性。拖动窗体右下角,调整窗体大小符合背景图像的大小。编辑主窗体菜单。4、系统实现方法——窗体设计新测试者、测试、用户登录、显示测试记录和关于窗体添加新窗体执行“工程”菜单中的“添加窗体”命令,显示“添加窗体”对话框,选择“新建”选项卡中的“窗体”图标,单击“打开”按钮,在工程中添加一个新的窗体。修改窗体属性(参见教材)添加控件,设置控件属性、调整控件位置(参见教材)4、系统实现方法——代码编程主窗体菜单代码系统菜单-开始新的测试命令PrivateSubmnuStartTest_Click()'以模态窗口方式显示新测试者信息窗口frmTesterInfo.Show1EndSub说明:show方法的参数1表示显示的窗体模式为模态窗体,即关闭显示窗体前对调用它的父窗体不做响应。系统菜单-查看测试记录命令PrivateSubmnuDisplayResult_Click()'以模态窗口方式显示登录窗口frmLogin.Show1EndSub系统菜单-退出命令PrivateSubmnuExit_Click()'结束系统EndEndSub帮助菜单-关于命令PrivateSubmnuAbout_Click()'以模态窗口方式显示关于窗口frmAbout.Show1EndSub4、系统实现方法——代码编程新测试者窗体代码通用模块定义窗体级变量'保存测试者姓名的变量PublictesterNameAsString'保存测试者性别的变量PublictesterSexAsString'保存测试者教育程度的变量PublictesterEduLevelAsString'保存测试者籍贯的变量PublictesterBirthPlaceAsString注:本例中没有对测试者的信息做检验和保存,只是展现了复选按钮的使用方法。'定义数据库连接所需要的变量。DimsConnectAsStringDimsSQLAsStringDimdfwConnAsADODB.ConnectionDimrsAsADODB.Recordset'保存用户选择的试卷对应的试卷编号。PublicpaperIDAsString4、系统实现方法——代码编程新测试者窗体代码Load事件用于初始化窗体控件的内容PrivateSubForm_Load()'AddItem用于向列表框/组合框中添加一项Me.cmbBirthPlace.AddItem"北京市"Me.cmbBirthPlace.AddItem"天津市“……'定义后台数据库路径和名称DatabasePath=App.Path&"\"DatabaseName="test.mdb"

'建立与数据库的连接字符串sConnect="Provider=Microsoft.Jet.OLEDB.4.0;Password='';UserID=Admin;DataSource="&DatabasePath&DatabaseName&";……'定义SQL查询语言sSQL="select*from试卷orderby试卷编号"

'根据SQL查询语言,从数据库中检索相应记录,并在记录集中打开rs.OpensSQL,dfwConn,1,3

……4、系统实现方法——代码编程新测试者窗体代码Load事件用于初始化窗体控件的内容……

'遍历记录集Fori=0Tors.RecordCount-1'将记录集中的试卷名称内容添加到cmbPaper控件中

Me.cmbPaper.AddItemrs.Fields("试卷名称")

'将记录集中的试卷编号内容添加到cmbPaperID控件中Me.cmbPaperID.AddItemrs.Fields("试卷编号")

'移动记录集指针,指向下一条记录rs.MoveNextNext

'关闭记录集rs.Close

'关闭连接dfwConn.Close

EndSub4、系统实现方法——代码编程新测试者窗体代码取消按钮的Click事件从内存中卸载当前窗体PrivateSubcmdCancel_Click()'卸载本窗口UnloadMeEndSub4、系统实现方法——代码编程新测试者窗体代码确定按钮的Click事件检验用户信息是否完整PrivateSubcmdOK_Click()'检验是否填写了测试者姓名IfMe.txtName.Text=""ThenMsgBox"请填写姓名",vbInformationMe.txtName.SetFocusExitSubEndIf

'检验是否选择了测试者性别,单选按钮的Value属性为True,表示选择,False表示未选择。IfMe.optSexFemal.Value=FalseAndMe.optSexMale.Value=FalseThenMsgBox"请选择性别",vbInformationMe.optSexMale.SetFocusExitSubEndIf

'检验是否选择了测试者文化程度,列表框控件的ListIndex属性未-1表示未选择。IfMe.lstEduLevel.ListIndex=-1ThenMsgBox"请选择文化程度",vbInformationMe.lstEduLevel.SetFocusExitSubEndIf

……4、系统实现方法——代码编程新测试者窗体代码确定按钮的Click事件保存相关信息到全局变量'如果所有信息均填写或选择,则保存到相应的全局变量中。testerName=Me.txtName.Text

IfMe.optSexMale.Value=TrueThentesterSex="男"ElsetesterSex="女"EndIf

'列表框中选择的项目内容保存在Text属性中,将该属性的内容保存在testerEduLevel变量中。testerEduLevel=Me.lstEduLevel.Text

'组合框中选择的项目内容保存在Text属性中,将该属性的内容保存在testerBirthPlace变量中。testerBirthPlace=Me.cmbBirthPlace.Text

'用户选择的试卷名称,可通过cmbPaper的ListIndex获得。'通过读取cmbPaperID的list数组的相应项目得到用户选择的试卷名称所对应的试卷编号。'保存该试卷标号到paperID变量中,以便在测试窗体中显示该试卷所包含的试题。

paperID=Me.cmbPaperID.List(Me.cmbPaper.ListIndex)

……4、系统实现方法——代码编程新测试者窗体代码确定按钮的Click事件执行窗体切换……‘从内存中卸载当前窗体,注:VB中用关键字me代表当前窗体。UnloadMe

'从内存中卸载frmMain窗体。UnloadfrmMain

'加载并显示测试窗体frmTestfrmTest.ShowEndSub4、系统实现方法——代码编程测试窗体代码通用模块定义窗体级变量'定义数据库连接所需要的变量。DimsConnectAsStringDimsSQLAsStringDimdfwConnAsADODB.ConnectionDimrsAsADODB.Recordset'用于保存测试总分DimtotalScoreAsInteger'用于保存每道题的8个选择项目对应的分值Dimscores(1To8)AsInteger'用于保存该试卷规定的测试时间DimtestTimeAsInteger'用于保存已用的测试时间DimusedTimeAsLong'用于判断测试是否结束DimtestOverAsBoolean4、系统实现方法——代码编程测试窗体代码Load事件初始化控件与变量PrivateSubForm_Load()'使用frmTesterInfo窗体的窗体级变量为当前窗体的控件赋初值Me.lblName="姓名:"&frmTesterInfo.testerNameMe.lblSex="性别:"&frmTesterInfo.testerSexMe.lblEduLevel="文化程度:"&frmTesterInfo.testerEduLevelMe.lblBirthPlace="籍贯:"&frmTesterInfo.testerBirthPlace

'隐藏测试结论显示所用的文本框控件Me.txtResult.Visible=False

'隐藏显示试题的Frame控件Me.Frame3.Visible=False

'初始化总分变量,为0totalScore=0

'定义后台数据库路径DatabasePath=App.Path&"\"DatabaseName="test.mdb“……4、系统实现方法——代码编程测试窗体代码Load事件连接数据库'定义数据库连接字符串sConnect="Provider=Microsoft.Jet.OLEDB.4.0;Password='';UserID=Admin;DataSource="&DatabasePath&DatabaseName&";……

'定义数据库连接对象,并建立数据库连接SetdfwConn=NewConnectiondfwConn.OpensConnect

'定义记录集对象Setrs=NewRecordsetrs.CursorLocation=adUseClient'创建SQL查询字符串,根据测试者选择的试卷编号,到试卷表中查询对应的试卷信息sSQL="select*from试卷where试卷编号='"&frmTesterInfo.paperID&"'"

'根据SQL查询字符串,打开记录集,返回查询结果rs.OpensSQL,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="select*from试题where试卷编号='"&frmTesterInfo.paperID&"'orderby试题编号"

'根据SQL字符串打开记录集,发挥查询结果rs.OpensSQL,dfwConn,1,3

'调用showQuestion自定义函数,显示试题内容showQuestionEndSub4、系统实现方法——代码编程测试窗体代码showQuestion过程显示题目及选项PrivateSubshowQuestion()'利用lbl试题控件显示试题内容Me.lbl试题.Caption=rs.Fields("试题编号")&"、"&rs.Fields("试题内容")

'如果该题的选项A字段不为空,则利用控件Option1显示选项A,并使Option1可见,并将选项A对应的分值保存在scores数组的对应元素中。'如果该选项为空,则隐藏对应控件'选项B到选项H都按此方法判断和设置。

Ifrs.Fields("选项A")<>""ThenMe.Option1.Caption=rs.Fields("选项A")scores(1)=rs.Fields("选项A分值")Me.Option1.Visible=TrueElseMe.Option1.Visible=FalseEndIf

……'设置默认选择为选项AMe.Option1.Value=TrueEndSub4、系统实现方法——代码编程测试窗体代码开始测试按钮的Click事件设置控件状态启动计时器PrivateSubcmdStartTest_Click()'显示包含题目和选项的Frame3控件Me.Frame3.Visible=True

'使下一题按钮可用Me.cmdNext.Enabled=True

'使开始测试按钮不可用Me.cmdStartTest.Enabled=False

'初始化已用测试时间变量usedTime=0

'激活定时器,定时执行Timer1的Timer事件,显示测试时间信息Me.Timer1.Enabled=TrueEndSub4、系统实现方法——代码编程测试窗体代码定时器Timer1的Timer事件设置控件状态启动计时器PrivateSubTimer1_Timer()'Timer1的Interval属性为1000,相对于1秒钟,因此每次执行Timer事件时将已用时间加1usedTime=usedTime+1

'将已用时间转换成分钟并显示,同时计算剩余时间并显示Me.lbl已用时间.Caption=Format(usedTime/60,"0")&"分钟"Me.lbl剩余时间.Caption=Format(testTime-usedTime/60,"0")&"分钟"

'如果剩余时间小于5分钟,则通过变换Frame2的背景颜色和时间信息控件的前景颜色提示测试者IftestTime-usedTime/60<5ThenMe.lbl剩余时间.ForeColor=vbRedMe.Frame2.BackColor=QBColor(Int(Rnd()*15)+1)Me.lbl已用时间.ForeColor=RGB(0,255,0)Me.Label5.ForeColor=&HFF0000EndIf

'如果测试时间到,提示测试者IftestTime-usedTime/60<0ThenMsgBox"测试时间到,请单击确定按钮察看得分",vbInformation+vbOKOnlyMe.Timer1.Enabled=FalseMe.cmdShowResult.Value=TrueEndIfEndSub4、系统实现方法——代码编程测试窗体代码下一题按钮的Click事件计算得分显示下一题内容PrivateSubcmdNext_Click()'判断当前显示的是否是最后一题'如果不是最后一题,则根据测试者选择的项目,即哪个Option的Value为True,计算当前总分

IfNotrs.EOF()ThenIfMe.Option1.Value=TrueThentotalScore=totalScore+scores(1)IfMe.Option2.Value=TrueThentotalScore=totalScore+scores(2)……'移动记录集的指针指向下一记录rs.MoveNextEndIf

……4、系统实现方法——代码编程测试窗体代码下一题按钮的Click事件完成全部试题后的处理Ifrs.EOFAndrs.RecordCount>0Then'已到记录集的最后,则返回最后一题

rs.MoveLast

'禁用下一题按钮Me.cmdNext.Enabled=False

'使查看结果按钮可用

Me.cmdShowResult.Enabled=True

'设置测试结束变量为TruetestOver=True

'提示测试者查看结果

MsgBox"您已经完成了全部测试题,单击查看结果显示测试结论",vbInformation

'退出子过程ExitSubEndIf

'如果没有到达记录集的最后,则调用showQuestion子过程,根据当前记录的内容显示新的题目及选项。showQuestion

EndSub4、系统实现方法——代码编程测试窗体代码查看结果按钮的Click事件根据得分显示结论停止计时PrivateSubcmdShowResult_Click()'关闭当前显示题目的记录集rs.Close

'重新建立SQL查询字符串,用于从试卷库中查询相应试卷编号的记录sSQL="select*from试卷where试卷编号='"&frmTesterInfo.paperID&"'"

rs.OpensSQL,dfwConn,1,3

'根据测试总分所在的范围,显示对应的结论IftotalScore>=rs.Fields("结论1标准")ThenMe.txtResult.Text=rs.Fields("结论1内容")EndIf

IftotalScore>=rs.Fields("结论2标准")Then……Me.txtResult.Text="-----------------测试结论----------------"&vbCrLf&vbCrLf&Me.txtResult.TextMe.txtResult.Text=Me.txtResult.Text&vbCrLf&vbCrLf&vbCrLf&"-------------测试结论仅作参考------------"

'隐藏题目和选项所在的Frame3控件Me.Frame3.Visible=False

'显示测试结论所在的txtResult控件Me.txtResult.Visible=True

'停止测试时间计时Me.Timer1.Enabled=FalseEndSub4、系统实现方法——代码编程测试窗体代码关闭按钮的Click事件保存测试者信息PrivateSubcmdClose_Click()‘如果测试者完成了全部试题的测试,则保存测试者信息和测试结果。如果测试者没有完成全部试题的测试,由于测试时间已到结束,则为不完整测试,不保存相关信息。IftestOver=TrueThen'关闭当前记录集rs.Close

'打开测试者表sSQL="select*from测试者"rs.OpensSQL,dfwConn,1,3

'在测试者表中新建一条记录rs.AddNew

'为新记录的各个字段赋值

'ID字段为自动产生,其内容是当前的记录数DimtesterIDtesterID=rs.RecordCountrs.Fields("ID")=testerID

'姓名字段等用frmTesterInfo的窗体级变量赋值rs.Fields("姓名")=frmTesterInfo.testerNamers.Fields("性别")=frmTesterInfo.testerSexrs.Fields("文化程度")=frmTesterInfo.testerEduLevelrs.Fields("籍贯")=frmTesterInfo.testerBirthPlace

'更新记录集,实现新记录的保存rs.Updaters.Close4、系统实现方法——代码编程测试窗体代码关闭按钮的Click事件保存测试结果

'使用类似方法,在测试结果中建立新记录,并保存测试者ID、试卷编号和成绩。sSQL="select*from测试结果"rs.OpensSQL,dfwConn,1,3rs.AddNewrs.Fields("测试者ID")=testerIDrs.Fields("试卷编号")=frmTesterInfo.paperIDrs.Fields("成绩")=totalScorers.Updaters.Close

EndIf

'卸载本窗体UnloadMe'显示主窗体frmMain.ShowEndSub4、系统实现方法——代码编程测试窗体代码窗体的Unload事件关闭数据库连接PrivateSubForm_Unload(CancelAsInteger)'卸载窗体时关闭后台数据库连接dfwConn.CloseEndSub4、系统实现方法——代码编程用户登录窗体代码确定按钮的Click事件验证数据库中是否存在相应的用户名称PrivateSubcmdOK_Click()'定义变量用于保存用户输入的名称DimstrUserNameAsStringstrUserName=Me.txtUserName

'定义后台数据库路径和名称DatabasePath=App.Path&"\"DatabaseName="test.mdb"

sConnect="Provider=Microsoft.Jet.OLEDB.4.0;Password='';UserID=Admin;DataSource="&DatabasePath&DatabaseName&";……

'建立SQL查询语句,,从用户表中查询姓名等于输入内容的记录sSQL="SELECT*FROM用户where姓名='"&strUserName&"'"rs.OpensSQL,dfwConn,1,3

'如果记录集的记录数量为0,表示没有该用户,显示提示信息。Ifrs.RecordCount=0ThenMsgBox"无此用户,请重新输入!"Me.txtUserName.SetFocusExitSubEndIf

……4、系统实现方法——代码编程用户登录窗体代码确定按钮的Click事件验证口令是否正确'定义变量保存用户输入的口令DimstrPasswordAsStringstrPassword=txtUserPassword.Text

'如果输入的口令和记录集中的口令相等,则显示测试记录窗体,否则显示错误信息IfstrPassword=rs.Fields("口令")ThenUnloadMefrmDisplayRe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论