物资管理系统之物资管理模块的设计与实现

更新时间:2024-06-13 16:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

本 科 毕 业 论 文(设计)

课题名称 物资管理系统之物资管理模块的设计与实现 学 院 计算机科学与教育软件学院 专 业 软件工程 班级名称 计机125 学生姓名 黄俊龙 学 号 1206100021 指导教师 张为

完成日期 2016年5月28日

教 务 处 制

1

物资管理系统之物资管理模块的设计与实现

摘要 随着互联网的发展与普及,网站逐渐成为了人们生活中不可替代的一部分,

对于以往一些需要大量人力物力进行统计管理的流程,大部分已经由开发人员所涉及的各式各样的系统所代替。计算机智能在逻辑运算方面相比于人类是有巨大的优势的。

基于学生会秘书处部门中物资管理繁杂问题,本系统提供了场地管理功能与人员管理功能。用户通过本系统,可快速高效地处理物资管理问题。让部委更好的为学生服务,实现学生会“从学生中来,到学生中去”的理念。

本文的主要内容是详细叙述本系统的系统设计以及功能实现。

关键词 物资管理;Spring;Ajax;MVC

ABSTRACT With the development and popularization of Internet, website

has become an irreplaceable part of people's lives, and for the past, some need a lot of manpower and material resources statistics management process, has been largely by the developers involved in a wide range of system replaced. Computer intelligence has a great advantage over human beings in terms of logical operation.

Based on the complex problems of materials management in the Department of student union Secretariat, the system provides the function of site management and personnel management. Through this system, users can quickly and efficiently deal with the issue of material management. Let the ministries to better serve the students, to achieve the students will come from the students, to the students to the idea.

The following content of this article will describe the system design and function realization of the system in detail.

KEY WORDS Material Management;Spring;Ajax; MVC

2

目录

1. 前言 ????????????????????????????3 1.1课题背景 ????????????????????????? 3 1.2研究现状 ????????????????????????? 3 1.3课题目的与方向 ??????????????????????? 3 2. 开发环境及相关技术 ??????????????????????? 3 2.1 开发环境 ????????????????????????? 3 2.2 开发工具 ????????????????????????? 9 2.2.1 Eclipse ???????????????????????? 9 2.2.2 Mysql ????????????????????????? 12 2.3 相关技术与框架 ?????????????????????? 9 2.3.1 Mybatis ???????????????????????? 12 2.3.2 Spring ???????????????????????? 12 2.3.3 Servlet ????????????????????????12 2.3.4 JSP ?????????????????????????? 12 2.3.5 Jquery ???????????????????????? 12 2.3.6 Bootstrap ??????????????????????? 12 2.3.7 My97 DatePicker ?????????????????????12 2.3.8 MVC设计模式 ?????????????????????? 12

3. 系统分析 ?????????????????????????? 17 3.1 目标分析 ???????????????????????? 17 3.2 需求分析 ???????????????????????? 21 3.2.1业务流程 ???????????????????????? 21 3.2.2系统需求分析 ??????????????????????25 4. 系统设计 ?????????????????????????? 29 4.1 总体设计架构 ??????????????????????? 29 4.2 系统概要设计 ??????????????????????29 4.3 类的设计 ??????????????????????29

3

4.4 系统模块功能详细设计??????????????????? 29

4.4.1物资借用??????????????????????? 30 4.4.2查询已预约物资???????????????????? 34 4.4.3查询未归还物资???????????????????? 36 4.4.4条件查询??????????????????????? 37 4.4.5物资编辑??????????????????????? 37

4.5数据库设计????????????????????????? 38 5. 系统实现 ??????????????????????????? 43 6. 结论 ??????????????????????????? 43 参考文献 ?????????????????????????????44 致谢 ???????????????????????????????45

4

物资管理系统之物资管理模块的设计与实现

1. 前 言

1.1课题背景

随着互联网技术的日渐发展与普及,使用网站作为系统对需要统计的事物进行管理是一个非常普遍的事情,使用计算机智能来代替手工操作能大大提高效率。校学生会秘书处部门是一个非常注重效率的部门,但由于经费问题,导致不能开发出一个类似物资管理的系统。长期以来,严重影响了工作的效率。故本人利用自己的空闲时间,根据秘书处的需求,设计了一个与部门职能相符合的物资管理系统。使用此系统,旨在为秘书处的部委们提供便利,使得部委的工作效率更高,从而能腾出更多的时间做其他更有意义的时间。同时也使得部委不再天天处在繁琐的工作岗位上。能让秘书处这个为学生服务的部门更加向上。

1.2研究现状

在当今互联网,Web网站对于人们生活的影响是巨大的,人们可以通过Web进行购物,进行点餐,进行交友。假设Web消失了,那么对于人们的影响将是无比巨大的。

无论在国内还是国外,各大公司,各大组织中通过访问Web网站对物资进行管理都是非常广泛的。使用规范的系统对物资进行管理是迫不及待且非常必要的。许多高校的校学生会组织都有属于自己的一套系统,而我们广州大学学生会暂时还没有,所以开发一个物资管理系统是学生会当前迫切想实现的事情。在当下各种框架技术已非常成熟的时候,开发物资管理系统已非痴人说梦。各种框架能让开发人员更好的开发出更好的产品。

本系统前端所使用的JavaScript脚本语言,从1995年诞生到现在,一路走来历经波折,在褒贬不一的议论声中成长过来。虽然它仍有自己的缺陷,但不可否认的是它的前途是光明的,也成就了许多网站的辉煌。

而本系统所使用的Java语言,则是当前最为流行的编程语言之一,发展至今天,它已经成为各大大型网站设计的首选语言。比如说,淘宝等各大电商平台

5

的后台语言皆是Java,足以证明Java对于开发人员的吸引力。更为重要的是,时至今日Java仍然持续不断的发展,JDK1.8在2014年发布,而JDK1.9也将在今年或者明年发布。【1】

本系统所使用的前端框架BootStrap,在当下也是最为流行的前端框架之一。在2015年,BootStrap团队发布了Bootstrap 4 alpha版。该版本有以下变化。

? 从 Less 迁移到 Sass ? 改进网格系统 ? 缺省弹性框支持

? Dropped wells, thumbnails, and panels for cards ? 合并所有 HTML resets 到一个新的模块中:Reboot ? 全新自定义选项 ? 不再支持 IE8

? 重写所有的 JavaScript 插件

? 改进工具提示和 popovers 的自动定位 ? 改进文档 ? 其他大量改进

本系统所使用的框架以及技术皆是在当前最为流行且最为成熟的。而且他们还在不断的更新,不断的发展之中。

1.3课题目的与方向

本文旨在设计并开发一个人员管理与物资管理的系统,为学生会秘书处的部委提供便利的同时,间接的为广州大学的4万多名学生服务。需要说明的是,根据秘书处的需求,我们并不需要设计一个非常高并发的系统,使用本系统的人员大概在30个,所以我们只为设计一个操作简单,界面简洁,能切实地完成好部委们需求的系统。

6

2. 相关原理和技术

2.1 开发环境

本系统的开发环境如下: 开发平台:Windows 7 、Eclipse 开发语言:Java 关系数据库:Mysql 服务器:tomcat6.0

框架:Mybatis、Spring、Servlet、Jsp、Bootstrap、Jquery

2.2 开发工具

2.2.1 Eclipse

此工具是一个基于Java的开源平台。实质上它是一个框架和一组服务,靠插件组件构建开发环境。而本系统是用过Java开发插件(JDK)在Eclipse上进行开发工作。而Eclipse一个很大的优点是它可以是任何语言的开发平台,我们只需要安装某一种语言的插件,那么即可在Eclipse上开发这种语言,这种设计观念在一定程度上类似Java语言的设计思想:只要安装了适应系统的JDK插件,那边编译过的.class文件可以在任意系统上运行。使用Eclipse,让我们更加快速、更加便捷的进行开发工作,大大提高了工作效率。 2.2.2 Mysql

MySQL 是目前比较常用的关系型数据库管理系统,同时它也是一种关联数据库管理系统。这种系统会将数据保存在不同的表中,而不是将全部数据放在一个大仓库内,这样就能大大的提高效率与灵活性。

Mysql分为社区版与商业版,相比于Oracle,它体积小,速度快,开发成本低,且开放源代码。如果不是一些大型网站,Mysql是一个很好的选择,而本系统则符合中小型网站的特点,所以选择了Mysql而不是Oracle。【11】

7

2.3 相关技术与框架

2.3.1 MyBatis

Mybatis的前身是apache的一个开源项目iBatis,在2010年改名为Mybatis。本系统使用的是Mybatis的Sql Maps持久层框架。使用Mybatis,意味着你将几乎不在需要任何JDBC代码和参数的手动设置。只需要在特定的Xml文件中配置,则Mybatis将自动把数据库的数据和Java对象映射起来。而使用Mybatis的SqlMaps也很符合MVC思想。通过Mybatis,开发人员将大大提高发开效率。【7】 Mybatis的架构可以分为3层:

(1)API接口层:提供给外部使用的接口,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用xml所定义的Sql语句(数据处理层)来完成具体的数据处理。

(2)数据处理层:是由开发人员手动配置的负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。这是Mybatis的底层部分,一般开发人员不需要触及这部分代码。 2.3.2 Spring

Spring是一个轻量级的Java开源框架。spring是用来管理你的系统的类的框架,管理它们之间的互相调用和依赖关系,通过接口解藕,可以方便的更换使用多种不同的技术实现来完成你的系统。其核心思想是依赖注入(IOC)和面向切面(AOP)。它是为了解决应用开发的复杂性而衍生的,Spring通过JavaBean可以完成以前只能由EJB完成的事情,并且Spring能与其他许多当前比较流行的优秀框架进行兼容(通过第三方开发的Jar包)。比如说本系统所使用的Mybatis与Spring的兼容,靠的就是mybatis-spring-1.2.1.jar这个jar包。虽然说本系统是Web系统,但并不是说Spring只能适用于Java Web,它同样能适用于Java应用。Spring作为一个”管家型”框架,为MVC框架的整合提供了非常巨大的作用。它使你的代码更加简洁,分层架构更加易于管理。可以说Spring是本系统的最核心的框架。同时Spring还提供事务管理的功能,开发人员只需在配置文件配置,即可实现对事务进行管理。【8】

8

2.3.3 Servlep

Servlet是用Java编写的服务端程序,在MVC的三层架构中属于控制层,只要实现了Servlet接口的JavaBean都可以称为Servlet。Servlet定义了5个方法

void init void service void Destory

String getServletInfo ServletConfig getSevletConfig

容器在每次请求Servlet时就会调用service这个方法。

而我们通常继承的接口都是HttpServlet,这个接口有两个主要的类

doget、doPost分别用来处理从浏览器端发送过来的get请求和post请求。本系统的所有业务逻辑即从这里开始。

总体来说,Servlet的逻辑就是:

服务器通过URL请求Servlet容器,Servlet容器根据URL调用对应的Url调用对应的Servlet,而相对应的Servlet处理完逻辑后将处理后的结果发回给服务端。 2.3.4 Jsp

Jsp全名叫Java Server Pages,本质上是一个Servlet,它是一种动态网页技术标准,更重要的是它完全面向对象,且可以跨平台,但是它需要配合Servlet来使用。它实现了在Html页面上的Java拓展,将业务逻辑和网页设计进行分离,使得开发人员分工更加明确,效率更加高,代码的耦合度低。【3】

静态数据,如HTML。 JSP指令,如include指令。 JSP脚本元素和变量。 JSP动作。 用户自定义标签。

本系统还使用了JSTL标签库。更易于对数据进行操作。 2.3.5 Jquery

Jquery是一个轻量级的最为流行的Js库,兼容各种浏览器。使用Jquery能使得Html页面与逻辑代码分离开来,Html界面的元素只要定义id,那么使用Jquery则可

9

以直接通过Id操作这些元素。同时在本系统中,更重要的是使用Jquery的Ajax提交实现异步的刷新。同时当下许多流行的前端框架包都需要引用Jquery。比如本系统所使用到的Bootstry与My97 DatePicker。利用Jquery的API,我们能实现一些令人惊叹的效果。 2.3.6 Bootstrap

BootStrap是由Twitter退出的基于前端的CSS框架。它是由Twitter的设计师Mark Otto和Jacob Thornton一起开发的。用于开发响应式布局、移动设备优先的 WEB 项目。它由自己现有的独特的风格,且拓展性好。本系统的大部分UI设计都是采用了Bootstrap定义的样式。大大的节省了开发人员的时间。真正实现了利用最少的时间开发出最好的风格的页面的思想。

2.3.7 My97 DatePicker

My97 DatePicker是一个基于Jquery的日历控件,它体积小,功能强大,速度快,兼容面广。只需要引入My97DatePicker包,即可快速的构建出一个小巧精致的日历选择控件。虽然页面并非十分的精美,但是也足够使用了。它更人性化,功能更全面。有强大的日期范围限制功能,支持多语言和自定义皮肤,并且可以自定义事件。还可以跨无限级框架和自动选择显示位置。

2.3.8 MVC设计模式

MVC设计模式是系统设计中最为普遍是是最为流行的一种模式。M即是Model(模型)、V即是View(表现层)、c即是Controller(控制层)。模型作为与数据库交互的部分,表现层则是呈现给用户看得那部分,控制层则是系统的大脑,负责处理所有的逻辑。所以MVC的逻辑是,表现层的请求经过控制层的逻辑运算后,去模型中向数据库拿数据,返回的数据经过逻辑层再返回给表现层。软件工程是一个很注重分工与效率的学科,而MVC设计模式则完美契合了软件工程的思想,它使得负责三层的三种人员的耦合降到最低,大大提高了工作效率。【10】

10

3. 系统分析

3.1系统目标分析

学生会秘书处部门有管理物资的职责,而在以往,物资的管理需要对大量的纸质表格进行保管。且在物资借用期限到时还得手动去翻查表格。并且每天都需要检查,因为不知道物资借用期限是否已到期。当借用物资时,还得手动的确认物资总量是否足够,将浪费大量的时间。而本系统的物资管理模块则负责把所有的需要大量人工操作的部分做成一个网页供用户使用,当物资到期时会自动提醒物资到期,可以根据借用日期,归还日期,借用单位,登记人等一个或者多个条件查询物资表,方便对物资进行统筹管理。在借用物资时,也可以自动计算出物资是否有足够的数量借出。当对已借出的物资编辑时,可以记录编辑物资的用户的记录。

同时本系统,采用了MVC模式,更有利于开发人员的分工。同时本系统着重考虑了代码的拓展性,力求以后有新的需求时能更好的在原来的代码的基础上增添新的代码。也在系统的并发上做了一定的工作,系统并不会有多个人员共同操作时所引发的并发问题。

在用户体验上,本系统尽量使得用户的操作直观,简易。也在系统性能上下了不少的功夫,用户在操作数据时也将会更加快捷不会出现无谓的等待。在外观上,系统也采用了尽量简洁的外观,用户不会因为界面的冗杂而对界面产生厌烦。【5】

3.2系统需求分析

3.2.1 业务流程

为了更好的规划开发人员的开发时间,对业务流程的整体了解是必不可少的。 物资管理系统的物资管理模块业务流程如下:

11

(1) 用户填写物资借用的表格

(2) 用户根据登记人名字、借用日期、归还日期、借用单位、物资名称、 (3) 用户查询已预约物资 (4) 用户查询未归还物资 (5) 用户归还物资

(6) 有部长权限的用户可以设置物资总数以及编辑物资资料。

开始

修改物资 查询物资 用户登录 增加物资 删除物资 是 判读是否是部委

3.2.1业务流程图

12

设置物资总量 编辑物资信息 结束

总得来说,物资借用有7个小模块:

(1)物资借用模块。当用户填写物资借用时,需要填的资料有,借用物资名称,借用物资数量,借用单位,借用学生姓名,借用学生联系方式,借用日期,归还日期,借用登记人姓名,是否预约。除此之外,系统会将本次借用的归还状态设置为NO。

(2)根据条件查询物资记录模块。根据登记人名字等一个到多个查询条件查询物资。当后台检测到前台发送的查询条件时,将自动排除为空的查询条件(即用户没有填写的查询条件),然后将查询到的物资返回前台。

(3)查询已预约物资记录模块。用户点击可以查看所有的已预约但尚未借出的物资。

(4)查询未归还物资记录模块。用户点击可以查看所有未归还的物资。 (5)归还物资模块。用户可在表格每一条物资记录的后面点击归还物资,则表示此物资已归还,系统将当前登录的用户作为归还登记人保存到数据库。

(6)编辑物资模块。用户可在表格每一条物资记录的后面点击编辑物资,对物资的详细情况进行更改,系统将当前用户也作为借用登记人保存到数据库,格式是:小明/小红(表示小红在小明借出物资后编辑了物资)。

(7)编辑物资总量模块。有部长权限的用户,可以编辑物资的总量,且对物资进行赠删改。

3.2.2 需求分析

根据以上描述可得到如图3.2.2的用例图。

13

3.2.2用例图

用例描述如下: 用例编号 用例名称 用例概述 B01 借用物资 通过输入物资借用信息借用物资 主要参与者 管理员;部长;部委 次要参与者 无 前置条件 后置条件 用户想要为物资借用者办理借用物资手续,填写物资表 完成借用,退出对话框 活动 系统显示系统界面,用户点击借用物资按钮 用户输入借用物资信息 系统确认借用物资信息是否正确 系统借用物资信息正确 完成物资借用 如果借用物资信息有误,则要求用户重新输入或者取消输入。

14

基本事件流 步骤 1 2 3 4 5 扩展事件流 3a 3a1 3a2

用例编号 用例名称 用例概述 B02 用户重新输入,转到3。 若学生取消修改,则结束用例。 删除借用物资记录 通过物资ID删除借用物资记录 主要参与者 管理员;部长;部委 次要参与者 无 前置条件 后置条件 用户想要删除物资记录 完成删除,显示删除成功 活动 系统显示系统界面,用户点击删除物资按钮 系统确认需要删除的物资记录是否合法 系统需要删除的物资信息合法 完成物资删除 如果物资记录有误,则显示无法删除。 基本事件流 步骤 1 2 3 4 扩展事件流 3a

用例编号 用例名称 用例概述 B03 编辑借用物资记录 通过输入物资编辑信息编辑借用物资记录 主要参与者 管理员;部长;部委 次要参与者 无 前置条件 后置条件 用户想要为物资编辑者办理编辑物资手续,填写物资编辑表 完成编辑,退出对话框 活动 系统显示系统界面,用户点击编辑物资按钮 用户输入需要编辑的物资信息 系统确认编辑物资信息是否正确 15

基本事件流 步骤 1 2 3

4 5 扩展事件流 3a 系统编辑物资信息正确 完成物资编辑 如果编辑物资信息有误,则要求用户重新编辑或者取消编辑。 3a1 3a2

用户重新编辑,转到3。 若学生取消编辑,则结束用例。 用例编号 用例名称 用例概述 B04 查询借用物资记录 通过输入物资查询条件查询符合条件的借用物资记录 主要参与者 管理员;部长;部委 次要参与者 无 前置条件 后置条件 用户想要查询某些符合特性条件的物资信息 完成查询,显示符合条件的物资信息 活动 系统显示系统界面,用户填写查询条件信息。 用户点击物资查询按钮 系统确认查询条件信息是否正确 系统查询条件物资信息正确 完成条件查询,显示符合条件的物资记录 如果查询条件信息有误,则要求用户重新输入。 用户重新输入,转到1。 基本事件流 步骤 1 2 3 4 5 扩展事件流 3a 3a1

用例编号 用例名称 用例概述 B05 查询未归还物资 通过点击查询未归还物资按钮查询所有未归还物资 主要参与者 管理员;部长;部委 次要参与者 无

16

前置条件 后置条件 用户想要查询哪些物资没有归还,点击查询未归还物资按钮 完成查询,显示未归还物资信息 活动 系统显示系统界面,用户点击查询未归还物资物资按钮 系统确认是否有未归还物资 系统有未归还物资 完成未归还物资查询,显示未归还物资信息 如果没有未归还物资信息,显示为空 基本事件流 步骤 1 3 4 5 扩展事件流 3a

用例编号 用例名称 用例概述 B05 添加物资信息 通过输入物资资料添加物资 主要参与者 管理员;部长; 次要参与者 无 前置条件 后置条件 用户想要新建一个物资种类 完成添加,退出对话框 活动 系统显示系统界面,用户点击添加物资按钮 用户输入添加物资信息 系统确认添加物资信息是否正确 系统添加物资信息正确 完成物资添加 如果添加物资信息有误,则要求用户重新输入或者取消输入。 3a1 3a2

基本事件流 步骤 1 2 3 4 5 扩展事件流 3a 用户重新输入,转到3。 若用户取消添加,则结束用例。 用例编号

B06 17

用例名称 用例概述 修改物资信息 通过输入物资资料编辑信息 主要参与者 管理员;部长; 次要参与者 无 前置条件 后置条件 用户想要修改某个物资的信息 完成修改,退出对话框 活动 系统显示系统界面,用户点击编辑物资信息按钮 用户输入物资信息 系统确认物资信息是否正确 系统编辑物资信息正确 完成物资编辑 如果编辑物资信息有误,则要求用户重新输入或者取消输入。 3a1 3a2

基本事件流 步骤 1 2 3 4 5 扩展事件流 3a 用户重新输入,转到3。 若用户取消添加,则结束用例。 用例编号 用例名称 用例概述 B07 删除物资信息 通过物资Id删除信息 主要参与者 管理员;部长; 次要参与者 无 前置条件 后置条件 用户想要删除某个物资 完成删除,退出对话框 活动 系统显示系统界面,用户点击删除物资按钮 用户输入物资信息 系统确认物资是否可以被删除 18

基本事件流 步骤 1 2 3

4 5 扩展事件流 3a 3a1 3a2

系统编辑物资可以被删除 完成物资删除 如果物资不可以被删除,则显示物资不可以被删除 用户重新删除别的物资,转到3。 若用户取消删除,则结束用例。 4系统设计

4.1总体设计架构

本系统采用了MVC的设计模式。表现层采用了Jsp技术与Jquery,BootStrap框架。表现层的所有url请求都将是这种格式:

Ip地址:端口/GMS/ControlServlet?mesageId=信息类型

这里的信息类型代表了请求类型,是开发人员自定义的。 物资管理模块定义的信息类型有如下几个: B101 根据查询条件查询借用物资 B102 借用物资归还 B103 借用物资 B104 编辑借用物资

B105 点击上一页下一页以及页数

后台的ControlServlet负责处理所有的逻辑,当前台的请求发送到ControlServlet时,ControlServlet会通过messagId(信息类型),通过反射的方式,自动调用相对应的逻辑处理Conrtoller。【6】

同时,系统在启动时,会把所有未归还的物资加载进内存,同时系统会每隔1个小时检查内存里的物资记录,当检查出物资借用期限已经到期,则将物资到期的记录发送给前台。(前台也会每隔10分钟向服务器发出请求,确认是否有物资已已经到期。)

19

持久层 3

图4.1.1 系统整体架构图

20

表现层 用户界面(jsp) 控制器 业务层 数据访问对象 Mysql数据库

图4.1.2 系统工程架构图

工程名称 BaseController UserController EntityBeans Mappers Service Servlet Tools 包名空间 说明 src.Controller.ControllerInterface 业务逻辑层接口 src.Controller.LoginController src.EntityBean src.Mappers src.Service src.Servlet Src.Tools 表4.1.3 本系统的工程架构描述表格

业务逻辑层 数据实体类层 数据访问层接口 数据访问层 控制层 工具层 21

通过图4.1.1,图4.1.2,表4.1.3。可以得出我们的系统架构如下:

(1)首先,我们通过ControlServlet接收所有请求信息。通过请求信息的类型,调

用不同的Controller。【4】

ControlServlet是通过Java的反射原理调用对应的Controller。这样的设计是非常必要的。原因如下【2】:

1.这样的设计,能使代码更为简洁更为直观。

2.与前端人员的对接更为便利,前端设计人员只需要知道对应的messageId即可知道相对应的逻辑。

3.方便代码的拓展。日后在需要对代码进行更新,或者需要做更多的业务支持时,只需要在Controller包下对相应的业务逻辑进行更新或者增添新的业务逻辑。

(2)之后流程将进入到UserController包下对应的逻辑Controller。如截图所示:

图4.1.4 本系统的业务逻辑处理类截图

以上的每个Controller都实现了BaseController的接口,实现了两个方法 public HttpServletRequest RequestWrapper(HttpServletRequest request,HttpServletResponse response);

HttpServletResponse

ResponseWrapper(HttpServletResponse

public

response);

22

在每个Controller下,都将根据利用Spring的依赖注入技术注入相应的Service对象。从而Controler能根据实际的需要调用Service里面所定义的服务。 (3)在Service包下的所有类中,也是利用Spring的依赖注入技术注入相应的Mapper对象从而访问数据库。

(4)Mapper包下则是利用了Mabatis框架写的数据库访问层。首先我们需要为数据库的每张表写对应的实体Bean,本系统的实体Bean如下图所示

图4.1.5 本系统实体Bean截图

通过类与类中的属性映射数据库中的表与表类的栏目,这是利用了面向对象的思想处理问题。然后开发人员可以通过编写对应的Mapper,然后通过Mapper编写对应的Mapper.xml则可以实现对数据库的访问。系统中的Mapper和Mapper.xml如下图所示:

图4.1.6 数据库Mapper截图

当从数据库取得对应的数据后,根据需求将数据封装成Json(当前台为AJAX提交时)或者把数据直接返回给前台。

23

4.1.7系统架构包图

4.2系统概要设计

图4.2.7 系统总体结构图

24

物资借用有7个小模块:

(1)物资借用模块。当用户点击物资借用时,将会弹出物资借用表的页面,用户需要填的资料有,借用物资名称,借用物资数量,借用单位,借用学生姓名,借用学生联系方式,借用日期,归还日期,借用登记人姓名,是否预约。然后点击借用,当信息填写正确后并且物资余量充足时,才可借用成功。

(2)根据条件查询物资记录模块。用户在前台天下查询条件(登记人名字,借用日期,归还日期,借用单位,物资名称)查询符合条件的物资记录,若有记录则分页显示出来。若无则显示空。

(3)查询已预约物资记录模块。用户点击“查询已预约物资”可以查看所有的已预约但尚未借出的物资。

(4)查询未归还物资记录模块。用户点击“查询未归还物资”可以查看所有未归还的物资。

(5)归还物资模块。用户可在表格每一条物资记录的后面点击归还物资。 (6)编辑物资模块。用户可在表格每一条物资记录的后面点击编辑物资,对物资的详细情况进行更改,若编辑信息填写正确,则显示编辑成功。

(7)编辑物资总量模块。有部长权限的用户,点击物资右边的编辑按钮,显示编辑物资界面,若编辑后的物资数量合法,则显示编辑成功。

4.3类的设计

25

4.3.1用例类图

这个类图是实体Good类和BorrowGood类的用例类图,里面的属性皆一一对应数据库Good表和BorrowGood表的栏目。这样就可以用面向对象的思想去访问数据库,开发人员能更加直观透明地得到数据路的数据。其中Good的GoodName与BorrowName是一一对应的,当BorrowGood需要得到物资的数量时,就可以通过查询goodName得到所需要得到的信息。【12】

4.3.2 用例类图

这个是借用物资操作与物资信息管理操作的类图。里面的Mapper皆是通过Spring的依赖注入注入对象。控制层直接访问这个两个类所定义的方法(服务),从而得到所需要的数据。

26

4.3.3 UML类图

这个类图很直观的说明了本系统的程序走向,首先UserController得到了从前台传来的messageId后,调用实现了BaseController接口的各种自定义信息类型Controller。各个Controller执行自己所定义的逻辑,在执行过程中,需要调用Service所定义的服务来取得数据库数据。而组件之间的数据传输靠的就是实体Bean。

4.4系统详细模块设计

4.4.1 物资借用

物资借用功能在填写界面时,需要填写相应的借用物资的信息,之后通过ajax提交物资借用的整个表到后台(messageId为P103),ControlServlet会根据请求自动调用P103Controller,若物资总数足够,则将新记录添加进数据库。最后返回结果给前台。 时序图如图4.3.1所示。

27

图4.4.1 物资借用时序图

4.4.2查询已预约物资

当用户点击查询已预约物资时。前台将发送messageId为P101的Url,并将所有查询条件作为参数用Ajax发送到后台,后台的ControlServlet接收到messageId为P101的Url后,将通过Java反射调用P101Controller,P101Controller的在业务处理中将查询数据表中所有已预约但未借出的物资,封装成Json数据发送到前台,前台接收到Json数据后,实现异步刷新,更新表格数据。

时序图如图4.4.2所示。

28

图4.4.2 查询已预约物资顺序图

4.4.3 查询未归还物资

当用户点击查询未归还物资时。前台将发送messageId为P101的Url,并将所有查询条件作为参数用Ajax发送到后台,后台的ControlServlet接收到messageId为P101的Url后,将通过Java反射调用P101Controller,P101Controller的在业务处理中将查询数据表中所有未归还的物资,封装成Json数据发送到前台,前台接收到Json数据后,实现异步刷新,更新表格数据。

时序图如图4.4.3所示。

29

图4.4.3 未归还物资流程图

4.4.4 条件查询

当用户点击查询时。前台将发送messageId为P101的Url,并将所有查询条件作为参数用Ajax发送到后台,后台的ControlServlet接收到messageId为P101的Url后,将通过Java反射调用P101Controller,P101Controller的在业务处理中将查询数据表中所有符合条件的物资记录,封装成Json数据发送到前台,前台接收到Json数据后,实现异步刷新,更新表格数据。

时序图如图4.4.4所示。

30

图4.4.4 条件查询顺序图

4.4.5 物资编辑

当用户在前台对应的物资记录点击物资编辑时,前台将发送messageId为P104的Url,并将当前的物资记录的id发送到后台,后台的ControlServlet接收到messageId为P104的Url后,将通过Java反射调用P104Controller,P104Controller的在业务处理中将查询数据表中符合条件的物资记录,封装成Json数据发送到前台,前台接收到Json数据后,实现异步刷新,弹出记录物资信息的弹窗。

时序图如图4.4.5所示。

31

图4.4.5 物资编辑时序图

4.5数据库设计

数据库作为储存数据的工具,设计得好将大大提升系统本身的运作效率,所以数据库设计环节也是非常重要的,经过我们小组的思考与讨论,设计出了如下数据表。

32

图4.5.1 物资与物资借用表关系图

表名:good

功能:记录物资名称、物资总数、物资剩余数量。

字段名称 ID 数据类型 int 数据长度 5 是否允许为空 否 说明 物资ID(自增长、主键) GOODNAME GOODLEFTNUM GOODTOTALNUM char int int 20 5 5 表4.5.2 good 物资表

否 否 否 物资名称 物资剩余数量 物资总数 表名:borrowgood

功能:用于记录物资借用时的信息,方便之后对物资借用进行操作。 其中物资借用状态,物资归还状态为YES或者NO,当物资借用状态为NO时,表示这条物资记录是预约的。借用详细过程可以记录所有对这条物资信息进行编辑时的详细操作。

字段名称 数据类型 数据长度 是否允许为空 ID int 8 否 物资借用ID(主键)

33

说明 GOODNAME GOODNUM BORROWORGANIZETION BORROWSTU BORROWSTUPHONE char int char char char 20 5 30 10 20 否 否 否 否 否 物资名称 物资总数 借用物资单位 借用物资学生 借用物资学生电话 BORROWDATE RETURNDATE BORROWCHECKINUSER char char char 15 15 10 否 否 否 借用日期 归还日期 借用物资登记人 RETURNCHECKINUSER char 10 否 归还物资登记人 DATAIL text 0 是 更多物资借用详细信息 BORROWSTATUS RETURNSTATUS BORROWPROCESS char char text 3 3 0 否 否 否 物资借用状态 物资归还状态 借用详细过程 表4.5.3 borrowgood物资借用表

5系统实现

(1)浏览器通过URL访问服务器,携带messageId参数以及一些必要的其他参数信息。

(2)所有的访问信息都由ControlServlet来处理,ControlServlet得到messageId后,ControlServlet通过Java反射技术调用对应的Controller类。部分代码如下【9】:

BaseController controller = null;

34

Class classType = null;

String messageId = request.getParameter(\); String className = \+messageId+ \;

System.out.println(\进入ControllerServlet\); //反射生成对应的controller

classType=Class.forName(className);

controller=(BaseController) classType.newInstance(); response.setCharacterEncoding(\);

request=controller.RequestWrapper(request,response); response=controller.ResponseWrapper(response);

举个例子,如果传入的messageId是B101,则系统则将会找到Cotroller.UserController包下对应的B101Controller类,调用它的RequestWrapper和ResponseWrapper方法。(注:截至今天ResponseWrapper方法并没有实际的作用,之所以定义这个方法是为了防止以后的业务拓展需求而不得不改大量的代码。)

(3)为了满足系统的需求,我设计了6个业务逻辑处理的类【6】。

1. B101Controller(部分代码) List returnList

=borrowGoodManageService.getGoodByParams(borrowGood); PageTool tool=new PageTool(); returnList=tool.loadData(pageSize, 1, returnList); //设置属性

request.setAttribute(\, tool.getTotalPage()); request.setAttribute(\,1); //封装成JSON

JSONArray jsonList=JSONArray.fromObject(returnList); response.setCharacterEncoding(\);

response.getWriter().write(jsonList.toString());

35

B101是一个根据查询条件查询结果的业务逻辑类,它先把从Request取出的查询参数,封装成一个BorrowGood对象。然后传入这个BorrowGood对象调用getGoodByParams服务,返回数据库中相符合的所有数据集合。之后,将数据重新截成前台分页显示所需要的格式。最后将符合前台分页格式的数据封装成JSON数据发送到前台。

下图是根据B101Controller得到的前台数据界面截图

图5.1 B101Controller页面截图

2. B102Controller(部分代码) User user=new User();

user.setStuId(request.getParameter(\)); BorrowGood borrowGood=new BorrowGood(); if(request.getParameter(\)!=null)

borrowGood.setId(Integer.parseInt(request.getParameter(\))); borrowGood.setReturnStatus(\);

if(borrowGoodManageService.updateGoodById(borrowGood, user)){

response.getWriter().println(1);

}else{

36

}

response.getWriter().println(0);

B102是物资归还的业务逻辑类,它从cookie中获得当前正在进行此操作的用户学号,通过把Request里的当前操作的物资记录Id参数取出来,将其归还状态设置为YES。然后执行updateGoodById服务,若归还成功,则返回给前台1这个数据,否则返回0。

3. B103Controller(部分代码) //得到cookie

Cookie[] cookies=request.getCookies(); Cookie currentusername=null; for(Cookie cookie:cookies){

if(cookie.getName().equals(\)) }

user.setStuId(currentusername.getValue()); user=userManageService.doUserByStuId(user); borrowGood.setBorrowCheckInUser(user.getName());

borrowGood.setBorrowDate(request.getParameter(\)); borrowGood.setBorrowOrganization(request.getParameter(\ization\));

currentusername=cookie;

String borrowStatus=request.getParameter(\); if(borrowStatus.equals(\借用\)){

borrowStatus=\;

}else{

borrowStatus=\;

}

borrowGood.setBorrowStatus(request.getParameter(\));

37

borrowGood.setBorrowStu(request.getParameter(\));

borrowGood.setBorrowStuPhone(request.getParameter(\));

borrowGood.setDetail(request.getParameter(\)); borrowGood.setGoodName(request.getParameter(\));

borrowGood.setGoodNum(Integer.parseInt(request.getParameter(%um\)));

borrowGood.setReturnDate(request.getParameter(\)); borrowGood.setReturnStatus(\);

if(borrowGoodManageService.addBorrowGood(borrowGood)){

response.getWriter().println(1);

}else{

response.getWriter().println(0);}

B103是物资借用的业务逻辑类,它从cookie中获得当前正在进行此操作的用户id,从而根据id在数据库中找出此Id的用户信息。然后将用户的必要信息,以及从Request的参数中得到的数据封装成BorrwGood类。然后调用addBorrowGood服务,传入User与BorrowGood这两个实体,完成添加物资的操作。若此物资的余量充足,则添加物资成功,返回给前台的信息是1,否则返回给前台的信息是0。

下图是根据B103Controller逻辑得到的物资借用截图。

38

图5.2 B103Controller页面截图

4.B104 Controller(部分代码)

BorrowGood borrowGood=new BorrowGood(); User user=new User();

user.setStuId(request.getParameter(\));

39

user=userManageService.doUserByStuId(user); if(request.getParameter(\)!=null)

borrowGood.setId(Integer.parseInt(request.getParameter(\))); borrowGood.setBorrowDate(request.getParameter(\)); borrowGood.setBorrowOrganization(request.getParameter(\ization\));

borrowGood.setBorrowStu(request.getParameter(\)); borrowGood.setBorrowStuPhone(request.getParameter(\));

borrowGood.setDetail(request.getParameter(\)); borrowGood.setGoodNum(Integer.parseInt(request.getParameter(%um\)))

borrowGood.setReturnDate(request.getParameter(\)); if(borrowGoodManageService.updateGoodById(borrowGood, user)){

response.getWriter().println(1);

}else{ }

B104是编辑借用信息的业务逻辑类。它从cookie中获得当前正在进行此操作的用户id,从而根据id在数据库中找出此Id的用户信息。然后将用户的必要信息,以及从Request的参数中得到的数据封装成BorrwGood类。。然后调用updateGoodById服务,传入User与BorrowGood这两个实体,完成编辑物资的操作。若编辑成功,返回给前台的信息是1,否则返回给前台的信息是0。

下图是根据B104Controller得到的用户界面截图。

图5.3 B104Controller界面截图

response.getWriter().println(0);

5.B105Controller(部分代码)

borrowGood.setGoodName(request.getParameter(\));

40

本文来源:https://www.bwwdw.com/article/n766.html

Top