记录公交线路经过站点的信息,并且按顺序记录各站点,以此记录线路与站点的关联信息。
列名
数据类型
NULL
约束
说明
bus_name
varchar(5>
notnull
primarykey
参照bus(name>
station_id
int
notnull
参照station(id>
orderid
int
notnull
站点在一条线路中的位置
4、公交公司表company(id,name>
列名
数据类型
NULL
约束
说明
id
int
Notnull
primarykey
公司编号
name
Varchar(5>
Notnull
公司名称
5、公交线路类型表bus_type(id,name>
列名
数据类型
NULL
约束
说明
id
int
Notnull
primarykey
线路类型编号,共12类
name
Varchar(10>
Notnull
线路类型名
6、公交线路表busline(bus_name,direction,line>
此表主要是为了方便依据线路来查询站点信息。
列名
数据类型
NULL
约束
说明
bus_name
varchar(4>
Notnull
primarykey
公司编号
direction
varchar(4>
Notnull
公交行驶方向,“去程”或“回程”
line
varchar(500>
Notnull
公交行驶途径的站点
4.2数据表关系图
五、创建数据库及其对象
5.1建数据库和表
下面是创建数据库和表的过程,数据通过手动输入。
1、创建数据库
createdatabasebus
on
(
name='bus_data1',
filename='C:
\DocumentsandSettings\Administrator\桌面\bus\bus_data1.mdf'
>
logon
(
name='bus_log',
filename='C:
\DocumentsandSettings\Administrator\桌面\bus\bus_log.ldf'
>
2、创建表
公交公司表
createtablecompany
(
idintprimarykeynotnull,
namevarchar(30>notnull
>
公交线路类型表
createtablebus_type
(
idintprimarykeynotnull,
namevarchar(5>notnull
>
公交站点
createtablestation
(
idintprimarykeynotnull,
namevarchar(15>notnull
>
公交线路表
createtablebusline
(bus_namevarchar(5>,
directionchar(2>notnull,
linevarchar(200>notnull,
primarykey(bus_name,direction>,
foreignkey(bus_name>referencesbus(name>>
公交车表
createtablebus
(namevarchar(5>primarykeynotnull,
start_timedatetimenotnull,
end_timedatetimenotnull,
buslengthintnotnull,
pricefloatnotnull,
companyIDintnotnull,
typeIDintnotnull,
foreignkey(companyID>referencescompany(id>,
foreignkey(typeID>referencesbus_type(id>>
线路与站点关联表
createtablebus_station
(
bus_namevarchar(5>,
station_idint,
orderidintnotnull,
primarykey(bus_name,station_id>,
foreignkey(bus_name>referencesbus(name>,
foreignkey(station_id>referencesstation(id>
>
5.2查询实现
这里只介绍线路查询和站站查询的存储过程实现,其它涉及到的功能通过SQLCommand或SqlDataAdapter实现,在后面的应用程序设计中实现。
1、线路具体情况查询:
ifexists(selectnamefromsysobjectswherename='busline_info'>
dropprocedurebusline_info
go
createprocedurebusline_info@inputvarchar(5>,@outputvarchar(700>output
as
begin
select@output=line
frombusline
wherebusline.bus_name=@input
end
go
2、站点间的点到点路线查询:
ifexists(selectnamefromsysobjectswherename='station_station'>
dropprocedurestation_station
go
createprocedurestation_station@input1varchar(30>,@input2varchar(30>,@output1varchar(5>output,@output2varchar(5>output,@output3varchar(5>output,@output4varchar(30>output,@output5varchar(30>output
as
begin
declare@stationID1int,@stationID2int--换乘过程中的中间站点
declare@id1int,@id2int--记录起点和终点的ID
select@id1=idfromstationwherename=@input1
select@id2=idfromstationwherename=@input2
--查找直达线路
select@output1=a.bus_name
from
(selectbus_namefrombus_stationwherestation_id=@id1>a,
(selectbus_namefrombus_stationwherestation_id=@id2>b
wherea.bus_name=b.bus_name
--若不存在直达线路,则搜寻一次换乘路线
ifnotexists(select*frombuswherename=@output1>
begin
--查找中间站点
select@stationID1=c.station_idfrom
--@input1能直达的站点集合c
(selectdistinctstation_id
frombus_station
wherebus_namein(selectbus_namefrombus_stationwherestation_id=@id1>>c,
--@input2能直达的站点集合d
(selectdistinctstation_id
frombus_station
wherebus_namein(selectbus_namefrombus_stationwherestation_id=@id2>>d
wherec.station_id=d.station_id
select@output1=a.bus_name
from
(selectbus_namefrombus_stationwherestation_id=@id1>a,
(selectbus_namefrombus_stationwherebus_station.station_id=@stationID1>b
wherea.bus_name=b.bus_name
select@output2=a.bus_name
from
(selectbus_namefrombus_stationwherestation_id=@id2>a,(selectbus_namefrombus_stationwherebus_station.station_id=@stationID1>b
wherea.bus_name=b.bus_name
end
--若不存在直达和一次换乘线路,则搜寻二次换乘路线
ifnotexists(select*frombuswherename=@output1>andnotexists(select*frombuswherename=@output2>
begin
--查找中间线路
select@output2=a.bus_name
from
(selectdistinctbus_name
frombus_station
wherestation_idin
(selectstation_idfrombus_station
wherebus_namein
(selectbus_namefrombus_stationwherestation_id=@id1>>>a,
(selectdistinctbus_namefrombus_station
wherestation_idin
(selectstation_idfrombus_stationwherebus_namein(selectbus_namefrombus_stationwherestation_id=@id2>>>b
wherea.bus_name=b.bus_name
--查找起点到中间线路的公交车
select@stationID1=a.station_id
from
(selectdistinctstation_idfrombus_stationwherebus_namein(selectbus_namefrombus_stationwherestation_id=@id1>>a,
(selectstation_idfrombus_stationwherebus_name=@output2>b
wherea.station_id=b.station_id
select@output1=c.bus_name
from
(selectbus_namefrombus_stationwherestation_id=@id1>c,
(selectbus_namefrombus_stationwherestation_id=@stationID1>d
wherec.bus_name=d.bus_name
--查找中间线路到终点的公交车
select@stationID2=a.station_id
from
(selectdistinctstation_idfrombus_stationwherebus_namein(selectbus_namefrombus_stationwherestation_id=@id2>>a,
(selectstation_idfrombus_stationwherebus_name=@output2>b
wherea.station_id=b.station_id
select@output3=c.bus_name
from
(selectbus_namefrombus_stationwherestation_id=@id2>c,
(selectbus_namefrombus_stationwherestation_id=@stationID2>d
wherec.bus_name=d.bus_name
end
select@output4=namefromstationwhereid=@stationID1
select@output5=namefromstationwhereid=@stationID2
end
五、软件功能设计
软件共实现了3个大功能,即站点查询、线路查询、站站查询,其完成情况如下:
<一):
检查用户是否输入了站点或线路信息,如果没有录入,则提示:
请输入站点!
或请输入线路名!
<二):
检查用户是否输入的站点或线路是否存在,如果不存在,则提示:
此站点不存在!
或此线路不存在!
<三):
如果信息都填写正确,则根据选定的查询条件进行查找,查找的具体实现为:
<1)站点查询:
返回经过此站点的所有线路,并提供一条线路经过的所有站点。
如果没有结果,则提示:
找不到此站点!
<2)线路查询:
返回此线路的类型、最早和最晚时间、票价、经过站点等信息。
<3)站站查询:
返回从起点到终点的可行的一条线路,此线路可直达,如果没有直达,则最多换乘两次,并提示在哪里下车换乘,以及所有车辆的站点信息。
六、界面设计
七、应用程序
7.1站点查询
//查询经过给定站点的公交线路
protectedvoidstation_info(stringinput>
{
SqlConnectionmyConnection=newSqlConnection(connectionString>。
myConnection.Open(>。
SqlCommandcmd=newSqlCommand("selectbus_station.bus_nameas公?
交?
线?
路¡¤名?
busline.directionas方¤?
向¨°,lineas途ª?
径?
站?
点Ì?
frombus_station,station,buslinewherestation.name='"+input+"'anddbo.station.id=bus_station.station_idandbus_station.bus_name=busline.bus_name",myConnection>。
SqlDataAdapterda=newSqlDataAdapter(>。
da.SelectCommand=cmd。
System.Data.DataSetds=newSystem.Data.DataSet(>。
da.Fill(ds>。
this.GridView1.DataSource=ds.Tables[0]。
GridView1.DataBind(>。
cmd=null。
myConnection.Close(>。
}
7.2线路查询
//查询给定线路的公交车所经过站点
protectedstringbusline_info1(stringinput>
{stringconnectionString=@"server=TXJM1FW3L1GYIC6。
database=bus。
IntegratedSecurity=true"。
SqlConnectionmyConnection=newSqlConnection(connectionString>。
myConnection.Open(>。
SqlCommandmyCommand=newSqlCommand("busline_info",myConnection>。
myCommand.CommandType=System.Data.CommandType.StoredProcedure。
//创建参数
SqlParameterbus_name=newSqlParameter("@input",System.Data.SqlDbType.VarChar,5>。
bus_name.Direction=System.Data.ParameterDirection.Input。
bus_name.Value=input。
myCommand.Parameters.Add(bus_name>。
//添加输出参数
SqlParameterResult1=newSqlParameter("@output",System.Data.SqlDbType.VarChar,700>。
Result1.Direction=System.Data.ParameterDirection.Output。
myCommand.Parameters.Add(Result1>。
myCommand.ExecuteNonQuery(>。
stringstr=Result1.Value.ToString(>。
returnstr。
}
7.3站—站查询
//查询给定起点和终点的公交车线路
protectedvoidstation_station(stringinput1,stringinput2>
{
stringconnectionString=@"server=TXJM1FW3L1GYIC6。
database=bus。
IntegratedSecurity=true"。
SqlConnectionmyConnection=newSqlConnection(connectionString>。
myConnection.Open(>。
//利用SQL中已有的存储过程实现站站查询
SqlCommandmyCommand=newSqlCommand("station_station",myConnection>。
myCommand.CommandType=System.Data.CommandType.StoredProcedure。
//创建参数
SqlParameterstation_name1=newSqlParameter("@input1",System.Data.SqlDbType.VarChar,30>。
station_name1.Direction=System.Data.ParameterDirection.Input。
station_name1.Value=input1。
myCommand.Parameters.Add(station_name1>。
SqlParameterstation_name2=newSqlParameter("@input2",System.Data.SqlDbType.VarChar,30>。