北京地铁规划项目总结报告

本项目已上传Github:

  • 问题重述:

  • 任务:

    •   实现一个帮助进行地铁出行线路规划的命令行程序

      1.   实现加载地铁线路信息
      2. 实现查询指定地铁线路信息
      3. 实现从指定出发地到目的地的最短路径查询
  • 设计:

  • 采用语言:java
  • GitHub链接:https://github.com/xixihaha54/subway
  • 主要模块介绍:
    序号 模块名 功能 对应java类
    1 主模块(subway) 对输入参数的控制 Subway.java
    2 文件输入输出模块 txt文件的读写 DataBuilder.java
    3 求最短路径(dij算法) 实现两个类的相互连接 Station.java
  • 需求1:文本的导入
  • public static List<String> getFileContent(String path) {
    List<String> strList = new ArrayList<String>();
    File file = new File(path);
    InputStreamReader read = null;
    BufferedReader reader = null;
    try {
    read = new InputStreamReader(new FileInputStream(file));
    reader = new BufferedReader(read);
    String line;
    while ((line = reader.readLine()) != null) {
    strList.add(line);
    }
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    if (read != null) {
    try {
    read.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    if (reader != null) {
    try {
    reader.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    }
    return strList;

    }

  • 需求二未完成
  • 需求三
  • public class Subway {

    private List<Station> outList = new ArrayList<Station>();//记录已经分析过的站点

    private void search(Station string) {
    // TODO Auto-generated method stub
    if(outList.size() == DataBuilder.totalStaion){
    String a = string.getLinename();
    }
    return;
    }

    public void calculate(Station s1,Station s2){
    if(outList.size() == DataBuilder.totalStaion){
    System.out.println("找到目标站点:"+s2.getName()+",共经过"+(s1.getAllPassedStations(s2).size()-1)+"站");
    for(Station station : s1.getAllPassedStations(s2)){
    System.out.println(station.getName()+" (" +station.getLinename()+")");
    }
    return;
    }
    if(!outList.contains(s1)){
    outList.add(s1);
    }

    if(s1.getOrderSetMap().isEmpty()){
    List<Station> Linkedstations = getAllLinkedStations(s1);
    for(Station s : Linkedstations){
    s1.getAllPassedStations(s).add(s);
    }
    }

    Station parent = getShortestPath(s1);
    if(parent == s2){
    System.out.println("找到目标站点:"+s2+",共经过"+(s1.getAllPassedStations(s2).size()-1)+"站");
    for(Station station : s1.getAllPassedStations(s2)){
    System.out.print(station.getName()+" (" +station.getLinename()+")");
    }
    return;
    }
    for(Station child : getAllLinkedStations(parent)){
    if(outList.contains(child)){
    continue;
    }
    int shortestPath = (s1.getAllPassedStations(parent).size()-1) + 1;
    if(s1.getAllPassedStations(child).contains(child)){

    if((s1.getAllPassedStations(child).size()-1) > shortestPath){
    //重置S1到周围各站的最小路径
    s1.getAllPassedStations(child).clear();
    s1.getAllPassedStations(child).addAll(s1.getAllPassedStations(parent));
    s1.getAllPassedStations(child).add(child);
    }
    } else {
    //如果s1还没有计算过到此child的经过距离
    s1.getAllPassedStations(child).addAll(s1.getAllPassedStations(parent));
    s1.getAllPassedStations(child).add(child);
    }
    }
    outList.add(parent);
    calculate(s1,s2);
    }

    private Station getShortestPath(Station station){
    int minPatn = Integer.MAX_VALUE;
    Station rets = null;
    for(Station s :station.getOrderSetMap().keySet()){
    if(outList.contains(s)){
    continue;
    }
    LinkedHashSet<Station> set = station.getAllPassedStations(s);
    if(set.size() < minPatn){
    minPatn = set.size();
    rets = s;
    }
    }
    return rets;
    }

    private List<Station> getAllLinkedStations(Station station){
    List<Station> linkedStaions = new ArrayList<Station>();
    for(List<Station> line : DataBuilder.lineSet){
    if(line.contains(station)){
    Station s = line.get(line.indexOf(station));
    if(s.prev != null){
    linkedStaions.add(s.prev);
    }
    if(s.next != null){
    linkedStaions.add(s.next);
    }
    }
    }
    return linkedStaions;
    }

  • 输出结果


  •  总结
  • 本次作业并没有完成所有的要求,同时也发现了自身的编程能力存在不足,同时在想修改代码时发现总体的代码框架也需要修改,下次做编程时一开始就得有大的方向

原文地址:https://www.cnblogs.com/xiaoxiao54/p/11674718.html

时间: 2024-08-25 12:53:53

北京地铁规划项目总结报告的相关文章

北京地铁规划项目总结

一.项目介绍 实现一个帮助进行地铁出行路线规划的命令行程序. github链接:https://github.com/blakeyoungc/subway 主要需求:1.地铁线路图信息的导入     2.查询指定地铁线经过的站点 3.计算从出发到目的站点之间的最短(经过的站点数最少)路线,并输出经过的站点的个数和路径(包括出发与目的站点). 采用https://map.bjsubway.com/上的北京地铁线路图:  二.需求实现 主要模块介绍: 序号 模块名 功能 对应java类 1 主模块(

地铁规划项目需求理解和设计思路

地铁规划项目需求理解和设计思路 需求理解 将地铁线路保存成一个可读入,简洁明了的文本 程序能正确读入这个文件,并获取地铁线路信息 程序能正确处理输入的命令行 地铁能正确输出指定地铁线经过的站点 程序能正确输出两个站点间的最短路径 程序要有健壮性,能通过各类性能测试 按要求编写博客,详细说明花费时间,代码,各个模块和测试用例 设计思路 文本格式 1号线 刘园 西横堤 果酒厂 本溪路 勤俭道..... 2号线 曹庄 卞兴 荠园西道 咸阳路...... 3号线 小淀 丰产河 华北集团...... 按照

个人项目--北京地铁线路规划(已完成)

一.任务: 实现一个帮助进行北京地铁出行路线规划的命令行程序. 二.需求分析及实现 需求1 在程序启动时,自动获取到地图信息 需要实现一个支持自动加载subway.txt 文件的程序 需求2 查询指定地铁线经过的站点 在应用程序上,需要支持一个新的命令行参数  -a ,指定用户希望查询的地铁线路. 在给定地铁线路时,程序需要从线路的起始站点开始,依次输出该地铁线经过的所有站点,直到终点站.输出的文件使用-o参数来指定. 一个调用应用程序的示例如下: java subway -a 1号线 -map

个人项目——北京地铁线路规划

一.前言 现实和理想的差距总是那么大,在过程中碰到的坑比预期的还多(说那么多,其实就是自己菜),过程中复习了淡忘已久的许多算法和数据结构,一边深刻的体会着自己是多菜,一边也体会到了自身一点点微小的进步,大概. 二.项目简介 实现北京地铁查询功能 附上一张北京地铁的图: 三.项目地址 https://github.com/fireworks-EX/MetroLinePlanning 四.需求分析 1.确定储存及读取地铁线路数据文件的格式 2.支持用户输入的地铁线路的查询 3.提供用户指定两站点间的

北京地铁线路规划

北京地铁线路规划 任务 个人项目的主要任务就是通过地铁出行的人能够通过该软件很快找到最快到达目的地的出行线路规划. 项目需求 用户根据-map参数来获得所有北京地铁线路信息 java subway -map subway.txt 那么这里的重点就在于如何存储这个subway.txt文件了,首先我们还是看一张北京地铁1号线的图 ![](https://img2018.cnblogs.com/blog/1806411/201909/1806411-20190922113916097-18761194

北京地铁最短线路规划

一.项目需求 设计一个能进行北京地铁最短线路规划的程序. 二.文件存储 用一个名为data.txt的文件来存储所有北京地铁线路及站点信息,如下所示. 三.算法代码 本次项目的设计用到的语言是java语言,主要的规划最短路径的算法采用dijkstra算法 public class PathControl { private static List<Station> analysisList = new ArrayList<>(); private static HashMap<

北京地铁_结对项目_附加题

地铁出行项目(续)- 附加题 团队成员:杨金键 谢振威 金豪 要求描述: 使程序支持不同城市的地图.请让程序能处理上海的地铁地图,或者其它城市的地图.把程序由 “固定处理一个地图” 升级为 “能处理多个地图”, 程序的什么模块需要变化? 其实,在我们设计程序之初就已经考虑到了程序将来的可扩展性,所以无论是地图储存文件还是代码我们都是从这个角度出发考虑的. 具体来说: 取消所有对于北京地图的特殊化处理,针对特殊的地方,例如环线或者单行线则定义关键词统一处理 所有地图相关信息都靠文件读取,避免地图相

天津地铁出行线路规划项目需求分析与设计思路分析

天津地铁出行线路规划项目需求分析与设计思路分析 项目概要 以下是天津地铁线路总图,本项目的受众可以通过本软件,获得天津市地铁出行最便捷,最快速的线路推荐. 需求分析 实现一个帮助进行地铁出行路线规划的命令行程序. 支持地铁线路的更改,站点更改.取消与添加,以及线路的局部封闭. 支持查询线路的所有站点. 支持查询到某终止站点的途径最少站点的路线. 数据存储结构分析 由于单一的线路表与站点表是无法表示如此复杂的地铁线路情况的. 有多个前驱的站点如:,以及有多个后继的站点如:,这种情况无法只通过这两个

北京地铁项目

北京地铁项目 github:https://github.com/leo-xlz/Subway-beijing 模块分析----- zucc.edu.cn.model 存放站点信息和路径信息 station.java private String name;//站点名字 private String line;//所属路线 private List<Station> linkStations = new ArrayList<>();//相邻连接站点 routine.java · p