数据库课程设计报告火车订票系统

数据库课程设计报告火车订票系统

2023年7月6日发(作者:)

一、需求分析

在构造系统时,首先从需求出发构造数据库表,然后再由数据库表结合需求划分系统功能模块。这样,就把一个大的系统分解成了几个小系统,使整个系统的功能更加详细易于理解,同时易于实现系统的整体设计。本系统分为车次查询和车票预定两个部分,其所能实现的功能:

1、 实现对车次基本信息的查询。

2、 实现售票的基本操作。

1、业务需求分析

从实际角度出发,提供方便快捷的火车站站查询和订票服务,提高车次的编组效率,使车次资源得到充分利用,并可以提高车票的出售效率降低工作人员的工作量。

2.功能需求

在数据操作界面需要有车次信息操作窗口,这需要有实现车次查询、车票出售的功能。这是火车订票系统的基本功能,只有实现了这几个功能一个火车订票系统才能开始运作,在本系统中实现了车票的基本信息操作。

功能列表

编号

1、1

2、1

功能名称

车次查询

售票

功能说明

对车次基本信息的查询

对车票销售/预定的操作

3、数据需求

系统处理的对象有:

城市信息:城市编号、城市名称。

车次信息:列车区间编号、车次号、起始站、目的站、出发时间、到站时间。

座位信息:列车区间编号、日期、车厢号、座位号。

系统总数据流图

用户系统

站站查询、车票预定

城市、火车和座位信息

车次信息系统

数据字典

数据项编号

IDC-1

IDC-2

IDC-3

IDC-4

IDC-5

IDC-6

IDC-7

IDC-8

IDC-9

IDC-10

数据项名

TrainID

CityID

TrainIntervalID

Start

End

Starttime

Arrivetime

Date

CarNo

SeatNo

数据项含义

车次号

城市名

列车区间号

起始站

目的站

发车时间

到站时间

日期

车厢号

座位号

存储结构

Char(255)

Char(255)

Int(10)

Int(10)

Int(10)

Char(255)

Char(255)

Char(255)

Int(10)

Int(10)

二、概要设计

(一)、系统组成

系统开发的总体目标是实现火车票订/售票管理的系统化和自动化,保证车票售出和车次信息管理的正确无误,确保车票和车次管理的有效。在本系统中分为两个部分,分别是车次信息功能部分和车票预定功能部分,主要任务是对车次信息、车票信息等操作及外理。本系统为C/S结构,运行平台为jdk1.6以上版本,以及MySQL6.0以上版本。下图为系统结构图:

系统框架

火车订票系统

车次查询车票预定或出售

(二)、数据库设计

1、概念结构设计

概念设计阶段主要是将需求分析阶段得到的用户需求抽象为信息结构(概念模型)的过程。根据之前的分析,数据库应该主要的实体有列车区间和车票信息。

1 经过分析得到的实体关系图如下

列车区间号

日期

车厢号

座位号

车票

列车区间号

起始站

目的站

发车时间

列车区间

车次号

到站时间

实体关系图

2、逻辑结构设计

将E-R图转化为关系模式:

在设计时,将一个1:n联系的单方主码加至多方。一个实体单独转化成一张表。

根据设计原则和以上E-R图,转化为以下两张表:

列车区间表:TrainInterval(列车区间号 、车次号、起始站、目的站、发车时间、到站时间)

车票表:ticket(列车区间号、日期、车厢号、座位号)

2 3、数据库模式定义

列车区间表

列名

TrainIntervalID

Start

End

Starttime

Arrivetime

TrainID

数据类型

Int(10)

Int(10)

Int(10)

Char(30)

Char(30)

Money(8)

取值约束

车票表

列名

TrainIntervalID

Date

CarNo

SeatNo

数据类型

Int(10)

Char(255)

Int(10)

Int(10)

取值约束

可否为空

不可

不可

不可

不可

说明

列车区间号

日期

车厢号

座位号

可否为空

不可

不可

不可

说明

列车区间号

起始站

目的站

发车时间

到站时间

车次号

三、数据库实施阶段

数据库的建立是直接在Navicat中建的,数据库中的表清单在之前已经列出。在JFrame界面建立数据库不同功能模块的操作对话框,并对所有对话框中的控件按钮进行设定,添加成员函数,使得数据库的程序框架确定下来。接着是对成员函数进行补充使程序能顺利运行并能连上数据库,对连接模块进行补充设定,使得基本权限确定。在数据库建立过程中通过索引实现了对表的快捷查询。连接数据库时要注意程序中数据库各项属性的定义描述,避免其与数据库表中的属性值产生差异。

四、详细设计

1、模块简述

本火车订票管理系统主要的所有模块主要是分为数据库连接查询模块、网络连接模块、线程管理模块的三个部分,下面对三个个部分进行再分类,共有7个模块。

模块类别

网络连接

线程管理

数据库查询

模块编号

T——1

T——2

T——3

T——4

T——5

T——6

T——7

模块名称

Packets

ServerThread

ClientThread

CityTable

SeatTable

公共模块

模块功能

用户封包处理

系统封包处理

系统监听线程

用户连入线程

城市信息查询

列车区间查询

车票预定功能

Packets

TrainIntervalTable

3 2、模块设计

下面给出模块的背景,设计思路,算法,界面以及关键代码,比较简单的模块就仅给界面设计以及算法设计,比较复杂的模块会给出相应的数据库有关触发器,存储过程和视图的设计。而本系统重的模块主要有一下几个:

1、 数据库查询模块

此模块提供系统与数据库的数据交换,包括从数据库中读入城市信息、列车区间信息和座位信息,并在用户线程连接的时候提供城市列表;在查询车次信息时从列车区间中搜索出所有满足条件的列车信息;在订票时首先判断是否在两个城市之间的所有列车区间上都有同样的座位是空着的,暂时不能提供拼票功能。

a. 城市信息查询

当一个用户线程连接被建立的时候,系统将预设在数据库中的城市信息发送到用户端,保证用户输入的城市是系统可识别的。在之后的C/S通信中城市将用其编号代替。

public class CityTable {

private static CityTable _instance = null;

private ArrayList _cityList = new ArrayList();

private HashMap _cityMap = new HashMap();

private CityTable() {}

public static CityTable getInstance() {}

public ArrayList getCityList() {}

public int getCityNum() {}

public City getCityByName(String name) {}

}

b. 列车区间查询

提供简单的站站查询功能。并为订票功能模块提供专门的列车区间查询功能。

public class TrainIntervalTable {

private static TrainIntervalTable _instance = null;

private ArrayList _trainIntervalList = new ArrayList();

private ArrayList _startList = new ArrayList();

4 private ArrayList _endList = new ArrayList();

private TrainIntervalTable() {}

public static TrainIntervalTable getInstance() {}

public synchronized ArrayList getTrain(int start, int end, int mask) {}

// used in at

public ArrayList getTrainIntervalList(int start, int end, String trainID) {}

}

c. 座位信息查询

提供订票功能,自动判断是不是存在这样一个座位:它在起始站和目标站之间的所有列车区间上都没有被占用。如果有,返回一个座位信息,并在数据库中添加订票信息。否则返回一个不存在的座位。

public class SeatTable {

private static SeatTable _instance = null;

private boolean[][] isTaken = new Boolean [_CAR_NUM]

[ _SEAT_NUM ];

private SeatTable() {}

public static SeatTable getInstance() {}

public synchronized Seat bookSeat(int start, int end, String trainID, String date) {}

}

2、 网络连接模块

使用Socket连接。提供封包处理类(PacketHandler),根据不同的封包编号交与对应的用户封包处理类(ClientPacket)处理,并向发送用户封包的用户线程发送处理结果的系统封包类(ServerPacket)作为回应。

a. PacketHandler:封包分类器

public class PacketHandler {

private ClientThread _client;

public PacketHandler(ClientThread client) {}

public void handlePacket(byte[] data) {

int opcode = data[0] & 0xFF;

5

}

switch(opcode) {

……

default:

}

}

b. ClientPacket:用户封包处理

父类ClientBasePacket,包含从socket管道中读取各类型数据的方法。详见代码。

c. ServerPacket:处理结果封包

父类ServerBasePacket,提供往socket管道中写入各类型数据的方法。详见代码。

3、 线程管理模块

提供线程的管理和各类基本操作。

a. 线程池GeneralThreadPool

线程的创建和管理类,使用java标准线程池。实际上在本系统中几乎没有用到此类的功能。

b. ServerThread

唯一的一个系统线程,用于端口监听。当出现新的socket连接时,为它建立一个单独的用户线程。

public class ServerThread extends Thread {

private static ServerThread _instance;

private ServerSocket _serverSocket;

private ServerThread() {}

public static ServerThread getInstance() {}

public void initialize() throws Exception {}

@Override

public void run() {

while (true) {

try {

//监听端口,创建用户线程

} catch (IOException e) {}

}

}

}

6 c. ClientThread

被ServerThread创建的用户线程,对应于一个socket连接,在各自的用户线程中处理查询和订票的功能。

public class ClientThread implements Runnable{

private Socket _socket;

private InputStream _in;

private OutputStream _out;

private PacketHandler _handler;

public ClientThread(Socket socket) throws IOException {}

public String getIP() {}

private byte[] readPacket() throws Exception {}

//@Override

public void sendPacket(ServerBasePacket packet) {}

//@Override

public void run() {

//读取封包,并交给PacketHandler处理

}

public void close() throws IOException {}

}

7

发布者:admin,转转请注明出处:http://www.yc00.com/web/1688604399a154370.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信