博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈
⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到🔎百套Python实战项目持续更新中~
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要开题模板的可以私信留言告诉我❤️文末获取源码联系❤️ ⚠️一定要先收藏⚠️
4系统概要设计
4.1概述
本系统后台采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示:
图4-1系统工作原理图
设计的管理员功能结构图如下图所示:
图4-2管理员功能结构图
设计的用户功能结构图如下图所示:
图4-2用户功能结构图
4.3.数据库设计
概念设计的目标是设计出反映某个组织部门信息需求的数据库系统概念模式,数据库系统的概念模式独立于数据库系统的逻辑结构、独立于数据库管理系统(DBMS)、独立于计算机系统。
概念模式的设计方法是在需求分析的基础上,用概念数据模型(例如E-R模型)表示数据及数据之间的相互联系,设计出反映用户信息需求和处理需求的数据库系统概念模式。概念设计的目标是准确描述应用领域的信息模式,支持用户的各种应用,这样既容易转换为数据库系统逻辑模式,又容易为用户理解。数据库系统概念模式是面向现实世界的数据模型,不能直接用于数据库系统的实现。在此阶段,用户可以参与和评价数据库系统的设计,从而有利于保证数据库系统的设计与用户的需求相吻合。在概念模式的设计中,E-R模型法是最常见的设计方法。本系统的E-R图如下图所示:
图4.12 健康计划新闻信息实体属性图
(2)知识科普实体属性图如图4.13所示:
图4.13 知识科普实体属性图
(3)用户信息实体属性图如图4.14所示:
图4.14 用户信息实体属性图
基于微信小程序的个人健康数据管理系统需要后台数据库,下面介绍数据库中的各个表的详细信息:
表4.1 健康计划评论表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
refid | bigint(20) | 否 | 关联表id | |
userid | bigint(20) | 否 | 用户id | |
nickname | varchar(200) | 是 | NULL | 用户名 |
content | longtext | 否 | 评论内容 | |
reply | longtext | 是 | NULL | 回复内容 |
表4.2 健康信息共享评论表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
refid | bigint(20) | 否 | 关联表id | |
userid | bigint(20) | 否 | 用户id | |
nickname | varchar(200) | 是 | NULL | 用户名 |
content | longtext | 否 | 评论内容 | |
reply | longtext | 是 | NULL | 回复内容 |
表4.3 知识科普评论表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
refid | bigint(20) | 否 | 关联表id | |
userid | bigint(20) | 否 | 用户id | |
nickname | varchar(200) | 是 | NULL | 用户名 |
content | longtext | 否 | 评论内容 | |
reply | longtext | 是 | NULL | 回复内容 |
表4.4 交流区
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
title | varchar(200) | 是 | NULL | 帖子标题 |
content | longtext | 否 | 帖子内容 | |
parentid | bigint(20) | 是 | NULL | 父节点id |
userid | bigint(20) | 否 | 用户id | |
username | varchar(200) | 是 | NULL | 用户名 |
isdone | varchar(200) | 是 | NULL | 状态 |
表4.5 健康计划
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
biaoti | varchar(200) | 是 | NULL | 标题 |
tizhong | varchar(200) | 否 | 体重 | |
nianling | varchar(200) | 否 | 年龄 | |
shengao | varchar(200) | 否 | 身高 | |
yinshijianyi | varchar(200) | 否 | 饮食建议 | |
yundongjianyi | varchar(200) | 否 | 运动建议 | |
beizhu | longtext | 是 | NULL | 备注 |
fengmian | varchar(200) | 是 | NULL | 封面 |
thumbsupnum | int(11) | 是 | 0 | 赞 |
crazilynum | int(11) | 是 | 0 | 踩 |
clicknum | int(11) | 是 | 0 | 点击次数 |
表4.6 健康数据
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
bianhao | varchar(200) | 否 | 编号 | |
yonghuzhanghao | varchar(200) | 是 | NULL | 用户账号 |
yonghuming | varchar(200) | 是 | NULL | 用户名 |
lianxidianhua | varchar(200) | 是 | NULL | 联系电话 |
gerentouxiang | varchar(200) | 是 | NULL | 个人头像 |
nianling | int(11) | 是 | NULL | 年龄 |
shengao | varchar(200) | 是 | NULL | 身高 |
tizhong | varchar(200) | 是 | NULL | 体重 |
yinshixiguan | longtext | 是 | NULL | 饮食习惯 |
yundongxiguan | longtext | 是 | NULL | 运动习惯 |
beizhu | varchar(200) | 是 | NULL | 备注 |
fabushijian | datetime | 是 | NULL | 发布时间 |
userid | bigint(20) | 是 | NULL | 用户id |
表4.7 健康信息共享
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
yonghuzhanghao | varchar(200) | 是 | NULL | 用户账号 |
yonghuming | varchar(200) | 是 | NULL | 用户名 |
xingbie | varchar(200) | 是 | NULL | 性别 |
gerentouxiang | varchar(200) | 是 | NULL | 个人头像 |
nianling | int(11) | 否 | 年龄 | |
shengao | varchar(200) | 否 | 身高 | |
tizhong | varchar(200) | 否 | 体重 | |
yinshixiguan | varchar(200) | 否 | 饮食习惯 | |
yundongxiguan | varchar(200) | 否 | 运动习惯 | |
beizhu | varchar(200) | 是 | NULL | 备注 |
sfsh | varchar(200) | 是 | 否 | 是否审核 |
shhf | longtext | 是 | NULL | 审核回复 |
thumbsupnum | int(11) | 是 | 0 | 赞 |
crazilynum | int(11) | 是 | 0 | 踩 |
clicktime | datetime | 是 | NULL | 最近点击时间 |
clicknum | int(11) | 是 | 0 | 点击次数 |
表4.8 数据分析
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
bianhao | varchar(200) | 是 | NULL | 编号 |
yonghuzhanghao | varchar(200) | 是 | NULL | 用户账号 |
yonghuming | varchar(200) | 是 | NULL | 用户名 |
fabushijian | varchar(200) | 是 | NULL | 发布时间 |
fenxijieguo | varchar(200) | 是 | NULL | 分析结果 |
jiankangjianyi | longtext | 是 | NULL | 健康建议 |
keguantuxiang | varchar(200) | 是 | NULL | 客观图像 |
userid | bigint(20) | 是 | NULL | 用户id |
表4.8 管理员表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
username | varchar(100) | 否 | 用户名 | |
password | varchar(100) | 否 | 密码 | |
role | varchar(100) | 是 | 管理员 | 角色 |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 新增时间 |
表4.9 用户
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
yonghuzhanghao | varchar(200) | 否 | 用户账号 | |
mima | varchar(200) | 否 | 密码 | |
yonghuming | varchar(200) | 是 | NULL | 用户名 |
xingbie | varchar(200) | 是 | NULL | 性别 |
lianxidianhua | varchar(200) | 是 | NULL | 联系电话 |
gerentouxiang | varchar(200) | 是 | NULL | 个人头像 |
表4.10 知识科普
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
biaoti | varchar(200) | 是 | NULL | 标题 |
fengmian | varchar(200) | 是 | NULL | 封面 |
shipinjieshao | varchar(200) | 是 | NULL | 视频介绍 |
xiangxineirong | longtext | 是 | NULL | 详细内容 |
fabushijian | datetime | 是 | NULL | 发布时间 |
gengxinshijian | datetime | 是 | NULL | 更新时间 |
thumbsupnum | int(11) | 是 | 0 | 赞 |
crazilynum | int(11) | 是 | 0 | 踩 |
clicktime | datetime | 是 | NULL | 最近点击时间 |
clicknum | int(11) | 是 | 0 | 点击次数 |
5系统详细实现
5.1 管理员模块的实现
5.1.1 用户管理
管理员可以管理用户信息,可以对通过微信小程序端注册的用户信息修改删除。具体界面的展示如图5.1所示。
图5.1 用户管理界面
5.1.2 知识科普管理
管理员可以对知识科普信息进行添加,修改删除查询操作。具体界面如图5.2所示。
图5.2 知识科普管理界面
5.1.3 健康信息共享管理
系统管理员可以查看健康信息共享,并且可以对健康信息共享管理的信息进行添加修改删除操作。界面如下图所示:
图5.3 健康信息共享管理界面
系统管理员可以查看健康计划,并且可以对健康计划的信息进行添加修改删除操作。界面如下图所示:
图5.4 健康计划管理界面
5.2 小程序用户模块的实现
小程序用户是需要注册才可以进行登录的。界面如下图所示:
图5.5 注册界面
小程序首页会显示知识科普,交流区还有其他信息,通过下滑就可以获取到。界面如下图所示:
图5.6 小程序首页
小程序最下面是导航模块,点击我的,可以出现关于我的相关功能。界面如下图所示:
图5.6 我的
JAVA后端代码实现
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<UserEntity>().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<UserEntity>().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<UserEntity>().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<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
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<UserEntity> ew = new EntityWrapper<UserEntity>();
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<UserEntity>().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<UserEntity>().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();
}
}
源码获取
大家点赞、收藏、关注 ,让更多需要的同学看到
不同开发语言专栏推荐订阅:
👇下方有我的微信名片👇