先完成直達(dá)的吧.
成都創(chuàng)新互聯(lián)是一家網(wǎng)站設(shè)計(jì)公司,集創(chuàng)意、互聯(lián)網(wǎng)應(yīng)用、軟件技術(shù)為一體的創(chuàng)意網(wǎng)站建設(shè)服務(wù)商,主營產(chǎn)品:成都響應(yīng)式網(wǎng)站建設(shè)公司、高端網(wǎng)站設(shè)計(jì)、成都營銷網(wǎng)站建設(shè)。我們專注企業(yè)品牌在網(wǎng)站中的整體樹立,網(wǎng)絡(luò)互動的體驗(yàn),以及在手機(jī)等移動端的優(yōu)質(zhì)呈現(xiàn)。成都網(wǎng)站建設(shè)、做網(wǎng)站、移動互聯(lián)產(chǎn)品、網(wǎng)絡(luò)運(yùn)營、VI設(shè)計(jì)、云產(chǎn)品.運(yùn)維為核心業(yè)務(wù)。為用戶提供一站式解決方案,我們深知市場的競爭激烈,認(rèn)真對待每位客戶,為客戶提供賞析悅目的作品,網(wǎng)站的價值服務(wù)。
兩張表(一對多的關(guān)系):
表一:公交線路表
id, 線路(就是第幾路車的意思)
表二:站點(diǎn)表或者路線表
id, 表一的id(就是外鍵),站點(diǎn)名,順序
站站查詢的時候, 查表二, group by 表一的id,就能確定線路, 再對照表一就能找到線路名了.
當(dāng)然如果是交作業(yè)的話, 兩張表夠了; 想更專業(yè)點(diǎn)就用3張表(多對多);
在就是換乘了.
這個比較復(fù)雜, 會涉及到一些算法, 要看你的切入點(diǎn)是什么了.
比如總時間, 換乘次數(shù), 總路程等等,都有不同的設(shè)計(jì)方法.
此為個人意見,僅供參考!
import?java.awt.Canvas;
import?java.awt.Color;
import?java.awt.Font;
import?java.awt.Graphics;
import?java.awt.Image;
import?java.util.Random;
import?javax.swing.JFrame;
class?RainCanvas?extends?Canvas?implements?Runnable{
private?int?width,?height;
private?Image?offScreen;?//?緩沖圖片
private?char[][]?charset;?//?隨機(jī)字符集合
private?int[]?pos;?//?列的起始位置
private?Color[]?colors?=?new?Color[25];?//?列的漸變顏色
public?RainCanvas(int?width,?int?height)?{
this.width?=?width;
this.height?=?height;
//?生成ASCII可見字符集合
//創(chuàng)建一個新的隨機(jī)器
Random?rand?=?new?Random();
?//width/10為字符雨屏幕的寬度??height/10為字符雨屏幕的長度
//隨機(jī)字符數(shù)組
charset?=?new?char[width?/?10][height?/?10];
for?(int?i?=?0;?i??charset.length;?i++)?{
for?(int?j?=?0;?j??charset[i].length;?j++)?{
//nextInt(int?n)?返回一個偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在?0(包括)和指定值(不包括)之間均勻分布的?int值。
//48--144代表鍵盤上的字母?符號?數(shù)字
//為charset數(shù)組的每個元素取值
charset[i][j]?=?(char)?(rand.nextInt(96)?+?48);?}
}
//?隨機(jī)化列起始位置
pos?=?new?int[charset.length];
for?(int?i?=?0;?i??pos.length;?i++)?{
pos[i]?=?rand.nextInt(pos.length);
}
//?生成從黑色到綠色的漸變顏色,最后一個保持為白色
for?(int?i?=?0;?i??colors.length?-?1;?i++)?{
//顏色漸變
colors[i]?=?new?Color(0,?255?/?colors.length?*?(i?+?1),?0);?}
//設(shè)置最底下一個的字符的顏色????0?0?255?藍(lán)色??255?0?0?紅色??255?255?255?白色??0?255?0?綠色
colors[colors.length?-?1]?=?new?Color(0,?0,?255);?
setBackground(Color.black);
setSize(width,?height);
setVisible(true);
}
public?void?startRain()?{
new?Thread(this).start();
}
public?void?drawRain()?{
if?(offScreen?==?null)?{
return;
}
// Random?rand?=?new?Random();
//getGraphice()創(chuàng)建供繪制閉屏圖像使用的圖形上下文
Graphics?g?=?offScreen.getGraphics();
//通過使用當(dāng)前繪圖表面的背景色進(jìn)行填充來清除指定的矩形。
g.clearRect(0,?0,?width,?height);
//將此圖形上下文的字體設(shè)置為指定字體。使用此圖形上下文的所有后續(xù)文本操作均使用此字體。
g.setFont(new?Font("Arial",?Font.PLAIN,?14));
//
for?(int?i?=?0;?i??charset.length;?i++)?{
//int?speed?=?rand.nextInt(3);
for?(int?j?=?0;?j??colors.length;?j++)?{
//去掉j只顯示藍(lán)色的一個字符??去掉charset[i].length顯示黑屏
int?index?=?(pos[i]?+?j)?%?charset[i].length;
//?將此圖形上下文的當(dāng)前顏色設(shè)置為指定顏色。
g.setColor(colors[j]);
//使用此圖形上下文的當(dāng)前字體和顏色繪制由指定字符數(shù)組給定的文本
g.drawChars(charset[i],?index,?1,?i?*?10,?index?*?10);
}
pos[i]?=?(pos[i]+2?)?%?charset[i].length;
}
}
@Override
public?void?update(Graphics?g)?{
paint(g);
}
public?void?run()?{
while?(true)?{
drawRain();
repaint();
try?{
Thread.sleep(50);?//?可改變睡眠時間以調(diào)節(jié)速度
}
catch?(InterruptedException?e)?{
System.out.println(e);
}
}
}
@Override
public?void?paint(Graphics?g)?{
//?當(dāng)組件顯示時檢測是否要創(chuàng)建緩沖圖片,在組件還不可見時調(diào)用createImage將返回null
if?(offScreen?==?null)?{
offScreen?=?createImage(width,?height);
}
g.drawImage(offScreen,?0,?0,?this);
}
}
public?class?ZFYTest?extends?JFrame{
private?RainCanvas?canvas?=?new?RainCanvas(1366,?768);
public?ZFYTest()?{
super("ZFY");
setUndecorated(true);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
canvas?=?new?RainCanvas(this.getWidth(),?this.getHeight());?//canvas?=?new?RainCanvas(800,600);
getContentPane().add(canvas);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public?static?void?main(String[]?args)?{
ZFYTest?test?=?new?ZFYTest();
test.canvas.startRain();
}
}
首先看你要做成客戶端還是web形勢
要是客戶端你要根據(jù)你想應(yīng)用的平臺,比如s60或者mobile等,學(xué)習(xí)相應(yīng)的知識。當(dāng)然java(j2me)是通用的,所有支持java的手機(jī)都能用(基本上所有手機(jī)都支持)。
要是web呢,就要看看wap的相關(guān)知識,還要準(zhǔn)備好空間和域名,租一個就行。
這個系統(tǒng)你要有公交的數(shù)據(jù),這個數(shù)據(jù)不知道你怎么獲得,但是必須要有才能做。常用的sql語句增刪改查(select、insert、delete、update)就夠了。
還有,你要做成地圖的形式還是文本框查詢的形式?地圖的形式你還要弄到地圖的數(shù)據(jù)……不是那么簡單的事情。當(dāng)然你可以看看Google和mapabc等提供沒有相關(guān)接口,調(diào)用它們的接口你會省很多事。
這個系統(tǒng)說實(shí)話確實(shí)不是很容易做的,你要是有基礎(chǔ)還好。先看J2ME吧,先做個簡單的,再一步步完善,也可以看看有沒有相關(guān)的書。
//寫了兩個小時啊,兄弟,要采納我啊
//Site(站點(diǎn)類)
package?transit;
import?java.util.ArrayList;
import?java.util.List;
public?class?Site
{
private?Integer?id;?//?給每個站點(diǎn)分配一個ID
private?String?name;?//?站點(diǎn)的名字
private?ListRoute?list;?//?經(jīng)過該站點(diǎn)的線路
public?Site()
{
super();
}
public?Site(Integer?id,?String?name)
{
super();
this.id?=?id;
this.name?=?name;
this.list?=?new?ArrayListRoute();
}
public?Integer?getId()
{
return?id;
}
public?void?setId(Integer?id)
{
this.id?=?id;
}
public?String?getName()
{
return?name;
}
public?void?setName(String?name)
{
this.name?=?name;
}
public?ListRoute?getList()
{
return?list;
}
public?void?setList(ListRoute?list)
{
this.list?=?list;
}
//?添加線路
public?boolean?addRoute(Route?route)
{
return?this.getList().add(route);
}
//?刪除線路
public?boolean?removeRoute(Route?route)
{
return?this.getList().remove(route);
}
@Override
public?String?toString()
{
return?name;
}
@Override
public?boolean?equals(Object?obj)
{
if?(obj?instanceof?Site)
{
Site?s?=?(Site)?obj;
return?this.id?==?s.getId()??this.name.equals(s.getName());
}
return?false;
}
}
//線路類
package?transit;
import?java.util.ArrayList;
import?java.util.Date;
import?java.util.List;
public?class?Route
{
private?Integer?id;?//?給每個線路分配一個ID
private?String?name;?//?線路名稱
private?ListSite?list;?//?線路所包含的站點(diǎn)
private?Date?startDate;?//?發(fā)班時間,從首站點(diǎn)算起
private?Date?endDate;?//?收班時間,從首站點(diǎn)算起
public?Route()
{
super();
}
public?Route(Integer?id,?String?name,?Date?startDate,?Date?endDate)
{
super();
this.id?=?id;
this.name?=?name;
this.startDate?=?startDate;
this.endDate?=?endDate;
this.list?=?new?ArrayListSite();
}
public?Integer?getId()
{
return?id;
}
public?void?setId(Integer?id)
{
this.id?=?id;
}
public?String?getName()
{
return?name;
}
public?void?setName(String?name)
{
this.name?=?name;
}
public?ListSite?getList()
{
return?list;
}
public?void?setList(ListSite?list)
{
this.list?=?list;
}
public?Date?getStartDate()
{
return?startDate;
}
public?void?setStartDate(Date?startDate)
{
this.startDate?=?startDate;
}
public?Date?getEndDate()
{
return?endDate;
}
public?void?setEndDate(Date?endDate)
{
this.endDate?=?endDate;
}
public?boolean?isHasThisSite(Site?site)
{
for?(Site?l_site?:?this.getList())
{
if?(l_site.equals(site))
{
return?true;
}
}
return?false;
}
//?添加站點(diǎn),成功返回true
public?boolean?addSite(Site?site)
{
return?this.getList().add(site);
}
//?移除站點(diǎn),成功返回true
public?boolean?removeSite(Site?site)
{
return?this.getList().remove(site);
}
@Override
public?String?toString()
{
return?name;
}
}
//公交系統(tǒng)類
package?transit;
import?java.util.ArrayList;
import?java.util.List;
public?class?TransitSystem
{
/**
*?1)增加、修改、刪除一個條公交線路信息。
*?2)增加、修改、刪除公交站點(diǎn)信息。
*?3)按條件顯示公交線路信息(條件有按線路名稱、途經(jīng)車站等)。
*/
private?ListRoute?routeList?;??//系統(tǒng)所管理的線路
private?ListSite?siteList;??//系統(tǒng)所管理的站點(diǎn)
public?TransitSystem(){
routeList?=?new?ArrayListRoute();
siteList?=?new?ArrayListSite();
}
//增加一條線路
public?void?addRoute(Route?route){
if(!routeList.add(route)){
throw?new?RuntimeException("系統(tǒng)中已存在該線路");
}
}
//修改一條線路
public?void?updateRoute(Route?route){
//根據(jù)route?的id?獲取已存在系統(tǒng)中的route
Route?l_route?=?getRoute(route.getId());
if(l_route!=null){
//注入值
l_route.setName(route.getName());
l_route.setList(route.getList());
l_route.setStartDate(route.getStartDate());
l_route.setEndDate(route.getEndDate());
}else{
throw?new?RuntimeException("線路id不匹配,無法修改");
}
}
//獲取該系統(tǒng)中的線路,根據(jù)id獲取
public?Route?getRoute(Integer?id){
Route?route2?=?null;
for?(Route?route?:?this.getRouteList())
{
if(route.getId().equals(id)){
route2?=?route;
}
}
return?route2;
}
//刪除一條線路,根據(jù)對象刪除
public?void?removeRoute(Route?route){
if(!this.getRouteList().remove(route)){
throw?new?RuntimeException(route.getId()+"線路不存在");
}
}
//增加一條公交站點(diǎn)
public?void?addSite(Site?site){
if(!this.siteList.add(site)){
throw?new?RuntimeException(site.getId()+"站點(diǎn)已存在");
}
}
//刪除一條公交站點(diǎn)
public?void?removeSite(Site?site){
if(!this.getSiteList().remove(site)){
throw?new?RuntimeException(site.getId()+"站點(diǎn)不存在");
}
}
//修改一條公交站點(diǎn)
public?void?updateSite(Site?site){
//根據(jù)route?的id?獲取已存在系統(tǒng)中的route
Site?l_site?=?getSite(site.getId());
if(l_site!=null){
//注入值
l_site.setName(site.getName());
l_site.setList(site.getList());
}else{
throw?new?RuntimeException("站點(diǎn)id不匹配,無法修改");
}
}
//獲取該系統(tǒng)中的公交站點(diǎn),根據(jù)id獲取
public?Site?getSite(Integer?id){
Site?site2?=?null;
for?(Site?site?:?this.getSiteList())
{
if(site.getId().equals(id)){
site2?=?site;
}
}
return?site2;
}
//按線路名稱查詢公交線路信息
public?Route?getRouteByName(String?name){
for?(Route?route?:?this.getRouteList())
{
if(route.getName().equals(name)){
return?route;
}
}
return?null;
}
//根據(jù)途經(jīng)車站查詢公交線路
public?ListRoute?getRouteBySite(Site?site){
return?site.getList();
}
public?ListRoute?getRouteList()
{
return?routeList;
}
public?void?setRouteList(ListRoute?routeList)
{
this.routeList?=?routeList;
}
public?ListSite?getSiteList()
{
return?siteList;
}
public?void?setSiteList(ListSite?siteList)
{
this.siteList?=?siteList;
}
}
//測試類
package?transit;
import?java.text.ParseException;
import?java.text.SimpleDateFormat;
import?java.util.Date;
import?java.util.List;
import?java.util.Random;
public?class?_Test
{
public?static?void?main(String[]?args)?throws?ParseException
{
TransitSystem?system?=?new?TransitSystem();
SimpleDateFormat?format?=?new?SimpleDateFormat("hh:MM");
Date?startDate?=?format.parse("07:30");
Date?endDate?=?format.parse("22:30");
//?向系統(tǒng)中添加10條線路,20個站點(diǎn)
for?(int?i?=?0;?i??20;?i++)
{
if?(i??10)
{
system.addRoute(new?Route(i,?"線路"?+?i,?startDate,?endDate));
}
system.addSite(new?Site(i,?"站點(diǎn)"?+?i));
}
ListSite?siteList?=?system.getSiteList();
//?為系統(tǒng)中的站點(diǎn)添加線路
for?(Route?route?:?system.getRouteList())
{
//?每條線路?隨機(jī)添加N個站點(diǎn)
int?n?=?new?Random().nextInt(siteList.size());
for?(int?i?=?0;?i??n;?i++)
{
//?每個站點(diǎn)也是隨機(jī),如重復(fù),則添加失敗
int?x?=?new?Random().nextInt(siteList.size());
if?(!route.isHasThisSite(siteList.get(x)))
{
route.addSite(siteList.get(x));
//?同時該站點(diǎn)也添加該線路
siteList.get(x).addRoute(route);
}
}
}
//?查詢所有的線路所包含的站點(diǎn)
for?(Route?route?:?system.getRouteList())
{
System.out
.println(route.getName()?+?"?:對應(yīng)的站點(diǎn)集合:"?+?route.getList());
}
//?查詢所有的站點(diǎn)對應(yīng)的線路
for?(Site?site?:?system.getSiteList())
{
System.out.println("站點(diǎn)"?+?site.getName()?+?"?:對應(yīng)的線路集合:?"
+?site.getList());
}
}
}
先取出站點(diǎn)所在的line List lines1
然后取出目的地所在的line List lines2
一次換乘的話 科技得出 需要2個line
這樣就簡單了,對lines1s里線路進(jìn)行迭代,然后再對line1的站點(diǎn)進(jìn)行迭代,如果該站點(diǎn)在lines2的line里面,就OK了。。線路轉(zhuǎn)換就出來了。
這是個方法,但應(yīng)該不是最優(yōu)的。
try{Connection con;
Statement stmt;
ResultSet rs;
int temp;
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/java","root","");//以上是數(shù)據(jù)庫連接,不同的數(shù)據(jù)管理器有 //不同的驅(qū)動和鏈接方式,以上是mysql的連接
stmt=con.createStatement();
rs=stmt.executeQuery("select * from student");//執(zhí)行查詢語句,結(jié)果賦值給結(jié)果集rs
//結(jié)果集是結(jié)果于字段編號的映射,每一個字
//段都有一個編號,最小為1,也就是第一個字段
while(rs.next()){
String names=rs.getString("name");//查詢結(jié)果轉(zhuǎn)換成字符串。
System.out.println(names);
}rs.close();
}catch(Exception e){
e.printStackTrace();
}