目录
一、毕设目的 3
二、毕设内容 3
- 分析、阅读鼎利集团提供的“机票在线销售系统”源代码 3
1.1 com.booking.constants与com.booking.util包 3
1.1.1 com.booking.constants包 3
1.1.2 com.booking.util包 4
1.2基于面向对象现封装的对属性和对方法分别封装的类 4
1.2.1 Flight类(属性) 4
1.2.2 Seat类(属性) 4
1.2.3 Ticket类(属性) 4
1.2.4 BookingService接口以及其实现类BookingServiceImpl(方法) 5
1.3基本组件与基础Frame类,封装通用界面设置及拖拽事件 5
1.4在线订票系统主控制器以及其控制的各界面 5
1.4.1 主控制器 5
1.4.2 MainView 6
1.4.3 BookingView 6
1.4.4 RefundOrAlterView 6
1.4.5 CheckinView 6
1.4.6 类图的简单框架 7 - 修改源系统中存在的缺陷(Bug)。 8
2.1 购票时机票出发日期问题 8
2.1.1 源代码的修改 8
2.1.2 测试结果 8
2.2 选完座位机票上却没有座位信息问题 11
2.2.1 源代码的修改 11
2.2.2 测试结果 12 - 在原系统的基础上扩充功能 12
3.1 增加购票功能 12
3.1.1 源代码 12
3.1.2 测试结果 25 - 选作内容 28
4.1增加查看所有航班功能 28
4.1.1 源代码 28
4.1.2 测试结果 34
4.2 添设管理员权限 34
4.2.1 源代码 34
4.2.2 测试结果 37
4.3 选完座位机票增加座位信息 39
4.3.1 源代码的修改 39
4.3.1 测试结果 40
三、毕设总结 40
二、毕设内容
必做内容:
1.分析、阅读鼎利集团提供的“机票在线销售系统”源代码
提示:写出系统的分层结构、每个类中各个方法的功能(要详细,不能照抄鼎利提供的文档)。
2.修改源系统中存在的缺陷(Bug)。
提示:先指出在哪个类、哪个方法中存在什么样的bug,这个bug有什么危害。
然后给出修改后的代码(只需给出一个方法的代码,并注明修改的位置。 - 在原系统的基础上扩充功能
增加添加航班信息的窗口,将新的航班信息追加到flight.data文件的尾部。
要求:给出源代码和测试结果
选作内容:
根据自己的能力做适当的扩充。
要求: 1:说明扩充的功能
2:给出源代码和测试结果
1.分析、阅读鼎利集团提供的“机票在线销售系统”源代码
1.1com.booking.constants与com.booking.util包
1.1.1com.booking.constants包
用于存放各种标实常量便于查看和更改常量。
1.1.2com.booking.util包
存放程序要使用的各种外部工具,可借助外部工具使程序更快捷的编写出来。
其中包括日历类:CalendarPanel、购票信息数据操作工具类:DataOperateUtil、时间格式化工具类:DateFormatUtil、订单编码工具类:OrderUtil、 数据验证工具类:ValidateDataUtil、设置界面背景工具类:ViewBackgroundUtil
1.2基于面向对象现封装的对属性和对方法分别封装的类
1.2.1 Flight类(属性)
本类将预定机票的属性进行了封装,里面拥有预定机票的各种属性,分别包括航班号、始发地、目的地、起飞时间时间、到达时间、航空公司、机型以及票价。如以下代码对类的属性进行了是申明。
private String flightNo;
private String startAddress;
private String endAddress;
private String startTime;
private String arrivedTime;
private String airLineName;
private String planeType;
private String price;
由于属性都是private修饰的属性,所以要想对类的属性进行更改也必然少不了各自对应的get、set方法。
1.2.2Seat类(属性)
本类将座位的属性进行了封装,里面拥有座位的各种属性,分别包括状态、座位号。如以下代码对类的属性进行了是申明。
private String status;
private String seatNo;
由于属性都是private修饰的属性,所以要想对类的属性进行更改也必然少不了各自对应的get、set方法。
1.2.3Ticket类(属性)
本类将机票的属性进行了封装,里面拥有已购机票的各种属性,分别包括始发地、目的地、出行时间、付款方式、订单编号、身份证以及姓名。如以下代码对类的属性进行了是申明。
private String startAddress;
private String endAddress;
private String travelDate;
private int payWay;
private String orderNo;
private String identityNo;
private String userName;
由于属性都是private修饰的属性,所以要想对类的属性进行更改也必然少不了各自对应的get、set方法。
1.2.4BookingService接口以及其实现类BookingServiceImpl(方法)
接口也就是为了实现类的设计,并将在线服务的方法进行了封装。其中包括的方法有,创建购票信息、获取购票信息、根据始发地和目的地获取航班信息、根据订单获取订单信息、存储座位信息和订单信息、修改出行时间以及退票删除订单编码。这时也要注意各个方法各自对应的参数。
public Map<String,Object> createBookingInfo(Ticket ticket);
public Map<String,Object> readData(String orderNoOrIdentityNo);
public Map<String,Object> readFlightData(String startAddress, String endAddress);
public Map<String,Object> readSeatData(String order);
public Map<String,Object> createSeatInfo(Seat seat,List orderList);
public Map<String,Object> updateTravelDateInfo(String orderNo,String travelDate);
public Map<String,Object> deleteOrderInfo(String orderNo);
BookingServiceImpl类则专用于实现对应的每个方法,以便后期使用。他的具体实现为:
以创建购票信息方法为例,他是首先获取当前时间的毫秒值作为账单号orderNo。再分别创建一个结果和一个数据集,当验证身份证号不合法就返回错误提示,若正确则进行下一步验证姓名是否合法,当姓名不合法就返回错误提示,都合法就可将订单编号写入对象ticket.在这都完成之后再进行读取磁盘中的文件,若文件为空则将机票集写入到结果集中,并将其加入到结果集中,如若文件不为空就将机票加入到文件链中,并将其加入到结果集中。最后返回机票结果集。其他方法以此类推。
1.3基本组件与基础Frame类,封装通用界面设置及拖拽事件
两个自定义按钮CustomButton与CustomButton2用于对图形界面进行设计时使用。
BaseFrame用于基础Frame类,封装通用界面设置及拖拽事件,相当于对界面的初始化,初始化包括界面边框大小,位置、布局的初始化和对拖拽事件的处理。
也就是说以后的每一个界面的父类都是继承BaseFrame类的,并且很有可能会用到自定义按钮。
1.4在线订票系统主控制器以及其控制的各界面
1.4.1 主控制器
主控制器首先在构造方法中将主界面(MainView)显示出来,并且对主界面的四个按钮进行监听,在加上子界面的另外“BacktoPaView”,”toMainView”,”homepage”几个按钮进行监听,虽然另有其他有几个按钮,但实际上并没有使用,所以可将其注释掉。所以在这个地方主控制器起到了主控制的作用,控制各界面的开关。
1.4.2 MainView
最开始执行打开的界面,共有四个按钮添加到界面上。
1.4.3 BookingView
在监听下按”bokingBtn”随即打开BokingView,随后将主控制器生成对象(监听)传参给BokingView,BokingView可见。
BokingView界面首先是有始发地,本文转载自http://www.biyezuopin.vip/onews.asp?id=15224目的地,姓名,身份证号等机票信息标签及文本框的初始化和按钮的初始化与监听。
若点击选择航班,便打开FlightListView界面,并将对应始发地,目的地等其他参数传入(public FlightListView(JFrame frame, boolean modal, String title, JTextField flightNo, Ticket ticket)),其中最重要的功能是运用了BookingService类中的readFlightData(ticket.getStartAddress(),ticket.getEndAddress())方法根据始发地和目的地将航班信息读取到表格中。完成信息填写后用户点击确认按钮就会打开PayView界面进行选择支付。
1.4.4 RefundOrAlterView
在监听下按” alterBtn”随即打开RefundOrAlterView,随后将主控制器生成对象(监听)传参给RefundOrAlterView,RefundOrAlterView可见。
RefundOrAlterView界面首先是订单号或身份证号标签及文本框的初始化和按钮的初始化与监听。
在用户输入合法信息后点击确认按钮就会打开AlterOrderView界面,并将监听对象以及账单号或者身份证号参数传入(public AlterOrderView(ActionListener actionListener,String orderNoOrIdentityNo))其中最重要的功能是运用BookingService类中的Map<String,Object>resultMap = bookingService.deleteOrderInfo(AlterOrderView.this.orderNo);方法根据始订单号或身份证号将机票退掉或者BookingService类中的Map<String,Object> resultMap = bookingService.updateTravelDateInfo(AlterOrderView.this.orderNo, inputContent);方法根据始订单号和输入日期将机票改签。
1.4.5 CheckinView
在监听下按” checkinBtn”随即打开CheckinView,随后将主控制器生成对象(监听)传参给CheckinView,CheckinView可见。
CheckinView界面首先是订单号或身份证号标签及文本框的初始化和按钮的初始化与监听。
在用户输入合法信息后点击确认按钮就会打开OrderView界面,并将监听对象以及账单号或者身份证号参数传入(public OrderView(ActionListener actionListener,String orderNoOrIdentityNo))其中最重要的功能是运用BookingService类中的方法Map<String, Object> resultMap = bookingService.readData(orderNoOrIdentityNo); 将符合信息的航班读取到链表中。用户选取所想要值机的航班点击确认按钮后就会打开SeatView界面进行选座。
package com.booking.view;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JRootPane;
import javax.swing.Timer;
import com.booking.util.ViewBackgroundUtil;
/**
* @ClassName: MainView
* @Description: 在线购票系统主窗口
* @author 姜向阳
* @date 2018年7月3日
* @since JDK 1.8
*/
public class MainView extends BaseFrame {
/**
* @Fields serialVersionUID
*/
private static final long serialVersionUID = 8142213655847297255L;
private JButton AddFlight;
/**
* @Fields bookingBtn : 增加机票
*/
private JButton findFlight;
/**
* @Fields bookingBtn : 查看机票
*/
private ActionListener actionListener;
/**
* @Fields bookingBtn : 购票按钮
*/
private JButton bookingBtn;
/**
* @Fields checkinBtn : 退票/改签按钮
*/
private JButton alterBtn;
/**
* @Fields checkinBtn : 值机按钮
*/
private JButton checkinBtn;
/**
* @Fields exitBtn : 退出按钮
*/
private JButton exitBtn;
public MainView(ActionListener actionListener) {
this.actionListener = actionListener;
init();
}
private void init() {
// 设置背景图片
ViewBackgroundUtil.setBG(this, "img/bg1.jpg");
// 实例化购票按钮
AddFlight = new CustomButton(120, 400, CustomButton.LEFT);
AddFlight.setText("添加机票");
AddFlight.addActionListener(actionListener);
AddFlight.setActionCommand("addFlight");
// 实例化购票按钮
findFlight = new CustomButton(520, 400, CustomButton.RIGHT);
findFlight.setText("查看机票");
findFlight.addActionListener(actionListener);
findFlight.setActionCommand("findFlight");
// 实例化购票按钮
bookingBtn = new CustomButton(120, 460, CustomButton.LEFT);
bookingBtn.setText("购票");
bookingBtn.addActionListener(actionListener);
bookingBtn.setActionCommand("bookingBtn");
// 实例退改签按钮
alterBtn = new CustomButton(120, 520, CustomButton.LEFT);
alterBtn.setText("退票/改签");
alterBtn.addActionListener(actionListener);
alterBtn.setActionCommand("alterBtn");
// 实例化值机按钮
checkinBtn = new CustomButton(520, 460, CustomButton.RIGHT);
checkinBtn.setText("值机");
checkinBtn.addActionListener(actionListener);
checkinBtn.setActionCommand("checkinBtn");
// 实例退出按钮
exitBtn = new CustomButton(520, 520, CustomButton.RIGHT);
exitBtn.setText("退出系统");
exitBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
JLabel welcomelabel = new JLabel("欢迎使用在线购票系统!");
welcomelabel.setBounds(30, 560, 500, 30);
// 转换日期显示格式
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
JLabel time = new JLabel(df.format(new Date(System.currentTimeMillis())));
time.setBounds(660, 10, 200, 30);
Timer timeAction = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
long timemillis = System.currentTimeMillis();
time.setText(df.format(new Date(timemillis)));
}
});
timeAction.start();
this.getContentPane().add(AddFlight);
this.getContentPane().add(findFlight);
this.getContentPane().add(bookingBtn);
this.getContentPane().add(alterBtn);
this.getContentPane().add(checkinBtn);
this.getContentPane().add(exitBtn);
this.getContentPane().add(welcomelabel);
this.getContentPane().add(time);
// 设置窗口无标题栏
this.setUndecorated(true);
this.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
this.setTitle("在线购票系统");
}
}