我是靠谱客的博主 机智魔镜,最近开发中收集的这篇文章主要介绍体育馆场地管理系统1.0-2.0,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 前言
      • 1.0版本
        • 1.项目功能简述
        • 2.项目目录结构
        • 3.数据库设计
        • 4.前端逻辑设计
        • 5.后端逻辑设计
      • 2.0版本
        • 1.上个版本的问题
        • 2.项目目录结构--用户部分
        • 3.改造后
        • 4.改造思路
        • 5.其他说明
      • 项目地址

前言

去年大二的时候,学校让我们自己做工程实践项目,我和队友选择了做体育馆场地管理系统。那个时候我们在网上找相关的技术博客、开源项目等就发现很少,今年五月份,我们又重构了之前的系统。所以,我准备写一篇文章介绍一下我们的体育馆场地管理系统。

1.0版本

1.项目功能简述
  • 该项目分为和用户交互的部分(前台)和管理员部分(后台)两个部分
  • 前台功能:登录注册部分、首页部分、个人中心部分
    在这里插入图片描述

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

  • 后台功能:登录部分、功能查询部分
    在这里插入图片描述
    在这里插入图片描述
2.项目目录结构

在这里插入图片描述

  • 1.0版本使用原生Javaee+Jsp+Mysql,采用mvc分层方式搭建。
  • 数据库连接工具使用的是c3p0,数据库操作用的Commons,同时用到了封装的一些sql封装操作。
  • 用原生监听器完成定时任务。
  • 原生过滤器实现安全跳转,因为有些地址是在没有登录的情况下不能访问的,这里只是用了两层目录的方式来控制。
  • mvc三层中,admin和user分别对应着管理员和前台的代码实现。
  • baseServlet是使用了反射,来简化原生的servlet。
3.数据库设计

表结构:
在这里插入图片描述

  1. gms_admin(管理员表):只有一条信息,为管理员的
  2. gms_notice(通知表):通知信息,默认写了七条数据,太少前端展示有问题
  3. gms_order(订单表):用户下单后订单记录
  4. gms_type(场馆类型表):比如篮球场就位类型,篮球场1号…就为具体场地
  5. gms_user(用户表):存放用户注册信息
  6. gms_venue(场馆表):具体某个场馆,比如乒乓球1号,2号,3号…
  7. gms_vdstate(场馆分时状态表):一个场馆gms_venue对应多个分时状态,因为我们要展示最近三天内容,一天中以一小时间隔会有23个时间段,设计23个字符来表示状态以0,1,2分别表示三种颜色,场馆三种颜色(绿色、灰色、白色)表示状态,根据0,1,2就可以展示场馆状态。
    在这里插入图片描述

01表示对应的场馆编号,第二个字段表示哪一天,0表示不可预约(灰色),1表示可预约(白色),2表示已预约(黄色),后面23个字符,比如这里第一个2在第十三个字符位置,所以12:00-13:00位已预约

4.前端逻辑设计

在这里插入图片描述
以上部分的解释如下:

  1. 红点1这里使用的是Bootstrap的标签页,我们点击需要的场馆(红点2),下面就会展示对应的场馆信息(红点3
  2. 场馆类型(红点2),通知消息(红点4),页面加载的时候就用ajax加载了所有的场馆类型并且展示,今日日期(红点5)也是页面加载的时候就进来了
  3. 红点6是通过红点2红点5场馆类型当前日期去查询数据库查出来的
  4. 具体逻辑:首先在页面加载的时候,场馆类型,详细信息,通知信息,当前日期,这些可以直接在ajax中获取并展示出来,然后在场馆类型的每个类型里面设置一个方法,点击这个方法的时候就会获取当前的日期,这样就可以直接请求获取所有场馆信息了。注意: 但是每次点击的时候必须先清除上一次展示的场馆信息,否则就会重叠。还有个问题,当我们点击了这个场馆选择后,变为绿色了,又去另外一个界面点击一下,返回过来绿色消失了,所以必须记录下这个颜色然后在展示列表信息。
5.后端逻辑设计
  1. 选择场馆的时候,我们需要生成一张订单表,同时修改数据库分时状态表的状态,告诉前台这个场馆被人预约了,同时要插入一条订单表到数据库,这两个操作是保持一致性的,所以要加事务控制。
  2. 订单在个人中心是可以提前取消预约的,那我们还是要修改分时状态表,以及修改订单表的状态为已取消,也要加事务控制。
  3. 定时任务是指:前端展示的时候显示了这一天的场馆这状态,比如当前时间是12:00,那么12:00之前的场馆状态就必须被修改为不可预约,避免用户再预约之前的场馆导致问题。同时,订单表也要修改,因为如果有些人预约的是12:00-13:00的场馆,当前时间已经为13:01的时候,这个订单要么被用户使用了,要么超时了,我们都需要将这个订单设置为已完成订单状态,每隔一分钟修改一次。
  4. 简单的登录、注册、修改密码、注销登录这里就不提了,还有个导出订单表的操作,是自己写的工具类,会调用就行了。

2.0版本

1.上个版本的问题
  1. 没有考虑线程安全问题—>多个用户同时预约同一个场馆。
  2. 分时状态表的设计问题,以23个字符来控制每个时间段的状态会导致很多问题。
  3. 访问权限问题以及安全跳转问题。
2.项目目录结构–用户部分

在这里插入图片描述

  1. 项目还是两部分,管理员和用户,由于是两个人开发的,所以用了两个端口号,只是操作的同一个数据库。
  2. 2.0在1.0的基础上使用SpringBoot+Vue搭建,其中Vue只是用来当模板引擎,用jquery操作。
  3. 项目使用maven构建,使用git作为项目版本管理。
  4. 数据库连接使用druid,数据库操作使用MyBatis框架。
  5. 使用thymeleaf作为url跳转使用,前后端使用json传输数据,实现前后端分离。
  6. 使用邮件发送通知,同时使用消息队列rabbitMq异步发送邮件。
  7. 使用Spring Security作为权限管理,控制地址访问安全问题。
  8. 使用加锁的方式解决线程安全问题,并用jmeter压力测试。
  9. 管理员改动不大,springboot+vue+定时任务+spring security
  10. 后续可继续改进:将分时状态表改为每个时间段一个,增加redis缓存以让首页减小压力。
3.改造后

登录注册:
在这里插入图片描述
首页部分:
在这里插入图片描述

  1. 之前是通过一个中间界面来展示预约的信息,但是在前后端分离中很难设计,需要跳转,所以我在首页点击的下面展示点中的场馆,这样的话也为以后点击多个场馆预约留下了接口。
  2. 这里其实用了加锁的操作,具体思路在项目的改造思路_User.md里面
    个人中心部分:
    在这里插入图片描述

为什么要用rabbitMq来发送异步邮件:

  1. 当我们选择好场馆提交后就要执行发送邮件任务,由于发送邮件很慢,所以放到消息队列里会好很多
  2. 也可以自己手动创建一个线程来专门发送邮件,这里只是为了锻炼一下自己的消息队列使用情况
  3. 如果不想发送邮件可以在代码中注释点,代码里的注释很详细
4.改造思路

管理员和用户部分的改造思路都在我的项目里面,大家可以通过在我的github上面看到,这里就不详述了。

5.其他说明
  1. 项目的搭建过程以及需要注意的事项我都放在github上面了。
  2. 本文我并未介绍管理员部分的功能和代码设计,其中还是有很多比一般管理员部分设计的好的地方。
  3. 文中提到的内容均为大的点,很多小的细节,在1.0中可能并没有全部记录,但是2.0中都记录到了改造思路里面。
  4. 转载请附加原文链接

项目地址

如果你对源码感兴趣的话,以下是我的项目的两个链接,其中包含了详细的搭建过程,如果觉得可以的话,麻烦点个star,谢谢。
1.0版本github链接

2.0版本github链接

最后

以上就是机智魔镜为你收集整理的体育馆场地管理系统1.0-2.0的全部内容,希望文章能够帮你解决体育馆场地管理系统1.0-2.0所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部