1.开发一套石家庄地铁线路查询系统。

2.功能设计

(1)数据库设计:将石家庄地铁线路图的各个线路,各个站点,换乘信息等用数据库的形式保存起来,应该保存的信息有 {线路号,线路的各个站名,车站的换乘信息}。

(2)站点查询:用户可以输入任一一条线路或输入出发地和目的地信息,可以查询到相关内容。

例如输入出发地:石家庄铁道大学   目的地 博物院

返回经历的站名的个数,和路径,如果有换乘,请列出换乘的线路

后台:

  1 package com.test.dijkstra;
  2
  3 import java.util.ArrayList;
  4 import java.util.HashSet;
  5 import java.util.List;
  6 import java.util.Set;
  7
  8
  9 public class DataBuilder {
 10
 11     public static List<Station> line1 = new ArrayList<Station>();//1号线
 12     public static List<Station> line2 = new ArrayList<Station>();//2号线
 13     public static List<Station> line3 = new ArrayList<Station>();//3号线
 14     public static List<Station> line10 = new ArrayList<Station>();//4号线
 15     public static List<Station> lineS1 = new ArrayList<Station>();//5号线
 16     public static List<Station> lineS8 = new ArrayList<Station>();//6号线
 17     public static Set<List<Station>> lineSet = new HashSet<List<Station>>();//所有线集合
 18     public static int totalStaion = 0;//总的站点数量
 19     static {
 20         //1号线
 21         String line1Str = "上庄南、上庄、西王、时光街、长城桥、和平医院、烈士陵园、新百广场、解放广场、平安大街、北国商城、博物院、体育场、北宋、谈固、朝晖桥、白佛、留村、火炬广场、石家庄东、南村、洨河大道、西庄、东庄、会展中心、行政中心、园博园、天元湖、东上泽、东洋";
 22         String[] line1Arr = line1Str.split("、");
 23         for(String s : line1Arr){
 24             line1.add(new Station(s));
 25         }
 26         for(int i =0;i<line1.size();i++){
 27             if(i<line1.size()-1){
 28                 line1.get(i).next = line1.get(i+1);
 29                 line1.get(i+1).prev = line1.get(i);
 30             }
 31         }
 32
 33         /*******************************************************************************/
 34         //2号线
 35         String line2Str = "西古城、铁道大学、运河桥、蓝天圣木、长安公园、北国商城、大戏院、新世隆、东岗头、东三教、石家庄站、塔谈、塔谈南、南位、嘉华 ";
 36         String[] line2Arr = line2Str.split("、");
 37         for(String s : line2Arr){
 38             line2.add(new Station(s));
 39         }
 40         for(int i =0;i<line2.size();i++){
 41             if(i<line2.size()-1){
 42                 line2.get(i).next = line2.get(i+1);
 43                 line2.get(i+1).prev = line2.get(i);
 44             }
 45         }
 46
 47         /*******************************************************************************/
 48         //3号线
 49         String line3Str = "西三庄、水上公园、柏林庄、市庄、市二中、新百广场、东里、槐安桥、西三教、石家庄站、东广场、孙村、塔冢、东王、南王、位同、三教堂、中仰陵、天山大街、南豆、韩通、北乐乡";
 50         String[] line3Arr = line3Str.split("、");
 51         for(String s : line3Arr){
 52             line3.add(new Station(s));
 53         }
 54         for(int i =0;i<line3.size();i++){
 55             if(i<line3.size()-1){
 56                 line3.get(i).next = line3.get(i+1);
 57                 line3.get(i+1).prev = line3.get(i);
 58             }
 59         }
 60
 61         /*******************************************************************************/
 62         //10号线
 63         String line10Str = "碧水蓝湾、东良厢、华医学院、法商学院、滨河街、京广东街、塔谈南、南栗、南焦客运站、赵卜口、南王、经济学院、东明商城、儿童医院、北宋、长安医院、建华市场、北翟营、十里铺、南高营、交通驾校";
 64         String[] line10Arr = line10Str.split("、");
 65         for(String s : line10Arr){
 66             line10.add(new Station(s));
 67         }
 68         for(int i =0;i<line10.size();i++){
 69             if(i<line10.size()-1){
 70                 line10.get(i).next = line10.get(i+1);
 71                 line10.get(i+1).prev = line10.get(i);
 72             }
 73         }
 74
 75         /*******************************************************************************/
 76         //s1号线
 77         String lineS1Str = "宫家庄、法商学院、东五里、碧海云天、审计厅、益友百货、和平医院、西焦、合作路、农科院、火车北站、市庄、军械学院、蓝天圣木、常青园、建华市场、南翟营\r\n" +
 78                 "";
 79         String[] lineS1Arr = lineS1Str.split("、");
 80         for(String s : lineS1Arr){
 81             lineS1.add(new Station(s));
 82         }
 83         for(int i =0;i<lineS1.size();i++){
 84             if(i<lineS1.size()-1){
 85                 lineS1.get(i).next = lineS1.get(i+1);
 86                 lineS1.get(i+1).prev = lineS1.get(i);
 87             }
 88         }
 89
 90         /*******************************************************************************/
 91         //s8号线
 92         String lineS8Str = "东明商城、国际城、二十里铺、留村、星辰广场、北豆、南豆、东仰陵、北郗马、东佐";
 93         String[] lineS8Arr = lineS8Str.split("、");
 94         for(String s : lineS8Arr){
 95             lineS8.add(new Station(s));
 96         }
 97         for(int i =0;i<lineS8.size();i++){
 98             if(i<lineS8.size()-1){
 99                 lineS8.get(i).next = lineS8.get(i+1);
100                 lineS8.get(i+1).prev = lineS8.get(i);
101             }
102         }
103
104         lineSet.add(line1);
105         lineSet.add(line2);
106         lineSet.add(line3);
107         lineSet.add(line10);
108         lineSet.add(lineS1);
109         lineSet.add(lineS8);
110         totalStaion  = line1.size() + line2.size() + line3.size() + line10.size() + lineS1.size() + lineS8.size();
111         System.out.println("总的站点数量:"+totalStaion);
112     }
113 }

 1 package com.test.dijkstra;
 2
 3 import java.util.HashMap;
 4 import java.util.LinkedHashSet;
 5 import java.util.Map;
 6
 7
 8 public class Station {
 9
10     private String name;
11     public Station prev;
12     public Station next;
13     private Map<Station,LinkedHashSet<Station>> orderSetMap = new HashMap<Station,LinkedHashSet<Station>>();
14
15     public Station (String name){
16         this.name = name;
17     }
18
19     public String getName() {
20         return name;
21     }
22
23     public void setName(String name) {
24         this.name = name;
25     }
26
27     public LinkedHashSet<Station> getAllPassedStations(Station station) {
28         if(orderSetMap.get(station) == null){
29             LinkedHashSet<Station> set = new LinkedHashSet<Station>();
30             set.add(this);
31             orderSetMap.put(station, set);
32         }
33         return orderSetMap.get(station);
34     }
35
36     public Map<Station, LinkedHashSet<Station>> getOrderSetMap() {
37         return orderSetMap;
38     }
39
40     @Override
41     public boolean equals(Object obj) {
42         if(this == obj){
43             return true;
44         } else if(obj instanceof Station){
45             Station s = (Station) obj;
46             if(s.getName().equals(this.getName())){
47                 return true;
48             } else {
49                 return false;
50             }
51         } else {
52             return false;
53         }
54     }
55
56     @Override
57     public int hashCode() {
58         return this.getName().hashCode();
59     }
60 }

  1 package com.test.dijkstra;
  2
  3 import java.util.ArrayList;
  4 import java.util.LinkedHashSet;
  5 import java.util.List;
  6 import java.util.Scanner;
  7
  8
  9
 10 public class Subway {
 11
 12     private List<Station> outList = new ArrayList<Station>();
 13     public void calculate(Station s1,Station s2){
 14         if(outList.size() == DataBuilder.totalStaion){
 15             System.out.println("找到目标站点:"+s2.getName()+",共经过"+(s1.getAllPassedStations(s2).size()-1)+"站");
 16             for(Station station : s1.getAllPassedStations(s2)){
 17                 System.out.print(station.getName()+"->");
 18             }
 19             return;
 20         }
 21         if(!outList.contains(s1)){
 22             outList.add(s1);
 23         }
 24         if(s1.getOrderSetMap().isEmpty()){
 25             List<Station> Linkedstations = getAllLinkedStations(s1);
 26             for(Station s : Linkedstations){
 27                 s1.getAllPassedStations(s).add(s);
 28             }
 29         }
 30         Station parent = getShortestPath(s1);
 31         if(parent == s2){
 32             System.out.println("找到目标站点:"+s2+",共经过"+(s1.getAllPassedStations(s2).size()-1)+"站");
 33             for(Station station : s1.getAllPassedStations(s2)){
 34                 System.out.print(station.getName()+"->");
 35             }
 36             return;
 37         }
 38         for(Station child : getAllLinkedStations(parent)){
 39             if(outList.contains(child)){
 40                 continue;
 41             }
 42             int shortestPath = (s1.getAllPassedStations(parent).size()-1) + 1;
 43             if(s1.getAllPassedStations(child).contains(child)){
 44                 if((s1.getAllPassedStations(child).size()-1) > shortestPath){
 45                     s1.getAllPassedStations(child).clear();
 46                     s1.getAllPassedStations(child).addAll(s1.getAllPassedStations(parent));
 47                     s1.getAllPassedStations(child).add(child);
 48                 }
 49             } else {         s1.getAllPassedStations(child).addAll(s1.getAllPassedStations(parent));
 50                 s1.getAllPassedStations(child).add(child);
 51             }
 52         }
 53         outList.add(parent);
 54         calculate(s1,s2);
 55     }
 56     private Station getShortestPath(Station station){
 57         int minPatn = Integer.MAX_VALUE;
 58         Station rets = null;
 59         for(Station s :station.getOrderSetMap().keySet()){
 60             if(outList.contains(s)){
 61                 continue;
 62             }
 63             LinkedHashSet<Station> set  = station.getAllPassedStations(s);
 64             if(set.size() < minPatn){
 65                 minPatn = set.size();
 66                 rets = s;
 67             }
 68         }
 69         return rets;
 70     }
 71     private List<Station> getAllLinkedStations(Station station){
 72         List<Station> linkedStaions = new ArrayList<Station>();
 73         for(List<Station> line : DataBuilder.lineSet){
 74             if(line.contains(station)){
 75                 Station s = line.get(line.indexOf(station));
 76                 if(s.prev != null){
 77                     linkedStaions.add(s.prev);
 78                 }
 79                 if(s.next != null){
 80                     linkedStaions.add(s.next);
 81                 }
 82             }
 83         }
 84         return linkedStaions;
 85     }
 86
 87     public static void main(String[] args) {
 88         long t1 = System.currentTimeMillis();
 89         Subway sw = new Subway();
 90          Scanner sc = new Scanner(System.in);
 91          System.out.println("请输入起点站:");
 92          String s1 = sc.nextLine();
 93          System.out.println("请输入终点站:");
 94          String s2 = sc.nextLine();
 95         sw.calculate(new Station(s1), new Station(s2));
 96         long t2 = System.currentTimeMillis();
 97         System.out.println();
 98         System.out.println("耗时:"+(t2-t1)+"ms");
 99     }
100 }

项目并不完善。

转载于:https://www.cnblogs.com/zhangzhongkun/p/11061031.html

课堂练习----结对开发地铁相关推荐

  1. 软件工程课堂作业(八)——结对开发(三)

    一.题目及要求: 题目:返回一个整数数组中最大子数组的和. 要求(新加):①要求程序必须能处理1000个元素:②每个元素都是int32类型的. 结对人员:焦燕   胡亚宝 二.设计思路: ①处理100 ...

  2. 结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)

    一.题目及题目要求 题目:返回一个整数数组中最大子数组的和. 要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果 ...

  3. 结对开发--求二维数组的最大子数组

    小组成员:信1201-1班  黄亚萍 信1201-1班  袁亚姣 一.题目要求 程序要使用的数组放在一个叫 input.txt 的文件中,  文件格式是: 数组的行数, 数组的列数, 每一行的元素,  ...

  4. python信息管理系统实战_最新python入门+进阶+实战课堂教学管理系统开发全套完整版...

    Python+pillow图像编程1:pillow扩展库安装与基础用法.avi Python+pillow图像编程2:Image子模块用法1.avi Python+pillow图像编程3:Image子 ...

  5. 结对开发 随机产生数组并求最大子数组的和

    一.题目 返回一个整数数组中最大子数组的和. 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O( ...

  6. 结对开发——一维数组最大子数组判断溢出

    一 题目 求一维数组最大子数组和 要求:1000个数以上,整数 二.设计思路 最大子数组很好找到,但是子数组和的溢出问题很难解决. 经过不断的思考,我得出了结论: 溢出是程程序设计者设计时的不足所带来 ...

  7. 结对开发2(求二维数组的最大子数组和)

    一,题目要求: 输入一个二维数组,求出此二维数组的最大子数组和. 二,设计思路: 利用for循环进行遍历,求出数组中每一个子数组的和,最终求出这些子数组的最大的一个值.程序中利用了调用函数,被调函数分 ...

  8. 结对开发——返回一个整数数组中最大子数组的和

    一.题目要求 1.输入一个整型数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 ...

  9. 软工结对项目——地铁

    软工结对项目--地铁 一.项目地址 二.PSP表格 三.解题思路描述 3.1 功能说明 3.2 实现找到两站之间的路径 3.3 实现遍历所有地铁站 3.4 GUI图形界面输出路径 四.设计实现过程 4 ...

最新文章

  1. 奇奇怪怪的冒泡排序 TOJ 2014: Scramble Sort
  2. Linux System Programming --Chapter Eight
  3. 如果不能调试存储过程
  4. linux忘记root密码怎么办
  5. Hadoop学习之MapReduce(二)
  6. SAP Commerce(原Hybris)的订单处理框架和SAP CRM One Order框架
  7. 树莓派4上跑 .NET Core 3.0,这次,真·64位!
  8. Matlab——图像缩放(插值法)
  9. 信息学奥赛一本通(1136:密码翻译)
  10. zsh关于.zprofile .zlogin .zshrc .zshenv文件中环境变量的加载
  11. 【20160924】GOCVHelper MFC增强算法(2)
  12. 属兔的人有什么缺点呢?
  13. kuberneters dashboard认证及分级授权
  14. 2020最新文本检测算法TextFuseNet
  15. cpu win10 安装yolo_Win10 超详细 0基础 搭建YOLOV5教程【环境搭建篇】
  16. win7下安装PADS2007
  17. 微信公众平台接口调试工具json格式不对怎么搞_关于测试一个接口的面试题
  18. [MTK][FAQ20888] 开关机、重启时间优化
  19. 大淘客php源码美化版,【完整包】大淘客cms升级源码v12221 大淘客二次开发源码 - 下载 - 搜珍网...
  20. ImportError: cannot import name ‘_validate_lengths‘解决方法

热门文章

  1. 概率统计·概率论的基本概念【条件概率】
  2. Vijos P1098 合唱队形题解
  3. [Luogu] P3413 萌数
  4. psql 无法连接数据库,报错FATAL:53300
  5. 录屏软件怎么选?你真的选对了吗?
  6. 微信头像昵称获取能力的变化导致了我半年没更新小程序
  7. SQL中只要用到聚合函数就一定要用到group by 吗?
  8. MATLAB中close函数的使用
  9. 特斯拉自动驾驶靠自研芯片,国产智能汽车怎么办?
  10. Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十(商品的规格类型以及参数管理)