博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了2000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
文末下方有源码获取地址
ssm586连锁超市会员管理系统+vue录像
4.1系统的总体功能设计
通过结合系统分析阶段的相关内容,对系统的整体功能设计进行规划。由此可知,本系统的使用者主要可以被分为管理员角色和用户角色两类。其中,管理员角色主要的功能需求有用户信息管理、商品信息管理、积分记录管理等模块,用户角色主要的功能需求有系统登录、查询商品信息、查询积分记录信息等模块。本系统的总体功能设计如图4-1所示。

图4-1系统的总体功能设计
4.2数据库设计
4.2.1概念设计
在数据库设计阶段,本系统通过使用开源的、小型的MySQL数据库对系统相关的数据信息进行管理和维护[12]。数据库设计大致可以被分为概念设计和逻辑设计两个阶段。概念设计阶段是逻辑设计阶段的重要依据,同样的,逻辑设计阶段也是概念设计阶段的实现目标。概念设计阶段主要通过使用实体-联系图(E-R图)的方式,将现实世界中用户对系统的实际需求,转换成设计人员能够理解的抽象的数据库概念模型。本人通过设计E-R图,详细的对系统中的实体以及实体之间的联系进行了表达。各实体信息的E-R图如图4-2、图4-3、图4-4、图4-5、图4-6、图4-7、图4-8、图4-9、图4-10所示,系统总体E-R图如图4-11所示。

图4-11系统总体E-R图
4.2.2逻辑设计
逻辑设计阶段主要的工作是将概念设计中的E-R图,转换成方便系统进行存储和管理的二维表格形式[14]。这一阶段也可以被称为数据库的详细设计,其直接关系到系统功能模块的正常运行、数据信息的正常更新等。在设计过程中,需要充分考虑数据库的规范性和合理性,使得能够满足系统的功能和性能需求。本系统相关的数据表格设计内容如下所示。
表4-1 管理员信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
username |
String |
用户名 |
是 |
3 |
password |
String |
密码 |
是 |
4 |
role |
String |
角色 |
是 |
5 |
addtime |
Date |
新增时间 |
是 |
表4-2 用户信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
username |
String |
账户 |
是 |
3 |
password |
String |
密码 |
是 |
4 |
yonghu_name |
String |
用户姓名 |
是 |
5 |
yonghu_phone |
String |
用户手机号 |
是 |
6 |
yonghu_id_number |
String |
用户身份证号 |
是 |
7 |
yonghu_photo |
String |
用户头像 |
是 |
8 |
sex_types |
Integer |
性别 |
是 |
9 |
yonghu_new_jifen |
BigDecimal |
现积分 |
是 |
10 |
yonghu_email |
String |
电子邮箱 |
是 |
11 |
create_time |
Date |
创建时间 |
是 |
表4-3 员工信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
shangdian_id |
Integer |
商店 |
是 |
3 |
username |
String |
账户 |
是 |
4 |
password |
String |
密码 |
是 |
5 |
yuangong_name |
String |
员工姓名 |
是 |
6 |
yuangong_phone |
String |
员工手机号 |
是 |
7 |
yuangong_photo |
String |
员工头像 |
是 |
8 |
sex_types |
Integer |
性别 |
是 |
9 |
yuangong_email |
String |
电子邮箱 |
是 |
10 |
create_time |
Date |
创建时间 |
是 |
表4-4 商店信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
shangdian_name |
String |
商店名称 |
是 |
3 |
shangdian_address |
String |
商店地址 |
是 |
4 |
shangdian_content |
String |
商店介绍 |
是 |
5 |
create_time |
Date |
创建时间 |
是 |
表4-5 商品信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
shangdian_id |
Integer |
商店 |
是 |
3 |
shangpin_name |
String |
商品名称 |
是 |
4 |
shangpin_danwei |
String |
单位 |
是 |
5 |
shangpin_photo |
String |
商品照片 |
是 |
6 |
shangpin_types |
Integer |
商品类型 |
是 |
7 |
shangpin_kucun_ number |
Integer |
商品库存 |
是 |
8 |
shangpin_price |
Integer |
购买获得积分 |
是 |
9 |
shangpin_old_money |
BigDecimal |
商品原价 |
是 |
10 |
shangpin_new_ money |
BigDecimal |
现价 |
是 |
11 |
shangpin_delete |
Integer |
逻辑删除 |
是 |
12 |
shangpin_content |
String |
商品介绍 |
是 |
13 |
create_time |
Date |
创建时间 |
是 |
表4-6 礼品信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
lipin_name |
String |
礼品名称 |
是 |
3 |
lipin_danwei |
String |
单位 |
是 |
4 |
lipin_photo |
String |
礼品照片 |
是 |
5 |
suoxu_number |
Integer |
所需积分 |
是 |
6 |
lipin_delete |
Integer |
逻辑删除 |
是 |
7 |
lipin_content |
String |
礼品详细介绍 |
是 |
8 |
create_time |
Date |
创建时间 |
是 |
表4-7礼品兑换信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
yuangong_id |
Integer |
员工 |
是 |
3 |
yonghu_id |
Integer |
用户 |
是 |
4 |
lipin_id |
Integer |
商品 |
是 |
5 |
lipinduihuan_content |
String |
备注 |
是 |
6 |
insert_time |
Date |
兑换时间 |
是 |
7 |
create_time |
Date |
创建时间 |
是 |
表4-8积分记录信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
yonghu_id |
Integer |
用户 |
是 |
3 |
jifen_types |
Integer |
积分类型 |
是 |
4 |
jifen_number |
Integer |
数量 |
是 |
5 |
jifen_content |
String |
详情 |
是 |
6 |
insert_time |
Date |
添加时间 |
是 |
7 |
create_time |
Date |
创建时间 |
是 |
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
xiaofei_uuid_number |
String |
消费流水号 |
是 |
3 |
yuangong_id |
Integer |
员工 |
是 |
4 |
yonghu_id |
Integer |
用户 |
是 |
5 |
shangpin_id |
Integer |
商品 |
是 |
6 |
xiaofei_number |
Integer |
消费数量 |
是 |
7 |
xiaofei_content |
String |
备注 |
是 |
8 |
xiaofei_time |
Date |
消费时间 |
是 |
9 |
insert_time |
Date |
添加时间 |
是 |
10 |
create_time |
Date |
创建时间 |
是 |
5系统实现
5.1个人中心
通过设计的个人中心管理功能模块,管理用户可以对相关的个人信息进行管理,比如管理用户可以更新个人账号的密码信息,修改个人账号的用户名信息等,修改密码界面设计如图5-1所示,个人信息界面设计如图5-2所示。
package com.controller;
import java.util.Arrays;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.UsersEntity;
import com.service.TokenService;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UsersController {
@Autowired
private UsersService usersService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UsersEntity user = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
R r = R.ok();
r.put("token", token);
r.put("role",user.getRole());
r.put("userId",user.getId());
return r;
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UsersEntity user){
// ValidatorUtils.validateEntity(user);
if(usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
usersService.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){
UsersEntity user = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
usersService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UsersEntity user){
EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
PageUtils page = usersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UsersEntity user){
EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", usersService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UsersEntity user = usersService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Integer id = (Integer)request.getSession().getAttribute("userId");
UsersEntity user = usersService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UsersEntity user){
// ValidatorUtils.validateEntity(user);
if(usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
user.setPassword("123456");
usersService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UsersEntity user){
// ValidatorUtils.validateEntity(user);
usersService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
usersService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
5.2基础数据管理
通过设计的基础数据管理功能模块,管理用户可以对相关的商品类型信息进行管理,比如管理用户可以查看详细的商品类型名称信息,删除失效的商品类型信息记录等,基础数据管理界面设计如图5-3所示。
图5-3基础数据管理界面
5.3礼品管理
通过设计的礼品管理功能模块,管理用户可以对相关的礼品、礼品兑换信息进行管理,比如管理用户可以查看详细的礼品所需积分信息,删除失效的礼品信息记录等,礼品管理界面设计如图5-4所示,礼品兑换管理界面设计如图5-5所示。
大家点赞、收藏、关注、评论啦 其他的定制服务 商务合作 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者