出租车管理系统.docx
- 文档编号:9783674
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:21
- 大小:118.60KB
出租车管理系统.docx
《出租车管理系统.docx》由会员分享,可在线阅读,更多相关《出租车管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
出租车管理系统
软件学院
课程设计报告书
课程名称SQLServer数据库课程设计
设计题目出租车管理系统
专业班级软件工程
(1)班
学号201002505123
姓名朱阳阳
指导教师亓春霞
2012年10月
1设计目的
此设计项目是对学习SQLServer数据库课程后进行的一次全面的综合练习。
目的在于加深对数据库基础理论和基本知识的理解,掌握使用数据库进行软件设计的基本方法,提高运用数据库解决实际问题的能力,最终实现对于给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。
同时,此设计对于将来的毕业设计和具体工作实践将有重要的意义。
2设计任务
出租车管理系统
3设计内容
3.1需求分析任务
3.1.1需求分析设计
司机和出租车是出租车公司最要的资源,是创造效益的资源。
要想提高出租车公司的效益和服务质量,首先从做好对司机和出租车的管理着手。
一是对出租车司机的信息的管理,二是对出租车信息和租赁的管理。
出租车管理系统将很大程度上解决出租车公司在此工作上的难度。
3.1.2需求分析过程
功能需求简介:
针对出租车行业的特点开发的出租车管理系统,实现出租车公司内部及时准确地采集内部各种数据信息,处理高速化和网络办公自动化。
实现对出租车公司司机的信息记录,操作,出租车管理,提供精确查询等多种查询方式。
3.1.3调查需求
基本操作:
对出租车信息表、司机信息表、租赁表、违章表的查询、添加、更新、删除等功能。
特别操作:
对租赁表的功能。
3.1.4系统数据分析
表2-1数据结构定义
数据结构名
含义说明
组成
出租车信息表
定义了出租车有关信息
车牌号入户时间车型颜色出租情况营业时间
司机信息表
定义了司机有关信息
司机编号姓名性别地址身份证号驾驶证号发证时间驾龄
租赁表
定义了租赁的有关信息
司机编号车牌号期限开始日期截止日期租赁费车保费
违章表
定义了违章的有关信息
司机编号姓名扣分违章时间
违章地点
出车记录表
定义了每天哪些司机的出车情况
司机编号车牌号出车日期
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
char
20
不为空
身份证号
LincenseNumber
char
10
不为空
驾驶证号
CertificateDate
datetime
默认
不为空
发证时间
DriverAge
tinyint
默认
不为空
驾龄
表3-8出租车表(Taxi)
列标示
数据类型
长度
约束
列意义
TaxiNumber
char
6
主键
车牌号
StartDate
datetime
默认
不为空
入户时间
TaxiShape
char
10
不为空
车型
Color
char
10
不为空
颜色
RentSituation
bit
默认
不为空
出租情况
BusinessTime
tinyint
默认
不为空
营业时间
表3-9租赁表(Rent)
列标示
数据类型
长度
约束
列意义
DriverNumber
char
6
主键
司机编号
TaxiNumber
char
6
不为空
车牌号
LimitTime
tinyint
默认
不为空
期限
StartDate
datetime
默认
不为空
开始日期
EndDate
datetime
默认
不为空
截止日期
RentFee
float
默认
不为空
租赁费
ProtectionFee
Float
默认
不为空
车保费
表3-10违章表(Violate)
列标示
数据类型
长度
约束
列意义
DriverNumber
char
6
主键
司机编号
Name
char
10
不为空
姓名
Points
tinyint
默认
不为空
扣分
ViolateDate
datetime
默认
不为空
违章时间
ViolateAddress
varchar
40
不为空
违章地点
表3-11出车记录表(Notes)
列标示
数据类型
长度
约束
列意义
DriverNumber
char
6
主键
司机编号
Name
char
10
不为空
姓名
DriveDate
datetime
默认
不为空
出车日期
3.5数据库的实施
3.5.1.创建表
/*创建数据库*/
CREATEDATABASETAXI/*数据库名*/
ON
(
NAME=TAXI_DATA,
FILENAME='D:
\MicrosoftSQLServer\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\TAXI.mdf',
SIZE=10MB,
MAXSIZE=100MB,
FILEGROWTH=10%
)
LOGON
(
NAME='TAXI_log',/*日志*/
FILENAME='D:
\MicrosoftSQLServer\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\TAXI_Log.ldf',
SIZE=10MB,
MAXSIZE=100MB,
FILEGROWTH=1MB
)
/*创建基本表*/
/*创建司机表*/
USETAXI
CREATETABLEDriver
(
DriverNumberchar(6)NOTNULLPRIMARYKEY,/*司机编号*/
Namechar(10),/*姓名*/
SexbitNOTNULL,/*性别*/
Addressvarchar(40)NOTNULL,/*地址*/
IDNumberchar(18)NOTNULL,/*身份证号*/
licenseNumberchar(10)NOTNULL,/*驾驶证号*/
CertificateDatedatetimeNOTNULL,/*发证时间*/
DriverAgetinyintNOTNULL/*驾龄*/
)
/*创建出租车表*/
CREATETABLETaxi
(
TaxiNumberchar(6)NOTNULLPRIMARYKEY,/*车牌号*/
StartDatedatetimeNOTNULL,/*入户时间*/
TaxiShapechar(10)NOTNULL,/*车型*/
Colorchar(10)NOTNULL,/*颜色*/
RentSituationbitNOTNULLDEFAULT1,/*出租情况*/
BusinessTimetinyintNOTNULL/*营业时间*/
)
/*创建租赁表*/
CREATETABLERent
(
DriverNumberchar(6)NOTNULL,/*司机编号*/
TaxiNumberchar(6)NOTNULL,/*车牌号*/
LimitTimetinyintNOTNULL,/*期限*/
StartDatedatetimeNOTNULL,/*开始日期*/
EndDatedatetimeNOTNULL,/*截止日期*/
RentFeefloatNOTNULL,/*租赁费*/
ProtectionFeefloatNOTNULL,/*车保费*/
PRIMARYKEY(DriverNumber,TaxiNumber)
)
/*创建违章表*/
CREATETABLEViolate
(
DriverNumberchar(6)NOTNULLPRIMARYKEY,/*司机编号*/
Namechar(10),/*姓名*/
PointstinyintNOTNULL,/*扣分*/
ViolateDatedatetimeNOTNULL,/*违章时间*/
ViolateAddressvarchar(40)NOTNULL/*违章地点*/
)
/*创建出车表*/
CREATETABLENotes
(
DriverNumberchar(6)NOTNULL,/*司机编号*/
TaxiNumberchar(6)NOTNULL,/*车牌号*/
DriverDatedatetimeNOTNULL/*出车日期*/
)
3.5.2.创建主要视图
视图是从一个或多个表导出的表。
视图是数据库的用户使用数据库的观点。
司机和出租车是主要的实体,而这两个实体的信息又在不同的表中,作为出租车公司对司机和出租车有时关心的数据又是不同的,即使是相同的数据,也可能又不同的操作。
有时候仅有的表的列属性名是不能满足需求的,于是根据不同的需求,在物理的数据库上定义他们对数据库所要求的数据结构。
(1)创建Driver_VIEW视图,包含司机所有的信息
USETAXI
GO
CREATEVIEWDriver_VIEW(司机编号,姓名,性别,地址,身份证号,驾驶证号,发证时间,驾龄)
AS
SELECT*FROMDriver
GO
(2)创建Taxi_VIEW视图,包含出租车的所有信息。
USETAXI
GO
CREATEVIEWTaxi_VIEW(车牌号,入户时间,车型,颜色,出租情况,每天营业时长)
AS
SELECT*FROMTaxi
GO
(3)创建Rent_VIEW视图,包含租赁的所有信息。
USETAXI
GO
CREATEVIEWRent_VIEW(司机编号,车牌号,期限,开始日期,截止日期,租赁费,车保费)
AS
SELECT*FROMRent
GO
(4)建租赁表平均租赁费视图Violate_VIEW_AVG,列名为平均租赁费,试图中列名为RentFee_avg。
USETAXI
GO
CREATEVIEWViolate_VIEW_AVG(平均租赁费)
AS
SELECTAVG(RentFee)
FROMRent
3.5.3.创建索引
索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表。
(1)为Driver表的姓名创建唯一索引Driver_name
USETAXI
GO
CREATEUNIQUEINDEXDriver_name
ONDriver(Name)
GO
(2)根据Rent表的司机编号和车牌号创建复合索引。
USETAXI
GO
CREATEINDEXRent_IND
ONRent(DriverNumber,TaxiNumber)
GO
3.5.4.创建表字段的约束关系
数据完整性包括实体完整性,域完整性和参照完整性。
租赁表中的期限的取值肯定要有一定的范围,违章表中的扣分也有范围,租赁表的截止日期必须在开始日期的之后,都可以通过CHECK约束来实现,这就体现了域的完整性。
租赁表中的司机编号和车牌号都由司机表和出租车表中对应,当删除或修改司机表中的司机编号和出租车表中的车牌号也应当对应修改租赁表中的司机编号和车牌号,这体现了表与表之间的参照完整性。
(1)添加Rent表中期限的约束条件。
USETAXI
GO
ALTERTABLERent
ADDCONSTRAINTLimitTime_constraintCHECK(LimitTime>=0ANDLimitTime<=10)
GO
(2)添加Violate表中扣分的约束条件。
USETAXI
GO
ALTERTABLEViolate
ADDCONSTRAINTPoints_constraintCHECK(Points>=0ANDPoints<=12)
GO
(3)在Rent表中的TaxiNumber列添加外键约束,参照Taxi表中的列
USETAXI
GO
ALTERTABLERent
ADDCONSTRAINTFK_TaxiNumberFOREIGNKEY(TaxiNumber)REFERENCESTaxi(TaxiNumber)
GO
(4)在Rent表中添加日期的约束。
3.5.5.创建存储过程
存储过程分为系统存储过程、扩展存储过程和用户存储过程。
存储过程可以接收参数、返回表格或标量结果和消息,执行存储过程后,就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码执行,提高了系统性能。
当给定了一个司机的编号或出租车的车牌号时想直接返回该司机或该出租车的信息情况,不需要任何参数,或者使用给定的参数返回信息。
(1)创建返回000001司机的信息情况。
USETAXI
GO
CREATEPROCEDUREdriver_info
AS
SELECT*FROMDriverWHEREDriverNumber='000001'
GO
/*执行存储过程driver_info*/
EXECUTEdriver_info
GO
/*或者*/
driver_info
GO
(2)创建返回出租车的信息情况。
USETAXI
GO
CREATEPROCEDUREtaxi_info
AS
SELECT*FROMTaxiWHERETaxiNumber='010001'
GO
/*执行存储过程taxi_info*/
EXECUTEtaxi_info
GO
(3)从Rent表中查询指定司机编号的租赁信息
USETAXI
GO
CREATEPROCEDURErent_info@numberchar(6)
AS
SELECT*FROMRentWHEREDriverNumber=@number
GO
/*执行存储过程rent_info*/
EXECUTErent_info'000002'
(4)从Violate表中查询指定司机编号的违章情况
USETAXI
GO
CREATEPROCEDUREviolate_info@numberchar(10)='000001'
AS
SELECTPointsAS'扣分'FROMViolateWHEREDriverNumber=@number
GO
/*执行存储过程*/
EXECUTEviolate_info/*参数私用默认值*/
EXECUTEviolate_info'000002'/*传递给@number的实参为*/
GO
3.5.6.创建触发器
当查询一个表中是否存在信息时,或者向表中添加数据时,想显示有无要查的信息或想知道到底有没有执行,可以用触发器对相应的表做更改和显示操作与否。
(1)在Drivr表上创建触发器,每次修改操作时,定义一个变量,让它显示插入成功。
USETAXI
GO
CREATETRIGGERdriver_update
ONDriverAFTERUPDATE
AS
BEGIN
DECLARE@strchar(20)
SET@str='修改成功'
PRINT@str
END
GO
/*对Driver表更新信息*/
UPDATEDriverSETIDNumber='372929199106033619'WHEREDriverNumber='000004'
(2)当修改Driver表中的司机编号时,修改Rent表中对应的司机编号,同时修改Violate表和Notes表中的司机编号。
USETAXI
GO
CREATETRIGGERrent_update1
ONDriverAFTERUPDATE
AS
BEGIN
DECLARE@old_numberchar(6),@new_numberchar(6)
SELECT@old_number=DriverNumberFROMdeleted
SELECT@new_number=DriverNumberFROMinserted
UPDATERentSETDriverNumber=@new_numberWHEREDriverNumber=@old_number
UPDATEViolateSETDriverNumber=@new_numberWHEREDriverNumber=@old_number
UPDATENotesSETDriverNumber=@new_numberWHEREDriverNumber=@old_number
END
GO
/*对Taxi表更新信息*/
UPDATEDriversetDriverNumber='000009'WHEREDriverNumber='000001'
查看三个表中的变化。
3.5.7.创建用户定义的函数和表值函数
当用户在编程时常常需要将一个或多个T-SQL语句组成子程序,以便反复调用。
这就要用到用户定义的标量值函数和表值函数。
标量值函数返回一个标量值,表值函数返回一个整表。
当想计算得出Rent表中出租车的平均车保费时可以创建一个标量值函数,当想通过给定的司机编号查询已经创建好的Driver_VIEW视图上给定司机编号的相关信息时可以创建一个返回整个表或视图的表值函数来实现。
(1)创建用户定义函数,实现计算出租车的平均车保费。
USETAXI
GO
CREATEFUNCTIONProtectorFee()RETURNSint
AS
BEGIN
DECLARE@feeint
SELECT@fee=
(
SELECTavg(ProtectionFee)FROMRent
)
RETURN@fee
END
GO
/*调用定义的ProtectionFee函数。
*/
USETAXI
GO
DECLARE@feeint
SELECT@fee=dbo.ProtectorFee()
SELECT@feeAS'出租车的平均租赁费'
(2)创建一个表值函数,实现查询给定司机编号的相关信息。
USETAXI
GO
CREATEFUNCTIONfn_view(@numberchar(6))
RETURNStable
ASRETURN
(
SELECT司机编号,姓名,性别,地址,身份证号,驾驶证号FROMTAXI.dbo.Driver_VIEW
WHERE司机编号=@number
)
GO
/*调用定义好的标志函数*/
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
CREATEUSERdavid
FORLOGINsql_tao
WITHDEFAULT_SCHEMA=dbo
/*将david用户添加到sysadmin固定数据库角色中db_owner。
*/
EXECsp_addrolemember'db_owner','david'
(3)在TAXI数据库上的用户david授予创建表的权限*/
USETAXI
GO
GRANTCREATETABLETOdavid
GO
/*在TAXI数据库上的用户yangyang授予Driver表操作的权
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 出租车 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)