springboot“露营吧”户外活动交流社区网站
摘要
户外活动交流社区网站的开发主要是为户外爱好者提供一个互动、分享和交流的平台,以促进户外活动的推广和参与。户外爱好者可以通过社区网站相互交流、分享经验、提供建议和推荐。这种互动促进了户外爱好者之间的联系和沟通,共同探讨户外活动相关的话题。系统分为用户端及管理员端,用户(前台)主要功能有登录、个人中心、发布活动、活动讨论、交流论坛、私信互动等;管理员(后台)主要功能有登录,个人设置、用户管理、活动管理、交流管理、讨论管理以及社区规划维护等。 本“露营吧”户外活动交流社区网站基于Java技术和Springboot框架,采用B/S开发模式,应用MySQL 数据库进行实时存储。网站的开发主要为用户提供一个便捷、安全和丰富的户外活动交流平台。
关键词:户外活动,Springboot,数据库
abstract
The development of an outdoor activity exchange community website is mainly aimed at providing an interactive, sharing, and communication platform for outdoor enthusiasts to promote and participate in outdoor activities. Outdoor enthusiasts can communicate with each other, share experiences, provide suggestions and recommendations through community websites. This interaction promotes contact and communication among outdoor enthusiasts, jointly exploring topics related to outdoor activities. The system is divided into a user end and an administrator end. The main functions of the user (front-end) include login, personal center, posting activities, event discussions, communication forums, private message interaction, fan follow, etc; The main functions of the administrator (backend) include login, personal settings, user management, activity management, communication management, discussion management, and community planning and maintenance. This "Camping Bar" outdoor activity exchange community website is based on Java technology and Springboot framework, using B/S development mode and MySQL database for real-time storage. The development of the website mainly provides users with a convenient, safe, and rich outdoor activity communication platform.
Key words:Nutrition and Health System, Springboot, database
目 录
致谢 33
1.1课题目的与意义
户外活动交流社区网站的开发主要是为户外爱好者提供一个互动、分享和交流的平台,以促进户外活动的推广和参与。户外爱好者可以通过社区网站相互交流、分享经验、提供建议和推荐。“露营吧”户外活动交流社区网站的研究意义如下:
(1)促进了户外爱好者之间的联系和沟通,共同探讨户外活动相关的话题。研究户外活动交流社区网站有助于理解用户需求和行为,从而设计和优化社区功能,促进用户之间的社交互动和互助。
(2)可以建立一个积极、友善、互相支持的社群,增强用户参与度和满意度。还可以推动用户之间的信息共享和知识传播。通过分享户外活动经验、技巧和注意事项等,促进知识的积累和传递,提高户外活动的安全性和质量。
(3)有助于探索如何更好地组织和推广户外活动,吸引更多人参与。通过了解用户需求和偏好,提供便捷的活动发布和管理功能,激发用户的兴趣和参与热情。可以帮助塑造积极向上的社区文化和价值观。
通过规范用户行为、引导正面交流和互助,培养环境保护意识、可持续发展观念等,推动用户形成良好的行为习惯和价值取向。
1.2 研究现状与发展趋势
户外活动作为一种重要的休闲和娱乐方式,受到了越来越多人的关注和参与。随着现代社会的快节奏生活和城市化进程的加快,人们对自然环境的渴望和对身心健康的关注日益增加。国内对户外活动交流社区网站的研究重点,主要集中在用户行为分析、社群建设、信息传播等方面。一些户外运动相关企业也开始关注和研究户外活动交流社区网站的应用价值。他们利用社区网站来推广自己的品牌、组织活动,并与用户进行互动和沟通,提高用户忠诚度和参与度。
国外对户外活动交流社区网站进行了深入研究,涵盖了用户行为、社交网络、知识共享等方面。探讨了用户参与度和满意度的影响因素,构建了用户行为模型和社交网络分析方法,以推动户外活动社区的发展和优化。另外的一些社会科学领域的研究者关注户外活动交流社区网站对社群建设和社会参与的影响。他们探索了社区网站在社交资本积累、社会认同塑造和社会动员等方面的作用,揭示了社区网站对社会互动和社会发展的潜在值。
随着智能手机的普及和移动互联网的发展,越来越多的人通过移动设备访问网站。因此,“露营吧”户外活动交流社区网站未来有可能会加强对移动端的支持,开发针对手机和平板电脑的移动应用程序,提供更便捷的用户体验和功能。社区网站的核心是用户之间的交流和分享。为了促进用户互动和参与度,“ 露营吧”也可能将加强社交化功能的开发,例如增加评论、点赞、关注等功能,以及用户之间的私信和社区活动组织。总之,“露营吧”户外活动交流社区网站将不断适应用户需求和技术进步,加强移动化、社交化内容等方面的发展,以提供更好的用户体验和丰富的户外活动资源。
1.3研究方法
首先,通过引擎搜索或者查阅相关文献资料,了解了本系统开发的背景以及设计系统的意义所在,收集用户需求信息。其次,在开发工具上,最终确定是基于Mysql数据库,在Java的Springboot框架设计的基础上实现,设计出系统大致的功能模块。主要从方便系统用户和系统管理员的角度进行分析,明确该系统应该具有的功能。最终是测试系统,通过用例测试发现存在的问题并找到解决的方案。利用现有的开发平台,结合自己所学的知识,在老师的指导帮助下来完成该设计,确保系统的可用性、实用性。
1.4 开发技术
本系统前端部分基于MVVM模式进行开发,采用B/S模式,后端部分基于Java的Springboot框架进行开发。
前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信。
后端部分:采用Springboot作为开发框架,同时集成MyBatis、Redis等相关技术。
1.4.1 J2EE技术
人可以掌握多门外语,而一个计算机科学家精通的大多是编程语言,它不是人类的自然语言,比如C语言、Java、Perl等等。由于不同的公司开发出的“中间件”不够规范,所以Sun公司推出J2EE,用这个标准来解决弊病。它提供了良好的机制,让每个层次允许与之相对的服务器、组件运行,使得系统的搭建稳定可用、开发高效、维护方便。
1.4.2 MVVM模式
MVVM模式是常用的开发模式,主要是在代码实现上将其分为M层、V层和C层。
视图(View)代表用户交互界面,一个 Web 应用就可能有很多的界面,在 MVVM 模式中,视图仅仅处理的只有数据采集、处理,还有用户的请求, 并不包括业务流程的处理,业务流程由模型(Model)来处理。
模型(Model)就是业务流程/状态的处理及业务规则的制定。模型处理业务流程的过程其它层是无法看见了的,它就像黑箱子,在接受视图请求的数据之后,然后返回最终的处理结果。MVVM 最主要的核心就是业务模型的设计,一个典型的应用例子就是目前流行的 EJB 模型,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但是它不能作为应用设计模型的框架。
控制器(Controller)可以理解为接收用户的请求,然后视图和模型匹配在一起,一起再完成用户请求。它有非常明显的作用在划分控制层上,可以很清晰地告诉你,它就是一个分发器,选择什么样的模型、视图,可以完成用户的什么样的请求。控制层不做所有的数据处理,比如说:用户点击一个连接,控制层接受到请求之后,并不处理业务信息,它只是向模型传递用户的信息,同时告诉模型做什么,然后选择符合需求的视图返回给用户。
1.4.3 B/S结构
B/S(Browser/Server)比前身架构更为省事的架构。它借助Web server完成数据的传递交流。只需要下载浏览器作为客户端,那么工作就达到“瘦身”效果, 不需要考虑不停装软件的问题。
1.4.4 Spring boot框架
SpringBoot是Spring开发项目的起点,SpringBoot框架较比与SSM框架优点是减少很多配置文件,它的两大核心核心内容是依赖注入和控制反转,通过注解告诉Spring需要哪些对象,在启动时Spring会自动创建出对象。SpringBoot还有另有两个更重要的配置策略:开箱即用配置和约定优于配置,开箱即用配置是指开发人员在项目实际开发的整个过程中均可以直接通过在MAVEN项目中的pom文件里直接添加配置相关的依赖包,使用约定对配置用注解来直接代替繁琐的配置XML文件;约定优于配置,有开发者添加约定范式,可以将测试,打包等工作自动化。
1.4.5 Mysql数据库
MySQL数据库关联系统数据库是一种关系型的数据库系统的一种中文的简称,将多个关联数据库表之间存储的相关联系查询内容会自动被放入存储到多个关系查询数据表格库中,使用数据方法也十分灵活便捷灵活,标准查询数据语言一般会是SQL语言。在对于我国的一些中小系统和应用系统开发和应用推广上,MySQL数据库系统也十分的是的受到的大家的欢迎,对于一些国内小一些规模的一些中小企业,由于采用了MySQL的系统是一个比较开放的源码软件,可以起到帮助的大大程度地的降低其使用的成本。
2.1 可行性分析
可行性分析的目的是确定一个系统是否有必要开发、确定系统是否能以最小的代价实现。其工作主要有三个方面,分别是技术、经济和社会三方面的可行性。我会从这三个方面对“露营吧”户外活动交流社区网站进行详细的分析。
该系统主要使用Springboot框架和MySQL数据库进行开发,Java易于学习和使用灵活。在校期间也接触过Springboot和MySQL数据库的课程,对此有一定的开发经验,因此开发难度不高,所以从技术上来说是可行的。
本系统设计所选择的开发工具和服务器都是免费的开源软件,又或者是适合学生使用的免费版本,并不需要支付费用,而且由作者本人单独完成,也不存在团队费用,几乎没有经济成本,具备经济可行性。
社会可行性主要包括法律和用户两个方面,下面将从这两方面进行分析。
(1)法律因素
本系统是学习开发所制作的程序,并不用作商业用途,是在根据实际调研的结果结合现有的“露营吧”户外活动交流社区网站后得出的,而且系统制作的全部过程都是在个人的工作电脑中完成的,使用的都是开源和免费的开发环境、分析软件和数据库,不存在侵权问题。
(2)用户可行性
操作人员或者客户只需要具备一定的windows电脑操作常识,不需要精通计算机技能。此外系统管理人员,只需要在windows常识之上再熟悉下使用Tomcat服务器的操作流程,只要掌握一定的计算机知识即可,在正式上线运营之前,仅需要对操作人员进行简单的熟悉流程培训即可。所以从用户可行性上也是可行的。
一个系统要在开发和维护的过程中方便使用,必须采取一定的设计原则,其主要设计原则有:
简单性:系统功能简单易懂,只需要掌握基本的计算机操作能力即可使用。
针对性:针对特定的用户,没有多余的其他功能,使用户可以专心使用。
实用性:能够满足户外活动参与以及互相交流等方面的需求。
先进性:本系统的代码采用读取数据的方式,方便后续开发、拓展。
“露营吧”户外活动交流社区网站需要满足的需求有以下几个:
1.信息获取方便,用户可在网页上快速浏览到户外活动信息。
2.进行户外活动报名以及交流等。
3.注册登录,需要吸引用户,即通过注册来提高用户的存留率。
4.修改用户信息,可以修改用户密码或者用户名等一些个性化操作。
5.管理员功能,管理员可以对户外活动以及社区互动的维护管理。
6.系统安全,操作简便,不过于复杂。
7.系统可以稳定运行,不存在卡顿等问题造成用户反感。
8.普通用户的功能包括:交流论坛、社区规则、露营资讯、活动信息、活动参与,管理员的功能包括:用户管理、交流管理、活动分类管理、活动信息管理、私信信息管理、社区规则管理下图所示为用户和管理员的用例图。

图2-1 普通用户用例图

图2-2 管理员用例图
2.4.1登录流程
登录模块主要满足管理员以及用户的权限登录,用户登录流程图如图2-1所示。

图2-3 登录流程图
2.4.2注册流程
未有账号的用户可进入注册界面进行注册操作,用户注册流程图如图2-2所示。

图2-4 注册流程图
2.4.3添加信息流程
用户在添加信息时,信息编号自动生成,系统会对添加的信息进行验证,验证通过则添加至数据库,添加信息成功,反之添加失败。添加信息流程如图2-3所示。

图2-5 添加信息流程图
2.4.4删除信息流程
用户可选择要删除的信息进行信息删除操作,在删除信息时系统提示是否确定删除信息,是则删除信息成功,系统数据库将信息进行删除。删除信息流程图如图2-4所示。

图2-6 删除信息流程图
本“露营吧”户外活动交流社区网站选择B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式。适合在互联网上进行操作,只要用户能连网,任何时间、任何地点都可以进行系统的操作使用。系统工作原理图如图3-1所示:

图3-1 系统工作原理图
3.2系统结构设计
整个系统是由多个功能模块组合而成的,要将所有的功能模块都一一列举出来,然后进行逐个的功能设计,使得每一个模块都有相对应的功能设计,然后进行系统整体的设计。
本“露营吧”户外活动交流社区网站功能结构图如图3-2所示。

图3-2 “露营吧”户外活动交流社区网站功能结构图
数据库可以说是所有软件的根本,如果数据库存在缺陷,那么会导致系统开发的不顺利、维护困难、用户使用不顺畅等一系列问题,严重时将会直接损害企业的利益,同时在开发完成后,数据库缺陷也更加难以解决。所以必须要对数据库设计重点把握,做到认真细致。因此,数据库设计是这个“露营吧”户外活动交流社区网站的重点要素。
(1)管理员实体属性图如下图3-3所示

图3-3管理员实体属性图
(2)活动信息实体属性如下图3-4所示

图3-4活动信息实体属性图
(4)私信信息实体属性如下图3-5所示

图3-5私信信息实体属性图
(5)系统E-R图如3-6所示

图3-6系统E-R图
将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。
表regular_users (普通用户)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | regular_users_id | int | 10 | 0 | N | Y | 普通用户ID | |
| 2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
| 3 | user_gender | varchar | 64 | 0 | Y | N | 用户性别 | |
| 4 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
| 5 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
| 6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表activity_classification (活动分类)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | activity_classification_id | int | 10 | 0 | N | Y | 活动分类ID | |
| 2 | activity_type | varchar | 64 | 0 | Y | N | 活动类型 | |
| 3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表event_information (活动信息)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | event_information_id | int | 10 | 0 | N | Y | 活动信息ID | |
| 2 | publish_users | int | 10 | 0 | Y | N | 0 | 发布用户 |
| 3 | activity_name | varchar | 64 | 0 | Y | N | 活动名称 | |
| 4 | activity_type | varchar | 64 | 0 | Y | N | 活动类型 | |
| 5 | activity_time | varchar | 64 | 0 | Y | N | 活动时间 | |
| 6 | event_location | varchar | 64 | 0 | Y | N | 活动地点 | |
| 7 | activity_photos | varchar | 255 | 0 | Y | N | 活动照片 | |
| 8 | number_of_participants | varchar | 64 | 0 | Y | N | 活动人数 | |
| 9 | activity_content | text | 65535 | 0 | Y | N | 活动内容 | |
| 10 | activity_introduction | text | 65535 | 0 | Y | N | 活动介绍 | |
| 11 | event_details | longtext | 2147483647 | 0 | Y | N | 活动详情 | |
| 12 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
| 13 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 14 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
| 15 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 16 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表forum (论坛)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | forum_id | mediumint | 8 | 0 | N | Y | 论坛id | |
| 2 | display | smallint | 5 | 0 | N | N | 100 | 排序 |
| 3 | user_id | mediumint | 8 | 0 | N | N | 0 | 用户ID |
| 4 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
| 5 | praise_len | int | 10 | 0 | Y | N | 0 | 点赞数 |
| 6 | hits | int | 10 | 0 | N | N | 0 | 访问数 |
| 7 | title | varchar | 125 | 0 | N | N | 标题 | |
| 8 | keywords | varchar | 125 | 0 | Y | N | 关键词 | |
| 9 | description | varchar | 255 | 0 | Y | N | 描述 | |
| 10 | url | varchar | 255 | 0 | Y | N | 来源地址 | |
| 11 | tag | varchar | 255 | 0 | Y | N | 标签 | |
| 12 | img | text | 65535 | 0 | Y | N | 封面图 | |
| 13 | content | longtext | 2147483647 | 0 | Y | N | 正文 | |
| 14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 16 | avatar | varchar | 255 | 0 | Y | N | 发帖人头像: | |
| 17 | type | varchar | 64 | 0 | N | N | 0 | 论坛分类:[0,1000]用来搜索指定类型的论坛帖 |
表notice (公告)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
| 2 | title | varchar | 125 | 0 | N | N | 标题: | |
| 3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
| 4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表participate_in_activities (参加活动)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | participate_in_activities_id | int | 10 | 0 | N | Y | 参加活动ID | |
| 2 | publish_users | int | 10 | 0 | Y | N | 0 | 发布用户 |
| 3 | activity_name | varchar | 64 | 0 | Y | N | 活动名称 | |
| 4 | activity_type | varchar | 64 | 0 | Y | N | 活动类型 | |
| 5 | activity_time | varchar | 64 | 0 | Y | N | 活动时间 | |
| 6 | event_location | varchar | 64 | 0 | Y | N | 活动地点 | |
| 7 | registered_users | int | 10 | 0 | Y | N | 0 | 报名用户 |
| 8 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
| 9 | number_of_applicants | int | 10 | 0 | Y | N | 0 | 报名人数 |
| 10 | reason_for_application | text | 65535 | 0 | Y | N | 申请原因 | |
| 11 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 12 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表private_message_information (私信信息)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | private_message_information_id | int | 10 | 0 | N | Y | 私信信息ID | |
| 2 | publish_users | int | 10 | 0 | Y | N | 0 | 发布用户 |
| 3 | activity_name | varchar | 64 | 0 | Y | N | 活动名称 | |
| 4 | activity_type | varchar | 64 | 0 | Y | N | 活动类型 | |
| 5 | activity_time | varchar | 64 | 0 | Y | N | 活动时间 | |
| 6 | event_location | varchar | 64 | 0 | Y | N | 活动地点 | |
| 7 | private_message_users | int | 10 | 0 | Y | N | 0 | 私信用户 |
| 8 | private_message_theme | varchar | 64 | 0 | Y | N | 私信主题 | |
| 9 | private_message_content | text | 65535 | 0 | Y | N | 私信内容 | |
| 10 | reply_content | text | 65535 | 0 | Y | N | 回复内容 | |
| 11 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 12 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
第4章系统实现
“露营吧”户外活动交流社区网站,在用户首页可以查看首页、交流论坛、露营资讯、社区规则、活动信息等内容,如图4-1所示。

图4-1系统功能界面图
露营资讯,在资讯界面可以查看资讯的具体内容等,如图4-2所示。

图4-2露营资讯界面图
露营资讯的逻辑代码如下:
<%
String lb=request.getParameter("lb");
HashMap ext = new HashMap();
new CommDAO().insert(request,response,"xinwentongzhi",ext,true,false,"xinwentongzhi_add.jsp?lb="+lb);
%>
交流论坛列表,在此页面可以发布交流信息等,如图4-3所示。在注册页面通过填写用户账号、密码、用户姓名、手机等信息完成用户注册,如图4-4所示。

图4-3交流论坛界面图

图4-4注册界面图
用户注册逻辑代码如下:
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = service.readBody(request.getReader());
query.put("username",String.valueOf(map.get("username")));
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
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){
E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
baseMapper.insert(entity);
log.info("[{}] - 插入操作:{}",entity);
}
管理员登录,通过填写注册时输入的用户名、密码、权限进行登录,如图4-5所示。

图4-5管理员登录界面图
管理员登录的关键代码如下。
* 登录
* @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;
}
管理员登录进入“露营吧”户外活动交流社区网站可以查看首页、用户管理(管理员、用户)活动分类管理、活动信息管理、活动参与管理、私信信息管理等,如图4-6所示。

图4-6管理员功能界面图
管理员功能界面逻辑代码如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
活动信息管理,在活动列表中可以对活动信息进行编辑发布,还可以对其进行修改或删除操作,如图4-7所示。

图4-7活动信息管理界面图
活动信息管理界面逻辑代码如下:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
用户管理,在营养分析管理中可以对用户信息进行管理,如图4-8所示。

图4-8用户管理界面图
用户管理界面逻辑代码如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
活动分类管理,管理员可以对活动分类进行增删改查。如图4-9所示。

图4-9活动分类管理界面图
活动分类管理界面逻辑代码如下:
@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();
}
活动参加管理,管理员可以查看管理用户的户外活动参加信息,如图4-10所示。

图4-10活动参加管理界面图
活动参加管理界面逻辑代码如下:
@PostMapping("/upload")
public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = System.getProperty("user.dir") + "\\target\\classes\\static\\upload\\";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
String fileName = file.getOriginalFilename();
File dest = new File(filePath + fileName);
log.info("文件路径:{}", dest.getPath());
log.info("文件名:{}", dest.getName());
file.transferTo(dest);
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", "/api/upload/" + fileName);
return success(jsonObject);
} catch (IOException e) {
log.info("上传失败:{}", e.getMessage());
}
return error(30000, "上传失败");
}
用户登录进入“露营吧”户外活动交流社区网站可以查看首页、露营资讯、交流论坛、活动信息等内容,如图4-11所示。

图4-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());
}
私信信息界面,用户可以在次界面发布信息交流,如图4-12所示。

图4-12私信信息界面图
私信信息界面逻辑代码如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
@Transactional
public void delete(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");
sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY))));
log.info("[{}] - 删除操作:{}",table,sql);
Query query1 = runCountSql(sql.toString());
query1.executeUpdate();
}
活动信息,在页面中用户可以发布户外活动等,如图4-13所示。

图4-13活动信息界面图
活动信息界面关键代码如下:
@RequestMapping(value = {"/count_group", "/count"})
public Map<String, Object> count(HttpServletRequest request) {
Query count = service.count(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
测试存在于软件开发进程中的最后一个阶段,它可以保证一个软件的开发质量是否符合设计者的初衷,也为程序的正式上线做了最后一道质量检测的工序。软件测试主要是控制各种条件、包括软件输出方式,使用模式和运行环境等,来评估一个系统或应用是否符合设计标准。在软件测试过程中,我们一般刻意的去制造错误和极端条件,不能仅依照正常模式允许,而是多去尝试那些意外的情况。
只有在运行和维护阶段之前经历大量的测试的软件,才能说明它的质量是经得起检验的。最近计算机业界也都一致认为,测试应该存在于软件设计的每个阶段,因为越早发现错误,修复起来就越容易。
实际上,对于一个软件应用,错误是必然存在的,无论使用何种技术或手段,都不可能绝对的排除软件漏洞。测试是随着软件开发一同诞生的,两者是共同发展进步的。实际上,测试可以大幅度的降低维护的成本,如果一个漏洞在开发的早期就被发现,那么修复它的成本远比上线后再修复的成本要低得多。
测试有白盒测试和黑盒测试两种方式。
其中,白盒测试是将软件看成一个透明的白盒子,按照程序的内部控制结构和处理技术逻辑来选定测试用例、软件系统测试的逻辑路径及过程需要进行管理测试,又称玻璃盒测试。因此白盒测试需要选择足够多的测试用例,覆盖尽可能多的代码来发现程序中的错误。
黑盒测试,也称为功能测试。它将需软件看作一个黑盒,像一个普通用户一样来模拟软件的使用流程。黑盒测试通过大量的输入边界值或错误数据,来检查是否可产生正确的输出。
本系统测试 主要选择黑盒测试,少量采用白盒测试。通过测试达到以下测试目的:
1.检查各大功能模块的运行,确保其能够正确运行,并检查各页面的完整性,保证页面完整。
2.检查各个接口是否可以正确地输入和输出,保证数据流通稳定可行。
3.检查数据结构,保证其和外部接口没有访问错误,访问顺利。
4.检查原计划的性能需求有没有完成,运行流畅。
本系统的测试用例(部分):
| 登录部分测试用例 | |||||
| 编号 | 对象 | 项目 | 操作 | 预期结果 | 结果 |
| 1 | 登录 | 登录提示 | 使用正确的账号密码登录 | 成功登录 | 预期结果 |
| 2 | 登录提示 | 使用正确的账号但错误的密码登录 | 提示密码错误 | 预期结果 | |
| 3 | 登录提示 | 使用错误的账号登录 | 提示不存在账户 | 预期结果 | |
| 4 | 登录提示 | 不输入账号,点击登录 | 提示输入账号 | 预期结果 | |
| 5 | 登录提示 | 输入账号但不输入密码点击登录 | 提示输入密码 | 预期结果 | |
| 6 | 登录入口 | 已登录账号,查看登录入口 | 不显示登录入口 | 预期结果 | |
处理器:Inter Core I7-4710MQ四核处理器
内存:4GB
硬盘:1T
操作系统:Windows 10
数据库:MySQL
全部测试用例都已通过(包括但不限于以上测试用例),且不存在漏洞,实现了论文开始时所作要求。本系统运行稳定,使用流畅,可以满足客户需求。
试运行后进行系统评估,可以认为该系统达到预定的目标要求,可以满足用户的需求,也满足了系统开发前所作目标。
系统在经过大量重复测试后运行十分稳定,安全实用,功能模块已经达到预定目标所需。
在规定的时间内实现系统的大部分功能,且满足要求,节省开发成本,有助于提高科学管理水平,符合本人经济情况。
随着计算机互联网技术的迅猛发展,各行各业都已经实现采用计算机相关技术对日益放大的数据进行管理。该课题是对户外露营活动交流推广为核心展开的。本研究针对“露营吧”户外活动交流社区网站需求建模,数据建模及过程建模分析设计并实现程序研究的过程。给出系统应用架构并分析优劣势,通过功能分解图,系统组件图描述功能需求。设计建立了数据库,给出系统关键数据结构的定义。通过类关系图描述组件间的协作关系,给出各个类的定义方法。通过描述每一个类的字段,属性及方法实现系统的前后端代码。最终给出系统集成整合方法,完成“露营吧”户外活动交流社区网站的设计与实现。投入运行时,各功能均运行正常。系统的每个界面的操作符合常规逻辑,对使用者来说操作简单,界面友好。整个系统的各个功能设计合理,体现了人性化。
但是由于自己在系统开发过程中对一些用到的相关知识和技术掌握不够牢固,再加上自身开发经验欠缺,因此系统在有些方面的功能还不够完善,考虑的不够全面,因此整个系统还有待日后逐步完善。
参考文献:
[1]袁琳琳. 计算机软件Java编程特点及技术分析 [J]. 数字通信世界, 2023, (12): 87-89.
[2]胡世洋. “Java EE”课程教学融入思政元素的实践研究 [J]. 贺州学院学报, 2023, 39 (S1): 91-95.
[3]李增,黄婕,袁伟. 行动导向教学法在Java web程序设计课程教学改革中的应用探析 [J]. 电脑知识与技术, 2023, 19 (32): 59-61.
[4]张国芳. Java编程语言在计算机软件开发中的应用方向分析 [J]. 信息记录材料, 2023, 24 (11): 138-141.
[5]王志亮,纪松波. 基于SpringBoot的Web前端与数据库的接口设计 [J]. 工业控制计算机, 2023, 36 (03): 51-53.
[6]王以伍,舒晖. 基于SpringBoot+Vue前后端分离的高校实验室预约管理系统的设计与实现 [J]. 现代计算机, 2023, 29 (01): 114-117.
[7]王亚东,李晓霞,陈强强等. 基于SpringBoot的需求发布平台设计 [J]. 信息与电脑(理论版), 2023, 35 (01): 105-107.
[8]Yang Y . Design and Implementation of Student Information Management System Based on Springboot [J]. Advances in Computer, Signals and Systems, 2022, 6 (6):
[9]Cheng F . Talent Recruitment Management System for Small and Micro Enterprises Based on Springboot Framework [J]. Advances in Educational Technology and Psychology, 2021, 5 (2):
[10]Chen G ,Xu J . Design and implementation of efficient Learning platform based on SpringBoot Framework [J]. Journal of Electronics and Information Science, 2020, 6 (1):
[11]何敏. 湖南益阳:组织户外宣传 加强互动交流 [J]. 中国无线电, 2020, (10): 31-32.
[12]潘金辉. 以“阅读+”模式,探索全民阅读新方向——以“一书一世界”户外阅读交流项目为例 [J]. 河南图书馆学刊, 2019, 39 (04): 90-91.
致 谢
大学生活在这个时候即将划上一个句号,但是对于我的人生道路来说,这仅仅是一个逗号,我将面对的是又一次征程的开始。
回忆过去,许许多多的事情浮现在脑海:刚上大学时欢乐心情和兴奋的场景还历历在目。一切都是那么新鲜,那么富有吸引力。有快乐也有艰辛,有收获也有失落。衷心感谢信息学院所有支持帮助过我的老师,谢谢你们多年来的关心和爱护。同窗的友情同样难忘,你们与我共同走过了人生中不平凡的道路,给我留下了值得珍藏的美好记忆。
最后,我要特别感谢指导“露营吧”户外活动交流社区网站设计的老师。本论文是在他的悉心指导和热情帮助下完成的,老师认真负责的工作态度,严谨的治学精神和精深的理论水平都使我受益匪浅。老师无论在理论上还是在实践中,都给予我很大的帮助,使我专业技能的应用水平得到很大提高,这对于我以后的工作和学习都有益处。值此论文完成之际,特别向老师表示衷心的感谢和崇高的敬意,谢谢他细心而又耐心地辅导,使得我得以顺利的完成毕业设计开发工作,同时也要感谢其他帮助过我的老师和同学,他们在我成长过程中给予了我很大的帮助,在此一并表示感谢。
由于本人水平有限,加上时间紧促,本文一定有不少缺点和不足,恳请各位老师给予帮助和指正。
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~
Springboot“露营吧”户外活动交流社区网站开发

被折叠的 条评论
为什么被折叠?



