现多线程的操作,而要用 VB 实现多线程,是件比较繁琐困难的事情,而且调试经常使得 VB 崩溃。
因此可将此部分拆分另一个工程。
此工程是专门传输文件的工作。
通过主工程调用传参数(服务地址端口号要传输的文件名)。
因此解决了文件传输的 1 对多同步进行的问题2.9 如何实现加密算法?通过 VB 中的 XOR(位操作-异或)操作,明文对密钥的 AscII 码异或操作后得到密文。
如果密钥和明文相同异或后则二进制为 000….所以为了避免,则遇到相同的用 Chr128如明文“ABCD”密钥 “ZC”A ZB C 密文CD Xor三 主要模块说明3.1 考试平台3.1.1 ExamManageSystem.FrmMain 程序主窗口文件名:FrmMain.frm本块功能说明:是考试平台的主要界面。
窗口界面模块名:Init参数: 无功能:窗口初始化设计构思:考试平台运行时初始化通过查找 ExamBak.bak 文件来判断程序运行时是否要读取备份文件如果则说明考生有异常退出发生已经登录过则 UserLogin True 在读取备份文件模块名: LockPC参数: locked As Boolean功能:锁定系统桌面设计构思:通 过 访 问 API 函 数 FindWindow 找 到 任 务 栏 上 的 开 始 按 钮 任 务 拦 等 句 柄 并 同 过ShowWindow 来隐藏显示窗口. 通过 SystemParametersInfo 禁用 CTRLALTDel ALTF4等系统键模块名: BakStudentInfo参数: 无功能:备份学生信息设计构思:通过 WinAPI 函数 WritePrivateProfileString 将学生信息以 INI 文件格式写入 ExamBak.bak 文件中.模块名: ResumeStudentInfo参数: 无功能:还原学生信息设计构思:通过 WinAPI 函数 GetPrivateProfileString 将学生信息以 INI 文件格式从 ExamBak.bak 文件中读取出来给系统变量模块名: Winsock1_DataArrivalWinsock 事件参数: ByVal bytesTotal As Long系统给定功能:获得服务器传送来的信息设计构思:服务器发送过来的信息是以 命令内容 发送过来此模块先读取命令部分 在依据是先约定好的命令决定做哪步操作命令详解如下: 命令名 含义 StudenEr 考生验证失败 StudenOk 考生验证成功 GetExamI 获得考试信息 由模块 GetExamInfo 获得内容 SendMsgs 提示信息 EXOverOK 考试正常结束服务器已将成绩保存 EXOverEr 考试结束异常服务器未将成绩保存 CheatMsg 作弊处理模块名: Winsock1_ Error Winsock 事件参数: ByVal Number As Integer Description As String ByVal Scode As Long ByVal Source AsString ByVal HelpFile As String ByVal HelpContext As Long CancelDisplay As Boolean系统给定功能:捕捉与服务器连接的错误设计构思:此事件的得到出发是从 FrmLogon登录窗口中输入 IP 地址及准考证后连接服务器。
TryHost是 FrmMain 中的全局变量是连接服务器次数的关键字.只要未连接到服务器并 TryHost 未满6 次则不停的连接服务器3.1.2 ExamManageSystem.FrmLogin 考试登录文件名:FrmLogin.frm本块功能说明:对考生进行验证。
如果已经进入考试状态服务器监考老师可公布服务器的 IP 地址给考生考生输入服务器地址和准考证号进行登录考试。
窗口界面模块名: CmdLogin_Click CommandButton 事件参数: 无功能:登录服务器设计构思:通过主窗口的 WINSOCK 控件连接服务器,如果未连接到服务器则尝试连接 7 次3.1.3 ExamManageSystem.FrmDownLoad 下载考题窗口文件名:FrmDownLoad.frm本块功能说明:本块主要功能是从服务器端下载题库。
通过向服务器发送题库下载请求,进行第一次握手。
服务器做出应答后,获得服务器开通端口连接到服务器并进行文件传输。
窗口界面模块名: Init参数: 无功能:初始化窗口设计构思:通过查找 Exambak.bak 来 和比较 Exambak.bak 大小来判断是否已经下载过考题库,如果未下载则向服务器发送下载文件请求, 服务器获得请求并分配端口,即发送下载考题库文件请求到服务器;否则则跳过。
模块名: WskFileComm_DataArrival Winsock 事件参数: 无功能:获得服务器发来的文件流并写入文件设计构思:服 务器 发送文 件流 (文件 内容 )来时 触发该 事件 ,由 于通讯 非连续 性的 所以 要通过CurrentFileLen 全局变量来记录文件写入的当前位置, 以便下次数据流来时从 CurrentFileLen位置开始写入知道 CurrentFileLengt DownFileLenCount文件总大小改值在考生登录时已经获得。
3.1.4 ExamManageSystem.FrmBulid 随机生成考题窗口文件名:FrmBulid.frm本块功能说明:考试题目初始化,根据有无备份文件来判断,是随机生成题目还是还原从备份文件中还原题目信息 没有备份文件时 有备份文件时模块名: RndSubject参数: 无功能:随机出题设计构思:通 过 已 经 分 配 好 大 小 的 数 组 FillSubject ( ) 填 空 题 SingleChoiceSubject ( ) 单 选 题MultiChoiceSubject()多选题 OperationSubject()操作题 分别从题库中找取相应的表单随机抽取表单中的记录的位置分别放入数组中形成索引。
模块名: ResumeSubject参数: 无功能:还原题目设计构思:通 过 已 经 分 配 好 大 小 的 数 组 FillSubject ( ) 填 空 题 SingleChoiceSubject ( ) 单 选 题MultiChoiceSubject()多选题 OperationSubject()操作题 分别从备份文件中提取出来放入数组中形成索引。
3.1.5 ExamManageSystem.FrmFillTest 填空题文件名:FrmLogin.frm本块功能说明:是考生做答填空的窗口。
模块名: CheckSubject参数: cMemo As String Sign As String功能:将数据库里的数据转换为考题样式设计构思:如:题目 VB 中什么函数是__1__提取字符的? __1__为填空 而存入数据库中则是 VB 中什么函数是☆取字符的? (☆是填空的标记可以是自己设定的)此函数就是将数据库中的转换成现实中看的懂的题目,并且记录填空的个数到变量 ResultNum。
模块名: ViewFillResult参数: 无功能:为填空题的空位分配答题的文本框设计构思:根据题目的填空数量来分配给考生答题文本框(此功能类似许多考试中的与答题纸)题目与答案分开。
方便对考生的答题内容进行记录。
3.1.6 ExamManageSystem. FrmSelectTest 单选题文件名:FrmSelectTest.frm本块功能说明:是考生做答单选题的窗口。
并即时记录考生当前所做的答案(考生做一题则记录一题的答案) 窗口界面这快主要介绍主要构思(详细请参照原代码)窗口在加载时通过对 SingleChoiceSubject(已经在生成题目时候已经初始化过)中记录号对数据库进行访问,取出每题的当前选择答案和正确答案本被到 SingleSelectQuestion和 SingleRightQuestion中,以便对考生答题的状态进行记录,也方便总分的计算。
题目的切换是通过 SingleChoiceSubject数组来进行切换,SingleChoiceSubject 是记录题库中记录号的索引,用全局变量 CurrentT(是记录当前题目的索引)初始值为0 则 代 表 第 一 条 记 录 。
切 换 题 目 其 实 就 是 对 CurrentT 进 行 加 减 操 作 。
之 后 通 过 数 据 库 移 动 到SingleChoiceSubjectCurrentT中存储的记录号,在显示在窗口中。
考生对当前题目做答也是按照同上的方法记录到数据库中和储存选择题目的变量 SingleSelectQuestion 中3.1.7 ExamManageSystem. FrmMultiSelectTest 多选题文件名:FrmMultiSelectTest.frm本块功能说明:是考生做答多选题的窗口。
并即时记录考生当前所做的答案(考生做一题则记录一题的答案) 窗口界面这快主要介绍主要构思(详细请参照原代码)窗口在加载时通过对 MultiChoiceSubject(已经在生成题目时候已经初始化过)中记录号对数据库进行访问,取出每
上一篇:
网上购物系统
下一篇:
恋沫