A. 公交車來迴路線不一致,該如何設計資料庫
三張表,1..保存所有站點信息的表,2.線路表,即哪條線,起點和終點分別在哪裡 3.線路經過站資料表,保存哪條線路所經過的站點信息 表1:站點基表 uBusRoot,基本結構如下: fId 序號 fName 站點名稱 表2:線路表 uBusLine,基本結構如下: fId 序號 fName 線路名稱 fBegin 起始站編號 fEnd 終點站編號 其中fBegin,fEnd 均為 uBusRoot 表裡fId值,即表示為哪個站點; 表3:線路經過表 uBusLinePass,基本結構如下: fId 序號 lId 線路編號 rId 站點編號 fType 站點類型(0-起始站,1-終點站,2-經過站) (fType 可以不要,這樣建立視圖時,把起始站和終點也加上即可。) 再需要建立兩張視圖來輔助我們查詢: 線路視圖:vBusLine SELECT uBusLine.fId AS 序號, uBusLine.fName AS 線路名稱, (SELECT uBusRoot.fName FROM uBusRoot WHERE uBusRoot.fId= uBusLine.fBegin) AS 起始站, (SELECT uBusRoot.fName FROM uBusRoot WHERE uBusRoot.fId= uBusLine.fEnd) AS 終點站 FROM uBusLine; 線路經過視圖:vBusLinePass SELECT uBusLinePass.fId AS 序號, uBusLine.fName AS 線路名稱, uBusRoot.fName AS 經過站, uBusLinePass.fType AS 類型 FROM (uBusLinePass INNER JOIN uBusLine ON uBusLinePass.lId = uBusLine.fId) INNER JOIN uBusRoot ON uBusLinePass.rId = uBusRoot.fId; 基本表結構大概可以像上面這樣子,其中表uBusLine和uBusLinePass,是一對多的關系,即一條線路有多個經過站,這樣的話,想查經過站是不難的,當然你也可以把線路經過站的表設計的復雜一些,如:加上時間欄位,表明到這個站需要多長時間等等。 我們根據以上結構來模擬一些數據: uBusRoot 1 城東站 2 城南站 3 城西站 4 城北站 5 解放路站 6 人民路站 7 汽車總站 8 汽車二站 9 城市廣場 uBusLine 1 一號線路 1 4 2 二號線路 2 7 3 三號線路 3 8 uBusLinePass 1 1 1 0 2 1 4 1 3 1 5 2 4 1 6 2 5 2 2 0 6 2 7 1 7 2 5 2 8 2 9 2 9 3 3 0 10 3 8 1 11 3 4 2 12 3 6 2 那麼現在我們要查詢的話,就很方便了,如,我們要查一下「一號線路」線路的信息,我們可以用語句: SELECT * FROM vBusLinePass WHERE 線路名稱='一號線路' 那麼結果就是: 序號 線路名稱 經過站 類型 1 一號線路 城東站 0 2 一號線路 城北站 1 4 一號線路 人民路站 2 3 一號線路 解放路站 2
B. 公交路線查詢系統的資料庫設計
至少有三個欄位
欄位一:線路號
欄位二:車站順序號
欄位三:車站名(本欄位記得用模糊查詢)
公交路線兩個發車站A和B
若A到B的行車方向為上行,則B到A的行車方向就是下行
數字化的解釋,正序和倒序的關系
按照本方案,查找時判斷兩個車站之間的序號大小關系,則可以判斷出上行或下行
C. 城市公交查詢設計關於資料庫方面
最少兩個表
第一個:公交車表(所含欄位:路數id 此為主鍵,公交車名 如某某路,發車時間,停車時間,線路長度,等其他屬性都錄到這里)
第二個表:站名表(所含欄位,站名id 此為主鍵,站名稱,所屬公交線路)
簡單這樣就可以,但是不知道你的票價是怎麼定義的?是上車就1塊錢?還是坐的站數不同,錢數也不同?如果是後者的話,可能僅僅這兩個還不夠
D. 公交查詢系統的資料庫設計
欄位
1路車 第一站+第二站
1路車 第二站+第三站
這樣我只要查有第二站這個名字的欄位
就知道我是要從第一站去第三站
一個范圍的問題
2路車 第三站+第五站站
只要查第三站 這樣我可以看到前面的欄位是幾路車
這樣是否就可以查到 這站可以轉那趟車
這只是我自己的簡單思路
LZ 有更好的辦法 可以一起討論哈
E. 你好你好,我是學生,現在要做公交車查詢系統的畢業設計,我是想請問你下,用什麼樣的資料庫比較好
如果是學習的話,那麼你沒必要去考慮其他的問題,我建議重點考慮Oracle,畢竟你是學JAVA的,其次是Mysql。
LS有說Oracle大,耗資源,這個不假,小項目是不適合。但是你現在是學習階段,你現在還不是項目經理,你還不是真正的設計項目,你不需要去考慮項目的成本。懂嗎?JAVA和Oracle永遠是最好的搭檔,記住。然後MySQL也挺不錯的。
mssqlserver的話,既然你是做JAVA,那麼以後工作中接觸到的機會就會恨少。但是,mssqlserver也是做得非常強大的。
F. 如何設計公交路線查詢資料庫
需要三張表:
1、站點,欄位為:SID,NAME
2、路線,欄位為:PID,NAME
3、路線-站點表,欄位為:PID,SID,INDEX;
其中INDEX是站點在該路線中的序號,例如第一個站點的
INDEX為1,第二個站點的為2,依此類推
編程時可以採用十字鏈表來存儲線路信息,其中一維為站點,
另一維為路線。
演算法採用廣度優先搜索,從起點出發,由近及遠,直到找到
目標站點,這樣找到的路徑經歷的站點最少;也可對它稍做
調整,尋找換乘次數最少的乘車方式。
祝你好運!
G. 關於公交查詢系統資料庫的設計
最少兩個表
第一個:公交車表(所含欄位:路數id 此為主鍵,公交車名 如某某路,發車時間,停車時間,線路長度,等其他屬性都錄到這里)
第二個表:站名表(所含欄位,站名id 此為主鍵,站名稱,所屬公交線路)
簡單這樣就可以,但是不知道你的票價是怎麼定義的?是上車就1塊錢?還是坐的站數不同,錢數也不同?如果是後者的話,可能僅僅這兩個還不夠,不明白就HI吧,晚8點後在線,現在下班咯
H. 公交查詢資料庫設計
3.1一般換乘演算法
設 ,(i =1,2,…,m;t=1,2,…,m;m為正整數)為第t次循環時所對應的經過當前起點Start的線路集。 ,(j =1,2,…,n;n為正整數)為第t次循環時所對應的經過當前終點End的線路集。 ,( u = 1,2,…,p;p為正整數)為第t次循環時所對應的經過當前起點的線路i上的後續站點中的拓撲站點(即可能的轉乘點)集,包括當前起始點。 ,( v =1,2,…,q;q為正整數)為第t次循環時所對應的經過當前終點的線路i上的前繼站點中的拓撲站點集,包括當前終點。D為搜索最近公交站點時的半徑。
實現 n次換乘的演算法如下:
(1)獲取出發地a和目的地b;
(2)根據給定半徑 D,搜索得到出發地與目的地鄰近區域的公交站點,並以離其最近的公交站點作為起始站點A及目的站點B,並將A、B作為當前的起點Start和終點End;
(3)求經過當前起點的線路集 及經過當前終點的線路集 ;
(4)判斷是否 ?如果是,則實現第 次轉乘,輸出結果,結束運算。 時滿足此條件的線路 ,也就是 為起始站點 到目的站點 的直達線路; 時,得到換乘 次的乘車方案為: 。如果不是,則進行下一步。
(5)求經過當前起點的所有線路上的後續站點中的拓撲站點集 及當前終點的所有線路上的前繼站點中的拓撲站點集 ;
(6)判斷是否存在相同站點,即是否有 ?若有,則實現第 次轉乘,輸出結果,結束運算。計算各種k次換乘方法的乘車線路上沿途經過站點數,得到站點數最少的方案,再求轉車地點及其沿途站點。由此得到的站點、線路序列: 。(可能不止一種)即為需換乘 次的乘車方案;如果沒有,則進行下一步。
(7)順序將拓撲站點集 和 中的站點作為當前的起點和終點;
(8)轉至步驟(3)。
3.2換乘矩陣演算法
(1)初始矩陣 :首先輸入所有站點,對於任何兩站點 、 之間,如果可以直達,則 ;否則, ,計算出初始矩陣 。
(2)一次換乘矩陣 :在 中,如果 ,則 ;如果 ,並且存在點 ,使得 、 ,則 ,表示從站點 到 需經過1次換乘;否則, ,如此計算得1次換乘矩陣 。
(3)二次換乘矩陣 :在 中,如果 =1或2,則 ;如果 ,存在點 ,使得 、 ,則 ,表示從站點 到 需經過兩次換乘;否則, 。
(4)同樣的方法得到n次換乘矩陣 。
(5)如果 中沒有0元素,則表示所有的站點都可以互通,停止計算;否則,繼續重復上面的方法計算更多次的換乘矩陣。
3.3 基於Dijkstra演算法的最優路徑演算法[ ]
將與起點 鄰接的所有頂點的 初始化為 ,這個初始化用於記錄當前可用的最好信息。也就是說,從 到頂點 的最短路徑,即是由 到它自身那條路徑再擴充一條邊得到。當找到更短的路徑時, ( 給出從 到達 的路徑中頂點 前面的那個頂點)值將被更新。若產生了下一條最短路徑,需要根據路徑的擴充邊來更新 的值。步驟如下:
(1)初始化 ,對於鄰接於 的所有頂點 ,置 ,對於其餘的頂點置 ;對於 的所有頂點建立 表。
(2)若 為空,終止,否則轉至(3)。
(3)從 中刪除 值最小的頂點。
(4) 對於與 鄰接的所有還未到達的頂點,更新 值為 ;若 發生了變化且 還未在 中,則置 ,並將 加入 ,轉至(2)。
I. 公交車查詢的資料庫設計
create table station
(busno varchar2(20),--車號
st1 varchar2(20),--站1
st2 varchar2(20),--站2
sttime number,--相距時間
stdis number,--相距距離
ststart varchar2(20),--該車號起始站
stend varchar2(20), --該車號終點站
stcost number, --該車號花費錢
)
測試數據
insert into station values ('k1','a1','b1',10,10,'a1','a10',1.2);
insert into station values ('k1','b1','a2',12,12,'a1','a10',1.2);
insert into station values ('k1','a2','b2',8,10,'a1','a10',1.2);
insert into station values ('k1','b2','a3',11,11,'a1','a10',1.2);
insert into station values ('k1','a3','b3',5,15,'a1','a10',1.2);
insert into station values ('k1','b3','a10',3,16,'a1','a10',1.2);
insert into station values ('k2','b1','b2',2,18,'b1','a5',1.3);
insert into station values ('k2','b2','a3',10,12,'b1','a5',1.3);
insert into station values ('k2','a3','b4',5,10,'b1','a5',1.3);
insert into station values ('k2','b4','a4',10,10,'b1','a5',1.3);
insert into station values ('k2','a4','c1',5,10,'b1','a5',1.3);
insert into station values ('k2','c1','a5',10,10,'b1','a5',1.3);
insert into station values ('k3','a1','c1',10,10,'a1','c2',1.1);
insert into station values ('k3','c1','b2',10,10,'a1','c2',1.1);
insert into station values ('k3','b2','a3',10,10,'a1','c2',1.1);
insert into station values ('k3','a3','c2',10,11,'a1','c2',1.1);
insert into station values ('k4','c1','b1',10,10,'c1','c3',1.4);
insert into station values ('k4','b1','c2',20,10,'c1','c3',1.4);
insert into station values ('k4','c2','b2',10,11,'c1','c3',1.4);
insert into station values ('k4','b2','a1',10,10,'c1','c3',1.4);
insert into station values ('k4','a1','c3',10,10,'c1','c3',1.4);
insert into station values ('k5','a1','b1',7,10,'a1','a10',1.2);
insert into station values ('k5','b1','a2',10,12,'a1','a10',1.2);
insert into station values ('k5','a2','b2',10,10,'a1','a10',1.2);
insert into station values ('k5','b2','a3',10,13,'a1','a10',1.2);
insert into station values ('k5','a3','b3',6,10,'a1','a10',1.2);
insert into station values ('k5','b3','c1',10,14,'a1','a10',1.2);
insert into station values ('k5','c1','c2',10,10,'a1','a10',1.2);
insert into station values ('k5','c2','c3',10,15,'a1','a10',1.2);
insert into station values ('k5','c3','a10',10,10,'a1','a10',1.2);
insert into station values ('k6','a1','b1',9,10,'a1','c4',1.5);
insert into station values ('k6','b1','c1',10,10,'a1','c4',1.5);
insert into station values ('k6','c1','d1',10,10,'a1','c4',1.5);
insert into station values ('k6','d1','a2',8,10,'a1','c4',1.5);
insert into station values ('k6','a2','b3',10,10,'a1','c4',1.5);
insert into station values ('k6','b3','c3',3,5,'a1','c4',1.5);
insert into station values ('k6','c3','d2',2,6,'a1','c4',1.5);
insert into station values ('k6','d2','c4',20,10,'a1','c4',1.5);
查詢車次K1的路線
select st1,st2,busno,sys_connect_by_path(st1,'->')||'->'||st2 路線
from (
select * from station
where st2<>'a10' and busno = 'k1')
start with st1 = 'a1'
connect by nocycle prior st2 = st1
/
SQL> col 路線 format a30
SQL> /
ST1 ST2 BUSN 路線
---- ---- ---- ------------------------------
a1 b1 k1 ->a1->b1
b1 a2 k1 ->a1->b1->a2
a2 b2 k1 ->a1->b1->a2->b2
b2 a3 k1 ->a1->b1->a2->b2->a3
a3 b3 k1 ->a1->b1->a2->b2->a3->b3
起點站a1,到站c3,轉車4次以內的轉站順序和乘車順序
1 SELECT distinct st2,sys_connect_by_path(st1,'->')||'->'||st2 轉站,
2 sys_connect_by_path(busno,'->')||'->'||busno 乘車,level
3 from (
4 select * from station
5 where st2<>'a1') aa
6 where level < 5 and st2 = 'c3'
7 start with st1 = 'a1'
8* connect by nocycle prior st2 = st1
SQL> /
ST2 轉站 乘車 LEVEL
---------- -------------------- -------------------- -----
c3 ->a1->b1->c2->c3 ||->k1->k4->k5->k5 3
c3 ->a1->b1->a2->b3->c3|| ->k5->k5->k6->k6->k6 4
c3 ->a1->b1->c1->c2->c3|| ->k6->k6->k5->k5->k5 4
c3 ->a1->b1->a2->b3->c3 ||->k1->k1->k6->k6->k6 4
c3 ->a1->b1->c1->c2->c3 ||->k5->k6->k5->k5->k5 4
c3 ->a1->c1->b1->c2->c3 ||->k3->k4->k4->k5->k5 4
c3 ->a1->c3 ||->k4->k4 1
c3 ->a1->b1->a2->b3->c3|| ->k6->k1->k6->k6->k6 4
c3 ->a1->b1->a2->b3->c3 ||->k1->k5->k6->k6->k6 4
c3 ->a1->c1->c2->c3 ||->k3->k5->k5->k5 3
c3 ->a1->b1->c2->c3|| ->k5->k4->k5->k5 3
ST2 轉站 乘車 LEVEL
---------- -------------------- -------------------- -----
c3 ->a1->b1->c1->c2->c3 ||->k1->k6->k5->k5->k5 4
c3 ->a1->b1->a2->b3->c3|| ->k5->k1->k6->k6->k6 4
c3 ->a1->b1->a2->b3->c3|| ->k6->k5->k6->k6->k6 4
c3 ->a1->b1->c2->c3 ||->k6->k4->k5->k5 3
已選擇15行。
再來一例
起點站a2,到站a3,轉車4次以內的轉站順序和乘車順序,按轉車次數升序
1 SELECT distinct st2,sys_connect_by_path(st1,'->')||'->'||st2 轉站,
2 sys_connect_by_path(busno,'->')||'->'||busno 乘車,level
3 from (
4 select * from station
5 where st2<>'a2') aa
6 where level < 5 and st2 = 'a3'
7 start with st1 = 'a2'
8 connect by nocycle prior st2 = st1
9* order by level
SQL> /
ST2 轉站 乘車 LEVEL
---------- -------------------- -------------------- -----
a3 ->a2->b2->a3|| ->k1->k1->k1 2
a3 ->a2->b2->a3|| ->k1->k2->k2 2
a3 ->a2->b2->a3|| ->k1->k3->k3 2
a3 ->a2->b2->a3|| ->k1->k5->k5 2
a3 ->a2->b2->a3|| ->k5->k1->k1 2
a3 ->a2->b2->a3|| ->k5->k2->k2 2
a3 ->a2->b2->a3|| ->k5->k3->k3 2
a3 ->a2->b2->a3|| ->k5->k5->k5 2
a3 ->a2->b3->c1->b2->a3|| ->k6->k5->k3->k1->k1 4
a3 ->a2->b3->c1->b2->a3|| ->k6->k5->k3->k2->k2 4
a3 ->a2->b3->c1->b2->a3|| ->k6->k5->k3->k3->k3 4
ST2 轉站 乘車 LEVEL
---------- -------------------- -------------------- -----
a3 ->a2->b3->c1->b2->a3|| ->k6->k5->k3->k5->k5 4
已選擇12行。
設計表的時候加入了站站之間的時間和站站之間的距離,當然還可以加個欄位每個車次花費的錢,這樣的話再加條件可以取最短時間,最短距離,最短花費錢,時間不夠了。。先去辦離職手續。。。
有看官閑的話,可以把最短時間,最短距離,最短花費錢的查詢設計出來哈!
J. 公交查詢系統的資料庫怎麼設計,包含線路,站點(一個地名不止一個站點,往返位置不同)欄位,可以查詢換...
參考現有的公交查詢系統:http://down.chinaz.com/soft/29620.htm