`
kongshanxuelin
  • 浏览: 931243 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

公交查询系统源码整理版

阅读更多

这里只是实现公交一次换乘的算法,如果有热心的网友提供二次换乘算法 ,非常感谢之共享,这里是我整理出的main可运行的类

package com.common.bus;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class SimpleBusArith {
	
	public static final String BUS_NO1="bus1";
	public static final String BUS_N02="bus2";
	public static final String BUS_CROSS_SITE="crosssite";
	
	private static boolean contain(String site, String[] sites) {
		for (int i = 0; i < sites.length; i++) {
			if (site.equals(sites[i]))
				return true;
		}
		return false;
	}

	public static Set<String> getSiteChange(Set<String> buses, List<Bus> sites) {
		Set<String> list = new HashSet();
		List<Bus> busList = change2BusList(buses, sites);
		for (int k = 0; k < busList.size(); k++) {
			Bus b = busList.get(k);
			String[] sx = b.getSx();
			for (int i = 0; i < sx.length; i++) {
				Set<String> bb = getSite(sx[i], sites);
				if (bb != null) {
					for (int j = 0; j < bb.size(); j++) {
						list.addAll(bb);
					}
				}
			}
		}
		return list;
	}

	public static Bus getBus(String siteno, List<Bus> sites) {
		for (int i = 0; i < sites.size(); i++) {
			if (siteno.equals(sites.get(i).getSiteno()))
				return sites.get(i);
		}
		return null;
	}

	public static Set<String> getSite(String siteName, List<Bus> sites) {
		Set<String> list = new HashSet();
		for (int i = 0; i < sites.size(); i++) {
			Bus bus = sites.get(i);
			String[] sx = bus.getShangxing();
			String[] xx = bus.getXiaxing();
			if (contain(siteName, sx) || contain(siteName, xx)) {
				list.add(bus.getSiteno());
			}
		}
		return list;
	}

	public static List<Bus> getCross(List<Bus> passA, List<Bus> passB) {
		int as = passA.size();
		int bs = passB.size();
		List<Bus> result = new ArrayList();
		for (int i = 0; i < as; i++) {
			Bus busa = passA.get(i);
			for (int j = 0; j < bs; j++) {
				Bus busb = passB.get(j);
				if (busa.getSiteno().equalsIgnoreCase(busb.getSiteno())) {
					result.add(busa);
				}
			}
		}
		return result;
	}
	
	/**
	 * buses:途经某公交线路与之有交集的所有公交
	 * bus:一次换乘的焦点公交
	 * 返回换乘的公交线路
	 */
	public static Set<HashMap> getCrossSite(Bus bus1,Bus bus2){
		if(bus1.getSiteno().equals(bus2.getSiteno())) return null;
		Set<HashMap> sites=new HashSet();
		String[] bus1_sx=bus1.getShangxing();
		String[] bus1_xx=bus1.getXiaxing();
		String[] bus2_sx=bus2.getShangxing();
		String[] bus2_xx=bus2.getXiaxing();
		Set<HashMap> sx=getArrayEqualElem(bus1,bus2,bus1_sx,bus2_sx);
		Set<HashMap> xx=getArrayEqualElem(bus1,bus2,bus1_xx,bus2_xx);
		sites.addAll(sx);
		sites.addAll(xx);
		return sites;
	}
	
	private static Set<HashMap> getArrayEqualElem(Bus bus1,Bus bus2,String[] str1,String[] str2){
		Set<HashMap> sites=new HashSet();
		for(int i=(str1.length-1);i>=0;i--){
			for(int j=0;j<str2.length;j++){
				if(str1[i].equals(str2[j])){
					HashMap hm=new HashMap();
					hm.put(BUS_NO1, bus1);
					hm.put(BUS_N02, bus2);
					hm.put(BUS_CROSS_SITE, str1[i]);
					sites.add(hm);
					//选择最优的一条线路返回,第一辆车坐的站数最多
					return sites;
				}
			}
		}
		return sites;
	}

	public static List<Bus> change2BusList(Set<String> bus, List<Bus> sites) {
		Iterator itr = bus.iterator();
		List<Bus> res = new ArrayList();
		while (itr.hasNext()) {
			String b = (String) itr.next();
			if (b == null) {
				continue;
			}
			Bus mybus = getBus(b, sites);
			res.add(mybus);
		}
		return res;
	}

	public static void main(String[] args) {
//		String[] b_1 = "南站、望湖市场、兴宁桥、濠河、江厦公园、外滩、宁大附属医院、白沙路、东鹰花园、大庆北路、大通桥、孔浦、半路凉亭、怡江新村、路林市场"
//				.split("、");
//		String[] b_2 = "颐乐园、华丰庄园、丁香路、老庙小学、腊梅路、滨江花苑、中宁花园(锦诚花园)、明晨紫月、科技园区管委会、老庙→、陆家村、交通·BOBO城、中兴北路、车管所、江南村、余隘、林家、柴家漕、城市元年、东胜路、庆安会馆、东门口(天一广场)、阳光广场、鼓楼、西门口、西河街、第二医院→、望京欧院→、新芝路←、高塘新村"
//				.split("、");
//		String[] b_3 = "松下站、松下村、王家弄、华光城、市公管处、华侨城、中兴樱花公园、甬港新村、舟孟北路、七塔寺、灵桥东、灵桥西(日新街)、药行街、解放南路、鼓楼、孝闻街、广仁街、华慈医院、传染病医院、育才家园、宁波电大、育才路、姚江公园、姚江"
//				.split("、");
//		String[] b_550 = ("保税东区、嵩山路站、开发区医院、国贸花园、北仑青少年宫、新恒路、绍成小学、慎业、宁波职业技术学院站、明港中学站、大碶车站、人民路站、徐洋、新安、湖塘、民乐、育王、宝幢、五乡镇政府、邱隘、浙东科技创业中心、"
//				+ "会展中心南大门、福明、汽车东站、市公管处、儿童公园、黄鹂新村、李惠利医院、兴宁桥东、望湖市场、宁波南站")
//				.split("、");
//		String[] b_901 = ("汽车东站、四号桥、三号桥、体育馆、家乐福、明园、朝晖新城、二号桥、甬港新村、朱雀新村、"
//				+ "宁波大厦→、公管处、福明路、报社印务中心、松下村老年公寓、浅水湾、海太工业园、邱隘大道、方庄、青年路、沈家村、农科所、万里学院东校区、回龙、金会锻件厂、伟隆机电(沙家垫)、"
//				+ "红林、东钱湖镇政府、莫枝农贸市场、钱湖新村、方边、岳王庙、湖塘村、国七寺(陶公园)、建设村、陶公村、湖心景区")
//				.split("、");
//		String[] b_906 = "南站、青少年宫、第一医院、天封塔、灵塔医院、琴桥东、贺丞新村、李惠利医院、飞虹新村、鄞州电视台、黄泥桥、小城花园、爱尔妮制衣公司(四明路)、格兰云天、前河路、华泰剑桥、万里学院、三星奥克斯、顾家、培罗成、下应镇、李关弟中学、江陆村、邵家弄、华艺服饰、黄隘村、钱湖工业区、红林、东钱湖镇政府、钱湖卫生院、莫枝农贸市场、钱湖新村、岳王庙、湖塘村、大公叉口、凤凰桥、冠英庄、隐学山庄、郭家峙"
//				.split("、");
//		String[] b_908 = "汽车东站、野马电池公司、王家湾、东海花园、中兴小区、家乐福、常青藤小城、车管所、江南社区、农药厂、塑料厂、曙光北路、宁波卷烟厂、曙光电影院、工人新村、汽车北站、大庆南路、槐树路、槐树新村、西草马路、新马路、北岸琴森、宁波大剧院、运河桥、姚江公园、宁波教育学院、宁波电大、育才家园"
//				.split("、");
//		String[] b_960 = "江家新村、邱隘大道、方庄、青年路、沈家村、农科所、万里学校、回龙、钱湖工业区、伟隆机电(沙家垫)、红林、东钱湖镇政府、钱湖医院、东钱湖镇、莫枝农贸市场、钱湖新村、方边、岳王庙、湖塘村、大公岔口、冠英庄、隐学山庄、郭家峙、韩岭、马山、上水村、石刻群、横街、福泉山景区、官驿河头、下水村、下水小学、绿野岙村、洋山村"
//				.split("、");
//		Bus bus_1 = new Bus("1", b_1);
//		Bus bus_2 = new Bus("2", b_2);
//		Bus bus_3 = new Bus("3", b_3);
//		Bus bus_550 = new Bus("550", b_550);
//		Bus bus_901 = new Bus("901", b_901);
//		Bus bus_906 = new Bus("906", b_906);
//		Bus bus_908 = new Bus("908", b_908);
//		Bus bus_960 = new Bus("960", b_960);
//		List<Bus> busList = new ArrayList();
//		busList.add(bus_1);
//		busList.add(bus_2);
//		busList.add(bus_3);
//		busList.add(bus_550);
//		busList.add(bus_901);
//		busList.add(bus_906);
//		busList.add(bus_908);
//		busList.add(bus_960);
//		String start = "邱隘大道", end = "第一医院";
//		Set<String> passA = SimpleBusArith.getSite(start, busList);
//		Set<String> passB = SimpleBusArith.getSite(end, busList);
//
//		// 0次转乘
//		List<Bus> busa = SimpleBusArith.change2BusList(passA, busList);
//		List<Bus> busb = SimpleBusArith.change2BusList(passB, busList);
//		List<Bus> res = SimpleBusArith.getCross(busa, busb);
//		for (int i = 0; i < res.size(); i++) {
//			System.out.println("直达线路:" + res.get(i).getSiteno());
//		}
//
//		// 1次转乘
//		Set<String> passA1 = SimpleBusArith.getSiteChange(passA, busList);
//		List<Bus> ll=SimpleBusArith.change2BusList(passA1, busList);
//		List<Bus> res1 = SimpleBusArith.getCross(ll, busb);
//		for (int i = 0; i < res1.size(); i++) {
//			for(int j=0;j<busa.size();j++){
//				Set<HashMap> ss = SimpleBusArith.getCrossSite(busa.get(j), res1.get(i));
//				if(ss!=null&&ss.size()>0){
//					Iterator itr = ss.iterator();
//					while (itr.hasNext()) {
//						HashMap b = (HashMap) itr.next();
//						Bus b1=(Bus)b.get(BUS_NO1);
//						Bus b2=(Bus)b.get(BUS_N02);
//						System.out.println("1次换乘方案:["+start+"]先"+b1.getSiteno()+"在"+b.get(BUS_CROSS_SITE)+"下车"+
//								",转"+b2.getSiteno()+"到结束站["+end+"]");
//					}
//				}
//			}
//		}

	}
}
 
5
3
分享到:
评论
10 楼 happyhope 2009-09-09  

* Date |time |Author |Change Description */

package com.common.bus;

public class Bus {
private String siteNo;

private String[] busStations;

public Bus() {
super();
}

public Bus(String siteNo, String[] busStations) {
super();
this.siteNo = siteNo;
this.busStations = busStations;
}

public String[] getBusStations() {
return this.busStations;
}

public void setBusStations(String[] busStations) {
this.busStations = busStations;
}

public String getSiteNo() {
return this.siteNo;
}

public void setSiteNo(String siteNo) {
this.siteNo = siteNo;
}
public String[] getShangxing(){
return busStations;
}
public String[] getXiaxing(){
String[] bus= new String[busStations.length];
for(int i=0;i<busStations.length;i++){
bus[i]=busStations[busStations.length-i-1];
}
return bus;
}
}
9 楼 xiaogangfree 2009-07-16  
楼主为什么不肯把BUS的源码给公布出来呢?发一半的代码是没有意义的,我觉得
8 楼 xuelang0000 2009-03-12  
还是希望您能把BUS类贴出来,对我们这些新人们还是贴出来吧,一个程序只给一半那怕是一多部分都是很难去完善的,您也不是写一两天的程序了,应该有接手别人没有完善的程序的经历吧,谢谢您能将这么好的东西和我们共享
7 楼 56071925 2009-03-12  
大大能不能写些注释?新手感兴趣看不懂,麻烦大大在整理一下好么?能不能把bus类贴出来呢?
6 楼 56071925 2009-03-11  
BUS类可以贴出来看看么?自己补上的bus有问题?
5 楼 xuelang0000 2009-03-03  
谢谢您能抽空给我回复,我是一个初学者
4 楼 kongshanxuelin 2009-03-03  
kongshanxuelin 写道

xuelang0000 写道
朋友,你的BUS类呢?能不能也贴出来啊,看了很长时间也没看懂你的思路啊,谢谢了 Bus类只是一个Bean没东西的,具体效果可看我的另一篇博客:http://cxlh.iteye.com/admin/blogs/259652

http://cxlh.iteye.com/blog/259652
3 楼 kongshanxuelin 2009-03-03  
xuelang0000 写道

朋友,你的BUS类呢?能不能也贴出来啊,看了很长时间也没看懂你的思路啊,谢谢了

Bus类只是一个Bean没东西的,具体效果可看我的另一篇博客:http://cxlh.iteye.com/admin/blogs/259652
2 楼 xuelang0000 2009-03-02  
朋友,你的BUS类呢?能不能也贴出来啊,看了很长时间也没看懂你的思路啊,谢谢了
1 楼 fc6029585 2008-12-16  
您的BUS类可以贴出来吗?运行看看效果啊!

相关推荐

    公交查询系统源码 asp+access

    【公交查询系统源码 ASP+ACCESS】是一款基于经典ASP(Active Server Pages)技术和ACCESS数据库开发的公共交通查询系统。ASP是一种由微软公司推出的服务器端脚本环境,它允许开发者在HTML中嵌入动态代码来生成网页...

    公交查询系统支持模糊查询

    而【公交查询系统】可能是项目的主要执行文件或者源代码文件夹,其中包含了项目的源代码、资源文件和其他相关组件。 总的来说,这个公交查询系统是C#编程技术的一个实际应用案例,涵盖了数据库操作、用户界面设计、...

    地方城市公共汽车线路查询系统源代码

    8. **移动端适配**:考虑到大部分用户可能通过手机使用公交查询系统,因此源代码还需要考虑移动端适配,设计适应不同屏幕尺寸和操作习惯的界面。 9. **持续更新与维护**:公交线路数据需要定期更新,以保持系统的...

    Java实现的公交查询系统代码

    【Java实现的公交查询系统代码】是一个基于Java编程语言开发的应用程序,主要用于帮助用户查询公交路线和站点信息。这个系统通常包含多个模块,如数据存储、查询接口、地图展示等,能够提供便捷的城市公共交通信息...

    ASP源码基于ASP+SQL公交查询系统(论文+源代码)

    ### ASP源码基于ASP+SQL公交查询系统(论文+源代码) #### 一、项目概述 本项目是一款基于ASP技术和SQL Server数据库构建的公交查询系统,主要应用于公共交通领域中的路线规划与查询服务。该系统旨在为用户提供准确...

    ASP.NET基于.NET的城市公交查询系统的设计与实现(源代码+论文).zip

    在这个"ASP.NET基于.NET的城市公交查询系统的设计与实现"项目中,我们可以探讨以下几个关键知识点: 1. **ASP.NET MVC架构**:ASP.NET提供了多种开发模式,如Web Forms、Web Pages和MVC(Model-View-Controller)。...

    【课设毕设专用】城市公交查询系统【含源码、数据库、部署教程、论文、答辩ppt一条龙服务】

    城市公交查询系统是一种为用户提供城市内公共交通信息服务的系统。它通常包括公交车线路查询、站点查询、到站时间预测、换乘方案推荐等功能,旨在帮助用户更方便、快捷地规划出行路线。以下是一个基本的城市公交查询...

    lucene 公交路线查询系统

    在这个“lucene 公交路线查询系统”项目中,开发人员利用Lucene的技术为某市创建了一个公交路线查询平台,使得用户能够快速、方便地找到最优的公交出行方案。 首先,Lucene的核心功能是文本索引和搜索。在本项目中...

    一个以前的项目--公交线路查询系统

    【标签】"源码"表明该项目可能包含了可供参考的代码,这对于学习者来说是一份宝贵的资源,他们可以研究代码结构,了解公交线路查询系统的实现方式。"工具"可能指的是该项目可能包含了一些辅助开发或数据分析的工具,...

    安卓Android公交线路查询系统app毕业源码案例设计.zip

    "安卓Android公交线路查询系统app毕业源码案例设计"是一个关于安卓平台上的应用程序开发项目,专门用于查询公交线路。这个标题表明这是一个针对Android开发学生的毕业设计项目,目的是让学生掌握如何构建一个实用的...

    [工具查询]红茶巴士(公交)查询系统 v4.0_hcbus4sqlite.zip

    1. **公交查询系统**:这是一个用于获取公交路线、时刻表和站点信息的系统,方便乘客规划行程。它可能包括实时公交位置追踪、线路推荐、换乘方案等功能,为用户提供便捷的城市交通信息。 2. **SQLite数据库**:...

    【毕业设计+开题答辩】-jsp城市公交查询系统-【源代码+截图+数据库+论文+视频讲解】.zip

    项目资源中使用的技术和系统用处不一定准确和全面,我只是大致的浏览了一下,具体使用技术建议参考代码和视频讲解。 资源中的各内容不一定每一个都非常的完美,可能会有少许错误,建议多看几个,选其中一个自己觉得...

    《毕业设计》--JSP基于SSM城市公交查询系统毕业源码案例设计.zip

    个人花大量时间整理出的真实毕业设计实战成果,内容丰富,文档也很详细。无论做毕业设计还是用于学习技能,或工作中当做参考资料,都能发挥重要作用 亲们下载我任何一个付费资源后,即可私信联系我免费下载其他相关...

    32.ASP.NET公交车运营管理系统设计与实现(源码+LW).zip

    这个资源是一个关于“ASP.NET公交车运营管理系统设计与实现”的项目包,包含了该系统的源代码(源码)以及学习材料。该系统旨在通过ASP.NET技术为公交公司提供一个全面的、信息化的运营管理平台,以优化公交车的调度...

    大学毕业设计课题-基于Vue+Express+elementUI的城市公交查询系统.zip

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,...

    《毕业设计》--安卓Android公交线路查询系统app毕业源码案例设计.zip

    个人花大量时间整理出的真实毕业设计实战成果,内容丰富,文档也很详细。无论做毕业设计还是用于学习技能,或工作中当做参考资料,都能发挥重要作用 亲们下载我任何一个付费资源后,即可私信联系我免费下载其他相关...

    Android 沈阳公交源码.zip

    在Android应用开发领域,公共交通查询系统是一个常见的应用场景,而“Android沈阳公交源码”就是一个实现这一功能的实例。这个源码提供了如何在Android平台上构建一个实用的公交线路查询软件的参考,让我们深入探讨...

    java(结合lucene)版的公交搜索系统的实现.rar

    公交搜索系统是一个基于Java语言结合Lucene搜索引擎的应用程序,旨在提供用户方便快捷地查询公交线路、站点及相关信息的服务。以下是该系统的主要实现描述: 数据收集与索引构建: 使用网络爬虫或者与公交管理部门...

    VB+ACCESS智能公交考勤系统管理软件设计(论文).zip

    2. 源代码文件:VB程序文件(.vb),可能还包括一些资源文件,如图片、图标等。 3. 数据库文件:可能是Access的.MDB或.ACCDB文件,用于存储考勤数据。 4. 用户手册或操作指南:解释如何使用该软件进行公交员工的考勤...

    120个微信小程序源码百度网盘下载

    5. **滴滴公交-查公交**:提供公交查询服务的小程序。 - **知识点**: - 公交线路数据的获取方法; - 实时公交位置更新机制; - 用户定位服务的集成。 6. **电商-拼团倒计时**:结合了电商和社交元素的小程序,...

Global site tag (gtag.js) - Google Analytics