公交查询系统数据库课程设计报告.docx
《公交查询系统数据库课程设计报告.docx》由会员分享,可在线阅读,更多相关《公交查询系统数据库课程设计报告.docx(20页珍藏版)》请在冰豆网上搜索。
![公交查询系统数据库课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-1/9/382f554f-3357-49d1-bcab-11540a5306ee/382f554f-3357-49d1-bcab-11540a5306ee1.gif)
公交查询系统数据库课程设计报告
公交查询系统—数据库课程设计报告
数据库课程设计
报告
班级:
序号:
姓名:
地球科学学院地信系
2013-06-28
一、概述
1.1背景说明
软件名称:
公交线路查询系统
项目提出者:
项目开发者:
用户:
广大需要乘坐公交车的人群
1.2开发环境
操作系统:
WindowsXP
软件配置:
visualstutio2010,MicrosoftSQLServer2008R2
数据库配置:
MicrosoftSQLServer2008R2在PC机中新建数据库,建立各个数据表、关系图。
二、需求分析
2.1用户需求
城市的扩张使得公交线路越来越复杂,为了使得用户更加方便地能够获得最新公交线路,“公交线路查询工具”帮助人们解决这个问题。
本系统面向的对象是普通乘客,对于普通乘客来说,他们最关心的就是查询。
系统也只对用户提供信息查询功能,并不对用户开放对数据的编辑权限。
对于任何用户,只要浏览本系统的首页,就可以根据自己的需求进行查询。
数据的修改、删除、及时更新工作只能由管理人员实现并对系统进行定期的维护,保证其运行的稳定性。
2.2主要功能
本系统从用户的需求出发,可实现以下功能:
1、线路具体情况查询:
输入线路名称就可得到该线路的途经站点,发车和末班车时间,票价等相关信息。
2、经过此站点的所有路线查询:
输入站点名称即可得出经过该站点的所有线路名称。
3、站点间的点到点路线查询:
输入出发站点和目的站点即可输出可选择的线路,包括中间站的转乘。
2.3数据流图
2.4数据字典
1、数据项
名称
数据类型
长度
字段描述
name
varchar
5
公交车的名称
start_time
time
8
公交车每天的最早发车时间
end_time
time
8
公交车每天的收班时间
buslength1
int
2
公交线路去程的站点数
buslength2
int
2
公交线路回程的站点数
pt_price
float
3
普通车的票价
gd_price
float
3
高等级车的票价
disprice_pt
float
3
普通车刷卡后的价格
disprice_gd
float
3
高等级车刷卡后的价格
companyID
int
1
公司编号
company_name
varchar
30
公司名称
station_id
int
3
站点的编号
station_name
varchar
30
站点的名称
orderid
int
2
站点在一条线路中的位置
typeID
int
2
线路类型编号,共12类
type_name
varchar
5
线路类型名
direction
char
4
公交行驶方向,“去程”或“回程”
line
varchar
500
公交行驶途径的站点
2、数据流
名称
说明
数据流来源
数据流去向
用户查询公交线路记录信息
记录公交车线路查询信息
线路+站点
查询结果输出
3、处理过程
名称
简述
输入的数据流
处理
输出的数据流
线路查询
根据公交线路查询该线路上的所有站点
公交车编号
根据编号查询
查询出该线路上的所有公交车站点
站点查询
根据站点查询出经过该站点的所有公交车编号
站点名称
根据站点查询公交车的编号
路过该站点的所有公交车编号
站站查询
根据两个站点查询出所有线路
两个不同的站点
根据站点查询出所有线路
输出查询出的线路
三、数据库概念结构设计
根据需求分析,可知本系统有以下E-R图:
1、公交站点E-R图3、公交公司E-R图
2、公交车E-R图4、公交线路类型E-R图
5、合并E-R图
四、数据库逻辑结构设计
4.1关系表设计
根据ER模型,对本系统设计出5个关系表:
1、公交车表
bus(name,start_time,end_time,buslength1,buslength2,pt_price,dis_price,gd_price,company_id,type_id)
列名
数据类型
NULL
约束
说明
name
varchar(5)
notnull
primarykey
公交车的名称
start_time
time
notnull
最早发车时间
end_time
time
notnull
收班时间
buslength1
int
notnull
去程的站点数
buslength2
int
notnull
回程的站点数
pt_price
float
null
普通车的票价
disprice_pt
float
null
普通车刷卡
gd_price
float
null
高等级车的票价
disprice_gd
float
null
高等级车刷卡
companyID
int
notnull
foreignkeyreferencescompany(id),
typeID
int
notnull
Foreignkeyreferencesbus_type(id)
2、公交站点station(id,name)
列名
数据类型
NULL
约束
说明
id
int
notnull
primarykey
站点的编号
name
varchar(30)
notnull
站点的名称
3、线路与站点关联表bus_station(bus_name,station_id,orderid)
记录公交线路经过站点的信息,并且按顺序记录各站点,以此记录线路与站点的关联信息。
列名
数据类型
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.