• 基于Java实现的武汉地铁模拟系统


    武汉地铁模拟系统

    思路

    一、系统组成

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

    二、起始步骤

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

    三、解题思路

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

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

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

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

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

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

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

      • TODO

    用例图

    在这里插入图片描述

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

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

    系统类图

    在这里插入图片描述

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

    • 输入文本框“起点站”与“终点站”清空
  • 相关阅读:
    elastic数据迁移或者修改mapping
    【前端知识】Three 学习日志(七)—— 动画渲染循环
    Linux基础篇之文件系统
    tmux 命令快速入门
    【Method】把 arXiv论文 转换为 HTML5 网页
    解决注册Kaggle出现的“Captcha must be filled out”问题
    5G网络助力智慧文旅发展:实现旅游资源的优化配置与高效利用
    Elasticsearch跨集群检索配置
    去雨去雪去雾数据集构建
    两道相似的三维dp动态规划题
  • 原文地址:https://blog.csdn.net/newlw/article/details/126763546