PHP设计12306.cn (转载)

[附源码]PHP计算机毕业设计火车站售票管理系统(程序+LW) 附源码]PHP计算机毕业设计火车站售票管理系统(程序+LW)该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流项目运行环境配置:小皮PHPstudy。项目技术:php+ Vue等等组成,B/S模式 +Vscode管理+前后端分离等等。环境需要1.运行环境:最好是小皮phpstudy最新版,我们在这个版本上开发的。其他版本理论上也可以。2.开发环境:Vscode或HbuilderX都可以。推荐HbuilderX;3.mysql环境:建议是用5.7版本均可。 阅读详情

在知乎上看到的问题与答案,觉得非常值得学习与思考,在此记录一下:
值得注意的是原答主忽略了一种购票逻辑,我咨询后,答主也同意我的想法。
这里写图片描述

原答案:

举例说明,用PHP+MySQL实现12306购票和退票以及余票查询逻辑.
普通商品的库存之间没有关联性,库存量都是确定的.
火车票跟普通商品不同,同一车次不同路段的车票的库存可能会相互影响.
所以数据库中不应存储某个车次某个路段的余票数量,而应存储该车次该路段已售的车票数量.
也就是普通商品存的是剩下的,而火车票存的是已售的.

车票表:
(车次, 路段(区间), 已售, 限售, 已售座位, 出发日)
(1024, [1,2], 0)
(1024, [1,2,3], 0)
(1024, [1,2,3,4], 0)
(1024, [2,3], 0)
(1024, [2,3,4], 0)
(1024, [3,4], 0)
主键是自增字段,”车次”+”路段”这2个字段组成联合索引,添加唯一约束.
优化并发时,可以考虑根据”出发日”或”车次”进行分表分库.
路段[1,2,3]的含义是:从车站1上车,经过车站2(停站),到车站3下车,编号有序.
如果要给不同的路段配置不同的出票限额,可以添加一个”限售”字段.

购票逻辑:
例如用户购买路段[2,3,4]的车票时,
程序找出包含[2,3,4]的路段如[1,2,3,4]已售的票,
以及[2,3,4]包含的子路段如[2,3]和[3,4]已售的票,
如果三者的票合计小于500(这里假设列车满载为500人),
则用户能够购票,即[2,3,4]这个路段已售的票数+1.

SQL购票逻辑如下(以MySQL为例):

SET AUTOCOMMIT=0;
START TRANSACTION; 或 BEGIN; --开启事务
SELECT 已售 FROM 车票表 WHERE 车次=1024
AND 路段 IN ('2,3,4', '2,3', '3,4', '1,2,3,4') FOR UPDATE;
UPDATE 车票表 SET 已售=(已售+1) WHERE 车次=1024 AND 路段='2,3,4';
COMMIT; --提交事务
SET AUTOCOMMIT=1;

上述购票逻辑,关键在于找到WHERE条件IN中的路段,步骤如下:

1.找出包含一个路段如[2,3,4]的其他路段:
SELECT 路段 FROM 车票表 WHERE 车次=1024 AND 路段 LIKE ‘%2,3,4%’;
一个车次至多也就包含几百个路段,所以LIKE模糊查询几百条记录性能完全可以接受.
在本例中得到:
[1,2,3,4]

2.找出一个路段如[2,3,4]里的子路段算法(以PHP为例):

function section(array $arr, array &$tmp) {
$size = count($arr);
if ($size == 1) return;
for ($i = 2; $i <= $size; $i++) {
// 从位置0开始,取$i个元素,不影响输入的数组.
$tmp[] = array_slice($arr, 0, $i);
}
array_shift($arr); // 删除数组开头元素
section($arr, $tmp); // 递归
}
$arr = array(2,3,4);
$tmp = array();
section($arr, $tmp);
var_export($tmp);

在本例中得到:
[2,3]
[2,3,4]
[3,4]
第一轮得到[2,3],[2,3,4],摘掉头元素2进行下一轮.
第二轮得到[3,4],摘掉头元素3进行下一轮.
当数组元素数量等于1时,结束递归.
优化:跟某个路段相关的路段其实可以事先计算出来保存起来.

极端车次: 深圳北-北京北 K106车次 途径26站

echo implode(',', range(1, 26));
找出路段[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]的子路段:
$tmp = array();
section(range(1, 26), $tmp);
foreach ($tmp as &$v) {
$v = implode(',', $v);
$v = "[{$v}]";
}
var_export($tmp);

当购买起点站到终点站的车票时,路段IN查询中有326个条件,因为26个站包含325个子路段.
也就是该车次的所有路段都会被SELECT FOR UPDATE锁定.
不过这时可以不用路段IN条件进行锁定,直接用车次字段进行锁定即可.

退票逻辑:
退票逻辑比购票逻辑简单得多,直接给对应车次,对应路段的已售车票-1即可:
UPDATE 车票表 SET 已售=(已售-1) WHERE 车次=1024 AND 路段=’2,3,4’;

余票查询逻辑:
例如查询车次1024上路段[2,3,4]的余票:
SELECT 已售 FROM 车票表 WHERE 车次=1024 AND 路段 IN (‘2,3,4’, ‘2,3’, ‘3,4’, ‘1,2,3,4’);
这里假设列车满载为500人,用500减去上述路段已售车票的和就是路段[2,3,4]上的余票.
可以使用MySQL内存表或Redis缓存余票查询结果,购票和退票时更新缓存.

座位分配逻辑:
一列火车,其座位都是固定的,存储每列火车的座位的数据表没什么可说的.
至于座位分配,可以在车票表里增加一个”已售座位”的字段.
用户成功购票时,从”待售座位”中取一个分配给用户并更新”已售座位”字段.
“待售座位”为”所有座位”去掉相关路段”已售座位”后的座位.

SET AUTOCOMMIT=0;
BEGIN;
SELECT 已售,已售座位 FROM 车票表
WHERE 车次=1024 AND 路段 IN ('2,3,4', '2,3', '3,4', '1,2,3,4') FOR UPDATE;
UPDATE 车票表 SET 已售=(已售+1), 已售座位=CONCAT(已售座位,分配座位)
WHERE 车次=1024 AND 路段='2,3,4';
COMMIT;
SET AUTOCOMMIT=1;

其中CONCAT相比直接赋值,能够减少传递给MySQL的数据量.
车票表中”已售座位”字段存储”座位编号”.
座位表: 座位编号, 列车, 车厢, 座位

纠错内容:
补充(纠错):经评论里的网友提醒,纠错如下:应该找出跟目标路段[2,3,4]有交集(相交元素>=2)的路段,比如还包括[1,2,3].算法如下:

<?php
$all = array(1,2,3,4);
section($all, $sub); // 找到该车次包含的所有路段
$target = array(2,3,4); // 目标路段
$related = array(); // 目标路段的相关路段
foreach ($sub as $v) {
    $intersect = array_intersect($target, $v);
    if (count($intersect) >= 2) {
        $related[] = $v;
    }
}
var_export($related);
// 得到
[1,2,3] 之前没有考虑类似这样的情况
[1,2,3,4]
[2,3]
[2,3,4]
[3,4]

作者:eechen
链接:https://www.zhihu.com/question/20017917/answer/268401471
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

php购票管理系统.zip 稍微有点技术含量的php购票管理系统,实现增删查改,管理员登陆,用户登陆,内有数据库,说明文档,给你想要的,希望有所帮助,内有说明文档,数据库 立即下载

相关推荐

php民航售票系统源代码

php民航售票系统源代码

基于SpringBoot校园失物招领平台详细设计实现(源码+LW+调试文档+讲解等)

Java的主要特点是简单性、面向对象、分布式、健壮性、安全性和可移植性。Java的设计初衷是让程序员能够以优雅的方式编写复杂的程序。它支持 Internet 应用的开发,并内建了网络应用编程接口,极大地便利了网络应用的开发。同时,Java的强类型机制和异常处理功能确保了程序的健壮性。Java分为三个主要版本:Java SE(标准版),主要用于桌面应用程序开发;Java EE(企业版),用于开发企业级应用;Java ME(微型版),专门用于嵌入式系统和移动设备应用开发。

全网粉丝10W+、全栈领域优质创作者、阿里云等社区博客专家、专注于全栈领域和毕业项目实战 1960

Ubuntu20.04下SRS流媒体服务器的安装与开机自启动优化指南

本文详细介绍了在Ubuntu20.04系统下安装SRS流媒体服务器并优化开机自启动的完整指南。从基础环境准备、服务管理方案对比到systemd自启动深度优化,提供了实用的配置技巧和排查方法,帮助用户快速搭建稳定的流媒体服务环境。特别推荐使用systemd方案实现高效的自启动管理。

weixin_29313239的博客 410

PHP+Vue火车高铁在线订票管理系统

(8)编辑列车基础信息功能:车型管理(高铁、动车、普快、特快等)、车辆管理(座位分级、设置席位数量、设置席位价格)、车站管理(增加、删除车站信息)|---|---static 存放静态资源 css、js、img。|---|---library TP核心文件里面的核心文件。|---|-----|---controller 控制器。|---|-----|---model 数据模型。|---|-----|---view 页面。|---|---index 前台目录。|---|---admin 后台目录。

QQ402205496的博客 500

sift、surf、orb 特征提取——三维重建

参考文章:[sift、surf、orb 特征提取及最优特征点匹配] 最近刚刚入门三维重建,在SFM算法的代码中注意到了feature_type( feature extraction method)这个参数,想细致了解一下这几种特征提取算法,在这里做一下笔记。 SIFT 简介 SIFT(Scale-Invariant Feature Transform)——尺度不变特征变换,是一种计算机视觉的特征提取算法,用来侦测与描述图像中的局部特征。 实质上,它是在不同的尺度空间上查找关键点(特征点),并计算出关键点的

bb_sy_w的博客 4362

Verilog——反相器

反相器代码: module inv( A, Y );//A,Y是端口 //定义端口属性 input A; output Y; //定义输入输出关系 assign Y=~A;//Y等于A的反 endmodule //inv是module的名字

weixin_41788560的博客 9500

基于php的飞机票航空售票查询预定系统-计算机毕业设计

本论文主要阐述一个功能比较强大的航空客运订票系统的前台后台操作过程及一些关键技术。该网站据采取互联网web语言最流行的技术PHP,数据库库采用php的黄金搭档mysql,web服务器采用世界上最优良,免费开源,最稳定的额Apache,网页制作采用可视化编辑html语言的dreamweaver,书写php采用功能强大,打开速度超快的editplus编辑器。这是一个航空客运订票系统,此系统的目标是为了提高订购飞机票预定的效率达到方便客户的目的,具有对飞机票的订购、修改、需求、区域等信息进行管理及维护的功能。

qq_1076315463的博客 260

SLG项目开发经验二_大地图设计与实现

本文深入探讨了SLG游戏大地图设计与实现的关键技术,包括网格化业务框架、AOI系统优化、边界处理方案以及行军系统实现。通过Unity引擎的实践案例,详细解析了大地图性能优化的核心策略,如分块加载、GPU Instancing和差异同步协议,为SLG项目开发提供宝贵经验。

weixin_29001419的博客 219

今天你买到票了吗 从铁道部12306 cn网站漫谈电子商务网站的 海量事务高速处理 系统

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 《今天你买到票了吗?—

yffkjhg的博客 311

【教程4>第5章>第19节】基于Gardner环的位同步系统MATLAB仿真与带时偏基带数据导出

由于在FPGA中,时偏的影响主要是由系统收发两端晶振的不同步带来的,所以在仿真测试阶段,很难直接通过FPGA来模拟这个因素,所以我们采用MATLAB模拟带时偏的基带输入信号,并将其导出,由FPGA调用作为测试信号源。可以看到,同步之后(图3)相对于带时偏的基带信号(图2),其更接近标准的数据(图1),且抖动较小。订阅过的朋友可以复习下这个课程,没有订阅的朋友,也可以直接复制如下的程序进行仿真测试。上述程序中,加入时偏的基带信号,通过子函数。同步之后,可以恢复出标准的QPSK星座图。

FPGA/MATLAB学习教程/源码/项目合作开发 520

Simulink中搭建一个包含PID控制的压电陶瓷快反镜模型

这个模型只是一个基本框架,你需要根据实际的系统参数和要求进行调整和优化。希望这些步骤能帮助你在Simulink中搭建所需的模型。

AI的内部世界的博客 474

流量调整和限流技术 【转载】

在早期的计算机领域,限流技术(time limiting)被用作控制网络接口收发通信数据的速率。 可以用来优化性能,减少延迟和提高带宽等。 现在在互联网领域,也借鉴了这个概念, 用来为服务控制请求的速率, 如果双十一的限流, 12306的抢票等。 即使在细粒度的软件架构中,也有类似的概念。 两种常用算法 令牌桶(Token Bucket)和漏桶(leaky bucket)是 最常用的两种限流的...

weixin_30652897的博客 115

YOLOv11 改进 - 下采样 | 轻量化突破:ADown 下采样让 YOLOv11 参量减、精度升

本文介绍了一种轻量级的特征下采样模块 ADown,它结合平均池化与最大池化策略,实现更有效的信息保留与压缩。在传统卷积网络中,特征下采样常造成信息损失,而 ADown 通过双通道并行结构优化了下采样效果,提升了模型的表达能力。在 YOLOv11 中引入 ADown 替换原有的下采样模块后,网络在保持高效性的同时,显著提升了目标检测的精度与稳定性。文章详细介绍了 ADown 的核心代码实现、模块注册流程以及 YOLOv11-ADown 模型的配置和训练方法,为轻量化目标检测模型的优化提供了实用参考。

魔改工程师的博客 1480

GitHub中文排行榜完全指南:发现高分优秀中文项目的终极攻略

GitHub中文排行榜是开发者发现高分优秀中文项目的重要平台,它帮助开发者更高效地吸收国人的优秀经验成果。无论你是编程新手还是有经验的开发者,都能在这里找到适合自己的项目进行学习和使用。 ### 一、GitHub中文排行榜的核心价值 GitHub中文排行榜的设立目的在于帮助开发者发现高分优秀中文项目,让各位开发者伙伴能更高效地吸收国人的优秀经验、成果。不过需要注意的是,中文项目只能满足阶段性的需

gitblog_00162的博客 512

抖音中动态生成msToken的方法

抖音中动态生成msToken的方法

sh_moranliunian的博客 2483

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ACME[free https] Linux中使用curl命令访问https站点4种常见错误和解决方法

free https certification generator https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E 每一种客户端在处理https的连接时都会使用不同的证书库。IE浏览器和FireFox浏览器都可以在本浏览器的控制面板中找到证书管理器。在证书管理器中可以自由添加、删除根证书。 而Linux...

weixin_30319153的博客 586

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Request header field Content-Type is not allowed by Access-Control-Allow-Headers

今天遇到一个跨域问题记录学习下: 一、问题: 跨域请求中包含自定义header字段时,浏览器console报错。 Request header field xfilesize is not allowed by Access-Control-Allow-Headers 二、原因: 包含自定义header字段的跨域请求,浏览器会先向服务器发送OPTIONS请求,探测该服务器是否允许自定义的...

sunshinezx8023的博客 2264

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

php火车票网上购票系统,基于ssh/bs/java/asp.net/php/web/安卓的火车票在线订购系统...

随着Internet技术的发展,人们的学习生活已经离不开网络。未来社会人们的生活和学习将越来越依赖于数字技术的发展,越来越数字化、网络化、电子化、虚拟化。而随着用户所接受的网络服务越来越多,其对服务质量的要求也是越来越高。为了争夺更多的用户,网络服务提供商一直在研究如何更准确地获取网络服务用户对于其提供的服务的体验和满意度信息,以便其进行更进一步的改进和提升。本设计尝试用VS在网络上架构一个火车票...

weixin_33295214的博客 367

基于php旅游景区景点售票购票系统设计与实现

(4)景点列表和查询:可以查看所有景点信息,也可以支持按关键字查询景点。(2)查看网站介绍:网站介绍、关于我们、联系我们、加入我们、法律声明。(9)录入景点:录入景点属性、名称、价格、景点照片、景点描述等。(10)景点管理:列出所有景点信息、支持修改、删除。

杭州.黄老师 2225

基于PHP旅游景区景点订票系统 毕业设计毕设源码 使用教程

课程内容主要讲解如下几点:1:如何使用navaicat导入sql2:如何设置网站的的数据库账号等,如何使用iis发布网站3:演示后台管理功能、前台用户工鞥呢 该系统主要分网站管理员、游客、注册用户这几个角色网站管理员系统设置网站设置:网站名称、关键字、描述、网站介绍关于我们设置:设置关于我们、联系我们、加入我们、法律声明广告和留言       首页轮播图设置:支持上传轮播图;       留言列表:用户的所有留言信息、支持删除会员管理查看会员信息列表、支持删除功能资讯中心       添加资讯:类型、标题、资讯内容等       管理资讯:查看所有资讯列表;支持修改功能;支持删除功能       资讯浏览列表:所有用户的信息浏览记录;支持删除功能。       信息收藏数据:所有注册用户的收藏资讯列表;支持删除功能。       信息评论列表:所有注册用户的用户评论列表;支持审核和删除功能。景区中心       属性设置:设置景区的相关地区、年代、类型属性       录入景点:选择景点的地区、类型、年代属性,填写景点名称、价格、景点图片、景点介绍       景点管理:所有录入的景点列表;支持修改,支持删除       热门关键词设定:设定查询框下面的热门关键词订单和评论       订单列表:查看所有注册的用户的订单信息,包括下单时间、景点封面、景点信息、下单用户、联系方式等等。       订单管理:对于待付款的订单,支持删除和订单处理。       订单处理:如果线下支付了,那么线上可以直接更改支付状态,待付款变更为已付款。游客关于我们关于我们、联系我们、加入我们、法律声明资讯中心查看网站的所有资讯:通知公告、帮助中心、旅游攻略、行业资讯留言反馈给网站管理员留言:主题、联系人、电话、邮箱、内容等查看景点信息可以查看景点所有相关信息:景点名称、图片、价格、详情等。不能进行收藏、订购门票、发表评论。 注册用户注册用户除了享有游客的特别功能外,还有一些功能。注册和登录注册功能:填写用户名和密码注册登录:登录后可以享有会员功能。资讯收藏、评论登录的会员可以在资讯闲情页面,收藏,评论(评论信息需要后台审核后显示)景点列表和查询功能直接点击“景点门票”栏目,可以查看所有的景点列表;也可以点击左侧的分类,按地区显示要查看的景点列表也可以在顶部,景点搜索框填写景点的关键词,点击“景点搜索”查询相关景点。景点收藏和评论功能       在景点的详情页面,支持收藏景点和发表评论。       点击“收藏景点”,可以收藏当前景点,在用户中心进行收藏景点的管理。       在景点评论,可以发表评论,每个景点每天只能发布一篇评论,后台审核后显示。景点购买门票步骤如下:第一步:通过点击景点门票栏目或者顶部查询景点,进入景点介绍页面第二步:在景点详情页面,点击“立即订购景点门票”第三步:选择时间,填写票数、电话、姓名、备注;提交预约购买信息。跳转到景点订单列表我的景点预约订单可以查看我所有的景点订单信息:下单时间、景点信息、联系信息、状态信息。提交到订单列表的,默认是待付款状态;支持删除和去付款。付款后的订单,状态变更为“已经支付”注: 真实支付需要营业执照,这里是模拟支付,点击支付,我们假定支付成功!景点浏览、收藏、评论信息管理景点浏览列表:当前会员景点的浏览信息列表景点收藏列表:当前会员景点的收藏信息列表,支持删除功能景点评论列表:当前会员景点的评论信息列表,同步会显示审核状态;默认评论显示是“待审核”状态;后台管理员审核后显示 ,通知状态变更为“已审核”。注: 后台管理员可以直接删除评论信息 资讯浏览、收藏、评论信息管理当前会员资讯的浏览信息列表;资讯收藏列表,支持删除;评论列表用户信息维护自己的会员信息,包括:姓名、联系方式、邮箱、头像、简介、详细介绍等;支持修改功能密码修改和退出登录密码修改:修改自己的密码退出登录:清除登录的cookie、跳转到首页

(php毕业设计源码)基于php火车票预定管理系统源码

本设计采用php编程语言和mysql数据库开发的一个火车票预定管理系统,系统主要功能有用户登录系统,查看系统的相关公告,通知,查询票务,在线预定车票,管理员则是对系统的公告,简介,车次,用户等进行相关的管理,本设计采用了php原生开发,结构简介,适合用来作为php毕业设计和php课程设计参考和学习。php版本: 5.2 开发工具: notepad++,sublime,phpstorm都可 数据库: mysql 服务器: apache 集成环境: phpstudy 详细技术:HTML+CSS+JS+PHP+M

qq_28059693的博客 1140

php 12306火车票 自动抢购火车票

GITHUB地址:https://github.com/sym134/12306-PHP 12306火车票自动抢票PHP 每天忙着拍黄篇(PHP),下班晚上凑合写了两天,配合查尔斯,目前功能比较简单,代码也有些冗余囧......,但主功能基本具备,稍作修改可以引入框架使用。 环境 PHP&gt...

chenjiu4543的博客 1080

基于PHP+MySQL长途客用汽车票订票系统的设计与实现

随着时代的变迁汽车已经成为了人们日常生活中不可或缺的一部分,虽然很多人已经拥有了私家车,但是很多时候因为离家较远等原因,很多时候人们还是会通过客用汽车来进行一些出行,但是通常情况下客用车票都需要到客用站进行购买,这极其的不便利。 为了能够让用户足不出户就可以进行客用车票的购买我们通过PHP语言和MySQL 数据库开发了长途客用汽车票订票系统,通过本系统可以直接在线进行购买客用汽车票。 本系统主要实现了用户注册登录,车票信息查询,车票信息购买,在线留言,最新消息,购票须知,投诉与监督等模块,通过这些模块可

QQ860234001的专栏 986

航空订票系统php,C++版数据结构航空订票系统源代码.doc

C++版数据结构航空订票系统源代码.doc#ifndef _FLIGHT_H_#define _FLIGHT_H_#includeusing namespace std;struct node{int id;char start[20];char over[20];float s_time;float o_time;int price;float sale;int ticket;struct no...

weixin_39824834的博客 566

列车车次查询系统php源码,火车票务系统源代码(含数据库)

火车票务系统源代码(含数据库)c#2020-10-17下载地址https://www.codedown123.com/44077.html资源下载此资源下载价格为3D币,请先登录资源文件列表TicketSystem/.vs/TicketSystem/v15/.suo,24576TicketSystem/.vs/TicketSystem/v15/Server/sqlite3/db.lock,...

weixin_39916379的博客 920

用PHP+MySQL实现12306购票和退票以及余票查询逻辑

为什么80%的码农都做不了架构师?>>> ...

weixin_34321977的博客 759
上一篇: "约瑟夫环“分析+程序(PHP)
下一篇: 再谈PHP错误与异常处理(转载)
Tim_PHPer
博客等级 码龄11年 227粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值