出租车管理系统Word文档下载推荐.docx
《出租车管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《出租车管理系统Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
司机编号 姓名 性别地址身份证号 驾驶证号发证时间驾龄
租赁表
定义了租赁的有关信息
司机编号车牌号 期限开始日期 截止日期租赁费 车保费
违章表
定义了违章的有关信息
司机编号姓名 扣分 违章时间
违章地点
出车记录表
定义了每天哪些司机的出车情况
司机编号车牌号 出车日期
3.2概念结构设计
3.2.1概念结构设计的方法
概念设计阶段我采用自底向上的方法,即自顶向下的进行需求分析,然后再自底向上的进行概念结构设计。
对已经细化到无法再分的阶段逐步集成在一起,最终合成一个全局概念模式。
3.2.2概念结构设计的步骤
第一步是进行局部视图的设计:
由于高层的数据流图只能反映系统的概貌,而中层流图能较好的反映系统中各局部应用的子系统组成。
因此我们先逐一的设计分E-R图。
第二步是进行视图的集成:
各子系统的E-R图设计好之后,下一步就是要将所有的分E-R图合成一个系统的总E-R图,一般有两个方式,多个分E-R图一次集成,另一种是一次集成两个分E-R图。
我想采用一次集成两个分E-R图的方式。
图3-1出车记录E-R图
图3-2出租车 E-R图
图3-3司机R-R图
图3-4租赁E-R图
图3-5违章E-R图
图3-6总体概念结构E-R图
3.3逻辑结构设计
E-R图向关系模型的转换
将上述总体概念结构E-R图转化成关系模型,根据这个关系写出数据依赖,确定数据依赖。
ﻩ司机与出租车是一对一的关系,司机、出租车与租赁是一对一的关系,司机与违章是一对一的关系。
司机(司机编号,姓名,性别,地址,身份证号,驾驶证号,发证时间,驾龄)
出租车(车牌号,入户时间,车型,颜色,出租情况,营业时间)
租赁表(司机编号,车牌号,期限,开始日期,截止日期,租赁费,车保费)
出车记录表(司机编号,车牌号,出车日期)
违章表(司机编号,姓名,扣分,违章时间,违章地点)
3.4物理设计
物理表结构如下
表3-7司机表(Driver)
列标示
数据类型
长度
约束
列意义
DriverNumber
char
6
主键
司机编号
Name
char
10
不为空
姓名
Sex
bit
默认
性别
Address
varchar
40
地址
IDumber
20
身份证号
LincenseNumber
char
驾驶证号
CertificateDate
datetime
发证时间
DriverAge
tinyint
驾龄
表3-8出租车表(Taxi)
TaxiNumber
车牌号
StartDate
datetime
入户时间
TaxiShape
车型
Color
颜色
RentSituation
bit
出租情况
BusinessTime
tinyint
营业时间
表3-9租赁表(Rent)
DriverNumber
TaxiNumber
char
6
LimitTime
tinyint
期限
StartDate
datetime
开始日期
EndDate
datetime
截止日期
RentFee
float
租赁费
ProtectionFee
Float
车保费
表3-10违章表(Violate)
DriverNumber
Name
char
Points
tinyint
扣分
ViolateDate
违章时间
ViolateAddress
varchar
违章地点
表3-11出车记录表(Notes)
DriverNumber
Name
char
10
DriveDate
datetime
出车日期
3.5 数据库的实施
3.5.1.创建表
/*创建数据库*/
CREATEDATABASETAXIﻩﻩ/*数据库名*/
ON
(
NAME=TAXI_DATA,
'
D:
\MicrosoftSQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\TAXI.mdf'
SIZE=10MB,
MAXSIZE=100MB,
)
LOGONﻩﻩﻩ
ﻩNAME='
TAXI_log'
,ﻩﻩﻩﻩﻩ/*日志*/
ﻩ'D:
\MicrosoftSQLServer\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\TAXI_Log.ldf'
SIZE=10MB,
MAXSIZE=100MB,
/*创建基本表*/
/*创建司机表*/
USETAXI
CREATETABLEDriver
DriverNumber char(6)NOT NULLPRIMARYKEY, ﻩ/*司机编号*/
Name char(10),ﻩﻩﻩﻩ /*姓名*/
SexbitNOT NULL,ﻩﻩﻩﻩ /*性别*/
Addressvarchar(40)NOTNULL, ﻩ/*地址*/
ﻩIDNumber char(18)NOTNULL,ﻩﻩ/*身份证号*/
ﻩlicenseNumber char(10)NOT NULL,ﻩﻩ ﻩ/*驾驶证号*/
ﻩCertificateDatedatetime NOTNULL,ﻩﻩ /*发证时间*/
DriverAge tinyintNOTNULLﻩﻩﻩﻩ/*驾龄*/
/*创建出租车表*/
CREATETABLETaxi
ﻩTaxiNumberchar(6)NOTNULLPRIMARY KEY,ﻩ/*车牌号*/
ﻩStartDate datetimeNOT NULL,ﻩﻩﻩ/*入户时间*/
TaxiShapechar(10)NOTNULL,ﻩ/*车型*/
ﻩColorchar(10)NOTNULL,ﻩﻩ/*颜色*/
RentSituationbitNOTNULLDEFAULT 1,ﻩ/*出租情况*/
ﻩBusinessTimetinyint NOTNULLﻩﻩﻩ/*营业时间*/
/*创建租赁表*/
CREATETABLERent
DriverNumberchar(6)NOTNULL,ﻩ/*司机编号*/
ﻩTaxiNumberchar(6)NOT NULL,ﻩ/*车牌号*/
LimitTimetinyintNOTNULL,ﻩﻩ/*期限*/
StartDatedatetimeNOTNULL,ﻩ/*开始日期*/
EndDatedatetimeNOTNULL,ﻩﻩﻩﻩ/*截止日期*/
RentFeefloat NOTNULL,ﻩﻩ/*租赁费*/
ProtectionFeefloat NOTNULL,ﻩﻩﻩ/*车保费*/
PRIMARYKEY(DriverNumber,TaxiNumber)
/*创建违章表*/
CREATE TABLEViolate
DriverNumberchar(6)NOTNULLPRIMARYKEY,ﻩ/*司机编号*/
ﻩNamechar(10),ﻩﻩﻩﻩﻩ /*姓名*/
PointstinyintNOTNULL,ﻩﻩﻩ/*扣分*/
ViolateDatedatetimeNOT NULL,ﻩﻩ /*违章时间*/
ViolateAddressvarchar(40)NOTNULL/*违章地点*/
/*创建出车表*/
CREATETABLENotes
DriverNumberchar(6)NOTNULL,/*司机编号*/
ﻩTaxiNumber char(6)NOTNULL,ﻩﻩ/*车牌号*/
DriverDate datetimeNOTNULLﻩﻩﻩ/*出车日期*/
3.5.2.创建主要视图
ﻩ视图是从一个或多个表导出的表。
视图是数据库的用户使用数据库的观点。
司机和出租车是主要的实体,而这两个实体的信息又在不同的表中,作为出租车公司对司机和出租车有时关心的数据又是不同的,即使是相同的数据,也可能又不同的操作。
有时候仅有的表的列属性名是不能满足需求的,于是根据不同的需求,在物理的数据库上定义他们对数据库所要求的数据结构。
(1)创建Driver_VIEW视图,包含司机所有的信息
USE TAXI
GO
CREATE VIEWDriver_VIEW(司机编号,姓名,性别,地址,身份证号,驾驶证号,发证时间,驾龄)
AS
SELECT* FROMDriver
GO
(2)创建Taxi_VIEW视图,包含出租车的所有信息。
USETAXI
CREATEVIEWTaxi_VIEW(车牌号,入户时间,车型,颜色,出租情况,每天营业时长)
ﻩAS
SELECT*FROMTaxi
(3)创建Rent_VIEW视图,包含租赁的所有信息。
USETAXI
CREATEVIEWRent_VIEW(司机编号,车牌号,期限,开始日期,截止日期,租赁费,车保费)
ﻩSELECT*FROMRent
(4)建租赁表平均租赁费视图Violate_VIEW_AVG,列名为平均租赁费,试图中列名为RentFee_avg。
USETAXI
CREATEVIEWViolate_VIEW_AVG(平均租赁费)
AS
SELECTAVG(RentFee)
FROMRent
ﻩ
3.5.3.创建索引
ﻩ索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表。
(1)为Driver表的姓名创建唯一索引Driver_name
USE TAXI
CREATEUNIQUE INDEXDriver_name
ﻩONDriver(Name)
(2)根据Rent表的司机编号和车牌号创建复合索引。
USETAXI
CREATE INDEXRent_IND
ON Rent(DriverNumber,TaxiNumber)
GO
3.5.4.创建表字段的约束关系
数据完整性包括实体完整性,域完整性和参照完整性。
租赁表中的期限的取值肯定要有一定的范围,违章表中的扣分也有范围,租赁表的截止日期必须在开始日期的之后,都可以通过CHECK约束来实现,这就体现了域的完整性。
租赁表中的司机编号和车牌号都由司机表和出租车表中对应,当删除或修改司机表中的司机编号和出租车表中的车牌号也应当对应修改租赁表中的司机编号和车牌号,这体现了表与表之间的参照完整性。
(1)添加Rent表中期限的约束条件。
USE TAXI
ALTERTABLERent
ADDCONSTRAINT LimitTime_constraintCHECK(LimitTime>
=0ANDLimitTime<
=10)
(2)添加Violate表中扣分的约束条件。
USETAXI
GO
ALTERTABLEViolate
ﻩADDCONSTRAINTPoints_constraintCHECK(Points>
=0AND Points<
=12)
(3)在Rent表中的TaxiNumber列添加外键约束,参照Taxi表中的列
USETAXI
GO
ALTERTABLERent
ﻩADDCONSTRAINTFK_TaxiNumber FOREIGNKEY(TaxiNumber)REFERENCES Taxi(TaxiNumber)ﻩﻩﻩﻩ
(4)在Rent表中添加日期的约束。
3.5.5.创建存储过程
存储过程分为系统存储过程、扩展存储过程和用户存储过程。
存储过程可以接收参数、返回表格或标量结果和消息,执行存储过程后,就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码执行,提高了系统性能。
当给定了一个司机的编号或出租车的车牌号时想直接返回该司机或该出租车的信息情况,不需要任何参数,或者使用给定的参数返回信息。
(1)创建返回000001司机的信息情况。
CREATE PROCEDURE driver_info
AS
ﻩSELECT *FROMDriverWHERE DriverNumber='
000001'
/*执行存储过程driver_info*/
EXECUTEdriver_info
/*或者*/
driver_info
(2)创建返回出租车的信息情况。
USE TAXI
CREATE PROCEDUREtaxi_info
ﻩAS
ﻩSELECT*FROMTaxi WHERETaxiNumber='
010001'
/*执行存储过程taxi_info*/
EXECUTEtaxi_info
(3)从Rent表中查询指定司机编号的租赁信息
USE TAXI
CREATEPROCEDURErent_info@numberchar(6)
AS
SELECT*FROMRentWHEREDriverNumber=@number
/*执行存储过程rent_info*/
EXECUTErent_info'
000002'
(4) 从Violate表中查询指定司机编号的违章情况
USE TAXI
CREATEPROCEDUREviolate_info@numberchar(10)='000001'
AS
ﻩSELECTPointsAS'扣分'
FROMViolate WHERE DriverNumber=@number
/*执行存储过程*/
EXECUTEviolate_infoﻩﻩ/*参数私用默认值*/
EXECUTE violate_info'000002'
ﻩ/*传递给@number的实参为*/
3.5.6.创建触发器
ﻩ当查询一个表中是否存在信息时,或者向表中添加数据时,想显示有无要查的信息或想知道到底有没有执行,可以用触发器对相应的表做更改和显示操作与否。
(1)在Drivr表上创建触发器,每次修改操作时,定义一个变量,让它显示插入成功。
USETAXI
CREATE TRIGGER driver_update
ﻩONDriverAFTERUPDATE
ﻩBEGIN
ﻩDECLARE@strchar(20)
ﻩﻩSET@str='
修改成功'
ﻩﻩPRINT@str
ﻩEND
/*对Driver表更新信息*/
UPDATEDriverSETIDNumber='
372929199106033619'
WHEREDriverNumber='
000004'ﻩ
(2)当修改Driver表中的司机编号时,修改Rent表中对应的司机编号,同时修改Violate表和Notes表中的司机编号。
USETAXI
CREATE TRIGGERrent_update1
ﻩONDriverAFTER UPDATE
ﻩAS
BEGIN
DECLARE@old_numberchar(6),@new_numberchar(6)
ﻩSELECT@old_number=DriverNumber FROM deleted
ﻩSELECT @new_number=DriverNumberFROMinserted
ﻩUPDATERentSETDriverNumber=@new_numberWHEREDriverNumber=@old_number
ﻩﻩUPDATEViolate SETDriverNumber=@new_numberWHEREDriverNumber=@old_number
ﻩUPDATENotesSET DriverNumber=@new_number WHEREDriverNumber=@old_number
ﻩﻩ
GO
/*对Taxi表更新信息*/
UPDATEDriversetDriverNumber='
000009'
WHERE DriverNumber='000001'
查看三个表中的变化。
3.5.7.创建用户定义的函数和表值函数
当用户在编程时常常需要将一个或多个T-SQL语句组成子程序,以便反复调用。
这就要用到用户定义的标量值函数和表值函数。
标量值函数返回一个标量值,表值函数返回一个整表。
当想计算得出Rent表中出租车的平均车保费时可以创建一个标量值函数,当想通过给定的司机编号查询已经创建好的Driver_VIEW视图上给定司机编号的相关信息时可以创建一个返回整个表或视图的表值函数来实现。
(1)创建用户定义函数,实现计算出租车的平均车保费。
USETAXI
CREATE FUNCTIONProtectorFee()RETURNSint
AS
BEGIN
DECLARE @fee int
SELECT@fee=
(
ﻩSELECT avg(ProtectionFee)FROMRent
)
ﻩRETURN@fee
END
/*调用定义的ProtectionFee函数。
*/
DECLARE@fee int
SELECT@fee=dbo.ProtectorFee()
SELECT@fee AS'出租车的平均租赁费'
(2)创建一个表值函数,实现查询给定司机编号的相关信息。
USETAXI
CREATEFUNCTIONfn_view(@numberchar(6))
RETURNStable
ASRETURN
SELECT司机编号,姓名,性别,地址,身份证号,驾驶证号FROMTAXI.dbo.Driver_VIEW
ﻩWHERE司机编号=@number
/*调用定义好的标志函数*/
SELECT*FROMfn_view('
000003')
3.5.8.创建数据库的安全管理角色
数据库的安全性管理是数据库服务器应实现的重要功能和之一。
对用户登录进行身份验证,当用户登录到数据库系统时,系统对该用户的账户和口令进行验证,包括确认用户账户是否有效以及能否访问数据库系统。
对用户进行的操作进行权限控制,当用户登录到数据库后,只能对数据库中的数据在允许的权限内进行操作。
(1)创建SQLServer登录名sql_tao,密码为123456。
USETAXI
CREATELOGINsql_tao
WITHPASSWORD='
123456'
,
DEFAULT_DATABASE=TAXI
/*将sql_tao用户添加到sysadmin固定服务器角色中。
EXECsp_addsrvrolemember'
sql_tao'
'
sysadmin'
(2)创建数据库用户david
CREATEUSER david
FORLOGINsql_tao
ﻩWITHDEFAULT_SCHEMA=dbo
/*将david用户添加到sysadmin固定数据库角色中db_owner。
*/
EXECsp_addrolemember'
db_owner'
david'
(3) 在TAXI数据库上的用户david授予创建表的权限*/
USETAXI
GRANTCREATE TABLETOd