数据库课程设计:火车售票系统

主要任务:
1.
2.
3.
4.

任务分配情况

一、需求分析

姓名\任务需求概述,角色,内容编写功能建模数据建模行为建模
王玉数据2数据3数据4数据5
王雨萌数据7数据8数据9数据10
陆睿希数据12数据13数据14数据15
胡雨娟数据12数据13数据14数据15

二、系统设计

需求分析

一、需求概述

本系统为乘客提供便捷的火车票购买与管理服务。乘客可通过输入出发站、到达站及日期查询车次信息,系统动态显示列车发车时间、席别、实时票价及余票情况,并支持提交订单与第三方支付。若支付超时或候补订单未匹配成功,系统将自动释放座位并更新订单状态,保障公平性。退票时系统根据发车时间自动计算手续费并恢复余票,改签需先退票后重新购票。运营管理员可维护列车、车站信息等。乘客信息(如身份证号)脱敏显示,候补订单按提交时间优先级处理,超时未支付或候补失败自动通知用户。系统全面覆盖购票、退改、候补、运营管理及风控场景,兼顾效率与合规性。

用户角色

角色主要职责
普通用户购票、退票、改签、订单查询、信息反馈。
管理员系统维护、用户管理、异常处理、日志监控。
铁路工作人员车次/票价/站点管理、运营状态调整。
售票员人工售票、退改服务、设备维护(线下场景)。
支付接口管理员支付渠道配置、风控管理、交易异常处理(第三方服务)。

三、功能建模

业务流程描述

  • 用户购票流程
    当乘客进入购票页面时,可以通过系统查询车次(输入出发站、到达站、发车日期),然后系统会根据车次停靠表(Train_Schedule)动态计算区间余票(基于余票信息表 Ticket_Inventory),显示车次、席别、票价(匹配票价表 Ticket_Price)、发车时间等信息供乘客选择,乘客选择车次并提交订单后,系统通过乐观锁(version字段)扣减余票,生成订单表(Order)记录,并跳转至支付页面。支付成功后,订单状态更新为“已支付”,生成支付记录表(Payment)数据;若支付超时(如30分钟未支付),系统自动释放库存并标记订单为“已取消”。
  • 退票与改签
    乘客需要退票或改签时,可以在订单详情页发起退票,系统查询相应金额并退款(我们这里退款时退全款)后更新订单状态为“已取消”,并且同时恢复对应区间的余票(更新余票信息表 Ticket_Inventory)。记录退款信息至支付记录表(Payment)。改签则需先退票后重新购票,系统禁止直接修改原有订单。
  • 候补购票
    当余票不足时,乘客可提交候补订单表(Wait_Order),指定车次、席别、乘车日期。系统实时监控余票变化:当有余票释放时,按候补下单时间顺序锁定座位,通知用户支付(15分钟内未支付则释放)。若候补失败(发车前24小时仍无票),系统自动取消候补订单并通知用户。
  • 列车与车站管理
    运营管理员可维护列车表(Train)信息(如调整运营状态is_active)、车站表(Station)信息(如新增车站编码station_code)。修改车次停靠表(Train_Schedule)时(如增减停靠站),需校验是否存在未完成的关联订单(通过订单表 Order检查),若有则禁止修改。
  • 票价动态调整
    运营管理员可在票价表(Ticket_Price)中设置不同区间、席别的票价规则(含生效日期effective_date),系统自动匹配当前有效票价。
  • 支付与风控
    支付接口对接第三方(如支付宝、微信),通过transaction_id关联支付流水,确保交易可追溯。若支付失败(如余额不足),系统自动释放座位并标记订单为“支付失败”,防止占票不支付。
  • 数据安全与高并发
    用户密码(password字段)使用BCrypt加密存储,身份证号(id_card)脱敏显示。
    余票扣减通过乐观锁(version字段)实现并发控制,避免超售。

业务流程图

四、行为建模

业务流程图

  • 用户注册登录核心流程图
    作用:
描述用户注册登录的核心流程,确保唯一性校验和数据安全(密码加密)。
记录用户登录日志,用于权限管理

  • 列车基础数据录入流程
    作用:
规范列车基础数据录入流程,确保车次号唯一和时间逻辑正确。
关联车站表,为车次停靠表提供基础数据,支持车次路线规划。)。
记录用户登录日志,用于权限管理

  • 车站基础信息管理
    统一车站基础信息管理,确保车站编码唯一。
为列车表提供起止站数据,支持按城市 / 省份检索车站。

  • 管理列车停靠站序列
    管理列车停靠站序列,确保时间逻辑正确(如离站时间>到站时间)。
为余票计算、票价制定提供区间里程数据。

  • 管理余票库存
    实时管理余票库存,确保库存与订单联动(扣减 / 回补)。
通过乐观锁解决高并发购票时的库存超卖问题。

  • 规范票价设置流程
    规范票价设置流程,支持分席别、分区间定价。
确保订单金额与票价表实时同步,避免价格不一致。

  • 描述订单生命周期(未支付→已支付→已取消)
    描述订单生命周期(未支付→已支付→已取消),确保库存与订单状态一致。
支持乘客信息关联,记录用户购票历史。

  • 管理支付流程
    作用:
管理支付流程,确保支付结果与订单状态强一致。
记录支付方式和流水号,支持财务对账和退款查询。

  • 规范候补购票流程
    作用:
规范候补购票流程,支持无票时排队等待。
通过队列机制公平分配余票,提升用户购票成功率。

  • 管理用户常用乘车人信息
    作用:管理用户常用乘车人信息,简化购票时的乘客录入流程。
确保乘客信息唯一(身份证校验),符合实名制购票要求。

  • 总流程
    在这里插入图片描述
    在这里插入图片描述

五、数据建模

数据字典

  1. 用户表:用户账号,用户名,加密后的密码,用户真实姓名,身份证号,手机号
  2. 列车表:列车编号,车次号,列车类型,起始站ID,终点站ID,发车时间,到达终点站时间,总座位数,运营状态
  3. 车站表:车站唯一标识,车站名称,所在城市,所在省份,车站编码,车站等级,是否为换乘站
  4. 车次停靠表:停靠记录编号,关联列车ID,关联车站ID,停靠顺序,到站时间,离站时间,停留分钟数
  5. 余票信息表:余票编号,关联列车ID,发车日期,出发站ID,到达站ID,席别,可用余票数量
  6. 票价表:票价记录唯一标识,关联列车ID,出发站ID,到达站ID,席别,票价,票价生效日期,票价失效日期
  7. 订单表:订单号,关联用户ID,关联列车ID,出发站ID,到达站ID,席别,下单时间,乘车日期,订单金额,订单状态,支付时间
  8. 支付记录表:支付记录,关联订单ID,关联用户ID,实际支付金额,支付方式,支付时间,第三方交易流水号,支付状态
  9. 候补订单表:候补订单唯一标识,关联用户ID,关联列车ID,出发站ID,到达站ID,席别,乘车日期,候补下单时间,候补状态,候补成功时间
  10. 乘客信息表:乘客唯一标识,关联用户ID,乘客真实姓名,身份证号,联系电话,是否为默认乘客,添加时间

二、系统设计

1. 用户表 (User)

字段名类型/约束说明
user_idBIGINT, PK用户唯一标识
usernameVARCHAR(50), UNIQUE, NOT NULL用户名(登录用)
passwordVARCHAR(100), NOT NULL加密后的密码(使用BCrypt或SHA-256哈希加密)
real_nameVARCHAR(50), NOT NULL用户真实姓名
id_cardVARCHAR(18), UNIQUE, NOT NULL身份证号
phoneVARCHAR(11), UNIQUE, NOT NULL手机号
emailVARCHAR(100)邮箱(可选)
user_levelINT DEFAULT 1用户等级(默认1级)
register_timeDATETIME, NOT NULL注册时间
last_login_timeDATETIME最后登录时间

2. 列车表 (Train)

字段名类型/约束说明
train_idVARCHAR(10), PK列车唯一标识
train_numberVARCHAR(20), NOT NULL车次号(如G1234)
train_typeVARCHAR(10), NOT NULL列车类型(高铁/动车/普快等)
start_station_idINT, FK(Station.station_id)起始站ID(外键关联车站表)
end_station_idINT, FK(Station.station_id)终点站ID(外键关联车站表)
departure_timeTIME, NOT NULL发车时间
arrival_timeTIME, NOT NULL到达终点站时间
total_seatsINT, NOT NULL总座位数(按车厢和席别动态计算,非冗余字段)
is_activeBOOLEAN DEFAULT TRUE是否运营中

3. 车站表 (Station)

字段名类型/约束说明
station_idINT, PK车站唯一标识
station_nameVARCHAR(50), NOT NULL车站名称(如北京南站)
cityVARCHAR(50), NOT NULL所在城市
provinceVARCHAR(50), NOT NULL所在省份
station_codeVARCHAR(10), UNIQUE, NOT NULL车站编码(如BJN)
station_levelVARCHAR(10)车站等级(特等/一等/二等)
is_transferBOOLEAN DEFAULT FALSE是否为换乘站

4. 车次停靠表 (Train_Schedule)

字段名类型/约束说明
schedule_idBIGINT, PK停靠记录唯一标识
train_idVARCHAR(10), FK(Train.train_id)关联列车ID
station_idINT, FK(Station.station_id)关联车站ID
sequence_numberINT, NOT NULL停靠顺序(从1开始)
arrival_timeTIME到站时间(若为始发站则无值)
departure_timeTIME离站时间(若为终点站则无值)
stop_durationINT停留分钟数
mileageINT累计里程(单位:公里)

5. 余票信息表 (Ticket_Inventory)

字段名类型/约束说明
inventory_idBIGINT, PK余票记录唯一标识
train_idVARCHAR(10), FK(Train.train_id)关联列车ID
departure_dateDATE, NOT NULL发车日期
from_station_idINT, FK(Station.station_id)出发站ID
to_station_idINT, FK(Station.station_id)到达站ID
seat_typeVARCHAR(10), NOT NULL席别(商务座/一等座/二等座等)
available_countINT, NOT NULL可用余票数量
versionINT DEFAULT 0乐观锁版本号(用于高并发控制)

6. 票价表 (Ticket_Price)

字段名类型/约束说明
price_idBIGINT, PK票价记录唯一标识
train_idVARCHAR(10), FK(Train.train_id)关联列车ID
from_station_idINT, FK(Station.station_id)出发站ID
to_station_idINT, FK(Station.station_id)到达站ID
seat_typeVARCHAR(10), NOT NULL席别
priceDECIMAL(10,2), NOT NULL票价
effective_dateDATE, NOT NULL票价生效日期
expiry_dateDATE票价失效日期(可选,默认为长期有效)

7. 订单表 (Order)

字段名类型/约束说明
order_idBIGINT, PK订单唯一标识
user_idBIGINT, FK(User.user_id)关联用户ID
train_idVARCHAR(10), FK(Train.train_id)关联列车ID
from_station_idINT, FK(Station.station_id)出发站ID
to_station_idINT, FK(Station.station_id)到达站ID
seat_typeVARCHAR(10), NOT NULL席别
order_timeDATETIME, NOT NULL下单时间
departure_dateDATE, NOT NULL乘车日期
priceDECIMAL(10,2), NOT NULL订单金额(从票价表同步)
order_statusVARCHAR(20), NOT NULL订单状态(未支付/已支付/已取消/已完成)
payment_timeDATETIME支付时间(仅状态为已支付时有效)

8. 支付记录表 (Payment)

字段名类型/约束说明
payment_idBIGINT, PK支付记录唯一标识
order_idBIGINT, FK(Order.order_id)关联订单ID
user_idBIGINT, FK(User.user_id)关联用户ID
payment_amountDECIMAL(10,2), NOT NULL实际支付金额
payment_methodVARCHAR(20), NOT NULL支付方式(支付宝/微信/银联等)
payment_timeDATETIME, NOT NULL支付时间
transaction_idVARCHAR(50), UNIQUE第三方交易流水号
payment_statusVARCHAR(20), NOT NULL支付状态(成功/失败)

9. 候补订单表 (Wait_Order)

字段名类型/约束说明
wait_order_idBIGINT, PK候补订单唯一标识
user_idBIGINT, FK(User.user_id)关联用户ID
train_idVARCHAR(10), FK(Train.train_id)关联列车ID
from_station_idINT, FK(Station.station_id)出发站ID
to_station_idINT, FK(Station.station_id)到达站ID
seat_typeVARCHAR(10), NOT NULL席别
departure_dateDATE, NOT NULL乘车日期
create_timeDATETIME, NOT NULL候补下单时间
wait_statusVARCHAR(20), NOT NULL候补状态(等待中/成功/失败/取消)
success_timeDATETIME候补成功时间(仅状态为成功时有效)

10. 乘客信息表 (Passenger)

字段名类型/约束说明
passenger_idBIGINT, PK乘客唯一标识
user_idBIGINT, FK(User.user_id)关联用户ID(添加该乘客的用户)
real_nameVARCHAR(50), NOT NULL乘客真实姓名
id_cardVARCHAR(18), UNIQUE, NOT NULL身份证号
phoneVARCHAR(11)联系电话(可选)
is_defaultBOOLEAN DEFAULT FALSE是否为默认乘客(用户常用乘客标记)
create_timeDATETIME, NOT NULL添加时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值