【开源】JAVA+Vue.js实现天沐瑜伽馆管理系统

在这里插入图片描述


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 数据中心模块
    • 2.2 瑜伽课程模块
    • 2.3 课程预约模块
    • 2.4 系统公告模块
    • 2.5 课程评价模块
    • 2.6 瑜伽器械模块
  • 三、系统设计
    • 3.1 实体类设计
      • 3.1.1 瑜伽课程
      • 3.1.2 瑜伽课程预约
      • 3.1.3 系统公告
      • 3.1.4 瑜伽课程评价
    • 3.2 数据库设计
      • 3.2.1 瑜伽课程表
      • 3.2.2 瑜伽课程预约表
      • 3.2.3 系统公告表
      • 3.2.4 瑜伽课程选课表
      • 3.2.5 学生成绩表
  • 四、系统展示
  • 五、核心代码
    • 5.1 查询瑜伽课程
    • 5.2 瑜伽课程预约
    • 5.3 瑜伽课程评价
    • 5.4 查询瑜伽器械
    • 5.5 新增公告
  • 六、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的天沐瑜伽馆管理系统,包含了瑜伽课程、课程预约、课程安排、课程评价、瑜伽器械、系统公告模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,天沐瑜伽馆管理系统基于角色的访问控制,给瑜伽学员、瑜伽教练、瑜伽管理员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏


二、功能模块

本文设计的天沐瑜伽馆管理系统的包括了系统数据中心模块,用来存放管理系统通用的模块,另外分别设计了瑜伽课程模块、课程预约模块、系统公告模块、课程评价模块和瑜伽器械模块这五大模块,用于存放系统的核心业务逻辑。

在这里插入图片描述

2.1 数据中心模块

数据中心模块包含了对天沐瑜伽馆管理系统的基础模块,比如管理谁可以登录这套系统,记录这些人登录系统做了什么,不同的人拥有不同权限的管理。

2.2 瑜伽课程模块

瑜伽课程模块用于对瑜伽课程的数据进行管理,其中包括课程名称、课程介绍、课程类型、讲师ID、讲师、课程图片、课程价格、创建人等,可以通过此模块对瑜伽课程数据进行添加、编辑更新、删除、查询操作。

2.3 课程预约模块

课程预约模块是学生对课程的预约信息进行管理,学生可以对喜欢的瑜伽课程进行预约操作,包括团课和私教课程,瑜伽课程预约的字段包括课程ID、课程名称、课程介绍、课程类型、课程图片、课程价格、预约人、预约时间等,学生可以对管理员发布的瑜伽课程进行预约,也可以查询自己的历史预约情况,管理员可以维护学生的预约记录。

2.4 系统公告模块

系统公告模块用于管理员对系统公告的维护,系统公告的作用就是通知相关信息给学员,比如瑜伽课程的停课、调课信息等。系统公告字段其中包括公告标题、公告内容、图片、状态、排序值、发布人、创建人、创建时间等,瑜伽管理员可以增加、删除、编辑和条件查询系统公告,瑜伽学生可以查询系统公告。

2.5 课程评价模块

课程评价模块是维护学生的瑜伽课程的评价,当学生完成对某个瑜伽课程的学习后,有权对该瑜伽课程进行评价,以便于改善该课程的质量,瑜伽评价字段包括课程ID、课程名称、评价等级、评语、学生ID、学生、评价时间、创建人等。

2.6 瑜伽器械模块

瑜伽器械模块是维护瑜伽课程中所需要的器械数据,瑜伽机械是学生学习瑜伽课程的必备条件,所以系统设计了这个模块,瑜伽器械字段包括器械名称、品牌、功能用途、厂商、采购价、图片、备注、创建人等,瑜伽管理员可以新增、删除、修改瑜伽机械信息,瑜伽学员可以查询管理员发布的瑜伽器械明细。


三、系统设计

3.1 实体类设计

3.1.1 瑜伽课程

在这里插入图片描述

3.1.2 瑜伽课程预约

在这里插入图片描述

3.1.3 系统公告

在这里插入图片描述

3.1.4 瑜伽课程评价

在这里插入图片描述

3.2 数据库设计

3.2.1 瑜伽课程表

在这里插入图片描述

3.2.2 瑜伽课程预约表

在这里插入图片描述

3.2.3 系统公告表

在这里插入图片描述

3.2.4 瑜伽课程选课表

在这里插入图片描述

3.2.5 学生成绩表

在这里插入图片描述

本章是对天沐瑜伽馆管理系统的设计部分。这个章节介绍了天沐瑜伽馆管理系统的设计基本思想,和各个模块的设计思想,设计了瑜伽课程模块、课程预约模块、系统公告模块、课程评价模块、瑜伽器械模块和数据中心模块。


四、系统展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


五、核心代码

5.1 查询瑜伽课程

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询瑜伽课程")
public Result<IPage<YogaCurriculum>> getByPage(@ModelAttribute YogaCurriculum yogaCurriculum ,@ModelAttribute PageVo page){QueryWrapper<YogaCurriculum> qw = new QueryWrapper<>();if(!ZwzNullUtils.isNull(yogaCurriculum.getTitle())) {qw.like("title",yogaCurriculum.getTitle());}if(!ZwzNullUtils.isNull(yogaCurriculum.getType())) {qw.eq("type",yogaCurriculum.getType());}if(!ZwzNullUtils.isNull(yogaCurriculum.getUserName())) {qw.like("user_name",yogaCurriculum.getUserName());}User currUser = securityUtil.getCurrUser();IPage<YogaCurriculum> data = iYogaCurriculumService.page(PageUtil.initMpPage(page),qw);for (YogaCurriculum vo : data.getRecords()) {QueryWrapper<YogaOrder> orderQw = new QueryWrapper<>();orderQw.eq("curriculum_id",vo.getId());orderQw.eq("order_id",currUser.getId());vo.setOrderFlag(iYogaOrderService.count(orderQw));}return new ResultUtil<IPage<YogaCurriculum>>().setData(data);
}

5.2 瑜伽课程预约

@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "新增预约")
public Result<Object> addOne(@RequestParam String id){YogaCurriculum c = iYogaCurriculumService.getById(id);if(c == null) {return ResultUtil.error("瑜伽课程不存在");}YogaOrder o = new YogaOrder();o.setCurriculumId(c.getId());o.setCurriculumName(c.getTitle());o.setContent(c.getContent());o.setType(c.getType());o.setUserId(c.getUserId());o.setUserName(c.getUserName());o.setImage(c.getImage());o.setPrice(c.getPrice());User currUser = securityUtil.getCurrUser();o.setOrderId(currUser.getId());o.setOrderName(currUser.getNickname());o.setOrderTime(DateUtil.now());// 扣除费用User user = iUserService.getById(currUser.getId());if(o.getPrice().compareTo(user.getMoney()) > 0) {return ResultUtil.error("余额不足");}user.setMoney(user.getMoney().subtract(o.getPrice()));iUserService.saveOrUpdate(user);iYogaOrderService.saveOrUpdate(o);return ResultUtil.success();
}

5.3 瑜伽课程评价

@RequestMapping(value = "/addAppraise", method = RequestMethod.GET)
@ApiOperation(value = "新增评价")
public Result<YogaArrange> addAppraise(@RequestParam String id,@RequestParam String level,@RequestParam String content){YogaCurriculum c = iYogaCurriculumService.getById(id);if(c == null) {return ResultUtil.error("瑜伽课程不存在");}User currUser = securityUtil.getCurrUser();YogaAppraise a = new YogaAppraise();a.setCurriculumId(c.getId());a.setCurriculumName(c.getTitle());a.setLevel(level);a.setContent(content);a.setOrderId(currUser.getId());a.setOrderName(currUser.getNickname());a.setOrderTime(DateUtil.now());iYogaAppraiseService.saveOrUpdate(a);return ResultUtil.success();
}

5.4 查询瑜伽器械

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询瑜伽器械")
public Result<IPage<YogaApparatus>> getByPage(@ModelAttribute YogaApparatus yogaApparatus ,@ModelAttribute PageVo page){QueryWrapper<YogaApparatus> qw = new QueryWrapper<>();if(!ZwzNullUtils.isNull(yogaApparatus.getTitle())) {qw.like("title",yogaApparatus.getTitle());}if(!ZwzNullUtils.isNull(yogaApparatus.getBrand())) {qw.like("brand",yogaApparatus.getBrand());}if(!ZwzNullUtils.isNull(yogaApparatus.getPurpose())) {qw.like("purpose",yogaApparatus.getPurpose());}IPage<YogaApparatus> data = iYogaApparatusService.page(PageUtil.initMpPage(page),qw);return new ResultUtil<IPage<YogaApparatus>>().setData(data);
}

5.5 新增公告

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增公告")
public Result<Announcement> insert(Announcement announcement){if(Objects.equals(0,announcement.getSortOrder().compareTo(BigDecimal.ZERO))) {announcement.setSortOrder(BigDecimal.valueOf(iAnnouncementService.count() + 1L));}User currUser = securityUtil.getCurrUser();announcement.setPublisher(currUser.getNickname());iAnnouncementService.saveOrUpdate(announcement);return new ResultUtil<Announcement>().setData(announcement);
}

六、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/502103.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot启动扩展应用:干预优化+加快启动时间(干货典藏版)

一、SpringBoot启动过程干预 Spring Boot启动过程中我们可以实现以下干预工作&#xff1a; 修改Spring Boot默认的配置属性。使用ConfigurationProperties和EnableConfigurationProperties注解&#xff0c;可以获取和修改Spring Boot的配置属性。 加载配置文件。Spring Boot会…

Beans模块之工厂模块Aware

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

Charles抓包 - 安装、激活、证书配置

最近刚好又遇到了抓包的需求&#xff0c;之前一直使用 Fiddler 抓包&#xff0c;这几年一直听大家都在用 Charles 抓包&#xff0c;正好一起了解下&#xff08;一般建议掌握一种抓包方式即可&#xff0c;都可以解决同种需求场景&#xff09; 抓包 Fiddler抓包 Charles 下载、安…

基于Ruby的watir-webdriver自动化测试方案与实施

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

Apache Flink连载(三十五):Flink基于Kubernetes部署(5)-Kubernetes 集群搭建-1

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 ​编辑

SpringBoot 手写 Starter

spring-boot-starter 模块 1.介绍 SpringBoot中的starter是一种非常重要的机制&#xff0c;能够抛弃以前繁杂的配置&#xff0c;将其统一集成进starter&#xff0c;应用者只需要在maven中引入starter依赖&#xff0c;SpringBoot就能自动扫描到要加载的信息并启动相应的默认配…

配置之道:深入研究Netty中的Option选项

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 配置之道&#xff1a;深入研究Netty中的Option选项 前言Option的基础概念ChannelOption与Bootstrap Option常见的ChannelOption类型ChannelConfig的使用Option的生命周期不同传输协议的Option 前言 在…

kotlin开发框架,50家大厂面试万字精华总结

与其它行业一样&#xff0c;凡是有高级和普通&#xff0c;虽然都是敲代码但也有大牛和普通之分&#xff0c;大牛程序员&#xff0c;一个人比一个团队做项目都做得快&#xff0c;**最为出名的当属十几年前求伯君在做wps时&#xff0c;一个人完成了微软二十人团队没有完成的项目需…

并查集基础,死去的回忆突然攻击我

并查集普及【模板】并查集 - 洛谷 #include<iostream> #include<cstring> #include<queue> #include<vector> #include<algorithm> using namespace std; #define int long long typedef pair<int,int> PII; #define xx first #define y…

种花

分情况&#xff1a; 第一盆k种选择&#xff0c;之后全部k-1种选择 每次相乘结果对1e97取模 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define endl \n const int N 1e9 7;int main() {ios::sync_with_stdio(f…

简评ORACLE/MYSQL/PG的逻辑复制

postgresql逻辑复制 ​​​​ &#xff08;https://www.pgconf.asia/JA/2017/wp-content/uploads/sites/2/2017/12/D2-A7-EN.pdf&#xff09; PostgreSQL把所有逻辑解析相关的事情全部放在数据库中的复制槽进行管理&#xff0c;大包大揽。早期版本的逻辑复制支持的还不太好&a…

ICML23 - Synthetic Data for Model Selection

前言 如果你对这篇文章感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 本文关注的问题为&#xff1a;是否可以使用合成数据&#xff08;Synthetic Data&#xff09;用于模型选择&#xff1f;即不…