WEB开发网
开发学院软件开发VC C/S考试系统程序制作详解 阅读

C/S考试系统程序制作详解

 2010-05-27 20:37:07 来源:WEB开发网   
核心提示:三、数据库的操作实现这部分功能主要是通过WinSocket32 API和ODBC API结合使用来实现的,服务端进入监听状态后,为每个客户端提供相应线程处理发过来的指令,通过分析指令,作出以下相应的操作:客户端发送的指令(自定义的):login: 登陆校验 参数:用户名,科目,密码Srecv:ScanTm: 检查服务器

三、数据库的操作实现

这部分功能主要是通过WinSocket32 API和ODBC API结合使用来实现的,服务端进入监听状态后,为每个客户端提供相应线程处理发过来的指令,通过分析指令,作出以下相应的操作:

客户端发送的指令(自定义的):login: 登陆校验 参数:用户名,科目,密码
   Srecv:ScanTm: 检查服务器时间校对试卷修改试卷状态,抛出计数值
   Srecv:GetSta: 获取试卷状态
   Srecv:GetRlt: 获取上次做答
   Srecv:GetNum: 获得试卷相关信息(总题数,开考时间,结束时间)
   Srecv:GetQue: 获取试卷题目内容.
   Srecv:SaveDt: 保存试卷
   Srecv:ChanST: 修改试卷状态.

四、服务器程序总结

数据库被单独存放在一个服务器中可以保证数据安全性,程序会将客户端的一切操作显示在窗口中,用户可以通过观察窗口,知道所有客户端的动作。这个程序采用“完成端口”模型,可以满足大规模的考试需求。

客户端程序详解

一、窗口完全采用Win32API函数生成

主要包含一下标准控件:static控件
   Edit控件
   Button控件
   Scroll控件
   窗口元素全部采用计算后的相对坐标定位,所以800X600和1024X768下均能正常显示,   
二、试卷的初始化

考虑到每张试卷的题目数量都不同,为了节约内存空间,所以我在堆中动态生成了一个试卷结构体,通过向服务器程序发送GetNum:指令来获得试卷总题数QuestionNum,然后使用TestPaper=new TestRubric [QuestionNum]/*结构体定义*/
//试卷每道题的结构
struct Questions{
  BOOL state;
  char Text [512];
};
struct SelectObject{
  BOOL state;
  char Text[256];
};
struct TestRubric{
 struct Questions Tile;
 struct SelectObject choose [4];
};
由于TextOut函数不支持自动换行,所以换行操作必须由我自己完成.因此我用同样的方法在堆中创建了一个Screen用作屏幕显示的结构体

Screen=new Lines[LINES]
struct Lines{
  int earmark; //用来存储Button的ID
  BOOL color1;//置颜色标志
  BOOL color2;//置颜色标志
  char Line [512];
};
LINES=扫描TestPaper中超过屏幕宽度的行数+ QuestionNum*5+QuestionNum*3

屏幕宽度=客户区的宽/每个文字的宽度/2*2

屏幕高度=客户区的高/每个文字的高度

为每一体产生4个互斥的按钮

按钮总数= QuestionNum*4

在堆中生成hWndList数组保存按钮handle

hWndList=new hWnd [QuestionNum*4]

按钮ID=题号*10+选项号

Screen.earmark=按钮ID

Tags:考试 程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接