《2022年出租车管理系统.pdf》由会员分享,可在线阅读,更多相关《2022年出租车管理系统.pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软 件 学 院课程设计报告书课程名称 SQL Server数据库课程设计设计题目出租车管理系统专业班级软件工程( 1)班学号 5123 姓名朱阳阳指导教师亓春霞2012 年 10 月精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 16 页 - - - - - - - - - - 1 设计目的此设计项目是对学习SQL Server 数据库课程后进行的一次全面的综合练习。目的在于加深对数据库基础理论和基本知识的理解,掌握使用数据库进行软件设计的基本方法, 提高运用数据库解决实际问题的能力,最终实现
2、对于给定的应用环境,构造最优的数据库模式, 建立数据库及其应用系统, 使之能够有效地存储数据,满足各种用户的应用需求 ( 信息要求和处理要求 ) 。同时,此设计对于将来的毕业设计和具体工作实践将有重要的意义。2 设计任务出租车管理系统3 设计内容需求分析任务3.1.1 需求分析设计司机和出租车是出租车公司最要的资源,是创造效益的资源。 要想提高出租车公司的效益和服务质量, 首先从做好对司机和出租车的管理着手。一是对出租车司机的信息的管理, 二是对出租车信息和租赁的管理。出租车管理系统将很大程度上解决出租车公司在此工作上的难度。3.1.2 需求分析过程功能需求简介 :针对出租车行业的特点开发的出
3、租车管理系统,实现出租车公司内部及时准确地采集内部各种数据信息, 处理高速化和网络办公自动化。 实现对出租车公司司机的信息记录,操作,出租车管理,提供精确查询等多种查询方式。3.1.3 调查需求基本操作: 对出租车信息表、 司机信息表、 租赁表、违章表的查询、 添加、更新、删除等功能。特别操作:对租赁表的功能。3.1.4 系统数据分析精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 16 页 - - - - - - - - - - 表 2-1 数据结构定义数据结构名含义说明组成出租车信息表定义了
4、出租车有关信息车牌号入户时间车型 颜色出租情况营业时间司机信息表定义了司机有关信息司机编号姓名 性别地址 身份证号驾驶证号发证时间驾龄租赁表定义了租赁的有关信息司机编号车牌号期限 开始日期截止日期租赁费车保费违章表定义了违章的有关信息司机编号姓名 扣分违章时间违章地点出车记录表定义了每天哪些司机的出车情况司机编号车牌号出车日期概念结构设计3.2.1 概念结构设计的方法概念设计阶段我采用自底向上的方法,即自顶向下的进行需求分析, 然后再自底向上的进行概念结构设计。对已经细化到无法再分的阶段逐步集成在一起,最终合成一个全局概念模式。3.2.2 概念结构设计的步骤第一步是进行局部视图的设计:由于高层
5、的数据流图只能反映系统的概貌,而中层流图能较好的反映系统中各局部应用的子系统组成。因此我们先逐一的设计分 E-R 图。第二步是进行视图的集成: 各子系统的 E-R图设计好之后, 下一步就是要将所有的分 E-R图合成一个系统的总E-R 图,一般有两个方式, 多个分 E-R图一次集成, 另一种是一次集成两个分E-R图。 我想采用一次集成两个分E-R图的方式。图 3-1 出车记录 E-R图出车记录表车牌号司机编号出车日期精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 16 页 - - - - - -
6、 - - - - 图 3-2 出租车 E-R 图图 3-3 司机 R-R图司机驾驶证号驾龄姓名性别地址司机编号身份证号发证时间出租车颜色出租情况车牌号入户时间车型营业时间精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 16 页 - - - - - - - - - - 图 3-4 租赁 E-R图图 3-5 违章 E-R图租赁表租赁费车牌号期限开始日期司机编号截止日期车保费违章表姓名扣分司机编号违章时间违章地点精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名
7、师归纳 - - - - - - - - - -第 5 页,共 16 页 - - - - - - - - - - 图 3-6 总体概念结构 E-R图租赁司机驾驶证号驾龄姓名性别地址司机编身份证发证时间出租车颜色出租情况车牌号入户时间车型营业时间租赁表租赁费车牌号期限开始日期司机编号截止日期车保费违章表姓名扣分司机编号违章时间违章地点违章出车记录表车牌号司机编号出车日期出车情况出车情况精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 16 页 - - - - - - - - - - 逻辑结构设计E-
8、R图向关系模型的转换将上述总体概念结构E-R图转化成关系模型,根据这个关系写出数据依赖,确定数据依赖。司机与出租车是一对一的关系,司机、出租车与租赁是一对一的关系,司机与违章是一对一的关系。司机(司机编号,姓名,性别,地址,身份证号,驾驶证号,发证时间,驾龄)出租车(车牌号,入户时间,车型,颜色,出租情况,营业时间)租赁表(司机编号,车牌号,期限,开始日期,截止日期,租赁费,车保费)出车记录表(司机编号,车牌号,出车日期)违章表(司机编号,姓名,扣分,违章时间,违章地点)物理设计物理表结构如下表 3-7 司机表 (Driver)列标示数据类型长度约束列意义DriverNumberchar6主键
9、司机编号Namechar10不为空姓名Sexbit默认不为空性别Addressvarchar40不为空地址IDumberchar20不为空身份证号LincenseNumberchar10不为空驾驶证号CertificateDatedatetime默认不为空发证时间DriverAgetinyint默认不为空驾龄表 3-8 出租车表 (Taxi)列标示数据类型长度约束列意义TaxiNumberchar6主键车牌号StartDatedatetime默认不为空入户时间TaxiShapechar10不为空车型Colorchar10不为空颜色RentSituationbit默认不为空出租情况Busines
10、sTimetinyint默认不为空营业时间精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 16 页 - - - - - - - - - - 表 3-9 租赁表 (Rent)列标示数据类型长度约束列意义DriverNumberchar6主键司机编号TaxiNumberchar6不为空车牌号LimitTimetinyint默认不为空期限StartDatedatetime默认不为空开始日期EndDatedatetime默认不为空截止日期RentFeefloat默认不为空租赁费ProtectionFe
11、eFloat默认不为空车保费表 3-10 违章表 (Violate)列标示数据类型长度约束列意义DriverNumberchar6主键司机编号Namechar10不为空姓名Pointstinyint默认不为空扣分ViolateDatedatetime默认不为空违章时间ViolateAddressvarchar40不为空违章地点表 3-11 出车记录表 (Notes)列标示数据类型长度约束列意义DriverNumberchar6主键司机编号Namechar10不为空姓名DriveDatedatetime默认不为空出车日期数据库的实施创建表/* 创建数据库 */CREATE DATABASE TA
12、XI /* 数据库名 */ON (NAME=TAXI_DATA,FILENAME=D:Microsoft SQL ServerMSSQLDATA,SIZE=10MB,MAXSIZE=100MB,精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 16 页 - - - - - - - - - - FILEGROWTH=10%)LOG ON (NAME=TAXI_log, /* 日志*/FILENAME=D:Microsoft SQL ServerMSSQLDATA,SIZE=10MB,MAXSIZE
13、=100MB,FILEGROWTH=1MB)/* 创建基本表 */* 创建司机表 */USE TAXICREATE TABLE Driver(DriverNumber char(6)NOT NULL PRIMARY KEY, /* 司机编号 */Name char (10), /* 姓名*/Sex bit NOT NULL, /*性别*/Address varchar(40)NOT NULL, /* 地址*/IDNumber char(18)NOT NULL, /*身份证号 */licenseNumber char(10)NOT NULL, /*驾驶证号 */CertificateDate d
14、atetime NOT NULL, /*发证时间 */DriverAge tinyint NOT NULL /*驾龄*/)/* 创建出租车表 */CREATE TABLE Taxi(TaxiNumber char(6)NOT NULL PRIMARY KEY, /* 车牌号 */ StartDate datetime NOT NULL, /* 入户时间 */TaxiShape char(10)NOT NULL, /* 车型*/Color char(10)NOT NULL, /* 颜色*/RentSituation bit NOT NULL DEFAULT 1, /* 出租情况 */Busine
15、ssTime tinyint NOT NULL /* 营业时间 */)/* 创建租赁表 */CREATE TABLE Rent(DriverNumber char(6)NOT NULL, /* 司机编号 */精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 16 页 - - - - - - - - - - TaxiNumber char(6)NOT NULL, /* 车牌号 */LimitTime tinyint NOT NULL, /* 期限*/StartDate datetime NOT N
16、ULL, /* 开始日期 */EndDate datetime NOT NULL, /* 截止日期 */RentFee float NOT NULL, /* 租赁费 */ProtectionFee float NOT NULL, /* 车保费 */PRIMARY KEY(DriverNumber,TaxiNumber)/* 创建违章表 */CREATE TABLE Violate(DriverNumber char(6)NOT NULL PRIMARY KEY, /* 司机编号 */Name char(10), /*姓名*/Points tinyint NOT NULL, /*扣分*/Viol
17、ateDate datetime NOT NULL, /*违章时间 */ViolateAddress varchar(40)NOT NULL /*违章地点 */)/* 创建出车表 */CREATE TABLE Notes(DriverNumber char(6)NOT NULL, /* 司机编号 */TaxiNumber char(6)NOT NULL, /* 车牌号 */DriverDate datetime NOT NULL /* 出车日期 */)创建主要视图视图是从一个或多个表导出的表。视图是数据库的用户使用数据库的观点。司机和出租车是主要的实体, 而这两个实体的信息又在不同的表中,作为
18、出租车公司对司机和出租车有时关心的数据又是不同的,即使是相同的数据, 也可能又不同的操作。 有时候仅有的表的列属性名是不能满足需求的,于是根据不同的需求,在物理的数据库上定义他们对数据库所要求的数据结构。(1) 创建Driver_VIEW视图,包含司机所有的信息USE TAXIGOCREATE VIEW Driver_VIEW( 司机编号 , 姓名, 性别, 地址, 身份证号 , 驾驶证号 , 发证时间, 驾龄)ASSELECT * FROM DriverGO (2) 创建Taxi_VIEW视图,包含出租车的所有信息。USE TAXIGOCREATE VIEW Taxi_VIEW(车牌号 ,
19、入户时间 , 车型, 颜色, 出租情况 , 每天营业时长 )精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 16 页 - - - - - - - - - - ASSELECT * FROM TaxiGO(3) 创建Rent_VIEW 视图,包含租赁的所有信息。USE TAXIGOCREATE VIEW Rent_VIEW(司机编号 , 车牌号 , 期限, 开始日期 , 截止日期 , 租赁费 ,车保费 )ASSELECT * FROM RentGO(4) 建租赁表平均租赁费视图 Violate
20、_VIEW_AVG,列名为平均租赁费,试图中列名为RentFee_avg。USE TAXIGOCREATE VIEW Violate_VIEW_AVG( 平均租赁费 )ASSELECT AVG(RentFee)FROM Rent创建索引索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表。(1)为Driver 表的姓名创建唯一索引 Driver_nameUSE TAXIGOCREATE UNIQUE INDEX Driver_nameON Driver(Name)GO(2)根据 Rent表的司机编号和车牌号创建复合索引。USE TAXIGOCREATE INDEX Rent
21、_INDON Rent(DriverNumber,TaxiNumber)GO创建表字段的约束关系数据完整性包括实体完整性,域完整性和参照完整性。租赁表中的期限的取值肯定要有一定的范围, 违章表中的扣分也有范围, 租赁表的截止日期必须在开始日期的之后,都可以通过CHECK约束来实现,这就体现了域的完整性。租赁表中的司机编号和车牌号都由司机表和出租车表中对应,当删除或修改司机表中的司机编号和出租车表中的车牌号也应当对应修改租赁表中的司机编号和车牌号,这体现了表与表之间的参照完整性。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - -
22、 - - - -第 11 页,共 16 页 - - - - - - - - - - (1)添加 Rent表中期限的约束条件。USE TAXIGOALTER TABLE Rent ADD CONSTRAINT LimitTime_constraint CHECK(LimitTime=0 AND LimitTime=0 AND Points=12)GO(3) 在Rent表中的 TaxiNumber列添加外键约束,参照 Taxi 表中的列USE TAXIGOALTER TABLE RentADD CONSTRAINT FK_TaxiNumber FOREIGN KEY(TaxiNumber)REFE
23、RENCES Taxi(TaxiNumber) GO(4) 在Rent表中添加日期的约束。创建存储过程存储过程分为系统存储过程、扩展存储过程和用户存储过程。存储过程可以接收参数、 返回表格或标量结果和消息,执行存储过程后, 就驻留在高速缓冲存储器,在以后的操作中, 只需从高速缓冲存储器中调用已编译好的二进制代码执行,提高了系统性能。 当给定了一个司机的编号或出租车的车牌号时想直接返回该司机或该出租车的信息情况, 不需要任何参数,或者使用给定的参数返回信息。(1)创建返回 000001司机的信息情况。USE TAXIGOCREATE PROCEDURE driver_infoAS SELECT
24、* FROM Driver WHERE DriverNumber=000001GO/* 执行存储过程 driver_info*/EXECUTE driver_infoGO/* 或者*/driver_infoGO (2) 创建返回出租车的信息情况。USE TAXIGO精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 16 页 - - - - - - - - - - CREATE PROCEDURE taxi_infoAS SELECT * FROM Taxi WHERE TaxiNumber=0
25、10001GO/* 执行存储过程 taxi_info*/EXECUTE taxi_infoGO(3) 从Rent表中查询指定司机编号的租赁信息USE TAXIGOCREATE PROCEDURE rent_info number char(6)ASSELECT * FROM Rent WHERE DriverNumber=numberGO/* 执行存储过程 rent_info*/EXECUTE rent_info 000002(4) 从Violate 表中查询指定司机编号的违章情况USE TAXIGOCREATE PROCEDURE violate_info number char(10)=0
26、00001ASSELECT Points AS 扣分 FROM Violate WHERE DriverNumber=numberGO/* 执行存储过程 */EXECUTE violate_info /* 参数私用默认值 */EXECUTE violate_info000002 /* 传递给 number 的实参为 */GO创建触发器当查询一个表中是否存在信息时,或者向表中添加数据时,想显示有无要查的信息或想知道到底有没有执行, 可以用触发器对相应的表做更改和显示操作与否。(1) 在Drivr 表上创建触发器, 每次修改操作时, 定义一个变量, 让它显示插入成功。USE TAXIGOCREAT
27、E TRIGGER driver_updateON Driver AFTER UPDATEASBEGINDECLARE str char(20)SET str= 修改成功 PRINT strEND精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 16 页 - - - - - - - - - - GO/* 对Driver 表更新信息 */UPDATE Driver SET IDNumber=372929 WHERE DriverNumber=000004 (2)当修改 Driver 表中的司机编
28、号时, 修改Rent表中对应的司机编号 , 同时修改Violate 表和Notes表中的司机编号。USE TAXIGOCREATE TRIGGER rent_update1ON Driver AFTER UPDATEASBEGINDECLARE old_number char(6),new_number char(6)SELECT old_number=DriverNumber FROM deletedSELECT new_number=DriverNumber FROM insertedUPDATE Rent SET DriverNumber=new_number WHERE DriverN
29、umber=old_numberUPDATE Violate SET DriverNumber=new_number WHERE DriverNumber=old_numberUPDATE Notes SET DriverNumber=new_number WHERE DriverNumber=old_numberENDGO /* 对Taxi 表更新信息 */UPDATE Driver set DriverNumber=000009 WHERE DriverNumber=000001查看三个表中的变化。创建用户定义的函数和表值函数当用户在编程时常常需要将一个或多个T-SQL 语句组成子程序,以
30、便反复调用。 这就要用到用户定义的标量值函数和表值函数。标量值函数返回一个标量值,表值函数返回一个整表。 当想计算得出 Rent表中出租车的平均车保费时可以创建一个标量值函数,当想通过给定的司机编号查询已经创建好的Driver_VIEW视图上给定司机编号的相关信息时可以创建一个返回整个表或视图的表值函数来实现。(1)创建用户定义函数,实现计算出租车的平均车保费。USE TAXIGOCREATE FUNCTION ProtectorFee()RETURNS intASBEGINDECLARE fee intSELECT fee=(SELECT avg(ProtectionFee) FROM Re
31、nt精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 16 页 - - - - - - - - - - )RETURN feeENDGO/* 调用定义的 ProtectionFee 函数。 */USE TAXIGODECLARE fee intSELECT fee=()SELECT fee AS 出租车的平均租赁费 (2)创建一个表值函数,实现查询给定司机编号的相关信息。USE TAXIGOCREATE FUNCTION fn_view(number char(6)RETURNS tableA
32、S RETURN(SELECT 司机编号 , 姓名, 性别, 地址, 身份证号 , 驾驶证号 FROM WHERE 司机编号 =number)GO/* 调用定义好的标志函数 */SELECT * FROM fn_view(000003)创建数据库的安全管理角色数据库的安全性管理是数据库服务器应实现的重要功能和之一。对用户登录进行身份验证, 当用户登录到数据库系统时, 系统对该用户的账户和口令进行验证,包括确认用户账户是否有效以及能否访问数据库系统。对用户进行的操作进行权限控制, 当用户登录到数据库后, 只能对数据库中的数据在允许的权限内进行操作。(1)创建 SQL Server登录名 sql_
33、tao ,密码为 123456。USE TAXICREATE LOGIN sql_taoWITH PASSWORD=123456,DEFAULT_DATABASE=TAXI/* 将sql_tao 用户添加到 sysadmin固定服务器角色中。 */EXEC sp_addsrvrolemembersql_tao,sysadmin(2) 创建数据库用户 davidCREATE USER david FOR LOGIN sql_taoWITH DEFAULT_SCHEMA=dbo/* 将david 用户添加到 sysadmin固定数据库角色中 db_owner。*/EXEC sp_addroleme
34、mberdb_owner,david(3) 在TAXI数据库上的用户 david 授予创建表的权限 */精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 15 页,共 16 页 - - - - - - - - - - USE TAXIGOGRANT CREATE TABLE TO davidGO/* 在TAXI数据库上的用户 yangyang授予Driver 表操作的权限 */GRANT UPDATE,INSERT ON Driver TO yangyangWITH GRANT OPTION精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 16 页,共 16 页 - - - - - - - - - -