课堂练习----结对开发地铁
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
课堂练习----结对开发地铁相关推荐
- 软件工程课堂作业(八)——结对开发(三)
一.题目及要求: 题目:返回一个整数数组中最大子数组的和. 要求(新加):①要求程序必须能处理1000个元素:②每个元素都是int32类型的. 结对人员:焦燕 胡亚宝 二.设计思路: ①处理100 ...
- 结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)
一.题目及题目要求 题目:返回一个整数数组中最大子数组的和. 要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果 ...
- 结对开发--求二维数组的最大子数组
小组成员:信1201-1班 黄亚萍 信1201-1班 袁亚姣 一.题目要求 程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是: 数组的行数, 数组的列数, 每一行的元素, ...
- python信息管理系统实战_最新python入门+进阶+实战课堂教学管理系统开发全套完整版...
Python+pillow图像编程1:pillow扩展库安装与基础用法.avi Python+pillow图像编程2:Image子模块用法1.avi Python+pillow图像编程3:Image子 ...
- 结对开发 随机产生数组并求最大子数组的和
一.题目 返回一个整数数组中最大子数组的和. 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O( ...
- 结对开发——一维数组最大子数组判断溢出
一 题目 求一维数组最大子数组和 要求:1000个数以上,整数 二.设计思路 最大子数组很好找到,但是子数组和的溢出问题很难解决. 经过不断的思考,我得出了结论: 溢出是程程序设计者设计时的不足所带来 ...
- 结对开发2(求二维数组的最大子数组和)
一,题目要求: 输入一个二维数组,求出此二维数组的最大子数组和. 二,设计思路: 利用for循环进行遍历,求出数组中每一个子数组的和,最终求出这些子数组的最大的一个值.程序中利用了调用函数,被调函数分 ...
- 结对开发——返回一个整数数组中最大子数组的和
一.题目要求 1.输入一个整型数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 ...
- 软工结对项目——地铁
软工结对项目--地铁 一.项目地址 二.PSP表格 三.解题思路描述 3.1 功能说明 3.2 实现找到两站之间的路径 3.3 实现遍历所有地铁站 3.4 GUI图形界面输出路径 四.设计实现过程 4 ...
最新文章
- 奇奇怪怪的冒泡排序 TOJ 2014: Scramble Sort
- Linux System Programming --Chapter Eight
- 如果不能调试存储过程
- linux忘记root密码怎么办
- Hadoop学习之MapReduce(二)
- SAP Commerce(原Hybris)的订单处理框架和SAP CRM One Order框架
- 树莓派4上跑 .NET Core 3.0,这次,真·64位!
- Matlab——图像缩放(插值法)
- 信息学奥赛一本通(1136:密码翻译)
- zsh关于.zprofile .zlogin .zshrc .zshenv文件中环境变量的加载
- 【20160924】GOCVHelper MFC增强算法(2)
- 属兔的人有什么缺点呢?
- kuberneters dashboard认证及分级授权
- 2020最新文本检测算法TextFuseNet
- cpu win10 安装yolo_Win10 超详细 0基础 搭建YOLOV5教程【环境搭建篇】
- win7下安装PADS2007
- 微信公众平台接口调试工具json格式不对怎么搞_关于测试一个接口的面试题
- [MTK][FAQ20888] 开关机、重启时间优化
- 大淘客php源码美化版,【完整包】大淘客cms升级源码v12221 大淘客二次开发源码 - 下载 - 搜珍网...
- ImportError: cannot import name ‘_validate_lengths‘解决方法
热门文章
- 概率统计·概率论的基本概念【条件概率】
- Vijos P1098 合唱队形题解
- [Luogu] P3413 萌数
- psql 无法连接数据库,报错FATAL:53300
- 录屏软件怎么选?你真的选对了吗?
- 微信头像昵称获取能力的变化导致了我半年没更新小程序
- SQL中只要用到聚合函数就一定要用到group by 吗?
- MATLAB中close函数的使用
- 特斯拉自动驾驶靠自研芯片,国产智能汽车怎么办?
- Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十(商品的规格类型以及参数管理)