博主介绍:全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战
⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到千套JAVA项目实战持续更新中~
百套小程序APP项目实战持续更新中~
百套Python实战项目持续更新中~
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要开题模板的可以私信留言告诉我❤️文末获取源码联系❤️ ⚠️一定要先收藏⚠️
本文通过B/S结构(Browser/Server,浏览器/服务器结构)开发的该游泳馆管理系统,B/S结构的优点很多,例如:开发容易、强的共享性、便于维护等,只要有网络,用户可以随时随地进行使用。
系统工作原理如图4-1所示。
系统结构设计就像一个树状结构一样,一个树干有很多分支,大任务相当于树干,小任务相当于树枝,只有需求分析信息弄清楚之后,才能保证每个小任务都能实现目标,对初步设计好的系统再进行不断优化,最终得到一个具体现实的系统结构。
管理员功能模块和用户功能模块是该游泳馆管理系统的两大部分,系统结构如图4-2所示。
图4-2 系统结构图
对所开发出来的程序的好坏起到关键作用的就是数据库,而表结构、表与表之间的联系、数据表内容等信息对数据库的设计又起到非常关键的作用,只有对上述信息进行多思考,才能确保设计出的数据库能够与程序匹配。
采用MYSQL数据库对该游泳馆管理系统的数据进行存储,数据库中所包括的各个数据库表的详细信息如下所示:
表4.1字典表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
dic_code |
String |
字段 |
是 |
3 |
dic_name |
String |
字段名 |
是 |
4 |
code_index |
Integer |
编码 |
是 |
5 |
index_name |
String |
编码名字 |
是 |
6 |
super_id |
Integer |
父字段id |
是 |
7 |
beizhu |
String |
备注 |
是 |
8 |
create_time |
Date |
创建时间 |
是 |
表4.2论坛表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
forum_name |
String |
帖子标题 |
是 |
3 |
yonghu_id |
Integer |
会员 |
是 |
4 |
jiaolian_id |
Integer |
教练 |
是 |
5 |
users_id |
Integer |
管理员 |
是 |
6 |
forum_content |
String |
发布内容 |
是 |
7 |
super_ids |
Integer |
父id |
是 |
8 |
forum_state_types |
Integer |
帖子状态 |
是 |
9 |
insert_time |
Date |
发帖时间 |
是 |
10 |
update_time |
Date |
修改时间 |
是 |
11 |
create_time |
Date |
创建时间 |
是 |
表4.3游泳资讯表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
gonggao_name |
String |
资讯名称 |
是 |
3 |
gonggao_photo |
String |
资讯图片 |
是 |
4 |
gonggao_types |
Integer |
资讯类型 |
是 |
5 |
insert_time |
Date |
发布时间 |
是 |
6 |
gonggao_content |
String |
资讯详情 |
是 |
7 |
create_time |
Date |
创建时间 |
是 |
表4.4教练表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
jiaolian_name |
String |
教练名称 |
是 |
3 |
jiaolian_phone |
String |
联系方式 |
是 |
4 |
jiaolian_email |
String |
邮箱 |
是 |
5 |
jiaolian_photo |
String |
教练照片 |
是 |
6 |
jiaolian_types |
Integer |
教练类型 |
是 |
7 |
jiaolian_content |
String |
教练介绍 |
是 |
8 |
create_time |
Date |
创建时间 |
是 |
表4.5教练收藏表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
jiaolian_id |
Integer |
教练 |
是 |
3 |
yonghu_id |
Integer |
会员 |
是 |
4 |
jiaolian_collection_types |
Integer |
类型 |
是 |
5 |
insert_time |
Date |
收藏时间 |
是 |
6 |
create_time |
Date |
创建时间 |
是 |
表4.6教练留言表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
jiaolian_id |
Integer |
教练 |
是 |
3 |
yonghu_id |
Integer |
会员 |
是 |
4 |
jiaolian_liuyan_text |
String |
留言内容 |
是 |
5 |
insert_time |
Date |
留言时间 |
是 |
6 |
create_time |
Date |
创建时间 |
是 |
表4.7课程信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
kecheng_name |
String |
课程信息名称 |
是 |
3 |
kecheng_photo |
String |
课程信息照片 |
是 |
4 |
kecheng_new_money |
BigDecimal |
价格 |
是 |
5 |
kecheng_types |
Integer |
课程类型 |
是 |
6 |
jiaolian_id |
Integer |
教练 |
是 |
7 |
zan_number |
Integer |
赞 |
是 |
8 |
cai_number |
Integer |
踩 |
是 |
9 |
kecheng_clicknum |
Integer |
课程信息热度 |
是 |
10 |
kecheng_content |
String |
课程信息介绍 |
是 |
11 |
kecheng_delete |
Integer |
逻辑删除 |
是 |
12 |
insert_time |
Date |
录入时间 |
是 |
13 |
create_time |
Date |
创建时间 homeMain |
是 |
表4.8课程收藏表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
kecheng_id |
Integer |
课程信息 |
是 |
3 |
yonghu_id |
Integer |
会员 |
是 |
4 |
kecheng_collection_types |
Integer |
类型 |
是 |
5 |
insert_time |
Date |
收藏时间 |
是 |
6 |
create_time |
Date |
创建时间 |
是 |
表4.9课程留言表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
kecheng_id |
Integer |
课程信息 |
是 |
3 |
yonghu_id |
Integer |
会员 |
是 |
4 |
kecheng_liuyan_text |
String |
留言内容 |
是 |
5 |
insert_time |
Date |
留言时间 |
是 |
6 |
create_time |
Date |
创建时间 |
是 |
表4.10课程预约表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
kecheng_order_uuid_number |
String |
订单编号 |
是 |
3 |
kecheng_id |
Integer |
课程信息 |
是 |
4 |
yonghu_id |
Integer |
会员 |
是 |
5 |
kecheng_order_time |
Date |
预约时间 |
是 |
6 |
kecheng_order_true_price |
BigDecimal |
实付价格 |
是 |
7 |
kecheng_order_types |
Integer |
订单类型 |
是 |
8 |
kecheng_order_payment_types |
Integer |
支付类型 |
是 |
9 |
insert_time |
Date |
订单创建时间 |
是 |
10 |
create_time |
Date |
创建时间 |
是 |
表4.11公告通知表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
news_name |
String |
公告标题 |
是 |
3 |
news_types |
Integer |
公告类型 |
是 |
4 |
news_photo |
String |
公告图片 |
是 |
5 |
insert_time |
Date |
添加时间 |
是 |
6 |
news_content |
String |
公告详情 |
是 |
7 |
create_time |
Date |
创建时间 |
是 |
表4.12会员表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
yonghu_name |
String |
会员名称 |
是 |
3 |
yonghu_phone |
String |
会员手机号 |
是 |
4 |
yonghu_id_number |
String |
会员身份证号 |
是 |
5 |
yonghu_photo |
String |
会员头像 |
是 |
6 |
yonghu_email |
String |
会员邮箱 |
是 |
7 |
new_money |
BigDecimal |
现有余额 |
是 |
8 |
yonghu_delete |
Integer |
逻辑删除 |
是 |
9 |
insert_time |
Date |
添加时间 |
是 |
10 |
create_time |
Date |
创建时间 |
是 |
表4.13管理员表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
username |
String |
医院名 |
是 |
3 |
password |
String |
密码 |
是 |
4 |
role |
String |
角色 |
是 |
5 |
addtime |
Date |
新增时间 |
是 |
如图5.1显示的就是会员信息管理页面,此页面提供给管理员的功能有:会员信息的查询管理,可以删除会员信息、修改会员信息、新增会员信息,
还进行了对用户名称的模糊查询的条件
图5.1 会员信息管理页面
如图5.2显示的就是教练信息管理页面,此页面提供给管理员的功能有:查看已发布的教练信息数据,修改教练信息,教练信息作废,即可删除,还进行了对教练信息名称的模糊查询 教练信息信息的类型查询等等一些条件。
图5.2 教练信息管理页面
如图5.3显示的就是课程信息管理页面,此页面提供给管理员的功能有:根据课程信息进行条件查询,还可以对课程信息进行新增、修改、查询操作等等。
图5.3 课程信息管理页面
package com.controller;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map params,UserEntity user){
EntityWrapper ew = new EntityWrapper();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper ew = new EntityWrapper();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
UserEntity u = userService.selectOne(new EntityWrapper().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
大家点赞、收藏、关注 ,让更多需要的同学看到
不同开发语言专栏推荐订阅:
千套JAVA项目实战持续更新中~
百套小程序APP项目实战持续更新中~
百套Python实战项目持续更新中~
下方有我的微信名片