基于java+ssm+vue的健身房私教预约微信小程序

项目介绍

计算机技术的飞速发展带动了各种管理软件的兴起,对我们的工作管理、生活都是很大的帮助,本健身房私教预约微信小程序是采用小程序技术开发的对课程购买、预约工作的信息化、数字化管理,以改变传统的纸质预约方式,本健身房私教预约微信小程序从管理员,用户,教练三个角色来进行功能设计,本论文详细的介绍了健身房私教预约微信小程序的设计过程,并对课题的需求和背景意义目的进行分析介绍,从面向对象的方面进行开发设计,对设计课题的可行性进行详细分析,最后完成本健身房私教预约微信小程序的实现。

本健身房私教预约微信小程序是运行在idea软件上,采用的框架为SSM。主要的功能包括管理员可以对课程管理,对预约管理,对课程购买管理,对课程评价管理和对用户管理,对留言信息管理,用户可以实现个人资料管理,对课程购买、对课程预约;教练可以审核用户的预约以及上传新的课程等。
在这里插入图片描述

开发环境

编程语言: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.2首页操作界面

5.3教练角色的功能设计
教练可以发布新课程和审核课程购买、课程预约信息,并查看课程评价和留言信息。实现界面如下图5.3所示:
在这里插入图片描述

图5.3教练操作界面

5.3.1私教课程管理功能的设计与实现
教练的私教课程信息管理功能的主要内容包括私教课程信息的添加,和私教课程信息查看、修改,添加信息的时候可以根据所设置的关键字进行添加。实现界面如下图5.4所示:

在这里插入图片描述

图5.4教练添加私教课程信息功能界面

5.3.2课程购买管理功能模块的设计与实现
教练在收到用户购买信息后可以审核,实现界面如下图5.5所示:
在这里插入图片描述

图5.5课程购买功能实现界面

5.3.3课程预约管理功能的设计与实现
用户预约课程后同样教练可以审核,实现界面如下图5.6所示:
在这里插入图片描述

图5.6审核课程预约功能操作界面

5.4用户角色功能的详细设计
用户的主要功能为购买课程和预约课程、评价课程、留言。
5.4.1私教课程购买功能的实现
用户在浏览到喜欢的课程后可以线上购买。实现界面如下图5.7所示:
在这里插入图片描述

图5.7课程购买操作界面

5.4.2课程预约功能的设计与实现
用户在购买课程后就可以进行课程的预约,在预约时要注意填写预约时间。实现界面如下图5.8所示:
在这里插入图片描述

图5.8课程预约的界面效果

5.4.3课程评价功能的设计
上课完成后可以进行课程评价,课程评价后教练可以快速的看到。实现界面如下图5.9所示:

在这里插入图片描述

图5.9课程评价功能的界面效果

5.4.4留言管理功能的设计
用户可以进行留言和查看留言回复,实现界面如下图5.10所示:
在这里插入图片描述

图5.10留言信息查看界面效果

5.5管理员角色功能的设计
管理员可以管理课程信息、课程购买、课程预约、课程类型、用户信息、教练信息等。实现界面如下图5.11所示:
在这里插入图片描述

图5.11管理员角色功能界面

核心代码

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.KechengyuyueEntity;
import com.entity.view.KechengyuyueView;

import com.service.KechengyuyueService;
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("/kechengyuyue")
public class KechengyuyueController {
    @Autowired
    private KechengyuyueService kechengyuyueService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,KechengyuyueEntity kechengyuyue, 
		HttpServletRequest request){

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("jiaolian")) {
			kechengyuyue.setJiaoliangonghao((String)request.getSession().getAttribute("username"));
		}
		if(tableName.equals("yonghu")) {
			kechengyuyue.setYonghuming((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<KechengyuyueEntity> ew = new EntityWrapper<KechengyuyueEntity>();
		PageUtils page = kechengyuyueService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, kechengyuyue), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,KechengyuyueEntity kechengyuyue, HttpServletRequest request){

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("jiaolian")) {
			kechengyuyue.setJiaoliangonghao((String)request.getSession().getAttribute("username"));
		}
		if(tableName.equals("yonghu")) {
			kechengyuyue.setYonghuming((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<KechengyuyueEntity> ew = new EntityWrapper<KechengyuyueEntity>();
		PageUtils page = kechengyuyueService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, kechengyuyue), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( KechengyuyueEntity kechengyuyue){
       	EntityWrapper<KechengyuyueEntity> ew = new EntityWrapper<KechengyuyueEntity>();
      	ew.allEq(MPUtil.allEQMapPre( kechengyuyue, "kechengyuyue")); 
        return R.ok().put("data", kechengyuyueService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(KechengyuyueEntity kechengyuyue){
        EntityWrapper< KechengyuyueEntity> ew = new EntityWrapper< KechengyuyueEntity>();
 		ew.allEq(MPUtil.allEQMapPre( kechengyuyue, "kechengyuyue")); 
		KechengyuyueView kechengyuyueView =  kechengyuyueService.selectView(ew);
		return R.ok("查询课程预约成功").put("data", kechengyuyueView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        KechengyuyueEntity kechengyuyue = kechengyuyueService.selectById(id);
        return R.ok().put("data", kechengyuyue);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        KechengyuyueEntity kechengyuyue = kechengyuyueService.selectById(id);
        return R.ok().put("data", kechengyuyue);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody KechengyuyueEntity kechengyuyue, HttpServletRequest request){
    	kechengyuyue.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(kechengyuyue);

        kechengyuyueService.insert(kechengyuyue);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody KechengyuyueEntity kechengyuyue, HttpServletRequest request){
    	kechengyuyue.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(kechengyuyue);
    	kechengyuyue.setUserid((Long)request.getSession().getAttribute("userId"));

        kechengyuyueService.insert(kechengyuyue);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody KechengyuyueEntity kechengyuyue, HttpServletRequest request){
        //ValidatorUtils.validateEntity(kechengyuyue);
        kechengyuyueService.updateById(kechengyuyue);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        kechengyuyueService.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<KechengyuyueEntity> wrapper = new EntityWrapper<KechengyuyueEntity>();
		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("jiaoliangonghao", (String)request.getSession().getAttribute("username"));
		}
		if(tableName.equals("yonghu")) {
			wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username"));
		}

		int count = kechengyuyueService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}

论文参考

在这里插入图片描述

目 录
摘 要 1
Abstract 2
第1章 绪论 1
1.1 课题研究背景 1
1.2 课题研究内容 1
1.3 课题实现意义 2
1.4 课题实现规则 2
第2章 开发技术的分析和选择 3
2.1 微信小程序技术介绍 3
2.2 MySQL数据库介绍 3
2.3 HTML(Hyper Text Markup Language)超文本标记语言介绍 3
2.4 微信开发者工具介绍 3
2.5 SSM框架介绍 4
第3章 系统分析 5
3.1系统分析的目的与过程 5
3.1.1 系统分析的目的 5
3.1.2系统分析的过程 5
3.2可行性分析 5
3.2.1技术可行性分析 5
3.2.2 操作可行性分析 5
3.2.3经济可行性分析 5
3.3系统功能分析 5
3.4系统性能分析 7
3.4系统流程分析 8
第4章 总体设计 9
4.1 系统功能结构设计 9
4.2 数据库的建立 9
4.2.1 数据库的概念设计 10
4.3系统实体关系的定义 12
4.4数据库逻辑结构设计 13
第5章 系统详细设计 19
5.1登录界面的设计与实现 19
5.2首页界面的详细设计 19
5.3教练角色的功能设计 20
5.3.1私教课程管理功能的设计与实现 21
5.3.2课程购买管理功能模块的设计与实现 22
5.3.3课程预约管理功能的设计与实现 23
5.4用户角色功能的详细设计 24
5.4.1私教课程购买功能的实现 24
5.4.2课程预约功能的设计与实现 25
5.4.3课程评价功能的设计 26
5.4.4留言管理功能的设计 27
5.5管理员角色功能的设计 28
第6章 系统测试 29
6.1系统测试的目的 29
6.2系统测试的步骤 29
6.3具体测试过程 29
6.3.1用户登录功能的测试 29
6.3.2修改密码功能的测试 30
6.3.3课程购买功能的测试 30
6.3.4课程信息管理功能的测试 30
6.3.5课程预约功能的测试 31
6.4测试总结 31
总 结 32
参考文献 33
致 谢 35

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值