出租车管理系统.docx

上传人:b****4 文档编号:3676004 上传时间:2022-11-24 格式:DOCX 页数:18 大小:116.23KB
下载 相关 举报
出租车管理系统.docx_第1页
第1页 / 共18页
出租车管理系统.docx_第2页
第2页 / 共18页
出租车管理系统.docx_第3页
第3页 / 共18页
出租车管理系统.docx_第4页
第4页 / 共18页
出租车管理系统.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

出租车管理系统.docx

《出租车管理系统.docx》由会员分享,可在线阅读,更多相关《出租车管理系统.docx(18页珍藏版)》请在冰豆网上搜索。

出租车管理系统.docx

出租车管理系统

软件学院

课程设计报告书

 

课程名称SQLServer数据库课程设计

设计题目出租车管理系统

专业班级软件工程

(1)班

学号5123

姓名朱阳阳

指导教师亓春霞

 

2012年10月

1设计目的

此设计项目是对学习SQLServer数据库课程后进行的一次全面的综合练习。

目的在于加深对数据库基础理论和基本知识的理解,掌握使用数据库进行软件设计的基本方法,提高运用数据库解决实际问题的能力,最终实现对于给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。

同时,此设计对于将来的毕业设计和具体工作实践将有重要的意义。

2设计任务

出租车管理系统

3设计内容

需求分析任务

3.1.1需求分析设计

司机和出租车是出租车公司最要的资源,是创造效益的资源。

要想提高出租车公司的效益和服务质量,首先从做好对司机和出租车的管理着手。

一是对出租车司机的信息的管理,二是对出租车信息和租赁的管理。

出租车管理系统将很大程度上解决出租车公司在此工作上的难度。

3.1.2需求分析过程

功能需求简介:

针对出租车行业的特点开发的出租车管理系统,实现出租车公司内部及时准确地采集内部各种数据信息,处理高速化和网络办公自动化。

实现对出租车公司司机的信息记录,操作,出租车管理,提供精确查询等多种查询方式。

3.1.3调查需求

基本操作:

对出租车信息表、司机信息表、租赁表、违章表的查询、添加、更新、删除等功能。

特别操作:

对租赁表的功能。

 

3.1.4系统数据分析

表2-1数据结构定义

数据结构名

含义说明

组成

出租车信息表

定义了出租车有关信息

车牌号入户时间车型颜色出租情况营业时间

司机信息表

定义了司机有关信息

司机编号姓名性别地址身份证号驾驶证号发证时间驾龄

租赁表

定义了租赁的有关信息

司机编号车牌号期限开始日期截止日期租赁费车保费

违章表

定义了违章的有关信息

司机编号姓名扣分违章时间

违章地点

出车记录表

定义了每天哪些司机的出车情况

司机编号车牌号出车日期

概念结构设计

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图

逻辑结构设计

E-R图向关系模型的转换

将上述总体概念结构E-R图转化成关系模型,根据这个关系写出数据依赖,确定数据依赖。

司机与出租车是一对一的关系,司机、出租车与租赁是一对一的关系,司机与违章是一对一的关系。

司机(司机编号,姓名,性别,地址,身份证号,驾驶证号,发证时间,驾龄)

出租车(车牌号,入户时间,车型,颜色,出租情况,营业时间)

租赁表(司机编号,车牌号,期限,开始日期,截止日期,租赁费,车保费)

出车记录表(司机编号,车牌号,出车日期)

违章表(司机编号,姓名,扣分,违章时间,违章地点)

物理设计

物理表结构如下

表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

默认

不为空

出车日期

数据库的实施

创建表

/*创建数据库*/

CREATEDATABASETAXI/*数据库名*/

ON

NAME=TAXI_DATA,

FILENAME='D:

\MicrosoftSQLServer\\MSSQL\DATA\',

SIZE=10MB,

MAXSIZE=100MB,

FILEGROWTH=10%

LOGON

NAME='TAXI_log',/*日志*/

FILENAME='D:

\MicrosoftSQLServer\\MSSQL\DATA\',

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/*出车日期*/

创建主要视图

视图是从一个或多个表导出的表。

视图是数据库的用户使用数据库的观点。

司机和出租车是主要的实体,而这两个实体的信息又在不同的表中,作为出租车公司对司机和出租车有时关心的数据又是不同的,即使是相同的数据,也可能又不同的操作。

有时候仅有的表的列属性名是不能满足需求的,于是根据不同的需求,在物理的数据库上定义他们对数据库所要求的数据结构。

(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

创建索引

索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表。

(1)为Driver表的姓名创建唯一索引Driver_name

USETAXI

GO

CREATEUNIQUEINDEXDriver_name

ONDriver(Name)

GO

(2)根据Rent表的司机编号和车牌号创建复合索引。

USETAXI

GO

CREATEINDEXRent_IND

ONRent(DriverNumber,TaxiNumber)

GO

创建表字段的约束关系

数据完整性包括实体完整性,域完整性和参照完整性。

租赁表中的期限的取值肯定要有一定的范围,违章表中的扣分也有范围,租赁表的截止日期必须在开始日期的之后,都可以通过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表中添加日期的约束。

创建存储过程

存储过程分为系统存储过程、扩展存储过程和用户存储过程。

存储过程可以接收参数、返回表格或标量结果和消息,执行存储过程后,就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码执行,提高了系统性能。

当给定了一个司机的编号或出租车的车牌号时想直接返回该司机或该出租车的信息情况,不需要任何参数,或者使用给定的参数返回信息。

(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

创建触发器

当查询一个表中是否存在信息时,或者向表中添加数据时,想显示有无要查的信息或想知道到底有没有执行,可以用触发器对相应的表做更改和显示操作与否。

(1)在Drivr表上创建触发器,每次修改操作时,定义一个变量,让它显示插入成功。

USETAXI

GO

CREATETRIGGERdriver_update

ONDriverAFTERUPDATE

AS

BEGIN

DECLARE@strchar(20)

SET@str='修改成功'

PRINT@str

END

GO

/*对Driver表更新信息*/

UPDATEDriverSETIDNumber='372929'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'

查看三个表中的变化。

创建用户定义的函数和表值函数

当用户在编程时常常需要将一个或多个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=()

SELECT@feeAS'出租车的平均租赁费'

(2)创建一个表值函数,实现查询给定司机编号的相关信息。

USETAXI

GO

CREATEFUNCTIONfn_view(@numberchar(6))

RETURNStable

ASRETURN

SELECT司机编号,姓名,性别,地址,身份证号,驾驶证号FROMWHERE司机编号=@number

GO

/*调用定义好的标志函数*/

SELECT*FROMfn_view('000003')

创建数据库的安全管理角色

数据库的安全性管理是数据库服务器应实现的重要功能和之一。

对用户登录进行身份验证,当用户登录到数据库系统时,系统对该用户的账户和口令进行验证,包括确认用户账户是否有效以及能否访问数据库系统。

对用户进行的操作进行权限控制,当用户登录到数据库后,只能对数据库中的数据在允许的权限内进行操作。

(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表操作的权限*/

GRANTUPDATE,INSERTONDriverTOyangyang

WITHGRANTOPTION

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1