车辆租赁管理系统————————————————————————————————作者:————————————————————————————————日期:网络数据库课程设计车辆租赁管理班级:网络07-2班学号:310709040212姓名:李建杰前言近年来,计算机技术日趋成熟,数据库技术不断发展,管理信息系统的应用已延伸到社会的各个领域。
结合管理信息系统的开发方法及步骤,以此为理论基础,开发出一个小型的信息管理系统——车辆租赁管理系统。
车辆租赁管理是汽车租赁公司开展日常运营活动的必须的环节。
传统的手工管理方式不但浪费人力、时间,而且管理复杂,易出差错。
基于计算机技术的完备的车辆租赁管理系统把一些繁琐的数据计算、信息处理化为简单的指令操作。
完全实现数据信息的电算化管理,彻底把人从手工管理中解放出来。
经过艰苦的努力,我终于实现了预期的设计目标,开发出这套具有一定实用价值的车辆租赁管理系统,使用这套系统有利于提高汽车辆租赁公司的劳动生产率,节约生产成本,增加经济效益。
信息管理系统的服务性系统,能满足保险业务的需求、客户群的拓展和管理模式的变化。
系统开发具有超前意识,强调系统的标准化、系列化,模块化设计,有明确的功能模块结构和技术支持模块结构,便于系统维护、修改和升级,跟随先进技术的发展。
工程信息管理的自动化、规范化是当今社会的发展趋势。
信息录入项目齐全、完整、系统,这些无疑是现代工程信息管理系统的要求。
现代化的工程信息管理系统中灵活使用了表格对档案分门别类,组成工程信息管理系统,可以方便地查询、阅读、修改、交流和重复使用。
目录1.需求分析: (4)2.概念设计 (5)3.逻辑设计 (9)4.物理设计 (11)5.数据库的实现 (11)6.设计心得 (20)7. 参考文献……………………………………………………20.车辆租赁管理1.需求分析1.1车辆租赁管理涉及到的数据有:租赁合同数据部门数据职工数据用户数据车辆数据车辆故障数据1.2车辆租赁管理的处理需求有:查询所有可租车辆和已租车辆信息查询租赁合同信息查询车辆的故障情况计算租车费用1.3业务流程图职工用户信息2.概念设计2.1局部视图设计(1)确定局部视图的设计范围该应用涉及到车辆租用、故障检修、租用费用计算等。
(2)确定实体及实体的主键车辆租赁管理涉及到的实体有:租赁合同,存放所有租用车辆的租赁合同。
主键:租赁合同编号职工,存放公司所有职工信息。
主键:职工编号部门,存放公司所有部门信息。
主键:部门编号用户,存放所有租用车辆的信息。
主键:用户编号车辆,存放所有可租用车辆信息。
主键:车辆编号车辆故障,存放所有车辆损坏信息。
主键:车辆编号+检查日期(3)定义实体间的联系一个部门有多名职工,每个职工只属于一个部门。
则部门实体与职工实体之间是一对多联系。
部门职工有(1:N)(1:1)部 门职 工部门编号[PK]职工编号[PK]1..*1..1有职工编号部门编号一个部门有多辆车可出租,而每辆车只属于一个部门拥有。
则部门实体与车辆实体之间是一对多联系。
一辆车可能有多次故障,而每个故障只对应一辆车。
则车辆实体与车辆故障实体之间是一对多联系。
一辆车可多次出租,而一份租赁合同只能租用一辆车。
则车辆实体和租赁合同实体之间是一对多联系。
每个用户可通过签订多次租赁合同租用多次车辆,而每份租赁合同只对应一个用户。
则用户实体与租赁合同之间是一对多联系。
部门车辆出租(1:N)(1:1)部 门车 辆部门编号[PK]车辆编号[PK]1..*1..1出租车辆编号部门编号故障车辆有故障(1:N)(1:1)故 障车 辆车辆编号[PK]检查日期[PK]车辆编号[PK]1..*1..1有故障车辆编号车辆编号检查日期租赁合同车辆租用(1:N)(1:1)租赁合同车 辆租赁编号[PK]车辆编号[PK]1..* 1..1租用车辆编号租赁编号一个部门有多名职工,其中有一个经理可以管理部门中的其他职工。
经理和普通职工之间的管理与被管理是一种自联系,而且是一对多的。
一个职工可以排除多个车辆故障,而每个车辆故障有一个职工进行排除排除,则职工实体与故障实体之间是一对多联系。
(4)给实体及联系加上描述属性租赁合同实体的描述属性有:租赁合同编号,借用日期,借用时间,还车日期,还车时间,用车前公用户租赁合同签订(1:N)(1:1)租赁合同用 户租赁编号[PK]用户编号[PK] 1..*1..1签订租赁编号用户编号职工(1:N)(1:1)职 工职工编号[PK]0..10..*职工编号管理管理者被管理者管理被管理管理故障职工排除(0:N)(1:1)故 障职 工车辆编号[PK]检查日期[PK]车辆编号[PK]0..*1..1排除车辆编号车辆编号检查日期里数,用车后公里数,保险编号,保险费,用户编号,车辆编号。
职工实体的描述属性有:职工编号,姓名,性别,地址,办公电话,住宅电话,Email,职位,部门编号。
部门实体的描述属性有:部门编号,部门名称,部门地址,部门电话,部门传真号,经理职工编号。
用户实体的描述属性有:用户编号,用户名称,用户地址,邮编,用户电话,用户传真号,Email。
车辆实体的描述属性有:车辆编号,制造商,车型,颜色,出租费用,部门编号,租出标志。
车辆故障实体的描述属性有:车辆编号,检查日期,检查时间,检查结果,职工编号。
系统E—R图:3.逻辑设计3.1租赁合同(租赁合同编号,借用日期,借用时间,还车日期,还车时间,用车前公里数,用车后公里数,保险金,用户编号,车辆编号)主键:租赁合同编号。
外键:用户编号,引用了用户关系中的用户编号;车辆编号,引用了车辆关系中的车辆编号。
函数依赖集F:租赁合同编号 {借用日期,借用时间,还车日期,还车时间,用车前公里数,用车后公里数,保险金,用户编号,车辆编号}关系中不存在非主属性与候选键之间的部分与传递函数依赖,所以租赁合同关系满足第3范式。
3.2部门(部门编号,部门名称,部门地址,部门电话,部门传真号,经理职工编号)主键:部门编号。
候补键:部门电话;部门传真号;经理职工编号。
外键:经理职工编号,引用了职工关系中的职工编号。
函数依赖集F:部门编号→{部门名称,部门地址,部门电话,部门传真号,经理职工编号},部门电话→{部门编号,部门名称,部门地址,部门传真号,经理职工编号},部门传真号→{部门编号,部门名称,部门地址,部门电话,经理职工编号}。
经理职工编号→{部门编号,部门名称,部门地址,部门电话,部门传真号} 由于部门名称→部门地址,故部门编号→部门地址是传递函数依赖。
关系中存在非主属性与候选键之间的传递函数依赖,所以部门关系是第2范式。
3.3职工(职工编号,姓名,性别,地址,办公电话,住宅电话,Email,职位,部门编号)主键:职工编号。
候补键:Email。
外键:部门编号,引用了部门关系中的部门编号。
函数依赖集F:职工编号→{姓名,性别,地址,办公电话,住宅电话,Email,职位,部门编号},Email→{职工编号,姓名,性别,地址,办公电话,住宅电话,职位,部门编号}。
关系中不存在非主属性与候选键之间的部分与传递函数依赖,所以职工关系满足第3范式。
3.4用户(用户编号,用户名称,地址,邮编,用户电话,用户传真号,Email)主键:用户编号。
候补键:用户电话;用户传真号;Email。
函数依赖集F:用户编号→{用户名称,地址,邮编,用户电话,用户传真号,Email},用户电话→{用户编号,用户名称,地址,邮编,用户传真号,Email},用户传真号→{用户编号,用户名称,地址,邮编,用户电话,Email} Email→{用户编号,用户名称,地址,邮编,用户电话,用户传真号} 关系中不存在非主属性与候选键之间的部分与传递函数依赖,所以用户关系是第3范式。
3.5.车辆(车辆编号,制造商,车型,颜色,出租费用,部门编号,租出标志)主键:车辆编号。
外键:部门编号,引用了部门关系中的部门编号。
函数依赖集F:车辆编号→{制造商,车型,颜色,出租费用,部门编号}。
关系中不存在非主属性与候选键之间的部分与传递函数依赖,所以车辆关系是第3范式。
3.6车辆故障(车辆编号,检查日期,检查时间,检查结果,职工编号)主键:车辆编号+检查日期。
外键:车辆编号,引用了车辆关系中的车辆编号;职工编号,引用了职工实体中的职工编号。
虽然部门实体是第2范式,但是,部门实体主要提供查询,几乎很少有增、删、改操作,故部门关系的异常操作可以忽略。
故车辆租赁管理的数据库设计是合理的。
4.物理设计租赁合同(租赁合同编号,借用日期,借用时间,还车日期,还车时间,用车前公里数,用车后公里数,保险金,用户编号,车辆编号)部门(部门编号,部门名称,部门地址,部门电话,部门传真号,经理职工编号)职工(职工编号,姓名,性别,地址,办公电话,住宅电话,Email,职位,部门编号)用户(用户编号,用户名称,地址,邮编,用户电话,用户传真号,Email)车辆(车辆编号,制造商,车型,颜色,出租费用,部门编号,租出标志)车辆故障(车辆编号,检查日期,检查时间,检查结果,职工编号)5.数据库的实现5.1数据库子模块Systemuser添加车辆信息出租车辆删除车辆信息还车分类统计查看车辆信息查看租车信息<<include>><<include>>5.2源代码VERSION 1.0 CLASS BEGINPublic CarNo As String Public TypeId As Long Public CarName As String Public Color As String Public OilNo As StringPublic EngineNo As String Public CarCase As String Public SaleId As Integer Public BuyDate As String Public InsurNo As String Public InsurId As Long Public InsurType As String Public InsurSdate As String Public InsurEdate As String Public Deposit As Long Public DayPrice As Long Public WeekEndPrice As Long Public WeekPrice As Long Public MonthPrice As Long Public DayKM As Long Public OverTimePrice As Long Public OverKMPrice As Long Public Status As StringPublic Comment As String Public Sub Init()CarNo = ""TypeId = 0CarName = ""Color = ""OilNo = ""EngineNo = ""CarCase = ""SaleId = 0BuyDate = ""InsurNo = ""InsurId = 0InsurType = "" InsurSdate = "" InsurEdate = ""Deposit = 0DayPrice = 0 WeekEndPrice = 0 WeekPrice = 0 MonthPrice = 0DayKM = 0 OverTimePrice = 0 OverKMPrice = 0Status = "待命"Comment = ""End Sub'删除Cars数据Public Sub Delete(ByVal TmpCarNo As String)SqlStmt = "Delete FROM Cars WHERE CarNo='" + Trim(TmpCarNo) + "'" SQLExt (SqlStmt)End SubPublic Function GetInfo(ByVal TmpCarNo As String) As BooleanDim rs As New ADODB.RecordsetSqlStmt = "SELECT * FROM Cars WHERE CarNo='" + Trim(TmpCarNo) + "'" Set rs = QueryExt(SqlStmt)If rs.EOF = True ThenGetInfo = FalseExit FunctionElseIf IsNull(rs.Fields(0)) ThenCarNo = ""ElseCarNo = rs.Fields(0)End IfIf IsNull(rs.Fields(1)) ThenTypeId = 0ElseTypeId = rs.Fields(1)End IfIf IsNull(rs.Fields(2)) ThenCarName = ""ElseCarName = rs.Fields(2)End IfIf IsNull(rs.Fields(3)) ThenColor = ""ElseColor = rs.Fields(3)End IfIf IsNull(rs.Fields(4)) ThenOilNo = ""ElseOilNo = rs.Fields(4)End IfIf IsNull(rs.Fields(5)) ThenEngineNo = ""ElseEngineNo = rs.Fields(5) End IfIf IsNull(rs.Fields(6)) Then CarCase = ""ElseCarCase = rs.Fields(6) End IfIf IsNull(rs.Fields(7)) Then SaleId = 0ElseSaleId = rs.Fields(7)End IfIf IsNull(rs.Fields(8)) Then BuyDate = ""ElseBuyDate = rs.Fields(8) End IfIf IsNull(rs.Fields(9)) Then InsurNo = ""ElseInsurNo = rs.Fields(9) End IfIf IsNull(rs.Fields(10)) Then InsurId = 0ElseInsurId = rs.Fields(10) End IfIf IsNull(rs.Fields(11)) Then InsurType = ""ElseInsurType = rs.Fields(11) End IfIf IsNull(rs.Fields(12)) Then InsurSdate = ""ElseInsurSdate = rs.Fields(12) End IfIf IsNull(rs.Fields(13)) Then InsurEdate = ""ElseInsurEdate = rs.Fields(13) End IfIf IsNull(rs.Fields(14)) Then Deposit = 0ElseDeposit = rs.Fields(14)End IfIf IsNull(rs.Fields(15)) Then DayPrice = 0ElseDayPrice = rs.Fields(15)End IfIf IsNull(rs.Fields(16)) Then WeekEndPrice = 0ElseWeekEndPrice = rs.Fields(16) End IfIf IsNull(rs.Fields(17)) Then WeekPrice = 0ElseWeekPrice = rs.Fields(17) End IfIf IsNull(rs.Fields(18)) Then MonthPrice = 0ElseMonthPrice = rs.Fields(18) End IfIf IsNull(rs.Fields(19)) Then DayKM = 0ElseDayKM = rs.Fields(19)End IfIf IsNull(rs.Fields(20)) Then OverTimePrice = 0ElseOverTimePrice = rs.Fields(20) End IfIf IsNull(rs.Fields(21)) Then OverKMPrice = 0ElseOverKMPrice = rs.Fields(21) End IfIf IsNull(rs.Fields(22)) Then Status = ""ElseStatus = rs.Fields(22)End IfIf IsNull(rs.Fields(23)) ThenComment = ""ElseComment = rs.Fields(23)End IfEnd IfGetInfo = TrueEnd Function'判断是否已经存在此车牌号码Public Function In_DB(ByVal TmpCarNo As String) As BooleanDim rs As New ADODB.RecordsetSqlStmt = "SELECT * FROM Cars WHERE CarNo='" + Trim(TmpCarNo) + "'" Set rs = QueryExt(SqlStmt)If Not rs.EOF ThenIn_DB = TrueElseIn_DB = FalseEnd IfEnd FunctionPublic Sub Insert()'设置INSERT语句SqlStmt = "INSERT INTO Cars(CarNo,TypeId, CarName,Color,OilNo,EngineNo,CarCase," & _"SaleId,BuyDate,InsurNo,InsurId,InsurType,InsurSdate,InsurEdate,Deposit," & _"DayPrice,WeekEndPrice,WeekPrice,MonthPrice,DayKM,OverTimePrice,OverKMPr ice," & _"Status,Comment)" & _" Values('" + Trim(CarNo) + "'," + Trim(TypeId) + ",'" + Trim(CarName) + "','" & _Trim(Color) + "','" + Trim(OilNo) + "','" + Trim(EngineNo) + "','" & _Trim(CarCase) + "'," + Trim(SaleId) + ",'" + Trim(BuyDate) + "','" & _Trim(InsurNo) + "'," + Trim(InsurId) + ",'" + Trim(InsurType) + "','" & _Trim(InsurSdate) + "','" + Trim(InsurEdate) + "'," + Trim(Deposit) + "," & _Trim(DayPrice) + "," + Trim(WeekEndPrice) + "," + Trim(WeekPrice) + "," & _ Trim(MonthPrice) + "," & _Trim(DayKM) + "," + Trim(OverTimePrice) + "," + Trim(OverKMPrice) + ",'" & _Trim(Status) + "','" + Trim(Comment) + "')"'执行SQL语句SQLExt (SqlStmt)End SubPublic Sub Update(ByVal TmpCarNo As String)'设置UPDATE语句SqlStmt = "Update Cars Set TypeId=" + Trim(TypeId) _+ ", CarName='" + Trim(CarName) + "',Color='" + Trim(Color) _+ "',OilNo='" + Trim(OilNo) + "',EngineNo='" + Trim(EngineNo) _+ "',CarCase='" + Trim(CarCase) + "',SaleId=" + Trim(SaleId) _+ "SaleId=" + Trim(SaleId) + ",BuyDate='" + Trim(BuyDate) + "'," _+ "InsurNo='" + Trim(InsurNo) + "',InsurId=" + Trim(InsurId) + "," _+ "InsurType='" + Trim(InsurType) + "',InsurSdate='" + Trim(InsurSdate) + "'," _+ "InsurEdate='" + Trim(InsurEdate) + "',Deposit=" + Trim(desposit) + "," _+ "DayPrice=" + Trim(DayPrice) + ",WeekEndPrice=" + Trim(WeekEndPrice) + "," _+ "WeekPrice=" + Trim(WeekPrice) + "," _+ "MonthPrice=" + Trim(MonthPrice) + ",DayKM=" + Trim(DayKM) + "," _+ "OverTimePrice=" + Trim(OverTimePrice) + ",OverKMPrice=" + Trim(OverKMPrice) + "," _+ "Status='" + Trim(Status) + "',Comment='" + Trim(Comment) _+ "' WHERE CarNo='" + Trim(TmpCarNo) + "'"'执行SQL语句SQLExt (SqlStmt)End Sub'更改车辆状态Public Sub UpdateStatus(ByVal TmpCarNo As String, ByVal TmpStatus As String) '设置UPDATE语句SqlStmt = "Update Cars Set Status='" + Trim(TmpStatus) _+ "' WHERE CarNo='" + Trim(TmpCarNo) + "'"'执行SQL语句SQLExt (SqlStmt)End Sub5.3运行界面登陆界面:子模块中信息编辑和管理:用户管理界面:汽车模块:6.设计心得经过反复测试,系统完成后运行添加、修改、查询、报表等功能均正常。