作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

文末获取源码

在即将到来的1024程序员节,谨以此文献给CSDN和亲爱的同行们。

项目编号:BS-XX-150

一,项目简介

随着社会发展,人们对体育健身的需求快速增长。体育服务业是体育产业的主体部分。体育场馆作为体育产业和体育事业发展的物质载体,提供的主要产品就是服务,是满足人们对体育服务需要的重要保障。体育场馆服务质量高低直接影响顾客的消费态度、水平和利益,进一步影响场馆的经济和社会效益。由此可见,体育服务质量是体育场馆生存和发展的基石和核心竞争力,体育场馆的服务质量管理是体育场馆的关键和核心内容。体育场馆高效率使用越来越受到场馆管理人员的重视,充分利用计算机信息技术对体育场地实现信息化管理,能有效提升场馆管理水平和工作效率,最大限度的利用场馆资源。

本次设计与开发的体育运动场馆管理系统主要采用Spring Boot技术,方便体育场馆的管理。主要实现功能有:场地管理,客户管理,消费点单,收银结账等功能。

通过初步的需求分析与研究,该系统包含两类用户:场地管理员、客户,拟定四大业务模块分别实现:场馆管理模块,客户管理模块,消费管理模块,系统管理模块。每个业务模块又包含若干业务子模块

  1. 场地管理模块:

场馆管理:场馆管理、场馆类型管理、预约管理、教练管理、场馆开场。

  1. 客户管理模块:对入场客户的信息进行记录,设置会员等。
  2. 消费点单模块:场馆中有体育用品进行售卖,以及陪练的教练,可以通过该模块进行登记。并可以查看各个场次的消费详情,统计并进行结账,以及对历史账单的查询。
  3. 系统管理:用户管理、菜单管理、密码管理等

前端用户登陆系统:可以查看场馆信息并进行预约,查看自己的预约信息,管理个人信息等。

系统目标是构建体育场馆计费与会员管理信息系统,实现计算机信息系统管理。本系统具有便捷、高效、易操作的特点。以场馆会员管理为例,在没有设计信息管理系统前,要从成千上万的会员卡片中查找信息,不仅费时,效率低,而且容易出现差错。在使用了体育场馆计费与会员管理信息系统之后,实现了计算机信息系统管理。任何操作都非常便捷、高效,经营效率大幅增加、经营成本大幅降低。最重要的是,运用系统还能提高管理水平,提高决策效率,用先进的计算机系统实现体育场馆的可持续发展,向科学管理不断迈进。体育运动场馆管理系统包括的体育场馆计费与会员管理信息系统无疑为场馆提供了发展的平台,它高度符合体育场馆的科学发展方向,在体育场馆发展史上具有里程碑意义。同时,我们还可以预见体育场馆管理信息系统将会朝着更快的速度,更大的容量,更高的效率三方面不断稳步发展。

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:springboot+mybatis

前端开发技术:Layui+Jquery+Ajax

三,系统展示

管理员登陆

场馆管理

根据不同类型查看和管理不同的场馆

场馆预约管理

教练管理

客户管理

消费管理:添加消费记录时,选择场馆,只有场馆开场了才能选择

消费详情

管理员管理

菜单管理

密码管理

四,核心代码展示

package com.gymmanage.sys.controller;import com.gymmanage.sys.entity.Menu;
import com.gymmanage.sys.service.MenuService;
import com.gymmanage.utils.AjaxRes;
import com.gymmanage.utils.Table;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;@Controller
@RequestMapping("/menu")
public class MenuController {@Autowiredprivate MenuService menuService;@RequestMapping("/menuPage")public String menuPage(){return "/sys/menu";}@RequestMapping("/menuList")@ResponseBodypublic Table menuList(Integer pid){List<Menu> menus = menuService.selectAll(pid);int length = menus.size();return Table.success(Long.valueOf(length),menus);}@RequestMapping("/menuTree")@ResponseBodypublic Table menuTree(){return Table.success((long)0, menuService.getMenuTree());}@RequestMapping("/addMenu")@ResponseBodypublic AjaxRes addMenu(String title, String url, Integer parentId){AjaxRes ajaxRes = new AjaxRes();try {menuService.addMenu(title, url, parentId);ajaxRes.setMsg("保存成功");ajaxRes.setSuccess(true);}catch (Exception e){ajaxRes.setMsg("保存失败");ajaxRes.setSuccess(false);}return ajaxRes;}@RequestMapping("/deleteMenu")@ResponseBodypublic AjaxRes deleteMenu(Integer id){AjaxRes ajaxRes = new AjaxRes();try {menuService.deleteMenu(id);ajaxRes.setMsg("删除成功");ajaxRes.setSuccess(true);}catch (Exception e){ajaxRes.setMsg("删除失败");ajaxRes.setSuccess(false);}return ajaxRes;}@RequestMapping("/updateMenu")@ResponseBodypublic AjaxRes updateMenu(Integer id, String title, String url, Integer parentId){AjaxRes ajaxRes = new AjaxRes();List<Integer> childrenId = menuService.getChildrenId(id);for (Integer children : childrenId) {if (children.equals(parentId)){ajaxRes.setMsg("不能将自己的子菜单作为父级菜单");ajaxRes.setSuccess(false);return ajaxRes;}}try {menuService.updateMenu(id, title, url, parentId);ajaxRes.setMsg("更新成功");ajaxRes.setSuccess(true);}catch (Exception e){System.out.println(e);ajaxRes.setMsg("更新失败");ajaxRes.setSuccess(false);}return ajaxRes;}}
package com.gymmanage.sys.controller;import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.gymmanage.sys.entity.User;
import com.gymmanage.sys.service.UserService;
import com.gymmanage.utils.AjaxRes;
import com.gymmanage.utils.LayuiPage;
import com.gymmanage.utils.Table;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import sun.misc.BASE64Encoder;import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/userPage")public String user(){return "/sys/user";}@RequestMapping("/userAddPage")public String userAdd(){return "/sys/userAdd";}@RequestMapping("/updPwd")public String updPwd(){return "/sys/updPwd";}@RequestMapping("/userUpdatePage")public String userUpdate(Integer id, HttpSession session){session.setAttribute("updateUserId",id);return "/sys/userUpdate";}// 用户登录检查@RequestMapping("/userCheck")@ResponseBodypublic AjaxRes userCheck(String username, String pwd, HttpSession session,String role) throws NoSuchAlgorithmException, UnsupportedEncodingException {AjaxRes ajaxRes = new AjaxRes();// 密码加密MessageDigest md5= MessageDigest.getInstance("MD5");BASE64Encoder base64en = new BASE64Encoder();boolean res = false;if (role.equals("admin")){res = userService.checkPwd(username, base64en.encode(md5.digest(pwd.getBytes("utf-8"))));}else if (role.equals("user")) {String s = userService.checkClientPwd(username, pwd, session);if(s.equals("no")){res=false;}else {username = s;res = true;}}ajaxRes.setSuccess(res);if (res){ajaxRes.setMsg("登录成功");session.setAttribute("username",username);}else {ajaxRes.setMsg("登录失败");}return ajaxRes;}// 获取用户信息@RequestMapping("/getUser")@ResponseBodypublic String gete(HttpSession session){return session.getAttribute("username").toString();}// 用户注销@RequestMapping("/logout")@ResponseBodypublic AjaxRes logout(HttpSession session){AjaxRes ajaxRes = new AjaxRes();if (session != null) {session.invalidate();//调用session的invalidate()方法,将保存的session删除}ajaxRes.setSuccess(true);ajaxRes.setMsg("退出登录成功!");return ajaxRes;}@RequestMapping("/userList")@ResponseBodypublic Table userList(LayuiPage layuiPage){Page<?> page = PageHelper.startPage(layuiPage.getPage(), layuiPage.getLimit());List<User> users = userService.selectAll();return Table.success(Long.valueOf(page.getTotal()),users);}@RequestMapping("/userAdd")@ResponseBodypublic AjaxRes userAdd(User user) throws UnsupportedEncodingException, NoSuchAlgorithmException {return userService.addUser(user);}@RequestMapping("/userUpdate")@ResponseBodypublic AjaxRes userUpdate(User user){return userService.updateUser(user);}@RequestMapping("/userDelete")@ResponseBodypublic AjaxRes userDelete(Integer id){AjaxRes ajaxRes = new AjaxRes();try {userService.deleteUser(id);ajaxRes.setMsg("删除成功");ajaxRes.setSuccess(true);}catch (Exception e){ajaxRes.setMsg("删除失败");ajaxRes.setSuccess(false);}return ajaxRes;}@RequestMapping("/getOne")@ResponseBodypublic User getOne(HttpSession session){return userService.getOne((Integer)session.getAttribute("updateUserId"));}@RequestMapping("/passwordUpdate")@ResponseBodypublic AjaxRes passwordUpdate(String pwd1,String pwd2,HttpSession session) throws NoSuchAlgorithmException, UnsupportedEncodingException {AjaxRes ajaxRes = new AjaxRes();String username = (String) session.getAttribute("username");MessageDigest md5= MessageDigest.getInstance("MD5");BASE64Encoder base64en = new BASE64Encoder();boolean res = userService.checkPwd(username, base64en.encode(md5.digest(pwd1.getBytes("utf-8"))));if (!res){ajaxRes.setMsg("原密码错误");ajaxRes.setSuccess(false);}else{ajaxRes = userService.passwordUpdate(username, pwd2);}return ajaxRes;}@RequestMapping("/passwordUpdate2")@ResponseBodypublic AjaxRes passwordUpdate2(String pwd1,String pwd2,HttpSession session){AjaxRes ajaxRes = new AjaxRes();String username = (String) session.getAttribute("username");boolean res = userService.checkPwd2(username, pwd1);if (!res){ajaxRes.setMsg("原密码错误");ajaxRes.setSuccess(false);}else{ajaxRes = userService.passwordUpdate2(username, pwd2);}return ajaxRes;}@RequestMapping("/freeUser")@ResponseBodypublic List<User> freeUser(){return userService.freeUser();}@RequestMapping("/signIn")@ResponseBodypublic AjaxRes signIn(String name,String phone,String pwd1){AjaxRes ajaxRes = new AjaxRes();int byPhone = userService.getByPhone(phone);if (byPhone == 0){userService.signIn(name,phone,pwd1);ajaxRes.setSuccess(true);}else {ajaxRes.setSuccess(false);}return ajaxRes;}}
package com.gymmanage.gym.controller;import com.gymmanage.gym.entity.Book;
import com.gymmanage.gym.entity.Place;
import com.gymmanage.gym.entity.PlaceKind;
import com.gymmanage.gym.service.PlaceService;
import com.gymmanage.sys.entity.User;
import com.gymmanage.utils.AjaxRes;
import com.gymmanage.utils.LayuiPage;
import com.gymmanage.utils.Table;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.util.List;import static sun.plugin2.os.windows.FLASHWINFO.size;@Controller
@RequestMapping("place")
public class PlaceController {@Autowiredprivate PlaceService placeService;@RequestMapping("/placePage")public String placePage(){return "/gym/place";}@RequestMapping("/placeAddPage")public String placeAddPage(){return "/gym/placeAdd";}@RequestMapping("/placeUpdatePage")public String placeUpdatePage(Integer id, HttpSession session){session.setAttribute("updatePlaceId",id);return "/gym/placeUpdate";}@RequestMapping("/getAllPlace")@ResponseBodypublic Table getAllPlace(Integer kindId, LayuiPage layuiPage){List<Place> allPlace = placeService.getAllPlace(kindId);int length = allPlace.size();return Table.success(Long.valueOf(length),allPlace);}@RequestMapping("/getAllPlaceBook")@ResponseBodypublic Table getAllPlaceBook(Integer kindId, LayuiPage layuiPage){List<Place> allPlace = placeService.getAllPlace(kindId);for (Place place : allPlace) {place.setNextBook(placeService.getNextBook(place.getId()));}int length = allPlace.size();return Table.success(Long.valueOf(length),allPlace);}@RequestMapping("/getAllPlaceKind")@ResponseBodypublic Table getAllPlaceKind(){int length = placeService.getAllPlaceKind().size();return Table.success(Long.valueOf(length),placeService.getAllPlaceKind());}@RequestMapping("/kindAdd")@ResponseBodypublic AjaxRes kindAdd(String kind, Integer kindManager){return placeService.kindAdd(kind, kindManager);}@RequestMapping("/kindList")@ResponseBodypublic List<PlaceKind> kindList(){return placeService.kindList();}@RequestMapping("/getOne")@ResponseBodypublic Place getOne(HttpSession session){return placeService.getOne((Integer)session.getAttribute("updatePlaceId"));}@RequestMapping("/placeAdd")@ResponseBodypublic AjaxRes placeAdd(Place place){return placeService.placeAdd(place);}@RequestMapping("/placeUpdate")@ResponseBodypublic AjaxRes placeUpdate(Place place,HttpSession session){place.setId((Integer)session.getAttribute("updatePlaceId"));return placeService.placeUpdate(place);}@RequestMapping("/changeState")@ResponseBodypublic AjaxRes changeState(Integer id,Integer state,Integer pay){return placeService.changeState(id, state,pay);}@RequestMapping("/getPlaceByState")@ResponseBodypublic List<Place> getPlaceByState(Integer state){return placeService.getPlaceByState(state);}
}

五,项目总结

(1)JAVAEE

JavaEE[2]是一套全新的技术架构,与传统的应用开发完全不同。JavaEE包含了许很多组件,可以对应用系统的开发及部署进行简化和规范化,从而提高应用系统的可复用性和安全性等。

因为JavaEE创造并使用了标准化的模块组件,简化了应用程序的开发周期,从而降低了使用JavaEE开发应用系统的难度。JavaEE的核心是一系列的技术规范,其包含的各种组件、架构和技术层次都有共同的标准和规格,从而让所有使用JavaEE架构的平台间都能很好的进行兼容、移植、复用,解决企业外部和内部之间很难进行通信,同一企业使用的信息产品间不能兼容的问题。JavaEE的一个特色是:其服务器以容器的方式装载、管理所有的组件,并为这些组件提供后台服务。JavaEE使用分层模型,把应用逻辑根据功能划分组件和层次,常见的分层结构是:领域对象层、数据访问对象层、业务逻辑层、控制器层、表现层。

(2) Spring Boot

Spring[3]是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》。Spring是为了解决企业级应用开发的复杂性而创建的,使用Spring可以让简单的JavaBean实现之前只有EJB才能完成的事情[4]。但是Spring不仅仅局限于服务器端开发,任何Java应用都能在简单性、可测试性和松耦合性等方面从Spring中获益,Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。

Spring Boot[5]基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

(3) Layui

layui(谐音:类 UI) 是一套开源的 Web UI[6] 解决方案,采用自身经典的模块化规范,并遵循原生 HTML/CSS/JS 的开发方式,极易上手,拿来即用。其风格简约轻盈,而组件优雅丰盈,从源代码到使用方法的每一处细节都经过精心雕琢,非常适合网页界面的快速开发。layui 区别于那些基于 MVVM 底层的前端框架,却并非逆道而行,而是信奉返璞归真之道。准确地说,它更多是面向后端开发者,你无需涉足前端各种工具,只需面对浏览器本身,让一切所需要的元素与交互,从这里信手拈来。

(4) MySQL

MySQL[7]是一种关系型数据库的管理系统,关系型数据库将数据保存在一个个不同的表中,通过键的形式保障记录的关系性,既加快了操作速度,又提高了灵活性。其与目前其他主流关系型数据库管理系统相比,具有体积小、速度快、拥有成本低,开源的特点,很适合个人或中小型企业使用。MySQL使用的SQL语言是访问关系型数据库的最常用的标准化语言。

  1. HTML

HTML[8]的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。

超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。

(6) JavaScript

JavaScript[9](Java脚本)是一种基于对象(Object)和事件驱动( Event Driven)并具有安全性能的脚本语言,使用JavaScript可以轻松的实现与HTML的互操作,并且完成丰富的页面交互效果,它是通过嵌入或调入在标准的HTML语言中实现的,它的出现弥补了HTML的缺陷,是java与HTML折衷的选择。

(7) CSS

层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。

结论

系统主要实现了体育运动场馆的管理,使得用户和系统的交互更简洁、方便和科学化,让体育运动场馆的管理更加有序。该系统提供了场地管理,销售商品管理,教练管理等,可以让管理者更清晰的知道目前体育场馆的情况,以便对资源做出更合理的分配。在客户完时可自动生成账单明细,在减少管理者统计压力的同时,也对消费者透明,提升服务的体验度。本系统运用于各类体育场馆中可大大简化业务流程、提高工作效率,通过辅助管理人员决策,从而使得经济效益在现有水平上稳步提升,达到场馆最优化、经济效益最大

化的目标。

1024程序员节|基于Springboot实现运动场馆预约信息管理系统相关推荐

  1. 基于Vue 的瑜伽场馆会员信息管理系统java设计

    随着经济和科技的发展,计算机技术应用日渐深入到人们日常工作的方方面面,成为生活中几乎不可或缺的一部分.软件的普及使得人们的认知度增加,不需要培训就可以进行各项操作.然而各行各业的办公软件多如牛毛,却不 ...

  2. 1024程序员节|基于Springboot实现爱心捐赠管理系统

    作者主页:编程千纸鹤 作者简介:Java领域优质创作者.CSDN博客专家 .掘金特邀作者.多年架构师设计经验.腾讯课堂常驻讲师 主要内容:Java项目.毕业设计.简历模板.学习资料.面试题库.技术互助 ...

  3. 基于springboot的高校羽毛球馆信息管理系统的设计与实现

    开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字):

  4. springboot球馆运动场地预约系统在线视频点播系统毕业设计毕设作品开题报告开题答辩PPT

    springboot球馆运动场地预约系统在线视频点播系统毕业设计毕设作品开题报告开题答辩PPT 用户注册:填写手机账号和密码,注册新用户 登录功能:注册普通账号登录:登录后可以修改用户的基本信息,也可 ...

  5. 基于SpringBoot+VUE的宠物医院后台管理系统【源码开源】【建议收藏】

    基于SpringBoot+VUE的宠物医院后台管理系统[源码开源][建议收藏] 今天给大家开源一个基于SpringBoot+VUE的宠物医院后台管理系统,系统基于脚手架工程,花了大概1周时间做出来的. ...

  6. java家谱树_青锋家谱系统-基于springboot+orgtree的青锋家谱树管理系统

    gen 青锋家谱系统:基于springboot架构的家谱项目系统 项目介绍 基于springboot.orgtree的家谱树管理系统,将纸质版的家谱进行电子化.信息化,建立家族的家谱血脉联系. [青锋 ...

  7. 基于Springboot+MybatisPlus+Layui的商品库存权限管理系统

    一.基于Springboot+MybatisPlus+Layui的商品库存权限管理系统 此项目为基于Springboot+MybatisPlus+Layui的商品库存权限管理系统,主要支撑商品库存的系 ...

  8. 基于springboot+mybatis+mysql+html企业人事管理系统

    基于springboot+mybatis+mysql+html企业人事管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.员工奖惩--员工 3.合同管理--员工 4.个人薪酬--员工 5.培训管理 ...

  9. 基于springboot+mybatis+mysql+layui员工工资管理系统

    基于springboot+mybatis+mysql+layui员工工资管理系统 一.目的 二.需求 功能划分 系统结构设计 软件界面截图 三.系统开发配置 四.获取源码 一.目的 ​ 运用JavaE ...

最新文章

  1. re模块与正则表达式
  2. Visual Studio各版本工程文件之间的转换 [转载]
  3. Oracle 删除归档日志脚本
  4. mysql Range按时间分区问题 Table has no partition for value 737669
  5. 子弹图(Bullet chart)绘制很难吗?绘制技巧整理送你~~
  6. 【转】通过IRQL看NT内核
  7. 不为失败找理由,只为成功找方法
  8. 搭建前端监控系统(二)JS错误监控篇
  9. Java8函数式编程详解
  10. java线程系列一:Thread类中的start()方法与run方法
  11. recordset.Open strSql, Conn, 3,3
  12. Unity游戏iOS AppStore 内付费接入(In app purchase)
  13. C/C++实现atoll函数
  14. Linux内存管理专题
  15. android o 结构光流程,结构光光斑图案生成方法和结构光光斑图案生成设备的制造方法...
  16. ElementUI导航菜单嵌套多级折叠面板的小箭头图标bug
  17. 考研还是就业?来自大三计算机党的疑惑
  18. 山东大学为什么火了_比校花更诱人,山东大学因为它,火了!
  19. 金仓数据库KingbaseES SYS_BULKLOAD工具的使用
  20. 手把手教你使用curl2py自动构造爬虫代码并进行网络爬虫

热门文章

  1. 用QT搭建简单的播放器外壳
  2. pgsql 阻塞问题
  3. 普罗米修斯 软件_普罗米修斯电子白板软件教程
  4. 【Axure视频教程】中继器表格——设置表格内容
  5. 第十五期“AI未来说·青年学术论坛”带你了解大数据运用
  6. FairyGUI学习使用
  7. Mac下Aria2安装与使用
  8. Python-import导入上级目录文件
  9. 51单片机实战教程基础硬件篇(二 电子元件原理图库设计教程)
  10. 【设计一个抽象的形状类Shape,方法:求周长和求面积】