零配置分布式传票翻打测试系统研究

2018-03-04 07:03施茂祺魏旻
电脑知识与技术 2018年36期

施茂祺 魏旻

摘要:傳票翻打是财经工作者必备的一项基本功,也是部分财经类专业的必备技能,并被列入全国高职会计技能比赛的正式项目。为更好组织日常教学及训练,该研究在分析专业教师和学生的实际需求的基础上,采用客户机/服务器模型,研发了传票翻打测试软件。经实证应用,效果良好,设计思路和采用的技术手段可行,具有一定的普遍性、适用性和较高的应用推广价值。

关键词:零配置分布式;传票翻打;Client/Server

中图分类号:TP3      文献标识码:A      文章编号:1009-3044(2018)36-0058-02

1 问题的提出

传票翻打,或称传票算,是指在经济核算过程中,对各类单据、发票或凭证进行汇总计算的一种方法。一般使用加减计算,它是加减运算在实际工作中的具体应用,可以为会计核算、财会分析、统计报表提供及时、准确、可靠的基础数字,是财经工作者必备的一项基本功,并被列入全国高职会计技能比赛的正式项目。

传票本分为两种:

第一种是订本式传票,是在传票的左上角装订成册,一般在比赛中使用。

第二种活页式,全国会计技能大赛采用。

笔者所在学院为财经类院校,传票翻打是学院许多专业学生的必备技能,因此,亟需一款供日常教学及训练用传票翻打测试软件。经与相关专业教师共同探讨和分析,确定自己研发的传票翻打测试系统必须具备的以下功能和特点:

1) 系统分为教师端和学生端两部分;

2) 学生端供学生练习与测试,接受学生输入的传票上的数据并实时汇总,考虑到学生练习时要求手、脑、眼并用,故学生端应能提供学生一些提示信息,譬如翻打进度、速度、正确率等等;

3) 教师端是控制端,教师可在教师端批量导入、导出学生名单、试题,也可现场编撰题目并布置测试题,统一设置测试时间,实时监控每一名学生的测试情况,收集并导出学生考试成绩;

4) 性能要求,参考本院实际班级人数以及合班上课的需求,要求系统至少能够同时支持150人左右同时进行测试。

2 系统实现的关键重点、难点说明

根据上面系统需求分析, 笔者确定该系统的实现软件为客户机/服务器模型,又称为Client/Server体系结构。服务器Server通常采用高性能的工作站或PC小型机,并采用Client/Server架构数据库系统,如Sybase  Oracle或SQL  Server,负责供多个用户共享其信息和功能。客户端Client部分通常负责执行前台功能,如与用户交互,数据处理等。这种架构由多台计算机构成,它们有机地组合在一起,协同完成整个应用,并达到使系统中的软件、硬件资源得到最大限度的利用。

本系统服务器端即为教师端,而客户端即为学生端。但是一般Client/Server结构系统在应用前都需要进行系统部署、设置和调试工作,很多情况下,Client/Server架构数据库也需要进行一系列参数设置和环境设置,譬如连接时数据库就至少需要配置连接字符串。由于网络环境不同,连接字符串并非固定不变的,因此往往专业人员上门进行部署和测试。

考虑到本系统用户为会计类专业教师,让他们去安装和部署Client/Server架构数据库存在诸多的困难,因此,本系统在总体架构为Client/Server模型的基础上,后台数据库却选择了桌面模型数据库Access。之所以选择Access,是因为微软公司已经将其数据库引擎Jet内置到Windows操作系统之中,完全免安装。但是桌面型数据库应用于网络环境,相比Client/Server架构的数据库,如SQL  Server,由于整个数据库都需要传输到客户端进行处理,造成网络带宽的巨大浪费,使得性能低下,支持客户端的数量有限。为此,笔者考虑研究实现一个分布式框架,该分布式框架可将桌面架构数据库虚拟为Client/Server架构数据库,并可实现零配置,其具备以下特点:

1) 该框架适用于小型分布式程序。

2) 原生框架,不依赖当前流行的Java、.Net虚拟机运行时环境,这样才能保证无需任何配置,拷贝到电脑上即可使用。

3) 将桌面型或嵌入式数据库转换为Client/Server架构数据库,服务器端无需安装数据库服务器,如SQL  Server,客户端无需单独安装数据库驱动,并且做到网络线路上只有请求流和结果流,能更有效地利用网络带宽,从而达到高性能。

4) 程序员使用本框架开发软件简单易用,如同开发桌面型数据库一样简单。

3 实现思路

3.1 整体结构

如图1所示,Client通过自定义协议向Server发送请求,Server监测Client连接请求,为每一个Client连接请求生成一个服务线程,考虑到每一个连接都需要一定的系统开销,所以Server自己维护连接归入池中。因此,线程池负责分配管理和释放Client连接,允许系统重复使用一个现有连接,而不是重新建立一个。

该线程是衍生的会话线程,其内封装了客户端IP、端口号、Client发送的数据包等大量信息。同样,为提高性能,系统在启动时一次性生成一定数量的数据访问对象(ADO),并放入对象池中。当程序需要一个新的对象时,如果对象池中有空闲对象,则立即返回,否则才创建新的该类对象。当一个对象不再被使用时,应该将其放回对象池,以便程序后来使用。并提供了一组方法用于与客户端通信,其原型形如:

class  CClientThread:CThread

private:

bool  FTS;

void*FChunkbuf;

bool  Fiskeepalive;

char*Fpeekbuffev;

string GlobalPeerIpAddress;

int  GlobalPeerPort;

public:

bool  Connect();

bool  Listen();

int  Sendbuf(const  void*buf,int  count);

int  Write(char  c);

int  Write(const  string  s);

int  Write(void *buf,int  len);

int  Read(void *buf,int  len);

int  ReadInt()

bool  SaveTo(CStream* stream,unsigned  timeout);

bool  SaveTo(File  handle, unsigned  timeout);

3.2 网络协议的设计

Client/Server是一种请求-响应模型,在一次完整的通信过程中,Client与Server之间将完成以下步骤:

1) 建立TCP连接,通过socket建立Client与Server之间的TCP连接。

2) Client向Server端发送命令,与http协议类似,命令存放在协议报文头信息中。

3) Client发送协议报文信息。Client在发送请求命令之后,还要以协议报文的形式向服务器发送请求的具体参数。

4) Server应答,Server会向Client返回响应,主要是响应状态码。

5) Server返回协议报文,发送Client所请求的实际数据。

本系统设计了如下,一些整数作为协议头信息:

1) CTSLOGIN=1;成功登陆标记;

2) CRESPOK=1;返回状态码,‘1表示响应成功;

3) CRESPFAULT=2;返回状态码,‘2表示响应失败;

4) CRESULTOK=0;返回结果正确;

5) CRESULTNO=0;返回结果错误;

6) DISONN=0;断开连接;

7) EXESQL=1;执行SQL结句;

8) OPENSQL=2;打开SQL结句;

9) LINKTEST=2;连接测试;

10) ACTIVEPACK=4;激活包。

3.3 系统的运作流程

如图2所示,Server和Client内部存在一个工作循环,Server是一个监听循环,在循环内Server通过读取客户端请求协议头信息得知请求意图,这将触发Server做出不同的响应动作,其逻辑通过伪码说明如下:

switch(IHead) {  //对协议头信息进行判断

case  EXESQL:  // //执行一条SQL语句 更新或者执行

Llen = ClientThread→Socket→ReadInteger;

LSQl = ClientThread→Socket→ReadStr(Llen);

ADOQuery→SQL.Clear;

ADOQuery→SQL→Add(LSQl);

ADOQuery→Execute;

break;

case  OPENSQL:  //执行一个查询语句

Llen = ClientThread→Socket→ReadInteger;

LSQl = ClientThread→Socket→ReadStr(Llen);

ADOQuery→SQL.Clear;

ADOQuery→SQL→Add(LSQl);

ADOQuery→Open();

break;

}

3.4 结果集的返回

Client/Server架构的数据库,可根据Client查询请求返回相应的结果集,避免了在网络上传播无效数据,有效地利用了网络带宽,提高了系统性能。本系统采用了流处理机制(Stream)对数据集对象(ADO)序列化和反序列化,利用AdoDataSet数据集SaveToFile方法将数据集保存到文件中,再通过内存流(MemoryStream)缓存在内存中,使用 ZIP压缩算法在压缩内存流中的数据后返回给Client,Client收到响应数据后进行反序列化即可还原出该数据集对象(ADO)。由于网络上传输的数据是经过压缩的,进一步提高了系统性能。

4 结束语

本系统开发完成后,一直应用于江西财经职业学院会计及相关专业教学之中,并选作了近几年江西省大学生会计技能竞赛软件,效果良好,证明其设计思路和采用的技术手段是可行的,具有一定的普遍性和适用性以及较高的推广价值。

参考文献:

[1] 刘向东.基于Client/Server结构的数据库系统设计[J].电脑知识与技术,2018,14(11):8-10.

[2] 孟繁荣.中职传票翻打技能比赛有效训练的实践及研究[J].科教导刊:中旬刊,2016(04):42-43.

[3] 狄庆贵.基于Client/Server技術的质量信息管理系统[J].中国管理信息化,2017,20(10):50-51.

[通联编辑:张薇]