1、本科生毕业论文(设计)题 目: 姓 名: 学 院: 专 业: 班 级: 学 号: 指 导教师: 职称: 目录要1关键词1Abstract1Key words11 绪论21.1 课题简介21.2 设计背景及意义21.3 设计方法22 需求分析32.1 调查研究32.1.1 用户需求32.2 操作流程32.2.1 管理流程32.2.2 汽车登记单模块流程42.2.3 汽车修理单模块流程42.2.4 零件入库单模块流程42.2.5 零件出库单模块流程52.2.6 查询/修改登记单模块流程52.2.7 查询/修改修理单模块流程52.2.8 查询/修改零件库存模块流程62.2.9 编制并显示季度零件订货
2、计划模块流程62.2.10 打印发票模块流程62.2.11 打印修理工工资月报表模块流程72.3 环境配置72.3.1 硬件条件72.3.2 软件条件72.3.3 开发平台73 概要设计93.1 系统架构93.2 数据登记模块93.2.1 汽车登记单93.2.2 汽车维修单登记93.2.3 零件入库单登记93.2.4 零件出库单93.3 数据查询模块103.3.1 登记单查询103.3.2 修理单查询103.3.3 零件库存查询103.4 打印发票模块103.5 打印修理工工资月报表模块103.6 编制并显示季度零件订货计划模块103.7 欢迎模块104 详细设计114.1 数据库详细设计11
3、4.1.1 客户注册表 clireg114.1.2 汽车修理单表 rereg114.1.3 零件库存表114.1.4 零件预定表114.1.5 员工表114.2 界面设计124.2.1 欢迎界面124.2.2 数据登记界面124.2.3 查询界面144.2.4 编制订货计划界面164.2.5 打印发票界面164.2.6 打印工资报表界面174.3 部分功能实现原理174.3.1 实现清晰的导航栏,友好的访问页面框架174.3.2 汽车维修单登记174.3.3 编制订货计划215 系统测试275.1 测试方法275.2 遇到的问题和解决方法285.2.1 文本会议中文乱码28总结29致谢29参考
4、文献29基于 JAVA的汽车维修管理系统的实现自动化专业学生 指导教师 摘要:随着信息化技术的发展,信息化技术已经被广泛应用于很多领域,汽车维修行业就是其中的一个典型。汽车维修行业信息化的一个直接的影响就是从管理、经营模式以及对技术人员的综合素质的要求。在中国,汽车维修行业也逐渐从传统的管理模式走向信息化的管理模式。这类软件的优势就在于一方面改变了以往的手工操作模式,变繁琐的手工劳动为计算机自动管理,节省了人力、物力和时间,实现办公自动化,提高了管理水平;另一方面改变了旧管理模式的杂乱、无条理性,实现有序的科学管理,并增加了管理的保密性和安全性。本文结合实际汽修管理系统的情况,同时考虑到目前我
5、国汽修管理人员文化层次较低的情形,提出基于 Java 的汽修管理系统。关键词:WEB;JAVA;汽车维修管理;MySQLThe realization of the car maintenance management system based on JAVAStudent majoring in Automation Tutor Lecturer Abstract:With the development of technology of the Internet, technology of the information has been used in many areas durin
6、g 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 tr
7、aditionalone 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 implementati
8、on 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 accou
9、nt 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; MySQL1 绪论1.1 课题简介该课题以一个“基于 JAVA 的汽车维修管理系统”为例,按客户要求对某汽车维修企业要对本单位工作中的主要业务数据进行管理。对每次维修、更换零件的记录、修理人、修理时间、更换零部件的入库、出库管理、按修理费用打印发票、按修理工的维修质
10、量、时长给出计时工资、打印工资报表、制定季度零件订货计划等细节要求。随着多媒体、通信及计算机网络技术的发展,传统的汽车维修管理措施已经无法满足大量的操作需求,而信息化技术被被称为最完善的技术,已经被广泛应用于很多管理领域,汽车维修这个行业就是其中的一个典型例子。某些情况下维修管理极复杂,有大量的不同需求的客户需要进行特殊对待,传统的管理模式造成员工操作错误或数据更新不及时;各种维修零件也比较多,仓库管理和员工管理也很难同步。为了解决这些错误,提出基于 JAVA 的汽车维修管理系统的实现。传统的汽车维修管理系统是在管理员手动录入汽车维修信息的基础上,对大量数据进行操作,要求管理者特别谨慎而防止出
11、错,因此管理员的工作量非常大且交互性差,数据查找统计起来也比较麻烦。运用了 JAVA 和数据库管理信息就比较方便,对数据进行进一步的处理也非常方便,而且对功能能进行拓展,使操作员从大量的劳动中解脱出来,而专注于与顾客的交流。该系统可以对本单位工作中的主要业务数据进行管理、对每次维修、更换零件的记录、修理人、修理时间、更换零部件的入库、出库管理、按修理费用打印发票、按修理工的维修质量、时长给出计时工资、打印工资报表并能制定季度零件订货计划。1.2 设计背景及意义由于使用该系统的人员为汽车修理厂的员工,他们对计算机使用都比较陌生,不会什么比较复杂的系统操作,所以该系统的界面操作应该简洁明了,层次要
12、简单,数据录入界面字段要和各类手填单据单字段一致,容易修改,对字段验证提示;查询时要比较详细地展示用户的需求数据;编制并显示季度零件订货计划且订货量可由用户输入或修改;打印发票或者员工工资表时可以修改报表。课题难点:怎么样做到前后台很好的分离,很好的使用 MVC 设计模式,后台数据库的设计决定整个系统的效率,采用哪些 Java 技术才能提高开发效率。汽车维修管理系统在不断地完善,但并不意味着操作员可以完全不顾数据的结构,相反它将进一步要求用户提高自身的能力。管理系统同时也要变得更人性话,同时满足初次使用者的一般错误。1.3 设计方法本程序前台采用 JSP 技术进行开发,后台使用 Servlet
13、 来对数据进行操作。尽管目前有许多管理系统不是基于网络的,但是随着时代发展趋势,网路交互将被更多的使用。一个服务器可以配置多个用户端,以便使得大中型的汽车维修公司可以内部交互。后台数据库采用 MySQL 数据库,该数据库比较小,功能也很全面,而且是一款相当便宜的数据库系统,对硬件的要求也不是很苛刻,从而降低了软硬件的成本,能方便的构建中小型公司的数据库,操作容易上手,使用简单。为了适应日新月异的数据库技术,有相当多的软件工程师逐渐地从桌面数据库软件诸如 SQLServer,转到使用 MySQL,虽然说 MySQL 并不是 SQLServer 的对手,但许多服务提供商都支持 MySQL,并视之为
14、便宜而有效率的替代品。MySQL 数据库服务器管理和开发工具使用 Navicat。Navicat MySQL 是一个强大的管理器,它可以与任何 3.21 或以上版本的 MySQL 一起工作,并支持大部分的 MySQL 最新功能,包括触发器、存储过程、函数、事件、视图、管理用户等等。2 需求分析2.1 调查研究2.1.1 用户需求该系统的主要流程是汽车维修厂系统管理员对维修汽车的登记以及维修费用、工资核算的处理。起始欢迎页面数据登记页面 汽车登记单 汽车修理单 零件入库单 零件出库单数据查询页面 查询登记单 查询修理单 查询零件库存数据处理页面 编制并显示季度零件订货计划 打印发票 打印修理工工
15、资月报表数据登记:登记功能用于把各类手填单据中的数据及时登记到系统将要定义的表中,还 要求能进行改。这些单据包括汽车登记单、汽车修理单、零件入库单和零件出库单。查询:能查询登记单、修理单、汽车、车主、修理工、零件库存的有关数据。编制并显示季度零件订货计划,订货量可由用户输入或修改。打印发票:发票中除了包含顾客、汽车及修理项目等数据外,还要计算出修车费,修车费包括修理和 零件费打印修理工工资月报表2.2 操作流程2.2.1 管理流程粗 略 统 计 修 改 计 划 最 终 打 印欢 迎 主 页 汽 车 登 记查 询 /修 改 登 记 单零 件 出 库汽 车 修 理 登 记零 件 入 库管 理 员
16、工打 印 发 票编 制 并 显 示 季 度 零 件查 询 零 件 库 存查 询 修 理 单 添 加 员 工删 除 员 工打 印 工 资月 初 始 化图 2-1 系统结构示意图2.2.2 汽车登记单模块流程汽车登记单输入客户名、车牌号,存储到数据库中,如果插入失败,返回报错。流程如图 2-2 所示:表 单 输 入数 据 库 输 入 验 证登 记 成 功 错 误图 2-2 登记汽车登记单流程2.2.3 汽车修理单模块流程汽车维修单输入车牌号、修理所需配件、修理工工号、修理费用,存储到数据库中,如果插入失败,返回报错。流程如图 2-3 所示: 汽 车 修 理 单 输 入数 据 库 输 入 验 证插
17、入 成 功 错 误图 2-3 汽车修理单模块流程2. 2.4 零件入库单模块流程在汽车零件入库单输入配件名、配件数量,存储到数据库中,如果更新失败,返回报错。流程如图 2-4 所示: 零 件 入 库 输 入 单数 据 库 输 入 验 证插 入 成 功 错 误图 2-4 零件入库单模块流程2. 2.5 零件出库单模块流程在零件出库单中输入零件名、零件数量,更新到数据库中,如果更新失败,返回报错。流程如图 2-5 所示: 零 件 出 库 输 入 单数 据 库 输 入 验 证插 入 成 功 错 误图 2-5 零件出库单流程2.2.6 查询/修改登记单模块流程根据查询登记单表单查询数据库中对应信息,如
18、果查询失败,返回报错;查询成功,则根据修改登记单将信息更新到数据库中。流程如图 2-6 所示: 查 询失 败查 询 登 记 输 入 单数 据 库 输 入 验 证插 入 成 功修 改 登 记 输 入 单图 2-6 查询/修改登记单流程2.2.7 查询/修改修理单模块流程根据查询修理单表单查询数据库中对应信息,如果查询失败,返回报错;查询成功,则根据修改修理单将信息更新到数据库中。流程如图 2-7 所示: 查 询失 败查 询 修 理 输 入 单数 据 库 输 入 验 证修 改 成 功修 改 修 理 输 入 单图 2-7 查询/修改修理单流程2.2.8 查询/修改零件库存模块流程根据查询零件库存表单
19、查询数据库中对应信息,如果查询失败,返回报错;查询成功,则根据修改零件库存表单将信息更新到数据库中。流程如图 2-8 所示: 查 询失 败查 询 零 件 库 存 输 入数 据 库 插 入 验 证修 改 成 功修 改 零 件 库 输 入图 2-8查询/修改零件库存流程2.2.9 编制并显示季度零件订货计划模块流程根据季度零件订货计划表输入数据查询数据库,查询失败则返回报错;成功则根据手动输入表单,打印订货计划。流程如图 2-9 所示:查 询失 败季 度 零 件 订 货 计 划表 输 入数 据 库 查 询修 改 成 功 , 打 印成 功手 动 修 改订 货 量 输 入图 2-9 编制并显示季度零件
20、订货计划流程2.2.10 打印发票模块流程根据客户车牌号对数据库进行查询费用,查询失败则返回报错;成功则打印发票。流程如图 2-10 所示: 客 户 打 印 发 票 表 输入数 据 库 查 询打 印 成 功图 2-10打印发票流程2.2.11 打印修理工工资月报表模块流程根据修理工输入表单项查询数据库,查询失败则返回报错;成功则对查询到的数据进行计算、打印。流程如图 2-11 所示:图 2-11打印修理工工资月报表流程2.3环境配置2.3.1 硬件条件服务器:A. CPU:频率 2.0GHz 以上B. 内存:1GB 以上C. 网络:1Mbps 以上宽带接入客户机:A. CPU:奔腾 4.0 及
21、其以上B. 内存:256M 及其以上C. 网络:512Kbps 以上宽带接入2.3.2 软件条件服务器:A. Windows 2000 及以上(5.0)B. Apache Tomcat Server 6C. MySQL 5.1D. Navicat LiteE. Java Runtime Environment 6客户机:A. IE 浏览器2.3.3 开发平台 MyEclipseMyEclipse 是一个十分优秀的用于开发 Java, J2EE 的 Eclipse 插件集合,MyEclipse 的功能非常强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错。经过了 MyEclipse 8.5
22、 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 整合帮助对于以上每一种功能上的类别
23、,在 Eclipse 中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse 结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。简单而言,MyEclipse 是 Eclipse的插件,也是一款功能强大的 JavaEE 集成开发环境,支持代码编写、配置、测试以及除错,MyEclipse6.0 以前版本需先安装 Eclipse。MyEclipse6.0 以后版本安装时不需安装 Eclipse。 MySQLMySQL 是一个小型关系型数据库管理系统.目前 MySQL 被广泛地应用在 Internet上的中小型网站中。由于其体积小、速度快、总体拥有
24、成本低,尤其是开放的源代码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 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 查询算法,有效地提高查
25、询速度。6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 Shift_JIS 等都可以用作数据表名和数据列名。7.提供 TCP/IP、ODBC 和 JDBC 等多种数据库连接途径。8.提供用于管理、检查、优化数据库操作的管理工具。9.可以处理拥有上千万条记录的大型数据库。 Navicat LiteNavicatTM 是一套快速、可靠并价格相宜的资料库管理工具,大可用来简化资料库的管理及降低系统管理成本。NavicatTM 的设计符合资料库管理员、开发人员及中小企业的需求。Nav
26、icat 是以直觉化的使用者图形界面所而建的,让你可以以安全且简单的方式建立、组织、存取并共用资讯。Navicat 提供商业版 Navicat Premium 和 免费的版本 Navicat Lite,免费版本的功能已经足够强大了。Navicat 支持的数据库包括 MySQL、Oracle、SQLite、PostgreSQL 等。 TomcatTomcat 运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的 tomcat 标志改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。Tomcat 是一个轻量级应用服务器,在中小型系统和
27、并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。对于一个初学者来说,可以这样认为当在一台机器上配置好 Apache 服务器,可利用它响应对 HTML 页面的访问请求。实际上 Tomcat 部分是 Apache 服务器的扩展,但它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。当配置正确时,Apache 为 HTML 页面服务,而Tomcat 实际上运行 JSP 页面和 Servlet。另外 Tomcat 和 IIS、Apache 等 Web 服务器一样,具有处理 HTML 页面的功能,另外它还是一个 Servlet
28、和 JSP 容器,独立的Servlet 容器是 Tomcat 的默认模式。不过 Tomcat 处理静态 HTML 的能力不如 Apache服务器。3 概要设计3.1系统架构WEB 服务器数据访问与持久层(Hibernate)应用层 网站页面反馈展示模块鉴权及功能入口展示适配 用户页面展示模块业务支撑 或业务方法数据库图 3-1 WEB服务器架构 应用层:系统与用户交互的界面、各功能模块的交互、流程实现。应用层在 MVC 模型中包含了表示层与控制层。 业务支撑或业务方法层:为应用层提供业务逻辑接口与实现。从开发的角度来说,应用层不直接含有业务处理逻辑。对业务的处理由业务支撑或业务方法层提供。该层
29、对业务逻辑接口提供实现。应用层不需知道实现的细节,应用层以接口调用可以很好的应对实际业务处理的变更。业务支撑层在 MVC 模型中为模型层或模型适配。 数据访问与持久层:提供数据库连接、访问、与持久化数据库数据。 数据库:系统业务数据的存储。 WEB 服务器是整个应用程序的运行环境,是接受用户 HTTP 请求与服务响应的接口。3.2数据登记模块用于把各类手填单据中的数据及时登记到系统将要定义的表中。这些单据包括汽车登记单、汽车修理单、零件入库单和零件出库单。3.2.1 汽车登记单汽车登记单主要记录车主姓名、汽车牌照等相关的顾客登记信息。汽车牌照为不能重复的字段。3.2.2 汽车维修单登记汽车维修
30、单主要登记以汽车牌照号为索引的,记录修理使用的零件及其数量、修理工得工号和修理用时等相关信息。3.2.3 零件入库单登记零件入库单主要登记仓库管理中的每次零件入库信息,这些信息主要包括零件名零件入库量、零件进货价格等相关信息。3.2.4 零件出库单零件出库单主要登记仓库管理中的每次零件出库信息,这些信息主要包括零件名,零件出库量等相关信息。3.3数据查询模块3.3.1 登记单查询登记单查询主要包括登记时顾客相关信息,有顾客姓名和车牌号,同时提供修改顾客姓名和车牌号信息等功能。3.3.2 修理单查询修理单查询主要包括修理单登记时的车牌号,零件名和其使用数量,修理工工号。3.3.3 零件库存查询零
31、件库存查询主要包括仓库中所有的已有零件和其数量,并显示成列表形式。3.4 打印发票模块打印发票模块中除了要包含顾客、汽车及修理项目等数据外,还要计算出修车费,修车费包括修理费和零件费,按下列各式计算:1、零件费=(零件价格耗用数量)2、修理费=小时工资修理工时33、总计=零件费+修理费3.5打印修理工工资月报表模块打印月报表输出所有员工的工资情况,根据修理评价的好坏对每次的修理用时再进行统计,最终输出所有员工的工资所得。3.6编制并显示季度零件订货计划模块该模块实现找出要订货的零件,订货条件为:零件库存量4.3.2 汽车维修单登记汽车维修单登记会读取多个数据库表信息,同时要验证使用零件是否在零
32、件库存表中存在、零件数量是否足够完成这次修理,修理工是否存在,修理用时是否为正数,还有修理质量将会再次影响到最终的带权维修用时,零件的使用也将影响到零件的进货计划,修理费用和库存信息等。这些操作会影响或参考到汽车登记表、零件库存表、员工表,为在各个表之间无差错的完成任务,部分重要代码如下:JSP 表单页面:添加汽车修理单车牌号:零件名:使用零件数量:修理工号:修理用时:维修质量:好中差Servlet处理表单public class page2_2 extends HttpServlet public void doGet(HttpServletRequest request, HttpServ
33、letResponse 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“);S
34、tring 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.sendRed
35、irect(“/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 he
36、re具体的对数据库操作:/ 插入汽车维修单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
37、(Integer.parseInt(partAm) 粗略统计供求手动修改订货计划 显示最终订货计划第一步,粗略统计: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 =
38、 “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(“);out.println(“);o
39、ut.println(“);out.println(“ “);out.println(“ “);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.partOrdUpda
40、ta(partName, order);/将粗略统计的信息单独保存起来out.print(“零件名: “+ partName);out.print(“ 预定零件数量: “ + order);out.println(“ “);out.println(“);out.flush();out.close(); catch (SQLException e) e.printStackTrace(); finally DBConn.close(conn, st, rs);public void doPost(HttpServletRequest request, HttpServletResponse re
41、sponse)throws ServletException, IOException doGet(request, response);public void init() throws ServletException / Put your code hereDAO中的partOrdUpdata功能:/ 粗略统计订货public boolean partOrdUpdata(String partName, int partAm) Connection conn = null;Statement st = null;ResultSet rs = null;if (partAm “);out.println(“);out.println(“);out.println(“ “);out.println(“ “);while (rs.next() String partName = rs.getString(“partName“);int partFinOrd = rs.getInt(“partOrd“);out.print(“零件名: “+ partName);out.print(“ 预定零件数量: “ + partFinOrd);out.println(“ “);out.println(“);out.flush();out.close();