java+vue+SpringBoot电商平台系统(程序+数据库+报告+部署教程+答辩指导)
源代码+数据库+LW文档(1万字以上)+开题报告+答辩稿ppt+部署教程+代码讲解+代码时间修改工具
技术实现
- 开发语言:后端:Java 前端:vue
- 框架:springboot
- 数据库:mysql
开发工具
JDK版本:JDK1.8
数据库:mysql 数据库工具:Navicat
开发软件:idea
主要角色及功能介绍
前台需求:
(1)用户模块:主要包括用户的注册和登陆、用户个人信息管理和用户帐单查询等功能。
(2)商品模块:主要包括商品浏览、商品信息展示、商品搜索、商品收藏、商品购买等功能。
(3)购买订单模块:主要包括生成订单、我的订单、查看订单详细信息、在线支付、确认收货等功能。
后台需求:
(1)用户管理:主要包括用户列表、用户数据管理等功能。
(2)商城管理:主要包括商城中心、分类列表、订单列表管理等功能。
(3)订单管理:主要包括帮助中心、会员中心、促销管理、运营管理、财务管理等功能。
系统用例图如下所示。
图3-1系统用例图
通过软件的需求分析已经获得了系统的基本功能需求。根据各大功能模块的不同,将系统分为各种功能大块。系统功能结构如下图所示。
图4-2系统功能结构图
注册/登录
游客(未进行注册或登陆的用户)可以浏览、搜索商品,但不能进行收藏和购买。用户注册首先需要进行表单验证,来验证用户名和手机号码是否合法,然后验证用户名和手机号是否已经存在,验证通过即可注册。
注册成功后,用户可以通过输入用户名来登录系统,输入密码后进行验证。登录成功后,用户可以使用商品收藏、商品购买、查看我的订单、个人信息管理等功能。
个人信息管理
用户登录系统后,在账户设置中,可以修改昵称、头像、手机号、登陆密码、收货地址等个人基本信息。
商品搜索
系统首页展示了商品搜索输入框,用户在输入框内输入与商品名称相关的关键字,系统通过模糊查询搜索到用户需要的商品并展示。
商品信息展示
用户在浏览商品时,点击某一个商品,跳转到该商品的信息展示页。在商品信息页面展示了商品的详情信息,比如商品介绍,商品详情,商品销量和收藏量等,用户通过浏览信息了解商品的主要功能和用途,最终决定是否购买。
商品购买
在商品信息页面,用户可以通过点击“购买”进行购买商品,点击后跳转到订单生成页面。订单生成页面会展示商品信息,收货地址,优惠信息等,用户确认后信息无误点击“提交”生成订单,订单生成后跳转到支付页面,支付完成则购买成功。
生成订单
用户在购买商品时,点击商品信息页面的“立即购买”或购买记录页面的“去结算”,跳转到订单生成页面,在订单生成页面用户需要确认收货地址、收货人手机号、收货人姓名等信息,确认无误后点击“提交订单”,订单提交成功,生成一条订单信息。
查看订单详情
用户在查看我的订单列表时,可以点击某一个订单来查看该订单的详细信息,主要包括订单编号、订单状态、订单日期、订单中的商品、交易金额等。订单详情还可以查看商品物流信息,用户通过能够物流信息了解所购买商品的发货状态。
商品列表
管理员可以在“商品列表”中展示商城中需要销售的商品,包含商品名称,商品属性以及类目等商品信息。管理员可以对商品进行搜索,按分类查询商品。
商品添加
添加商品首先需要输入商品基本信息,如商品名称、商品数量、商品分类等;然后需要编辑商品信息详情,如商品规格,商品描述,商品图片等。管理员也可以删除已添加的商品。
商品管理
用户在购买商品时需要选择商品规格,管理员可以设置商品规格的名称以及展示的顺序等。管理员还可以给商品规格添加属性值,也可以删除不需要的属性值。同时,管理员可以编辑商品信息,如商品介绍、商品展示图片等,方便用户浏览。
订单管理
管理员根据订单号、收货人姓名、收货地址、收货人手机号码等基本订单信息进行发货配送。
资讯管理
系统首页可以放置资讯。管理员可以添加、修改资讯的信息,如资讯名称,资讯图片,资讯链接地址等信息。
数据库
概念设计包括实体和联系两部分,如该系统中,用户是一个实体,其属性包括用户 ID 标识、用户名、密码、电话、地址等属性。联系是指实体之间有意义的关联,包括一对一、一对多、多对多三种类型。
系统E-R图如下所示。
图4-3系统E-R图
系统功能实现及截图
5.1用户登录的实现
用户注册完成后,点击“登陆”进入到登陆页面,输入用户名和密码,点击“登陆”按钮,对用户名和密码进行验证,根据传入的用户名和密码在数据库中是否能查询到一条用户信息,若不能返回用户信息则登陆失败,页面提示用户名或密码错误。
登录界面如下图所示。
图5-1登录界面
登录系统主要代码如下。
/**
* 登录
* @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, "账号或密码不正确");
}
}
5.2系统前台主要功能实现
5.2.1首页的实现
用户界面要尽量简洁大方,使用户能够方便找到需要的功能入口,浏览、购买商品,且要易于修改和维护,同时还要保证用户合法和系统安全。
首页界面如下图所示。
图5-1首页界面
首页关键代码如下。
server:
port: 5000
servlet:
context-path: /api
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/CS725260_20211101091736?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
jackson:
property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
default-property-inclusion: ALWAYS
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
5.2.2用户注册的实现
用户进入系统首页后,点击“注册”链接进入到注册页面,按照页面提示输入用户名、密码和手机号,页面进行表单验证,验证输入的用户名和手机号是否合法,表单验证通过后,点击“立即注册”按钮,利用 Ajax 技术,对用户名和手机号实现页面无刷新验证,检测数据库中是否已经存在该用户名或手机号,若数据库中不存在,则注册成功,注册成功后,自动跳转到登录页面。
用户注册界面如下所示。
图5-1用户注册界面
用户注册代码如下:
/**
* 注册
* @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;
}
5.2.3商品展示的实现
商品展示页是展示系统商品的页面,通过sql语句:“select shangpinxinximingcheng,id,tupian,jiage,addtime from shangpinxinxi order by addtime desc”,将所有是商品按商品编号降序排列。
商品展示页面,如下图所示。
图5-1商品展示页面
商品展示主要代码如下。
@RequestMapping(value = {“/sum_group”, “/sum”})
public Map<String, Object> sum(HttpServletRequest request) {
Query count = service.sum(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
5.2.4商品搜索的实现
系统首页提供了搜索商品的输入框,用户在输入框内输入想要查找商品的关键字,点击搜索按钮,系统将用户输入的关键字传递到后台。首先创建一个实体类 PageBean,该实体类的属性包括页码 pageCode、每页记录数 pageSize、总记录数 totalRecord 和一个 List 集合 beanList,利用输入的关键字对数据库进行模糊查询,将得到的结果存入 PageBean 中,返回PageBean 跳转到 goodList.java 页面,在 goodList.java 页面,使用循环将搜索到的结果分页展示。
商品搜索界面如下图所示。
图5-1商品搜索界面
5.2.5商品购买的实现
用户在浏览商品时,对于心仪的想要购买的商品,可以将该商品添加到购买记录中。点击“添加购买记录”按钮,页面将该商品的数据传递到后台,首先查询数据库购买记录表中是否已经存在该商品,若存在直接将商品数量加一,若不存在则创建一个新的购买记录对象,添加购买记录成功,数据库中的购买记录表添加一条信息。用户还可以点击“我的购买记录”查看添加到购买记录的商品,系统通过读取 session获取到用户 ID,将用户 ID 传递到后台,在购买记录表中查询该用户的所有购买记录信息,返回数据到我的购买记录页面。
商品购买界面如下图所示。
图5-1商品购买界面
个人购买记录界面如下图所示。
图5-1个人购买记录界面
5.3系统后台主要功能实现
5.3.1会员管理的实现
管理员对系统会员的管理,在yhzhgl.java实现管理员会员的管理,包括录入、删除、修改,修改密码通过SESSION获取会员名,然后输入新密码,提交到mod.java中,使用sql命令更新密码。
会员管理界面如下图所示。
图5-1会员管理界面
登录密码修改的逻辑代码如下。
/**
* 修改密码
* @param data
* @param request
* @return
*/
@PostMapping(“change_password”)
public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
// 根据Token获取UserId
String token = request.getHeader(“x-auth-token”);
Integer userId = tokenGetUserId(token);
// 根据UserId和旧密码获取用户
Map<String, String> query = new HashMap<>();
String o_password = data.get(“o_password”);
query.put(“user_id” ,String.valueOf(userId));
query.put(“password” ,service.encryption(o_password));
Query ret = service.count(query, service.readConfig(request));
List list = ret.getResultList();
Object s = list.get(0);
int count = Integer.parseInt(list.get(0).toString());
if(count > 0){
// 修改密码
Map<String,Object> form = new HashMap<>();
form.put(“password”,service.encryption(data.get(“password”)));
service.update(query,service.readConfig(request),form);
return success(1);
}
return error(10000,“密码修改失败!”);
}
5.3.2商品管理的实现
管理员可以获取系统中所有商品的列表并对其进行编辑。管理员在添加商品时,需要输入商品基本信息,如名称、价格、规格等,还需要输入商品详情描述,包括对商品功能的描述以及展示图片等。添加商品完成,数据库商品表添加一条信息。管理员可以搜索商品,同时可以对已经添加的商品进行编辑。
商品管理界面如下图所示。
图5-1商品管理界面
商品管理主要代码如下。
@SpringBootApplication
@EnableJpaRepositories
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
5.3.3订单管理的实现
管理员在后台管理界面点击到所有订单界面dingdan_list.java,向控制层dingdanAction发送请求,搜索当前所有订单信息,dingdanAction向订单数据访问层调用搜索全部订单的请求,向数据库的订单表搜索当前所有订单并将订单信息以对象的形式层层返回到dingdan_list.java界面,显示出当前所有订单信息。同时可以删除过期订单,确认已有订单,进行发货处理。
订单管理界面如下图所示。
图5-1订单管理界面
订单付款界面如下图所示。
图5-1订单付款界面
订单管理主要代码如下。
@RequestMapping(value = “/del”)
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
@Transactional
public void delete(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");
sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY))));
log.info("[{}] - 删除操作:{}",table,sql);
Query query1 = runCountSql(sql.toString());
query1.executeUpdate();
}
更多推荐



所有评论(0)