随着计算机局域网和广域网的出现,网络产品(包括软、硬件)质量不断提高;品种、数量迅速增长和发展;以及数据库技术的成熟和软件工程方法的发展,各种计算机网络管理系统越来越完善。旅游景点微机售票系统是计算机技术与网络技术相结合的产物。方便快捷的查询统计使管理者能准确地掌握景点的经营情况并对售票人员进行监督、管理,并为其提供准确、可信的决策依据。其成功实现提高了旅游景点的售票效率和管理水平,使一直由人工售票的局面划上句号,从而进入智能化售票的新阶段。
本文介绍以Delphi为开发语言,Microsoft SQL Server 6.5为后台,运行于Windows NT 4.0的旅游景点微机售票系统的开发方法。该系统适合各大、中、小旅游景点售票系统的自动化管理,具有较强的实际推广应用价值。
二、系统总体方案设计
微机售票系统采用星形拓扑局域网结构,由服务器、集线器、计算机、打印机组成,见图1。服务器上运行数据库及系统管理程序,实现查询、统计、报表打印、系统维护等功能。各售票微机与相应的打印机放置在售票窗口,运行售票程序,完成界面输入、门票打印及售票员个人信息查询统计等功能。
对于售票系统来说,打印机的速度和数据通过网络的传输速度是非常关键的指标。如秦皇岛野生动物园在其高峰期,每天有大约2万人入园游览,要求使用三台微机进行售票,而入园客人大都集中在同一段时间,如早晨刚开园到上午10点左右,下午2点~3点之间等,所以减少游客排队等候时间、加快售票速度就是微机售票系统必须解决的问题。影响售票速度有两方面因素,一是硬件打印机的打印速度,二是打印程序启动打印和传输数据的速度。经实际测试,EPSON stylus color 850彩色喷墨打印机,其打印速度为A4纸8页/分钟,能够满足要求。
在程序方面为了满足打印速度的要求,经过测试和精心选择,确定用Delphi做为程序设计语言。Delphi把强大的对象Pascal语言和快捷便利的RAD相结合,是一个通用的图形用户界面(GUI)开发工具,它是基于可视化和组件的概念而设计出来的,而且能非常方便地操纵数据库及实现各种报表,使得编程迅速,且是目前调试编译速度最快的编程语言之一。在门票打印时直接调用Delphi的类Printers中的各种过程和函数,如Printers.Canvas.Textout(x:integer;y:integer;const Text:string)再结合其他的过程和函数即可实现快速打印,解决了程序打印速度的问题。
系统选择SQL Sever做为数据库,SQL Sever是一个客户机/服务器关系型数据管理系统(RDBMS),使用Transact-SQl在客户机和SQL Sever之间发送请求,能够满足系统的网络传输要求。Delphi中可以通过BDE(数据库引擎)和ODBC进行数据库访问,或者通过ADO直接进行数据库访问。
另外在总的程序设计时,考虑到使用本系统的操作员素质参差不齐,计算机操作水平相对较低,所涉及的操作要尽可能简单,尽量少输入信息,尽量使用下拉框和选择框,避免出错。本系统操作员要输入的只有游客人数(成人和小孩或学生)和车辆数。其他信息如票价,程序启动时从数据库中自动调出,时间取自系统时间,总价由计算机自动生成,界面简单、操作容易、易学易用。 三、系统软件总体设计
1.数据库表设计
系统数据库中共有零售票信息表、密码表、操作员信息表、票价信息表,以及为统计查询建造的视图等。以零售票信息表为例介绍表的结构。其字段定义如表1所示。
序列号:由售票员的标识符号,随机号和微机售票开始的票数记录组成。如GK006662,代表标识号为G的售票员,随机号为K,第6662张票。
退票否:此字段用来标识票是否有效,若有效,则为1,无效为0。
2.软件结构设计
系统软件设计遵循模块化程序设计的思想,自顶向下,步步求精。系统程序由系统管理模块和售票模块组成。售票模块运行在售票微机上,系统管理模块运行在服务器上。
四、系统主要功能特性及实现方法
系统主要模块:登录及密码输入模块;系统主界面输入模块;统计、查询、报表、打印模块;门票打印模块。下面分述各模块的功能以及关键部分的实现。
1.登录及密码输入模块
登录及密码输入模块用于限制操作员的权限,程序完成的功能:从界面上取出密码,查询数据库密码表,有相同密码操作员有权进入下一界面,三次输入失败,程序自动退出。另外在售票模块中,根据密码要取出对应的操作员的名字,以便将售票信息与操作员相关联。从数据库中根据输入密码取相应的操作员函数如下,其中handletbl为密码表名称,id、handlename、handlecode为表中字段,代表编号、操作员姓名、操作员密码。
function TFormPswd.gethandlename(code:String):String;
var name:String;
begin
name:='';
Query2.Close;
Query2.SQL.Clear;
Query2.DisableControls;
Query2.SQL.Add('Select id,handlename,handlecode from handletbl');
Query2.Open;
if Query2.locate('handlecode',code,[]) then
begin
name:=query2.FieldByName('handlename').AsString;
end;
Query2.close;
Result:=name;
end;
2.系统主界面输入模块
系统的主界面输入模块用于输入和显示售票信息,根据其信息和票价自动计算出游客的总人数以及票价。在此模块中要求操作员只输入游客人数,按“确定”,即可自动计算和显示总价,按“打印”则打印门票。为了防止操作员误输入除整型数据以外的其他字符如A、B等而导致程序出错,程序中在需要数据输入的Tedit位置,设置判断条件,只允许整型数据输入。
3.统计与查询、报表打印模块
统计与查询、报表打印模块用于实现售票信息的统计与查询,可以设定起止日期等信息,并可生成报表打印。统计与查询用内嵌的SQL查询语言实现,报表使用Delphi的快速报表组件Qreport部件组中的各种控件。
4.门票打印模块
门票打印模块实现门票的打印输出功能。在门票打印中需根据门票的样式确定输出的位置,为了实现快速打印,在打印时直接调用printers的过程和函数。
打印的过程如下:
procedure printmsg(thesyqo,Totalpeople,adultNum, childNum,Totalcar,bigcar,middlecar,minicar,totalmoney, prtdate:String);
begin
Printer.Canvas.Font.Charset := GB2312_CHARSET;
Printer.BeginDoc;
Printer.PageHeight;
Printer.PageWidth;
Printer.Canvas.Font.Size :=14;//字体设置
……//根据用户需要插入要打印的内容
Printer.Canvas.TextOut(x+2370,y,thesyqo);//打印内容
Printer.EndDoc;
end;
5.退票管理模块
实际的售票过程中涉及到由于各种原因游客退票的情况,而计算机打印售出的门票及相关信息已经存入数据库中,当有退票情况发生时,必然存在操作员售票金额与数据库查询结果不一致的现象,为了解决这一现象,增加了退票管理模块。