
1问题描述
1.1需求描述
随着汽车工业的发展和汽车的普及,汽车租赁成为近年来兴起的一个新行业。使用汽车租赁管理系统可以规范企业的管理和经营行为,减少企业的经营成本,提高工作效率。
针对以上的要求,汽车租赁管理系统的用户是汽车租赁企业的管理人员,其需求功能应包括汽车类型管理、会员类型管理、保险类型管理、销售商管理、保险公司管理、客户信息管理、会员信息管理和汽车租赁、续租、归还管理等主要功能,从而可以形成统一有效的管理。
在该系统中,要实现对汽车类型信息、会员类型信息和保险类型信息等基本信息的添加、修改、删除、和查询;销售商信息的添加、修改、删除和查询;保险公司信息的添加、修改、删除和查询;客户信息和会员信息的添加、修改、删除和查询以及汽车租赁、续租、归还等具体操作的实现。以满足当前该行业在处理业务上的需求。
1.2运行环境描述
本系统采用的是C/S体系结构风格,对系统中信息的查询、修改、删除和添加等操作都是对数据库的操作,在数据库服务器上实现的,而在本系统中运行的界面只是客户应用程序,负责提供管理人员与数据库交互的界面,向数据库服务器提交用户请求并接受来自数据库服务器的消息。而数据库服务器也就是后台程序,主要是负责有效的管理系统的数据库资源,对客户应用程序传来的信息加以处理,对数据库内的信息进行操作。
系统开发采用Rational Rose进行统一建模,编程语言是Microsoft Visual Basic ,数据库设计采用的是Microsoft Access 2000,在Windows Xp操作系统下测试并运行。
1.3系统性能描述
Microsoft Visual Basic与其他开发工具相比,具有简单易学、灵活方便和易于扩充等特点,越来越多地被用做客户/服务器应用程序的前端开发工具,与后台的Microsoft Access 2000数据库相结合,能够提供高性能的管理信息系统解决方案。
2 用例模型及分析类图的描述
2.1用例模型描述
本系统中,以汽车租赁为实现功能,其他的功能都是为了服务于该主要功能,从而便于管理。系统的用例图如图2-1所示。
图2-1 汽车租赁系统用例图
通过对系统进行需求分析,得到系统的用例图,从而知道了系统要实现的基本功能。客户通过管理人员对系统进行操作,通过建立用例图得知系统的体系结构。本系统采用3层结构设计,即程序逻辑结构分为用户界面层、业务逻辑处理层和数据存储层。系统中将用户、汽车管理等都封装成相应的类,同时每个类都有自己对应的操作类,从而再次提高了对数据库操作的安全性和程序的可扩展性。
在系统中,只有管理人员才有权限使用本系统,才能对数据库进行操作。
(1)管理人员对基本信息的管理,包括对汽车类型信息的增加、删除、修改和查询; 对会员类型信息的增加、删除、修改和查询;保险类型信息的增加、删除、修改和查询;销售商信息的增加、删除、修改和查询;保险公司信息的增加、删除、修改和查询。所以,有基本信息管理用例,还包括汽车类型管理用例、会员类型管理用例、保险类型管理用例、销售商管理用例和保险公司管理用例。
(2)管理人员对客户会员的管理,主要是会员类型的修改和查询,客户信息的增加、删除、修改和查询。所以,有客户会员管理用例和客户信息管理用例。
(3)管理人员对租赁业务的管理,包括汽车类型信息的增加、删除、修改和查询;汽车租赁信息的增加、删除、修改和查询;汽车续租信息的增加、删除、修改和查询;汽车归还信息的增加、删除、修改和查询;所以,有租赁业务用例、汽车租赁管理用例、汽车续租管理用例、汽车归还管理用例。
(4)管理人员对系统用户的管理,包括系统用户的增加、删除、修改和查询和密码的修改;所以有系统用户管理用例和密码修改用例。
分析系统的使用对象和用户需求,设计系统的体系结构。系统的功能模块如图2-2所示。
图2-2 汽车租赁管理系统功能模块示意图
2.2分析类图描述
在系统中,应该包括“基本类型信息”类,“会员类型信息”类,“公司信息”类,“客户信息”类,“汽车信息”类,“汽车租赁信息”类,“管理员信息”类。如图2-3即为汽车租赁管理系统类图。
图2-3汽车租赁管理系统类图
系统管理员是“Users”类的子类,它与客户是多对应一的关系,客户通过系统管理员办理业务,而使用本系统;客户与租赁是一对应多的关系,一个客户可以租赁多辆汽车,而汽车与租赁是一一对应的;每个客户可以有会员类型也可以没有,所以是一对应多的关系;每辆汽车都有其销售商,而销售商可以销售多辆汽车,所以汽车和销售商是多对一的关系;同样每辆汽车都有其对应的保险类型,所以与保险类型是多对一的关系。
3 详细设计描述
3.1核心时序图描述
3.1.1汽车信息管理时序图
图3-1汽车信息管理时序图
3.1.2修改密码时序图
图3-2修改密码时序图
3.1.3汽车租赁管理时序图
图3-3汽车租赁管理时序图
3.1.4汽车续租管理时序图
图3-4汽车续租时序图
3.1.5汽车归还时序图
图3-5汽车归还时序图
3.2状态图描述
3.2.1汽车信息管理状态图
图3-6汽车信息管理状态图
3.2.2修改密码状态图
图3-7修改密码状态图
3.2.3汽车租赁管理状态图
图3-8汽车租赁管理状态图
3.2.4汽车续租管理状态图
图3-9汽车续租管理状态图
3.2.5汽车归还管理状态图
图3-10汽车归还管理状态图
3.3组件图描述
图3-11组件图
4 编程设计描述
4.1信息代码设计和数据库设计
用户的需求具体体现在各种信息的提供、保存、更新和查询上,这就要求数据库结构能充分满足各种信息的输出和输入。收集基本数据、数据结构以及处理数据的流程,组成一份详尽的数据字典,为以后的具体设计打下基础。
经过上述系统功能分析和需求总结,考虑到将来功能上的扩展,设计如下面所示的数据项和数据结构:
(1)用户信息,包括数据项:用户名、密码。
(2)类型信息,包括数据项:类型ID、类型名称、描述等。
(3)会员类型,包括数据项:会员ID、会员类型、享受折扣等。
(4)公司信息,包括数据项:公司名称、联系电话、电子邮件、地址等。
(5)客户信息,包括数据项:客户ID、姓名、驾驶证号、驾龄等。
(6)汽车信息,包括数据项:车牌号、购买日期、押金、日租金等。
(7)汽车租赁信息,包括数据项:合同ID、车牌号、客户ID、租赁时间等。
数据库中包含了7个表,即基本类型表Types、会员类型表MemberType、公司信息表Company、客户信息表Customer、汽车信息表Cars、汽车租赁表Lease和用户信息表Users。表4-1表Types的结构
| 编号 | 字段名称 | 数据类型 | 说明 |
| 1 | Id | int | 类型编号,主键,自动增1 |
| 2 | TypeName | Varchar 50 | 类型名称 |
| 3 | TypeId | Tinyint | 类型分类,1-汽车类型,2-保险类型 |
| 4 | Description | Varchar 100 | 类型描述 |
| 编号 | 字段名称 | 数据类型 | 说明 |
| 1 | Id | Int | 类型编号,主键,自动增1 |
| 2 | TypeName | Varchar 50 | 类型名称 |
| 3 | Rate | Float | 享受的折扣 |
| 编号 | 字段名称 | 数据类型 | 说明 |
| 1 | Id | Int | 公司编号,主键,自动增1 |
| 2 | Company | Varchar 100 | 公司名称 |
| 3 | Telephone | Varchar 50 | 联系电话 |
| 4 | Address | Varchar 50 | 地址 |
| 5 | Emain | Varchar 50 | 电子邮件 |
| 6 | Contact | Varchar 50 | 联系人 |
| 7 | TypeId | Tinyint | 公司类型,1-销售商,2-保险公司 |
| 8 | Comment | Varchar 200 | 说明 |
| 编号 | 字段名称 | 数据类型 | 说明 |
| 1 | Id | Varchar 20 | 客户编号,主键 |
| 2 | Name | Varchar 50 | 姓名 |
| 3 | Sex | Char 2 | 性别 |
| 4 | Age | Tingint | 年龄 |
| 5 | IdCard | Varchar 30 | 身份证号 |
| 6 | Telephone | Varchar 30 | 电话 |
| 7 | Workorg | Varchar 50 | 工作地点 |
| 8 | Address | Varchar 50 | 家庭地址 |
| 9 | ZipCode | Varchar 10 | 邮政编码 |
| 10 | Enail | Varchar 30 | 电子邮件 |
| 11 | LicenseNo | Varchar 30 | 驾驶证号 |
| 12 | LicenseType | Varchar 20 | 驾驶证类型 |
| 13 | GetDate | Varchar 20 | 发证日期 |
| 14 | ExpiredDate | Varchar 20 | 到期日期 |
| 15 | DriverAge | Tinyint | 驾龄 |
| 16 | Flag | Tingint | 会员标记(0-非会员,2-会员) |
| 17 | TypeId | Int | 会员类型 |
| 18 | Certificate | Varchar 40 | 抵押证件 |
| 19 | Warrantor | Varchar 50 | 担保人 |
| 20 | WidCard | Varachar 30 | 担保人身份证号 |
| 编号 | 字段名称 | 数据类型 | 说明 |
| 1 | CarNo | Varchar 20 | 车牌号,主键 |
| 2 | TypeId | Int | 汽车类型 |
| 3 | CarName | Varchar 50 | 汽车名称 |
| 4 | Color | Varchar 20 | 汽车颜色 |
| 5 | EngineNo | Varchar 50 | 发动机号 |
| 6 | CarCase | Varchar 50 | 车架号 |
| 7 | SaleId | Int | 销售商编号 |
| 8 | BuyDate | Datetime | 购买日期 |
| 9 | InsurNo | Varchar 50 | 保单号 |
| 10 | InsurId | Int | 保险公司编号 |
| 11 | InsurType | Varchar 50 | 保险种类 |
| 12 | InsurSate | Datetime | 起保日期 |
| 13 | InsurEdate | Datetime | 结束日期 |
| 14 | Deposit | Int | 押金 |
| 15 | DayPrice | Int | 日租金 |
| 16 | WeekPrice | Int | 周租金 |
| 17 | MonthPrice | Int | 月租金 |
| 18 | WeekEndPrice | Int | 周末租金 |
| 19 | DayPM | Int | 日限公里数 |
| 20 | OverTimePrice | Int | 超时租金 |
| 21 | OverKMPrice | Int | 超公里租金 |
| 22 | Status | Char 10 | 状态 |
| 23 | Comment | Varchar 200 | 备注 |
| 编号 | 字段名称 | 数据类型 | 说明 |
| 1 | ContractNo | Varchar 50 | 合同编号,主键 |
| 2 | CarNo | Varchar 20 | 车牌号 |
| 3 | CustId | Varchar 20 | 客户编号 |
| 4 | LeaseTime | Datetime | 租赁时间 |
| 5 | LeaseMode | Char 10 | 租赁模式(分为按日、周和月) |
| 6 | Price1 | Int | 租赁价格 |
| 7 | Price2 | Int | 按日租赁时的周末租赁价格 |
| 8 | WorkDays | Int | 租赁工作日、周、月的数量 |
| 9 | WeekEndCount | Int | 租赁周末个数 |
| 10 | Deposit | Int | 押金 |
| 11 | DayKm | Int | 日限公里数 |
| 12 | OutKM | Int | 出车公里数 |
| 13 | OPrice1 | Int | 超公里每公里价格 |
| 14 | OPrice2 | Int | 超时每小时价格 |
| 15 | ReturnTime | Int | 应归还时间 |
| 16 | ReturnKM | Int | 归还公里数 |
| 17 | OtherCost | Int | 其他费用 |
| 18 | Rate | Float | 折扣 |
| 19 | Payment | Int | 实际支付金额 |
| 20 | Total | Int | 总金额 |
| 21 | Status | Char 10 | 状态,必填字段(是) |
| 22 | CreateDate | Datetime | 创建日期 |
| 23 | UserName | Varchar 20 | 创建人 |
| 24 | RealRTime | Datetime | 实际归还日期 |
| 编号 | 字段名称 | 数据类型 | 说明 |
| 1 | UserName | Varchar 50 | 用户名,主键 |
| 2 | UserPwd | Varchar 50 | 密码 |
| 关系名 | 主键表 | 主键字段 | 外键表 | 外键字段 |
| FK_Cars_Types | Types | Id | Cars | TypeId |
| FK_Cars_Company | Company | Id | Cars | SaleId |
| FK_Cars_Company1 | Company | Id | Cars | InsurId |
| FK_Customer_MemberType | MemberType | Id | Customer | typeId |
| FK_Lease_Cars | Cars | CarNo | Lease | CarNo |
| FK_Lease_Customer | Customer | Id | Lease | CustId |
在本系统中,使用的语言是Microsoft Visual Basic,界面设计比较方便,从而对于输入,主要是在窗口中的各种文本框、文本区和其他的控件来实现用户的输入,程序接受从这些控件来的信息,执行相应的操作。
对于本系统输入设计,由于界面的设计容易,从而其实现输入的方式也简单明了。这也是本系统优点之一。
4.4输出设计
和输入设计相似,系统的输出设计是通过窗口中的各种文本框、文本区和弹出对话框等控件来实现结果的输出。
5 用户界面设计和处理过程的设计的描述
5.1用户界面设计描述
5.1.1系统用户登录窗体
图5-1 系统登录界面
登录窗体的名称为FrmLogin,它的界面布局如图5-1。用户正确登录后,就会进入主界面。
5.1.2系统主界面
主窗体是工程的启动对象,可以在系统菜单中选择适当的命令,打开属性窗口设置启动对象。本系统中主窗体名为FrmMain。如图5-2。
图5-2 系统主界面
在主界面,用户可以进行基本信息管理、客户会员管理、日常业务管理以及系统用户管理。通过单击对应的菜单选项可以方便快捷地转到本系统功能模块。
5.1.3汽车租赁管理窗体
图5-3汽车租赁管理界面
5.1.4汽车归还管理窗体
图5-4 汽车归还管理界面
5.1.5汽车归还结算窗体
图5-5 汽车归还结算管理
5.1.6汽车租赁信息添加管理
图5-6 汽车租赁信息添加
5.2处理过程设计描述
5.2.1类型管理模块设计
类型管理模块包括以下功能:
(1)类型信息编辑。
(2)类型信息管理。
(3)选择类型信息。
汽车类型管理信息编辑的窗体可以用来添加和修改类型信息,窗体名为FrmTypeEdit,它的窗体属性与登录窗体相似。
汽车类型信息管理窗体的名称为FrmType,它包括三个过程,DataRefresh过程的功能是根据种类编号显示列表中的信息;当用户在“汽车类型”和“保险类型”单选按钮之间切换是,触发OptSel_Click事件;当用户单击“修改”按钮时,触发Cmd_Modi_Click事件。
5.2.2汽车租赁管理模块设计
汽车租赁管理模块包括以下功能:
(1)汽车租赁信息管理,其窗体名为FrmLeaseEdit,窗体中使用3个ADODC控件分别为汽车信息、租赁价格和客户信息表格提供数据源。当用户单击“查找”按钮时,触发Cmd_SchMember_Click事件;当用户更换租赁模式时,触发cob_Mode_Click事件,重新计算租赁总费用金额和归还时间。
(2)汽车续租管理,其窗体名为FrmLeaseAddEdit,在汽车的续租过程中,续租的各种价格继续使用租赁是的价格,不能更改,租赁模式也不允许更改。如果要更改租赁模式,只能归还汽车后重新办理租赁手续。在租赁中,只允许更改租赁的日(周、月),同时系统自动重新计算租赁总费用和应还时间。
(3)汽车租赁管理,其窗体名为FrmLease。它的GridRefresh过程用来更新ADODC控件的记录源,从而更新DataGrid控件中显示的美容。
6 给出软件的测试方法和测试结果
6.1软件测试方法
在本系统中,主要采用的是功能性测试,其中所使用的用例包括了边界值分、最坏情况分析、特殊值测试、输入输出等价类等测试方法。是在已知系统的功能要求上,对系统所能实现的功能进行测试,看是否满足需求。
6.2测试用例和测试结果
6.2.1用户名和密码输入有误时
测试用例:用户名为: ccqjs,密码为:123456
测试结果为:图6-1
图6-1 登录出错
6.2.2汽车租赁操作
测试用例为:车牌号码为:京AS1111,客户编号为:C001,合同编号为:886,周数为:5
测试结果为:在归还管理界面中有可以归还的汽车,且合同号是:886,车牌号:是图京AS11116-2,客户号是:C001。结果如图6-2
图6-2 汽车租赁测试
6.2.3汽车归还操作
测试用例为:车牌号码为:京AS1111,客户编号为:C001,合同编号为:886
测试结果为:数据库中没有车牌号码为京AS1111的汽车信息,如图6-3
图6-3 汽车归还测试
6.2.4汽车管理添加操作
测试用例为:车牌号为:鄂AS123;车名为:name;分类为:夏利2000等
测试结果:在数据库中有该记录,如图6-4所示
图6-4 添加汽车信息
7 总结心得
7.1设计特点
首先,本系统设计所采用的是3层结构设计,即程序逻辑结构分为用户界面层、业务逻辑处理层和数据存储层。这3层的设计,使得该系统的运行性能较单纯的c/s模式有了很大的提高,而且所设计的界面逻辑结构清晰,便于进行修改和添加新的功能。
其次,本系统在界面设计上都采用了模块化的处理思想,把很多界面共有部分集成为一个模块,充分显示了vb面向对象程序语言的强大用途。在程序结构上,所有的模块都分得很清晰,各个窗体所实现的功能都很明了,而且对数据库的操作也是通过对象来实现的。将系统中各个模块的分工分得很明确,使得各个模块之间的功能相对比较,但在系统层次上则是联系很紧密的。
最后,本系统将数据库中的表建成类,并在类中定义了对类的基本操作,使得在以后在过程的使用中,不必重新定义对类的对象的操作,而且实现起来也是比较方便的,出错的机会也会降低。在这点上,充分体现了面向对象的设计方法。
本系统的功能实际上是比较完善的,需求做得比较细致,而且查阅了很多资料,涉及的范围也比较广泛。
7.2设计不足
首先,在本系统的设计设计过程中,由于学习和考试的原因,耽误了一个星期,所以做起来的程序是比较匆促的,虽然需求相对来说还好,但是系统实现上出现了一些小问题,有些功能实现得不是很好,有待于进一步的提高。
其次,由于这次为了方便设计界面,所选取的编程语言也是没什么难度,以至于失去了课程设计所要达到的要求。在编程过程中,遇到最大的问题就是与数据库的连接问题,以及数据库中表的增加、删除、修改和查询等操作。在后来查阅相关资料才明白具体的细节。没了解这门语言就用这门语言做课程设计,这是盲目的,直接导致的就是后续编程过程中漏洞百出,检查起来也很困难。
最后,这次还是没太重视这个课程设计,在心态方面就不行,一直也没有全力以付,虽然也学到了东西,但是相对来说,是教训大于所得。这一点在即将来临的毕业设计中得好好的克服,在毕业设计中一定得稳扎稳打,好好完成在大学期间的最后一个课程设计。
8 参考文献
[1]张友生,软件体系结构,北京:清华大学出版社, 2004年1月
[2]陈火旺、刘春林等,程序设计语言编译原理(第3版),国防工业出版社,2003年 2月
[3]杨开英,数据库系统概论,武汉理工大学出版社,2003年1月
[4]王少锋,面向对象技术UML教程,清华大学出版社,2004年2月
[5]赵文耘等译,需求工程,机械工业出版社,2003年8月
[6]王珊,数据库系统简明教程,高等教育出版社,2004年9月
[7]余雪丽,软件体系结构及实例分析,科学出版社,2004年10月
[8]王智学,ROSE对象建模方法与技术,机械工业出版社,2003年7月
[9]郑阿奇,Visual Basic使用教程(第二版),电子工业出版社,2004年1月
