第 8章 小型试题库系统设计案例
学习目标:
了解应用项目的设计, 分析及开发过程
教学内容:
8.1 系统的组成及功能简述
8.2 试题库管理程序的设计
8.3 试题答题及评分程序的设计
8.4 有待完善的问题与思考
8.1 系统组成及功能简述 - 系统组成
小型试题库系统的组成模块:
? 教师模块:实现题库管理功能
? 学生模块:实现答题及自动评分功能
返回目录
8.1 系统组成及功能简述 - 系统组成
小型试题库系统的组成模块:
? 教师模块:实现题库管理功能
? 学生模块:实现答题及自动评分功能
返回目录
8.1 系统组成及功能简述 - 教师模块的功能
试题库管理程序 (教师模块 )的功能:
? 登录 (验证用户的合法性 )
? 题库的管理与维护:记录的新建, 修改, 删除和定位
? 选题:从题库中自动选择一定数量的选择题和填空题,
作为本次学生考试的考试库 。
? 生成学生考盘
返回目录
8.1 系统组成及功能简述 - 学生模块的功能
试题答题及评分程序
(学生模块 )的功能:
? 随机产生题号, 使各考生
的题目顺序不一样
? 登录 (验证考生的合法性 )
? 答题 。 中途退出, 可再次
进入答题环境 。
? 答题结束退出时, 系统可
自动进行评分 。 评分后,
不能再进入答题界面 。
窗体切换流程
返回目录
8.1 系统组成及功能简述 - 数据库设计
? 以第 7章 [例 7.11]中建立的试题库 TestDb.MDB和学生
考试库 Test.MDB为基础
? 为验证学生身份的合法性以及记录学生的成绩, 需在
考试库 Test.MDB中增加一个考生表 UserDb,结构:
返回目录
8.2 试题库管理程序的设计
试题库管理程序 (教师模块 )由四个窗体和一个
模块文件 (xt.bas)组成
返回目录
8.2 试题库管理程序的设计
1,用户登录窗体 FrmDl
(1) 窗体设计:
? 新建一个 VB工程, 保存为 ctk.vbp
? 将窗体 Form1保存为 FrmDl.frm
? 部分控件的属性见教材表 8.2
返回目录
8.2 试题库管理程序的设计
(2) 编写代码,
? 在程序的, 通用, 声明段定义模块级变量
Dim cs As Integer '记录用户登录时出错的次数
? 编写窗体的 Load事件响应代码:调用 xt.bas中的通用过
程 CenterOnSetupForm(功能:将窗口居中安放 )
? 编写 Cmgqd按钮 (“确定, )的 Click事件响应代码:检查
用户名和密码是否正确 。 如果连错 3次, 只能退出
? 编写 Cmdml按钮 (控件数组按钮 )的 Click事件响应代码:
根据选择打开 "题库管理 ","选题 "或 "制作考盘 "窗体
返回目录
8.2 试题库管理程序的设计
2,添加 自动选题窗体 FrmXt
将 [例 7.11]中的 FrmSele.frm窗体添加到本工
程中, 并进行重命名另存:
? 添加 FrmSele窗体:
执行, 工程 → 添加文件, 命令, 选择 [例 7.11]建
立的 FrmSele.frm文件
? 将 FrmSele.frm另存为 FrmXt.frm
返回目录
8.2 试题库管理程序的设计
3,添加 题库管理窗体 FrmSele
将 [例 7.12]中的 FrmManage.frm窗体添加到
本工程中, 并进行重命名另存:
? 添加 FrmManage.frm窗体:
执行, 工程 → 添加文件, 命令, 选择 [例 7.12]建
立的 FrmManage.frm文件
? 将 FrmManage.frm另存为 FrmSele.frm
返回目录
8.2 试题库管理程序的设计
4,设计制作考盘窗体 FrmCopy
(1) 添加窗体:
? 执行, 工程 → 添加窗体, 命令, 添加一个新窗体,
并保存为 FrmCopy.frm
? 在窗体上添加两个命令按钮和一个标签 。 标签的属
性设置,Caption为空, ForeColor为红色 。
返回目录
8.2 试题库管理程序的设计
(2) 编写代码,
? 编写窗体的 Load事件响应代码, 功能:出现, 请
插入学生考盘 !, 的提示
? 编写通用过程 CopyDB,功能:复制试题文件
? 编写 Cmdqd按钮 (“确定, )的 Click事件响应代码:
调用 CopyDB过程, 将当前目录中的 test.mdb复制
到 A盘的根目录中
? 编写 Cmdexit按钮 (“返回, )的 Click事件响应代码:
卸载 制作考盘窗体
返回目录
8.2 试题库管理程序的设计
5,添加模块文件 xt.bas
? 执行, 工程 → 添加模块, 命令, 添加一个模块, 并
保存为 xt.bas
? 在模块代码窗口中定义通用过程, 功能:将窗口居
中安放
返回目录
8.3 试题答题及评分程序的设计
试题答题及评分
程序 (学生模块 )也是
由四个窗体和一个模
块文件组成 (xt.bas)
组成 。
返回目录
8.3 试题答题及评分程序的设计
1,考生登录窗体 FrmDl
(1) 窗体设计:
? 新建一个 VB工程, 保
存为 xz.vbp
? 将 窗体 Form1保存 为
FrmDl.frm
? 按右图进行窗体设计
返回目录
8.3 试题答题及评分程序的设计
(2) 编写代码,
? 编写窗体的 Load事件响应代码:
? 通过 DAO 工作区对象的 OpenDatabase方法打开学生考试
库 Test.MDB
? 调用 xt.bas中的过程 (将窗口居中安放 )
? 编写 Txtcode文本框 (“考核证号, )的 LostFocus事件响应
代码:失去焦点时检查准考证号输入是否正确
? 编写 Txtname文本框 (“姓名, )的 LostFocus事件响应代
码:失去焦点时检查姓名是否输入
返回目录
8.3 试题答题及评分程序的设计
? 编写 Txtzwh文本框 (“座位号, )的 LostFocus事件响应代
码:失去焦点时检查座位号是否正确输入
? 编写 cmdml按钮 (“正确无误, )的 Click事件响应代码:检
查准考证号, 考生姓名和座位号是否按要求输入 。 如果
正确, 则:
? 向 UserDb表中添加一条用户记录 。 若该记录已存在, 则
给出相应的提示
? 显示 Frmxz(考生答题 )窗体, 卸载 Frmdl(考生登录 )窗体
返回目录
8.3 试题答题及评分程序的设计
2,考生答题窗体 FrmXz
(1) 添加窗体:
? 执行, 工程 → 添加窗体, 命令, 添加一个新窗体, 并
保存为 FrmXz.frm
? 在窗体上添加一个 SSTab控件:执行, 工程 → 部件, 命
令,, 控件, 选 Microsoft Tabbed Dialog Control 6.0
? 设置 SSTab控件:
?属性窗口中设置 Tabs为 2,设置 TabsPerRow为 2
返回目录
8.3 试题答题及评分程序的设计
?设置 SSTab控件:
?右击 SSTab控件, 选, 属性, 命令, 设置如下:
返回目录
8.3 试题答题及评分程序的设计
?设置 SSTab控件:
?, 单选题, 选项卡界面设置 (部分控件的属性见教材表 8.3):
返回目录
8.3 试题答题及评分程序的设计
?设置 SSTab控件:
?, 填空题, 选项卡界面设置 (部分控件的属性见教材表 8.4):
返回目录
8.3 试题答题及评分程序的设计
(2) 编写代码,
? 在, 通用, 声明段定义模块级变量及通用过程 xianshi
? 编写窗体的 Load事件响应代码
? 编写单击 Option1按钮 (选择答案 )的事件响应代码
? 编写滚动 Hscroll(选择题目 )的事件响应代码
? 编写单击滚动条上的 Optti按钮 (选题 )的事件响应代码
? 编写窗体的 Activate(激活 )事件响应代码
? 编写单击 Cmdjj按钮 (“交卷评分, )的事件响应代码
? 编写单击 Cmdjs按钮 (“结束, )的事件响应代码
返回目录
8.3 试题答题及评分程序的设计
3,考生答题未答完提示窗体 FrmTs
(1) 添加窗体:
? 执行, 工程 → 添加窗体, 命令,
添加一个新窗体, 并保存为
FrmTs.frm
? 设计窗体
(2) 编写代码,
? 编写窗体的 Load事件响应代码
? 编写单击命令按钮数组的事件
响应代码
返回目录
8.3 试题答题及评分程序的设计
4,阅卷评分窗体 FrmTj
(1) 添加窗体:
? 执行, 工程 → 添加窗体,
命令, 添加一个新窗体,
并保存为 FrmTj.frm
? 设计窗体
返回目录
8.3 试题答题及评分程序的设计
(2) 编写代码,
? 在, 通用, 声明段定义模块级变量
Dim senum As Integer '记录答对的选择题数
Dim finum As Integer '记录答对的填空题数
? 编写窗体的 Load事件响应代码:判别选择题和填空题
的答题是否正确, 并给出考生得分
? 编写单击 cmdml按钮 (“结束考试, )的事件响应代码,将
考生成绩记录在考生表中, 并释放记录集对象 。
返回目录
8.3 试题答题及评分程序的设计
5,添加模块文件 xt.bas
?,工程 → 添加模块,, 添加一个模块, 保存为 xt.bas
? 在模块代码窗口中定义全局变量及通用过程
返回目录
8.4 有待完善的问题与思考
? 在学生考试库中, 由于, se_ksda”(学生答案 )和
,se_da”(标准答案 )在同一个数据表中, 考生可以直
接打开 Access数据库得到标准答案 。 因而在实际应
用中, 必须避免发生这种情况 。
? 在, 自动选题, 程序代码中, 每一条记录被选中的
几率是相同的 。 而在实际应用中, 可以给每道题赋
予一个权值, 用于表示题目的难易程度, 从题库中
选择考题时可以选择不同难度的题目, 以增加选题
的多样性 。
返回目录
学习目标:
了解应用项目的设计, 分析及开发过程
教学内容:
8.1 系统的组成及功能简述
8.2 试题库管理程序的设计
8.3 试题答题及评分程序的设计
8.4 有待完善的问题与思考
8.1 系统组成及功能简述 - 系统组成
小型试题库系统的组成模块:
? 教师模块:实现题库管理功能
? 学生模块:实现答题及自动评分功能
返回目录
8.1 系统组成及功能简述 - 系统组成
小型试题库系统的组成模块:
? 教师模块:实现题库管理功能
? 学生模块:实现答题及自动评分功能
返回目录
8.1 系统组成及功能简述 - 教师模块的功能
试题库管理程序 (教师模块 )的功能:
? 登录 (验证用户的合法性 )
? 题库的管理与维护:记录的新建, 修改, 删除和定位
? 选题:从题库中自动选择一定数量的选择题和填空题,
作为本次学生考试的考试库 。
? 生成学生考盘
返回目录
8.1 系统组成及功能简述 - 学生模块的功能
试题答题及评分程序
(学生模块 )的功能:
? 随机产生题号, 使各考生
的题目顺序不一样
? 登录 (验证考生的合法性 )
? 答题 。 中途退出, 可再次
进入答题环境 。
? 答题结束退出时, 系统可
自动进行评分 。 评分后,
不能再进入答题界面 。
窗体切换流程
返回目录
8.1 系统组成及功能简述 - 数据库设计
? 以第 7章 [例 7.11]中建立的试题库 TestDb.MDB和学生
考试库 Test.MDB为基础
? 为验证学生身份的合法性以及记录学生的成绩, 需在
考试库 Test.MDB中增加一个考生表 UserDb,结构:
返回目录
8.2 试题库管理程序的设计
试题库管理程序 (教师模块 )由四个窗体和一个
模块文件 (xt.bas)组成
返回目录
8.2 试题库管理程序的设计
1,用户登录窗体 FrmDl
(1) 窗体设计:
? 新建一个 VB工程, 保存为 ctk.vbp
? 将窗体 Form1保存为 FrmDl.frm
? 部分控件的属性见教材表 8.2
返回目录
8.2 试题库管理程序的设计
(2) 编写代码,
? 在程序的, 通用, 声明段定义模块级变量
Dim cs As Integer '记录用户登录时出错的次数
? 编写窗体的 Load事件响应代码:调用 xt.bas中的通用过
程 CenterOnSetupForm(功能:将窗口居中安放 )
? 编写 Cmgqd按钮 (“确定, )的 Click事件响应代码:检查
用户名和密码是否正确 。 如果连错 3次, 只能退出
? 编写 Cmdml按钮 (控件数组按钮 )的 Click事件响应代码:
根据选择打开 "题库管理 ","选题 "或 "制作考盘 "窗体
返回目录
8.2 试题库管理程序的设计
2,添加 自动选题窗体 FrmXt
将 [例 7.11]中的 FrmSele.frm窗体添加到本工
程中, 并进行重命名另存:
? 添加 FrmSele窗体:
执行, 工程 → 添加文件, 命令, 选择 [例 7.11]建
立的 FrmSele.frm文件
? 将 FrmSele.frm另存为 FrmXt.frm
返回目录
8.2 试题库管理程序的设计
3,添加 题库管理窗体 FrmSele
将 [例 7.12]中的 FrmManage.frm窗体添加到
本工程中, 并进行重命名另存:
? 添加 FrmManage.frm窗体:
执行, 工程 → 添加文件, 命令, 选择 [例 7.12]建
立的 FrmManage.frm文件
? 将 FrmManage.frm另存为 FrmSele.frm
返回目录
8.2 试题库管理程序的设计
4,设计制作考盘窗体 FrmCopy
(1) 添加窗体:
? 执行, 工程 → 添加窗体, 命令, 添加一个新窗体,
并保存为 FrmCopy.frm
? 在窗体上添加两个命令按钮和一个标签 。 标签的属
性设置,Caption为空, ForeColor为红色 。
返回目录
8.2 试题库管理程序的设计
(2) 编写代码,
? 编写窗体的 Load事件响应代码, 功能:出现, 请
插入学生考盘 !, 的提示
? 编写通用过程 CopyDB,功能:复制试题文件
? 编写 Cmdqd按钮 (“确定, )的 Click事件响应代码:
调用 CopyDB过程, 将当前目录中的 test.mdb复制
到 A盘的根目录中
? 编写 Cmdexit按钮 (“返回, )的 Click事件响应代码:
卸载 制作考盘窗体
返回目录
8.2 试题库管理程序的设计
5,添加模块文件 xt.bas
? 执行, 工程 → 添加模块, 命令, 添加一个模块, 并
保存为 xt.bas
? 在模块代码窗口中定义通用过程, 功能:将窗口居
中安放
返回目录
8.3 试题答题及评分程序的设计
试题答题及评分
程序 (学生模块 )也是
由四个窗体和一个模
块文件组成 (xt.bas)
组成 。
返回目录
8.3 试题答题及评分程序的设计
1,考生登录窗体 FrmDl
(1) 窗体设计:
? 新建一个 VB工程, 保
存为 xz.vbp
? 将 窗体 Form1保存 为
FrmDl.frm
? 按右图进行窗体设计
返回目录
8.3 试题答题及评分程序的设计
(2) 编写代码,
? 编写窗体的 Load事件响应代码:
? 通过 DAO 工作区对象的 OpenDatabase方法打开学生考试
库 Test.MDB
? 调用 xt.bas中的过程 (将窗口居中安放 )
? 编写 Txtcode文本框 (“考核证号, )的 LostFocus事件响应
代码:失去焦点时检查准考证号输入是否正确
? 编写 Txtname文本框 (“姓名, )的 LostFocus事件响应代
码:失去焦点时检查姓名是否输入
返回目录
8.3 试题答题及评分程序的设计
? 编写 Txtzwh文本框 (“座位号, )的 LostFocus事件响应代
码:失去焦点时检查座位号是否正确输入
? 编写 cmdml按钮 (“正确无误, )的 Click事件响应代码:检
查准考证号, 考生姓名和座位号是否按要求输入 。 如果
正确, 则:
? 向 UserDb表中添加一条用户记录 。 若该记录已存在, 则
给出相应的提示
? 显示 Frmxz(考生答题 )窗体, 卸载 Frmdl(考生登录 )窗体
返回目录
8.3 试题答题及评分程序的设计
2,考生答题窗体 FrmXz
(1) 添加窗体:
? 执行, 工程 → 添加窗体, 命令, 添加一个新窗体, 并
保存为 FrmXz.frm
? 在窗体上添加一个 SSTab控件:执行, 工程 → 部件, 命
令,, 控件, 选 Microsoft Tabbed Dialog Control 6.0
? 设置 SSTab控件:
?属性窗口中设置 Tabs为 2,设置 TabsPerRow为 2
返回目录
8.3 试题答题及评分程序的设计
?设置 SSTab控件:
?右击 SSTab控件, 选, 属性, 命令, 设置如下:
返回目录
8.3 试题答题及评分程序的设计
?设置 SSTab控件:
?, 单选题, 选项卡界面设置 (部分控件的属性见教材表 8.3):
返回目录
8.3 试题答题及评分程序的设计
?设置 SSTab控件:
?, 填空题, 选项卡界面设置 (部分控件的属性见教材表 8.4):
返回目录
8.3 试题答题及评分程序的设计
(2) 编写代码,
? 在, 通用, 声明段定义模块级变量及通用过程 xianshi
? 编写窗体的 Load事件响应代码
? 编写单击 Option1按钮 (选择答案 )的事件响应代码
? 编写滚动 Hscroll(选择题目 )的事件响应代码
? 编写单击滚动条上的 Optti按钮 (选题 )的事件响应代码
? 编写窗体的 Activate(激活 )事件响应代码
? 编写单击 Cmdjj按钮 (“交卷评分, )的事件响应代码
? 编写单击 Cmdjs按钮 (“结束, )的事件响应代码
返回目录
8.3 试题答题及评分程序的设计
3,考生答题未答完提示窗体 FrmTs
(1) 添加窗体:
? 执行, 工程 → 添加窗体, 命令,
添加一个新窗体, 并保存为
FrmTs.frm
? 设计窗体
(2) 编写代码,
? 编写窗体的 Load事件响应代码
? 编写单击命令按钮数组的事件
响应代码
返回目录
8.3 试题答题及评分程序的设计
4,阅卷评分窗体 FrmTj
(1) 添加窗体:
? 执行, 工程 → 添加窗体,
命令, 添加一个新窗体,
并保存为 FrmTj.frm
? 设计窗体
返回目录
8.3 试题答题及评分程序的设计
(2) 编写代码,
? 在, 通用, 声明段定义模块级变量
Dim senum As Integer '记录答对的选择题数
Dim finum As Integer '记录答对的填空题数
? 编写窗体的 Load事件响应代码:判别选择题和填空题
的答题是否正确, 并给出考生得分
? 编写单击 cmdml按钮 (“结束考试, )的事件响应代码,将
考生成绩记录在考生表中, 并释放记录集对象 。
返回目录
8.3 试题答题及评分程序的设计
5,添加模块文件 xt.bas
?,工程 → 添加模块,, 添加一个模块, 保存为 xt.bas
? 在模块代码窗口中定义全局变量及通用过程
返回目录
8.4 有待完善的问题与思考
? 在学生考试库中, 由于, se_ksda”(学生答案 )和
,se_da”(标准答案 )在同一个数据表中, 考生可以直
接打开 Access数据库得到标准答案 。 因而在实际应
用中, 必须避免发生这种情况 。
? 在, 自动选题, 程序代码中, 每一条记录被选中的
几率是相同的 。 而在实际应用中, 可以给每道题赋
予一个权值, 用于表示题目的难易程度, 从题库中
选择考题时可以选择不同难度的题目, 以增加选题
的多样性 。
返回目录