项目介绍
自2014年底以来,体育产业政策红利接踵而至。在政府鼓励下,一系列体育产业政策出现,加之资本的投入使得优质的内容和商品大幅度的产生,以及居民健康意识的加强和参与大众体育的热情,使得体育产业进入了黄金发展期。大众健身作为体育产业的一部分,正如火如茶的发展。谈及健身领域,最重要的两个因素就是健身场地和教练管理,在互联网时代下,专业的健身商品也成为企业发展重要的桎梏。2016年6月3日国务院印发的《全面健身计划(2016-2020年)》中提到:“不断扩大的健身人群、支持市场涌现适合亚洲人的健身课程、专业教练管理培养机构、专业健身教练管理以及体验良好的健身场所。
健身房私教预约的设计主要是对系统所要实现的功能进行详细考虑,确定所要实现的功能后进行界面的设计,在这中间还要考虑如何可以更好的将功能及页面进行很好的结合,方便用户可以很容易明了的找到自己所需要的信息,还有系统平台后期的可操作性,通过对信息内容的详细了解进行技术的开发。
健身房私教预约的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与健身房私教预约的实际需求相结合,讨论了基于健身房私教预约的使用。
开发环境
编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,微信开发者工具,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net
系统实现
5.1教练微信端功能实现
教练登录,教练进入登陆页面填写教练工号、密码进行登陆如图5-1所示。
图5-1教练登录界面图
首页,教练进入首页页面可以查看首页、私教课程、健身资讯、我的等信息,如图5-2所示。
图5-2首页界面图
我的,教练进入我的页面可以查看教练信息、私教课程、课程购买、课程预约、课程评价、留言板等信息,如图5-3所示。
图5-3我的界面图
私教课程,用户进入私教课程查看填写课程名称、类型、图片、节数、课程价格、可约时间、课程介绍、教练工号、教练姓名、等级、个人简介,进行提交操作,操作如图5-4所示。
图5-4私教课程界面图
5.2用户微信端功能实现
用户注册、登录,用户进入注册页面填写用户名、密码、姓名、性别、联系电话进行注册,信息无误进入登陆页面填写用户名、密码进行登陆如图5-5所示
图5-5用户注册、登录界面图
首页,用户进入首页页面可以查看首页、私教课程、健身资讯、我的等信息,进行查看操作,如图5-6所示。
图5-6首页界面图
我的,用户进入我的页面查看用户信息、私教课程、课程购买、课程预约、我的收藏管理、留言板等信息,如图5-7所示。
图5-7我的界面图
用户信息,用户进入个人页面可以查看填写用户名、密码、姓名、性别、头像、联系电话等信息,进行提交保存如图5-8所示。
图5-8个人信息界面图
私教课程,用户进入私教课程可以查看课程名称、类型、图片、节数、课程价格、可约时间、课程介绍、教练工号、教练姓名、等级进行购买操作,如图5-9-所示。
图5-9私教课程界面图
5.3 管理员服务端功能实现
管理员通过健身房私教预约进行确认,管理员进入到健身房私教预约主界面,管理员进入到操作界面,通过登录窗口进行在线填写自己的用户名和密码进行登录,登录成功后进入到系统操作界面进行相应信息的获取,如图5-10所示。
图5-10管理员登录主界面图
管理员进入到界面,通过界面的任务大厅,登录成功后进入到系统可以进行查看首页、个人中心、用户管理、教练管理、课程类型管理、私教课程管理、课程购买管理、课程预约管理、课程评价管理、留言板管理、系统管理等功能模块,进行相对应操作,如图5-11所示。
图5-11管理员功能界面图
用户管理,管理员在用户信息页面通过查看用户名、姓名、性别、头像、联系电话等信息进行添加、修改、删除、查询操作,如图4-12
图5-12用管理界面图
教练管理,管理员在教练管理页面通过查看教练工号、教练姓名、性别、头像、年龄、等级、个人简介、联系方式、身份证等信息进行添加、修改、删除、查询操作,如图5-13所示。
图5-13教练管理界面图
课程购买管理,管理员在课程购买页面通过查看订单编号、课程名称、类型、图片、节数、课程价格、购买日期、教练工号、教练姓名、用户名、姓名、联系电话、是否支付等信息可进行审核回复、查看详情、修改、删除操作,如图5-14所示。
图5-14课程购买管理界面图
课程预约管理,管理员进入到课程预约界面,进行查看,审核、回复,详情查看、修改、删除操作,如图5-15所示。
图5-15课程预约管理界面图
留言板管理,管理员进入到留言板界面,进行回复用户,详情查看、修改、删除操作,如图5-16所示。
图5-16留言板管理界面图
系统管理:管理员通过系统管理页面查看轮播图/健身资讯等进行上传图片,资讯发布进行添加、删除、修改以及查看并对整个系统进行维护等操作。如图5-17所示。
图5-17系统管理界面图
核心代码
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.TuikuanxinxiEntity;
import com.entity.view.TuikuanxinxiView;
import com.service.TuikuanxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 退款信息
* 后端接口
* @author
* @email
* @date
*/
@RestController
@RequestMapping("/tuikuanxinxi")
public class TuikuanxinxiController {
@Autowired
private TuikuanxinxiService tuikuanxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,TuikuanxinxiEntity tuikuanxinxi,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaolian")) {
tuikuanxinxi.setJiaolianbianhao((String)request.getSession().getAttribute("username"));
}
if(tableName.equals("huiyuan")) {
tuikuanxinxi.setHuiyuankahao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<TuikuanxinxiEntity> ew = new EntityWrapper<TuikuanxinxiEntity>();
PageUtils page = tuikuanxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, tuikuanxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("st")
public R list(@RequestParam Map<String, Object> params,TuikuanxinxiEntity tuikuanxinxi,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaolian")) {
tuikuanxinxi.setJiaolianbianhao((String)request.getSession().getAttribute("username"));
}
if(tableName.equals("huiyuan")) {
tuikuanxinxi.setHuiyuankahao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<TuikuanxinxiEntity> ew = new EntityWrapper<TuikuanxinxiEntity>();
PageUtils page = tuikuanxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, tuikuanxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("sts")
public R list( TuikuanxinxiEntity tuikuanxinxi){
EntityWrapper<TuikuanxinxiEntity> ew = new EntityWrapper<TuikuanxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( tuikuanxinxi, "tuikuanxinxi"));
return R.ok().put("data", tuikuanxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(TuikuanxinxiEntity tuikuanxinxi){
EntityWrapper< TuikuanxinxiEntity> ew = new EntityWrapper< TuikuanxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( tuikuanxinxi, "tuikuanxinxi"));
TuikuanxinxiView tuikuanxinxiView = tuikuanxinxiService.selectView(ew);
return R.ok("查询退款信息成功").put("data", tuikuanxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
TuikuanxinxiEntity tuikuanxinxi = tuikuanxinxiService.selectById(id);
return R.ok().put("data", tuikuanxinxi);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
TuikuanxinxiEntity tuikuanxinxi = tuikuanxinxiService.selectById(id);
return R.ok().put("data", tuikuanxinxi);
}
/**
* 后端保存
*/
@RequestMapping("ve")
public R save(@RequestBody TuikuanxinxiEntity tuikuanxinxi, HttpServletRequest request){
tuikuanxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(tuikuanxinxi);
tuikuanxinxiService.insert(tuikuanxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody TuikuanxinxiEntity tuikuanxinxi, HttpServletRequest request){
tuikuanxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(tuikuanxinxi);
tuikuanxinxi.setUserid((Long)request.getSession().getAttribute("userId"));
tuikuanxinxiService.insert(tuikuanxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody TuikuanxinxiEntity tuikuanxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(tuikuanxinxi);
tuikuanxinxiService.updateById(tuikuanxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
tuikuanxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<TuikuanxinxiEntity> wrapper = new EntityWrapper<TuikuanxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaolian")) {
wrapper.eq("jiaolianbianhao", (String)request.getSession().getAttribute("username"));
}
if(tableName.equals("huiyuan")) {
wrapper.eq("huiyuankahao", (String)request.getSession().getAttribute("username"));
}
int count = tuikuanxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
论文参考
目 录
摘 要 I
Abstract II
第一章 绪 论 1
1.1选题背景 2
1.2研究现状 3
1.3研究内容 4
第二章 开发工具及关键技术介绍 6
2.1微信开发者工具 7
2.2小程序框架以及目录结构介绍 8
2.3 JAVA技术 8
2.4 Mysql数据库 8
2.5 SSM框架 8
第三章 系统分析 10
3.1需求分析 10
3.2可行性分析 10
3.2.1技术可行性:技术背景 10
3.2.2经济可行性 11
3.2.3操作可行性: 11
3.3性能分析 11
3.4系统操作流程 12
3.4.1管理员登录流程 12
3.4.2信息添加流程 12
3.4.3信息删除流程 13
第四章 系统设计与实现 15
4.1系统架构设计 15
4.2开发流程设计 15
4.3数据库设计 16
4.3.1实体ER图 16
4.3.2数据表 18
第五章 系统实现 21
5.1 教练微信端功能实现 24
5.2 用户微信端功能实现 24
5.3 管理员服务端功能实现 24
第六章 系统的测试 27
6.1 测试目的 27
6.2 测试方案设计 27
6.2.1 测试策略 27
6.2.2 测试分析 28
6.3 测试结果 28
结 论 29
参考文献 30
致 谢 31