400-216-6935
最新公告:NOTICE
世界杯买球平台 - APP官方网站丨Apple APP Store欢迎你

案例展示

世界杯买球平台:数据库课程设计——火车票销售

发布时间:2022/09/19点击量:

世界杯买球平台总结

数据库课程设计课题,设计了一个火车票务系统,实现了火车信息查询、车票查询购票、订单查询、个人信息管理等功能,数据为从12306爬取的真实数据.

项目链接

世界杯买球平台前端项目链接:

后端项目链接:

如果觉得有帮助,请点star

世界杯买球平台主题摘要

火车票销售系统

开发环境与技术需求分析

世界杯买球平台1.用户登录注册

用户注册登录后即可使用系统的所有功能,如添加乘客、购票、查询订单等。

2.系统需要提供基本列车信息查询:

根据车次查看列车是否正常运行,查看列车基本信息(如列车类型、始发站、终点站、行驶时间、到站时间、运行时间、车厢数量、等等)

根据列车数量,查询列车停靠站信息(包括列车各停靠站的站名、到达时间、行驶时间、运行时间等)

3.系统需要提供根据列车数量查询列车详情的功能:

您可以根据始发站和终点站查询符合您行程要求且运行正常的列车(可按行车时间或运行时间排序),并可以进一步查询中途经过的车站,以及行车时间、到站时间等。

系统需要提供一个持续传输的查询。根据输入的始发站和终点站,可以查询符合换乘条件的列车,可以按照行驶时间或总运行时间排序。

4.购票

查看符合您出行条件的列车后,您可以查看列车剩余座位并购买车票。

先添加乘客(添加需要购票的乘客)->选座(为每位乘客选择座位)->下单付款->购票成功

连续换乘车票的购买流程类似,只是选座时需要为两趟车选一个座位。

5.系统需要提供用户个人信息修改功能和密码修改功能。

6.用户可以为自己以外的乘客买票,所以提供了添加乘客的功能。每个用户可以添加多个乘客为其他乘客购票。

7.系统提供订单查询功能,可查询与自身相关的所有订单,如所有订单、未付款订单、未付款订单。

8.未付款订单 已下单未付款,可在规定时间内进行付款操作。如未在规定时间内完成操作,订单将无效,成为未完成付款。订购。

9.No travel order 对于已付款但尚未旅行的订单,您可以在 no travel order 中查看您的旅行计划。未发车的订单可在同一始发站和目的地站换乘其他列车。

10.没有旅行订单也可以退款取消订单。

数据库概念设计

本系统共有6个实体集中国铁路售票电话订票,即用户实体、旅客实体、列车信息实体、列车停靠信息实体、订单实体、列车座位信息实体

(1)用户实体:

保存在系统中注册的用户信息,主码为用户电话号码,作为每个用户的唯一标识,电话号码也作为登录用户名系统。有用户定义的完整性约束:用户类型(0为学生,1为成人,2为管理员),性别(0为女性,1为男性)

世界杯买球平台:数据库课程设计——火车票销售系统

(2)乘客实体:

您可以在每个用户下添加多个乘客信息,然后为多个乘客购票。

世界杯买球平台:数据库课程设计——火车票销售系统

(3)火车信息实体:

火车信息存储火车的整体信息。每辆列车都有自己的通用列车信息,表示列车是正常运行还是停止。以车次号作为列车主码(由于列车号次相同,途中因行车方向不同,班次可能会有所变化,但车次号是固定的)

世界杯买球平台:数据库课程设计——火车票销售系统

(4)车站信息实体:

每辆列车都有一个停靠信息表,其中存储了列车停靠的不同车站,按站号排序。

世界杯买球平台:数据库课程设计——火车票销售系统

(5)列车座位信息表,为了简化系统设计的难度,将设置以D、G开头的固定班次,设置特殊座位、一等座、二等座等座位种类,车厢有软卧、硬卧、硬座三种座位,如果座位类型相同,则座位数量和车内布局也相同。例如:特等舱车厢18座一排2座一等车厢一车座52座一排4座二等车厢85座一排5座软卧车厢一排36位,一排2个位置,分为上下铺。一辆硬卧车有66个位置,一排3 一个硬座有120个位置,一排6个座位。

火车座位信息的主要代码是火车号和车厢号。外码为车次号中国铁路售票电话订票,参考车次信息实体。

当车厢号固定时,表示座位类型已固定。具体位置是根据座位号对相应行的座位数进行模运算得到的。

5%2 = 1 块 A

世界杯买球平台:数据库课程设计——火车票销售系统

(6)订单信息实体:

在系统中存储所有订单信息。订单信息实体主码为订单号,外码为用户手机号(用户实体主码)、旅客身份证号(旅客实体主码)、车次号(火车的车次)。信息主码)。

世界杯买球平台:数据库课程设计——火车票销售系统

整体E-R图为:

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

说明:

(1)每个用户可以添加多个乘客

(2)每个用户可以有多个订单

(3)每个订单属于一位乘客

(4)每个订单有一个列车信息

(5)每个订单都有一趟列车的座位信息

(6)每个订单有两个车站信息

(7)每列火车有多个站点

(8)每列火车都有多节车厢的座位信息

E-R 图到关系模式的转换

(1)实体到关系模式

用户(电话号码、密码、身份证号、邮箱、真实姓名、用户类型、性别、地址)

旅客(旅客身份证号、旅客真实姓名、旅客电话、旅客类型、地址)

列车信息(车次、列车数量、列车类型、列车车厢数量、列车出发站、列车终点站、列车行驶时间、列车到达时间、列车到达日期、列车运行时间、列车状态)

火车座位信息(车号、车号、座位类型、座位数)

列车停靠信息(车次、车展号、站名、到站时间、总运行时间、行驶时间)

订单信息(订单号、出发站号、到达站号、车厢号、座位号、订单创建时间、订单状态、行车时间)

(2)接触进入关系模式

用户有乘客(用户电话号码、乘客身份证号)

用户拥有一个订单(用户手机号、订单号)

乘客有订单(乘客身份证号、订单号)

订单拥有列车(订单号,列车号)

订单有座位(订单号、车厢号、座位号)

列车信息有列车停靠信息(车次、车次、站号)

火车有座位(车次、车厢号)

(3)实体和关系合并,E-R图中的一对一和一对多关系通过参照完整性和关系模式进行合并,并做了一些修改合并。

用户(电话号码、密码、身份证号、邮箱、真实姓名、用户类型、性别、地址)

乘客(用户电话号码、乘客身份证号码、乘客真实姓名、乘客电话号码、乘客类型、地址)

列车信息(车次、列车数量、列车类型、列车车厢数量、列车出发站、列车终点站、列车行驶时间、列车到达时间、列车到达日期、列车运行时间、列车状态)

火车座位信息(车次、车厢号、座位类型、座位数)

车站信息(车次、车次、站号、站名、到站时间、总运行时间、行车时间)

订单信息(订单号、用户手机号、乘客身份证号、车次号、出发站号、到达站号、车厢号、座位号、订单创建时间、订单状态、行车时间)

数据库逻辑设计

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

数据库物理结构设计

(1)用户表:

在user表中,由于查询和更新条件都是用户的电话号码,设置用户的电话号码为主码,会相应地创建索引,提高查询效率。

(2)乘客桌:

主要代码是用户的电话号码和乘客身份证号码。由于很多查询都是基于这两个条件,所以设置主要代码是为了提高查询效率。虽然更新比较费时间,但是更新的频率比查询的频率要少很多。

(3)火车信息表:

以车次号为主码,自动创建索引,提高查询效率。

(4)车站信息表:

这张表的查询量很大,但是插入、删除和更新的操作很小,所以在这张表上建立一定的索引是非常划算的。

由于需要根据车次和车次查询停靠站信息,所以可以对车次和车次建立通用索引,提高查询效率。

根据始发站和到站检索合格列车时,需要使用站名中国铁路售票电话订票,所以要在站名上建立通用索引

(5)火车座位表:

火车座位表的主要代码是车次号和车厢号,会自动索引。查询也会基于这两个条件,所以不需要添加其他索引。

(6)订购单:

由于order表的插入频率和查询频率都很高,建索引会降低插入效率,不建索引会降低查询效率,所以需要两者取舍。

由于订单表的主码是订单号,所以会自动创建唯一索引。

用户手机号和旅客身份证号作为外码,经常成为查询条件,所以要在外码上建立一个通用索引。

查询剩余车票信息时,需要查看某辆车的订单列表,该车辆已经订购了一段时间。查询条件需要有出发站号、到达站号、列车号、订单状态、行驶日期。

因此考虑建立一个关于出发站号、到达站号、列车号、订单状态和出发日期的通用索引。提高查询效率。毕竟查询次数远多于预订次数,所以查询次数会超过插入次数,以换取空间换取更快的效率也是可以接受的。

整体项目结构

世界杯买球平台:数据库课程设计——火车票销售系统

说明:

(1)用户先注册账号,再登录

登录后进入首页,然后有不同版块可供选择

(2)列车信息查询部分:

列车信息:可查询所有正常运行的列车信息

火车时刻表:可以根据车次查看列车停靠站信息中国铁路售票电话订票,

列车查询:可根据始发站和到达站查询符合条件的列车

连续换乘:可根据始发站和到达站查询一次可换乘的列车

(3)购票板块:

余票查询:可根据始发站和到达站查询符合条件的列车,查看余票和订票(跳转到购票界面)

购票:添加乘客后,您可以为乘客选择座位中国铁路售票电话订票,然后支付车票。

连续换乘:您可以根据始发站和到达站查询一次换乘可以到达的列车,然后购票,跳转到连续换乘购票界面。

连续换乘购票:添加乘客后,为乘客选择座位,然后付款,购票成功

(4)订单信息部分:

所有订单:查询用户名下所有订单的状态

未支付订单:查询用户名下所有未支付订单,即可支付订单

未出行的订单:可查看已付款但尚未出行的订单,并可退改票。

订单重新预订:重新选座已支付费用。

(5)个人信息部分:

查看个人信息:查看用户的个人信息。

修改个人信息:修改用户个人信息

修改密码:修改登录密码

查看乘客信息:查看该用户名下的所有乘客。

添加旅客:在该用户名下添加旅客,即可为该旅客购票

界面截图

(1)列车信息查询界面

世界杯买球平台:数据库课程设计——火车票销售系统

(2)火车时刻表查询

世界杯买球平台:数据库课程设计——火车票销售系统

(3)火车查询

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

(4)续转查询

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

(5)余票查询及购买

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

世界杯买球平台:数据库课程设计——火车票销售系统

(6)订单列表

世界杯买球平台:数据库课程设计——火车票销售系统

关键sql语句设计

(1)根据车次查询列车的所有停靠站

select   b.station_no as 车站编号 ,b.station_name as  车站名, 
           b.train_number as 车次 , b.start_time  as 开车时间, 
           b.arrive_time as 到达时间 , b.running_time  as 历时 
                 from train_parking_station(列车经停站信息表) as a ,train_parking_station  as b 
                         where a.train_number = '车次'   and a.train_no = b.train_no 
                                   order by b.station_no

(2)根据始发站和目的站搜索符合条件的列车

select C.train_no as 列车编号 ,C.train_number as 车次 ,
         C.station_name as 起始站 ,D.station_name as 目的站 ,             
         C.station_no as 起始站编号 , D.station_no as  目的站编号  ,
         C.start_time as 开车时间 , D.arrive_time as 到达时间,             
         C.running_time as 到起始站已运行时间 ,D.running_time as 到目的站已运行时间             
         from train_parking_station(列车经停站信息表) as C ,train_parking_station as D 
         where C.train_no = D.train_no 
         and C.station_name ='济南西'
         and D.station_name = '上海虹桥'     
         and C.station_no <  D.station_no        
         and C.train_no in
         (select train_no 
                   from   train_info        
                 where  train_running_type = '正在运行')

(3)根据始发站、目的站搜索符合条件的列车

select C.train_no as 列车编号 ,C.train_number as 车次 ,
         C.station_name as 起始站 ,D.station_name as 目的站 ,             
         C.station_no as 起始站编号 , D.station_no as  目的站编号  ,
         C.start_time as 开车时间 , D.arrive_time as 到达时间,             
         C.running_time as 到起始站已运行时间 ,D.running_time as 到目的站已运行时间             
         from train_parking_station(列车经停站信息表) as C ,train_parking_station as D 
         where C.train_no = D.train_no 
         and C.station_name ='济南西'
         and D.station_name = '上海虹桥'     
         and C.station_no <  D.station_no        
         and C.train_no in
         (select train_no 
                   from   train_info        
                 where  train_running_type = '正在运行')

(4)根据始发站和目的站查询换乘列车

select A.train_no as 列车-1编号 ,A.train_number as 列车-1车次, D.train_no as 列车-2编号 ,
         D.train_number as 列车-2车次, A.station_no as 起始站编号,
         A.station_name as 起始站名称, B.station_no as 列车-1换乘站编号 , 
         B.station_name as 列车-1换乘站名称 ,C.station_no as 列车-2换乘站编号,
         D.station_no as 目的站编号,  D.station_name as 目的站名称,
         A.start_time as 列车-1发车时间 , B.arrive_time as 列车-1到达时间, 
         C.start_time as 列车-2发车时间 ,D.arrive_time as 列车-2到达时间 
         from  train_parking_station as A , train_parking_station as B , 
                  train_parking_station as C ,train_parking_station as D 
                  where A.station_name = '哈尔滨' and D.station_name = '广州' 
                           and B.station_name = C.station_name 
                           and   A.train_no = B.train_no  and C.train_no = D.train_no and B.train_no <> C.train_no   
                           and B.arrive_time < C.arrive_time  
                           and  A.station_no <B.station_no and C.station_no<D.station_no
                           and A.train_no  in (select train_no from train_info where train_running_type = '正在运行')
                           and C.train_no in  (select train_no from train_info where train_running_type = '正在运行')

(5)根据始发站号、目的站号、列车号查询列车途中停靠点

select A.train_no as 列车编号, A.train_number as 车次 ,
         A.station_name as 起始站 ,B.station_name as 目的站, 
         A.station_no as 经停站-1编号 , B.station_no as 经停站-2编号 ,
         A.start_time as 开车时间 , B.arrive_time as 到达时间,
         A.running_time as 到经停站-1已运行时间 ,B.running_time as 到经停站-2已运行时间 
         from train_parking_station as A ,train_parking_station as B 
         where A.station_no between '起始站编号' and '目的站编号'
         and  B.station_no between '起始站编号' and '目的站编号'
         and A.train_no = '列车编号'                
         and A.train_no = B.train_no 
         and B.station_no = A.station_no +1 order by A.station_no ,B.station_no 

(6)根据出发站号、目的地站号、车次号、日期查询本行程已占用座位

世界杯买球平台:数据库课程设计——火车票销售系统

select            train_no, carriage_no , seat_no             from order_list     
     where  start_station_no < '起始站编号' and end_station_no > '目的站编号' 
               and train_no = '列车编号' and left(train_start_date,10) = '日期' 
               and order_status <> '已退票' and order_status <> '已改签' and order_status <> '未完成支付'
union select      train_no,carriage_no , seat_no             from order_list 
    where  start_station_no < '目的站编号'  and end_station_no > '目的站编号'                                                                                     and  train_no = '列车编号' and left(train_start_date,10) = '日期' 
              and order_status <> '已退票'  and order_status <> '已改签' and order_status <> '未完成支付'
    
union select      train_no,carriage_no , seat_no              from order_list                                            
      where start_station_no > '起始站编号' and  end_station_no <'目的站编号'   
                and order_status <> '已退票' and order_status <> '已改签' and order_status <> '未完成支付' 
                and train_no = '列车编号' and left(train_start_date,10) = '日期'
 
union select     train_no,carriage_no , seat_no             from order_list                                                  
            where start_station_no = '起始站编号' and  end_station_no = '目的站编号'   
                     and train_no = '列车编号' and left(train_start_date,10) = '日期'
                    and order_status <> '已退票' and order_status <> '已改签'  and order_status <> '未完成支付'

参考文献

[1] 数据库系统概念(第六版),Abraham,Silberschatz 等人,机械工业出版社,2013 年

[2] 数据库系统概论(第五版),王山,萨世轩,高等教育出版社,2014

[3] Spring Boot开发实践,陈光建主编

【4】王松的Spring Boot+Vue全栈开发实践

世界杯买球平台【5】游禹兮的vue.js2