基于Spring Boot+Vue的健身房管理系统(协同过滤算法、功能非常多)
🎈系统亮点:协同过滤算法;
一.系统开发工具与环境搭建
1.系统设计开发工具
后端使用Java编程语言的Spring boot框架
项目架构:B/S架构
运行环境:win10/win11、jdk17
前端:
技术:框架Vue.js;UI库:ElementUI;
开发工具:Visual Studio Code;
后端:
技术:Java语言、mybatis plus、Spring boot框架;
开发工具:IDEA 2023.3.3版本;
数据库:
数据库:mysql5.7/8.0
数据库工具:Navicat12版本;
二.需求分析
(一)角色功能需求分析
1.用户
1. 留言功能:允许会员在话题上提交留言。
2. 器材租借:实现一个器材租借界面,显示可租借的器材列表及其状态。允许用户选择特定时间段进行在线预约租借。提供器材租借的历史记录查询。
3. 课程预约:展示当前可预约的课程列表及详细信息(如时间、地点、费用等)。允许用户通过界面选择并预约参加课程。提供用户的预约历史和课程计划表。
4. 余额变动记录:显示用户的账户余额及所有变动记录,包括充值、消费等。
5. 充值功能:提供在线充值界面,允许用户使用多种支付方式为账户充值。充值成功后更新余额,并生成相应的充值记录。
6. 收藏话题:允许用户在浏览健身话题或文章时将其收藏。提供用户收藏列表,方便日后访问和阅读。
7. 浏览记录:记录用户在系统中的浏览话题。
8. 我的话题:允许用户发表自己的健身心得或提问。供个人发表话题的管理功能,如编辑、删除等。
9. 查看公告:用户可以在专门的界面中查看所有的系统公告和通知。
2.管理员
1. 系统通知管理:发布系统公告和通知。编辑和删除已有的系统通知。
2. 用户管理:用户资料查询、修改与删除。
3. 预约管理:会员在线预约课程。
4. 教练管理:教练信息录入和档案管理。
5. 话题管理:发布健身相关的话题和文章。管理用户评论和互动。话题内容编辑和删除。
6. 器材管理:器材信息登记和维护记录。器材使用情况跟踪和调度。器材维修和报废管理。
7. 轮播图管理:上传和编辑轮播图内容。
8. 留言管理:接收和回复用户留言。留言审核与删除不当内容。
9. 会员管理:会员注册与信息录入。
10. 课程安排管理:课程信息的添加、修改和删除。课程时间表的编排和更新。课程预约情况的管理。
3. 教练
1. 个人中心:查看和编辑个人资料,如姓名、联系方式、密码等。
2. 浏览记录:展示用户在系统中浏览过的话题的历史记录。
3. 收藏话题:显示用户收藏的所有健身话题列表。
4. 我的课程:展示用户已经预约或参加的课程列表。
5. 查看公告:列出所有系统发布的最新公告和通知。
6. 话题评论:不同话题下发表自己的评论和看法。
(二)系统功能模块设计
系统的使用者分为用户、管理员和教练三种角色,管理员的功能包含系统通知管理,用户管理,预约管理,教练管理,话题管理,器材管理,轮播图管理,留言管理,会员管理,课程安排管理功能;用户的功能包含我要留言,器材租借,课程预约,余额变动记录,充值,收藏话题,浏览记录,我的话题,查看公告。教练的功能包含个人中心,浏览记录,收藏话题,我的课程,查看公告,话题评论。
三. 系统实现(部分展示)
1 注册和登录功能模块
在注册页面,用户根据注册页面中的表单提示,填写基本的注册信息,用户名、密码、头像、验证码信息。用户注册界面。
在登录页面中,输入用户名、密码及验证码,并点击登录,将一个表单提交给后台。
2 用户功能模块
2.1 话题功能模块
用户可以通过登录系统进入话题浏览界面,在该界面中,用户可以浏览各种话题,查看话题的详细内容。如果用户对某个话题感兴趣,他们可以将其收藏,方便以后再次查看。此外,用户还可以将感兴趣的话题页面分享给他人,与他人分享自己的兴趣和见解。除了浏览和收藏话题外,用户还可以在话题页面上发表自己的看法和意见。他们可以撰写评论,表达自己对话题的观点和想法。此外,用户还可以进入发布者的主页。在发布者的主页上,用户可以查看该发布者的个人资料、发布的其他话题以及与该发布者相关的其他信息。
关键代码:
//协同过滤算法推荐
CollaborativeFiltering collaborativeFiltering = new CollaborativeFiltering();
//当前用户id
Integer userId = currentUserDto.getUserId();
//获取所有用户
List<AppUser> AppUserList = _AppUserMapper.selectList(null).stream().toList();
//获取所有的浏览记录
List<TopicRecord> topicRecords = _TopicRecordMpper.selectList(null);
//遍历所有用户
for (AppUser appUser : AppUserList) {
//获取和我有关的浏览资讯
List<TopicRecord> topicRecordList = topicRecords.stream().filter(x -> x.getUserId() == appUser.getId()).toList();
//有关联的话题文章编号
int[] RelativeTopicId = topicRecordList.stream().mapToInt(x -> x.getTopicId()).distinct().toArray();
//根据编号排除审核失败的文章 失败了就不需要看了
List<Topic> topics = _TopicMpper.selectList(Wrappers.<Topic>lambdaQuery().eq(Topic::getAuditStatus, Enums.AuditStatus.审核通过.index()).in(Topic::getId, RelativeTopicId));
for (Topic topic : topics) {
//浏览次数
//统计我这篇文章浏览的总数
long viewCount = topicRecordList.stream().filter(x -> x.getTopicId() == topic.getId()).count();
collaborativeFiltering.AddUserRating(appUser.getId(), topic.getId(),(double)viewCount );
2.2 课程预约功能模块
用户首先需要根据课程的类型进行筛选。他们可以根据自己的需求和兴趣,选择想要参加的课程类型。在选择好课程类型后,用户可以进一步查看每个课程的详细内容,包括课程的教学大纲、教师介绍、课程时间等信息。
关键代码:
//声明一个支持课程安排查询的(拉姆达)表达式
LambdaQueryWrapper<CousePlan> queryWrapper = Wrappers.<CousePlan>lambdaQuery()
.eq(input.getId() != null && input.getId() != 0, CousePlan::getId, input.getId())
.eq(input.getCreatorId() != null, CousePlan::getCreatorId, input.getCreatorId());
//如果前端搜索传入查询条件则拼接查询条件
if (input.getCouseId() != null) {
queryWrapper = queryWrapper.eq(CousePlan::getCouseId, input.getCouseId());
}
//按创建时间从大到小排序 最新的显示在最前面
queryWrapper = queryWrapper.orderByDesc(CousePlan::getCreationTime);
//从数据库进行分页查询获取课程安排数据
List<CousePlan> cousePlans = _CousePlanMpper.selectList(queryWrapper);
//得到所有教练并且去重
List<Integer> coachUserIds = cousePlans.stream().map(x -> x.getCoachUserId()).distinct().collect(Collectors.toList());
//查询出对应的教练信息
List<AppUser> appUsers = _AppUserMapper.selectList(Wrappers.<AppUser>lambdaQuery().in(AppUser::getId, coachUserIds));
//把AppUser实体转换成AppUserDto传输模型
List<AppUserDto> items = Extension.copyBeanList(appUsers, AppUserDto.class);
return items;
通过查看课程排班来了解不同时间段的课程安排。这样,您可以根据自己的时间安排和需求,选择合适的时间段进行课程预约。在个人中心,有一个名为“课程预约”的功能模块,可以在这里查看您已经预约的课程,并支持取消预约功能。
2.3 通知公告功能模块
用户可以查看系统公告,获取系统发布的最新消息、更新、通知或其他重要信息。通过查看系统公告,用户可以及时了解到系统的最新动态,以便做出相应的决策或采取必要的行动。
关键代码:
queryWrapper=queryWrapper.orderByDesc(SysNotice::getCreationTime);
//构建一个分页查询的model
Page<SysNotice> page = new Page<>(input.getPage(), input.getLimit());
//从数据库进行分页查询获取系统通知数据
IPage<SysNotice> pageRecords= _SysNoticeMpper.selectPage(page, queryWrapper);
//获取所有满足条件的数据行数
Long totalCount= _SysNoticeMpper.selectCount(queryWrapper);
//把SysNotice实体转换成SysNotice传输模型
List<SysNoticeDto> items= Extension.copyBeanList(pageRecords.getRecords(),SysNoticeDto.class);
2.4 个人中心功能模块
个人中心是一个集话题、收藏、浏览记录、充值、金额变动记录、课程预约、器材租借和留言等功能于一体的界面,为用户提供了全方位的服务,让用户能够更好地利用平台资源,满足自己的需求。
3 教练功能模块
教练角色的话题模块和系统通知模块是共有的,在这里都不一一介绍。介绍一下教练独有的模块。
3.1 教练个人中心功能模块
教练可以查看个人的登录轨迹,这包括了用户在平台上的登录时间和频率。教练还可以浏览用户在平台上参与的话题记录。除了浏览话题记录,教练还可以查看用户收藏的话题。教练也可以对课程可以进行签到。
4 管理员功能模块
4.1 系统设置功能模块
管理员还可以处理系统通知,确保及时向用户传达重要信息和更新。管理员还负责管理轮播图,这是网站或应用程序中常见的一种展示形式。管理员还负责留言管理。他们可以审核和回复用户的留言。
4.2 会员管理功能模块
管理员可以查看会员的基本信息,会员卡的等级。可以查看到会员的变动记录,这些记录详细地列出了会员的各种状态变化。可以看到余额变动记录,这部分记录了会员账户余额的所有变动情况,包括充值、消费、退款等所有的余额变动情况。
4.3课程安排管理功能模块
管理员可以对教练进行管理,管理上传课程的类型和对应的课程。对课程进行安排,对于课程的预约情况进行记录。
4.4话题管理功能模块
管理员可以创建、编辑或删除不同类型的话题,以确保社区内容的多样性和丰富性。管理员还负责监管话题评论的合法性。管理员还可以查看用户收藏的所有话题内容。
4.5器材管理功能模块
管理员可以创建、编辑或删除器材,以确保器材的正常使用。对于器材租借也有记录,可以为用户创建租借,当用户归还的时候,帮助用户点击归还。