《出租车管理系统.pdf》由会员分享,可在线阅读,更多相关《出租车管理系统.pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软 件 学 院 课程设计报告书 课程名称 SQL Server 数据库课程设计 设计题目 出租车管理系统 专业班级 软件工程(1)班 学 号 5123 姓 名 朱阳阳 指导教师 亓春霞 2012 年 10 月 1 设计目的 此设计项目是对学习SQL Server数据库课程后进行的一次全面的综合练习。目的在于加深对数据库基础理论和基本知识的理解,掌握使用数据库进行软件设计的基本方法,提高运用数据库解决实际问题的能力,最终实现对于给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。同时,此设计对于将来的毕业设计和具体工
2、作实践将有重要的意义。2 设计任务 出租车管理系统 3 设计内容 需求分析任务 3.1.1 需求分析设计 司机和出租车是出租车公司最要的资源,是创造效益的资源。要想提高出租车公司的效益和服务质量,首先从做好对司机和出租车的管理着手。一是对出租车司机的信息的管理,二是对出租车信息和租赁的管理。出租车管理系统将很大程度上解决出租车公司在此工作上的难度。3.1.2 需求分析过程 功能需求简介:针对出租车行业的特点开发的出租车管理系统,实现出租车公司内部及时准确地采集内部各种数据信息,处理高速化和网络办公自动化。实现对出租车公司司机的信息记录,操作,出租车管理,提供精确查询等多种查询方式。3.1.3
3、调查需求 基本操作:对出租车信息表、司机信息表、租赁表、违章表的查询、添加、更新、删除等功能。特别操作:对租赁表的功能。3.1.4 系统数据分析 表 2-1 数据结构定义 数据结构名 含义说明 组成 出租车信息表 定义了出租车有关信息 车牌号 入户时间 车型 颜色 出租情况 营业时间 司机信息表 定义了司机有关信息 司机编号 姓名 性别 地址 身份证号 驾驶证号 发证时间 驾龄 租赁表 定义了租赁的有关信息 司机编号 车牌号 期限 开始日期 截止日期 租赁费 车保费 违章表 定义了违章的有关信息 司机编号 姓名 扣分 违章时间 违章地点 出车记录表 定义了每天哪些司机的出车情况 司机编号 车牌
4、号 出车日期 概念结构设计 3.2.1 概念结构设计的方法 概念设计阶段我采用自底向上的方法,即自顶向下的进行需求分析,然后再自底向上的进行概念结构设计。对已经细化到无法再分的阶段逐步集成在一起,最终合成一个全局概念模式。3.2.2 概念结构设计的步骤 第一步是进行局部视图的设计:由于高层的数据流图只能反映系统的概貌,而中层流图能较好的反映系统中各局部应用的子系统组成。因此我们先逐一的设计分 E-R 图。第二步是进行视图的集成:各子系统的 E-R 图设计好之后,下一步就是要将所有的分 E-R 图合成一个系统的总 E-R 图,一般有两个方式,多个分 E-R 图一次集成,另一种是一次集成两个分 E
5、-R 图。我想采用一次集成两个分 E-R 图的方式。图 3-1 出车记录 E-R 图 图 3-2 出租车 E-R 图 司机 驾驶证号 驾龄 姓名 性别 地址 司机编号 身份证号 发证时间 出租车 颜色 出租情况 车牌号 入户时间 车型 营业时间 出车记录表 车牌号 司机编号 出车日期 图 3-3 司机 R-R 图 图 3-4 租赁 E-R 图 租赁表 租赁费 车牌号 期限 开始日期 司机编号 截止日期 车保费 违章表 姓名 扣分 司机编号 图 3-5 违章 E-R 图 租赁 司机 驾驶证号 驾龄 姓名 性别 地址 司机编身份证发证时间 出租车 车牌号 入户时间 车型 租赁表 租赁费 车牌号 期
6、限 开始日期 司机编号 截止日期 车保费 违章表 姓名 扣分 司机编号 违章时间 违章地点 违章 出车记录表 车牌号 司机编号 出车日期 出车情况 出车情况 图 3-6 总体概念结构 E-R 图 逻辑结构设计 E-R 图向关系模型的转换 将上述总体概念结构 E-R 图转化成关系模型,根据这个关系写出数据依赖,确定数据依赖。司机与出租车是一对一的关系,司机、出租车与租赁是一对一的关系,司机与违章是一对一的关系。司机(司机编号,姓名,性别,地址,身份证号,驾驶证号,发证时间,驾龄)出租车(车牌号,入户时间,车型,颜色,出租情况,营业时间)租赁表(司机编号,车牌号,期限,开始日期,截止日期,租赁费,
7、车保费)出车记录表(司机编号,车牌号,出车日期)违章表(司机编号,姓名,扣分,违章时间,违章地点)物理设计 物理表结构如下 表 3-7 司机表(Driver)列标示 数据类型 长度 约束 列意义 DriverNumber char 6 主键 司机编号 Name char 10 不为空 姓名 Sex bit 默认 不为空 性别 Address varchar 40 不为空 地址 IDumber char 20 不为空 身份证号 LincenseNumber char 10 不为空 驾驶证号 CertificateDate datetime 默认 不为空 发证时间 DriverAge tinyin
8、t 默认 不为空 驾龄 表 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 不为空 车牌号
9、LimitTime tinyint 默认 不为空 期限 StartDate datetime 默认 不为空 开始日期 EndDate datetime 默认 不为空 截止日期 RentFee float 默认 不为空 租赁费 ProtectionFee Float 默认 不为空 车保费 表 3-10 违章表(Violate)列标示 数据类型 长度 约束 列意义 DriverNumber char 6 主键 司机编号 Name char 10 不为空 姓名 Points tinyint 默认 不为空 扣分 ViolateDate datetime 默认 不为空 违章时间 ViolateAddre
10、ss varchar 40 不为空 违章地点 表 3-11 出车记录表(Notes)列标示 数据类型 长度 约束 列意义 DriverNumber char 6 主键 司机编号 Name char 10 不为空 姓名 DriveDate datetime 默认 不为空 出车日期 数据库的实施 创建表/*创建数据库*/CREATE DATABASE TAXI /*数据库名*/ON (NAME=TAXI_DATA,FILENAME=D:Microsoft SQL ServerMSSQLDATA,SIZE=10MB,MAXSIZE=100MB,FILEGROWTH=10%)LOG ON (NAME=
11、TAXI_log,/*日志*/FILENAME=D:Microsoft SQL ServerMSSQLDATA,SIZE=10MB,MAXSIZE=100MB,FILEGROWTH=1MB)/*创建基本表*/*创建司机表*/USE TAXI CREATE 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,/*身份证号*
12、/licenseNumber char(10)NOT NULL,/*驾驶证号*/CertificateDate datetime 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,/*颜色*/RentSituatio
13、n bit NOT NULL DEFAULT 1,/*出租情况*/BusinessTime tinyint NOT NULL /*营业时间*/)/*创建租赁表*/CREATE TABLE Rent(DriverNumber char(6)NOT NULL,/*司机编号*/TaxiNumber char(6)NOT NULL,/*车牌号*/LimitTime tinyint NOT NULL,/*期限*/StartDate datetime NOT NULL,/*开始日期*/EndDate datetime NOT NULL,/*截止日期*/RentFee float NOT NULL,/*租赁
14、费*/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,/*扣分*/ViolateDate datetime NOT NULL,/*违章时间*/ViolateAddress varchar(40)NOT NULL /*违章地点*/)/*创建出车表*/CREAT
15、E TABLE Notes(DriverNumber char(6)NOT NULL,/*司机编号*/TaxiNumber char(6)NOT NULL,/*车牌号*/DriverDate datetime NOT NULL /*出车日期*/)创建主要视图 视图是从一个或多个表导出的表。视图是数据库的用户使用数据库的观点。司机和出租车是主要的实体,而这两个实体的信息又在不同的表中,作为出租车公司对司机和出租车有时关心的数据又是不同的,即使是相同的数据,也可能又不同的操作。有时候仅有的表的列属性名是不能满足需求的,于是根据不同的需求,在物理的数据库上定义他们对数据库所要求的数据结构。(1)创建
16、Driver_VIEW视图,包含司机所有的信息 USE TAXI GO CREATE VIEW Driver_VIEW(司机编号,姓名,性别,地址,身份证号,驾驶证号,发证时间,驾龄)AS SELECT*FROM Driver GO (2)创建Taxi_VIEW视图,包含出租车的所有信息。USE TAXI GO CREATE VIEW Taxi_VIEW(车牌号,入户时间,车型,颜色,出租情况,每天营业时长)AS SELECT*FROM Taxi GO(3)创建Rent_VIEW视图,包含租赁的所有信息。USE TAXI GO CREATE VIEW Rent_VIEW(司机编号,车牌号,期限
17、,开始日期,截止日期,租赁费,车保费)AS SELECT*FROM Rent GO(4)建租赁表平均租赁费视图Violate_VIEW_AVG,列名为平均租赁费,试图中列名为RentFee_avg。USE TAXI GO CREATE VIEW Violate_VIEW_AVG(平均租赁费)AS SELECT AVG(RentFee)FROM Rent 创建索引 索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表。(1)为Driver表的姓名创建唯一索引Driver_name USE TAXI GO CREATE UNIQUE INDEX Driver_name ON D
18、river(Name)GO(2)根据Rent表的司机编号和车牌号创建复合索引。USE TAXI GO CREATE INDEX Rent_IND ON Rent(DriverNumber,TaxiNumber)GO 创建表字段的约束关系 数据完整性包括实体完整性,域完整性和参照完整性。租赁表中的期限的取值肯定要有一定的范围,违章表中的扣分也有范围,租赁表的截止日期必须在开始日期的之后,都可以通过CHECK约束来实现,这就体现了域的完整性。租赁表中的司机编号和车牌号都由司机表和出租车表中对应,当删除或修改司机表中的司机编号和出租车表中的车牌号也应当对应修改租赁表中的司机编号和车牌号,这体现了表与
19、表之间的参照完整性。(1)添加Rent表中期限的约束条件。USE TAXI GO ALTER TABLE Rent ADD CONSTRAINT LimitTime_constraint CHECK(LimitTime=0 AND LimitTime=0 AND Points=12)GO(3)在Rent表中的TaxiNumber列添加外键约束,参照Taxi表中的列 USE TAXI GO ALTER TABLE Rent ADD CONSTRAINT FK_TaxiNumber FOREIGN KEY(TaxiNumber)REFERENCES Taxi(TaxiNumber)GO(4)在Re
20、nt表中添加日期的约束。创建存储过程 存储过程分为系统存储过程、扩展存储过程和用户存储过程。存储过程可以接收参数、返回表格或标量结果和消息,执行存储过程后,就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码执行,提高了系统性能。当给定了一个司机的编号或出租车的车牌号时想直接返回该司机或该出租车的信息情况,不需要任何参数,或者使用给定的参数返回信息。(1)创建返回000001司机的信息情况。USE TAXI GO CREATE PROCEDURE driver_info AS SELECT*FROM Driver WHERE DriverNumber=0000
21、01 GO/*执行存储过程driver_info*/EXECUTE driver_info GO/*或者*/driver_info GO (2)创建返回出租车的信息情况。USE TAXI GO CREATE PROCEDURE taxi_info AS SELECT*FROM Taxi WHERE TaxiNumber=010001 GO/*执行存储过程taxi_info*/EXECUTE taxi_info GO(3)从Rent表中查询指定司机编号的租赁信息 USE TAXI GO CREATE PROCEDURE rent_info number char(6)AS SELECT*FROM
22、 Rent WHERE DriverNumber=number GO/*执行存储过程rent_info*/EXECUTE rent_info 000002(4)从Violate表中查询指定司机编号的违章情况 USE TAXI GO CREATE PROCEDURE violate_info number char(10)=000001 AS SELECT Points AS 扣分 FROM Violate WHERE DriverNumber=number GO/*执行存储过程*/EXECUTE violate_info /*参数私用默认值*/EXECUTE violate_info00000
23、2 /*传递给number的实参为*/GO 创建触发器 当查询一个表中是否存在信息时,或者向表中添加数据时,想显示有无要查的信息或想知道到底有没有执行,可以用触发器对相应的表做更改和显示操作与否。(1)在Drivr表上创建触发器,每次修改操作时,定义一个变量,让它显示插入成功。USE TAXI GO CREATE TRIGGER driver_update ON Driver AFTER UPDATE AS BEGIN DECLARE str char(20)SET str=修改成功 PRINT str END GO/*对Driver表更新信息*/UPDATE Driver SET IDNum
24、ber=372929 WHERE DriverNumber=000004 (2)当修改Driver表中的司机编号时,修改Rent表中对应的司机编号,同时修改Violate表和Notes表中的司机编号。USE TAXI GO CREATE TRIGGER rent_update1 ON Driver AFTER UPDATE AS BEGIN DECLARE old_number char(6),new_number char(6)SELECT old_number=DriverNumber FROM deleted SELECT new_number=DriverNumber FROM ins
25、erted UPDATE Rent SET DriverNumber=new_number WHERE DriverNumber=old_number UPDATE Violate SET DriverNumber=new_number WHERE DriverNumber=old_number UPDATE Notes SET DriverNumber=new_number WHERE DriverNumber=old_number END GO /*对Taxi表更新信息*/UPDATE Driver set DriverNumber=000009 WHERE DriverNumber=00
26、0001 查看三个表中的变化。创建用户定义的函数和表值函数 当用户在编程时常常需要将一个或多个T-SQL语句组成子程序,以便反复调用。这就要用到用户定义的标量值函数和表值函数。标量值函数返回一个标量值,表值函数返回一个整表。当想计算得出Rent表中出租车的平均车保费时可以创建一个标量值函数,当想通过给定的司机编号查询已经创建好的Driver_VIEW视图上给定司机编号的相关信息时可以创建一个返回整个表或视图的表值函数来实现。(1)创建用户定义函数,实现计算出租车的平均车保费。USE TAXI GO CREATE FUNCTION ProtectorFee()RETURNS int AS BEG
27、IN DECLARE fee int SELECT fee=(SELECT avg(ProtectionFee)FROM Rent )RETURN fee END GO/*调用定义的ProtectionFee函数。*/USE TAXI GO DECLARE fee int SELECT fee=()SELECT fee AS 出租车的平均租赁费(2)创建一个表值函数,实现查询给定司机编号的相关信息。USE TAXI GO CREATE FUNCTION fn_view(number char(6)RETURNS table AS RETURN(SELECT 司机编号,姓名,性别,地址,身份证号
28、,驾驶证号 FROM WHERE 司机编号=number)GO/*调用定义好的标志函数*/SELECT*FROM fn_view(000003)创建数据库的安全管理角色 数据库的安全性管理是数据库服务器应实现的重要功能和之一。对用户登录进行身份验证,当用户登录到数据库系统时,系统对该用户的账户和口令进行验证,包括确认用户账户是否有效以及能否访问数据库系统。对用户进行的操作进行权限控制,当用户登录到数据库后,只能对数据库中的数据在允许的权限内进行操作。(1)创建SQL Server登录名sql_tao,密码为123456。USE TAXI CREATE LOGIN sql_tao WITH PA
29、SSWORD=123456,DEFAULT_DATABASE=TAXI/*将sql_tao用户添加到sysadmin固定服务器角色中。*/EXEC sp_addsrvrolemembersql_tao,sysadmin(2)创建数据库用户david CREATE USER david FOR LOGIN sql_tao WITH DEFAULT_SCHEMA=dbo/*将david用户添加到sysadmin固定数据库角色中db_owner。*/EXEC sp_addrolememberdb_owner,david(3)在TAXI数据库上的用户david授予创建表的权限*/USE TAXI GO GRANT CREATE TABLE TO david GO/*在TAXI数据库上的用户yangyang授予Driver表操作的权限*/GRANT UPDATE,INSERT ON Driver TO yangyang WITH GRANT OPTION
限制150内