武汉地铁模拟系统

思路

一、系统组成

  1. MySQL数据库subway

    • station: 保存站点信息

      • name站点名 : String
      • id站点ID : int
    • route: 保存地铁路线
      • id路线ID : int读取时分配
      • name路线名 : String
      • path途径站点: String
        • 站点ID,用逗号(,)分割,保存为字符串
        • 读取时.split(",")
    • link: 保存两个站点之间的路线信息
      • from_id起始站点ID : int
      • to_id到达站点ID : int
      • belong_id所属路线ID : int
      • dist距离 : double
  2. 数据结构:

    • Station类:

      • 站点名 : String
      • 站点ID : int
    • Route类:
      • 路线ID : int
      • 路线名 : String
      • 途径站点: int[],保存所有途径站点的ID
    • Link类:
      • 起始站点ID : int
      • 到达站点ID : int
      • 所属路线ID : int
      • 距离 : double
  3. 系统结构:

    • SubwaySystem类:

      • Map<Integer, Station> stations
      • List<List<Link>> links
      • Map<String, Route> routes
      • 见下方
      • 所有交互方法
    • Payment类:
      • 抽象类
      • 传入距离,根据规则与支付方式计算金额
    • RegularTicket类:普通买票
      • WuhanCard类:继承RegularTicket,武汉通九折
    • OneDayTicket类:一日票

二、起始步骤

  1. subway.txt中完全读取信息,存入MySQL(仅首次运行代码时执行)
  2. MySQL中读取数据到代码数据结构
    • station -> Map<Integer, Station> stations,创建ID到站点实例的映射关系,这里是全代码中唯一获取站点名的方法,代码中其余部分站点均使用ID表示
    • link -> List<List<Link>> links 创建邻接链表
      • 使用邻接链表:两个相邻中转站(Route的交点)有不同的信息
    • route -> Map<String, Route> routes 创建路线名->路线实例的映射关系

三、解题思路

  1. 给定站点名,返回经过该站点的所有路线的名称集合

    • 获取ID
    • routes中寻找包含该ID的路线,保存路线的名称
  2. 给定线路名和终点方向,返回该路线中所有站点的顺序列表

    • routes获取路线实例
    • 判断方向
    • 利用stations打印输出
  3. 给定起点站和终点站的名称,返回一条最短路径,该路径是一个从起点开始直到终点,所需要经过的所有站点的数组

    • stations获取ID
    • 利用Dijkstra算法寻找最短(长度最短)路
    • 利用Floyd算法寻找目标路径
      • 路径最短
      • 换乘最少
        • 思路:对换乘添加惩罚
    • 保存最短路径点与点之间的Link信息 -> List<Link>
    • 生成最短路径 -> List<Integer>
    • 利用stations打印输出
  4. 当找到最短乘车路径后,我们需要把它以更方便的形式呈献给用户。请实现一个方法,将路径以简洁的形式打印至标准输出。

    • 利用上一问中返回的List<Link>
    • 利用Link类中“所属路线ID”属性处理转车情况
    • 输出
  5. 对于给定路径,计算其对应的乘车费用(普通单程票)

    • 根据消费策略输出对应金额
    • 使用抽象类,实现double pay(double distace)接口
  6. 对于同样的路径,计算使用武汉通和日票的乘客的票价(日票返回0元)

    • 简单输出
  7. 添加图形界面

    • TODO

用例图

武汉地铁模拟系统的用例“查询两站点间的最少换乘路径并计算所有费用”的描述如下:

  • 简要说明:系统根据用户输入的起点站与终点站,输出其间的最少换乘路径与各种付款方式所需的费用
  • 主事件流:
    • 用户在图形界面上选择“最少换乘”功能
    • 用户输入起点站与终点站
    • 系统根据用户输入的信息查询其间的最少换乘路径
    • 系统计算路径的总长度,据此计算三种付费方式所需支付的费用
    • 系统将所有结果输出到图形界面的文本框中
    • 事件结束
  • 其他事件流:
    • 如果输入的起点站与终点站信息错误,或找不到一条可行的路线,系统在图形界面的文本框中给出错误提示
  • 前提条件:
    • 用户选择了“最少换乘”功能
    • 用户输入了起点站与终点站
    • 用户按下了“查询按钮”
  • 事后条件:
    • 图形界面的文本框里

      • 若系统查询到可行路线,输出换乘信息、总站数、总里程数、各种支付方式所需费用
      • 若系统未查询到可行路线,或用户错误输入,输出错误提示
    • 输入文本框“起点站”与“终点站”清空

系统类图

总里程数、各种支付方式所需费用
- 若系统未查询到可行路线,或用户错误输入,输出错误提示

  • 输入文本框“起点站”与“终点站”清空

基于Java实现的武汉地铁模拟系统相关推荐

  1. 基于Dijkstra算法的武汉地铁路径规划!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:牧小熊,华中农业大学,Datawhale原创作者 前言 最近爬取了 ...

  2. 基于Dijkstra算法的武汉地铁路径规划!(附下载)

    来源:Datawhale 本文约3300字,建议阅读10分钟 本文为你详解路径规划项目,附源码链接. 前言 最近爬取了武汉地铁线路的信息,通过调用高德地图的api 获得各个站点的进度和纬度信息,使用D ...

  3. 【爬虫、算法】基于Dijkstra算法的武汉地铁路径规划!

    作者:牧小熊,华中农业大学,Datawhale原创作者 前言 最近爬取了武汉地铁线路的信息,通过调用高德地图的api 获得各个站点的进度和纬度信息,使用Dijkstra算法对路径进行规划. 1.数据爬 ...

  4. 【数学建模】基于matlab武汉地铁2号线路线地图动态模拟【含Matlab源码 1092期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数学建模]基于matlab武汉地铁2号线路线地图动态模拟[含Matlab源码 1092期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...

  5. 基于Java的SMTP协议邮件发送模拟系统

    目录 1. 原理分析 2. 前端页面 3. 数据库设计 4. 后端数据处理 5. 参考文献 6. 注意事项 1. 原理分析 SMTP协议 SMTP(Simple Mail Transfer Proto ...

  6. 基于java的学生信息管理系统(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 内容摘要    - 2 - 引言    - 4 - 学生信息管理系统开发的意义和目的    - ...

  7. 基于java的学生学籍管理系统(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 目录 内容摘要    - 2 - 引言    - 4 - 学生学籍管理系统开发的意义和目的   ...

  8. java毕业设计—— 基于java+JSP+SSH的婴幼儿产品销售系统设计与实现(毕业论文+程序源码)——婴幼儿产品销售系统

    基于java+JSP+SSH的婴幼儿产品销售系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+JSP+SSH的婴幼儿产品销售系统设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

  9. (附源码)基于java的校园二手书籍交易平台 毕业设计131558

    校园二手书籍交易平台的设计与实现 摘要 随着计算机技术和网络技术的迅速发展,网上购物已经融入了人们的日常生活中,电子商务也因此流行起来.国内的京东商城.天猫.苏宁易购等大型网站在图书销售等商品零售领域 ...

最新文章

  1. Linux 打包及压缩命令使用方法总结
  2. coc跑团san数值规则_为什么B站上有些coc跑团7版规则san值四五十,但是掉的时候只是掉1D3,是不是应该是20上限?...
  3. missing closing parenthesis at end of #pragma
  4. java实现插入排序算法 附单元测试源码
  5. 设计一个算法找一条从迷宫入口到出口的最短路径。_我花了一夜用数据结构给女朋友写个H5走迷宫游戏...
  6. 详解MySQL字符串函数CONCAT()、CONCAT_WS()、INSERT()、REPLACE()、LOWER()、UPPER()用法(二)
  7. Single Image Haze Removal(图像去雾)-CVPR’09 Best Paper
  8. 每天学一点flash(75) ToolTip 提示
  9. python爬取知乎live_Python爬虫从入门到放弃(十九)之 Scrapy爬取所有知乎用户信息(下)...
  10. 火狐浏览器快捷键大全
  11. 最低什么样的学历,才可以选择转行web前端?
  12. JMeter压力测试和性能优化
  13. ObjectiveC开发教程--如何判断字符串是否为空的方法
  14. 当面试官问你期望的薪资是多少的时候,他是这样回答的...
  15. OSChina 周六乱弹 —— 泡面就要泡着吃……
  16. 轻取帝国CMS管理员密码
  17. 笔记本和利用服务器算力直连,使用闲置服务器的CPU算力挖掘Monero—Windows篇
  18. uniapp:在HBuilderX里使用夜神模拟器
  19. LDA主题模型1——数学基础
  20. 解决Flutter键盘弹起导致与输入框有间距问题(Flutter键盘弹起Scaffold布局流程)解析

热门文章

  1. android listview 点击获取焦点,android – ListView项目焦点行为
  2. swift 中的 supportedInterfaceOrientationsForWindow
  3. oracle dba_waiters中的lockid是什么,Oracle 锁机制学习
  4. 反编译+混淆的攻守战
  5. 【项目展示】自己用C语言编写的象棋小程序
  6. 逆向教程-2014.08版电信爱游戏支付分析
  7. SaaSBase:推荐一些超好用的低代码开发软件(中篇)
  8. 奶爸日记27 - 画鱼
  9. oracle 按照lead,Oracle之Lead和Lag偏移量函数使用详解
  10. 常见七种逻辑门真值表