1、长 沙 学 院课程设计说明书题目汽车租赁管理系统系(部)数学与计算机科学系专业(班级)姓名学号指导教师 起止日期2015.6.152015.6.26课程设计任务书课程名称:数据库系统原理课程设计设计题目:汽车租赁管理系统已知技术参数和设计要求:题目:汽车租赁管理系统1、 某汽车租赁公司汽车租赁管理系统需要如下信息:工作人员信息包括:工号、姓名、性别、联系电话等。客户信息包括:身份证号、姓名、性别、所在单位、联系电话等。车辆信息包括:车牌号、品牌、颜色、座位数、日租价格、日租超公里价格、月租价格、租赁状态、购入日期等。车辆类别信息包括:分类号,库存数。其业务规则描述如下:一个工作人员可以对很多辆
2、车辆进行管理,一辆车也可以被多个工作人员管理;一辆车只能属于一种车辆类别,而一种车辆类别可以包含多辆车;一个客户可以租多辆不同的车。2、系统功能的基本要求:可以实现对车辆、租赁客户的查询,可以查询汽车、客户租赁历史记录。可以按类别统计汽车的租赁金额和剩余的库存数,可以统计某一年龄客户群体对某类汽车的租赁喜好,能模拟客户对汽车的租借、归还业务。各阶段具体要求:1、需求分析阶段l 定义数据项的含义和取值l 定义目标系统的数据流2、概念结构设计阶段l 画出实体模型E-R图3、逻辑结构设计阶段l 将实体模型转化为关系模型l 给出每个关系的主关键字和函数依赖集l 分析你所设计的关系数据库模式是否属于3N
3、F4、物理设计阶段l 确定所有字段的名称、类型、宽度、小数位数及完整性约束 l 确定数据库及表的名称及其组成 l 确定索引文件和索引关键字5、数据库安全及维护设计阶段l 设计一个适合的数据库安全策略(用户身份认证、访问权限、视图)l 为了实现复杂的数据完整性约束,设计适当的触发器l 设计一个适合的数据库备份策略6、实施阶段l 要求所有操作必须在查询分析器中用SQL语句或系统存储过程完成。l 对于学有余力的同学,可以使用嵌入式SQL语句结合高级语言开发完成。设计工作量:(1)软件设计:完成问题陈述中所提到的所有需求功能。(2)论文:要求撰写不少于3000个文字的文档,详细说明各阶段具体要求。工作
4、计划:安排两周时间进行课程设计,软件开发步骤如下,第一周完成14,第二周完成58,论文同步进行;1)选定题目2)需求分析3)概念结构设计4)逻辑结构设计5)物理设计6)数据库安全及维护设计7)数据库上机实现8)答辩计划时间指导老师班级1516周杨刚13软件1班1516周潘怡13软件2班1516周何可可13软件3班1516周刘钢钦13软件4班注意事项n 提交文档 长沙学院课程设计任务书(每学生1份) 长沙学院课程设计论文(每学生1份) 长沙学院课程设计鉴定表(每学生1份)指导教师签名: 日期: 教研室主任签名: 日期:系主任签名: 日期:长沙学院课程设计鉴定表姓名学号专业班级设计题目汽车租赁管理
5、系统指导教师潘怡指导教师意见:评定等级: 教师签名: 日期: 答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名: 日期: 系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;目 录一、引言81.1编写目的81.2参考资料8二、需求规约82.1业务描述82.2 需求分析92.2.1用例规约9三、环境说明113.1数据库环境113.2 开发环境11四、数据库的命名规则124.1 数据库对象命名规则124.2 数据项编码规则12五、逻辑设计125.1 实体与关系的属性125.2 ER图13六、物理设计136.1表汇总136.2表Ta
6、ble_Worker146.3表Table_Customer146.4表 Table_Car156.5表Table_CarClass166.6表Table_Record166.7 表Table_Car_Worker176.8存储过程176.8.1 proc_insert_Worker176.8.2 proc_insert_Customer186.8.3 proc_insert_Car196.8.4 proc_insert_CarClass206.8.5 proc_insert_Record216.8.6 proc_find_AllCarClass226.8.7 proc_find_Cars23
7、6.8.8 proc_find_Car236.8.9 proc_find_Customer246.8.10 proc_find_CustomerRecord246.8.11 proc_find_CarRecord256.8.12 proc_find_CustomerFavorite256.9 函数266.9.1 func_CreateRecordNO266.9.2 func_IdToAge266.10 触发器276.10.1 Trigger_insertCar_addCarClassCnt276.10.2 Trigger_deleteCar_subtractCarClassCnt276.10.
8、3 Trigger_updateCar286.10.4 Trigger_updateRecordReturnDate28七、运行结果297.1 租赁汽车297.2资料查询307.3订单查询307.4查询一类汽车317.5还车登记317.6统计某一年龄最喜欢的类型32八、总结32九、附录339.1 存储过程代码339.1.1 proc_insert_Car339.1.2 proc_insert_CarClass336.1.3 proc_insert_Customer349.1.4 proc_insert_Record349.1.5 proc_insert_Worker349.1.6 proc_f
9、ind_AllCarClass359.1.7 proc_find_Car359.1.8 proc_find_Cars359.1.9 proc_find_CarRecord369.1.10 proc_find_Customer369.1.11 proc_find_CustomerFavorite369.1.12 proc_find_CustomerRecord379.2管理系统代码379.2.1 menu.h379.2.2 usersql.h389.2.3 main.cpp399.2.4 menu.cpp399.2.5 usersql.cpp48一、引言1.1编写目的本文是汽车租赁管理系统设计文
10、档的组成部分,编写设计文档的目的是:明确数据库的表名、字段名,明确表之间的关系,分析功能的详细需求。本文档的读者对象是需求人员、系统设计人员、开发人员和测试人员。1.2参考资料表1.1 参考资料资料名称作者文件编号、版本数据库系统概论王珊、萨师煊2006年5月第4版C+ GUI Qt 4编程Jasmin BlanchetteMark summerfield2013年5月第1版SQL Server 2008编程入门经典Robert Vieria2010年1月第1版二、 需求规约2.1业务描述2.1.1创建背景系统名称:汽车租赁管理系统。系统的开发者:xxx。系统的用户:租车客户以及租赁公司的工作
11、人员。2.1.2 业务规则工作人员可以对很多辆车辆进行管理,一辆车也可以被多个工作人员管理;一辆车只能属于一种车辆类别,而一种车辆类别可以包含多辆车;一个客户可以租多辆不同的车。2.2 需求分析2.2.1用例规约表2.1 用户登录用例名称:用户登录摘要用例ID:T-LOGIN-1角色:客户或工作人员用例说明:汽车租赁系统的登录模块前置条件:客户或工作人员运行该系统基本事件流:1. 客户或工作人员输入教务处帐号和密码2. 点击登录其它事件流:1. 用户不存在2. 帐号或密码错误后置条件:登录成功并跳转到相关页面表2.2 车辆信息查询用例名称:查询车辆信息用例ID:T-FIND-1角色:客户或工作
12、人员用例说明:使用汽车租赁系统查询车辆信息前置条件:从功能菜单选择进入车辆查询信息页面基本事件流:输入要查询的品牌其它事件流:输入的品牌不存在后置条件:显示该品牌的所有类别的车辆供选择表2.3 客户信息查询用例名称:查询客户信息用例ID:T-FIND-2角色:客户或工作人员用例说明:使用汽车租赁系统查询客户信息前置条件:从功能菜单进入客户信息查询页面基本事件流:输入要查询客户的身份证号其它事件流:如果角色为客户的话,用户只能查询自己的信息后置条件:显示查询结果表2.4 汽车历史租赁记录查询用例名称:查询汽车的历史租赁记录用例ID:T-FIND-3角色:工作人员用例说明:使用汽车租赁系统查询汽车
13、的历史租赁记录前置条件:从功能菜单进入汽车历史租赁记录查询页面基本事件流:输入要查询汽车的车牌号其它事件流:输入的车牌号不存在后置条件:显示查询结果表2.5 客户历史租赁记录查询用例名称:查询客户的历史租赁记录用例ID:T-FIND-4角色:客户或工作人员用例说明:使用汽车租赁系统查询客户的历史租赁记录前置条件:从功能菜单进入客户历史租赁记录查询页面基本事件流:输入要查询客户的身份证号其它事件流:1. 输入的身份证号不存在2. 角色是客户的话只能查询其本身后置条件:显示查询结果表2.6 某一年龄对汽车的喜好用例名称:统计某一年龄对汽车的喜好用例ID:T-COUNT-1角色:工作人员用例说明:使
14、用汽车租赁系统统计某一年龄对汽车的喜好前置条件:从功能菜单进入喜好统计页面基本事件流:输入要查询的年龄其它事件流:输入的年龄非法后置条件:显示某一年龄最喜爱结果品牌表2.7 汽车租赁用例名称:租赁汽车用例ID:T-OP-1角色:客户用例说明:使用汽车租赁系统租赁汽车前置条件:从查询结果中进入汽车租赁页面基本事件流:选择要租赁的车的类别其它事件流:租赁失败后置条件:租赁成功并显示用户成功租赁的车的信息表2.8 汽车归还用例名称:归还汽车用例ID:T-OP-2角色:工作人员用例说明:使用汽车租赁系统归还汽车前置条件:从功能菜单进入归还汽车页面基本事件流:1. 输入汽车的车牌号2. 显示实际费用其它
15、事件流:该车牌号的汽车未被租赁后置条件:归还该汽车三、 环境说明3.1数据库环境表3.1 数据库环境数据库实例数据库系统数据库部署环境数据库设计工具数据库存放位置说明taxiSql Server 2008Windows7+localDiagramDesignerD:ProgramFilesMicrosoftSQLServerMSSQL10_50.MSSQLSERVERMSSQLDATA3.2 开发环境该汽车租赁管理系统在Qt Creator 3.3.0下使用Qt库5.4.0开发完成。四、 数据库的命名规则4.1 数据库对象命名规则表4.1 数据库对象命名规则数据库对象命名规则备注表Table_
16、功能描述字符串例如:Table_studen学生表视图View_功能描述字符串例如:View_student学生视图触发器Trigger_功能描述字符串例如:Trigger_update约束Constraint_功能描述字符串例如:Constraint_primarykey存储过程Proc_功能描述字符串例如:proc_insert4.2 数据项编码规则表4.2 数据项编码规则数据项命名规则数据类型长度范围工号W+序号(0000-9999)定长字符串5位车牌号省份简称+城市的序号+序号(00000-ZZZZZ)定长字符串10位分类号F+序号(000-999)定长字符串4位订单号D+年+月+日+
17、序号(000000000+999999999) 定长字符串18位五、 逻辑设计5.1 实体与关系的属性表5.1 实体与属性实体和关系名称其余属性工作人员工号,密码,姓名,性别,联系电话客户身份证号,密码,姓名,性别,单位,联系电话车辆车牌号,租赁状态,购入日期,颜色车辆类别分类号,品牌,座位数,库存数,日租价格,日租超公里价格,月租价格租赁订单号,车牌号,身份证号,租赁日期,还车日期,实际5.2 ER图图 5.1 ER图六、 物理设计6.1表汇总表6.1 数据库表汇总表名功能说明Table_Worker存储工作人员的信息Table_Customer存储用户的信息Table_Car存储车辆的信息
18、Table_CarClass存储车辆的分类信息Table_Record存储租赁记录,联系客户和车辆,是一张联系表6.2表Table_Worker表6.2 Table_Woeker表名Table_Worker数据库用户Sa主键WorkNo序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1WorkNochar(5)NY高无主键2WorkPasswordchar(20)NN低无密码3WorkNamechar(20)NN低无姓名4WorkSexchar(2)NN低无性别5WorkPhonechar(15)YY高无电话sql脚本create table Table_Wo
19、rker(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区别度默认值约束条件/说明1CusNochar(20)NY高无主键2CusPasswordchar
20、(20)NN低无密码3CusNamechar(20)NN低无姓名4CusSexchar(2)NN低无性别5CusPhonechar(15)YY高无电话6CusCompanychar(40)YN低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(Cus
21、No)6.4表 Table_Car表6.4Table_Car表名Table_Car数据库用户sa主键CarNO序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1CarNochar(10)NY高无主键2CarClassNochar(4)NN高无外键3CarStabitNN低false租赁状态4CarDatedatetimeNN低1970-1-1购入日期5CarColorchar(15)NN低无颜色sql脚本create table Table_Car(CarNo char(10) not null,CarClassNO char(4) not null,CarS
22、ta 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区别度默认值约束条件/说明1CarClassNochar(4)NY高无主键2CarClassBrandc
23、har(10)NY低无品牌3CarClassSeatsmallintNN低无座位数4CarClassCntintNN低无库存5CarClassDayPrice1moneyNN低无日租价格6CarClassDayPrice2moneyNN低无日租超公里价格7CarClassMonthPricemoneyNN低无月租价格sql脚本create table Table_CarClass(CarClassNo char(4) not null,CarClassBrand char(10) not null,CarClassSeat smallint not null,CarClassCnt int n
24、ot 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区别度默认值约束条件/说明1RecordNochar(18)NY高无主键2CarNochar(10)NY高无外键3CusNochar(20)NY高无外键4
25、RecordRentDatedatetimeNN低无租赁时间5RecordReturnDatedatetimeNN低NULL还车时间6RecordCostmoneyYN低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),for
26、eign 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区别度默认值约束条件/说明1WorkNochar(5)NN高无主键、外键2CarNochar(10)NN高无主键、外键sql脚本create table Table_Record(Record
27、No 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参数:W
28、orkNo char(5),WorkPassword char(20),workName char(20),workSex char(2),workPhone char(15)功能:插入工作人员信息执行存储过程:declare sta intbeginexec sta = proc_insert_Worker W0002,123456,WangNiMa,男,15274212584if(sta = 1)print 插入成功elseprint 插入失败select * from Table_Workerendgo执行结果:图6.1 proc_insert_Worker 执行结果6.8.2 proc
29、_insert_Customer参数:CusNo char(20),CusPassword char(20),CusName char(20),CusSex char(2),CusPhone char(15),CusCompany char(40)功能:插入客户信息执行存储过程:declare sta intbeginexec sta = proc_insert_Customer 430321199410180943,550993,MAMAMA,女,13875655451,腾讯if(sta = 1)print 插入成功elseprint 插入失败select * from Table_Cust
30、omerendgo执行结果:图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 intbeginexec sta = proc_insert_Car 湘A00021,F007,1,2015-6-25,blackif(sta = 1)print 插入成功elseprint 插入失败select * from Table_Caren
31、dgo执行结果:图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 intbeginexec sta = proc_insert_CarClass F007,宝马i8,4,0,100
32、0.00,1050.00,30000.00if(sta = 1)print 插入成功elseprint 插入失败select *from Table_CarClassendgo执行结果图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(
33、18)beginexec proc_insert_Record 湘A00003,430321199411197952,s outputprint sselect * from Table_Recordendgo执行结果:图6.5 proc_insert_Record 执行结果6.8.6 proc_find_AllCarClass参数: 无功能:查找所有的分类信息执行存储过程:declare sta intbeginexec sta = proc_find_AllCarClass if(sta = 0)print 没有记录elseprint 查找成功endgo执行结果:图6.6 proc_fin
34、d_AllCarClass 执行结果6.8.7 proc_find_Cars参数:CarClassNo char(4)功能:查找分类号相同的汽车执行存储过程:declare sta intbeginexec sta = proc_find_Cars F003if(sta = 0)print 分类号不存在elseprint 查找成功endgo执行结果:图6.7 proc_find_Cars执行结果6.8.8 proc_find_Car参数:CarNo char (10)功能:查找车牌号为CarNo的车执行存储过程:declare sta intbeginexec sta = proc_find_
35、Car 湘A00000if(sta = 0)print 车牌号不存在elseprint 查找成功end执行结果:图6.8 proc_find_Car执行结果6.8.9 proc_find_Customer参数:CusNo char(18)功能:查找身份证号码为CusNo的客户的信息执行存储过程:declare sta intbeginexec sta = proc_find_Customer 430321199411197952if(sta = 0)print 身份证号码不存在elseprint 查找成功endgo执行结果:图6.9 proc_find_Customer 执行结果6.8.10
36、proc_find_CustomerRecord参数:CusNo char(18)功能:查找身份证号码为CusNo的客户的租赁记录执行存储过程:declare sta intbeginexec sta = proc_find_CustomerRecord 430321199411197952if(sta = 0)print 记录不存在elseprint 查找成功endgo执行结果:图6.10 proc_find_CustomerReocrd执行结果6.8.11 proc_find_CarRecord参数:CarNo char(10)功能:查找车牌号为CarNo的车辆的租赁记录执行存储过程:de
37、clare sta intbeginexec sta = proc_find_CarRecord 湘A00000if(sta = 0)print 记录不存在elseprint 查找成功end执行结果:图6.11 proc_find_CarRecord执行结果6.8.12 proc_find_CustomerFavorite参数:CusAge int功能:查找年龄为CusAge的客户最喜欢的型号执行存储过程:declare sta intbeginexec sta = proc_find_CustomerFavorite 21if(sta = 0)print 记录不存在elseprint 查找成
38、功end执行结果:图6.12 proc_findCustomerFavorite6.9 函数6.9.1 func_CreateRecordNO参数:无返回值:char(18)功能:创建一个订单号代码:ALTER function dbo.func_CreateRecordNo()returns char(18)beginreturn replace(D+str(year(getdate(),4)-年+str(month(getdate(),2)-月+str(day(getdate(),2)-日+str(select count(*) from Table_Record)+1,9)-流水号, ,
39、0)end6.9.2 func_IdToAge参数:Id char(18)返回值: int功能:根据身份证号码算出年龄代码:ALTER function dbo.func_IdToAge(Id char(18)returns int asbeginreturn datediff(year,substring(430321199411197952,7,4)+-+substring(430321199411197952,11,2)+-+substring(430321199411197952,13,2),getdate()end6.10 触发器6.10.1 Trigger_insertCar_addCarClassCnt触发器类型:insert功能:在插入一辆新的汽车时,对应类别的库存增加一辆所属表:Table_Car代码:ALTER trigger dbo.Trigger_insertCar_addCarClassCnton dbo.Ta