汽车租赁系统

摘   要

近年来,随着计算机技术的成熟及数据库技术的发展,信息管理系统的应用已延伸到社会的各个领域。以信息管理系统的开发为理论基础,开发出汽车租赁管理系统。

  汽车租赁管理是汽车租赁公司开展日常运营的重要工具。传统的人工管理方式不但浪费时间,而且管理复杂,易出差错。汽车租赁管理系统能使繁琐的数据计算、信息处理变得简单易操作,完全实现数据信息的电算化管理。使用这套系统有助于提高汽车租赁公司的效率,节约成本,增加经济效益。

 本论文主要介绍了汽车租赁系统的生成以及myeclipse 2013 和 mysql的一般原理。

阐述了整个汽车系统的设计原理和具体的实现过程;设计实现了用户登录、注册、租赁车辆、在线付款等功能,以及管理员的添加车辆、查看租赁榜单、导出租赁榜单等;分析了系统的可行性并解决了可能存在的问题。

关键词:数据库、myeclipse 2013、汽车租赁系统

Abstract

In recent years , with the development of computer technology and sophisticated database technology , application of information management system has been extended to all areas of society . To develop information management system based on the theory developed car rental management system .

  Car Rental management is an important tool for car rental companies in their daily operations. Traditional manual management methods not only a waste of time, and manage complex , error-prone . Car rental management system enables tedious data computing, information processing becomes easy to operate and manage the full realization of computerized data information . This system helps to improve the use of the car rental company 's efficiency, save costs and increase economic efficiency.

This paper describes the generation of car rental system,and general principles of myeclipse 2013 and mysql.Describes the design principles of the entire vehicle system and the specific implementation process ; design and implement user login , registration, vehicle leasing , online payments and other functions, as well as an administrator to add a vehicle , check the lease list, export list , such as leasing ; analyzed feasibility of the system and solve possible problems .

Keywords : Database , myeclipse 2013, car rental system

目  录

1 绪论

1.1系统背景

1.2系统目标

1.3系统开发环境技术介绍

1.3.1技术介绍

1.3.2系统开发环境

2 系统分析

2.1可行性分析

2.1.1技术可行性分析

2.1.2操作可行性分析

2.2需求分析

2.2.1模块功能需求

2.2.2 系统的数据流图

2.2.3 系统的用例图

3 系统的总体设计

3.1 系统功能模块设计

3.2数据库设计

3.2.1数据库设计原理

3.2.2 概念模型设计

3.2.3 数据表的设计

4 系统的详细设计与实现

4.1 工程环境搭建

4.2  系统编码

4.2.1  用户注册

4.2.2  激活账号

4.2.3  用户登录

4.2.4  添加车辆

4.2.5  查看车辆列表

4.2.6  查看车辆详细信息

4.2.7  添加车辆到购物车

4.2.8  查看购物车

4.2.9  修改购物车

4.2.10 生成订单

4.2.11 查看订单

4.2.12 取消订单

4.2.13 在线支付

4.2.14 查看租赁榜单

4.2.15 榜单导出

第5章  软件测试

第6章 结论································································33

参考文献···································································34

致谢·······································································35

第1章 绪论

1.1系统背景

经济的发展,生活水平的提高,使人们对汽车的需求越来越大。随着生活逐渐富裕,人们已经有能力租车消费,但中国现有汽车保有量难以充分满足需求。其次,购买私车还不能普及,从个人来说,租车是最好的,买车一次性投入大,购车的手续多,养车费用高,而私车的利用率一般不高,闲置时间较长;出现交通事故后,处理手续太烦琐。而租车则有很大的灵活性,既不会占用大量资金,也不会出现闲置,车况有保证,出差到外地也可以驾驶车辆。而且租赁车车型可选择,客户既能承受,又能满足多样化的需求。而且,从社会角度看,租赁车辆属于公共用车的范畴,它既缓解了现阶段财政控购与企业单位用车之间的矛盾,提高了资金利用率,同时也符合社会车辆总量控制原 则,可在一定程度上缓解交通拥挤;从发展角度看,汽车租赁业的发展不仅可以带动中国的新车销售,同时还可以推动中国二手车的经营,为旧车交易注入新的内容;汽车租赁的特殊作用,可以带动多种相关行业的发展,融合产业间的联系,成为第二产业与第三产业间的联系纽带。

得益于以上三个方面的原因,汽车租赁业在我国迅速崛起,业务量也是越来越多,对信息的处理要求也是越来高,传统的汽车管理人员已不满足汽车租赁业务的需求发展。租赁管理就是对车辆信息和客户信息的管理,主要包括车辆的出租状态、车辆的基本信息、定单的管理等。由于这些过程间的关系复杂,有一对一的关系,一对多的关系,也有多对多的关系,所有这些工作使管理工作变得量大而又复杂,以前包括现在还有很多租赁公司采用人工管理,直接导致了错误的产生,服务质量的低下。租赁管理系统的开发使得这一状况得到了根本的改善。

因此我们将发挥计算的庞大的存储空间,高性能的处理效率,高度可靠的数据安全,清晰的可视化数据等这些资源的合理利用,真正达到减少劳动力提高劳动质量的目的。根据目前的情况我设计了一套具有网络功能的汽车租赁管理系统,客户可以通过网络查阅相关的汽车租赁情况,企业的管理人员可以根据客户的实际情况进行管理,具有很强的实用性,即方便又提高了工作效率。

1.2系统目标

使用Myeclipse、MySQL数据库和JSP设计完成的汽车租赁管理系统,主要好处是一方面可以方便租赁车辆信息共享,管理员上传租赁车辆的描述信息,图片,用户就可以在线浏览,对所属的租赁车辆有更感官的了解。当遇到不解的问题,还可以留言,等待管理员的解答。另一方面就是通过Internet网广泛平台,以及计算机庞大的存储空间,高性能的处理效率,高度可靠的数据安全等优点,准确的记录租赁信息,计算各种费用和租赁排行,生成表单给管理者直观的收入显示。将本系统应用到租赁汽车过程中,会大大增加租赁会员的数量,及时得到更新的租赁信息,第一时间上报事故违章等信息。方便管理员记录租赁情况,减少人工统计的时间,节省成本,加快汽车租赁的周期。

1.3系统开发环境技术介绍

汽车租赁管理系统在实际租车中是很有必要的,这个系统对汽车和用户进行了统一的管理,方便用户查找所需要租的车辆信息,同时便于管理员对业务的管理。它通过MYSQL作为后台数据库,进行数据的存储,使用JSP编写前台页面,通过DAO设计模式实现系统的功能,使平台完成相应的功能操作。本项目使用MySQL 数据库,Tomcat应用服务器平台,以MyEclipse为开发工具进行系统实现。

1.3.1技术介绍

(1)java语言发展及特点

Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的Hot Java浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。

Java语言是一个支持网络计算的面向对象程序设计语言。Java语言吸收了Smalltalk语言和C++语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等。主要特性如下:

1.Java语言简单。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++ 中很少使用和难以理解的特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。

2.Java语言是一个面向对象的。Java语言提供类、接口和继承等原语, Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定[iv]

3.Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

4.Java语言是健壮的。Java的强制类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证[v]

5.Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。

6.Java语言是体系结构中立的。Java程序在Java平台上被编译为体系结构中立的字节码格式, 然后可以在实现这个Java平台的任何系统中运行。 

7.Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性。

8.Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。

9.Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。 

10.Java语言是多线程的。在Java语言中,线程是一种特殊的对象,线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制。

11.Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级[]。

(2) JSP技术

JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 

Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。 

JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。 

JSP的1.0规范的最后版本是1999年9月推出的,12月又推出了1.1规范。目前较新的是JSP1.2规范,JSP2.0规范的征求意见稿也已出台。 

JSP页面由HTML代码和嵌入其中的Java代码所组成[]。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用[],完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。 

自JSP推出后,众多大公司都支持JSP技术的服务器,如IBMOracleBea公司等,所以JSP迅速成为商业应用的服务器端语言。 

JSP可用一种简单易懂的等式表示为:Html+Java=JSP。

(3)级联样式表

CSS是Cascading Style Sheets(层叠样式表单)的简称。更多的人把它称作样式表。它是一种设计网页样式的工具。CSS语句就可以实现许多需要专业软件才可以达到的效果。利用属性可以设置字体、颜色、背景等页面格式;利用定位可以使页面布局更加规范、好看;利用滤镜可以使页面产生多媒体效果。

实际上CSS的代码都是由一些最基本的语句构成的。它的基本语句的结构是这样的:选择符{属性:属性值}

独立编辑好的CSS文档有两种方法加入到HTML文档中。一种是把CSS文档放到<head>文档中,另一种方法是:把您编辑好的CSS文档保存成“.CSS”文件,然后在<head>中定义。这时只需把编辑好的“.CSS”文件的详细路径名写进去就可以了。这种方法非常适宜同时定义多个文档。它能使多个文档同时使用相同的样式,从而减少了大量的冗余代码。

(4)MyEclipse介绍

MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate

MyEclipse 是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。

(5)Tomcat介绍

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML(标准通用标记语言下的一个应用。)页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。

(6)Mysql数据库技术

Mysql是一个小型关系型数据库管理系统[vii],开发者为瑞典Mysql AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.对于Mysql的前途,没有任何人抱乐观的态度.目前Mysql被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了Mysql作为网站数据库[viii]

Mysql特点[]:

  1. 支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统 

2.为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。 

3.支持多线程,充分利用CPU资源 。

4.优化的SQL查询算法,有效地提高查询速度 。

5.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名 。

6.同时访问数据库的用户数量不受限制。

7.可以保存超过50,000,000条记录。

8.是目前市场上现有产品中运行速度最快的数据库系统。

9.用户权限设置简单、有效。

1.3.2系统开发环境

(1)硬件平台:

处理器:P4 1.8GHz。

内存:256MB以上。

(2)软件平台:

操作系统:Windows 8。

数据库:MySQL。

开发环境:JAVA 1.6。

开发工具:Myeclipse 2013。

开发语言:java、jsp、javascript、html。

服务器:Tomcat 6.x。

浏览器:火狐浏览器。

分辨率:最佳效果1024×768像素。

第2章 系统分析

2.1可行性分析

2.1.1技术可行性分析

本系统采用MyEclipse作为开发工具,MySQL作为数据库。MyEclipse整合其他很多工具(比如Tomcat、Hibernate、UML工具等等)到它的IDE中一起工作,这样做一个工程就很方便了。可以比较轻松完成Strucs,Hibernate,Spring布局,编写Strtus-config.xml。MySQL使用了先进的数据库结构,可以为大型的Web站点和企业应用提供优良的扩展性和可靠的保证。同时,MySQL还为用户提供了重要的安全性功能,为用户的数据安全提供了可靠的保证。

2.1.2操作可行性分析

学习了J2EE编程技术,熟练掌握tomcat数据库、JSP技术等基础知识。通过课程设计MVC框架编程训练[vi],掌握了架构的使用规则,应用模块组件的实现、测试、和维护,使用Tomcat服务器实现了系统的Browser/Server结构。

2.2需求分析

2.2.1模块功能需求

根据汽车租赁管理系统任务要求将系统划分为三类用户,即游客、普通用户(会员)和系统管理员。

  1. 游客的主要功能需求:

游客可以进行会员注册;

游客可以浏览全部租赁车辆信息;

游客可以分类查看租赁车辆信息;

游客可以查看租赁排行;

(2) 会员的主要功能需求:

会员可以浏览全部租赁车辆信息;

会员可以分类查看租赁车辆;

会员可以查看车辆详情;

会员可以添加车辆到购物车;

会员可以查看购物车;

会员可以修改购物车;

会员可以生成订单;

会员可以查看订单;

会员可以取消订单;

会员可以在线支付。

(3) 管理员的主要功能需求:

管理员可以查看车辆列表;

管理员可以查看车辆详情;

管理员可以添加车辆;

管理员可以查看订单;

管理员可以查看销售榜单;

管理员可以导出榜单。

2.2.2 系统的数据流图

用户登录成功,选择相应的车辆租约操作,响应操作,更新数据库。

用户租约操作数据流图如下图2-1所示:

图2-1 用户租约操作数据流图

管理员通过输入用户名和密码进行身份验证,验证成功后,进入后台后,根据需要,对相关信息进行处理,系统提交到数据库;验证失败后,系统会提示错误,返回到原来的页面,管理员需要重新输入验证信息。

管理员数据流图如下图2-2所示:

图2-2 管理员数据流图

2.2.3 系统的用例图

游客在未登录的状态下,可以进行用户注册、激活账号、用户登录、查看车辆列表、查看车辆详情等操作。游客用例分析图如图2-3所示:

图2-3 游客用例分析图

管理员登录后,可以进行添加车辆、查看车辆列表、查看车辆详情、查看订单、查看租赁榜单、导出榜单的操作。管理员用例分析图如图2-4所示:

图2-4管理员用例分析图

普通用户(会员)在登录后,可以查看车辆列表、查看车辆详情、添加车辆到购物车、查看购物车里的所有车辆、修改购物车、生成订单、查看订单、取消订单、在线支付。

会员用例分析图如图2-5所示:

图2-3 会员用例分析图

第3章 系统的总体设计

本系统采用结构化设计的方法来实现系统总体功能,提高系统的各项指标,即将整个系统合理的划分成各个功能模块,正确地处理模块之间和模块内部的联系以及和数据库的联系,定义各模块的内部结构,通过对模块的设计和模块之间关系的设计来实现整个系统的功能[x]

3.1 系统功能模块设计

功能模块列表如表3-1所示:

编号

名称

简述

1

游客部分

1.1

用户注册功能

游客通过注册填写用户信息,获取用户名,密码,由管理员激活后可登录。

1.2

激活账号

游客通过系统发送的激活邮件激活账号。

1.3

登陆功能

登陆系统,通过用户名,密码。后台判断用户角色(管理员,用户,未激活用户)

1.4

查看车辆列表

游客也可以查看所有的租赁车辆信息

2

会员部分

2.1

查看车辆列表

会员可以查看所有的租赁车辆信息

2.2

查看车辆详情

会员可以查看车辆的详情信息

2.3

添加车辆到购物车

用户选中车辆,添加到购物车

2.4

修改购物车

对添加到购物车里面的车辆进行修改

2.5

查看购物车

查看购物车里面的车辆的信息

2.6

生成订单

对购物车里面的车辆生成订单

2.7

查看订单

查看自己生成的订单

2.8

取消订单

对订单执行取消操作

2.9

在线支付

对租赁的车辆进行在线付费

3

管理员部分

3.1

添加车辆

管理员登录后就可以添加车辆

3.2

查看车辆列表

    查看所有的车辆的列表

3.3

查看车辆详情

查看车辆的详情信息

3.4

查看订单

查看用户生成的订单

3.5

查看租赁榜单

查看用户租赁的榜单

3.6

导出榜单

导出租赁的榜单生成表格

表3-1 功能模块列表

系统功能结构图如图3-1所示:

图3-1 系统功能结构图

3.2数据库设计

3.2.1数据库设计原理

数据库设计(Database Design) [vi]的概念:数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。

根据需求分析的相关部分及相关说明,下面要根据系统的功能设计要求为各个数据库表设计字段、数据类型、长度和是否为空等相关信息。在需求分析的基础上,对该系统数据库设计的主要原则是:

1.遵守第一范式的设计要求,以达到数据库表设计的合理化。

2.在适当考虑编程的方便性的同时,尽量使数据库更加规范并减少冗余。

3.为保证数据一致性和完整性,为数据库表设计相应的关键字和缺省的信息。

4. 数据库是信息系统的核心和基础,把信息系统中大量的数据按一定的模型组织起来,提供存储、维护、检索数据的功能,使信息系统可以方便、及时、准确地从数据库中获得所需的信息。

5. 数据库是信息系统的各个部分能否紧密地结合在一起以及如何结合的关键所在。

3.2.2 概念模型设计

数据库概念模型实际上是现实世界到机器世界的一个中间层次。数据库概念模型用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具,建立数据概念模型[],就是从数据的观点出发,观察系统中数据的采集、传输、处理、存储、输出等,经过分析、总结之后建立起来的一个逻辑模型,它主要是用于描述系统中数据的各种状态。

本系统E-R图如图3-2所示、:

图3-2系统ER图

  1. 用户(用户名、密码、昵称、邮箱、角色)
  2. 车辆(编号、名称、分类、价格、描述、图片)
  3. 订单(订单号、收货信息、下单时间、总金额、状态)

3.2.3 数据表的设计

用户表:

create table users (

  id int primary key not null auto_increment,

  username varchar(40) unique not null,

  password varchar(40) not null,

  nickname varchar(40) not null,

  email varchar(100) unique not null,

  role varchar(10) not null,

  registtime timestamp,

  state int not null,

  activecode varchar(100)

);

users表如表3-2所示:

列名

数据类型

说明

空/非空

约束条件

id

int

用户编号

非空

主键

username

varchar(40)

用户名

非空

唯一

password

varchar(40)

密码

非空

nickname

varchar(40)

昵称

非空

email

varchar(100)

邮箱

非空

唯一

role

varchar(10)

角色

非空

registtime

timestamp

注册时间

state

int

激活状态

非空

activecode

varchar(100)

激活码

表3-2 users表

车辆表:

create table cars(

   id varchar(100) primary key not null ,

   name varchar(40) unique not null,

   price double not null,

   category varchar(100) not null,

   description varchar(255),

   img varchar(100)

);

cars表如表3-3所示:

列名

数据类型

说明

空/非空

约束条件

id

varchar(100)

车辆编号

非空

主键

name

varchar(40)

车辆名称

非空

唯一

price

double

价格

非空

category

varchar(100)

分类

非空

description

varchar(255)

描述

img

varchar(100)

图片

表3-3 cars表

订单表:

create table orders(

   id varchar(100) primary key not null,

   totalmoney double not null,

   receiverinfo varchar(255) not null,

   ordertime timestamp,

   state int not null,

   user_id int not null,

   foreign key(user_id) references users(id)

);

orders表如下表3-4所示:

列名

数据类型

说明

空/非空

约束条件

id

varchar(100)

订单编号

主键

totalmoney

double

总金额

receiverinfo

varchar(255)

收货信息

ordertime

timestamp

下单时间

state

int(11)

状态

非空

user_id

int(11)

用户编号

非空

外键

表3-4 orders表

考虑实体之间关系

用户与订单存在 一对多关系 :在多方添加一方主键作为外键

订单和商品存在 多对多关系 :创建第三张关系表,引用两方主键作为外键

create table orderitem(

   order_id varchar(100) not null,

   car_id varchar(100) not null,

   buynum int not null,

   money double not null,

   foreign key(order_id) references orders(id),

   foreign key(car_id) references cars(id)

);

orderitem表如表3-5所示:

列名

数据类型

说明

空/非空

约束条件

order_id

varchar(100)

订单编号

非空

    外键

car_id

varchar(100)

车辆编号

非空

    外键

buynum

int(11)

订购数量

非空

money

double

金额

非空

    

表3-5 orderitem表

第4章 系统的详细设计与实现

经过详细设计阶段的设计工作,能够得出对目标系统的精确的描述,从而在编码阶段可以将这个描述直接翻译成为某种程序设计语言书写的程序。详细设计阶段的任务还不是具体的编写程序,而是要设计出程序的"蓝图",以后可以将这个蓝图写出实际的程序代码。因此,详细设计的结果基本上就决定了最后的代码的质量。除了应该保证程序的可靠性之外,使将来编写的程序可读性好,容易理解,容易测试和容易修改,维护是详细设计阶段的重要目标。

4.1 工程环境搭建

(1)创建web project ---mycarrent

(2)导入jar包: 数据层(mysql驱动、c3p0、dbutils)、业务处(java mail)、web层(fileupload、beanutils、jstl)

(3)修改c3p0配置文件

(4)发布工程(配置虚拟主机): 配置server.xml,如果虚拟主机被外界直接通过ip访问,配置缺省虚拟主机,然后修改本地hosts文件

(5) 创建包结构(架构分层  JavaEE 经典三层架构 web层、业务层、数据层)

dt.mycarrent.web --- web层

dt.mycarrent.service --- 业务层

dt.mycarrent.dao --- 数据层

dt.mycarrent.domain --- 实体类

dt.mycarrent. utils ---- 工具类

4.2  系统编码

4.2.1  用户注册

客户端regist.jsp ---- web层 RegistServlet --- 业务层UserService --- 数据层UserDAO

用户通过客户端浏览器页面填写注册信息,然后提交到web层的RegistServlet。在RegistServlet中获取客户端验证码,并判断客户端验证码是否与保存在Session的验证码相同。若不相同,则把验证码输入错误的信息返回给客户端,并打印出错误信息;若相同,就封装客户端提交的form表单到javabean,传递javabean给业务层。业务层将用户信息保存数据库并生成激活码,然后发送激活邮件到注册邮箱里面。在数据层程序对用户的密码进行md5加密,并把用户信息添加到数据库里面,如果用户名、邮箱重复则返回‘注册失败’到客户端。

汽车租赁系统的注册页面如图4-1所示:

图4-1 注册页面图

4.2.2  激活账号

用户点击邮件中链接 ---- 激活码传递服务器web层ActiveServlet ---- 业务层 ---- 数据层

用户登录邮箱,系统管理员已经发送激活邮件到邮箱里面(有效时间为2小时),所有用户直接点击邮箱里面的激活链接就可以了。Web层获取用户点击激活链接提交过来的激活码,将激活码传递业务层完成账户激活,然后通知用户注册成功。业务层ActiveServlet的工作就是根据激活码查询账户,判断激活码是否存在,若不存在,直接抛出一个‘激活码无效‘的异常;若存在,就继续判断激活码是否过了2个小时的有效时间,如果激活码过期,直接抛出一个‘激活码已经过期’的异常,如果没有过就把激活状态设置为激活,并通知数据层更新用户信息。

通过foxmail接收激活邮件的图片如图4-2所示:

图4-2 邮件激活账号图

4.2.3  用户登录

客户端login.jsp ---- web层 LoginServlet --- 业务层UserService --- 数据层UserDAO

用户在客户端页面输入用户名和密码,然后提交用户名和密码到web层的LoginServlet,而LoginServlet获取到form表单的数据,封装成User对象,然后传递user对象给业务层完成登录,而业务层传递用户名和密码到DAO,UserDao根据用户名和密码查询是否存在这样的用户,业务层返回包含所有信息的对象。Web层判断loginUser是否存在,如果不存在就返回客户端‘用户名或者密码错误’的信息,然后重写登录,如果存在就直接返回首页。

添加权限认证功能:

权限认证过滤器:在访问服务器端所有web资源之前,通过一个过滤器拦截访问,获得访问目标资源路径,判断是否具有相应权限,如果没有权限拦截请求,如果具有权限放行。

URL级别权限控制,需要将所有web资源分不同url前缀存储 ----- 不够灵活。权限配置文件方式 对汽车租赁系统进行权限控制。分析汽车租赁系统系统功能 :未登录、登陆汽车租赁系统用户、登陆管理员。在src下新建两个文本文件 admin.txt 、user.txt,将需要管理员权限访问路径写到admin.txt、将需要汽车租赁系统用户权限访问路径写到user.txt ,这样做的好处就是维护起来很方便 。添加错误友好页面 404.jsp ,自动刷新跳转回主页 ,500.jsp 向用户显示友好错误信息。

租赁系统的登录页面如图4-3所示:

图4-3 登录页面

4.2.4  添加车辆

客户端add_car.jsp ---- web层AddCarServlet --- 业务层CarService --- 数据层CarDAO

管理员具有添加车辆的功能,管理员在客户端通过form表单添加车辆信息,然后提交web层,在web层判断是普通上传还是文件上传,用户是否上传文件,上传图片格式是否正确,然后封装车辆信息到JavaBean,传递JavaBean给业务层,而业务层又把车辆信息传递DAO再保存到数据库,再决定是否跳转页面。

添加页面如图4-4所示:

图4-4 添加车辆页面

4.2.5  查看车辆列表

系统主页index.jsp ----- web层ListCarServlet --- 业务层CarService --- 数据层CarDAO (所有车辆数据查询出来)--- 传递数据给 list_car.jsp显示

当 JSP 显示数据库中数据之前,必须经历 Servlet查询 跳转到结果JSP。当显示列表时,不可能显示车辆大图片,因为一张大图可能就会占据整个页面,所以只能显示小图,所有在上传文件时,会自动生成一张小图。

4.2.6  查看车辆详细信息

在列表页面中,在车辆名称和图片上制作链接查看详情,点击链接传递id ---- web层ShowCarServlet --- 业务层 --- 数据层 通过id查看车辆 --- 传递车辆对象 结果页面显示。在详情页面添加按钮,添加车辆到购物车

4.2.7  添加车辆到购物车

购物车对象,不需要保存数据库 ----- 维护内存中购物车对象(保存session) 购物车维护车辆 --- 购买数量关系 Map<Car,Integer> 。客户端将车辆id ---- 传递web层AddCartServlet 接收,获得session中购物车,判断添加车辆是否已经在购物车中,如果在购物车 数量+1 ,不在购物车,将车辆加入购物车,数量 1根据id 查询数据库 获得车辆对象。hashMap的key如果是自定义对象 Car重写 hashcode 和 equals。

4.2.8  查看购物车

购物车信息已经保存Session --- 在jsp显示session中购物车就可以。

显示购物车车辆购买数量 ---- 修改数量。

查看购物车页面如图4-5所示:

图4-5 查看购物车页面

4.2.9  修改购物车

操作session保存购物车对象。

1、 清空购物车 ----- session.removeAttribute 删除购物车对象。

2、 单项删除 ---- 删除map中 entry。

3、 修改数量---客户端传递车辆编号和修改后数量给服务器。

将开发所有web资源页面路径配置权限配置文件。

4.2.10 生成订单

insert 操作 同时向两张数据表插入数据。

进入结算中心(订单生成,确认收货人信息) ----- 数据库保存订单信息,通过两张数据表 orders 订单信息、orderitem 订单中每个车辆租赁信息。

订单信息来源:session中购物车、session的用户、页面收货人form表单。

订单生成页面add_orders.jsp (提供收货人form表单),web层AddOrdersServlet (从form中获得收货人信息, 从session中获得其它信息),传递对象到 业务层 OrdersService,数据层 OrdersDAO,完成订单添加(同时向orders、ordersitem 两个表插入数据)。

生成订单页面如图4-6所示:

图4-6 生成订单页面

4.2.11 查看订单

级联查询 同时查询两张表数据。

查看订单 管理员:查看所有人订单;车辆租赁系统用户:查看自己订单。

在index.jsp 和 生成订单后,添加两个查看订单链接 /listOrders ---- web层ListOrdersServlet (传递当前登录用户给业务层) ----- 业务层要根据用户身份查看订单(管理员看到所有订单, 普通用户只能看到自己订单 ) ----- 数据层 提供两个方法 查看所有订单,查看当前用户订单 ----- 跳转orders.jsp 显示订单列表。

查询订单时 ,查询用户表 获得下单用户完整信息。

查询订单项表 --- 查询车辆表 获得车辆信息。

返回 List<Order> 这里订单列表包含 四张数据表数据。

查看订单列表如图4-7所示:

图4-7 查看订单列表页面

4.2.12 取消订单

情况一 :删除订单数据。

情况二: 不删除订单数据,定义标记状态。

级联删除 同时删除订单表和订单项表中数据,订单未支付,只能取消自己订单。管理员不能取消订单。客户端传递取消订单编号 ---- web层 CancelOrdersServlet 获得编号传递编号,当前登陆用户给业务层--- 业务层 订单必须未支付、订单取消必须是自己的订单 --- 数据层 级联删除(事务问题)。

配置权限配置文件

/add_orders.jsp  ----- user

/addOrder ----- user

/listOrders ---- user /admin

/orders.jsp ---- user / admin

/cancelOrders ---- user

4.2.13 在线支付

对未支付状态订单进行付款 ----- 易宝支付。

注意点:为了确保易宝能够通知汽车租赁系统,系统必须具有独立公网ip地址。

公网ip 必须能够直接访问网站,可以在tomcat服务器上配置缺省虚拟主机(如果公网ip 不能访问网站,需要易宝通过www.mycarrent.com 访问网站, 在网络上注册DNS 域名购买)。

在tomcat文件下的conf文件下有一个server.xml文件,然后修改里面的<Engine>标签为<Engine name="Catalina" defaultHost="www.mycarrent.com">。

付款页面pay.jsp:银行选择、订单号、金额。需要按照易宝支付接口规范,将数据提交易宝指定url 地址上。Web层 PayServlet: 准备易宝接口需要数据。

根据易宝支付参数说明,进行私钥加密 得到 hmac码 (数字签名),需要将 hamc和其它数据一起提交给 易宝 --- 修改付款金额。确认付款页面 confirm.jsp : 将参数写入form 隐藏域中,让用户确认付款。当易宝支付后,易宝收到汇款,通知汽车租赁系统。编写回调程序 CallbackServlet : 提示友好信息给客户,回复易宝收到汇款通知,修改数据库订单状态。浏览器重定向和 服务器点对点通知, 以服务器(易宝)通知为准,修改订单状态 。

权限控制 :

/pay.jsp ---- user

/pay  ----- user

/confirm.jsp ----- user

/callback ---- 需要易宝调用 这个路径不能放入 user.txt 。

支付过程中 请尽量使用IE 。

核心代码如下:

/**

 * 提供易宝支付 接口规范中所有数据 (商家 编号、私钥)

 */

public class PayServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 准备参数

// 获得form数据

// 订单号

String orderid = request.getParameter("orderid");

// 支付金额 --- 真实金额

String money = request.getParameter("money");

// 银行代号

String pd_FrpId = request.getParameter("pd_FrpId");

// 根据易宝支付接口规范封装数据

String p0_Cmd = "Buy";

String p1_MerId = ResourceBundle.getBundle(

"merchantInfo").getString("p1_MerId");

String p2_Order = orderid;

// 测试账号,无法用真实金额付款

String p3_Amt = "0.01";

String p4_Cur = "CNY";

String p5_Pid = "";

String p6_Pcat = "";

String p7_Pdesc = "";

String p8_Url = ResourceBundle.getBundle(

"merchantInfo").getString("responseURL");

String p9_SAF = "";

String pa_MP = "";

String pr_NeedResponse = "1"; // 需要应答

// 商家密钥

String keyValue = ResourceBundle.getBundle(

"merchantInfo").getString("keyValue");

String hmac = PaymentUtil.buildHmac(p0_Cmd, p1_MerId, p2_Order, p3_Amt,

p4_Cur, p5_Pid, p6_Pcat, p7_Pdesc, p8_Url, p9_SAF, pa_MP,

pd_FrpId, pr_NeedResponse, keyValue);

// 使用post提交数据,将数据传递jsp 以隐藏域方式 写入form表单

request.setAttribute("pd_FrpId", pd_FrpId);

request.setAttribute("p0_Cmd", p0_Cmd);

request.setAttribute("p1_MerId", p1_MerId);

request.setAttribute("p2_Order", p2_Order);

request.setAttribute("p3_Amt", p3_Amt);

request.setAttribute("p4_Cur", p4_Cur);

request.setAttribute("p5_Pid", p5_Pid);

request.setAttribute("p6_Pcat", p6_Pcat);

request.setAttribute("p7_Pdesc", p7_Pdesc);

request.setAttribute("p8_Url", p8_Url);

request.setAttribute("p9_SAF", p9_SAF);

request.setAttribute("pa_MP", pa_MP);

request.setAttribute("pr_NeedResponse", pr_NeedResponse);

request.setAttribute("hmac", hmac);

// 传递真实金额 给 确认付款页面

request.setAttribute("money", money);

request.getRequestDispatcher("/confirm.jsp").forward(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

4.2.14 查看租赁榜单

针对已支付订单,在orderitem 保存每辆车,在订单中销售数量,计算每辆车租赁多少次。

对 orderitem表 中 car_id字段 进行分组 ,求和buynum :

select car_id, sum(buynum) from orderitem group by car_id;

上面统计无效的,统计已支付订单:

select orderitem.car_id , sum(orderitem.buynum) from orders,orderitem where orders.id = orderitem.order_id and orders.state =1 group by orderitem.car_id;

系统主页index.jsp 点击查看榜单 ----  web层 ShowRankServlet ---- 业务层 --- 数据层返回每辆车和销售数量集合 Orderitem 或者 Map<Car,Integer>。

在榜单数据查询过程中,需要按照车辆的租赁次数进行排序,降序 --- 排序 Compareable Comparator。

权限管理

/showRank ---- admin

/rank.jsp  ---- admin

核心代码如下:

public class RankService {

// 查看租赁榜单

public List<Orderitem> showRank() {

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
汽车租赁系统 一 课程设计的目的和意义 随着汽车租赁领域的繁荣和飞速发展,租车行业的信息量越来越大,越来越复杂。传 统的管理方式无法适应当前迅速发展的市场,计算机和计算机网络技术迅速发展和普及 ,使用汽车租赁系统可以使得汽车租赁的效率得到很大的提高,同时降低经营成本,提 高利润。 应用对数据库原理的理论学习,通过实践熟练掌握数据库创建、基本操作、程序系统 的建立。并通过数据库原理软件设计实践,巩固在课堂教学中学习的关于数据库原理的 有关知识和数据库系统建立的方法,熟练掌握对于实际问题,为了建立一个关系数据库 信息管理系统,必须得经过需求分析、概念结构设计、逻辑结构设计、物理结构设计、 数据库实施以及数据库运行和维护的一般过程,为毕业设计打下基础。 二、术语定义 E-R图:为理解和表示问题域的信息而建立的数据模型,简称E- R图。具有实体、关系、属性三要素。 数据流图数据流图是用来描绘软件系统逻辑模型的图形工具,是描绘信息在系统中流 动和处理的情况的。 数据字典:数据字典是对数据流图中出现的所有数据元素、数据流、文件、处理的定义 的集合。 三、数据库的要求 主要功能:本系统包括客户信息管理、车辆信息管理、汽车租赁归还管理、会员类型管 理、会员信息管理、保险公司管理、汽车经销商管理等。具有添加、修改、查询、删除 等功能。方便租赁公司的工作,提高租赁公司的工作质量和工作效率。 性能要求:租借和归还信息必须及时更新,汽车租赁系统的信息必须无差错的存储在主 服务器上。 输出要求:数据完整,详实。 输出要求:简捷,快速,实时、准确。 安全与保密要求:管理员享有对客户信息库及汽车租借信息库和职员信息库的管理与修 改。工作人员只享有对汽车租赁信息库的部分修改(写入与读出)。 完成期限:预计三个月 一 汽车租赁系统需求分析: 系统功能需求: 1)客户可以通过不同的方式(包括电话、前台、网上)预订车辆 1、能够保存客户的预订申请单 2、能够保存客户的历史记录 3、工作人员可以处理申请 4、技术人员可以保存对车辆检修的结构 2)满足以上功能需要以下几个模块: 1、基本数据维护模块。基本数据维护模块提供了使用者录入、修改并维护基本数据的途 径。例如对客户的个人信息、租赁信息、车辆的基本信息等的录入和修改 2、基本业务模块。基本业务模块中,客户可以填写汽车租赁申请表,工作人员负责处理 这些表格。同时,技术人员可以提交每辆车的状态,以便工作人员根据这些资料决定 是否批准客户的请求。 3. 数据库管理模块。在汽车租赁系统中,对客户、工作人员及车辆的信息都要进行统一管 理,车辆的租赁情况也要进行详细的登记。 4. 信息查询模块。信息查询模块主要用于查询相关信息,例如工作人员查询车辆信息和客 户信息等。 如以下层次图所示: 数据字典 1、公司数据字典 "属性名 "存储代 "类型 "长度 "备注 " " "码 " " " " "编号 "Fno "char "20 "汽车租赁公司的编号 " "名称 "Fname "char "20 "汽车租赁公司名称 " "电话 "Ftell "char "20 "汽车租赁公司联系方式 " "地址 "Faddres"char "50 "汽车租赁公司的地址 " " "s " " " " "电子邮箱"Femail "char "50 "汽车租赁公司的电子邮箱 " "传真 "Ffax "char "20 "汽车租赁公司的传真 " "邮编 "Fzip "char "10 "汽车租赁公司的邮编 " 2、汽车数据字典 "属性名 "存储代 "类型"长度 "备注 " " "码 " " " " "编号 "Cno "char"20 "汽车车牌号 " "名称 "Cname "char"20 "汽车品牌名 " "类型 "Ctype "char"20 "汽车所属类型 " "颜色 "Colour "char"20 "汽车颜色 " "使用时间"Ctime "char"20 "汽车从投入使用到现在的时间 " "行驶里程"Cmileag"char"20 "汽车总共行驶的时间 " " "e " " " " "租赁价格"Cprice "long"10 "租赁汽车每小时多少钱 " "逾期价格"Oprice "long"10 "超过该时间每小时多少钱 " "状态 "State "char"10 "在库或不在库 " 3、车辆保险数据字典 "属性名 "存储代 "类型 "长度 "备注 " " "码 " " " " "车险号 "Bno "char "20 "车辆保险类型号码 " "车险名 "Bname "char "20 "车辆保险保单名字 " "所保车号"Cnumber"char "20 "投保车辆的车牌号 " "投保时间"Bdate "date "8 "签订保单的时间 "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值