资源描述
长 沙 学 院
课程设计说明书
题目
汽车租赁管理系统
系(部)
数学与计算机科学系
专业(班级)
姓名
学号
指导教师
起止日期
2015.6.15~2015.6.26
课程设计任务书
课程名称:数据库系统原理课程设计
设计题目:汽车租赁管理系统
已知技术参数和设计要求:
题目:汽车租赁管理系统
1、 某汽车租赁公司汽车租赁管理系统需要如下信息:
工作人员信息包括:工号、姓名、性别、联系电话等。
客户信息包括:身份证号、姓名、性别、所在单位、联系电话等。
车辆信息包括:车牌号、品牌、颜色、座位数、日租价格、日租超公里价格、月租价格、租赁状态、购入日期等。
车辆类别信息包括:分类号,库存数。
其业务规则描述如下:
一个工作人员可以对很多辆车辆进行管理,一辆车也可以被多个工作人员管理;一辆车只能属于一种车辆类别,而一种车辆类别可以包含多辆车;一个客户可以租多辆不同的车。
2、系统功能的基本要求:
可以实现对车辆、租赁客户的查询,可以查询汽车、客户租赁历史记录。可以按类别统计汽车的租赁金额和剩余的库存数,可以统计某一年龄客户群体对某类汽车的租赁喜好,能模拟客户对汽车的租借、归还业务。
各阶段具体要求:
1、需求分析阶段
l 定义数据项的含义和取值
l 定义目标系统的数据流
2、概念结构设计阶段
l 画出实体模型E-R图
3、逻辑结构设计阶段
l 将实体模型转化为关系模型
l 给出每个关系的主关键字和函数依赖集
l 分析你所设计的关系数据库模式是否属于3NF
4、物理设计阶段
l 确定所有字段的名称、类型、宽度、小数位数及完整性约束
l 确定数据库及表的名称及其组成
l 确定索引文件和索引关键字
5、数据库安全及维护设计阶段
l 设计一个适合的数据库安全策略(用户身份认证、访问权限、视图)
l 为了实现复杂的数据完整性约束,设计适当的触发器
l 设计一个适合的数据库备份策略
6、实施阶段
l 要求所有操作必须在查询分析器中用SQL语句或系统存储过程完成。
l 对于学有余力的同学,可以使用嵌入式SQL语句结合高级语言开发完成。
设计工作量:
(1)软件设计:完成问题陈述中所提到的所有需求功能。
(2)论文:要求撰写不少于3000个文字的文档,详细说明各阶段具体要求。
工作计划:
安排两周时间进行课程设计,软件开发步骤如下,第一周完成1~4,第二周完成5~8,论文同步进行;
1) 选定题目
2) 需求分析
3) 概念结构设计
4) 逻辑结构设计
5) 物理设计
6) 数据库安全及维护设计
7) 数据库上机实现
8) 答辩
计划时间
指导老师
班级
15~16周
杨刚
13软件1班
15~16周
潘怡
13软件2班
15~16周
何可可
13软件3班
15~16周
刘钢钦
13软件4班
注意事项
n 提交文档
Ø 长沙学院课程设计任务书 (每学生1份)
Ø 长沙学院课程设计论文 (每学生1份)
Ø 长沙学院课程设计鉴定表 (每学生1份)
指导教师签名: 日期:
教研室主任签名: 日期:
系主任签名: 日期:
长沙学院课程设计鉴定表
姓名
学号
专业
班级
设计题目
汽车租赁管理系统
指导教师
潘怡
指导教师意见:
评定等级: 教师签名: 日期:
答辩小组意见:
评定等级: 答辩小组长签名: 日期:
教研室意见:
教研室主任签名: 日期:
系(部)意见:
系主任签名: 日期:
说明
课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;
目 录
一、引言 8
1.1编写目的 8
1.2参考资料 8
二、 需求规约 8
2.1业务描述 8
2.2 需求分析 9
2.2.1用例规约 9
三、 环境说明 11
3.1数据库环境 11
3.2 开发环境 11
四、 数据库的命名规则 12
4.1 数据库对象命名规则 12
4.2 数据项编码规则 12
五、 逻辑设计 12
5.1 实体与关系的属性 12
5.2 ER图 13
六、 物理设计 13
6.1表汇总 13
6.2表Table_Worker 14
6.3表Table_Customer 14
6.4表 Table_Car 15
6.5表Table_CarClass 16
6.6表Table_Record 16
6.7 表Table_Car_Worker 17
6.8存储过程 17
6.8.1 proc_insert_Worker 17
6.8.2 proc_insert_Customer 18
6.8.3 proc_insert_Car 19
6.8.4 proc_insert_CarClass 20
6.8.5 proc_insert_Record 21
6.8.6 proc_find_AllCarClass 22
6.8.7 proc_find_Cars 23
6.8.8 proc_find_Car 23
6.8.9 proc_find_Customer 24
6.8.10 proc_find_CustomerRecord 24
6.8.11 proc_find_CarRecord 25
6.8.12 proc_find_CustomerFavorite 25
6.9 函数 26
6.9.1 func_CreateRecordNO 26
6.9.2 func_IdToAge 26
6.10 触发器 27
6.10.1 Trigger_insertCar_addCarClassCnt 27
6.10.2 Trigger_deleteCar_subtractCarClassCnt 27
6.10.3 Trigger_updateCar 28
6.10.4 Trigger_updateRecordReturnDate 28
七、 运行结果 29
7.1 租赁汽车 29
7.2资料查询 30
7.3订单查询 30
7.4查询一类汽车 31
7.5还车登记 31
7.6统计某一年龄最喜欢的类型 32
八、 总结 32
九、 附录 33
9.1 存储过程代码 33
9.1.1 proc_insert_Car 33
9.1.2 proc_insert_CarClass 33
6.1.3 proc_insert_Customer 34
9.1.4 proc_insert_Record 34
9.1.5 proc_insert_Worker 34
9.1.6 proc_find_AllCarClass 35
9.1.7 proc_find_Car 35
9.1.8 proc_find_Cars 35
9.1.9 proc_find_CarRecord 36
9.1.10 proc_find_Customer 36
9.1.11 proc_find_CustomerFavorite 36
9.1.12 proc_find_CustomerRecord 37
9.2管理系统代码 37
9.2.1 menu.h 37
9.2.2 usersql.h 38
9.2.3 main.cpp 39
9.2.4 menu.cpp 39
9.2.5 usersql.cpp 48
一、引言
1.1编写目的
本文是汽车租赁管理系统设计文档的组成部分,编写设计文档的目的是:明确数据库的表名、字段名,明确表之间的关系,分析功能的详细需求。本文档的读者对象是需求人员、系统设计人员、开发人员和测试人员。
1.2参考资料
表1.1 参考资料
资料名称
作者
文件编号、版本
《数据库系统概论》
王珊、萨师煊
2006年5月第4版
《C++ GUI Qt 4编程》
Jasmin Blanchette
Mark summerfield
2013年5月第1版
《SQL Server 2008编程入门经典》
Robert Vieria
2010年1月第1版
二、 需求规约
2.1业务描述
2.1.1创建背景
系统名称:汽车租赁管理系统。
系统的开发者:xxx。
系统的用户:租车客户以及租赁公司的工作人员。
2.1.2 业务规则
工作人员可以对很多辆车辆进行管理,一辆车也可以被多个工作人员管理;一辆车只能属于一种车辆类别,而一种车辆类别可以包含多辆车;一个客户可以租多辆不同的车。
2.2 需求分析
2.2.1用例规约
表2.1 用户登录
用例名称:
用户登录摘要
用例ID:
T-LOGIN-1
角色:
客户或工作人员
用例说明:
汽车租赁系统的登录模块
前置条件:
客户或工作人员运行该系统
基本事件流:
1. 客户或工作人员输入教务处帐号和密码
2. 点击登录
其它事件流:
1. 用户不存在
2. 帐号或密码错误
后置条件:
登录成功并跳转到相关页面
表2.2 车辆信息查询
用例名称:
查询车辆信息
用例ID:
T-FIND-1
角色:
客户或工作人员
用例说明:
使用汽车租赁系统查询车辆信息
前置条件:
从功能菜单选择进入车辆查询信息页面
基本事件流:
输入要查询的品牌
其它事件流:
输入的品牌不存在
后置条件:
显示该品牌的所有类别的车辆供选择
表2.3 客户信息查询
用例名称:
查询客户信息
用例ID:
T-FIND-2
角色:
客户或工作人员
用例说明:
使用汽车租赁系统查询客户信息
前置条件:
从功能菜单进入客户信息查询页面
基本事件流:
输入要查询客户的身份证号
其它事件流:
如果角色为客户的话,用户只能查询自己的信息
后置条件:
显示查询结果
表2.4 汽车历史租赁记录查询
用例名称:
查询汽车的历史租赁记录
用例ID:
T-FIND-3
角色:
工作人员
用例说明:
使用汽车租赁系统查询汽车的历史租赁记录
前置条件:
从功能菜单进入汽车历史租赁记录查询页面
基本事件流:
输入要查询汽车的车牌号
其它事件流:
输入的车牌号不存在
后置条件:
显示查询结果
表2.5 客户历史租赁记录查询
用例名称:
查询客户的历史租赁记录
用例ID:
T-FIND-4
角色:
客户或工作人员
用例说明:
使用汽车租赁系统查询客户的历史租赁记录
前置条件:
从功能菜单进入客户历史租赁记录查询页面
基本事件流:
输入要查询客户的身份证号
其它事件流:
1. 输入的身份证号不存在
2. 角色是客户的话只能查询其本身
后置条件:
显示查询结果
表2.6 某一年龄对汽车的喜好
用例名称:
统计某一年龄对汽车的喜好
用例ID:
T-COUNT-1
角色:
工作人员
用例说明:
使用汽车租赁系统统计某一年龄对汽车的喜好
前置条件:
从功能菜单进入喜好统计页面
基本事件流:
输入要查询的年龄
其它事件流:
输入的年龄非法
后置条件:
显示某一年龄最喜爱结果品牌
表2.7 汽车租赁
用例名称:
租赁汽车
用例ID:
T-OP-1
角色:
客户
用例说明:
使用汽车租赁系统租赁汽车
前置条件:
从查询结果中进入汽车租赁页面
基本事件流:
选择要租赁的车的类别
其它事件流:
租赁失败
后置条件:
租赁成功并显示用户成功租赁的车的信息
表2.8 汽车归还
用例名称:
归还汽车
用例ID:
T-OP-2
角色:
工作人员
用例说明:
使用汽车租赁系统归还汽车
前置条件:
从功能菜单进入归还汽车页面
基本事件流:
1. 输入汽车的车牌号
2. 显示实际费用
其它事件流:
该车牌号的汽车未被租赁
后置条件:
归还该汽车
三、 环境说明
3.1数据库环境
表3.1 数据库环境
数据库实例
数据库系统
数据库部署环境
数据库设计工具
数据库存放位置
说明
taxi
Sql Server 2008
Windows7+local
DiagramDesigner
D:\ProgramFiles\MicrosoftSQLServer\MSSQL10_50.MSSQLSERVER\MSSQL\DATA
3.2 开发环境
该汽车租赁管理系统在Qt Creator 3.3.0下使用Qt库5.4.0开发完成。
四、 数据库的命名规则
4.1 数据库对象命名规则
表4.1 数据库对象命名规则
数据库对象
命名规则
备注
表
Table_功能描述字符串
例如:Table_studen学生表
视图
View_功能描述字符串
例如:View_student学生视图
触发器
Trigger_功能描述字符串
例如:Trigger_update
约束
Constraint_功能描述字符串
例如:Constraint_primarykey
存储过程
Proc_功能描述字符串
例如:proc_insert
4.2 数据项编码规则
表4.2 数据项编码规则
数据项
命名规则
数据类型
长度范围
工号
W+序号(0000-9999)
定长字符串
5位
车牌号
省份简称+城市的序号+序号(00000-ZZZZZ)
定长字符串
10位
分类号
F+序号(000-999)
定长字符串
4位
订单号
D+年+月+日+序号(000000000+999999999)
定长字符串
18位
五、 逻辑设计
5.1 实体与关系的属性
表5.1 实体与属性
实体和关系名称
其余属性
工作人员
工号,密码,姓名,性别,联系电话
客户
身份证号,密码,姓名,性别,单位,联系电话
车辆
车牌号,租赁状态,购入日期,颜色
车辆类别
分类号,品牌,座位数,库存数,日租价格,日租超公里价格,月租价格
租赁
订单号,车牌号,身份证号,租赁日期,还车日期,实际
5.2 ER图
图 5.1 ER图
六、 物理设计
6.1表汇总
表6.1 数据库表汇总
表名
功能说明
Table_Worker
存储工作人员的信息
Table_Customer
存储用户的信息
Table_Car
存储车辆的信息
Table_CarClass
存储车辆的分类信息
Table_Record
存储租赁记录,联系客户和车辆,是一张联系表
6.2表Table_Worker
表6.2 Table_Woeker
表名
Table_Worker
数据库用户
Sa
主键
WorkNo
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
WorkNo
char(5)
N
Y
高
无
主键
2
WorkPassword
char(20)
N
N
低
无
密码
3
WorkName
char(20)
N
N
低
无
姓名
4
WorkSex
char(2)
N
N
低
无
性别
5
WorkPhone
char(15)
Y
Y
高
无
电话
sql脚本
create table Table_Worker
(
WorkNo char(5) not null,
WorkPassword char(20) not null,
WorkName char(20) not null,
WorkSex char(2) not null,
WorkPhone char(26) unique,
primary key(WorkNo)
)
6.3表Table_Customer
表6.3Table_Customer
表名
Table_Customer
数据库用户
sa
主键
CusNo
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
CusNo
char(20)
N
Y
高
无
主键
2
CusPassword
char(20)
N
N
低
无
密码
3
CusName
char(20)
N
N
低
无
姓名
4
CusSex
char(2)
N
N
低
无
性别
5
CusPhone
char(15)
Y
Y
高
无
电话
6
CusCompany
char(40)
Y
N
低
NULL
单位
sql脚本
create table Table_Customer
(
CusNo char(20) not null,
CusPassword char(20) not null,
CusName char(20) not null,
CusSex char(2) not null,
CusPhone char(15) unique,
CusCompany char(40),
primary key(CusNo)
)
6.4表 Table_Car
表6.4Table_Car
表名
Table_Car
数据库用户
sa
主键
CarNO
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
CarNo
char(10)
N
Y
高
无
主键
2
CarClassNo
char(4)
N
N
高
无
外键
3
CarSta
bit
N
N
低
false
租赁状态
4
CarDate
datetime
N
N
低
1970-1-1
购入日期
5
CarColor
char(15)
N
N
低
无
颜色
sql脚本
create table Table_Car
(
CarNo char(10) not null,
CarClassNO char(4) not null,
CarSta bit not null,
CarDate datetime not null,
CarColor char(15) not null,
primary key(CarNo),
foreign key(CarClassNo) references Table_CarClass(CarClassNo)
)
6.5表Table_CarClass
表6.5Table_CarClass
表名
Table_CarClass
数据库用户
sa
主键
CarClassNo
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
CarClassNo
char(4)
N
Y
高
无
主键
2
CarClassBrand
char(10)
N
Y
低
无
品牌
3
CarClassSeat
smallint
N
N
低
无
座位数
4
CarClassCnt
int
N
N
低
无
库存
5
CarClassDayPrice1
money
N
N
低
无
日租价格
6
CarClassDayPrice2
money
N
N
低
无
日租超公里价格
7
CarClassMonthPrice
money
N
N
低
无
月租价格
sql脚本
create table Table_CarClass
(
CarClassNo char(4) not null,
CarClassBrand char(10) not null,
CarClassSeat smallint not null,
CarClassCnt int not null,
CarClassDayPrice1 money not null,
CarClassDayPrice2 money not null,
CarClassMonthPrice money not null,
primary key(CarClassNO)
)
6.6表Table_Record
表6.6 Table_Record
表名
Table_Record
数据库用户
sa
主键
RecordNo
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
RecordNo
char(18)
N
Y
高
无
主键
2
CarNo
char(10)
N
Y
高
无
外键
3
CusNo
char(20)
N
Y
高
无
外键
4
RecordRentDate
datetime
N
N
低
无
租赁时间
5
RecordReturnDate
datetime
N
N
低
NULL
还车时间
6
RecordCost
money
Y
N
低
NULL
实际花费
sql脚本
create table Table_Record
(
RecordNo char(18) not null,
CarNo char(10) not null,
CusNo char(20) not null,
RecordRentDate datetime not null,
RecordReturnDate datetime,
RecordCost money,
primary key(RecordNo),
foreign key(CarNo) references Table_Car(CarNo),
foreign key(CusNo) references Table_Customer(CusNo)
)
6.7 表Table_Car_Worker
表6.7 Table_Car_Worker
表名
Table_Car_Worker
数据库用户
sa
主键
WorkNo,CarNo
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
WorkNo
char(5)
N
N
高
无
主键、外键
2
CarNo
char(10)
N
N
高
无
主键、外键
sql脚本
create table Table_Record
(
RecordNo char(18) not null,
CarNo char(10) not null,
CusNo char(20) not null,
RecordRentDate datetime not null,
RecordReturnDate datetime,
RecordCost money,
primary key(RecordNo),
foreign key(CarNo) references Table_Car(CarNo),
foreign key(CusNo) references Table_Customer(CusNo)
)
6.8存储过程
6.8.1 proc_insert_Worker
参数:
@WorkNo char(5),
@WorkPassword char(20),
@workName char(20),
@workSex char(2),
@workPhone char(15)
功能:插入工作人员信息
执行存储过程:
declare @sta int
begin
exec @sta = proc_insert_Worker 'W0002','123456','WangNiMa','男','15274212584'
if(@sta = 1)
print '插入成功'
else
print '插入失败'
select * from Table_Worker
end
go
执行结果:
图6.1 proc_insert_Worker 执行结果
6.8.2 proc_insert_Customer
参数:
@CusNo char(20),
@CusPassword char(20),
@CusName char(20),
@CusSex char(2),
@CusPhone char(15),
@CusCompany char(40)
功能:插入客户信息
执行存储过程:
declare @sta int
begin
exec @sta = proc_insert_Customer '430321199410180943','550993','MAMAMA','女','13875655451','腾讯'
if(@sta = 1)
print '插入成功'
else
print '插入失败'
select * from Table_Customer
end
go
执行结果:
图6.2 proc_insert_Customer 执行结果
6.8.3 proc_insert_Car
参数:
@CarNo char(10),
@CarClassNo char(4),
@CarSta bit,
@CarDate datetime,
@CarColor char(15)
功能:插入汽车信息
执行存储过程:
declare @sta int
begin
exec @sta = proc_insert_Car '湘A00021','F007',1,'2015-6-25','black'
if(@sta = 1)
print '插入成功'
else
print '插入失败'
select * from Table_Car
end
go
执行结果:
图6.3 proc_insert_Car执行结果
6.8.4 proc_insert_CarClass
参数:
@CarClassNo char(4),
@CarClassBrand char(10),
@CarClassSeat smallint,
@CarClassCnt int,
@CarClassDayPrice1 money,
@CarClassDayPrice2 money,
@CarClassMonthPrice money
功能:插入汽车分类信息
执行存储过程:
declare @sta int
begin
exec @sta = proc_insert_CarClass 'F007','宝马i8',4,0,1000.00,1050.00,30000.00
if(@sta = 1)
print '插入成功'
else
print '插入失败'
select *from Table_CarClass
end
go
执行结果
图6.4 proc_insert_CarClass执行结果
6.8.5 proc_insert_Record
参数:
@RecordNo char(18),
@CarNo char(10),
@CusNo char(20),
@RecordRentDate datetime,
@RecordReturnDate datetime,
@RecordCost money = NULL
功能:插入租赁记录
执行存储过程:
declare @s char(18)
begin
exec proc_insert_Record '湘A00003','430321199411197952',@s output
print @s
select * from Table_Record
end
go
执行结果:
图6.5 proc_insert_Record 执行结果
6.8.6 proc_find_AllCarClass
参数: 无
功能:查找所有的分类信息
执行存储过程:
declare @sta int
begin
exec @sta = proc_find_AllCarClass
if(@sta = 0)
print '没有记录'
else
print '查找成功'
end
go
执行结果:
图6.6 proc_find_AllCarClass 执行结果
6.8.7 proc_find_Cars
参数:@CarClassNo char(4)
功能:查找分类号相同的汽车
执行存储过程:
declare @sta int
begin
exec @sta = proc_find_Cars 'F003'
if(@sta = 0)
print '分类号不存在'
else
print '查找成功'
end
go
执行结果:
图6.7 proc_find_Cars执行结果
6.8.8 proc_find_Car
参数:@CarNo char (10)
功能:查找车牌号为@CarNo的车
执行存储过程:
declare @sta int
begin
exec @sta = proc_find_Car '湘A00000'
if(@sta = 0)
print '车牌号不存在'
else
print '查找成功'
end
执行结果:
图6.8 proc_find_Car执行结果
6.8.9 proc_find_Customer
参数:@CusNo char(18)
功能:查找身份证号码为@CusNo的客户的信息
执行存储过程:
declare @sta int
begin
exec @sta = proc_find_Customer '430321199411197952'
if(@sta = 0)
print '身份证号码不存在'
else
print '查找成功'
end
go
执行结果:
图6.9 proc_find_Customer 执行结果
6.8.10 proc_find_CustomerRecord
参数:@CusNo char(18)
功能:查找身份证号码为@CusNo的客户的租赁记录
执行存储过程:
declare @sta int
begin
exec @sta = proc_find_CustomerRecord '430321199411197952'
if(@sta = 0)
print '记录不存在'
else
print '查找成功'
end
go
执行结果:
图6.10 proc_find_CustomerReocrd执行结果
6.8.11 proc_find_CarRecord
参数:@CarNo char(10)
功能:查找车牌号为@CarNo的车辆的租赁记录
执行存储过程:
declare @sta int
begin
exec @sta = proc_find_CarRecord '湘A00000'
if(@sta = 0)
print '记录不存在'
else
print '查找成功'
end
执行结果:
图6.11 proc_find_CarRecord执行结果
6.8.12 proc_find_CustomerFavorite
参数:@CusAge int
功能:查找年龄为@CusAge的客户最喜欢的型号
执行存储过程:
declare @sta int
begin
exec @sta = proc_find_CustomerFavorite 21
if(@sta = 0)
print '记录不存在'
else
print '查找成功'
end
执行结果:
图6.12 proc_findCustomerFavorite
6.9 函数
6.9.1 func_CreateRecordNO
参数:无
返回值:char(18)
功能:创建一个订单号
代码:
ALTER function [dbo].[func_CreateRecordNo]()
returns char(18)
begin
return replace('D'
+str(year(getdate()),4)--年
+str(month(getdate()),2)--月
+str(day(getdate()),2)--日
+str((select count(*) from Table_Record)+1,9)--流水号
,' ','0')
end
6.9.2 func_IdToAge
参数:@Id char(18)
返回值: int
功能:根据身份证号码算出年龄
代码:
ALTER function [dbo].[func_IdToAge](@Id char(18))
returns int
as
begin
return datediff(year,substring('430321199411197952',7,4)+'-'
+substring('430321199411197952',11,2)+'-'
+substring('430321199411197952',13,2),getdate())
end
6.10 触发器
6.10.1 Trigger_insertCar_addCarClassCnt
触发器类型:insert
功能:在插入一辆新的汽车时,对应类别的库存增加一辆
所属表:Table_Car
代码:
ALTER trigger [dbo].[Trigger_insertCar_addCarClassCnt]
on [dbo].[Ta
展开阅读全文