基于java springboot+vue+element ui等实现的图书购物商场系统详细设计实现

·  阅读 1899
基于java springboot+vue+element ui等实现的图书购物商场系统详细设计实现

前言介绍:

       随着信息技术的不断发展,我们现在已经步入了信息化的时代了,而信息时代的代表便是网络技术的日渐成熟,而现在网络已经和我们的生活紧密的联系起来了,我们不敢想象没有网络我们的生活会像怎么样,也许就像食物中没有调料现在的生活离开了网络会变得索然无味。通过网络我们可以足不出户的做许多事情,例如图书、工作、娱乐、学习,购物、交友和购物等等许多我们数之不尽的事情,而就是因为网络我们的生活变得多姿多彩,或许有时甚至帮我们省下不少的时间和给予了我们更多的机遇。图书商城网站对我们来说就有这些意义。图书网站商城主要是一些企业为了不流失因为某种原因而没有到商店店里选购商品的图书商品客人而设计的一个通过 Internet 就能进行方便购物的系统,图书商城网站的诞生为商家们提供了很多的机遇。另外一个原因是现在网上购物对图书商品人们生活和工作中所产生的压力是很有用的,所以现在网购的需求量在不断的提升,然而有很大一部分人还是没有时间去选购自己喜欢的图书商品, 所以图书商城网站应运而生。在图书商城网站诞生之后,用户可以在空余的时间通过互联网来查看大量品种的家具商品信息,从而很方便地购买到自己心仪的图书之类的、在另外一方面就是提高了图书商家的销售额。总的来说,图书商城网站既满足了很多人的需要,也不会影响到工作或者浪费了休息的时间,它是一个很有意义的系统

完整地址:2022Java毕业设计项目:图书购物商城系统(java+springboot+vue实现)-寒假了快卷起来

功能截图:

用户登录:分为管理员和普通用户进行登录、也可以在这里进行用户注册。 

​ 录入相关用户信息进行用户注册。

前端用户首页:用户登录后、可以查看新上架的书籍和新闻等书籍、点击进入详情查看购买书籍、加入购物车以及对自己感兴趣的图书书籍收藏等操作和查看修改个人信息等。

 管理员首页:图书商城系统管理员登录后主要有如下功能模块:用户个人信息管理、修改密码、图书分类管理、图书商品详情管理、首页轮播图管理、新闻资讯管理、书籍列表管理、订单信息管理和发货信息管理等。

 书籍分类管理:

新闻资讯管理:

​  添加和修改:

 书籍列表管理:管理员可以添加、修改、删除和查询书籍列表信息

 书籍详情:

订单管理:管理员可以查看订单信息、对订单状态进行修改、以及发货状态等操作 。 

发货信息管理:  

 前端书籍详情页:

 书籍详情页:查看书籍详情信息、可以加入购物车和收藏等查看、也可以查看用户评论信息等

 填写购物车信息等。

我的个人中心:

工具语言:

 开发工具:IDEA 2021.3、navicat for mysql 、postman。

开发语言:java、jdk1.8、mysql5、node.js 14。

硬件环境:Windows 10操作系统、Google浏览器等。

主要技术:springboot、mybatis-plus、vue、element UI、mysql等

关键代码:


package com.controller;

/**
 * 登录相关
 */
@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);
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

复制代码

拦截配置:

package com.config;


@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport{
	
	@Bean
    public AuthorizationInterceptor getAuthorizationInterceptor() {
        return new AuthorizationInterceptor();
    }

	@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/static/**");
		registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/upload/**");
//		registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/virtuel/**");

		super.addInterceptors(registry);
	}
	
	/**
	 * springboot 2.0配置WebMvcConfigurationSupport之后,会导致默认配置被覆盖,要访问静态资源需要重写addResourceHandlers方法
	 */
	@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/**")
        .addResourceLocations("classpath:/resources/")
        .addResourceLocations("classpath:/static/")
		.addResourceLocations("classpath:/upload/")
		.addResourceLocations("classpath:/admin/")
        .addResourceLocations("classpath:/front/")
        .addResourceLocations("classpath:/public/");
		registry.addResourceHandler("/upload/**").addResourceLocations("file:D:/work/");
		super.addResourceHandlers(registry);
    }
}

复制代码

全局yml配置

# Tomcat
server:
    tomcat:
        uri-encoding: UTF-8
    port: 8080
    servlet:
        context-path: /springbootUCW7v

spring:
    datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/springbootUCW7v?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
        username: root
        password: 123456
    servlet:
      multipart:
        max-file-size: 10MB
        max-request-size: 10MB
    resources:
      static-locations: classpath:/testStatic/,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

#mybatis
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.entity
  global-config:
    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 1
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 2
    #驼峰下划线转换
    db-column-underline: true
    #刷新mapper 调试神器
    refresh-mapper: true
    #逻辑删除配置
    logic-delete-value: -1
    logic-not-delete-value: 0
    #自定义SQL注入器
    sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    call-setters-on-nulls: true
    #springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)
    jdbc-type-for-null: 'null' 


#文件虚拟路径
virtuel:
  filePath: C:/Users/Administrator/Desktop/lyy/
复制代码

数据库设计:

**数据库名: **springboot-book

**文档版本: **V1.0.0

**文档描述: **图书商城系统数据库表设计描述

表config (配置文件)

编号名称数据类型长度小数位允许空值主键说明
1idbigint200NY
2namevarchar1000NN配置参数名称
3valuevarchar1000YN配置参数值

表dingdanxinxi (订单信息)

编号名称数据类型长度小数位允许空值主键说明
1idbigint200NY
2addtimetimestamp190NN
3dingdanbianhaovarchar2000YN订单编号
4shujimingchengvarchar2000YN书籍名称
5fenleivarchar2000YN分类
6fengmianvarchar2000YN封面
7jiagevarchar2000YN价格
8shuliangint100YN数量
9zongjiagevarchar2000YN总价格
10xiadanriqidate100YN下单日期
11beizhuvarchar2000YN备注
12yonghumingvarchar2000YN用户名
13shoujivarchar2000YN手机
14dizhivarchar2000YN地址
15ispayvarchar2000YN是否支付

表discussshuji (书籍评论表)

编号名称数据类型长度小数位允许空值主键说明
1idbigint200NY
2addtimetimestamp190NN
3refidbigint200NN关联表id
4contentvarchar2000NN评论内容
5useridbigint200NN用户id

表fahuoxinxi (发货信息)

编号名称数据类型长度小数位允许空值主键说明
1idbigint200NY
2addtimetimestamp190NN
3dingdanbianhaovarchar2000YN订单编号
4shujimingchengvarchar2000YN书籍名称
5fengmianvarchar2000YN封面
6shuliangvarchar2000YN数量
7fahuoriqidate100YN发货日期
8yonghumingvarchar2000YN用户名
9shoujivarchar2000YN手机
10dizhivarchar2000YN地址
11dingdanzhuangtaivarchar2000NN订单状态

表news (新闻资讯)

编号名称数据类型长度小数位允许空值主键默认值说明
1idbigint200NY
2addtimetimestamp190NNCURRENT_TIMESTAMP
3titlevarchar2000NN标题
4picturevarchar2000NN图片
5contentlongtext21474836470NN内容

表shuji (书籍)

编号名称数据类型长度小数位允许空值主键
1idbigint200NY
2addtimetimestamp190NN
3shujibianhaovarchar2000YN
4shujimingchengvarchar2000NN
5fenleivarchar2000NN
6fengmianvarchar2000YN
7zuozhevarchar2000YN
8chubanshevarchar2000YN
9jiageint100YN
10shuliangint100YN
11shujijieshaolongtext21474836470YN
12clicktimedatetime190YN
13clicknumint100YN

表shujifenlei (书籍分类)

编号名称数据类型长度小数位允许空值主键说明
1idbigint200NY
2addtimetimestamp190NN
3fenleivarchar2000NN分类

表storeup (收藏表)

编号名称数据类型长度小数位允许空值主键说明
1idbigint200NY
2addtimetimestamp190NN
3useridbigint200NN用户id
4refidbigint200YN收藏id
5tablenamevarchar2000YN表名
6namevarchar2000NN收藏名称
7picturevarchar2000NN收藏图片

表token (token表)

编号名称数据类型长度小数位允许空值主键说明
1idbigint200NY
2useridbigint200NN用户id
3usernamevarchar1000NN用户名
4tablenamevarchar1000YN表名
5rolevarchar1000YN角色
6tokenvarchar2000NN密码
7addtimetimestamp190NN新增时间
8expiratedtimetimestamp190NN过期时间

表users (用户表)

编号名称数据类型长度小数位允许空值主键说明
1idbigint200NY
2usernamevarchar1000NN用户名
3passwordvarchar1000NN密码
4rolevarchar1000YN角色
5addtimetimestamp190NN新增时间

表yonghu (用户)

编号名称数据类型长度小数位允许空值主键说明
1idbigint200NY
2addtimetimestamp190NN
3yonghumingvarchar2000NN用户名
4mimavarchar2000NN密码
5xingmingvarchar2000NN姓名
6xingbievarchar2000YN性别
7touxiangvarchar2000YN头像
8shoujivarchar2000YN手机
9dizhivarchar2000YN地址

项目总结:

  经过近期对 java 面向对象程序设计、前端知识以及JAVA 框架的掌握和学习,以及这段时间本图书商品网站系统的开发,让我更加了解到 java 学习的重要性。在开发这个系统是哪个,我完成了多个实验以及教育系统的功能测试,在这个阶段的系统开发学习当中,我从认识到熟悉java,而后到能够自主运用相关技术。通过对 java 相关技术的了解和学习,我发现了它确实有很多方便之处,比如java集抽象性和封装性以及继承性和多态性于一体,实现了对代码重用和代码扩充功能,提高了整体软件开发的速度和效率。对于我们计算机这个专业来说学好 java 语言是很重要的一部分,所以在开发这个教学管理系统项目的过程中我都尽力理解 java 编程思想、掌握基本技巧,常见的方法和对错误的解决能力、尽量学到最多的知识。 我学习程序设计的主要目的就是提高自己实际问题的程序解决方案的关键技能和技术, java 面向对象程序设计是一科实践性相对来说非常比较强的语言了、springMVC框架的MVC三层架构模式、和框架中遇到的设计模式将数据访问和逻辑操作都集中到组件里面去了 , 增强了系统的复用性和扩展性。使系统的扩展性大大增强。以及前端jQuery、js、jsp、css样式的掌握让我对网页的布局、样式调整、字体等让网页效果实现的更加精准。

源码获取:

大家点赞、收藏、关注、评论啦 、感兴趣的和我交流吧

打卡 文章 更新 136/  365天

分类:
后端
分类:
后端
收藏成功!
已添加到「」, 点击更改