基于C/S结构票务信息系统的设计与实现
2013-10-10陈捷南昌航空大学现代教育中心南昌市330063
陈捷 南昌航空大学现代教育中心 南昌市 330063
0、引言
在传统的人工票务管理中,由于人工的因素,往往带来成本大、处理速度特慢不足,同时出错的几率比较大,效率是很低的。现在,在世界各国,长途客运票务管理使用的基本上都是员工操作计算机的模式,计算机主要是借助软件用来存储、更新数据的。严格的说,这并不是智能化,但是,这样的处理模式比已往的人工处理的好处显然还是很明显的,所有的数据都由数据库管理,可以随时动态的提取、存储数据,并可以将修改后的数据覆盖掉原有的数据。以计算机为工具,数据库为核心,用计算机技术和方法,综合应用管理工程技术,行为科学技术等现代化科学技术,建立一个管理信息平台,提高企业的工作效率,减轻劳动强度。最终为用户(乘客)提供更快捷周到的服务,提高客运站的服务质量,使企业在现有的人、财、物条件下,获得最佳的工作效率及社会、经济效益。
长途客运票务系统简单易用,菜单简洁,具有完善的操作,提示和初始化向导;查询灵活、全面,统计数据清晰,简明;有些还配图形化显示,一目了然。通过此票务系统,能够更好的协同好管理员、售票员和检票员三者之间的工作,方便了长途客运站的管理。
1、系统功能分析
本系统是基于C/S结构所开发的管理软件,实现了多个客户端共用一个拥有数据库的服务器,这样使得车票信息可以同步更新。系统可以选择三种不同的角色登录,如管理员、售票员和检票员。
系统中的售票查询模块可对日常售票情况进行统计分析,为管理员的生成车票和班次设置提供强有力的依据,管理员可以根据当前情况进行调整,从而节约社会资源,同时提高了企业的经济效益。系统中的检票查询模块可对班次的检票情况进行统计分析,方便了管理员进行发车调度。
1.1、登录
管理员、售票员和检票员共用一个登录界面,不同角色登录后进入各自不同的操作界面。
1.2、用户管理
选择不同的用户可以显示出不同的用户列表,并且可以添加、删除用户(售票员、管理员)。
1.3、票面设置
设置车票标题,可以通过复选框设置车票所要显示的基本信息的选项,设置完成后可保存该票样。
1.4、生成车票
管理员每天必须要生成第二天的车票,因为该系统发售两日内的车票;车票生成时可根据班次、路线或者全部来生成。
1.5、班次设置
管理员可根据实际情况来添加、删除和修改具体班次信息。
1.6、票价调整、
管理员可根据当前情况调整票价,可单线调整,也可调整所有。
1.7、售票管理
售票员根据乘客需求,选择班次或终点站和车票日期(只能是当天、第二天)联合查询所剩车票的详细列表,双击具体车票可将车票添加到购票单中,付款后即可购票,并能产生出实体车票。
1.8、退票管理
售票员输入退票的票号,选择退款比例,系统自行计算出退款金额。
管理员登录后,可以选择修改密码、人员管理、票面设置、生成车票、线路设置、班次设置、票价调整、退出系统等功能来进行具体操作;售票员登录后,可以选择修改密码、售票、退票、售票查询、退出系统等功能来进行具体操作;检票员登录后,可以选择修改密码、检票、检票查询、退出系统等功能来进行具体操作。系统流程图如图1所示:
图1 系统流程图
2、数据库设计
本系统数据库采用Microsoft公司设计的关系数据库SQL Server2000。长途客运票务系统中所使用到的数据表有:管理员信息表、售票员信息表、检票员信息表、班次信息表、线路信息表、车票信息表、售票信息表、检票信息表、退票信息表。
2.1、管理员信息表:该数据表用于存储管理员信息。包括管理员编号、管理员姓名、管理员密码、管理员状态、管理员最后登录时间等。
2.2、售票员信息表:该数据表用于存储售票员信息。包括售票员编号、售票员姓名、售票员密码、售票员状态、售票员最后登录时间等。
2.3、检票员信息表:该数据表用于存储检票员信息。包括检票员编号、检票员姓名、检票员密码、检票员状态、检票员最后登录时间等。
2.4、线路信息表:该数据表用于储存线路信息。包括线路名称、起点站、终点站、总里程、时长、原始票价、当前票价等。
2.5、班次信息表:该数据表用于存储班次信息。包括班次名称、线路名称、发车时间、检票口号、汽车类型、汽车牌照、座位总数、是否生成车票标识等。
2.6、车票信息表:该数据表用于储存车票信息。包括车票编号、班次名称、车票日期、发车时间、起点站、终点站、车票价格、座位号、检票口号、是否售出标识、是否检票表示等。
2.7、售票信息表:该数据表用于存储售票信息,包括售票编号、车票编号、售票时间、售票员编号等。
2.8、检票信息表:该数据表用于存储检票信息,包括检票编号、车票编号、检票时间、检票员编号等。
2.9、退票信息表:该数据表用于存储退票信息,包括退票编号、车票编号、退票时间、售票员编号等。
3、系统构架与设计
在系统的设计过程中,将系统设计分为服务器端和客户端,服务器端负责接收客户请求并完成对数据库的操作后将操作结果返回客户端;客户端负责发出请求并将接收到服务器的操作结果以图形化界面显示出来。客户端设计分成三大模块:管理员模块、售票员模块、检票员模块,各大模块完成各自所需功能。
客户端与服务器端通过套接字来进行连接,套接字连接示意图如图2所示:
图2 套接字连接示意图
3.1、建立数据库连接
编写一个类DBPool来实现数据库连接,这里采用连接池的方式来实现,用到该连接池须引入c3p0-0.9.0.4.jar包和jtds-1.2.2.jar包。实现代码如下:
public class DBPool{
private static DBPool dbPool;
private ComboPooledDataSource dataSource;
static{
dbPool = new DBPool();
}
public DBPool(){
try{
dataSource = new ComboPooledDataSource();
dataSource.setUser("sa"); //访问数据用户名
dataSource.setPassword("");//访问数据库密码
dataSource.setJdbcUrl("jdbc:jtds:sqlserver://localhost/Coach"); //数据库所在位置和数据库名字
dataSource.setDriverClass("net.sourceforge.jtds.jdbc.Driver"); //驱动器名称
dataSource.setInitialPoolSize(2);
//初始化连接数
dataSource.setMinPoolSize(1);
//最小连接数
dataSource.setMaxPoolSize(1000);
//最大连接数
dataSource.setMaxStatements(5000);
//连接到数据库最多SQL语句数
dataSource.setMaxIdleTime(60);
}catch(PropertyVetoException e){
throw new RuntimeException(e);
}
}
public final static DBPool getInstance(){
return dbPool;
}
public final synchronized
Connection getConnection(){
//关键字实现同步
try {
return dataSource.getConnection();
}catch(SQLException e){
throw new RuntimeException( "无法从数据源获取连接 ",e);
}
}
}
3.2、售票子模块
3.2.1、功能介绍
售票员登录后,通过本操作界面可以完成售票工作。售票员输入乘客所需班次名称或到站(终点站)名称查询出所有剩余车票,根据乘客所需票数将车票添加到售票单中,结帐后完成售票并打印出实体车票。界面如图3所示:
图3 售票界面
3.2.2、设计过程
a)可视化编程设计好售票界面,为各按钮添加ActionEvent监听事件,分别为两个JTable添加鼠标监听事件,这里事件监听分为单击事件和双击事件两种类型。为JSpinner添加监听。
b)两个“查询”按钮默认设置无效,只有选择日期后,通过监听该JSpinner对象得到所需购票日期后才可以进行剩余车票查询,得到剩余车票列表。选择车票日期用JSpinner来实现,通过创建SpinnerDateModel时的参数设置来限定日期只能选择当天和第二天,这样就限制了所售车票的日期。并为其添加监听事件,以便获得JSpinner中的时间对象,通过字符转换后截取相应字符串即可获得日期。
c)鼠标选中剩余车票列表中的某数据行后,通过鼠标双击事件监听就可以将该车票添加到售票单列表中,不能添加重复的车票,进行此不合法操作弹出对话框进行警告。限定一次性售票张数不能超过5张,当售票单中数据行已为5张时,双击剩余车票中的某数据行时,弹出对话框提示已到售票上限。根据售票单中的数据项,系统自动计算所有已购车票价格总和,并将其显示在应收金额的JTextField中。监听鼠标双击事件代码如下:
if(e.getClickCount() == 2) { //鼠标双击事件
String flag = "Added";
//设置标志位
mousePoint = e.getPoint(); //获得鼠标位置
currentRow = table.rowAtPoint(mousePoint);
//获得当期鼠标所在行
DefaultTableModel tableModel_1 =(DefaultTableModel)
table_1.getModel(); //创建售票单表格
Object[]obj_1 = new Object[3]; //创建对象数组,利用该对象创建售票单表格
.if(table_1.getRowCount()>4) {
//限定一次购票不超过5张
JOptionPane.showMessageDialog(this, "一次购票不能超过 5 张!","长途客运票务系统",
JOptionPane.WARNING_MESSAGE);
} else {
if(table_1.getRowCount() == 0) { //购票单中没有车票
tableModel_1.addRow(obj_1); //将车票添加到购票单中
} else {
button_3.setEnabled(true);
for(int =0;i flag = "Added"; //该车票已添加 break; } else { flag = "NoAdd"; //该车票未添加 } } if(flag.equals("Added")) { JOptionPane.showMessageDialog(this, "此票已添加到购票单中,不能重复购票!", "长途客运票务系统", JOptionPane.WARNING_MESSAGE); } else if(flag.equals("NoAdd")) { tableModel_1.addRow(obj_1); } //将车票添加到购票单中 } } textField_3.setText(""+titprice*table_1.getRowCount()); //计算出所购票的总价格 } 本文介绍了使用Java和SQL Sever2000设计一个票务管理系统的过程,系统实现了票务管理系统中售票管理、票据生成等重要功能,具有良好的用户界面。本系统可以应用于长途客运票务管理的领域。 [1]耿祥义等.Java2实用教程.北京:清华大学出版社,2006. [2]苏年乐等.Java+SQL Server项目开发实践.北京:中国铁道版社,2006. [3]王津涛等.Eclipse SWT/JFace开发实战精解.北京:人民邮电出版社,2007. [4]王珊等.数据库系统概论.北京:高等教育出版社,2006. [5]周绪等.SQL Server2000 中文版.北京:清华大学出版社,2002. [6]孙卫琴.Java网络编程精解.北京:电子工业出版社,2007. [7]林智扬等.深入浅出Java Swing 程序设计.北京:中国铁道出版社,2005. [8]石志国等.JSP应用教程.北京:清华大学出版社、北京交通大学出版社,2004.4、结束语