基于JAVA的汽车维修管理系统的实现

获取项目源文件,技术交流与指导联系Q:1225467431

摘要:随着信息化技术的发展,信息化技术已经被广泛应用于很多领域,汽车维修行业就是其中的一个典型。汽车维修行业信息化的一个直接的影响就是从管理、经营模式以及对技术人员的综合素质的要求。在中国,汽车维修行业也逐渐从传统的管理模式走向信息化的管理模式。这类软件的优势就在于一方面改变了以往的手工操作模式,变繁琐的手工劳动为计算机自动管理,节省了人力、物力和时间,实现办公自动化,提高了管理水平;另一方面改变了旧管理模式的杂乱、无条理性,实现有序的科学管理,并增加了管理的保密性和安全性。本文结合实际汽修管理系统的情况,同时考虑到目前我国汽修管理人员文化层次较低的情形,提出基于Java的汽修管理系统。

关键词:WEB;JAVA;汽车维修管理;MySQL

The realization of the car maintenance management system based on JAVA

Student majoring in Automation   

Tutor     Lecturer  

AbstractWith the development of technology of the Internet, technology of the information has been used in many areas during the recent years,to be one of them,the repairment of the automobile seems to be very popular.One of the direct impact from the management of vehicle repair industry information is the requirements of the operation quality of person.In China, the automotive repair industry gradually changed from traditionalone to a information technology industry. One of the advantages of this kind of such software is to change the terms of the manual operation mode, to change from the tedious manual labor to the computer to be automatically managed, which will save labor, resources and time. The implementation of office automation and improvement of the management will also turn the management from clutter and free of rational one toscientific achieve and orderly one,and make management more and more confidentiality and security. In this paper, in the case of actual management system, taking into account of the current of low level repair management situation, come up with the proposed Java-based management system.

Key words: WEB; JAVA; management of Vehicle repair; MySQL

 

 

1  绪论

1.1  课题简介

  该课题以一个“基于JAVA的汽车维修管理系统”为例,按客户要求对某汽车维修企业要对本单位工作中的主要业务数据进行管理。对每次维修、更换零件的记录、修理人、修理时间、更换零部件的入库、出库管理、按修理费用打印发票、按修理工的维修质量、时长给出计时工资、打印工资报表、制定季度零件订货计划等细节要求。随着多媒体、通信及计算机网络技术的发展,传统的汽车维修管理措施已经无法满足大量的操作需求,而信息化技术被被称为最完善的技术,已经被广泛应用于很多管理领域,汽车维修这个行业就是其中的一个典型例子。某些情况下维修管理极复杂,有大量的不同需求的客户需要进行特殊对待,传统的管理模式造成员工操作错误或数据更新不及时;各种维修零件也比较多,仓库管理和员工管理也很难同步。为了解决这些错误,提出基于JAVA的汽车维修管理系统的实现。传统的汽车维修管理系统是在管理员手动录入汽车维修信息的基础上,对大量数据进行操作,要求管理者特别谨慎而防止出错,因此管理员的工作量非常大且交互性差,数据查找统计起来也比较麻烦。运用了JAVA和数据库管理信息就比较方便,对数据进行进一步的处理也非常方便,而且对功能能进行拓展,使操作员从大量的劳动中解脱出来,而专注于与顾客的交流。该系统可以对本单位工作中的主要业务数据进行管理、对每次维修、更换零件的记录、修理人、修理时间、更换零部件的入库、出库管理、按修理费用打印发票、按修理工的维修质量、时长给出计时工资、打印工资报表并能制定季度零件订货计划。

1.2  设计背景及意义

  由于使用该系统的人员为汽车修理厂的员工,他们对计算机使用都比较陌生,不会什么比较复杂的系统操作,所以该系统的界面操作应该简洁明了,层次要简单,数据录入界面字段要和各类手填单据单字段一致,容易修改,对字段验证提示;查询时要比较详细地展示用户的需求数据;编制并显示季度零件订货计划且订货量可由用户输入或修改;打印发票或者员工工资表时可以修改报表。课题难点:怎么样做到前后台很好的分离,很好的使用MVC设计模式,后台数据库的设计决定整个系统的效率,采用哪些Java技术才能提高开发效率。

  汽车维修管理系统在不断地完善,但并不意味着操作员可以完全不顾数据的结构,相反它将进一步要求用户提高自身的能力。管理系统同时也要变得更人性话,同时满足初次使用者的一般错误。

1.3  设计方法

  本程序前台采用JSP技术进行开发,后台使用Servlet来对数据进行操作。尽管目前有许多管理系统不是基于网络的,但是随着时代发展趋势,网路交互将被更多的使用。一个服务器可以配置多个用户端,以便使得大中型的汽车维修公司可以内部交互。

  后台数据库采用MySQL数据库,该数据库比较小,功能也很全面,而且是一款相当便宜的数据库系统,对硬件的要求也不是很苛刻,从而降低了软硬件的成本,能方便的构建中小型公司的数据库,操作容易上手,使用简单。为了适应日新月异的数据库技术,有相当多的软件工程师逐渐地从桌面数据库软件诸如SQLServer,转到使用MySQL,虽然说MySQL并不是SQLServer的对手,但许多服务提供商都支持MySQL,并视之为便宜而有效率的替代品。

  MySQL数据库服务器管理和开发工具使用Navicat。Navicat MySQL是一个强大的管理器,它可以与任何3.21或以上版本的MySQL一起工作,并支持大部分的MySQL最新功能,包括触发器、存储过程、函数、事件、视图、管理用户等等。

 

2  需求分析

2.1  调查研究

2.1.1  用户需求

该系统的主要流程是汽车维修厂系统管理员对维修汽车的登记以及维修费用、工资核算的处理。

起始欢迎页面

数据登记页面

l 汽车登记单

l 汽车修理单

l 零件入库单

l 零件出库单

数据查询页面

l 查询登记单

l 查询修理单

l 查询零件库存

数据处理页面

l 编制并显示季度零件订货计划

l 打印发票

l 打印修理工工资月报表

    数据登记:登记功能用于把各类手填单据中的数据及时登记到系统将要定义的表中,还  要求能进行改。这些单据包括汽车登记单、汽车修理单、零件入库单和零件出库单。

查询:能查询登记单、修理单、汽车、车主、修理工、零件库存的有关数据。

编制并显示季度零件订货计划,订货量可由用户输入或修改。

打印发票:发票中除了包含顾客、汽车及修理项目等数据外,还要计算出修车费,修车费包括修理和 零件费

打印修理工工资月报表

2.2  操作流程

2.2.1  管理流程

 

2-1 系统结构示意图

2.2.2  汽车登记单模块流程

汽车登记单输入客户名、车牌号,存储到数据库中,如果插入失败,返回报错。

    流程如图2-2所示:

  

2-2  登记汽车登记单流程

2.2.3  汽车修理单模块流程

汽车维修单输入车牌号、修理所需配件、修理工工号、修理费用,存储到数据库中,如果插入失败,返回报错。

流程如图2-3所示:

 

2-3 汽车修理单模块流程

2. 2.4零件入库单模块流程

在汽车零件入库单输入配件名、配件数量,存储到数据库中,如果更新失败,返回报错。

流程如图2-4所示:

 

 

 2-4 零件入库单模块流程

2. 2.5零件出库单模块流程

在零件出库单中输入零件名、零件数量,更新到数据库中,如果更新失败,返回报错。

流程如图2-5所示:

 

2-5 零件出库单流程

2.2.6查询/修改登记单模块流程

根据查询登记单表单查询数据库中对应信息,如果查询失败,返回报错;查询成功,则根据修改登记单将信息更新到数据库中。

流程如图2-6所示:

 

2-6 查询/修改登记单流程

2.2.7查询/修改修理单模块流程

根据查询修理单表单查询数据库中对应信息,如果查询失败,返回报错;查询成功,则根据修改修理单将信息更新到数据库中。

流程如图2-7所示:

 

2-7 查询/修改修理单流程

2.2.8查询/修改零件库存模块流程

根据查询零件库存表单查询数据库中对应信息,如果查询失败,返回报错;查询成功,则根据修改零件库存表单将信息更新到数据库中。

流程如图2-8所示:

 

2-8查询/修改零件库存流程

2.2.9编制并显示季度零件订货计划模块流程

      根据季度零件订货计划表输入数据查询数据库,查询失败则返回报错;成功则根据手动输入表单,打印订货计划。

流程如图2-9所示:

 

2-9 编制并显示季度零件订货计划流程

2.2.10打印发票模块流程

据客户车牌号对数据库进行查询费用,查询失败则返回报错;成功则打印发票。

流程如图2-10所示:

 

2-10打印发票流程

2.2.11打印修理工工资月报表模块流程

    根据修理工输入表单项查询数据库,查询失败则返回报错;成功则对查询到的数据进行计算、打印。

流程如图2-11所示:

 

2-11打印修理工工资月报表流程

2.3环境配置

2.3.1硬件条件

务器:

  1. CPU:频率2.0GHz以上
  2. 内存:1GB以上
  3. 网络:1Mbps以上宽带接入

客户机:

  1. CPU:奔腾4.0及其以上
  2. 内存:256M及其以上
  3. 网络:512Kbps以上宽带接入

2.3.2软件条件

服务器:

  1. Windows 2000及以上(>5.0)
  2. Apache Tomcat Server 6
  3. MySQL 5.1
  4. Navicat Lite
  5. Java Runtime Environment 6

客户机:

  1. IE 浏览器

2.3.3开发平台

MyEclipse

MyEclipse是一个十分优秀的用于开发Java, J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错。经过了MyEclipse 8.5 M1和MyEclipse 8.5 M2两个版本,MyEclipse Enterprise Workbench 8.5 for Eclipse 3.5.2终于在2010年3月28号正式发布了!在官方网站上 MyEclipse 8.5 可以下载了,该版本集成了 Eclipse 3.5.2,提升了团队协作开发、开发周期管理以及 Spring 和 Hibernate 的更好支持。

 1. JavaEE模型

 2. WEB开发工具

 3. EJB开发工具

 4. 应用程序服务器的连接器

 5. JavaEE项目部署服务

 6. 数据库服务

 7. MyEclipse整合帮助

对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的JavaEE集成开发环境,支持代码编写、配置、测试以及除错,MyEclipse6.0以前版本需先安装Eclipse。MyEclipse6.0以后版本安装时不需安装Eclipse。

MySQL

MySQL是一个小型关系型数据库管理系统.目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放的源代码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

1.使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。

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

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

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

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

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

7.提供TCP/IP、ODBC和JDBC等多种数据库连接途径。

8.提供用于管理、检查、优化数据库操作的管理工具。

9.可以处理拥有上千万条记录的大型数据库。

Navicat Lite

NavicatTM是一套快速、可靠并价格相宜的资料库管理工具,大可用来简化资料库的管理及降低系统管理成本。NavicatTM的设计符合资料库管理员、开发人员及中小企业的需求。Navicat是以直觉化的使用者图形界面所而建的,让你可以以安全且简单的方式建立、组织、存取并共用资讯。Navicat 提供商业版 Navicat Premium 和 免费的版本 Navicat Lite,免费版本的功能已经足够强大了。Navicat 支持的数据库包括 MySQL、Oracle、SQLite、PostgreSQL等。

Tomcat

Tomcat运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的tomcat标志改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。Tomcat 是一个轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,可以这样认为当在一台机器上配置好Apache 服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat时,它实际上作为一个与Apache 独立的进程单独运行的。当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP页面和Servlet。另外Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过Tomcat处理静态HTML的能力不如Apache服务器。

 

3 概要设计

3.1系统架构

 

3-1 WEB服务器架构

应用层:系统与用户交互的界面、各功能模块的交互、流程实现。应用层在MVC模型中包含了表示层与控制层。

业务支撑或业务方法层:为应用层提供业务逻辑接口与实现。从开发的角度来说,应用层不直接含有业务处理逻辑。对业务的处理由业务支撑或业务方法层提供。该层对业务逻辑接口提供实现。应用层不需知道实现的细节,应用层以接口调用可以很好的应对实际业务处理的变更。业务支撑层在MVC模型中为模型层或模型适配。

l 数据访问与持久层:提供数据库连接、访问、与持久化数据库数据。

l 数据库:系统业务数据的存储。

l WEB服务器是整个应用程序的运行环境,是接受用户HTTP请求与服务响应的接口。

3.2数据登记模块

     用于把各类手填单据中的数据及时登记到系统将要定义的表中。这些单据包括汽车登记单、汽车修理单、零件入库单和零件出库单。

3.2.1汽车登记单

车登记单主要记录车主姓名、汽车牌照等相关的顾客登记信息。汽车牌照为不能重复的字段。

3.2.2汽车维修单登记

车维修单主要登记以汽车牌照号为索引的,记录修理使用的零件及其数量、修理工得工号和修理用时等相关信息。

3.2.3零件入库单登记

件入库单主要登记仓库管理中的每次零件入库信息,这些信息主要包括零件名零件入库量、零件进货价格等相关信息。

3.2.4零件出库单

件出库单主要登记仓库管理中的每次零件出库信息,这些信息主要包括零件名,零件出库量等相关信息。

 

3.3数据查询模块

3.3.1登记单查询

记单查询主要包括登记时顾客相关信息,有顾客姓名和车牌号,同时提供修改顾客姓名和车牌号信息等功能。

3.3.2修理单查询

理单查询主要包括修理单登记时的车牌号,零件名和其使用数量,修理工工号。

3.3.3零件库存查询

件库存查询主要包括仓库中所有的已有零件和其数量,并显示成列表形式。

3.4 打印发票模块

3.1 

3.2 

印发票模块中除了要包含顾客、汽车及修理项目等数据外,还要计算出修车费,修车费包括修理费和零件费,按下列各式计算:

1、零件费=∑(零件价格×耗用数量)

2、修理费=小时工资×修理工时×3

3、总计=零件费+修理费

3.5打印修理工工资月报表模块

印月报表输出所有员工的工资情况,根据修理评价的好坏对每次的修理用时再进行统计,最终输出所有员工的工资所得。

3.6编制并显示季度零件订货计划模块

模块实现找出要订货的零件,订货条件为:零件库存量<最低库存量。

同时订货量可由用户输入或修改,之后显示最终订货计划。

3.7欢迎模块

模块以友好显示为目的,人性化的方式迎接使用者。

详细设计

4.1数据库详细设计

4.1.1客户注册表 clireg

名为clireg,保存客户信息。

4.1 客户注册表

字段名

类型

注释

id

Int(10) [PK, AUTO_INCREMENT]

用户ID,用户唯一标识

cliName

Char(10)

用户名

carNum

Char(10)

车牌号

4.1.2汽车修理单表rereg

名为rereg,保存修理信息。

4.2 汽车修理单表

字段名

类型

注释

ID

Char(10)

ID

carNum

Char(10)

车牌号

partName

Char(10)

修理用零件名

partAm

int(10)

修理用零件数量

workerNum

Char(10)

修理员工工号

workerTime

Int(10)

修理用时

4.1.3零件库存表

名为partsto,保存零件库存信息。

4.3零件库存表

字段名

类型

注释

partName

Chnt(10)

零件名

partStoAm

Int(10)

零件现有库存

partOrd

Int(10)

供求消耗预定数量

partPrice

Int(25)

零件价格

4.1.4零件预定表

名为partord,整理预定零件信息。

4.4 零件预定表

字段名

类型

注释

PartName

Char(10)

零件名

PartOrd

Int(10)

预定数量

4.1.5员工表

名为workersto,存储员工信息。

4.5 员工数据库表

字段名

类型

注释

workerNum

Char(10)

员工工号

workerName

Varchar(10)

员工姓名

workerTime

Int(32)

工时

 

 

4.2界面设计

4.2.1 欢迎界面

首页界面

开该系统首页,显示欢迎界面。此界面含有导航栏,包含所有功能的导航。

 

4-1 首页欢迎界面

 

4.2.2 数据登记界面

(1)汽车登记界面

记汽车牌照与客户姓名等信息。

 

4-2 汽车登记单界面

 

(2)汽车修理登记界面 

 

4-3 汽车修理登记界面

 (3)零件入库界面

 

4-4 零件入库界面

 

 

 

 

(4)零件出库界面

 

4-5零件出库界面

4.2.3查询界面

(1)查询登记单界面

 

4-6 查询登记单界面

(2) 查询修理单界面

 

4-7修改登记单界面

3)查询零件库存界面

 

4-8 查询零件库存界面

4.2.4编制订货计划界面

 

4-9编制订货计划界面

4.2.5打印发票界面

4.1 

4.1.1 

4.1.2 

4.1.3 

4.1.4 

 

4-10打印发票界面

 

4.2.6打印工资报表界面

 

4-11 打印工资界面

4.3部分功能实现原理

4.3.1实现清晰的导航栏,友好的访问页面框架

  为了实现清晰的导航栏,使页面跳转更加方便使用iframe框架功能页面的切换全部写在iframe中,从而方便隐藏地址,嵌入跳转,提高界面响应速度。

<div id="mainContent">

<iframe frameborder=0 scrolling="auto" width="100%" height="100%"

src="welcome.jsp" name="frame" style="text-align: center"

align="middle"></iframe>

</div>

4.3.2汽车维修单登记

    汽车维修单登记会读取多个数据库表信息,同时要验证使用零件是否在零件库存表中存在、零件数量是否足够完成这次修理,修理工是否存在,修理用时是否为正数,还有修理质量将会再次影响到最终的带权维修用时,零件的使用也将影响到零件的进货计划,修理费用和库存信息等。这些操作会影响或参考到汽车登记表、零件库存表、员工表,为在各个表之间无差错的完成任务,部分重要代码如下:

JSP表单页面:

<form action="servlet/page2_2" method="post">

<div class="static-index">

添加汽车修理单

</div>

<br />

<div class="static-index">

车牌号:       

<input type="text" name="carNum">

</div>

<br />

<div class="static-index">

零件名:       

<input type="text" name="partName">

</div>

<br />

<div class="static-index">

使用零件数量: 

<input type="text" name="partAm">

</div>

<br />

<div class="static-index">

修理工号:     

<input type="text" name="workerNum">

</div>

<br />

<div class="static-index">

修理用时:     

<input type="text" name="workerTime">

</div>

<br />

<div class="static-index">

维修质量:      

<INPUT type="radio" name="Quality" value="a" checked="ok">

<INPUT type="radio" name="Quality" value="b">

<INPUT type="radio" name="Quality" value="c">

</div>

<br />

<div class="static-index">

<input type="submit" value="确认添加汽车修理单" class="submit">

</div>

</form>

Servlet处理表单

public class page2_2 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");//字符集转换

response.setCharacterEncoding("UTF-8");//字符集转换

//提取表单信息

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

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

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

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

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

String quality = request.getParameter("Quality");

DO dbo = new DO();//使用功能

boolean i = dbo.insertRereg(carNum, partName, partAm, workerNum,

workerTime, quality);//执行操作

if (false == i) {

response.sendRedirect("../page_err.jsp");//数据库错误,则跳转到出错提醒页面

} else {

response.sendRedirect("../page_ok.jsp");//操作正确,跳转到操作正确提醒页面

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

public void init() throws ServletException {

// Put your code here

}

}

具体的对数据库操作:

// 插入汽车维修单

public boolean insertRereg(String carNum, String partName, String partAm,

String workerNum, String workerTime, String quality) {

if (!partExist(partName)) {//检查零件是否存在

return false;

}

if (!partEn(partName, partAm)) {

return false;//检查零件是否足量

}

if (!workerExist(workerNum)) {

return false;//检查修理工是否存在

}

if (Integer.parseInt(partAm) < 0) {

return false;//检查所需的零件数是否为正

}

if (Integer.parseInt(workerTime) < 0) {

return false;//检查修理用时是否为正

}

int add = Integer.parseInt(partAm);

String sql = "insert into rereg(carNum,partName,partAm,workerNum,workerTime) values('"

+ carNum

+ "','"

+ partName

+ "','"

+ partAm

+ "','"

+ workerNum + "','" + workerTime + "')";

String sql2 = "select * from partSto where partName='" + partName + "'";

String sql3 = "select * from partSto where partName='" + partName + "'";

String sql4 = "select * from workersto where workerNum='" + workerNum

+ "'";

Connection conn = null;

Statement st = null;

ResultSet rs = null;

conn = DBConn.getConn();

try {

st = conn.createStatement();

st.executeUpdate(sql);

rs = st.executeQuery(sql2);

if (rs.next()) {

//改动零件库存

int num2 = rs.getInt("partStoAm");

int c = 0 - add;

int b = c + num2;

st.executeUpdate("UPDATE partsto SET partStoAm='" + b

+ "' WHERE partname='" + partName + "'");

}

rs = st.executeQuery(sql3);

if (rs.next()) {

//修改订货计划

int num = rs.getInt("partOrd");

int a = add + num;

st.executeUpdate("UPDATE partsto SET partOrd='" + a

+ "' WHERE partname='" + partName + "'");

}

rs = st.executeQuery(sql4);

if (rs.next()) {

//增加修理工工时

int old = rs.getInt("workerTime");

//按修理质量增加工时

if (quality.equals("a")) {

add = add * 3;

}

if (quality.equals("b")) {

add = add * 2;

}

if (quality.equals("c")) {

add = add * 1;

}

int a = add + old;

st.executeUpdate("UPDATE workersto SET workerTime='" + a

+ "' WHERE workerNum='" + workerNum + "'");

}

} catch (SQLException e) {

return false;

} finally {

DBConn.close(conn, st, rs);

}

return true;

}

4.3.3编制订货计划

     编制订货计划的过程中首先要先粗略统计一下以往的零件使用情况和现有库存,值为 “已使用数量-库存”,如为正数则确定,为负数则置零。第二部为手动修改订货计划,最后才编制出最终订货单。

JSP页面

<div><a href="servlet/page8_1">粗略统计供求</a></div>

    <div><a href="page8_2.jsp">手动修改订货计划</a></div>

<div><a href="servlet/page8_3">显示最终订货计划</a></div>

第一步,粗略统计:

public class page8_1 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

String sql = "select * from partsto";

DO do1 = new DO();//使用功能

Connection conn = null;

Statement st = null;

ResultSet rs = null;

conn = DBConn.getConn();

try {

st = conn.createStatement();

rs = st.executeQuery(sql);

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out

.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

out

.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");

out.println("<HTML>");

out.println("  <HEAD><TITLE> </TITLE></HEAD>");

out.println("  <BODY>");

while (rs.next()) {

int order = 0;

int partOrd = 0;

int partStoAm = 0;

String partName = rs.getString("partName");

partOrd = rs.getInt("partOrd");

partStoAm = rs.getInt("partStoAm");

// order = 0;

if (partOrd > partStoAm) {

order = partOrd - partStoAm;

}

do1.partOrdUpdata(partName, order);//将粗略统计的信息单独保存起来

out.print("<br><br>     零件名:   "

+ partName);

out.print("       预定零件数量: " + order);

}

out.println("  </BODY>");

out.println("</HTML>");

out.flush();

out.close();

} catch (SQLException e) {

e.printStackTrace();

} finally {

DBConn.close(conn, st, rs);

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

public void init() throws ServletException {

// Put your code here

}

}

DAO中的partOrdUpdata功能:

// 粗略统计订货

public boolean partOrdUpdata(String partName, int partAm) {

Connection conn = null;

Statement st = null;

ResultSet rs = null;

if (partAm < 0) {

return false;//检查统计值是否为正数

}

conn = DBConn.getConn();

try {

st = conn.createStatement();

rs = st.executeQuery("select * from partord where partName='"

+ partName + "'");

if (rs.next()) {

st.executeUpdate("UPDATE partord SET partOrd='" + partAm

+ "' WHERE partName='" + partName + "'");

} else {

st

.executeUpdate("insert into partord(partName,partOrd) values('"

+ partName + "','" + partAm + "')");

}

} catch (SQLException e) {

return false;

} finally {

DBConn.close(conn, st, rs);

}

return true;

}

第二步,手动修改订货计划

public class page8_2 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

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

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

DO do1 = new DO();

int a = Integer.parseInt(partNum);

boolean i = do1.partOrdUpdata(partName, a);//手动更新

if (false == i) {

response.sendRedirect("../page_err.jsp");

} else {

response.sendRedirect("../page_ok.jsp");

}

}

第三步,显示最终计划

public class page8_3 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

String sql = "select * from partord";

Connection conn = null;

Statement st = null;

ResultSet rs = null;

conn = DBConn.getConn();

try {

st = conn.createStatement();

rs = st.executeQuery(sql);

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out

.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

out

.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");

out.println("<HTML>");

out.println("  <HEAD><TITLE> </TITLE></HEAD>");

out.println("  <BODY>");

while (rs.next()) {

String partName = rs.getString("partName");

int partFinOrd = rs.getInt("partOrd");

out.print("<br><br>     零件名:   "

+ partName);

out.print("       预定零件数量: " + partFinOrd);

}

out.println("  </BODY>");

out.println("</HTML>");

out.flush();

out.close();

} catch (SQLException e) {

e.printStackTrace();

} finally {

DBConn.close(conn, st, rs);

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

public void init() throws ServletException {

// Put your code here

}

}

5系统测试测试方法

5.1 测试方法

以服务器为中心的JAVAWeb的应用与可执行程序的测试不同,以浏览器为客户端的方式,要求Web应用能适应不同的软件运行环境,和硬件的兼容性。由于使用JAVA作业的应用有一次编译、处处运行的优点,使应用与环境的不同可以很大程度的分离开来,使得兼容能力大大增强,这使得测试起来比较方便,但是由于网络协议的不同,还是要注意客户端之间的差别,因此出来的安全性问题和同步性问题也显得十分重要。这里也要注意到字符集的采用应当使得不同浏览器都兼容。

Web测试主要分为以下几个方面:

l 功能测试

  1. 链接测试

      链接是web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。此应用采用的导航栏作为功能链接的方案,使得应用的功能一目了然。链接测试可分为三个方面,首先测试所有链接是否按指示的那样确实链接到了该链接的页面;其次测试所指向的网页是否正确;最后确保web应用系统上没有独立的页面。还有只有知道正确的url地址才能访问,也应当注意应用各个部分之间的先后逻辑问题。

  1. 表单测试

      当用户给web应用系统管理员提交信息时,就需要使用表单操作,例如使用者登记信息提交、查询数据等。在这种情况下,我们必须测试提交操作的完整性,以及校验所提交给服务器的数据的正确性。例如:提交修理单时填写的修理工是否存在、修理用时是否为正数,插入信息是否与数据库字段类型相匹配。如果对数据库已有数值进行操作,要见车是否存在和操作之后的数据是否规范。

  1. 字符集测试

由于数据库和JAVA程序、网页显示之间的字符集要一一单独设置,而且网页和数据库中都涉及到中文字符集,为了防止乱码的产生,要明确所使用的字符集。这里采用UTF-8字符集作为整个应用的默认值,在必要时使用转码防止乱码,测试时在网页输入输出与数据库之间的操作中截取中文符号进行分段式检查。

  1. 设计语言测试

       web设计语言版本的差异可以引起客户端或服务器端严重的问题,例如使用哪种版本的html等。当在分布式环境中开发时,开发人员都不在一起,这个问题就显得尤为重要。除了html的版本问题外,如出现不同的脚本语言也要进行统一设定。

  1. 数据库测试

       web应用技术中,数据库起着非常重要的作用,数据库为web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供存储空间。在web应用中,最常用的数据库类型是关系型数据库,可以使用Mysql对信息进行处理。在使用了数据库的web应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试。

l 性能测试(连接速度测试、负载测试、压力测试)。

l 可用性测试(导航测试、图形测试、内容测试、整体界面测试)。

 

 

 

 

5.2遇到的问题和解决方法

系统测试过程中,遇到的问题主要如下:

5.2.1文本会议中文乱码

现过程:

在测试过程中发现网页表单填写的是中文字符,当数据输入到数据库中时会乱码,而英文显示正常;或者数据库测试时字段为中文,而提取到页面显示时显示的是乱码产生字符集错误。

解决方法:

考虑到JSP页面、JAVA程序、数据库之间的编码可能不统一是造成乱码的原因,查找相关资料,先分2个方向测试:1、数据从JSP提交到Mysql,将从表单获取的数据在JAVA里再显示一次,看是否正常,存入到数据库中再查看是否正确。2、数据从Mysql到JSP页面显示,数据库中手动插入还有中文字符的数据,提取到JAVA类中显示看是否正确,再显示到页面中,看是否正确,从中可以分析出发生错误的环节。

具体的解决方法是:

1、 JSP页面中的page头文件中写入“pageEncoding="UTF-8"”。

2、 JAVA中把编码格式改成UTF-8:

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

3、 在数据库创建时将字符集设置成UT8-8。

总结

时三个多月,基于JAVA的汽车维修管理系统终于开发完毕了。经过种种挑战之后,这个管理系统的基本功能已经实现汽车登记单、汽车修理、零件入库单、零件出库单、查询登记单、查询修理、查询零件库存、编制订货计划、打印发票、打印工资报表等。但考虑到实际应用是会发生的种种特殊情况,由于能力欠缺,时间有限,可能会发生的错误不能一一考虑到,为做到尽善尽美还应继续求学。

在完成这次毕业设计的过程中,遇到不会的地方,查找了大量资料,也参考了大量前人的代码,努力分析消化,从而转变为自己的知识,用以提高实际操作的能力。学习中了解到理论和实际的不同,了解理论知识必须服从实际应用,以详细的分析来为之后的设计打基础,良好的设计又可以使得代码更完善。在遇到自己不会的问题时,及时向老师请教,或者翻阅网络资料,以解决问题的同时培养自己的能力为目标,为以后打基础。

由于本人知识浅薄,设计错误在所难免,敬请批评指正。

致谢

本论文在指导老师的细心指导和严格要求下完成,从课题选择到设计构思和内容,无不流露着老师的心血和汗水,在将近四年的本科学习与生活中,也始终体会到老师的帮助和嘱咐,才能有学生的成功。

这次做论文的经历也会使我学到了很多,我感受到做论文也是人生路上的一次学习,在这期间培养了独立自学能力,为终身学习打好了基础,也锻炼了自己的表达能力和总结能力,与老师的沟通可以更加的有成效。相信这次毕业设计也是踏入社会的一个好的开端。万事开头难,但贵在坚持,只有不断的学习,不断的总结,才能更好的完善人生这个程序。同时感谢指导老师的帮助,启明星般帮我指点了方向,正是有了他的悉心帮助和支持,才使我的毕业论文工作圆满完成。

感谢在关键时帮助过我的老师,同学和朋友。

参考文献:

[1] 王鹏.零基础学Java[M].北京:机械工业出版社,2008(1).

[2] 李兴华.Java开发实战经典[M].北京:清华大学出版社,2009(1).

[3] 王鹏,何昀峰.Java Swing图形界面开发与案例详解[M].北京:清华大学出版社,2008.

[4] 袁然,郑自国,邹丰义.Java案例开发集锦[M].北京:电子工业出版社,2005.

[5] 陆正武,张志立.Java项目开发实践(第2版)[M].北京:中国铁道出版社,2005.

[6] 张靓,顾慧敏.Java案例开发][M].北京:中国水利水电出版社,2005.

[7] 耿祥义,张跃平.Java设计模式[M].北京:清华大学出版社,2009.

[8] 刘新.Java开发技术大全[M].北京:清华大学出版社,2009.

[9] 刘万军,郑少京,王松波等.Java 6 程序设计实践教程[M].北京:清华大学出版社,2009.

[10] 张广斌,孟红蕊,张永宝.Java课程设计案例精编[M].北京:清华大学出版社,2007.

[11] 龚沛曾,陆慰民,杨志强. 程序设计简明教程(6.0版)[M].北京:高等教育出版,2007.

[12] Roodbergen, K.J.Vis, I.F.A. A model for warehouse layout[J].IIE Transactions vol.38, 2006(10):799-811.

[13] Nitin Singh. Emerging technologies to support supply chain management[J].Communications     of the ACM,2003(9).

猜你喜欢

转载自www.cnblogs.com/rdutdhtfj/p/12657467.html
今日推荐