一、需求分析
在构造系统时,首先从需求出发构造数据库表,然后再由数据库表结合需求划分系统功能模块。这样,就把一个大的系统分解成了几个小系统,使整个系统的功能更加详细易于理解,同时易于实现系统的整体设计。本系统分为车次查询和车票预定两个部分,其所能实现的功能:
1、实现对车次基本信息的查询。
2、实现售票的基本操作。
1、业务需求分析
从实际角度出发,提供方便快捷的火车站站查询和订票服务,提高车次的编组效率,使车次资源得到充分利用,并可以提高车票的出售效率降低工作人员的工作量。
2.功能需求
  在数据操作界面需要有车次信息操作窗口,这需要有实现车次查询、车票出售的功能。这
是火车订票系统的基本功能,只有实现了这几个功能一个火车订票系统才能开始运作,在本系统中实现了车票的基本信息操作。
                      功能列表
编号
  功能名称
  功能说明
1、1
车次查询
对车次基本信息的查询
2、1
售票
对车票销售/预定的操作
3、数据需求
系统处理的对象有:
城市信息:城市编号、城市名称。
车次信息:列车区间编号、车次号、起始站、目的站、出发时间、到站时间。
座位信息:列车区间编号、日期、车厢号、座位号。
                            系统总数据流图
数据字典
ns允智
数据项编号
数据项名
数据项含义
存储结构
IDC-1
TrainID
车次号
Char(255)
IDC-2
CityID
城市名
Char(255)
IDC-3
TrainIntervalID
列车区间号
Int(10)
IDC-4
Start
起始站
Int(10)
IDC-5
End
目的站
Int(10)
IDC-6
Starttime
发车时间
Char(255)
IDC-7
Arrivetime
到站时间
Char(255)
IDC-8
Date
日期
Char(255)
IDC-9
CarNo
车厢号
Int(10)
IDC-10
SeatNo音乐知识
座位号
Int(10)
二、概要设计
(一)、系统组成
系统开发的总体目标是实现火车票订/售票管理的系统化和自动化,保证车票售出和车次信息管理的正确无误,确保车票和车次管理的有效。在本系统中分为两个部分,分别是车次信息功能部分和车票预定功能部分,主要任务是对车次信息、车票信息等操作及外理。本系统为C/S结构,运行平台为jdk1.6以上版本,以及MySQL6.0以上版本。下图为系统结构图:
                                  系统框架
(二)、数据库设计
1、概念结构设计
概念设计阶段主要是将需求分析阶段得到的用户需求抽象为信息结构(概念模型)的过程。根据之前的分析,数据库应该主要的实体有列车区间和车票信息。
经过分析得到的实体关系图如下
                              实体关系图
2、逻辑结构设计
将E-R图转化为关系模式:
在设计时,将一个1:n联系的单方主码加至多方。一个实体单独转化成一张表。
根据设计原则和以上E-R图,转化为以下两张表:
列车区间表:TrainInterval(列车区间号 、车次号、起始站、目的站、发车时间、到站时间)
车票表:ticket(列车区间号日期车厢号座位号)
3、数据库模式定义
列车区间表
2020新春祝福贺词
  列名
长鼓舞是哪个民族的舞蹈  数据类型
朴信惠张根硕  取值约束
  可否为空
  说明
TrainIntervalID
Int(10)
    不可
列车区间号
Start
Int(10)
    不可
起始站
End
Int(10)
不可
目的站
Starttime
Char(30)
    可
发车时间
Arrivetime
Char(30)
    可
  到站时间
TrainID
Money(8)
    可
  车次号
车票表
  列名
  数据类型
  取值约束
  可否为空
  说明
TrainIntervalID
Int(10)
    不可
列车区间号
Date
Char(255)
    不可
日期
CarNo
Int(10)
不可
车厢号
SeatNo
Int(10)
    不可
座位号
三、数据库实施阶段
数据库的建立是直接在Navicat中建的,数据库中的表清单在之前已经列出。在JFrame界面建立数据库不同功能模块的操作对话框,并对所有对话框中的控件按钮进行设定,添加成员函数,使得数据库的程序框架确定下来。接着是对成员函数进行补充使程序能顺利运行并能连上数据库,对连接模块进行补充设定,使得基本权限确定。在数据库建立过程中通过索引实现了对表的快捷查询。连接数据库时要注意程序中数据库各项属性的定义描述,避免其与数据库表中的属性值产生差异。
四、详细设计
1、模块简述
本火车订票管理系统主要的所有模块主要是分为数据库连接查询模块、网络连接模块、线程管理模块的三个部分,下面对三个个部分进行再分类,共有7个模块。
开车怎么起步
模块类别
模块编号
模块名称
公共模块
模块功能
网络连接
T——1
Net.ClientPackets
用户封包处理
T——2
Net.ServerPackets
系统封包处理
线程管理
T——3
ServerThread
系统监听线程
T——4
ClientThread
用户连入线程
数据库查询
T——5
CityTable
城市信息查询
T——6
TrainIntervalTable
列车区间查询
T——7
SeatTable
车票预定功能
2、模块设计
下面给出模块的背景,设计思路,算法,界面以及关键代码,比较简单的模块就仅给界面设计以及算法设计,比较复杂的模块会给出相应的数据库有关触发器,存储过程和视图的设计。而本系统重的模块主要有一下几个:
1、数据库查询模块
此模块提供系统与数据库的数据交换,包括从数据库中读入城市信息、列车区间信息和座位信息,并在用户线程连接的时候提供城市列表;在查询车次信息时从列车区间中搜索出所有满足条件的列车信息;在订票时首先判断是否在两个城市之间的所有列车区间上都有同样的座位是空着的,暂时不能提供拼票功能。
a.城市信息查询
  当一个用户线程连接被建立的时候,系统将预设在数据库中的城市信息发送到用户端,保证用户输入的城市是系统可识别的。在之后的C/S通信中城市将用其编号代替。
public class CityTable {
   
    private static CityTable _instance = null;
   
    private ArrayList<City> _cityList = new ArrayList<City>();
    private HashMap<String, City> _cityMap = new HashMap<String, City>();
   
    private CityTable() {}
   
    public static CityTable getInstance() {}
   
    public ArrayList<City> getCityList() {}
   
    public int getCityNum() {}
   
    public City getCityByName(String name) {}
}
b.列车区间查询
提供简单的站站查询功能。并为订票功能模块提供专门的列车区间查询功能。
public class TrainIntervalTable {
   
    private static TrainIntervalTable _instance = null;
   
    private ArrayList<TrainInterval> _trainIntervalList = new ArrayList<TrainInterval>();
    private ArrayList<TrainInterval> _startList = new ArrayList<TrainInterval>();
    private ArrayList<TrainInterval> _endList = new ArrayList<TrainInterval>();
   
    private TrainIntervalTable() {}
   
    public static TrainIntervalTable getInstance() {}