摘 要
生活中需要一种有效的智能的运动器材共享系统来为人们提供便利,市场需求巨大,而我们针对现实日常生活中出现的这种情况,设计了运动器材共享平台。运动器材共享平台是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java的SSM技术构建的一个管理系统。整个开发过程首先对软件系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计等;详细设计主要包括系统数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对系统进行功能测试,并对测试结果进行分析总结,得出系统中存在的不足及需要改进的地方,为以后的系统维护提供了方便,同时也为今后开发类似系统提供了借鉴和帮助。这种个性化的共享平台系统管理特别注重交互协调与管理的相互配合,激发了管理人员的创造性与主动性,对运动器材的在线共享而言非常有利。
本运动器材共享平台采用的数据库是Mysql,使用Java的SSM技术开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。
关键词:运动器材共享平台,SSM,Mysql
Design of SSM sports equipment sharing platform
ABSTRACT
With the rapid development of science and technology, all aspects of society and all walks of life are trying to integrate with modern advanced technology and improve their own advantages through scientific and technological means. Of course, note sharing system can not be excluded. Note sharing system is based on practical application, using software engineering principles and development methods, using node JS technology to build a management system. The whole development process first analyzes the requirements of the software system and obtains the main functions of the system. Then the overall design and detailed design of the system are carried out. The overall design mainly includes system function design, system overall structure design, system data structure design and system security design; The detailed design mainly includes the realization of system database access, the specific realization of main function modules, the key code of module realization and so on. Finally, the function of the system is tested, and the test results are analyzed and summarized, and the shortcomings and areas that need to be improved in the system are obtained, which not only provides convenience for future system maintenance, but also provides reference and help for the development of similar systems in the future. This personalized online system management pays special attention to the interaction and coordination of management, stimulates the creativity and initiative of managers, and is very beneficial to online book sharing.
The database used in this note sharing system is mysql, using node JS technology development. In the design process, the system code has the characteristics of good readability, practicability, easy expansibility, universality, easy later maintenance, convenient operation and concise page.
Key words: Note sharing system, node js,Mysql
目 录
第1章 绪论
1.1背景及意义
随着社会的快速发展,计算机的影响是全面且深入的。人们生活水平的不断提高,日常生活中人们对共享方面的要求也在不断提高,共享类目的数量更是不断增加,使得运动器材共享平台的开发成为必需而且紧迫的事情。运动器材共享平台主要是借助计算机,通过对运动器材共享平台所需的信息管理,增加用户的选择,同时也方便对广大用户信息的及时查询、修改以及对用户信息的及时了解。运动器材共享平台对用户带来了更多的便利,该系统通过和数据库管理系统软件协作来满足用户的需求。计算机技术在现代管理中的应用,使计算机成为人们应用现代技术的重要工具。能够有效的解决获取信息便捷化、全面化的问题,提高效率。
本运动器材共享平台主要牵扯到程序,数据库与计算机技术等。覆盖知识面大,可以大大的提高系统人员工作效率。
运动器材共享平台的开发及实现,所需要的工作内容:
(1)首先是确定选题,确定好所要做的系统,并对系统的背景及现在面临的一些问题等进行系统的初步确认。
(2)系统确认完成后,结合系统开发的需求进行确认系统开发所使用的技术,运动器材共享平台的开发使用SSM框架,数据库进行平台的搭建开发,确认好使用的技术进行技术分析,所使用的技术是否可以完成系统的实现。
(3)确定好系统使用的技术,进行在线确认系统所划分的用户角色,并且根据用户角色划分确定所要设计的功能模块,对运动器材共享平台的设计主要划分别为管理员和用户角色,并所使用的功能模块也相应不同,但是系统的数据库实现的内容是交互的,用户可以随时根据自己的需求进行器材信息查询,对于系统工作人员可以根据自己的分管内容进行在线信息的处理及操作,管理员获取到所有用户的详细数据信息,并根据需求进行第一时间处理解决。
(4)系统的功能模块确认完成后进行程序及界面的设计,设计完成后,并且通过测试来判断程序是否完善,对于系统测试,需要不同的用户进行不同的内容编辑及提交,及使用不同的测试方式找出程序中存在的漏洞,并对程序出现的漏洞问题进行在线解决处理,如果测试系统没有任何问题时,可以将系统上传进行正式操作使用。
第2章 相关技术
2.1 SSM框架
Java是一个异步的世界,官方API支持的都是callback形式的异步编程模型,这会带来许多问题,例如:1、callback嵌套问题;2、异步函数中可能同步调用callback返回数据,带来不一致性。为了解决以上问题SSM出现了。
SSM是由Express原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的Web框架。使用SSM编写web应用,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。SSM不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写Web应用变得得心应手。开发思路和express差不多,最大的特点就是可以避免异步嵌套。
阿里内部就在使用SSM框架,并在SSM基础上面做了一些扩展和封装。并且基于SSM开发了一个开源框架egg。
Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时,Vue.js 也能驱动复杂的单页应用。
2.3 MVVM模式介绍:
MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。
2.4 B/S体系工作原理:
B/S架构采取浏览器请求,服务器响应的工作模式。
用户可以通过浏览器去访问Internet上由Web服务器产生的文本、数据、图片、动画、视频点播和声音等信息;
而每一个Web服务器又可以通过各种方式与数据库服务器连接,大量的数据实际存放在数据库服务器中;
从Web服务器上下载程序到本地来执行,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器,Web服务器又返回给用户。在这种结构中,将许许多多的网连接到一块,形成一个巨大的网,即全球网。而各个企业可以在此结构的基础上建立自己的Internet。
在 B/S 模式中,用户是通过浏览器针对许多分布于网络上的服务器进行请求访问的,浏览器的请求通过服务器进行处理,并将处理结果以及相应的信息返回给浏览器,其他的数据加工、请求全部都是由Web Server完成的。通过该框架结构以及植入于操作系统内部的浏览器,该结构已经成为了当今软件应用的主流结构模式。
2.5 MySQL数据库
Mysql的语言是非结构化的,用户可以在数据上进行工作。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。并且因为Mysql的语言和结构比较简单,但是功能和存储信息量很强大,所以得到了普遍的应用。
Mysql数据库在编程过程中的作用是很广泛的,为用户进行数据查询带来了方便。Mysql数据库的应用因其灵活性强,功能强大,所以在实现某功能时只需要一小段代码,而不像其他程序需要编写大段代码。总体来说,Mysql数据库的语言相对要简洁很多。
数据流程分析主要就是数据存储的储藏室,它是在计算机上进行的,而不是现实中的储藏室。数据的存放是按固定格式,而不是无序的,其定义就是:长期有固定格式,可以共享的存储在计算机存储器上。数据库管理主要是数据存储、修改和增加以及数据表的建立。为了保证系统数据的正常运行,一些有能力的处理者可以进行管理而不需要专业的人来处理。数据表的建立,可以对数据表中的数据进行调整,数据的重新组合及重新构造,保证数据的安全性。介于数据库的功能强大等特点,本系统的开发主要应用了Mysql进行对数据的管理。
第3章 系统分析
3.1 需求分析
运动器材共享平台主要是为了更方便快捷的满足运动爱好者们,同时更好存储所有数据信息及快速方便的检索功能,对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑用户的可操作性,遵循开发的系统优化的原则,经过全面的调查和研究。
系统所要实现的功能分析,对于现在网络方便的管理,系统要实现用户可以直接在平台上进行查看所有数据信息,根据需求可以进行在线添加,删除或修改运动器材共享平台信息,这样既能节省时间,不用再像传统的方式耽误时间,真的很难去满足用户的各种需求。所以运动器材共享平台的开发不仅仅是能满足用户的需求,还能提高管理员的工作效率,减少原有不必要的工作量。
3.2 系统可行性分析
3.2.1技术可行性:技术背景
本平台在Windows操作系统中进行开发,并且目前PC机的性能已经可以胜任普通网站的web服务器。系统开发所使用的技术也都是自身所具有的,也是当下广泛应用的技术之一。
系统的开发环境和配置都是可以自行安装的,系统使用Java的SSM开发工具,使用比较成熟的Mysql数据库进行对系统前台及后台的数据交互,根据技术语言对数据库,结合需求进行修改维护,可以使得网站运行更具有稳定性和安全性,从而完成实现平台的开发。
(1)硬件可行性分析
运动器材共享平台及信息分析的设计对于所使用的计算机没有什么硬性的要求,计算机只要可以正常的使用进行代码的编写及页面设计就可行,主要是对于服务器有些要求,对于平台搭建完成要上传的服务器是有一定的要求的,服务器必须选择安全性比较高的,然后就是在打开网站必须顺畅,不能停顿太长时间;性价比高;安全性高。
(2)软件可行性分析
开发整个系统使用的是云计算,流量的可扩展性和基于流量的智能调整云计算的优点就是流量的可扩展性和基于流量的智能调整,保障系统的安全及数据信息的及时备份。
因此,我们从两个方面进行了可行性研究,可以看出系统的开发没有问题。
3.2.2经济可行性
在运动器材共享平台开发之前所做的市场调研及其平台网站相关功能设计,都是没有任何费用的,都是通过开发者自己的努力,所有的工作的都是自己亲力亲为,在碰到自己比较难以解决的问题,大多是通过同学和指导老师的帮助进行相关信息的解决,所以对于运动器材共享平台的开发在经济上是完全可行的,没有任何费用支出的。
使用比较成熟的技术,系统是基于Java的SSM的开发,采用Mysql数据库。所以系统在开发人力、财力要求不高,具有经济可行性。
3.2.3操作可行性:
可操作性主要是对运动器材共享平台设计完成后,用户的使用体验度,以及管理员可以通过系统随时管理相关的数据信息,并且对于管理员、出借人和租借人三个用户角色,都可以简单明了的进入到自己的系统界面,通过界面导航菜单可以简单明了地操作功能模块,方便用户信息的操作需求和管理员管理数据信息,对于系统的操作,不需要专业人员都可以直接进行功能模块的操作管理,所以在系统的可操作性是完全可以的。本系统的操作使用的也是界面窗口进行登录,所以操作人员只要会简单的电脑操作就完全可以的。
3.3 项目设计目标与原则
1、关于运动器材共享平台的基本要求
(1)功能要求:可以管理首页、站点管理(轮播图、公告栏)用户管理(管理员、出借人、租借人)内容管理(交流中心、交流中心分类、新闻资讯、资讯分类)更多管理(器材租借、分类管理、租借信息、归还信息、评价信息)系统管理等功能模块。
(2)性能:在不同操作系统上均能无差错实现在不同类型的用户登入相应界面后能不出差错、方便地进行预期操作。
(3)安全与保密要求:用户都必须通过身份验证才能进入系统,并且用户的权限也需要根据用户的类型进行限定。
(4)环境要求:支持多种平台,可在Windows系列、Vista系统等多种操作系统下使用。
2、开发目标
运动器材共享平台的主要开发目标如下:
(1)实现器材信息管理系统化、规范化和自动化;
(2)减少维护人员的工作量以及实现用户对信息的控制和管理。
(3)方便查询信息及管理信息等;
(4)通过网络操作,改善处理问题的效率,提高操作人员利用率;
(5)考虑到用户多样性特点,要求界面简单,操作简便。
3、设计原则
本运动器材共享平台采用Java的SSM技术,Mysql数据库开发,充分保证了系统稳定性、完整性。
运动器材共享平台的设计与实现的设计思想如下:
- 操作简单方便、系统界面安全良、简单明了的页面布局、方便查询运动器材共享平台相关信息。
2、即时可见:对运动器材共享平台信息的处理将立马在对应地点可以查询到,从而实现“即时发布、即时见效”的系统功能。
3、功能的完善性:可以管理首页、站点管理(轮播图、公告栏)用户管理(管理员、租借人、出借人)内容管理(交流中心、交流中心分类、新闻资讯、资讯分类)更多管理(运动器材、分类管理、租借信息、归还信息、评价信息)系统管理模块的修改维护操作。
3.4系统流程分析
3.4.1操作流程
图3-1登录流程图
3.4.2添加信息流程
添加信息流程图,如图所示:
图3-2添加信息流程图
3.4.3删除信息流程
删除信息流程图,如图所示:
图3-3删除信息流程图
第4章 系统设计
4.1 系统体系结构
运动器材共享平台的结构图4-1所示:
图4-1 系统结构
登录系统结构图,如图4-2所示:
图4-2 登录结构图
管理员结构图,如图4-3所示。
图4-3 管理员结构图
4.2开发流程设计
系统流程的分析是通过调查系统所涉及问题的识别、可行性、可操作性、系统分析处理能力等具体环节来调节、整理系统的设计方案以确保系统能达到理想的状态。这些操作都要从注册、登录处着眼进行一系列的流程测试保证数据库的完整,从而把控系统所涉及信息管理的安全、保证信息输入、输出正常转换。然后,通过实际操作完成流程图的绘制工作。
运动器材共享平台的开发对管理模块和系统使用的数据库进行分析,编写代码,系统测试,如图4-4所示。
图4-4开发系统流程图
4.3 数据库设计原则
学习编程,我们都知道数据库设计是基于需要设计的系统功能,我们需要建立一个数据库关系模型,用于存储数据信息,这样当我们在程序中时,就没有必要为程序页面添加数据,从而提高系统的效率。数据库存储了很多信息,可以说是信息管理系统的核心和基础,数据库还提供了添加、删除、修改和检查,使系统能够快速找到自己想要的信息,而不是在程序代码中找到。数据库中信息表的每个部分根据一定的关系精确地组合,排列和组合成数据表。
通过运动器材共享平台的功能进行规划分成几个实体信息,实体信息将通过ER图进行说明,本系统的主要实体图如下:
管理员信息属性图如图4-5所示。
图4-5 管理员信息实体属性图
器材租借管理实体属性图如图4-6所示。
图4-6器材租借管理属性图
归还信息管理实体属性图如图4-7所示。
图4-7归还信息管理实体属性图
4.4 数据表
将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
leaseholder_id | int | 11 | 是 | 是 | 租借人ID |
full_name | varchar | 64 | 否 | 否 | 姓名 |
gender | varchar | 64 | 否 | 否 | 性别 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
lessor_id | int | 11 | 是 | 是 | 出租人ID |
full_name | varchar | 64 | 否 | 否 | 姓名 |
gender | varchar | 64 | 否 | 否 | 性别 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
equipment_rental_id | int | 11 | 是 | 是 | 器材租借ID |
equipment_name | varchar | 64 | 否 | 否 | 器材名称 |
equipment_classification | varchar | 64 | 否 | 否 | 器材分类 |
price_information_ | int | 11 | 否 | 否 | 价格信息 |
price_unit | varchar | 64 | 否 | 否 | 价格单位 |
lessor_information | int | 11 | 否 | 否 | 出租人信息 |
lessor_telephone_number | varchar | 16 | 否 | 否 | 出租人电话 |
rental_status | varchar | 64 | 否 | 否 | 出租状态 |
equipment_picture | varchar | 255 | 否 | 否 | 器材图片 |
description_information | text | 0 | 否 | 否 | 描述信息 |
hits | int | 11 | 是 | 否 | 点击数 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
classification_management_id | int | 11 | 是 | 是 | 分类管理ID |
equipment_classification | varchar | 64 | 否 | 否 | 器材分类 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
rental_information_id | int | 11 | 是 | 是 | 租借信息ID |
equipment_name | varchar | 64 | 否 | 否 | 器材名称 |
equipment_classification | varchar | 64 | 否 | 否 | 器材分类 |
price_information_ | varchar | 64 | 否 | 否 | 价格信息 |
lessor_information | int | 11 | 否 | 否 | 出租人信息 |
lessor_telephone_number | varchar | 64 | 否 | 否 | 出租人电话 |
tenant_information | int | 11 | 否 | 否 | 租借人信息 |
tenant_telephone | varchar | 16 | 否 | 否 | 租借人电话 |
lease_duration | int | 11 | 否 | 否 | 租借时长 |
rental_amount | varchar | 64 | 否 | 否 | 租借金额 |
lease_status | varchar | 64 | 否 | 否 | 租借状态 |
reply_message | text | 0 | 否 | 否 | 回复信息 |
pay_state | varchar | 16 | 是 | 否 | 支付状态 |
pay_type | varchar | 16 | 否 | 否 | 支付类型: |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
return_information_id | int | 11 | 是 | 是 | 归还信息ID |
equipment_name | varchar | 64 | 否 | 否 | 器材名称 |
equipment_classification | varchar | 64 | 否 | 否 | 器材分类 |
lessor_information | int | 11 | 否 | 否 | 出租人信息 |
tenant_information | int | 11 | 否 | 否 | 租借人信息 |
return_time | varchar | 64 | 否 | 否 | 归还时间 |
return_status | varchar | 64 | 否 | 否 | 归还状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
evaluation_information_id | int | 11 | 是 | 是 | 评价信息ID |
equipment_name | varchar | 64 | 否 | 否 | 器材名称 |
equipment_classification | varchar | 64 | 否 | 否 | 器材分类 |
tenant_information | int | 11 | 否 | 否 | 租借人信息 |
evaluation_picture | varchar | 255 | 否 | 否 | 评价图片 |
evaluation_information | text | 0 | 否 | 否 | 评价信息 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
第5章 系统详细设计
5.1系统功能模块
登录,通过填写注册时输入的用户名、密码、选择角色进行登录,如图5-1所示。
图5-1登录界面图
用户登录的逻辑代码如下所示。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
QueryWrapper wrapper = new QueryWrapper<User>();
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
public String select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return sql.toString();
}
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
运动器材共享平台,在系统首页可以查看首页、交流中心、新闻资讯、器材租借、分类管理、租借信息、归还信息、评价信息等内容进行操作,如图5-2所示。
图5-2系统首页界面图
新闻资讯,在新闻资讯页面可以查看标题、分类、封面图片、标签、内容等详细信息,如图5-3所示。
图5-3新闻资讯界面图
用户注册,在用户注册页面通过填写账号、密码、昵称、手机、邮箱等信息完成注册,如图5-4所示。在个人资料页面通过填写账号、密码、昵称、性别、手机、邮箱、用户类型等信息进行信息更新操作,如图5-5所示。
图5-4用户注册界面图
用户注册逻辑代码如下:
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
图5-5个人资料界面图
5.2管理员功能模块
管理员登录进入运动器材共享平台可以查看首页、站点管理(轮播图、公告栏)用户管理(管理员、用户)内容管理(交流中心、交流中心分类、新闻资讯、资讯分类)更多管理(器材租借、租借信息、归还信息、分类管理、评价信息)系统管理等信息进行详细操作,如图5-6所示。
图5-6管理员功能界面图
用户管理,在用户管理页面中可以对索引、用户名、密码、昵称、性别、手机、邮箱、身份证、用户类型等信息进行详情,修改或删除等操作,如图5-7所示。
图5-7用户管理界面图
交流中心分类管理,在交流中心分类管理页面中可以对索引、频道名称、描述等信息进行修改或删除等操作,如图5-8所示。
图5-8交流中心分类管理界面图
器材租借管理,在器材租借管理页面中可以对器材名称、器材分类、价格信息、价格单位、出租人信息、出租人电话、出租状态信息管理维护等操作,如图5-9所示。
图5-9器材租借管理界面图
器材租借管理的逻辑代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append("`").append(table).append("`").append(" (");
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(") VALUES (");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
评价信息,在评价信息页面中可以对器材进行评价、也可对评价等信息进行修改或删除等操作,如图5-10所示。
图5-10评价信息界面图
租借信息管理,在租借信息管理页面中可以对器材名称、器材分类、价格信息、出租人信息、租借人信息、租借人电话等信息进行维护管理,如图5-11所示。
图5-11租借信息管理界面图
租借信息管理界面逻辑代码如下:
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
5.3用户功能模块
用户登录进入平台可以查看首页、新闻资讯、器材租借、租借信息、归还信息等内容进行详细操作,如图5-12所示。
图5-12用户功能界面图
归还信息,在归还信息页面中通过填写器材名称、器材分类、出租人信息、租借人信息、归还时间、归还状态等信息进行修改操作,如图5-13所示。
图5-13归还信息界面图
第6章 系统测试
6.1系统测试的目的
程序设计不能保证没有错误,这是一个开发过程,在错误或错误的过程中都是难以避免的。虽然这是不可避免的,但我们不能使这些错误始终存在于系统中,错误可能会造成无法估量的后果,如系统崩溃,安全信息泄露,系统无法正常启动等,为了避免这些问题,我们需要测试程序,再测试过程中发现问题,并纠正它们,从而使系统更长时间稳定成熟。本章的作用是发现这些问题,并对其进行修改,虽然耗时费力,但对于长期使用而言是非常重要和必要系统的开发。
软件在设计后必须进行测试,调试过程中使用的方法是软件测试方法。在开发新软件时,系统测试是检查软件是否合格的关键步骤,以及是否符合设计目标的参考。测试主要是查看软件中数据的准确性,正确的操作与否,以及操作的结果,还有哪些方面需要改进。
运动器材共享平台的实现,对于系统中功能模块的实现及操作都必须通过测试进行来评判系统是否可以准确的实现。在运动器材共享平台正式上传使用之前必须做的一步就是系统测试,对于测试发现的错误及时修改处理,保证系统准确无误的供给用户使用。
6.2系统测试方法
在对运动器材共享平台进行测试的时候在找到问题的情况下必须在第一时间找到解决问题的办法,不要存在侥幸的心理,这样才能让运动器材共享平台开发的质量可以过关,并且开发的周期会大大缩短,还有就是在测试时,不要出现重复性的错误,遇到一个错误问题,要将整个运动器材共享平台开发所牵扯的该问题都必须一一解决,提高运动器材共享平台的安全性、稳定性。
白盒测试与黑盒测试是测试中比较常用的两种方法。
①结构测试俗称白盒测试:这种测试是在对程序的处理过程与结构都有详尽谅解的前提下,顺从程序内部的逻辑而完成的系统测试,以确定系统中所有的通路都能够遵照设计要求正常工作,不出现任何偏差。
②功能测试又成黑盒测试:主要是针对程序功能能够按照设计正常实现的一种检测,在程序接口处进行,检测程序手法数据是否正常,与外部信息的交换是否完整。
6.3功能测试
用户登录测试:
模块名称 | 测试用例 | 预期结果 | 实际结果 | 是否通过 |
登录模块 | 用户名:admin 密码:123 | 弹出错误提示,提示密码错误 | 弹出错误提示,提示密码错误 | 通过 |
登录模块 | 用户名:123 密码:admin | 弹出错误提示,提示用户名错误 | 弹出错误提示,提示用户名错误 | 通过 |
登录模块 | 用户名:admin 密码:admin | 管理员登录成功 | 管理员登录成功 | 通过 |
删除分类测试:
模块名称 | 测试用例 | 预期结果 | 实际结果 | 是否通过 |
删除分类模块 | 分类名:最新通知 | 删除成功、页面自动跳转 | 删除成功、页面自动跳转 | 通过 |
修改密码测试:
模块名称 | 测试用例 | 预期结果 | 实际结果 | 是否通过 |
修改密码模块 | 原密码:666 新密码:123 确认密码:123 | 弹出错误提示,提示原密码错误 | 弹出错误提示,提示原密码错误 | 通过 |
修改密码模块 | 原密码:admin 新密码:123 确认密码:333 | 弹出错误提示,提示确认密码不一致 | 弹出错误提示,提示确认密码不一致 | 通过 |
修改密码模块 | 原密码:admin 新密码:123 确认密码:123 | 密码修改成功 | 密码修改成功 | 通过 |
通过对功能的测试,运动器材共享平台的基本功能都是可行的,不管是系统里面的功能,还是界面的设计都是可值得推广宣传的。
此时项目已经完成,即使实施的时间不是很长,但是这个过程中需要准备很长的一段时间去对系统设计开发所实际到的技术进行学习。在学习的过程中,我逐渐认识得到了我自身存在的一些不足。对于一些控制是必要的应用技能,能够理解,整个过程中仅仅是一个掌握了常用的性能和控制方法,我觉得挺容易的。从该系统中,系统的分析和设计的调查数据,并且已经经历了几个月,并努力几个月,该系统已经完成。很显然,该系统仍有很多不成熟,在系统设计过程中有许多技术缺陷存在。在设计的过程中也涉及到了很多自己无法解决的问题,主要通过找专业的网站和论坛来解决这些问题,对于圆满完成我的毕业设计,他们也贡献了很大一部分力量。系统的开发环境和配置都是可以自行安装的,系统使用VUE.js开发工具,使用比较成熟的Mysql数据库进行对系统前台及后台的数据交互,根据技术语言对数据库,结合需求进行修改维护,可以使得系统运行更具有稳定性和安全性,从而完成实现系统的开发。
回顾毕业设计的整个过程,既付出汗水也收获了很多。虽然经历了各种各样的困难,自己的不断研究探索,系统的实现仍有不足之处。
在以后的学习及工作中,我仍然继续学习计算机方面的技术,让我在后期的平台开发中可以更好更快的实现需求功能。我相信我可以让更多的好工作,做出更大的贡献。
致 谢
运动器材共享平台的完成,如何实现的更好,其中付出的努力是很大的,这段时光将会终身难忘。
首先要感谢我的指导老师,谢谢您在设计和论文中给我的指导。在您的细心指导下我才能快速的掌握系统的相关功能,在您的大力帮助下我才能将课本上的知识与自己的项目结合,真正的做到学以致用。感谢您经常牺牲自己的休息时间,利用其丰富的教学和项目经验对我进行指导。
感谢所有教过我的老师,为我倾注了大量的心血,正是你们的谆谆教诲、严谨教学才使我能顺利的完成学业,再此向你们表示深深的感谢。
感谢我的同学们,对我的大力支持及帮助,正是你们不断的帮助、鼓励,给我带来了极大的动力,最终系统可以顺利的运行。我们在交流、谈论的这段时间,将是我未来的财富,我要深深地感谢你们!
毕业在即,在今后的工作和生活中,我会铭记师长们的教诲、同学们的帮助,继续不懈努力和追求,来报答所有支持和帮助过我的人!。
参考文献
[1]陈炜哲,郭亮亮.浅析共享平台的设计实现[J].山西电子技术,2022(01):72-75.
[2]张金钟,张小瑞,朱欣月.数据共享平台在中色非洲矿业数字化矿山建设中的应用[J].黄金,2021,42(12):49-52.
[3]蔡冠蓝.基于GIS的体育公共服务共享平台建设分析[J].信息与电脑(理论版),2021,33(20):196-198.
[4]刘德胜,李光红.共享平台能否成为中小企业创新资源的来源——基于信息技术的中介效应检验[J].山东社会科学,2021(10):106-115.
[5]王江霖,黄彩霞,樊旭龙.基于SSM框架的资源共享平台的研究与实现[J].电脑知识与技术,2021,17(28):76-78.
[6]朱昕昭,齐莉丽.社会化分享下知识共享平台用户的信息价值感知研究[J].天津职业技术师范大学学报,2021,31(03):69-73.
[7]褚露露,吴佳丽,朱文君,张维臣,何往.骑行旅游信息共享平台的比较分析及创新构建思路[J].湖北经济学院学报(人文社会科学版),2021,18(10):48-52.
[8]朱安琪.大数据背景下财务共享平台的构建[J].物流科技,2021,44(07):25-27.
[9]许惠玲,钟二妹,彭俊清,詹晓霞,唐嘉敏,吴铭涛.浅议“互联网+二手运动器材”平台的设计及研发[J].科技与创新,2021(13):43-44.
[10]张丽华.借助运动器材实现体育课堂悦动[J].田径,2021(07):75-76.
[11]曹华山.SSM框架在Web应用开发中的设计与实现[J].无线互联科技,2021,18(11):108-109.
[12]秦溧,艾青.基于SSM框架的学生生活服务平台的设计与实现[J].电脑知识与技术,2021,17(13):80-82.
[13]陈钊.SSM框架在Web应用开发中的设计与实现研究[J].电脑知识与技术,2021,17(10):226-227.
[14]Zhuoxi Zhang,Ming Yuan,Hanwei Qian. Research on MySQL Database Recovery and Forensics Based on Binlog[C]//Proceedings of the 11th International Conference on Computer Engineering and Networks(CENet2021)Part I.,2021:750-759.
[15]Sufyan bin Uzayr. Getting the Most out of Java Frameworks:The Essential Tools and Libraries[M].CRC Press:2021-09-12.
[16]Ntantogian Christoforos,Bountakas Panagiotis,Antonaropoulos Dimitris,Patsakis Constantinos,Xenakis Christos. NodeXP: Java server-side JavaScript injection vulnerability DEtection and eXPloitation[J]. Journal of Information Security and Applications,2021,58:
免费领取本源代码,请关注+点赞