《数据库实训项目报告》
班级:112803
姓名:党浩亮
学号:080183
完成日期:2011-6-26
(1) 实训题目:
《交警队车辆管理系统》
(2) 实训目的:
通过对《数据库系统概论》这门课程的学习,学会建立一个比较复杂的数据库系统,可以实现最基本的各项操作,例如,利用SQ语言对基本数据的查询,删除,修改以及合理的创建触发器和存贮过程。在时间允许的情况下,试着做一前台,能够使其链接至数据库并能实现对基本数据的录入,删除和修改,对数据库涉及到的一系列内容进一步去认识与了解,能够在以后的工作中灵活运用。 (3)实训要求:
1、用Microsoft SQL Server 2000中建立所要求的数据库
2、用SQL语言实现数据库中数据的查询、删除、修改等操作
3、用Visual Studio 2008 设计并编程实现该数据库的前台操作
(4)正文: ① 需求分析:
随着社会经济的快速发展,人们的生活水平在逐步提高,因此对物质的需求也随之增长。汽车则成为人们出行、旅游的主要代步工具,与此同时给各行政机关单位(交警队)带来了不少新的问题,例如:意外交通事故的发生、车辆的违章、车辆的盗窃犯罪等等。为了方便各行政机关单位的管理,特开发出《交警队车辆管理系统》,它可以帮交警队所有执法人员能够轻松的去工作,高质量的完成任务,其该系统所具有功能如下: (1)录入信息
当用户购买车辆后,可以实现车辆,驾驶员等所有的相关信息,按照某个特定的顺序备录在案。 (2)修改信息
当用户因某种原因将其车辆转让、出售给他人时,可以更改其驾驶员的所有信息。
(3)删除信息
由于意外事故而造成车辆报废或是驾驶员死亡,可以将关于车辆驾信息或驶员信息删除掉。 (4)查询信息
车辆的被盗或是利用该车辆犯罪的,可以查询出该车的驾驶员所有信息,能够帮助公安机关破案。 (5)统计信息
能够实现在某一时间或某一区域内的车辆违章、事故的数量等信息,作为文件上报给上级部门。 ② 概要设计:
交警队车辆管理系统数据流图
③ 详细设计:
数据模型:
驾驶员
(档案号、姓名、性别、出生日期、身份证号、准驾车型、住址、联系电话、累计积分)
汽车
(车主姓名、车牌号码、发动机号、车辆名称、车辆外观、购车日期、购车时间、上户地点、上户时间、车辆用途、耗油量、出厂日期、报废日期)
保险
(车牌号码、车主姓名、投保日期、保险类型、保险金额、终止日期、保险公司、经手人)
违章/事故(车牌号码、发生时间、发生地点、事故代码、处理部门) 处罚条例(事故代码、事故原因、刑事责任、罚款金额) 积分
(积分代码、积分、扣分原因)
统计
(汽车总量、事故总量、罚款总金额、死亡总人数) 注:单下划线为主键;双下划线为外键
④系统实现:
1、创建driver表
create table driver ( ddaID int
primary key,
/*档案编号*/
dname char(10),
/*车主姓名*/
dsex
char(2),
/*车主性别*/
dbirth datetime,
/*出生日期*/
dID
char(50)
foreign key,
/*身份证号*/
dchx
char(3),
/*准驾车型*/
daddr char(50),
/*车主住址*/
dtel
int,
/*联系电话*/
zjifen int
/ *累计积分*/ );
2、创建car表:
create table car ( carno char(20)
foreign key,
/*车牌号码*/
dname char(10),
/*车主姓名*/
cmaID char(20)
primary key,
/*发动机号*/
cname char(20),
/*车辆名称*/
ccolor char(10),
/*车辆外观*/
cbuyt datetime,
/*购车日期*/
ccost char(20),
/*购车价格*/
caddr char(20),
/*上户地点*/
cshahut datetime,
/*上户日期*/
cyongtu char(10),
/*车辆用途*/
chaoyou float,
/*耗油量*/
cshecha datetime,
/*出厂日期*/
cbaofei datetime
/*报废日期*/ );
3、创建baoxian表:
create table baoxian ( carno char(20)
primary key,
/*车牌号码*/
dname char(10),
/*车主姓名*/
toubt datetime,
/*投保日期*/
type char(10),
/*投保类型*/
baomon char(20),
/*投保金额*/
deadl datetime,
/*保险终止日期*/
bname char(50),
/*保险公司*/
jsname char(10)
/*经手人姓名*/ );
4、创建accident表:
create table accident ( carno char(20)
primary key,
/*车牌号码*/
acctime datetime,
/*违章/事故时间*/
accaddr char(50),
/*违章/事故地点*/
accID
char(30)
foreign key,
/*违章/事故代码*/
accdept char(20)
/*处理部门*/ );
5、创建daima表:
create table daima (accID char(20)
primary key,
/*事故代码*/ acccase char(300),
/*事故原因*/ acccrim char(100),
/*刑事责任*/ accmone char(20)
/*罚款金额*/ );
6、创建jifen表:
create table jifen (jfedaima char(20)
primary key,
/*积分代码*/ jifen
int,
/*积分*/ kccase char(300)
/*扣分原因*/ );
7、创建total表:
create table total ( carcount char(60),
/*汽车总量*/
acccount char(20),
/*事故总量*/
kuacount char(20),
/*罚款总金额*/
diecount char(60),
/*死亡总人数*/ );
⑤系统测试:
1、车牌号为“陕C84261”的汽车发生重大交通事故,查询该车的所属者姓名,并通过电话联系其家属。
select driver.name,daddr,dtel from driver,car where carno=’陕C84261’ and
driver.dname=car.name;
2、李东先生买了最近一辆汽车,要求将其他本人的基本信息存入档案、由于搬家的原因需更改相应的地址、最后因一场车祸而不幸身亡则删除其信息。 (1) insert
into driver(ddaID,dname,dsex,dbirth,dID,dchx,daddr,dtel) values(\'1000011\',\'李东\',\'男\',\'1985-03-25\',\'610532198503250465\',\'A\',\'长安区官堰村\',\'856304851\');
(2) update driver
set daddr=’西安交通大学’
where ddaID=’1000011’;
(3) delete from driver where ddaID=\'1000011\';
3、查询关于车牌号为陕AT7694的所有违章/事故信息。(accident与daima表的链接) select acctime,accaddr,acccase,acccrim,accmone,accdept from accident,daima where carno=\'陕AT7694\' and
accident.accID=daima.accID;
4、档案号为100004的司机因在高速公路上倒车、逆行、穿越中央分隔带掉头的原因而被扣除相应的积分,更新driver表的累计积分。
update driver set zjifen=zjifen-jifen from jifen where ddaID=\'1000004\' and
jfdaima=\'1111116\'
5、建立出生于1987年的驾驶员的视图 create view IS_driver as select dname,dsex from driver where dbirth >=\'1987-1-1\' and
dbirth
6、建立驾驶黑色汽车的驾驶员姓名及身份证号的视图 create view GG_car as select driver.name,dID,ccolor from driver,car where driver.dname=car.dname and
ccolor=\'黑色\';
7、创建一个触发器,可以实现当某用户购买一辆新车时,录入该信息后,统计表中的汽车总量数量会自动加一。 create trigger Intotal
on car for insert as declare @qiche char(6)
select @qiche=carno from inserted
update total
set carcount=carcount+1
8、创建一触发器,可以实现当某一司机因重大交通事故而死亡的,删除driver表中的相关信息,其total表中死亡人数自动加一。 create trigger AAA on driver for delete as declare @ren int select @ren=ddaID from deleted update total set diecount=diecount+1 删除档案号为1000008的驾驶员信息:
total的结果:
9、创建一个BBC,用于获取指定车辆的车辆信息
If exists
(select name from sysobjects
where name=\'BBC\' and type=\'p\' )
drop procedure BBC go create procedure BBC @chepai char(10) as
select *
from driver
where carno=@chepai go exec BBC \'空251234\'
10、创建一个存储过程CCD,用于获取给定驾驶员积分是否达到合格的标准。 If exists
(select name from sysobjects
where name=\'CCD\' and type=\'p\' )
drop procedure CCD go create procedure CCD @xingming char(20) as declare @jifen int select @jifen=zjifen from driver,car where driver.dname=@xingming and
driver.dname=car.dname if @jifen
print\'及格\' else print\'不及格\' exec CCD \'安虎\'
11、创建一存储过程,用于提醒保险即将到期的用户是否继续续险。 If exists
(select name from sysobjects
where name=\'ABC\' and type=\'p\' )
drop procedure ABC go create procedure ABC @chepai char(20) as declare @riqi datetime select @riqi=deadl from baoxian where carno=@chepai
if @riqi>2012/5/3
print\'您的保险已到期,确定是否及时续险\' else print\'您的保险尚未到期\' exec ABC \'陕K84611\'
12、创建一存储过程,获取所有驾驶员的平均积分,以评估驾驶员的违章状况。 If exists
(select name from sysobjects
where name=\'ACC\' and type=\'p\' )
drop procedure ACC go create procedure ACC as
select avg(zjifen) from driver exec ACC 修改积分后的driver表:
获取结果:
⑥总结:
经过老师在实训中对本系统的仔细分析,以及同学的帮助,同事翻阅了大量的书本和网上资料,终于将其《交警对车辆管理系统》的后台部分完成,其该系统结构清晰,可使其执法人员在短暂的时间内掌握其各种操作,提高工作效率。但它还具有一定的局限性,例如属性驾驶员照片、车辆照片等都未能在此实现,因此,有许多地方还需要进一步的分析改进,望老师能够见谅,在以后的数据库系统设计过程中,自己会考虑周全,不断的完善系统,使用户百分满意,更能方便现今的生活。 ⑦参考文献:
(1) 《中华人民共和国道路交通安全法》
(2) 张海藩
《软件工程导论》第五版
清华大学出版社
(3) 王珊、萨师煊
《数据库系统概论》第四版
高等教育出版社
(4) 张登辉、沙嘉祥
《ASP.NET网络应用案例教程》
北京大学出版社