博主介绍:专注于Java(springboot ssm springcloud) vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
更多项目地址 介绍 qq_251836457-CSDN博客
文末下方有源码获取地址
系统实现预览
三味书屋网络书店销售管理总体设计
本章主要讨论的内容包括三味书屋网络书店销售管理的功能模块设计、数据库系统设计。
本三味书屋网络书店销售管理 从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。
图3-1三味书屋网络书店销售管理架构设计图
表现层(UI):又称UI层,主要完成本三味书屋网络书店销售管理的UI交互功能,一个良好的UI可以打打提高用户的用户体验,增强用户使用本三味书屋网络书店销售管理时的舒适度。UI的界面设计也要适应不同版本的三味书屋网络书店销售管理 以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用户进行交互操作时必须要得到与之相符的交互结果,这就要求表现层要与业务逻辑层进行良好的对接。
业务逻辑层(BLL):主要完成本三味书屋网络书店销售管理的数据处理功能。用户从表现层传输过来的数据经过业务逻辑层进行处理交付给数据层,系统从数据层读取的数据经过业务逻辑层进行处理交付给表现层。
数据层(DL):由于本三味书屋网络书店销售管理的数据是放在服务端的mysql数据库中,因此本属于服务层的部分可以直接整合在业务逻辑层中,所以数据层中只有数据库,其主要完成本三味书屋网络书店销售管理 的数据存储和管理功能。
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本三味书屋网络书店销售管理中的用例。那么接下来就要开始对本三味书屋网络书店销售管理的架构、主要功能和数据库开始进行设计。三味书屋网络书店销售管理根据前面章节的需求分析得出,其总体设计模块图如图3-2所示。
图3-2 三味书屋网络书店销售管理功能模块图
后台管理者能够实现对前台注册的用户增删改查操作,用户模块结构图如下图:
图3-3用户模块结构图
三味书屋网络书店销售管理是一个交流性质的公开平台,用户用户和管理人员用户可以对平台上信息进行评论,增加用户之间的互动性。但是同时也为了更好的规范评论的内容,给予管理员删除不合适的言论的功能,所以需要专门设计一个评论管理模块,具体的结构图如下:
图3-4评论模块结构图
3.2.4商城管理模块设计
三味书屋网络书店销售管理是中需要存储不少图书信息,其模块功能结构,具体的结构图如下:
图3-5商城模块结构图
三味书屋网络书店销售管理最重要的一个功能就是购买,其模块功能结构,具体的结构图如下:
图3-5订单模块结构图
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
下面是整个三味书屋网络书店销售管理中主要的数据库表总E-R实体关系图。
图3-6 三味书屋网络书店销售管理总E-R关系图
下面根据三味书屋网络书店销售管理 的数据库总E-R关系图可以得出三味书屋网络书店销售管理需要很多E-R图,在此罗列出来一些主要的数据库E-R模型图。
图3-7普通用户E-R关系图
图3-8 销售榜单E-R关系图
图3-9订单E-R关系图
图3-10留言箱E-R关系图
通过上一小节中三味书屋网络书店销售管理 中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
sales_list表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
sales_list_id | int | 11 | 是 | 是 | 销售榜单ID |
book_number | varchar | 64 | 否 | 否 | 图书编号 |
book_name | varchar | 64 | 否 | 否 | 图书名称 |
sales_volumes | varchar | 64 | 否 | 否 | 销售数量 |
ranking | varchar | 64 | 否 | 否 | 排名 |
remarks | varchar | 64 | 否 | 否 | 备注 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
registered_user表 | |||||
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
registered_user_id | int | 11 | 是 | 是 | 注册用户ID |
user_name | varchar | 64 | 是 | 否 | 用户名 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
order表: | |||||
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
order_id | int | 11 | 是 | 是 | 订单ID |
order_number | varchar | 64 | 否 | 否 | 订单号 |
goods_id | mediumint | 8 | 是 | 否 | 商品id |
title | varchar | 32 | 否 | 否 | 商品标题 |
img | varchar | 255 | 否 | 否 | 商品图片 |
price | double | 10 | 是 | 否 | 价格 |
price_ago | double | 10 | 是 | 否 | 原价 |
num | int | 8 | 是 | 否 | 数量 |
price_count | double | 8 | 是 | 否 | 总价 |
norms | varchar | 255 | 否 | 否 | 规格 |
type | varchar | 64 | 是 | 否 | 商品分类 |
contact_name | varchar | 32 | 否 | 否 | 联系人姓名 |
contact_email | varchar | 125 | 否 | 否 | 联系人邮箱 |
contact_phone | varchar | 11 | 否 | 否 | 联系人手机 |
contact_address | varchar | 255 | 否 | 否 | 收件地址 |
postal_code | varchar | 9 | 否 | 否 | 邮政编码 |
user_id | int | 10 | 是 | 否 | 买家ID |
merchant_id | mediumint | 8 | 是 | 否 | 商家ID |
create_time | timestamp | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
description | varchar | 255 | 否 | 否 | 描述 |
state | varchar | 16 | 是 | 否 | 订单状态 |
message_box表: | |||||
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
message_box_id | int | 11 | 是 | 是 | 留言箱ID |
theme | varchar | 64 | 否 | 否 | 主题 |
relevant_vouchers | varchar | 255 | 否 | 否 | 相关凭证 |
user_name | int | 11 | 否 | 否 | 用户名 |
contact_number | varchar | 64 | 否 | 否 | 联系电话 |
content | text | 0 | 否 | 否 | 内容 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
examine_reply | varchar | 16 | 否 | 否 | 审核回复 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
book_mall表: | |||||
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
book_mall_id | int | 11 | 是 | 是 | 图书商城ID |
author | varchar | 64 | 否 | 否 | 作者 |
press | varchar | 64 | 否 | 否 | 出版社 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
cart_title | varchar | 125 | 否 | 否 | 标题 |
cart_img | text | 0 | 否 | 否 | 封面图 |
cart_description | varchar | 255 | 否 | 否 | 描述 |
cart_price_ago | double | 8 | 是 | 否 | 原价 |
cart_price | double | 8 | 是 | 否 | 卖价 |
cart_inventory | int | 11 | 是 | 否 | 商品库存 |
cart_type | varchar | 64 | 是 | 否 | 商品分类 |
cart_content | longtext | 0 | 否 | 否 | 正文 |
cart_img_1 | text | 0 | 否 | 否 | 主图1 |
cart_img_2 | text | 0 | 否 | 否 | 主图2 |
cart_img_3 | text | 0 | 否 | 否 | 主图3 |
cart_img_4 | text | 0 | 否 | 否 | 主图4 |
cart_img_5 | text | 0 | 否 | 否 | 主图5 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
comment表: | |||||
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
comment_id | int | 11 | 是 | 是 | 评论ID |
user_id | int | 11 | 是 | 否 | 评论人ID |
reply_to_id | int | 11 | 是 | 否 | 回复评论ID |
content | longtext | 0 | 否 | 否 | 内容 |
nickname | varchar | 255 | 否 | 否 | 昵称 |
avatar | varchar | 255 | 否 | 否 | 头像地址 |
create_time | timestamp | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
source_table | varchar | 255 | 否 | 否 | 来源表 |
source_field | varchar | 255 | 否 | 否 | 来源字段 |
source_id | int | 10 | 是 | 否 | 来源ID |
整个三味书屋网络书店销售管理的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4 三味书屋网络书店销售管理详细设计与实现
三味书屋网络书店销售管理的详细设计与实现主要是根据前面的三味书屋网络书店销售管理 的需求分析和三味书屋网络书店销售管理的总体设计来设计页面并实现业务逻辑。主要从三味书屋网络书店销售管理 界面实现、业务逻辑实现这两部分进行介绍。
当进入三味书屋网络书店销售管理的时候,首先映入眼帘的是系统的导航栏,下面是轮播图以及系统内容,其主界面展示如下图4-1所示。
图4-1 前台首页界面图
三味书屋网络书店销售管理中的前台上注册后的学生是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到三味书屋网络书店销售管理的首页中;否则将会提示相应错误信息,用户登录界面如下图4-2所示。
图4-2用户登录界面图
登录关键代码如下所示。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
4.1.3用户注册界面
不是三味书屋网络书店销售管理中正式用户的是可以在线进行注册的,如果你没有本三味书屋网络书店销售管理的账号的话,添加“注册”,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用用户注册界面展示如下图4-3所示。
图4-2用户注册界面图
注册关键代码如下所示。
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
当访客点击了任意图书后将会进入该款图书的详情界面,可以了解到该图书品的图书信息、图片信息、价钱信息等,同时可以对该图书进行立即购买+收藏+点赞+评论,图书详情展示页面如图4-4所示。
图4-4图书详情界面图
当用户点击“收货地址”右后,就回去显示出目前现有的地址,也可以添加新的地址,界面如下图4-5所示。
图4-5收货地址界面图
用户在点击导航栏上面的图书资讯后,就可以搜索查看图书资讯信息,用户根据自己的喜好可以进行查询、评论,图书资讯界面如下图4-6所示。
图4-6图书资讯界面图
当用户点击“我的订单”链接后就进入自己购买的订单的界面展示,界面如下图4-7所示。
图4-7我的订单界面图
三味书屋网络书店销售管理中的管理人员是可以对前台注册的用户进行管理的,也可以对管理员进行管控。界面如下图4-8所示。
图4-8用户管理界面图
用户管理关键代码如下所示。
public String encryption(String plainText) {
String re_md5 = new String();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
re_md5 = buf.toString();
} catch (Exception e) {
e.printStackTrace();
}
return re_md5;
}
三味书屋网络书店销售管理的管理人员是可以对三味书屋网络书店销售管理内的图书资讯信息进行维护和管理的。图书资讯界面如下图4-9所示。
图4-9图书资讯界面图
源码文档下载获取地址
springboot三味书屋网络书店销售管理.zip资源-CSDN文库
大家点赞、收藏、关注、评论啦 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者