施茂祺 魏旻
摘要:傳票翻打是财经工作者必备的一项基本功,也是部分财经类专业的必备技能,并被列入全国高职会计技能比赛的正式项目。为更好组织日常教学及训练,该研究在分析专业教师和学生的实际需求的基础上,采用客户机/服务器模型,研发了传票翻打测试软件。经实证应用,效果良好,设计思路和采用的技术手段可行,具有一定的普遍性、适用性和较高的应用推广价值。
关键词:零配置分布式;传票翻打;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.
[通联编辑:张薇]