设计一个公交 地铁乘车系统

2023-11-17 12:50:03 字數 5544 閱讀 5095

1.1 上班通勤的日常

叮铃铃”,“叮铃铃”,早上七八点,你还在温暖的被窝里和闹钟“斗智斗勇”。

突然,你意识到已经快迟到了,于是像个闪电侠一样冲进卫生间,速洗漱,急穿衣,左手抄起手机,右手拿起面包,边穿衣边啃早餐。

这个时候,通勤的老难题又摆在了你面前:要不要吃完这口面包、刷牙和洗脸,还是先冲出门赶车?

好不容易做出了一个艰难的决定——放下面包,快步冲出门。你拿出手机,点开了熟悉的地铁乘车 app 或公交地铁乘车码小程序。

然后,一张***在屏幕上亮了起来,这可是你每天通勤的“敲门砖”。

你快步走到地铁站,将手机***扫描在闸机上,"嗖"的一声,闸机打开,你轻松通过,不再需要排队买票,不再被早高峰的拥挤闹心。

你走进地铁车厢,挤到了一个角落,拿出手机,开始计划一天的工作。

1.2 公交&地铁乘车系统

正如上文所说,人们只需要一台手机,一个***就可以完成上班通勤的所有事项。

那这个便捷的公交或地铁乘车系统是如何设计的呢?它背后的技术和架构是怎样支撑着你我每天的通勤生活呢?

今天让我们一起揭开这个现代都市打工人通勤小能手的面纱,深入**乘车系统的设计与实现

在这个文章中,小❤将带你走进乘车系统的世界,一**竟,看看它是如何在短短几年内从科幻电影中走出来,成为我们日常生活不可或缺的一部分。

2.1 功能需求

用户注册和登录: 用户可以通过手机应用或小程序注册账号,并使用账号登录系统。路线查询: 用户可以查询地铁的线路和站点信息,包括发车时间、车票**等。获取乘车***系统根据用户的信息生成乘车***获取地铁实时位置: 用户可以查询地铁的实时位置,并查看地铁离当前站台还有多久到达。乘车扫描和自动支付: 用户在入站和出站时通过扫描***来完成乘车,系统根据乘车里程自动计算费用并进行支付。交易记录查询: 用户可以查询自己的交易历史记录,包括乘车时间、金额、线路等信息。2.2 乘车系统的非功能需求

乘车系统的用户量非常大,据《中国主要城市通勤检测报告-2023》数据显示,一线城市每天乘公交&地铁上班的的人数普遍超过千万,平均通勤时间在 45-60 分钟,并集中在早高峰和晚高峰时段。

所以,设计一个热点数据分布非均匀、人群分布非均匀的乘车系统时,需要考虑如下几点:

用户分布不均匀,一线城市的乘车系统用户,超出普通城市几个数量级。时间分布不均匀,乘车系统的设计初衷是方便上下班通勤,所以早晚高峰的用户数会高出其它时间段几个数量级。高并发: 考虑到公交车/地铁系统可能同时有大量的用户在高峰时段使用,系统需要具备高并发处理能力。高性能: 为了提供快速的查询和支付服务,系统需要具备高性能,响应时间应尽可能短。可扩展性: 随着用户数量的增加,系统应该容易扩展,以满足未来的需求。可用性: 系统需要保证24/7的可用性,随时提供服务。安全和隐私保护: 系统需要确保用户数据的安全和隐私,包括支付信息和个人信息的保护。3.1 核心组件

前端应用: 开发手机 app 和小程序,提供用户注册、登录、查询等功能。后端服务: 设计后端服务,包括用户管理、路线查询、**管理、订单处理、支付系统等。数据库: 使用关系型数据库 mysql 集群存储用户信息、路线信息、交易记录等数据。推送系统: 将乘车后的支付结果,通过**和离线两种方式推送给用户手机上。负载均衡和消息队列: 考虑使用负载均衡和消息队列技术来提高系统性能。3.2 乘车流程

1)用户手机与后台系统的交互

交互时序图如下:

1. 用户注册和登录:用户首先需要在手机应用上注册并登录系统,提供个人信息,包括用户名、手机号码、支付方式等。

2. 查询乘车信息:用户可以使用手机应用查询公交车/地铁的路线和票价信息,用户可以根据自己的出行需求选择合适的线路。

3. 生成乘车***用户登录后,系统会生成一个用于乘车的***这个***可以在用户手机上随时查看。这个***是城市公交系统的通用乘车***同时该码关联到用户的账户和付款方式,用户可以随时使用它乘坐任何一辆公交车或地铁。

2)用户手机与公交车的交互

交互 uml 状态图如下:

用户进站扫码: 当用户进入地铁站时,他们将手机上的乘车码扫描在进站设备上。这个设备将扫描到的乘车码发送给后台系统。进站数据处理: 后台系统接收到进站信息后,会验证乘车码的有效性,检查用户是否有进站记录,并记录下进站的时间和地点。用户出站扫码: 用户在乘车结束后,将手机上的乘车码扫描在出站设备上。出站数据处理: 后台系统接收到出站信息后,会验证乘车码的有效性,检查用户是否有对应的进站记录,并记录下出站的时间和地点。3)后台系统的处理

乘车费用计算: 基于用户的进站和出站地点以及乘车规则,后台系统计算乘车费用。这个费用可以根据不同的城市和运营商有所不同。费用记录和扣款: 系统记录下乘车费用,并从用户的付款方式(例如,支付宝或微信钱包)中扣除费用。乘车记录存储: 所有的乘车记录,包括进站、出站、费用等信息,被存储在乘车记录表中,以便用户查看和服务提供商进行结算。通知用户: 如果有需要,系统可以向用户发送通知,告知他们的乘车费用已被扣除。数据库交互: 在整个过程中,系统需要与数据库交互来存储和检索用户信息、乘车记录、费用信息等数据。3.1 数据库设计

用户信息表(user),包括用户id、手机号、密码、支付方式、创建时间等。***表 (qrcode),包括***id、用户id、城市id、生成时间、有效期及***数据等。车辆&地铁车次表 (vehicle),包括车辆id、车牌或地铁列车号、车型(公交、地铁)、扫描设备序列号等。乘车记录表 (triprecord),包括记录id、用户id、车辆id、上下车时间、起止站点等。支付记录表 (paymentrecord),包括支付id、乘车记录id、交易时间、交易金额、支付方式、支付状态等。以上是一些在公交车&地铁乘车系统中需要设计的数据库表及其字段的基本信息,后续可根据具体需求和系统规模,还可以进一步优化表结构和字段设计,以满足性能和扩展性要求。

详细设计除了要设计出表结构以外,我们还针对两个核心问题进行讨论:

最短路线查询乘车***管理3.2 最短路线查询

根据交通部门给的公交&地铁路线,我们可以绘制如下站点图:

假设图中的站点有 a-f,涉及到的交通工具有地铁 1 号线和 2 路公交,用户的起点和终点分别为 a、f 点。我们可以使用 dijkstra 算法来求两点之间的最短路径,具体步骤为:

在用户查询路线之前,交通部门会把公交 & 地铁的站点经纬度信息输入到路线管理系统,并根据二维的空间经纬度编码存储对应的站点信息。

我们设定西经为负,南纬为负,所以地球上的经度范围就是[-180, 180],纬度范围就是[-90,90]。如果以本初子午线、赤道为界,地球可以分成 4 个部分。

根据这个原理,我们可以先将二维的空间经纬度编码成一个字符串,来唯一标识用户或站点的位置信息。再通过 redis 的 geohash 算法,来获取用户出发点附近的所有站点信息。

geohash 算法的原理是将一个位置的经纬度换算成地址编码字符串,表示在某个矩形区域,通过这个算法可以快速找到同一个区域的所有站点

一旦获得了起始地点的经纬度,系统就可以根据附近的站点信息,调用路线管理系统来查找最佳的公交或地铁路线。

一旦用户选择了一条路线,导航引擎启动并提供实时导航指引。导航引擎可能会使用地图数据和 gps 定位来指导用户前往起止站点。

3.3 乘车***管理

乘车码是通过 qr 码(quick response code)技术生成的,它比传统的 bar code 条形码能存更多的信息,也能表示更多的数据类型,如图所示:

**的生成非常简单,拿 go 语言来举例,只需引入一个三方库:

import "github.com/skip2/go-qrcode"func main() else /定义背景色 qr.foregroundcolor = color.white //定义前景色 qr.writefile(256,".wechatgzh_qrcode.png") 转成**保存 }}
以下是该功能用户和系统之间的交互、**信息存储、以及高并发请求处理的详细说明:

4.2 未来发展

公交车/地铁乘车系统的未来发展可以包括以下方向:

智能化乘车: 引入智能设备,如人脸自动识别乘客、人脸扣款等。大数据分析: 利用大数据技术分析乘车数据,提供更好的服务。在设计和发展过程中,也要不断考虑用户体验、性能和安全,确保系统能够满足不断增长的需求。

质疑!多地公交系统停运!公交车背后的民生真相!

全城公交停运引发人们的恐慌公共交通是城市发展的重要标志之一,它不仅方便了居民和游客的出行,也促进了城市的繁荣。在一线城市如北京 上海和广州,地铁和公交车已经成为了主要的出行方式。然而,近些年来,一些二三线城市却出现了公交公司选择全部停运公交线路的情况,引发了人们的恐慌。公共交通是如此基础和重要的设施...

电动汽车交流充电桩系统设计方案

电动汽车交流充电桩系统设计方案主要包括以下几个方面 技术支持 acrelzwh .系统架构 采用分层架构设计,包括硬件层 通信层 应用层和管理层。硬件层包括充电桩 充电插头 电池管理系统等 通信层负责设备之间的数据传输和通信 应用层包括充电控制 计费管理 用户交互等功能 管理层包括系统管理 设备管理...

公交欠薪,地铁欠薪,一个又一个信号接连来袭

近段时间,公交和地铁行业问题频出。比如,公交出现了因为长期拖欠公交车司机薪酬导致停运的现象,连直辖市天津也传出了拖欠公交车司机薪酬 断缴医保的新闻。不仅仅是公交,地铁这里也是如此,多地地铁公司正在进行变革,取消各种给予市民的乘车优惠,非早晚高峰时期停运电梯,上海地铁大降薪,昆明地铁欠薪数月。到底是怎...