还剩53页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
长沙学院课程设计说明书题目汽车租赁管理系统系部数学与计算机科学系专业班级姓名学号指导教师潘怡起止日期
2015.
6.15~
2015.
6.26课程设计任务书课程名称数据库系统原理课程设计设计题目汽车租赁管理系统已知技术参数和设计要求题目汽车租赁管理系统
1、某汽车租赁公司汽车租赁管理系统需要如下信息工作人员信息包括工号、姓名、性别、联系电话等客户信息包括身份证号、姓名、性别、所在单位、联系电话等车辆信息包括车牌号、品牌、颜色、座位数、日租价格、日租超公里价格、月租价格、租赁状态、购入日期等车辆类别信息包括分类号,库存数其业务规则描述如下一个工作人员可以对很多辆车辆进行管理,一辆车也可以被多个工作人员管理;一辆车只能属于一种车辆类别,而一种车辆类别可以包含多辆车;一个客户可以租多辆不同的车
2、系统功能的基本要求可以实现对车辆、租赁客户的查询,可以查询汽车、客户租赁历史记录可以按类别统计汽车的租赁金额和剩余的库存数,可以统计某一年龄客户群体对某类汽车的租赁喜好,能模拟客户对汽车的租借、归还业务各阶段具体要求
1、需求分析阶段定义数据项的含义和取值定义目标系统的数据流
2、概念结构设计阶段画出实体模型E-R图
3、逻辑结构设计阶段将实体模型转化为关系模型给出每个关系的主关键字和函数依赖集分析你所设计的关系数据库模式是否属于3NF
4、物理设计阶段确定所有字段的名称、类型、宽度、小数位数及完整性约束确定数据库及表的名称及其组成确定索引文件和索引关键字
5、数据库安全及维护设计阶段设计一个适合的数据库安全策略(用户身份认证、访问权限、视图)为了实现复杂的数据完整性约束,设计适当的触发器设计一个适合的数据库备份策略
6、实施阶段要求所有操作必须在查询分析器中用SQL语句或系统存储过程完成对于学有余力的同学,可以使用嵌入式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班注意事项提交文档长沙学院课程设计任务书(每学生1份)长沙学院课程设计论文(每学生1份)长沙学院课程设计鉴定表(每学生1份)指导教师签名 日期 教研室主任签名 日期 系主任签名 日期 长沙学院课程设计鉴定表姓名学号专业班级设计题目汽车租赁管理系统指导教师潘怡指导教师意见评定等级教师签名日期答辩小组意见评定等级 答辩小组长签名 日期 教研室意见教研室主任签名日期 系(部)意见系主任签名 日期 说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;目录TOC\o1-3\h\z\u
一、引言
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.2ER图13
六、物理设计
136.1表汇总
136.2表Table_Worker
146.3表Table_Customer
146.4表Table_Car
156.5表Table_CarClass
166.6表Table_Record
166.7表Table_Car_Worker
176.8存储过程
176.
8.1proc_insert_Worker
176.
8.2proc_insert_Customer
186.
8.3proc_insert_Car
196.
8.4proc_insert_CarClass
206.
8.5proc_insert_Record
216.
8.6proc_find_AllCarClass
226.
8.7proc_find_Cars
236.
8.8proc_find_Car
236.
8.9proc_find_Customer
246.
8.10proc_find_CustomerRecord
246.
8.11proc_find_CarRecord
256.
8.12proc_find_CustomerFavorite
256.9函数
266.
9.1func_CreateRecordNO
266.
9.2func_IdToAge
266.10触发器
276.
10.1Trigger_insertCar_addCarClassCnt
276.
10.2Trigger_deleteCar_subtractCarClassCnt
276.
10.3Trigger_updateCar
286.
10.4Trigger_updateRecordReturnDate28
七、运行结果
297.1租赁汽车
297.2资料查询
307.3订单查询
307.4查询一类汽车
317.5还车登记
317.6统计某一年龄最喜欢的类型32
八、总结32
九、附录
339.1存储过程代码
339.
1.1proc_insert_Car
339.
1.2proc_insert_CarClass
336.
1.3proc_insert_Customer
349.
1.4proc_insert_Record
349.
1.5proc_insert_Worker
349.
1.6proc_find_AllCarClass
359.
1.7proc_find_Car
359.
1.8proc_find_Cars
359.
1.9proc_find_CarRecord
369.
1.10proc_find_Customer
369.
1.11proc_find_CustomerFavorite
369.
1.12proc_find_CustomerRecord
379.2管理系统代码
379.
2.1menu.h
379.
2.2usersql.h
389.
2.3main.cpp
399.
2.4menu.cpp
399.
2.5usersql.cpp48
一、引言
1.1编写目的本文是汽车租赁管理系统设计文档的组成部分,编写设计文档的目的是明确数据库的表名、字段名,明确表之间的关系,分析功能的详细需求本文档的读者对象是需求人员、系统设计人员、开发人员和测试人员
1.2参考资料表
1.1参考资料资料名称作者文件编号、版本《数据库系统概论》王珊、萨师煊2006年5月第4版《C++GUIQt4编程》JasminBlanchetteMarksummerfield2013年5月第1版《SQLServer2008编程入门经典》RobertVieria2010年1月第1版
2、需求规约
2.1业务描述
2.
1.1创建背景系统名称汽车租赁管理系统系统的开发者xxx系统的用户租车客户以及租赁公司的工作人员
2.
1.2业务规则工作人员可以对很多辆车辆进行管理,一辆车也可以被多个工作人员管理;一辆车只能属于一种车辆类别,而一种车辆类别可以包含多辆车;一个客户可以租多辆不同的车
2.2需求分析
2.
2.1用例规约表
2.1用户登录用例名称用户登录摘要用例ID T-LOGIN-1角色客户或工作人员用例说明汽车租赁系统的登录模块前置条件客户或工作人员运行该系统基本事件流
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角色客户或工作人员用例说明使用汽车租赁系统查询客户的历史租赁记录前置条件从功能菜单进入客户历史租赁记录查询页面基本事件流输入要查询客户的身份证号其它事件流输入的身份证号不存在角色是客户的话只能查询其本身后置条件显示查询结果表
2.6某一年龄对汽车的喜好用例名称统计某一年龄对汽车的喜好用例ID T-COUNT-1角色工作人员用例说明使用汽车租赁系统统计某一年龄对汽车的喜好前置条件从功能菜单进入喜好统计页面基本事件流输入要查询的年龄其它事件流输入的年龄非法后置条件显示某一年龄最喜爱结果品牌表
2.7汽车租赁用例名称租赁汽车用例ID T-OP-1角色客户用例说明使用汽车租赁系统租赁汽车前置条件从查询结果中进入汽车租赁页面基本事件流选择要租赁的车的类别其它事件流租赁失败后置条件租赁成功并显示用户成功租赁的车的信息表
2.8汽车归还用例名称归还汽车用例ID T-OP-2角色工作人员用例说明使用汽车租赁系统归还汽车前置条件从功能菜单进入归还汽车页面基本事件流输入汽车的车牌号显示实际费用其它事件流该车牌号的汽车未被租赁后置条件归还该汽车
3、环境说明
3.1数据库环境表
3.1数据库环境数据库实例数据库系统数据库部署环境数据库设计工具数据库存放位置说明taxiSqlServer2008Windows7+localDiagramDesignerD:\ProgramFiles\MicrosoftSQLServer\MSSQL10_
50.MSSQLSERVER\MSSQL\DATA
3.2开发环境该汽车租赁管理系统在QtCreator
3.
3.0下使用Qt库
5.
4.0开发完成
4、数据库的命名规则
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、逻辑设计
5.1实体与关系的属性表
5.1实体与属性实体和关系名称其余属性工作人员工号密码,姓名,性别,联系电话客户身份证号密码,姓名,性别,单位,联系电话车辆车牌号租赁状态,购入日期,颜色车辆类别分类号品牌,座位数,库存数,日租价格,日租超公里价格,月租价格租赁订单号,车牌号,身份证号,租赁日期,还车日期,实际
5.2ER图图
5.1ER图
6、物理设计
6.1表汇总表
6.1数据库表汇总表名功能说明Table_Worker存储工作人员的信息Table_Customer存储用户的信息Table_Car存储车辆的信息Table_CarClass存储车辆的分类信息Table_Record存储租赁记录,联系客户和车辆,是一张联系表
6.2表Table_Worker表
6.2Table_Woeker表名Table_Worker数据库用户Sa主键WorkNo序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1WorkNochar5NY高无主键2WorkPasswordchar20NN低无密码3WorkNamechar20NN低无姓名4WorkSexchar2NN低无性别5WorkPhonechar15YY高无电话sql脚本createtableTable_WorkerWorkNochar5notnullWorkPasswordchar20notnullWorkNamechar20notnullWorkSexchar2notnullWorkPhonechar26uniqueprimarykeyWorkNo
6.3表Table_Customer表
6.3Table_Customer表名Table_Customer数据库用户sa主键CusNo序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1CusNochar20NY高无主键2CusPasswordchar20NN低无密码3CusNamechar20NN低无姓名4CusSexchar2NN低无性别5CusPhonechar15YY高无电话6CusCompanychar40YN低NULL单位sql脚本createtableTable_CustomerCusNochar20notnullCusPasswordchar20notnullCusNamechar20notnullCusSexchar2notnullCusPhonechar15uniqueCusCompanychar40primarykeyCusNo
6.4表Table_Car表
6.4Table_Car表名Table_Car数据库用户sa主键CarNO序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1CarNochar10NY高无主键2CarClassNochar4NN高无外键3CarStabitNN低false租赁状态4CarDatedatetimeNN低1970-1-1购入日期5CarColorchar15NN低无颜色sql脚本createtableTable_CarCarNochar10notnullCarClassNOchar4notnullCarStabitnotnullCarDatedatetimenotnullCarColorchar15notnullprimarykeyCarNoforeignkeyCarClassNoreferencesTable_CarClassCarClassNo
6.5表Table_CarClass表
6.5Table_CarClass表名Table_CarClass数据库用户sa主键CarClassNo序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1CarClassNochar4NY高无主键2CarClassBrandchar10NY低无品牌3CarClassSeatsmallintNN低无座位数4CarClassCntintNN低无库存5CarClassDayPrice1moneyNN低无日租价格6CarClassDayPrice2moneyNN低无日租超公里价格7CarClassMonthPricemoneyNN低无月租价格sql脚本createtableTable_CarClassCarClassNochar4notnullCarClassBrandchar10notnullCarClassSeatsmallintnotnullCarClassCntintnotnullCarClassDayPrice1moneynotnullCarClassDayPrice2moneynotnullCarClassMonthPricemoneynotnullprimarykeyCarClassNO
6.6表Table_Record表
6.6Table_Record表名Table_Record数据库用户sa主键RecordNo序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1RecordNochar18NY高无主键2CarNochar10NY高无外键3CusNochar20NY高无外键4RecordRentDatedatetimeNN低无租赁时间5RecordReturnDatedatetimeNN低NULL还车时间6RecordCostmoneyYN低NULL实际花费sql脚本createtableTable_RecordRecordNochar18notnullCarNochar10notnullCusNochar20notnullRecordRentDatedatetimenotnullRecordReturnDatedatetimeRecordCostmoneyprimarykeyRecordNoforeignkeyCarNoreferencesTable_CarCarNoforeignkeyCusNoreferencesTable_CustomerCusNo
6.7表Table_Car_Worker表
6.7Table_Car_Worker表名Table_Car_Worker数据库用户sa主键WorkNoCarNo序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1WorkNochar5NN高无主键、外键2CarNochar10NN高无主键、外键sql脚本createtableTable_RecordRecordNochar18notnullCarNochar10notnullCusNochar20notnullRecordRentDatedatetimenotnullRecordReturnDatedatetimeRecordCostmoneyprimarykeyRecordNoforeignkeyCarNoreferencesTable_CarCarNoforeignkeyCusNoreferencesTable_CustomerCusNo
6.8存储过程
6.
8.1proc_insert_Worker参数@WorkNochar5@WorkPasswordchar20@workNamechar20@workSexchar2@workPhonechar15功能插入工作人员信息执行存储过程declare@staintbeginexec@sta=proc_insert_WorkerW0002123456WangNiMa男15274212584if@sta=1print插入成功elseprint插入失败select*fromTable_Workerendgo执行结果图
6.1proc_insert_Worker执行结果
6.
8.2proc_insert_Customer参数@CusNochar20@CusPasswordchar20@CusNamechar20@CusSexchar2@CusPhonechar15@CusCompanychar40功能插入客户信息执行存储过程declare@staintbeginexec@sta=proc_insert_Customer430321199410180943550993MAMAMA女13875655451腾讯if@sta=1print插入成功elseprint插入失败select*fromTable_Customerendgo执行结果图
6.2proc_insert_Customer执行结果
6.
8.3proc_insert_Car参数@CarNochar10@CarClassNochar4@CarStabit@CarDatedatetime@CarColorchar15功能插入汽车信息执行存储过程declare@staintbeginexec@sta=proc_insert_Car湘A00021F00712015-6-25blackif@sta=1print插入成功elseprint插入失败select*fromTable_Carendgo执行结果图
6.3proc_insert_Car执行结果
6.
8.4proc_insert_CarClass参数@CarClassNochar4@CarClassBrandchar10@CarClassSeatsmallint@CarClassCntint@CarClassDayPrice1money@CarClassDayPrice2money@CarClassMonthPricemoney功能插入汽车分类信息执行存储过程declare@staintbeginexec@sta=proc_insert_CarClassF007宝马i
8401000.
001050.
0030000.00if@sta=1print插入成功elseprint插入失败select*fromTable_CarClassendgo执行结果图
6.4proc_insert_CarClass执行结果
6.
8.5proc_insert_Record参数@RecordNochar18@CarNochar10@CusNochar20@RecordRentDatedatetime@RecordReturnDatedatetime@RecordCostmoney=NULL功能插入租赁记录执行存储过程declare@schar18beginexecproc_insert_Record湘A00003430321199411197952@soutputprint@sselect*fromTable_Recordendgo执行结果图
6.5proc_insert_Record执行结果
6.
8.6proc_find_AllCarClass参数无功能查找所有的分类信息执行存储过程declare@staintbeginexec@sta=proc_find_AllCarClassif@sta=0print没有记录elseprint查找成功endgo执行结果图
6.6proc_find_AllCarClass执行结果
6.
8.7proc_find_Cars参数@CarClassNochar4功能查找分类号相同的汽车执行存储过程declare@staintbeginexec@sta=proc_find_CarsF003if@sta=0print分类号不存在elseprint查找成功endgo执行结果图
6.7proc_find_Cars执行结果
6.
8.8proc_find_Car参数@CarNochar10功能查找车牌号为@CarNo的车执行存储过程declare@staintbeginexec@sta=proc_find_Car湘A00000if@sta=0print车牌号不存在elseprint查找成功end执行结果图
6.8proc_find_Car执行结果
6.
8.9proc_find_Customer参数@CusNochar18功能查找身份证号码为@CusNo的客户的信息执行存储过程declare@staintbeginexec@sta=proc_find_Customer430321199411197952if@sta=0print身份证号码不存在elseprint查找成功endgo执行结果图
6.9proc_find_Customer执行结果
6.
8.10proc_find_CustomerRecord参数@CusNochar18功能查找身份证号码为@CusNo的客户的租赁记录执行存储过程declare@staintbeginexec@sta=proc_find_CustomerRecord430321199411197952if@sta=0print记录不存在elseprint查找成功endgo执行结果图
6.10proc_find_CustomerReocrd执行结果
6.
8.11proc_find_CarRecord参数@CarNochar10功能查找车牌号为@CarNo的车辆的租赁记录执行存储过程declare@staintbeginexec@sta=proc_find_CarRecord湘A00000if@sta=0print记录不存在elseprint查找成功end执行结果图
6.11proc_find_CarRecord执行结果
6.
8.12proc_find_CustomerFavorite参数@CusAgeint功能查找年龄为@CusAge的客户最喜欢的型号执行存储过程declare@staintbeginexec@sta=proc_find_CustomerFavorite21if@sta=0print记录不存在elseprint查找成功end执行结果图
6.12proc_findCustomerFavorite
6.9函数
6.
9.1func_CreateRecordNO参数无返回值char18功能创建一个订单号代码ALTERfunction[dbo].[func_CreateRecordNo]returnschar18beginreturnreplaceD+stryeargetdate4--年+strmonthgetdate2--月+strdaygetdate2--日+strselectcount*fromTable_Record+19--流水号0end
6.
9.2func_IdToAge参数@Idchar18返回值int功能根据身份证号码算出年龄代码ALTERfunction[dbo].[func_IdToAge]@Idchar18returnsintasbeginreturndatediffyearsubstring43032119941119795274+-+substring430321199411197952112+-+substring430321199411197952132getdateend
6.10触发器
6.
10.1Trigger_insertCar_addCarClassCnt触发器类型insert功能在插入一辆新的汽车时,对应类别的库存增加一辆所属表Table_Car代码ALTERtrigger[dbo].[Trigger_insertCar_addCarClassCnt]on[dbo].[Table_Car]afterinsertasbeginupdateTable_CarClasssetCarClassCnt=CarClassCnt+1whereCarClassNoinselectCarClassNofrominsertedend
6.
10.2Trigger_deleteCar_subtractCarClassCnt触发器类型delete功能在删除一辆汽车时,对应类别的库存减少一辆所属表Table_Car代码ALTERtrigger[dbo].[Trigger_deleteCar_subtractCarClassCnt]on[dbo].[Table_Car]afterdeleteasbeginupdateTable_CarClasssetCarClassCnt=CarClassCnt-1whereCarClassNoinselectCarClassNofromdeletedend
6.
10.3Trigger_updateCar触发器类型update功能在修改汽车租赁状态时,对应类别的库存相应的加减一所属表Table_Car代码ALTERtrigger[dbo].[Trigger_updateCar]on[dbo].[Table_Car]afterupdateasifUPDATECarStabeginupdateTable_CarClasssetCarClassCnt=CarClassCnt-1whereCarClassNoinselectinserted.CarClassNofrominserteddeletedwhereinserted.CarNo=deleted.CarNoandinserted.CarSta=0anddeleted.CarSta=1updateTable_CarClasssetCarClassCnt=CarClassCnt+1whereCarClassNoinselectinserted.CarClassNofrominserteddeletedwhereinserted.CarNo=deleted.CarNoandinserted.CarSta=1anddeleted.CarSta=0end
6.
10.4Trigger_updateRecordReturnDate触发器类型update功能在更新还车时间时,更新实际花费所属表Table_Record代码ALTERtrigger[dbo].[Trigger_updateRecordReturnDate]on[dbo].[Table_Record]afterupdateasdeclare@pricemoneyifUPDATERecordReturnDatebeginselect@price=selectCarClassDayPrice1fromTable_CarClasswhereCarClassNoinselectCarClassNofromTable_CarwhereCarNoinselectinserted.CarNofrominserteddeletedwhereinserted.RecordNo=deleted.RecordNoanddeleted.RecordReturnDateisnullandinserted.RecordReturnDateisnotnullupdateTable_RecordsetRecordCost=@price*DATEDIFFDAYRecordRentDateRecordReturnDate+1whereRecordNoinselectinserted.RecordNofrominserteddeletedwhereinserted.RecordNo=deleted.RecordNoanddeleted.RecordReturnDateisnullandinserted.RecordReturnDateisnotnullend
7、运行结果
7.1租赁汽车图
7.1租赁汽车
7.2资料查询图
7.2资料查询
7.3订单查询图
7.3订单查询
7.4查询一类汽车图
7.4查询一类汽车
7.5还车登记图
7.5还车登记
7.6统计某一年龄最喜欢的类型图
7.6统计某一年龄最喜欢的类型
8、总结通过这次实训熟悉了SqlServer2008的使用,进一步了解了数据库的设计,能更加熟练的使用SqlServer来完成一些数据的存储和查询因为对触发器不怎么熟悉,在建立触发器时遇到了一些困难,通过查阅相关书籍学会了触发器的语法,攻克了这个难题,对于SqlServer2008中触发器主要是要理解好inserted表和deleted表因为有一个功能要根据年龄分类查询,而我存储的信息中只有身份证号码,所以我需要一个函数直接根据身份证号码算出年龄,一开始觉得可能不好写,不过看了几个例子后发现函数和存储过程并没有什么不同,只是多了个返回值而已实训的过程中一直磕磕碰碰,因为想写界面,而我只会C和C++,所以用到了Qt库,但接触时间不长所以没能写出界面,是有点遗憾,于是在写了个控制台程序,也算模拟一下界面把困难总是会碰到的,但只要有决心,问题总会在某个时候迎刃而解
9、附录
9.1存储过程代码
9.
1.1proc_insert_CarALTERproc[dbo].[proc_insert_Car]@CarNochar10@CarClassNochar4@CarStabit=1@CarDatedatetime@CarColorchar15asifnotexistsselect*fromTable_CarwhereCarNo=@CarNobegininsertintoTable_Carvalues@CarNo@CarClassNo@CarSta@CarDate@CarColorreturn1endelsereturn
09.
1.2proc_insert_CarClassALTERproc[dbo].[proc_insert_CarClass]@CarClassNochar4@CarClassBrandchar10@CarClassSeatsmallint@CarClassCntint=0@CarClassDayPrice1money@CarClassDayPrice2money@CarClassMonthPricemoneyasifnotexistsselect*fromTable_CarClasswhereCarClassNo=@CarClassNobegininsertintoTable_CarClassvalues@CarClassNo@CarClassBrand@CarClassSeat@CarClassCnt@CarClassDayPrice1@CarClassDayPrice2@CarClassMonthPrice;return1endelsereturn0;
6.
1.3proc_insert_CustomerALTERproc[dbo].[proc_insert_Customer]@CusNochar20@CusPasswordchar20@CusNamechar20@CusSexchar2@CusPhonechar15@CusCompanychar40asifnotexistsselect*fromTable_CustomerwhereCusNo=@CusNOorCusPhone=@CusPhonebegininsertintoTable_Customervalues@CusNo@CusPassword@CusName@CusSex@CusPhone@CusCompanyreturn1endelsereturn
09.
1.4proc_insert_RecordALTERproc[dbo].[proc_insert_Customer]@CusNochar20@CusPasswordchar20@CusNamechar20@CusSexchar2@CusPhonechar15@CusCompanychar40asifnotexistsselect*fromTable_CustomerwhereCusNo=@CusNOorCusPhone=@CusPhonebegininsertintoTable_Customervalues@CusNo@CusPassword@CusName@CusSex@CusPhone@CusCompanyreturn1endelsereturn
09.
1.5proc_insert_WorkerALTERproc[dbo].[proc_insert_Worker]@WorkNochar5@WorkPasswordchar20@workNamechar20@workSexchar2@workPhonechar15asifnotexistsselect*fromTable_WorkerwhereWorkNo=@WorkNObegininsertintoTable_Workervalues@WorkNo@WorkPassword@workName@workSex@workPhonereturn1endelsereturn
09.
1.6proc_find_AllCarClassALTERproc[dbo].[proc_find_AllCarClass]asbeginselect*fromTable_CarClassreturn@@rowcountend
9.
1.7proc_find_CarALTERproc[dbo].[proc_find_Car]@CarNochar10asbeginselect*fromTable_CarwhereCarNo=@CarNoreturn@@rowcountend
9.
1.8proc_find_CarsALTERproc[dbo].[proc_find_Cars]@CarClassNochar4asbeginselect*fromTable_CarwhereCarClassNO=@CarClassNoreturn@@rowcountend
9.
1.9proc_find_CarRecordALTERproc[dbo].[proc_find_CarRecord]@CarNochar10asbeginselect*fromTable_RecordwhereCarNo=@CarNoreturn@@rowcountend
9.
1.10proc_find_CustomerALTERproc[dbo].[proc_find_Customer]@CusNochar18asbeginselect*fromTable_CustomerwhereCusNo=@CusNoreturn@@rowcountend
9.
1.11proc_find_CustomerFavoriteALTERproc[dbo].[proc_find_CustomerFavorite]@CusAgeintasbeginselect*fromTable_CarClasswhereCarClassNoinselectCarClassNofromTable_RecordTable_CarwhereTable_Record.CarNo=Table_Car.CarNoanddbo.func_IdToAgeTable_Record.CusNo=@CusAgegroupbyCarClassNohavingcount*=allselectcountCarClassNofromTable_RecordTable_CarwhereTable_Record.CarNo=Table_Car.CarNoanddbo.func_IdToAgeTable_Record.CusNo=@CusAgegroupbyCarClassNOreturn@@rowcountend
9.
1.12proc_find_CustomerRecordALTERproc[dbo].[proc_find_CustomerRecord]@CusNochar18asbeginselect*fromTable_RecordwhereCusNo=@CusNoreturn@@rowcountend
9.2管理系统代码
9.
2.1menu.h#ifndefLOGIN#defineLOGINintmenu_main;intmenu_login;intmenu_regist;intmenu_Customer;intmenu_Worker;intmenu_findCar;intmenu_findUser;intmenu_findUserRecord;intmenu_findUserFavorite;intmenu_rentCar;intmenu_returnCar;#endif//LOGIN
9.
2.2usersql.h#includestring#includeQStringListusingstd::string;#ifndefUSESQL_H#defineUSESQL_HstructCustomer{QStringCusNo;QStringCusPassword;QStringCusName;QStringCusSex;QStringCusPhone;QStringCusCompany;};boolsql_connect;boolsql_find_Customerstringidstringpassword;boolsql_find_Workerstringidstringpassword;boolsql_insert_CustomerCustomerCus;boolsql_display_allBrand;boolsql_display_CarQStringCarClassNo;boolsql_display_CustomerFavoriteintCusAge;boolsql_display_CustomerQStringCusNo;boolsql_display_CustomerRecordQStringCusNo;QStringsql_rent_CarQStringCarClassNo;//租车成功返回订单号doublesql_return_CarQStringCarNo;//还车返回实际花费QStringsql_find_CarNoQStringRecordNo;//根据订单号查找车牌号#endif//USESQL_H
9.
2.3main.cpp#includeQTextCodec#includemenu.h#includeusesql.h#includecstdlib#includeiostream#pragmaexecution_character_setutf-8usingnamespacestd;usingstd::wcin;usingstd::wcout;usingstd::cin;usingstd::cout;usingstd::string;usingstd::wstring;usingstd::endl;intmainintargcchar*argv[]{//QTextCodec*codec=QTextCodec::codecForNameGBK;//QTextCodec::setCodecForLocalecodec;sql_connect;while1{menu_main;}return0;}
9.
2.4menu.cpp#includestring#includeiostream#includeQDebug#includeQTextCodec#includeconio.h#includemenu.h#includeusesql.husingstd::cin;usingstd::string;usingstd::wcin;usingstd::wstring;QStringid;intmenu_main{systemcls;qDebug\t\t\t----------------------------\n;qDebug\t\t\t-------汽车租赁管理系统-----\n;qDebug\t\t\t----------------------------\n;qDebug\t\t\t1登录;qDebug\t\t\t2注册;switchgetch{case1:menu_login;break;case2:menu_regist;break;default:break;}return0;}intmenu_login{stringuserIdpassword;systemcls;qDebug\t\t\t----------------------------\n;qDebug\t\t\t-------汽车租赁管理系统-----\n;qDebug\t\t\t----------------------------\n;qDebug\n\n\n;qDebug请输入帐号;cinuserId;qDebug请输入密码;cinpassword;ifuserId.size==5{ifsql_find_WorkeruserIdpassword{systemcls;qDebug登录成功!;id=QString::fromStdStringuserId;systempause;menu_Worker;return0;}else{systemcls;qDebug帐号不存在或密码错误!;systempause;}}elseifuserId.size==18{ifsql_find_CustomeruserIdpassword{systemcls;qDebug登录成功!;id=QString::fromStdStringuserId;systempause;menu_Customer;return0;}else{systemcls;qDebug帐号不存在或密码错误!;systempause;}}else{systemcls;qDebug帐号非法!;systempause;}return0;}intmenu_regist{systemcls;qDebug\t\t\t----------------------------\n;qDebug\t\t\t-------汽车租赁管理系统-----\n;qDebug\t\t\t----------------------------\n;qDebug\n\n\n;CustomerCus;strings;qDebug请输入您的18位身份证号登录帐号;cins;Cus.CusNo=QString::fromStdStrings;//检查身份证号码是否合法qDebug请输入您的密码;cins;Cus.CusPassword=QString::fromStdStrings;qDebug请输入您的姓名;cins;Cus.CusName=QString::fromStdStrings;qDebug请输入您的性别;cins;Cus.CusSex=QString::fromStdStrings;qDebug请输入您的11位手机号;cins;Cus.CusPhone=QString::fromStdStrings;qDebug请输入您的单位名称此项可不填按回车结束输入;getlinecins;getlinecins;Cus.CusCompany=QString::fromStdStrings;ifCus.CusNo.size!=18||Cus.CusPhone.size!=11{systemcls;qDebug您输入的身份证号或手机号有误!;qDebug请重新注册!;systempause;return0;}ifsql_insert_CustomerCus{systemcls;qDebug注册成功!;systempause;}else{systemcls;qDebug注册失败!;qDebug该身份证号或手机号已存在!;systempause;}return0;}intmenu_Customer{while1{systemcls;qDebug\t\t\t----------------------------\n;qDebug\t\t\t-------汽车租赁管理系统-----\n;qDebug\t\t\t----------------------------\n;qDebug\n\n\n;qDebug\t\t\t1汽车查询;qDebug\t\t\t2我的资料;qDebug\t\t\t3我的租赁记录;qDebug\t\t\t0退出;switchgetch{case1:menu_findCar;break;case2:menu_findUser;break;case3:menu_findUserRecord;break;case0:systemcls;return0;}}return0;}intmenu_Worker{while1{systemcls;qDebug\t\t\t----------------------------\n;qDebug\t\t\t-------汽车租赁管理系统-----\n;qDebug\t\t\t----------------------------\n;qDebug\n\n\n;qDebug\t\t\t1汽车查询;qDebug\t\t\t2用户资料查询;qDebug\t\t\t3用户租赁记录查询;qDebug\t\t\t4还车登记;qDebug\t\t\t5统计某一年龄最喜爱的品牌;qDebug\t\t\t0退出;switchgetch{case1:menu_findCar;break;case2:menu_findUser;break;case3:menu_findUserRecord;break;case4:menu_returnCar;break;case5:menu_findUserFavorite;break;case0:systemcls;return0;}}return0;}intmenu_findCar{systemcls;sql_display_allBrand;ifid.size==18{//客户qDebug您是否需要租车?Y/N;while2{intop=getch;ifop==y||op==Y{menu_rentCar;break;}ifop==n||op==Nbreak;}}else{//工作人员qDebug请输入要查询类别的分类号;strings;cins;QStringCarClassNo=QString::fromStdStrings;ifsql_display_CarCarClassNo{systempause;}else{systemcls;qDebug该分类号不存在!;systempause;}}return0;}intmenu_findUser{systemcls;ifid.size==5{//工作人员strings;qDebug请输入用户的身份证号码;cins;QStringCusNo=QString::fromStdStrings;ifsql_display_CustomerCusNo{systempause;}else{systemcls;qDebug该身份证号码不存在;systempause;}}else{//客户sql_display_Customerid;systempause;}return0;}intmenu_findUserRecord{systemcls;ifid.size==5{//工作人员strings;qDebug请输入用户的身份证号码;cins;QStringCusNo=QString::fromStdStrings;ifsql_display_CustomerRecordCusNo{systempause;}else{systemcls;qDebug该身份证号码不存在!;systempause;}}else{//客户sql_display_CustomerRecordid;systempause;}return0;}intmenu_findUserFavorite{systemcls;qDebug请输入要查询的年龄;intCusAge;cinCusAge;ifsql_display_CustomerFavoriteCusAge{systempause;}else{systemcls;qDebug该年龄不存在消费记录,无法统计!;systempause;}}intmenu_rentCar{qDebug请输入您要租赁的类别的分类号;strings;cins;QStringCarClassNo=QString::fromStdStrings;//sql_display_Carts;QStringRecordNo=sql_rent_CarCarClassNo;QStringCarNo=sql_find_CarNoRecordNo;qDebug您的订单号为:RecordNo.toStdString.c_str;qDebug您成功租到车牌号为:CarNo.toStdString.c_str的车辆!;systempause;}intmenu_returnCar{systemcls;strings;qDebug请输入订单号;cins;QStringRecordNo=QString::fromStdStrings;doublepay=sql_return_CarRecordNo;ifpay!=
0.0{qDebug还车成功!;qDebug您此次租车共花费pay元!;qDebug感谢您的支持!;}else{qDebug您输入的订单号有误!;}systempause;}
9.
2.5usersql.cpp#includeQSqlDatabase#includeQStringList#includeQDebug#includeQtSql#includeQSqlQuery#includeQTextCodec#includeiostream#includestring#includewindows.h#includeusesql.husingstd::string;usingstd::cout;externQStringid;QSqlDatabasedb;QStringdsn;boolsql_connect{db=QSqlDatabase::addDatabaseQODBC;dsn=QString::fromLocal8BitQTDSN;db.setHostName
127.
0.
0.1;db.setDatabaseNamedsn;db.setUserNamesa;db.setPassword123456;if!db.open{//qDebugdb.lastError.text;returnfalse;}elseqDebugdatabaseopensuccess!;returntrue;}boolsql_find_Customerstringidstringpassword{QSqlQueryquerydb;query.prepareselect*fromTable_CustomerwhereCusNo=;query.addBindValueid.c_str;query.exec;ifquery.next{strings=query.value
1.toString.toStdString;//删除末尾多余的空格whiles[s.size-1]=={s.erase--s.end;}ifs==password{returntrue;}}returnfalse;}boolsql_find_Workerstringidstringpassword{QSqlQueryquerydb;query.prepareselect*fromTable_WorkerwhereWorkNo=;query.addBindValueid.c_str;query.exec;ifquery.next{strings=query.value
1.toString.toStdString;//删除末尾多余的空格whiles[s.size-1]=={s.erase--s.end;}ifs==password{returntrue;}}returnfalse;}boolsql_insert_CustomerCustomerCus{QSqlQueryquerydb;ints;query.prepareQStringLiteralexec=proc_insert_Customer;query.bindValue01QSql::Out;query.bindValue1Cus.CusNo;query.bindValue2Cus.CusPassword;query.bindValue3Cus.CusName;query.bindValue4Cus.CusSex;query.bindValue5Cus.CusPhone;query.bindValue6Cus.CusCompany;query.exec;s=query.boundValue
0.toInt;returns;}boolsql_display_allBrand{QSqlQueryquerydb;query.prepareexec=proc_find_AllCarClass;query.addBindValue1QSql::Out;query.exec;ints=query.boundValue
0.toInt;qDebug分类号\t品牌\t\t座位数\t日租价格\t月租价格;whilequery.next{qDebugquery.value
0.toString.toStdString.c_strquery.value
1.toString.toStdString.c_str\tquery.value
2.toInt\t\tquery.value
4.toDouble\t\tquery.value
5.toDouble;}returns;}boolsql_display_CarQStringCarClassNo{QSqlQueryquerydb;query.prepareexec=proc_find_Cars;query.addBindValue1QSql::Out;query.addBindValueCarClassNo;query.exec;ints=query.boundValue
0.toInt;qDebug车牌\t购入日期颜色;whilequery.next{qDebugquery.value
0.toString.toStdString.c_strquery.value
3.toString.toStdString.substr
010.c_strquery.value
4.toString.toStdString.c_str;}returns;}boolsql_display_CustomerFavoriteintCusAge{QSqlQueryquerydb;query.prepareexec=proc_find_CustomerFavorite;query.addBindValue1QSql::Out;query.addBindValueCusAge;query.exec;ints=query.boundValue
0.toInt;qDebug分类号\t品牌\t\t座位数\t日租价格\t月租价格;whilequery.next{qDebugquery.value
0.toStringquery.value
1.toString\tquery.value
2.toInt\t\tquery.value
4.toDouble\t\tquery.value
5.toDouble;}returns;}boolsql_display_CustomerQStringCusNo{QSqlQueryquerydb;query.prepareexec=proc_find_Customer;query.addBindValue1QSql::Out;query.addBindValueCusNo;query.exec;ints=query.boundValue
0.toInt;whilequery.next{qDebug身份证号query.value
0.toString.toStdString.c_str;qDebug姓名query.value
2.toString.toStdString.c_str;qDebug性别query.value
3.toString.toStdString.c_str;qDebug电话query.value
4.toString.toStdString.c_str;qDebug单位query.value
5.toString.toStdString.c_str;}returns;}boolsql_display_CustomerRecordQStringCusNo{QSqlQueryquerydb;query.prepareexec=proc_find_CustomerRecord;query.addBindValue1QSql::Out;query.addBindValueCusNo;query.exec;ints=query.boundValue
0.toInt;qDebug订单号\t车牌号身份证号\t租车时间还车时间花费;whilequery.next{qDebugquery.value
0.toString.toStdString.c_strquery.value
1.toString.toStdString.c_strquery.value
2.toString.toStdString.c_strquery.value
3.toString.toStdString.substr
010.c_strquery.value
4.toString.toStdString.substr
010.c_strquery.value
5.toDouble;}returns;}QStringsql_rent_CarQStringCarClassNo{QSqlQueryquerydb;query.prepareselect*fromTable_CarwhereCarClassNo=andCarSta=1;query.addBindValueCarClassNo;query.exec;ifquery.next{QStringCarNo=query.value
0.toString;//更新车辆状态//query.prepareupdateTable_CarsetCarSta=0whereCarNo=;//query.addBindValueCarNo;//query.exec;//添加租赁记录QStringRecordNo;query.prepareexecproc_insert_Recordoutput;query.bindValue0CarNo;query.bindValue1id;query.bindValue2D20150622000000000QSql::Out;//一定要和数据库的的类型相同我这里数据库是char18,那么就要指定18位字符串才能读出来query.exec;RecordNo=query.boundValue
2.toString;returnRecordNo;}else{qDebugError;returnQString;}}doublesql_return_CarQStringRecordNo{QSqlQueryquerydb;QStringCarNo=sql_find_CarNoRecordNo;//更新车辆状态query.prepareupdateTable_CarsetCarSta=1whereCarNo=;query.addBindValueCarNo;query.exec;//更新还车日期query.prepareupdateTable_RecordsetRecordReturnDate=getdatewhereRecordNo=;query.addBindValueRecordNo;query.exec;query.prepareselectRecordCostfromTable_RecordwhereRecordNo=;query.addBindValueRecordNo;query.exec;ifquery.next{returnquery.value
0.toDouble;}else{qDebugError;return
0.0;}}QStringsql_find_CarNoQStringRecordNo{QSqlQueryquerydb;query.prepareselectCarNofromTable_RecordwhereRecordNo=;query.addBindValueRecordNo;query.exec;ifquery.next{returnquery.value
0.toString;}else{qDebugError;returnQString;}}。