您的位置:首页 > 房产 > 建筑 > 如何让百度能查到自己_手机网站建设哪家公司好_免费开店的电商平台_东莞百度seo在哪里

如何让百度能查到自己_手机网站建设哪家公司好_免费开店的电商平台_东莞百度seo在哪里

2025/1/4 13:31:22 来源:https://blog.csdn.net/crazy_tan/article/details/144430129  浏览:    关键词:如何让百度能查到自己_手机网站建设哪家公司好_免费开店的电商平台_东莞百度seo在哪里
如何让百度能查到自己_手机网站建设哪家公司好_免费开店的电商平台_东莞百度seo在哪里

文末获取源码和万字论文,制作不易,感谢点赞支持。

摘    要

本文论述了一个基于java平台、B/S(浏览器和服务器结构)的自行车租赁系统。设计原理、设计思想及具体的实现过程,对在设计过程中涉及到的关键设计思想及重要作业流程作了具体分析和介绍,并对各个模块的设计思想及设计过程作了详细阐述。本系统的设计采用了最新的java技术,Microsoft SQL Server 2008作为数据库支撑平台,应用到的技术包括jsp、面向对象方法学、软件工程思想等。 

该系统是一个自行车租赁系统,是以低碳减排、健康生活为背景,开发一个可用于城市地区或公司及学校的自行车租赁系统管,实现自行车租赁管理的高效化,电子化。通过使用本系统,可以方便快捷地实现自行车租赁中的学生管理、自行车管理、订单管理、类型管理和归还车辆管理等操作,使各个管理井井有条,为公共自行车的健康发展创造条件。 

本人的毕业设计是主要实现该系统的所有功能,后台采用java开发语言,数据库采用SQL Server 2005设计。

关键词:jsp;自行车租赁;SQL Server;
Abstract

A bicycle rental system based on Java platform, B/S (browser and server structure) is discussed in this paper. The design principle, design idea and the realization process of the design process involved in the key design ideas and important processes are analyzed and introduced in detail and the design idea and design process of each module. The design of this system uses the latest Java technology, SQL Server Microsoft 2008 as a database support platform, the application of the technology including JSP, object-oriented methodology, software engineering ideas, etc..

The system is a bicycle rental system, with low carbon emissions and healthy life as the background, the development of a city or region can be used for the company and bicycle rental system school pipe, realize the efficient management of the electronic bicycle rental. By using this system, you can easily and quickly achieve the student management, the bicycle in the bicycle rental management, order management, management type and return of the vehicle management operation, make each management arranged in good order to create conditions for the development of public health, bicycle.

My graduation design is the main realization of all the functions of the system, the background using java development language, database using Server SQL 2005 design.

Key words: JSP; bicycle rental; Server SQL;

目 录

1 引言

1.1 课题研究的背景

1.2 国内外发展状况及发展趋势

1.3公共自行车租赁系统的开发方法

1.4 课题研究的创新点

2 开发工具和相关技术简介。

2.1 前端技术

2.1.1 JQUERY

2.1.2 DWR

2.1.3 JavaScrit技术介绍

2.2 JAVABEAN的特点

2.3  Json

2.4  JBPM 4.4

2.4.2 JBPM带来的益处

2.4.3 JBPM模型说明

2.5 MVC 框架

2.6  B/S体系结构介绍

3 系统分析

3.1 可行性分析

3.1.1 技术可行性:

3.1.2  经济可行性:

3.1.3  操作可行性:

3.1.4  法律可行性:

3.2 功能需求分析

3.3 系统目标设计

3.4 系统架构类图

3.5 系统交互图

3.6 系统运行环境

4  系统概要设计

4.1  系统的数据库链接

4.2  系统详细设计

4.2.1  系统功能设计

4.2.2  数据库的逻辑设计

5  系统关键技术的实现

5.1  系统架构的搭建

5.1.1  服务器启动WEB.XML的环境配置

5.1.2 Struts的环境配置

5.1.3 数据库连接及初始化数据

5.1.4初始化监听器

5.1.5控制层基础搭建

5.1.6持久层基础搭建

5.1.7应用程序各请求基本入口部署

5.2 系统实现界面描述

5.2.1 密码MD5加密

5.2.2 用户登录密码校验

5.2.3 管理员功能模块描述

5.2.4 前台功能模块描述

6  系统模块测试

6.1  测试原理和方案

6.1.1测试原理

6.1.2测试方案

6.2  测试环境

6.2.1 Web服务器测试环境

6.2.2测试环境要求

6.3  测试的具体对象

6.4  测试结论

致谢

1 引言

1.1 课题研究的背景

随着Internet的进一步发展,静态Web站点的开发与维护变得越来越困难,一方面信息的不断增加和变化,使站点维护人员不得不经常修改他们的网页,特别是基于数据库驱动的Web站点更是如此,随着Internet上信息量的增多和交互性的加强使HTML显得越来越难以胜任。另一方面静态网页由于不能与浏览者进行有效交互,使人们感到越来越乏味,而不愿意再一次地进入同一站点。所以开发动态网页或动态内容成了越来越多的站点所追求目标。所谓动态内容是由每一个用户按照自己的需求发出请求而特殊制作的Web网页。 

随着经济的快速发展,环境污染、生态恶化等一系列问题越来越突出。进入新世纪以来,世界各国更加关注生态环保问题。我国确定的世界环保日主题就是“共建生态文明,共享绿色未来”。主题旨在唤起社会公众对环境与发展关系的清醒认识和自觉行动,强调生态文明、绿色发展理念和公众参与,号召全社会行动起来为可持续发展之路做出贡献。 

许多先进国家早已致力于发展自行车替代高能耗、高排放的交通工具。然而传统落后的自行车租赁管理模式仍然在很大程度上制约了推行公共自行车租赁普及化和现代化的发展,成为更深层次的“软环境”的问题。因此,在信息化、网络化的时代,通过计算机技术对自行车租赁系统进行信息管理化建设,实现自行车租赁管理的高效化,电子化,为提倡多利用公共自行车出行,能提高道路资源利用、缓解交通拥堵,促进节能减排、提高城市品位提供强有力的技术保障。

1.2 国内外发展状况及发展趋势

当前,我国基于自行车租赁系统建设尚处于发展阶段。由于缺乏统一的理、布局规划和各个自行车租赁公司的协调,再加上缺乏科学的软件工程理论,往往造成自行车租赁公司的重复建设和资源的隔阂,造成了不必要的浪费。有人说:“提倡自行车出行,不能止步于为自行车留道,还考验着一个城市是否具有‘以人为本’的理念。当骑车变成一件便捷和安全的事时,才会有更多人主动加入低碳出行的行列。” 

互联网发展速度迅猛,管理的现代化电子化已成为发展道路上发展的一大热点。 随着宽带网络的普及以及网络互联网络应用方式的发展,正以前所未有的速度对传统管理方式以理论造成冲击,并对以往传统管理方式占主导的领域进行渗透。 而今,随着Internet 的广泛应用和计算机技术的不断创新,管理系统的发展又步入到一个崭新的阶段,基于大型数据库和 Internet 的各个网络管理系统不断涌现,成为系统发展的新方向。 当前,我国基于自行车租赁系统建设尚处于发展阶段。由于缺乏统一的理、布局 规划和各个自行车租赁公司的协调,再加上缺乏科学的软件工程理论,往往造成自行 车租赁公司的重复建设和资源的隔阂,造成了不必要的浪费。“自行车租赁系统”旨在推进真正意义上的管理信息化,改进租赁普通管理员在用户资料和车辆资料及车辆租借环节等繁重工作。

在各个自行车借还点处借、 还自行车。这项服务方便了学生、 市民们的出行, 为之节省了一定的时间, 意义深刻。 然而在为全社区几千人服务的同时, 我们的服务队员工却还要每天手工整理、 登记和统计自行车的借还情况, 工序繁杂、 费时劳神。 为减轻相关工作人员的负担, 同时减少工作出错率、 展现为市民服务的精神, 我决定开发一套旨在更好地为同学们服务的“ 基于jsp的自行车租赁服务软件”。

1.3公共自行车租赁系统的开发方法

当前软件项目的开发,需要掌握的不仅仅只是编程技术和架构思想,更应该注意的是需要具备软件工程的思想,在需求分析,系统分析以及软件测试阶段[2]的思想和技巧,就是我们所说的软件开发方法。国外的一些大公司一直致力于研究这些开发方法的概念和理论,也提出了一系列可行并且效率较高的开发方法,例如:生命周期法、原型化方法、面向对象方法等。下面我就针对这几种软件开发方法进行简单的介绍。 

而本文针对自行车租赁系统的特点,采用了原型化方法。原型化方法,就是在开发过程中,并不是所有的需求都能够在开发初期进行预期与确定。在后期的开发中,对你原有的架构以及逻辑进行反复修改与重新定义设计是不可避免的。很让人高兴的是目前市场上也有一些能够促进原形化开发方法的工具。例如VB、Delphi等工具。利用这些工具,我们能够在较短的开发周期[3]内设计实现一个对用户可视化的系统框架,这样的好处是,客户能够根据产生的模型,在此基础上对软件产品提出自己的个性化需求。 
本系统采用的原型化开发方法分以下几个步骤进行: 
(1)在系统内部进行需求调研,确定初步需求,制定合理的需求方案。 
(2)根据需求分析出的模型,初步搭建系统的主要框架以及基础的系统模型,完成主要功能的实现

(3)租车的员工进行阶段性咨询,根据得到的意见进行反复修改,直到基本符合用户需求。
至此,系统逐渐成型,在今后的使用中,发现细微的漏洞则进入系统维护阶段,对系统进行日常的维护 

1.4 课题研究的创新点

本文所设计的系统在功能设计上,采用了目前市场上比较流行的Jpbm框架来来进行流程的审批设计,用户可以根据自己的需要,在就要求系统管理员使用图形化工具[4]设计好流程定义图后进行对系统的部署,即可生成一个新的流程模型。

在系统的组织架构上,参考了大量的设计思想以及模式,采用了当前软件行业中比较流行的java框架进行搭建。在Struts的设计部分,所有子处理控制器继承于BaseAction这个父类,在BaseAction中实现了HttpServlet接口,这样使得可以在struts的环境下使用Servlet的API。极大程度的适应了开发者的习惯。对传统JavaEE开发人员来说是很让人兴奋的。另外,在DAO数据持久层,设计采用BaseDao接口和BaseDaoImpl实现类,其余所有需要操作数据库的Dao层接口或者类都实现或者继承这两个基本工具。由于Dao数据交互层本系统采用的是MyBatis框架,那么在BaseDao接口中我使用Java类的反射机制设计了在数据可交互过程中最为常规并且各个模块也都极大程度会使用到的例如增删改查的操作方法。在子模块需要进行这些操作的时候,只需要模块接口实现BaseDao接口,模块实现类实现BaseDaoImpl类,并且传入所需要操作的持久对象即可。在子模块中我们只需要在控制层对其进行简单的调用即可。

2 开发工具和相关技术简介。

本系统采用的使B/S 即浏览器、服务器端的架构,在Tomcat 6.0上搭建和部署服务端,前台展示采用web浏览器展示。数据库采用SQL Server 2008 。本节主要根据本系统的设计思路,沿前端置服务器端最后到数据库的顺序为读者介绍使用到的技术。

经过技术研究分析,本系统后台主要采用框架[5]搭建,结合工作流JBPM实现对业务流程的设计与实现,整体架构采用经典MVC设计模式,结合Ajax等异步请求等方式,完成前后台交互:

2.1 前端技术

前端采用的是JSP技术和jQuery这种JavaScript的封装类库来实现页面的布局结构以及各种样式的控制和调整。对于前端对服务器端的异步请求也是基于jQuery内部封装的POST方式请求。

2.1.1 JQUERY

jQuery的创始人是美国人John Resig,它主要实现的目标思想是——WRITE LESS,DO MORE,即已最少的代码量实现更多的功能性需求。它是一种轻量级的JS类库,这是其它相同类型的JS类库所无法匹敌的,同时的兼容性也非常强劲,不仅能够基于jQuery开发CSS3项目,同时它能够兼容目前市场上的各大主流浏览器,像( FF 1.5+, IE 6.0+, Opera 9.0+,Safari 2.0+)这样的,都是jQuery所支持的。jQuery是一套完整的具有快速开发,代码简洁的封装性质的javaScript类库,我们能够基于jQuery对HTML DOM对象 进行随心所欲的控制。他提供一套完整的接口,我们能够基于接口来实现事件的开发、操作页面元素、实现炫酷的动画效果。另外不得不说的是,jQuery屏蔽了JS的异常,若你去仔细研究他的底层源码,不难发现,它在对于异常的处理机制上实现的非常成熟和完善。我们在对页面开发过程中使用JavaScript脚本处理的诸多异常在jQuery的处理机制中都做了很好的规避和捕获。使得开发者能够专注于业务逻辑的实现,而更少的去关注这些简单的语法问题。同时它能够把页面的HTML[6]代码和脚本语言很好的分开,使得代码结构变得清新自然。已经成为开发者心里深爱的一门技术。

jQuery是一个兼容多浏览器的javascript框架,核心理念是write less,do more(写得更少,做得更多)。jQuery在2006年1月由美国人John Resig在纽约的barcamp发布,吸引了来自世界各地的众多JavaScript高手加入,由Dave Methvin率领团队进行开发。如今,jQuery已经成为最流行的javascript框架,在世界前10000个访问最多的网站中,有超过55%在使用jQuery。

jQuery是免费、开源的,使用MIT许可协议。jQuery的语法设计可以使开发者更加便捷,例如操作文档对象、选择DOM元素、制作动画效果、事件处理、使用Ajax以及其他功能。除此以外,jQuery提供API让开发者编写插件。其模块化的使用方式使开发者可以很轻松的开发出功能强大的静态或动态网页。

2.1.2 DWR

DWR是一个年代比较久远的技术,但是其存在的优点也是不得并不让人肃然起敬的。它是一个基于WEB框架的远程调用框架。很显然,在我们平常对Ajax[7]操作时,我们通常的做法是去请求后台的Java代码,通过Java代码的处理结构在经过Http响应返回给客户端。然而有了DWR这个神奇的东西之后,你会发现DWR它通过自身的映射机制,可以在它的内部将远程的Java代码映射成类似于本地的JavaSript代码。这个时候我们调用服务端代码就轻易的像是在调用本地脚本语言一样。极大简化了Http请求的数据传递交互过程。开发者可以很容易获得服务端接口,调用映射生成的Javascipt,实现前后端的数据交互。

2.1.3 JavaScrit技术介绍

JavaScript是一种基于对象(object)和事件驱动(event driven)并具有安全性能的脚本语言。它的目的是与html超文本标记语言、java 脚本语言(java小程序)一起实现在一个web页面中链接多个对象,与web客户交互作用。它被嵌入 HTML 的文件之中。通过 JavaScript 可以做到响应用户的需求事件(如表单的输入),这样当一位使用者输入一项信息时,它不需要通过网络传送到服务器端进行处理再传回来的过程,而可以直接在客户端进行事件的处理。它的出现弥补了html语言的缺陷。

JavaScript是一种脚本语言,它采用小程序段的方式实现编程。像其它脚本语言一样,JavaScript同样已是一种解释性语言,它提供了一个易的开发过程。
它的基本结构形式与C、C++、VB、Delphi十分类似。但它不像这些语言一样,需要先编译,而是在程序运行过程中被逐行地解释。它与HTML标识结合在一起,从而方便用户的使用操作。

2.2 JAVABEAN的特点

JavaBean 是与平台无关的,所以对于将来的解决方案,供应商可以轻易向不同用户推出其客户机方的 JavaBean,而不必创建或维护不同的版本。这些 JavaBean 可以与执行西苑自行车租赁功能(例如订购、信用卡处理、电子汇款、存货分配、运输等)的 EJB 配合使用。这里有巨大潜力,而这正是组件代理(WebSphere Application Server 自行车租赁信息管理公司版)设计提供的那种潜力。
  JavaBean 是一种组件,它在内部有接口或有与其相关的属性,以便不同人在不同时间开发的 bean 可以询问和集成。可以构建一个 bean,而在以后构造时将其与其它 bean 绑定。这种过程提供了先构建,然后重复使用的方法,这就是组件的概念。可以将这种单一应用程序部署成独立程序、ActiveX 组件或在浏览器中。

JavaBean 因其外部接口(即属性接口)而与纯对象不同。这种接口允许工具读取组件要执行的功能,将其与其它 bean 挂钩,以及将其插入其它环境。JavaBean 设计成对单一进程而言是本地的,它们在运行时通常可视。这种可视组件可能是按钮、列表框、图形或图表 - 但这不是必需的。

2.3  Json

JSON协议是一种以一定规则的格式生成的数据传输协议,JSON传输数据的格式,并不是一种文档定义格式,这一点和XML是不同的。

JSON是一种交换的格式,是轻量级的,适合于前端脚本Javascipt和服务端进行异步数据交互。本文向您展示JSON的简单格式和生成的规则,斌企鹅通过实际开发中的代码向您展示Json在实际应用开发中的传递方式。

2.4  JBPM 4.4

    JBPM( Java Business Process Management)核心内容是业务流程管理,它的主要内容包括了业务流程管理。是一个开源的工作流框架。与之相似的开源框架有例如SNAKER之类的,都属于非常优秀的工作流框架。在办公系统中引进工作流框架,可以是系统在处理流程性事务上更加具有灵活性。
2.4.1 最大特色

JBPM的逻辑主要是采用自身的流程定义语言(JPDL)来定义流程走向的规范。JPDL将业务过程当成是一个UML的状态图。JPDL语言是通过编写XML文件来定义每个状态的。它主要分为开始节点,任务节点,结束节点,以及各个节点之间的走向连接线。我们可以通过手工编写XML文件,定义流程。同时,当前市场上的开发工具也支持我们以可视化的方式来绘图,通过拖动图形来定制XML[14]文件。编译器会将我们生成的图形自动转换成XML的JPDL语言。

JBPM是使用Hibernate作为其数据库连接的基础,关于Hibernate,本文在之前已经详细的介绍了其优点,JBPM使用Hibernate来与数据库之间进行映射,它内置了一系列自身的流程数据表,在JBPM部署期间利用Hibernate的自动化建表功能即可将这些基础的表格生成出来,而不需要开发者去关心。

2.4.2 JBPM带来的益处

实现了无纸化的工作模式;
过程可监控:便于对执行过程的跟踪和监控
数据可管理:便于对数据进行检索、分析
可靠性:减少人-人交互的主观错误的机率

2.4.3 JBPM模型说明

加载流程定义:定义工具可以是开发者使用开发工具生成,也可以有系统自身来提供。

启动流程:根据定义的流程文件,从开始节点启动流程,并创建一个流程实例。

办理任务(流程的每一步):执行流程的每个步骤

记录流程的状态:工作流引擎会对各个流程的各种状态进行详细的记录。

2.5 MVC 框架

图2-1 MVC框架图

MVC的是一个模型视图控制器,是一种软件设计模式,用来组织代码分离业务逻辑和数据的方法,它通过将视图层(一般是JSP、ASP、HTML)与业务控制层(URL所请求的Action)分离,并且在控制层通过调用模型[15]来实现业务的交互。使用MVC的架构思想在极大程度上实现的程序的解耦,使后台开发人员专注于业务逻辑的实现,而不关注前台的展示。相同,前端开发人员也不需要知道后代业务逻辑的实现,只需要接受后台向前台发送的已经约定好的数据格式,将其展示出来即可。

大多数开发者会将MVC认为是一种设计模式,但事实并非如此,与其说MVC是一种设计模式,不如说MVC是一种开发的标准和规范。他们是完全不同的概念。

框架,是一种对程序代码的封装,定义了在数据交互上的特定方式,它提供了一个通用的标准,要求程序员按照这个标准去实现自己的业务逻辑,使用框架来实现自己的逻辑,通常的好处是可以不需要考虑底层的实现机制,它会把比较繁琐的实现做一个封装,我们只需要重点实现自己的逻辑,调用框架提供的接口[16],就可以实现我们想要的功能。使用框架进行开发的好处是可以最大程度的节约时间成本,并且开发出来的产品会比较稳定,受开发者素质影响会相对较小。

框架和设计模式有本质上的区别。设计模式是一种开发的思想。它是一种综合考虑了程序的性能已经拓展性以及鲁棒性的设计思想。使用合理的设计模式开发的产品,能够很好的适应各种需求的变更。但是,开发出很合理的设计模式,需要程序员具备一定的素质。不得不说,设计模式是一把双刃剑,如果不能合理的在项目中部署设计模式,也会使系统的维护变得更加困难。

2.6  B/S体系结构介绍

 在B/S体系结构系统中,用户通过浏览器向分布在网络上的许多服务器发出请求,服务器对浏览器的请求进行处理,将用户所需信息返回到浏览器。B/S结构简化了客户机的工作,客户机上只需配置少量的客户端软件。服务器将担负更多的工作,对数据库的访问和应用程序的执行将在服务器上完成。浏览器发出请求,而其余如数据请求、加工、结果返回以及动态网页生成等工作全部由Web Server完成。实际上B/S体系结构是把二层C/S结构的事务处理逻辑模块从客户机的任务中分离出来,由Web服务器单独组成一层来负担其任务,这样客户机的压力减轻了,把负荷分配给了Web服务器。这种三层体系结构如图1所示。

图2-2 B/S体系架构图

采用该结构软件的优势在于:

(1)无须开发客户端软件,维护和升级方便;

(2)可跨平台操作,任何一台机器只要装有WWW浏览器软件,均可作为客户机来访问系统;

(3)具有良好的开放性和可扩充性;

(4)可采用防火墙技术来保证系统的安全性,有效地适应了当前用户对管理信息系统的新需求。

这种三层结构层与层之间相互独立,任何一层的改变不影响其他层的功能。

三层B/S结构将应用的三个部分明确的分开:表示部分、应用逻辑部分、数据访问部分。这三个部分在逻辑上独立的分开,分别加以实现,称之为:客户端、应用服务器、数据库服务器。而在客户端和应用服务器之间加入一个WEB服务器,就形成了一种特殊的B/S结构:Browser/Server,只在客户端安装浏览器软件即可。客户端使用Internet Explore时,就可以让Internet Explore变成为能够处理数据的应用系统。

由于这种模式是提供一个跨平台的、简单一致的应用环境,实现了开发系统与应用系统的分离,因此避免了为多重不同的操作系统开发同一应用系统的重复操作,便于用户群的扩展、变化以及应用系统的管理。

因此该结构在管理信息系统开发领域中获得飞速发展,成为应用软件开发中一种流行的体系结构.所以在开发本系统时采用这种模式。

3 系统分析

3.1 可行性分析

3.1.1 技术可行性:

本系统采用JAVA结合框架[实现,适当合理的运用jQuery,Jbpm 等框架定制流程。这些技术在业界都是久经考验,并且在市场上已经大量投入生产和运行环境,不存在技术不成熟不稳定的状况。在结构和代码的设计上,本人充分运用设计模式思想,考虑到并发的多变性,程序的拓展性[17]等。完全能适应本系统运行的需求,技术可行。

该系统是基于WEB网站的构建,对软、硬件的要求不是很高,所需的硬件设备一般普通的计算机配置就可以了。软件上,操作系统采用Windows系列的操作系统、使用MyEclipse 8.6 作为前台开发工具,它在MyEclipse 8.0的基础上新增加了250多种新特性,是对MyEclipse 8.0的一次全面升级。它融合了关系类型数据、XML的访问方式、对象,并且语言更为简洁。利用MyEclipse 8.6来开发Windows应用程序和Web应用更加的高效,它已经有很多“控件”是已经编程好的java程序,可以直接拿来使用,所以会大大增加我们开发系统的速度。java又是我们学过的语言之一,学习起来容易上手等等。MyEclipse 8.6的功能相对与MyEclipse 8.0来说已经很强大,已成为一种专业化的开发语言和环境。采用SQL Server 2008作为后台数据库的平台管理系统,它是一个全面的数据平台,它在电子商务,数据仓库和数据库解决方案等应用起着核心的作用,也可为企业的数据管理提供强大的支持。使用SQL Server 2008数据库管理系统的开发人员可以利用端对端的开发环境,且其中包括了多种新兴技术,能够帮助开发人员大幅度的提高开发效率。以上这些是在车友俱乐部系统的建设与开发中必需用到的,技术上都比较成熟。因此在技术上是可行的。

本系统与普通的网站操作功能相似,灵活方便,快捷迅速,适应处理多项数据。视窗界面友好和直观,利用鼠标,键盘两种操作方式,方便快捷。界面规划合理,让人看上去一目了然,提供信息功能完整,稍微一接触就可以很快就上手其所有操作。

3.1.2  经济可行性:

开发本系统使用了目前市场上比较成熟和稳定的技术框架,在开发效率上大大提高,极大程度的降低了开发成本。且系统的运行能够很好的适应公司业务的发展要求,解放人力资源,更好的调度公司的运营。从一定程度上能够提高公司运作的速度,为公司节约下成本。

3.1.3  操作可行性:

本系统模块布局清晰,在相应的模块有相应的引导和指示,简单易用,且公司使用人员具备一定的基本素质,不需要经过特殊培训即可上手使用。

3.1.4  法律可行性:

系统从架构到设计,从编码到发布,全由本人一人负责,所使用的技术以及涉及到的框架都是目前市场上免费开源的,不存在任何侵权行为。

本系统是本人经过查找资料而设计的,没有盗用他人的系统。在开发过程中没有涉及合同、版权等与国家相关法律规定的相抵触的方面。因此,本系统在法律上是可行的。

3.2 功能需求分析

本系统主要是针对各个自行车租赁系统的信息进行管理,本系统满足以下几点要求:  

系统安全性。由于该系统的使用对象多,要求有较好的权限管理。不同权限进入不同的界面,为了防止数据的并发现象的出现,数据的编辑必须由合法用户来操作,并对每个自行车租赁系统的信息进行良好的保密。

系统内容的全面性。公共自行车租赁系统不仅是对自行车租赁系统的基本信息进行管理,还包过自行车租赁系统采购管理,养殖管理等,因此,本系统能够很好的满足管理员对自行车租赁系统的信息进行完善、统一的管理。

系统灵活性。要求有良好的人机界面,操作简单(数据的添加、删除、修改、查询等方便快捷)。

可扩展性。站点的数据承载量、功能模块的单个或整体调整都可以满足变化的需要,这种适应性称为可扩展性。固定资产管理系统的可扩展性,体现在不同用户群需要处理不同类型的数据、数据与用户之间进行交互、数据要符合个用户的使用需求、多表查询系统化、避免性能下降等方面。

易维护性。本系统采用B/S结构,系统的升级只需要在服务器端完成,更新软件系统的数据库、文件也只需要更新服务器端即可。在进行系统的维护时,只需要远程登录服务器系统,减少了维护系统的成本和周期。

图3-1 系统功能结构图

系统租赁基本功能描述如下:

1、用户在线注册。在首次使用租车系统前,先要进行注册以及在账户上存入一定金额这样方便于系统管理以及扣费

2、用户在线租赁自行车。用户可以通过网络,在网络上就可以轻松实现租车,方便快捷

3、租赁费用自动结算。租车结束后,用户停放到指定位置、系统就可以实现自动扣除,省去了人工环节找零等繁琐环节

3.3 系统目标设计

   系统开发的总体任务是实现公共自行车租赁系统化、规范化和自动化,从而达到自行车租赁高效率的目的。使得管理人员能够方便快捷地管理自行车租赁信息以及能够方便快捷的管理自行车信息,从而提高工作效率和经济效益。计算机的资源是受到限制的,因此要充分利用JSP的功能,设计出功能强大的软件,同时要尽可能减少对系统资源的占用,同时对本系统要求有良好的灵活性和完善性。

3.4 系统架构类图

 展开包图,得到类图,它是静态结构图的架构,使各个种类之间的关系,表达了静态联系。公共自行车租赁系统设计与实现类图如下图3-2所示。

图3-2 公共自行车租赁系统类图

3.5 系统交互图

  系统架构类的工作流程:

1、在用户输入请求后,用户界面对象接收到,并发送一个请求到服务代理对象。

2,业务代理对象接收到请求之后,并向受权限管理对象发送的验证权限请求。

3,权限管理对象把得到的验证权限的结果发给业务代理对象后。

4,根据业务代理对象的验证结果进行以下处理:对权限的要求不符合的则返回消息;符合许可的请求时,该请求被转发到业务对象。

5,业务对象进行业务处理。对于持久性的数据服务操作,操作时通过访问数据库访问对象,任何例外情况的处理都给异常处理对象进行处理。最后,把结果信息返回给业务代理对象。

6,业务代理对象将处理信息返回给用户界面。

系统架构类的交互图如图3-3所示:

图3-3系统架构类的交互图

3.6 系统运行环境

技术平台:开源框架。

信息服务器:tomcat 6.0。

开发语言:实现语言java。

开发工具:MyEclipse 8.6

数据库:SQL Server 2008

操作系统:Windows 8.1

系统运行架构如图所示。

图3-4 系统运行架构图

4  系统概要设计

通过对上一节的系统需求分析,本篇主要是对整个系统各个模块的整体设计。包括系统整体的流程图、各个模块的详细流程图,以及模块涉及到的主要模型的E-R图。并附上简单的描述说明。

4.1  系统的数据库链接   

JDBC是Java数据库连接(Java Data Base Connectivity)技术的简称,是为各种常用的数据库提供无缝连接的技术。JDBC定义了Java语言同各种SQL数据之间的应用程序设计接口(API),提高了软件的通用性。

JDBC的关键技术是数据库连接驱动程序,针对这点大量的数据库厂商和第三方开发商

支持Java的JDBC的标准,并开发了不同的数据库JDBC驱动程序。这些驱动程序可以分成四种:JDBC-ODBC Bridge驱动程序、JDBC Native Bridge驱动程序、JDBC-Network Bridge驱动程序、Pure Java JDBC Driver。

本系统正是利用JDBC-ODBC Bridge驱动程序来连接数据库的,连接数据库时用到了JavaBean技术,起代码为:

package yu;

import java.io.*;

import java.sql.*;

public class dbconn {

  String Sd="sun.jdbc.odbc.JdbcOdbcDriver";                //建立一个联接机

          String Sc="jdbc:odbc:yqp";                      //建立一个Odbc源

          Connection con=null;                               //Connection对象

          ResultSet rs=null;           //建立一个记录集

          PreparedStatement prepstmt = null;

          String userName = "sa";

          String password = "";

          public dbconn(){

                  try{

             Class.forName(Sd); //用classforname方法加载驱动程序类

                  }catch(java.lang.ClassNotFoundException e){ //当没有发现这个加载这个类的时候抛出的异常

                          System.err.println(e);     //执行系统的错误打印

                  }

          }

          public ResultSet executeQuery(String sql){      //可以执行添加删等操作

                  try{   con=DriverManager.getConnection(Sc,userName,password);

                         Statement  stmt = con.createStatement(

                         ResultSet.TYPE_SCROLL_SENSITIVE,

                         ResultSet.CONCUR_READ_ONLY);

                         rs=stmt.executeQuery(sql);

                  }catch(SQLException er){

                          System.err.println(er.getMessage());

                  }

                  return rs;

          }

          public int executeUpdate(String sql){               //数据库的更新操作

                  int result=0;

                  try{  con=DriverManager.getConnection(Sc,userName,password);

                          Statement stmt=con.createStatement();

                          result=stmt.executeUpdate(sql);

                  }catch(SQLException ex){

                          System.err.println(ex.getMessage());

                  }

                  return result;

          }

          public void close(){

                  try{          if(con!=null)

                                  con.close();

                  }catch(Exception e){

                          System.out.print(e);

                  }try{

                          if(rs!=null)

                                  rs.close();

                  }catch(Exception e){

                          System.out.println(e);

                  }          }

          public PreparedStatement preparedstatements(String sql) {

                  try{

                  con=DriverManager.getConnection(Sc,userName,password);

                  prepstmt = con.prepareStatement(sql);

                   }catch(SQLException ex){

                  System.err.println(ex.getMessage());

          }

          return prepstmt;          }

}

 在JSP程序中调用这个JavaBean时只需加一条语句:<jsp:useBean id="a" scope="page"

class="yu.dbconn"/> 就与数据库连接上了,可以进行数据调用、修改。

4.2  系统详细设计

根据需求分析,以下根据各个模块介绍本系统中几个比较重要的类模型。

4.2.1  系统功能设计

在设计系统功能时,先完成对应功能的时序图设计和功能描述。以下完成了主要功能的系统设计。

登录功能,时序图如图所示4-1,时序描述见表4-1。

图4-1 登录功能时序图

登录功能的设计,首先用户需要登录系统主页面,填写用户信息,如果登录信息验证正确,跳转到本页面。调用LoginService接受用户输入的登录名和密码,在LoginServlet中通过IsLogin()方法判断登录名和密码是否匹配。再调用LoginDao通过GetUserByLoginName方法,从数据库中获取对应登录名的系统信息。

表4-1登录功能时序描述

编号

类名或方法名

功能描述

1

LoginService

显示登录界面,接受用户输入的登录名和密码,同时进行输入信息验证。登录名由字母、数字和下划线组成,不得超过20个字符;密码可以是除控制字符外的任何字符。

2

LoginServlet

通过IsLogin()方法判断登录名和密码是否匹配。

3

LoginDao

通过GetUserByLoginName方法,从数据库中获取对应登录名的系统信息。

编号

类名或方法名

功能描述

4

主页

显示系统主界面,如果登录信息验证正确,跳转到本页。

编辑个人信息功能,时序图如图所示4-2,时序描述见表4-2。

图4-2 编辑个人信息功能时序图

编辑个人信息功能的设计,首先需要用户登录登录页面,点击链接个人信息跳转到个人信息页面进行个人信息编辑,修改或添加个人信息,保存成功后,显示全部的个人信息。

表4-2编辑个人信息功能描述

编号

类名或方法名

功能描述

1

登陆页面

显示该用户的所有信息页面,该用户可以再此页面查看到填写的个人信息及个人的车库信息和需要车辆的各种服务信息等。

2

个人信息页面

通过方法跳转到显示个人信息页面。

3

编辑个人信息页面

通过此页面可以编辑用户个人的详细信息。

4

主页

修改或添加个人信息,保存成功后,显示全部的个人信息。

搜索服务功能,时序图如图所示4-3,时序描述见表4-3。

图4-3 搜索服务功能时序图

搜索服务功能的设计,登录Main.jsp找到信息后,用户可以返回主页来进行服务商的信息详细的查看。然后ServiceProvidersService方法可以实现让用户点击相关的车辆信息,出入要查找的服务名称或编号来进行查找。通过ServiceProvidersServlet验证要搜索的服务名称或编号是否准确,并把信息反馈给用户。调用ServiceProvidersDao方法获取要查找的服务信息,并且返回结果。

表4-3搜索服务功能功能描述

编号

类名或方法名

功能描述

1

ServiceProvidersService

用户可以点击相关的车辆信息,出入要查找的服务名称或编号来进行查找。

2

ServiceProvidersServlet

验证要搜索的服务名称或编号是否准确,并把信息反馈给用户。

3

ServiceProvidersDao

获取要查找的服务信息,并且返回结果。

4

Main.jsp

找到信息后,用户可以返回主页来进行服务商的信息详细的查看。

发布有关自行车信息功能的设计,首先用户需要登录PublicMessage.jsp接受自行车信息输入的标题和内容,然后在PublicMessageServelt通过insertMessage()方法进行消息内容验证。MessageService中insertMessage()方法负责访问messages表返回发布信息。最后调用MessageDao,显示发布者,发布时间、主题。

表4-4 发布有关自行车信息功能描述

编号

类名或方法名

功能描述

1

PublicMessage.jsp

显示发布信息发送界面,接受自行车信息输入的标题和内容,同时进行输入信息验证,标题不能为空,内容不能为空。

2

PublicMessageServelt

通过insertMessage()方法进行消息内容验证。

3

MessageService

insertMessage()方法负责访问messages表返回发布信息。

4

MessageDao

消息发布成功后,显示发布者,发布时间、主题

修改用户类型信息功能,时序图如图所示4-5,时序描述见表4-4。

图4-5 修改用户类型信息功能时序图

修改用户类型信息功能的设计,首先需要用户登录Uers.jsp显示用户页面的信息列表,并显示用户ID,用户名,用户类型,密码,然后在UersServlet对修改用户页面表单的数据进行清理,获取到要修改的用户类型信息。

表4-4修改用户类型信息功能描述

编号

类名或方法名

功能描述

1

Uers.jsp

显示用户页面的信息列表,并显示用户ID,用户名,用户类型,密码等

2

UersServlet

对修改用户页面表单的数据进行清理,获取到要修改的用户类型信息

3

UersService

接受修改的用户信息,调用LoginDao中update()方法,获取密码修改信息

4

LoginDao

接收修改的内容,访问Logins表,获取新用户类型信息

其它的功能均按以上方法描述,并形成系统设计说明书,这里不再赘述。

4.2.2  数据库的逻辑设计

数据库设计是项目开发的系统设计过程中非常重要的一个关键环节,之所以强调数据库的重要性,是因为如果设计不好,在后来的需求变更、功能扩充、和系统维护时,甚至在系统开发过程中,将会引起比较大的问题,会遇到非常大的困难,大量工作将会重新进行[11]。根据需求分析得到了数个关键抽象概念。

在物理结构设计阶段,首先应该分两步走:

一是,在关系数据库中,确定数据库的物理结构,主要是指存取方法和存储结构。时间和空间效率是对物理结构的评价。.

二是要选取存取方法,并且是正确的关系模式,存取索引方法、聚簇存取、HASH存取方法等都是常用的方法。

依据以上规范数据库的部分表设计如:

kh表:

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

ID

Int

4

自增编号

10

2

khname

VarChar

255

255

sfcard

255

sex

255

tel

255

isvip

255

delstatus

255

khyy表:

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

ID

Int

4

自增编号

10

2

khname

VarChar

50

255

3

sfcard

VarChar

50

255

4

tel

VarChar

50

255

5

intime

DateTime

8

23

6

outtime

VarChar

50

255

7

roomno

VarChar

50

255

8

yytime

VarChar

50

255

roominfo表:

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

ID

Int

4

自增编号

10

2

roomno

VarChar

50

255

3

roomtype

VarChar

300

255

4

isclear

VarChar

50

255

5

iskx

VarChar

50

255

6

area

VarChar

50

255

7

price

VarChar

50

255

8

vipprice

VarChar

50

255

9

roomconfig

VarChar

50

255

10

remark

VarChar

50

255

11

delstatus

VarChar

50

255

rzrecord表:

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

ID

Int

4

自增编号

10

2

roomno

VarChar

50

255

3

intime

Text

16

255

4

outtime

VarChar

50

255

5

yj

VarChar

50

255

6

rzday

VarChar

50

255

7

khsfcard

VarChar

50

255

8

inoper

VarChar

50

255

9

inopertime

VarChar

50

255

10

outoper

VarChar

50

255

11

outopertime

VarChar

50

255

12

status

VarChar

50

255

13

sjje

VarChar

50

255

14

sjday

VarChar

50

255

 sysuser表:

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

ID

Int

4

自增编号

10

2

uname

VarChar

50

255

3

upass

VarChar

50

255

4

tname

VarChar

30

255

5

sex

VarChar

50

255

6

birth

VarChar

50

255

7

mz

VarChar

8

23

8

sfcard

VarChar

50

255

9

tel

VarChar

50

255

10

addr

VarChar

50

255

11

iswork

VarChar

50

255

12

utype

VarChar

50

255

13

delstatus

VarChar

50

255

5  系统关键技术的实现

本节主要针对系统模块实现中技术难点要点的阐述,会具体展示实现功能点的代码,并对涉及到的技术框架做简单的说明。主要包含系统架构的配置、初始化监听器的实现、控制层Action的设计,持久层BaseDao的设计,以及各个模块中使用到的技术要点例如分页实现,Json数据的封装等。

5.1  系统架构的搭建

系统的架构的组织结构,直接决定一个软件产品的性能,以及在开发中的重构程度以及开发效率等。一个好的系统架构,能在很大程度上决定这个产品的性能以及开发走势。本系统采用MVC设计思想,结合SSH做了组合和优化。

5.1.1  服务器启动WEB.XML的环境配置

web.xml是部署整个项目的入口,系统架构的开始定义在这个文件中。在本系统中使用了struts2和spring框架,以及在本系统中定义的一个用于数据初始化的监听器。都在这个文件中定义入口。下面展示配置方式。

1 spring的配置

此处配置了spring的ApplicationContext对象和session懒加载的监听器

<!-- 配置Spring的监听器,用于初始化ApplicationContext对象 -->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext*.xml</param-value></context-param>

<!-- 配置Spring的OpenSessionInViewFilter,以解决懒加载异常的问题 -->

<filter>

<filter-name>OpenSessionInViewFilter</filter-name>

<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>OpenSessionInViewFilter</filter-name>

<url-pattern>*.action</url-pattern>

</filter-mapping>

2  struts拦截器的配置

<!-- 配置Struts2的主过滤器 -->

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

3  数据初始化监听器

<!-- 用于初始化数据的监听器 -->

<listener>

<listener-class>cn.itcast.oa.listener.InitServletContextListener</listener-class>

</listener>

5.1.2 Struts的环境配置

  Struts.xml文件中主要配置的是各个模块中的所请求的action的映射关系,以及本系统设置的几个全局拦截器。

<interceptors>

<!-- 声明一个拦截器 -->

<interceptor name="checkePrivilege" class="cn.itcast.oa.interceptor.CheckPrivilegeInterceptor"></interceptor>

<!-- 重新定义defaultStack拦截器栈,需要先判断权限 -->

<interceptor-stack name="defaultStack">

<interceptor-ref name="checkePrivilege" />

<interceptor-ref name="defaultStack" />

</interceptor-stack>

</interceptors>

<!-- 岗位管理 -->

<action name="roleAction_*" class="roleAction" method="{1}">

<result name="list">/WEB-INF/jsp/roleAction/list.jsp</result>

<result name="addUI">/WEB-INF/jsp/roleAction/addUI.jsp</result>

<result name="editUI">/WEB-INF/jsp/roleAction/editUI.jsp</result>

<result name="setPrivilegeUI">/WEB-INF/jsp/roleAction/setPrivilegeUI.jsp</result>

<result name="toList" type="redirectAction">roleAction_list</result>

</action>

5.1.3 数据库连接及初始化数据

在spring环境中,可以设置dataSourse属性用于数据库的连接,为了松耦合,本系统并未将数据库连接写进spring配置文件中,为而是独立写在一个属性文件中,在spring文件中使用导入的方式,将属性文件中的连接关键属性引入。

1  spring配置文件的引入方式

<!-- 配置数据库连接池(c3p0) -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<!-- 基本信息 -->

<property name="jdbcUrl" value="${jdbcUrl}"></property>

<property name="driverClass" value="${driverClass}"></property>

<property name="user" value="${username}"></property>

<property name="password" value="${password}"></property>

<!-- 其他配置 -->

<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->

<property name="initialPoolSize" value="3"></property>

<!--连接池中保留的最小连接数。Default: 3 -->

<property name="minPoolSize" value="3"></property>

<!--连接池中保留的最大连接数。Default: 15 -->

<property name="maxPoolSize" value="5"></property>

<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->

<property name="acquireIncrement" value="3"></property>

<!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->

<property name="maxStatements" value="8"></property>

<!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->

<property name="maxStatementsPerConnection" value="5"></property>

<!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->

<property name="maxIdleTime" value="1800"></property>

</bean>

2  数据库连接属性文件

jdbcUrl = jdbc\:SQL Server\:///rxq

driverClass = com.SQL Server.jdbc.Driver

username = root

password = 123

5.1.4初始化监听器

在一个系统初始化阶段,需要一些必备的数据,例如管理员账号的设置,以及系统基本的菜单权限的设置等。本监听器实现的就是这个功能,在服务器启动期间,对系统进行初始化,设置菜单权限,建立管理员账户。

public void contextInitialized(ServletContextEvent sce) {

ServletContext application = sce.getServletContext();

// 得到Service的实例对象

ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(application);

PrivilegeService privilegeService = (PrivilegeService) ac.getBean("privilegeServiceImpl");

// 准备所有顶级权限的集合(顶级菜单)

List<Privilege> topPrivilegeList = privilegeService.findTopList();

application.setAttribute("topPrivilegeList", topPrivilegeList);

System.out.println("-- 已准备好顶级权限的数据 --");

// 准备所有权限URL的集合

List<String> allPrivilegeUrls = privilegeService.getAllPrivilegeUrls();

application.setAttribute("allPrivilegeUrls", allPrivilegeUrls);

System.out.println("-- 已准备好所有权限的URL数据 --");

}

5.1.5控制层基础搭建

   控制层是应用程序和页面前台交互的第一层。对于有开发经验的开发者而言,控制层的结构决定了与页面交互的简便性。一个合理的控制层结构,能有效减少对于重复请求的处理代码,进而达到应用程序的简洁性,也能提高开发效率。本系统为此设计了baseAction以及其之类,分析请求的相似性,对常用请求进行封装压缩。在处理请求时即很好的实现了代码复用,又实现了松耦合。

1  在baseAction中获取当前系统用户,以便在整个系统的请求action中都能在其作用域内。

/**

 * 获取当前登录的用户

 *

 * @return

 */

protected User getCurrentUser() {

return (User) ActionContext.getContext().getSession().get("user");

}

2  分页属性

// 页码默认为第1页

protected int pageNum = 1;

public int getPageNum() {

return pageNum;

}

public void setPageNum(int pageNum) {

this.pageNum = pageNum;

}

3  所以的业务逻辑实体在baseAction中定义,并采用spring注入方式初始化。

//定义service的

@Resource

protected RoleService roleService;

@Resource

protected DepartmentService departmentService;

@Resource

protected UserService userService;

@Resource

protected PrivilegeService privilegeService;

4  创建ModelDrivenBaseAction 继承子baseAction,在ModelDrivenBaseAction中采用泛型方式生成各个业务逻辑中不同的业务实体。

public abstract class ModelDrivenBaseAction<T> extends BaseAction implements ModelDriven<T> {

protected T model;

public ModelDrivenBaseAction() {

try {

// 得到model的类型信息

ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();

Class clazz = (Class) pt.getActualTypeArguments()[0];

// 通过反射生成model的实例

model = (T) clazz.newInstance();

} catch (Exception e) {

throw new RuntimeException(e);

}

}

public T getModel() {

return model;

}

}

5.1.6持久层基础搭建

持久层是应用程序和数据库交互的桥梁,所有的业务逻辑在这一层次实现对数据库表的操作。本系统的持久层采用hibernate框架作为介质。为了方便使用持久层,本系统为持久层设计了同样的baseDao类,其余所有dao接口皆实现与这个公用的接口,实现接口中的方法。在不同模块中,有相似的操作动作,即可以使用接口中的方法实现,避免了在各个子模块中写入相似性很大的代码。

BaseDaode 实现:

void save(T entity);

void delete(Long id);

void update(T entity);

T getById(Long id);

List<T> getByIds(Long[] ids);

List<T> findAll();

PageBean getPageBean(int pageNum, HqlHelper hqlHelper);

}

不难发现,在baseDao中设计的接口,都是各个模块中经常性使用的。在设计接口的时候,采用泛型设计,通配兼容各个子模块。

5.1.7应用程序各请求基本入口部署

本系统在应用程序入口层设置一个全局的HomeAction,用于接收布局信息。分别对应页面框架布局中的顶层、左边栏、右边栏以及底层的框架。

public String index() throws Exception {

return "index";

}

public String top() throws Exception {

return "top";

}

public String bottom() throws Exception {

return "bottom";

}

public String left() throws Exception {

return "left";

}

public String right() throws Exception {

return "right";

}

5.2 系统实现界面描述

5.2.1 密码MD5加密

MD5是目前市场上比较流行和安全的加密方式。为了系统的安全性,避免使用明文密码。本系统采用对用户密码进行MD5加密后保存在数据库中。

String passwdMD5 = DigestUtils.md5Hex("1234");

model.setPassword(passwdMD5); // 默认密码为1234,应使用MD5摘要

在以上的实现中,对明文密码进行加密,然后将加密后的密码保存于数据库中。在用户登录的时候,也是将用户传过来的页面明文密码进行加密后与数据库密码比对。

5.2.2 用户登录密码校验

用户登录的时候,从页面输入明文密码,后台接收明文密码。在与数据库密码校验的时候,先对明文密码MD5加密后与数据库密码比对,得出结果。

public User getByLoginNameAndPassword(String loginName, String password) {

return (User) getSession().createQuery(//

"FROM User u WHERE u.loginName=? AND u.password=?")//

.setParameter(0, loginName)//

.setParameter(1, DigestUtils.md5Hex(password))// 要使用MD5的摘要

.uniqueResult();

}

图5-1 系统用户登录的实现界面图

图5-2 系统登录的流程图

5.2.3 管理员功能模块描述

管理员成功登陆以后可以进行学生管理、自行车管理、订单管理、类型管理。

图5-3 管理员功能列表图

图5-4 系统用户管理界面图

图5-5 自行车管理实现界面图

图5-6 管理员订单管理界面图

5.2.4 前台功能模块描述

学生租户进入系统后就可以查看自行车信息,支持分类查看和搜索查看,

图5-7查看自行车信息

用户在选择好自行车进行租赁时需要输入租用日期和归还日期,方便管理员管理,同时系统会自动计算租金价格。

如下图所示为车辆租用的界面:

图5-8 车辆租用的界面

用户的租车详细信息会在我的订单中显示出来,如下图是我的订单界面图:

图5-9 我的订单的界面

6  系统模块测试

6.1  测试原理和方案

6.1.1测试原理

使用软件测试可以有效地帮助开发者确认鉴定软件是否正确,是否完整,是否安全以及质量是否符合要求;软件测试,它是将我们预期希望的输出结果与实际输出结果想比对的一个过程,在这个过程我们可以清晰地发现程序的错误,衡量程序的质量,充分评估程序的开发是否满足需求设计。因此使用软件测试是开发必不可少的一步。

OA系统需要提供使用设置不同的权限和访问,管理员可以为每个功能模块调整访问权限,设置普通用户可以使用某些功能,某些功能是不允许的;并为他们的员工,取消账户和访问权限。提高自行车租赁信息系统的安全性,以防止未经授权的人员未经授权访问系统。针对这些特点,我们测试的主要集中在对流行政办公的需要,设计改造和独立的个人事务的需求和设计来组织测试。

当测试功能验证测试,用黑盒法。该测试将涵盖涉及的自行车租赁系统系统中的所有功能模块。当非功能测试过程将使用边界值法一般将准备两组数据,一组的正常数据,一组非正常数据(数据边界数据或者非法),具有的功能点的流,使用场景方法进行验证测试,树干周围的测试过程中总流量,还要考虑主分流过程的影响,每个过程分别涉及多个测试线,力争最大限度地模拟现场办公。

因此软件测试的目的一方面是为了确认软件的质量,确认软件做了你所期望它做的事,并且以正确的方式来完成这件事;另一方面也是为开发提供反馈信息,提供风险评估。软件测试不仅是测试软件本身,也是测试软件开发过程,保证软件开发过程是高质量的。

6.1.2测试方案

功能测试方案如表6.1.2-1所示。

测试类别

范围广度

验证深度

功能测试

新功能覆盖100%

有效或无效等价类、边界值

图6.1.2-1 功能测试表

6.2  测试环境

6.2.1 Web服务器测试环境

使用Tomcat作为开发调试的Web服务器同样适用于测试。Apache提供的免费开放源代码Tomcat Web服务器可以发布部署程序,从而可以在本机上浏览系统的网页。Tomcat,首先在创建该系统的站点上将IP地址设定为本机默认的地址,一般用localhost代替,也可以选择127.0.0.1。然后通过向向浏览器输入本地动态网页地址,Web服务器会根据浏览器传送的地址找到网页文件,并在服务器端执行该文件后将此文件以HTML文件的形式返回该浏览器。

6.2.2测试环境要求

测试环境的软件、硬件配置需求如表6.2.2-1所示。

设备名称

硬件、软件配置

用途说明

PC机

SQL

系统数据库

PC机

Tomcat 6

系统服务器

PC机

MyEclipse 8.6

开发工具

PC机

JRE 6.0

JAVA运行环境

PC机

CHROME

浏览器

图6.2.2-1 系统测试配置表

6.3  测试的具体对象

本系统的大致使用用户可分为以下两个类型群体,系统管理员,普通用户,因此测试对象如表6.3-1所示。

序号

测试对象

功能描述

1

系统管理员

系统管理员可以选择自己特殊权限进行操作。

2

普通用户

普通可以选择充值、租车、查看订单等操作

图6.3-1 测试对象表

6.4  测试结论

通过需求分析、程序的开发和对系统的测试,证明了本系统还是达到了最终的设计目标,本系统很好的解决了自行车租赁系统中一些常见的问题,本系统在实现了自行车租赁系统的学生管理、订单管理之外,还增加了类型的模块。使自行车租赁系统更加完善了,能够更好的符合学校的使用,相对于其他自行车租赁系统来说有着自己的特点,在原有的基础上,加上了特有的东西,让系统使用起来,用户体验更加完善。

相对其他的自行车租赁系统来说,虽然本系统的功能不够强大,但是本系统的目标明确,目的是能够为自行车租赁系统提供一个量身点做的软件,使自行车租赁系统的特点更加明确,使他们的目标也更加明确,本系统在后期还有更多值得学习与改进的地方,想对于其他系统而言,本系统采用的是java作为开发语言,就目前了解来看,自行车租赁系统使用java开发的软件比率是相当大的,所以此系统的竞争力还是很好的,本系统的服务器是采用开源的tomcat服务器,因为tomcat服务器是免费、小巧,性能稳定,但是不适合在大量用户并发的情况下使用,目前,这是使用tomcat作为初步的使用,在后期,将会面临很多问题,此次系统开发只是提供一个初步的设计而已,在后续的过程中,还有许多路要走,因此,需要学习更多的东西去完善系统,在后期也需要对系统做更全面的测试,使这个系统真正达到最理想化的作用。


参考文献

 [1]葛震宇.试论经济型自行车租赁系统营销策略[D].南京理工大学,2006.

[2]肖俊.公共自行车租赁系统的设计与实现[D],电子科技大学,2012.

[3]候炳辉,刘世峰.信息管理系统[M].电子工业出版社,2004.

[4]翟广宇.基于B/S结构的公共自行车租赁系统[J].兰州工业学校学报,2004(2):19-22.

[5]杜军平,黄杰.SQL Server 2000 数据库开发[M].北京:机械出版社,2001.

[6]金名等.数据库系统设计、实现与管理(第8版)[M]. 北京:清华大学出版社,2012.

[7]萨师煊,王珊.数据库系统概论[M]. 北京:高等教育出版社,2000.

[8]刘伟成.管理信息系统[M]. 北京:清华大学出版社,1998.

[9]邵远.中国自行车租赁业的发展及其模式研究[D],浙江大学,2006.

[10]张艳泽等.数据库原理(第5版)[M]. 北京:清华大学出版社,2011.

[11]薛华城.管理信息系统[M]. 北京:清华大学出版社,2000.

[12]彭伟民.基于需求的公共自行车租赁系统的建模与实现[M].北京:人民邮电出版社,2005.

[13]孙梅,张寿华.数据库原理及应用.[M]. 北京:中国铁道出版社,2006.

[14]朱达欣,蔡丹琳.自行车租赁系统住宿管理系统的设计与实现[J].泉州师范学院学报,2003(4):39-42.

[15]刘学明.饭店客房管理[M].广东:广东旅游出版社,2000.

致谢

历时一个学期,我的毕业设计公共自行车租赁系统终于完成了。在这段时间里,对进行网站整体规划、设计与实现有了比较深入细致地了解。对于网页设计方面,以前在做课程设计时接触过,所以在设计前,我在较短地时间里就很快地对MyEclipse做了较为详细地复习和巩固,这样在设计时,就能很快的上手进行网站界面的设计了。在具体设计时,考虑到网页的整体美观和整齐化,我使用表格、框架来规范页面,收到了比较满意的效果。

在一个网站的设计中,数据库的建立也是很重要的。这里我使用SQL Server来建数据库,因为它操作起来相对比较简单。数据库建好后就用脚本语言实现数据库与网页的连接。

网站后台管理系统的基本功能都已经实现,管理员可以养殖、采购、供应商、销售、员工等内容进行管理。遗憾的是由于时间、知识能力等各种因素的影响,本网站客户端的小部分程序没有完全实现,惆怅何似!

通过这次毕业设计,我基本明确了一个网站系统从设计到开发的大致流程和重点关注的方向,对各个主流设计软件有了很深刻的了解。同时对JSP技术也有了基本的了解和掌握,使我受益匪浅。

在这几个月中,从当初的懵懵懂懂,到现在的完成,期间不仅是分析与设计的过程,更是学习的过程。毕业设计让我将三年半的所学知识从书面的了解,到认真的复习,再到设计过程中的应用。经过这三个阶段,对于大学本科所学的知识,不再是考试以前知道的,考后就会忘记,让我真正的达到了融会贯通,当然,计算机各个相关领域的知识是很渊博的,与其他专业相比知识的更新更是迅速的,不可能在这三个月内都全部掌握,但在设计的过程中,做到处处有知识,处处皆推敲,这样的过程才是真正的学习与提高。在这三个月中,所学的,所看的,所用的虽然都是以前的所学,但为了考试而学和真正的应用而学让我的所得真正的有很大的不同。实践是检验真理的唯一标准,我们对于科学,对于专业的态度就是要做到这一点。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com