Java基于springboot+vue+element医疗用品销售购物商城系统 前后端分离

news2024/9/21 13:39:09

开发背景和意义

网络购物己经成为一个常态化的消费手段,足不出户即可享受互联网发展的红利,对于购物商城的应用,普通消费者目前普遍使用。医疗用品作为一个大众消费的商品,由于其健康的特点,也越来越为大家喜欢,本系统是一个垂直电商平台,主要针对医疗用品实现在线销售,也可以通过后台发布商品改成其它的电商购物平台。 本系统主要基于Springboot框架开发实现,实现了一个以医疗用品为主题的商城系统。在本商城系统中,可以实现在线购买医疗用品,在线支付,管理个人订单,管理个人收货地址,确认收货等功能。用户浏览商城的医疗用品产品后可以将医疗用品商品添加到购物车中,然后下单支付购买。用户登陆后可以在个人中心中管理自己的购物车信息、订单信息、收货地址信息等。同样在商城前端页面中提供了全文搜索功能,用户可以根据医疗用品的相关功效或禁忌来查询符合自己要的医疗用品商品。

请添加图片描述

环境需要

1.运行环境:最好是java jdk 1.8,这是目前最稳定的JDK也是被使用最多的JDK版本。
2.IDE环境:IDEA,Eclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat7/Tomcat8/Tomcat9版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 5.7版本;
6.是否Maven项目:是;
技术栈
后端:Spring+SpringMVC+Mybatis+Springboot
前端:vue+CSS+JavaScript+jQuery+elementui
请添加图片描述

功能介绍

系统主要分为三个模块:用户模块,管理员模块,商品管理模块。
用户模块主要实现以下功能:
1 用户的注册和登录。
2 个人信息界面:用户查看与修改个人信息。
3 查看商品信息浏览商品:包括网站首页、体育用品详情页等。
4 购物车管理:将商品加入购物车、对购物车里的商品进行数量的增加和减少、删除商品、对选中的商品进行结算。
5 购买界面:确认订单信息和选择支付方式。
6 订单信息:查看订单信息、修改订单和取消订单、订单的状态待付款、待发货、待收货、待评价等。
管理员管理模块主要实现以下功能:
管理员可以进行管理员帐号管理、用户信息管理、商品管理、订单处理、缺货处理等功能。
7 管理员信息模块:管理员的登录、新增管理员、查询管理员信息、删除管理员、修改管理员信息。
8 管理用户信息:用户的账号密码等。
9 订单处理:审核订单信息、删除订单客户取消订单的情况下、修改订单信息客户对订单的信息进行了修改和安排发货等。
商品管理模块:
10 商品的增加:商品名称、商品图片、商品类型等
11 删除商品商品下架。
12 修改商品信息:修改商品的价格、类型、状态等。
13 查找商品:查看商品基本信息、库存情况、销售情况等。
16 对商品进行分类管理
请添加图片描述
管理员登录进入医疗用品销售商城可以查看首页、个人中心、用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理等信息。
个人中心,在个人中心页面中可以通过填写原密码、新密码、确认密码等信息进行添加、修改,如图5-2所示。还可以根据需要对个人信息进行添加,修改或删除等详细操作

请添加图片描述
用户管理,在用户管理页面中可以查看用户名、姓名、性别、头像、联系电话等信息,并可根据需要对用户管理进行详情、修改或删除等操作,如图
请添加图片描述
商品信息管理,在商品信息管理页面中可以查看商品名称、商品分类、图片、品牌、规格、价格等内容,并且根据需要对商品信息管理进行详情,修改或删除等详细操作
请添加图片描述


/**
 * 登录相关
 */
@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();
    }
}

请添加图片描述
目录
1 绪论 1
1.1课题背景 1
1.2课题研究现状 1
1.3初步设计方法与实施方案 2
1.4本文研究内容 2
2 系统开发环境 4
2.1 使用工具简介 4
2.2 环境配置 4
2.3 B/S结构简介 4
2.4 MySQL数据库 5
2.5 框架介绍 5
3 系统分析 6
3.1系统可行性分析 6
3.1.1经济可行性 6
3.1.2技术可行性 6
3.1.3运行可行性 6
3.2系统现状分析 6
3.3功能需求分析 7
3.4系统设计规则与运行环境 8
3.5系统流程分析 8
3.5.1操作流程 8
3.5.2添加信息流程 9
3.5.3删除信息流程 10
4 系统设计 11
4.1系统设计主要功能 11
4.2数据库设计 11
4.2.1数据库设计规范 11
4.2.2 E/R图 11
4.2.3数据表 12
5 系统实现 25
5.1系统功能模块 25
5.2后台模块 27
5.2.1管理员功能模块 27
5.2.2用户功能模块 30
6 系统测试 33
6.1功能测试 33
6.2可用性测试 33
6.3性能测试 34
6.4测试结果分析 34
7结 论 35
参考文献 36
致 谢 37

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/60084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TypeScript 知识点总结

对于有着强制类型语言经验的开发来讲&#xff0c;刚开始接触 JavaScript 的时候&#xff0c;大多都有一种 “心如芒刺&#xff0c;如鲠在喉” 的感觉。 从最初的好感 -——开放包容&#xff0c;到后来的厌恶之情——放荡不羁 TypeScript 犹如黑暗之中的一缕阳光&#xff0c;拯救…

【单片机基础】ADC0832详解

文章目录一、ADC0832介绍1、功能特点2、引脚说明3、ADC0832与单片机接口4、工作时序二、例程一、ADC0832介绍 ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小&#xff0c;兼容性&#xff0c;性价比高而深受单片机爱好者及企业欢迎&#x…

Java_笔记_static_静态变量方法工具类_main方法

static表示静态&#xff0c;是Java中的一个修饰符&#xff0c;可以修饰成员方法和成员变量。 一、静态变量: 被static修饰的成员变量 1.特点&#xff1a; 1&#xff09;被该类所有的对象共享。 2&#xff09;不属于对象&#xff0c;属于类。 3&#xff09;随着类的加载而加载…

(个人记录)Ensight后处理EDEM学习笔记

①EDEM计算完毕 ②左上角,点击输出data 先点击一下 然后再把EXPORT FORMAT改为ensight的格式 file name选择要保存到的文件夹,保存格式为.case文件 设置保存的时间步 填入“10”的意思是0.01*10=0.1,在ensight中以0.1的时间步展示结果 点击queries 在ensight里只能…

七段显示译码器

我们会把它放在系统中来显示多位&#xff0c;很多位的表达会用到小数点 12.34 我只想显示&#xff0c;我现实系统的数字大小有一个范围&#xff0c;比如整数四位&#xff0c;小数四位 我显示12.34 就意味着首先两位就是空着&#xff0c;最后两位也是空着 这几位从输入的数字…

Android 基础知识4-1 用户界面简介VIewGroup、Onclick事件处理

引言&#xff1a; 一个好的应用界面的必备条件是&#xff1a;内容清楚、指示明白、屏幕美观和有亲切感。界面通常包含图形和文字。应用界面的设计是对控件进行适当的取舍及功能的选择和处理的过程。在程序设计中&#xff0c;需要对设计的方法反复推敲、琢磨&#xff0c;才能使其…

spfa算法判断负环【什么是负环】【出现负环会怎么样】【牢记,此时不是求最短路】

欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09; 文章字体风格&#xff1a; 红色文字表示&#xff1a;重难点 蓝色文字表示&#xff1a;思…

【推荐题目】

一&#xff0c;题目 1. 猪队友&#xff08;pigmate.cpp&#xff09; 【问题描述】 "不怕神一样的对手&#xff0c;就怕猪一样的队友"&#xff0c;这不&#xff0c;小A需要将小B写的 n 张不同的明信片 放到一一对应的 n 个不同的信封中去&#xff0c;可是不管你信不…

代码不到200行!Tkinter上课点名程序来了

前言 今天给大家分享一个比较有意思的Python应用&#xff0c;使用Tkinter开发了一款上课点名程序&#xff0c;此程序可以用于点名、抽奖代码不到200行&#xff0c;程序简单又实用&#xff0c;分享给到大家&#xff5e; 开发工具 Python版本&#xff1a; 3.8 相关模块&#xff1…

I2C、SPI、CAN、PCIe 对比

唯一标识 在社会上&#xff0c;靠身份证号&#xff0c;来唯一标识一个人。 在计算机的世界里&#xff0c;通过什么来唯一标识一个外设呢&#xff1f;方案还不止一种 I2C 使用地址&#xff08;7 或 10 位&#xff09;来唯一标识一个外设 SPI 使用 CS 引脚来唯一确定通信的外设…

0.安装和配置

我们不要怕&#xff0c;我们要一直向前&#xff0c;为了我们的目标。 对应关系是: https://www.rabbitmq.com/which-erlang.html 安装 Erlang https://www.erlang.org/downloads 选中 64 位 进行下载 下载后&#xff0c;双击 进行安装 选择 安装的路径 路径为&#xff1a; …

[附源码]计算机毕业设计校园招聘系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Android深色主题背景的实现及主题背景颜色互换

layout: post title: Android深色主题背景的实现及主题背景颜色互换 date: 2-12-03 21:52:38 发布 author: ‘zhangtao’ header-img: ‘img/post-bg-2015.jpg’ catalog: false tags: -android -android studio -ide 目录 深色主题背景的优势&#xff1a; 如何实现Android的…

MySQL进阶

文章目录数据库约束NULL约束UNIQUE&#xff1a;唯一约束DEFAULT&#xff1a;默认值约束PRIMARY KEY&#xff1a;主键约束FOREIGN KEY&#xff1a;外键约束表的设计——一对一、一对多、多对多增删改查进阶聚合函数Group by分组having:分组后的条件过滤联合查询内连接外连接自连…

【 第六章 事务操作、事务四大特性、并发事务问题、事务隔离级别】

第六章 事务操作、事务四大特性、并发事务问题、事务隔离级别 1.事务简介&#xff1a; ①事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0…

Kafka - 13 Java 客户端实现消费者消费消息

文章目录1. 独立消费者案例&#xff08;订阅主题&#xff09;2. 独立消费者案例&#xff08;订阅分区&#xff09;3. 消费者组案例1. 独立消费者案例&#xff08;订阅主题&#xff09; 需求&#xff1a;创建一个独立消费者&#xff0c;消费主题中数据&#xff1a; [roothadoo…

Linux系统移植三:移植Kernel生成zImage和dtb文件

Linux系统移植系列 Linux系统移植一&#xff1a;移植U-BOOT 添加自己的板子并编译&#xff08;非petalinux版&#xff09; Linux系统移植二&#xff1a;生成fsbl引导文件并制作BOOT.bin 下载源码包 Xilinx官方linux源码包下载地址&#xff1a;https://github.com/Xilinx/lin…

linux+window+macos下的JDK安装

1. Linux中安装JDK &#xff08;1&#xff09;下载Linux版本的jdk压缩包 &#xff08;2&#xff09;解压 tar -zxvf 压缩包名 例如&#xff1a; tar -zxvf jdk-8u251-linux-x64.tar.gz&#xff08;3&#xff09;在系统配置文件配置java 编辑profile配置文件 vim /etc/prof…

JVM Metaspace内存溢出问题

更多内容&#xff0c;前往 IT-BLOG 一、现象 x项目线上环境因为jvm报OOM的异常而报警,导致整个服务不可用并被拉出集群,现象如下: 当时的解决方案是增加metaspace的容量: -XX:MaxMetaspaceSize512m, 从原来默认的256m改为512m, 虽然没有再出现oom,但这个只是临时解决方案,通过…

MyBatis ---- 动态SQL

MyBatis ---- 动态SQL1. if2. where3. trim4. choose、when、otherwise5. foreach6. SQL片段MyBatis 框架的动态 SQL 技术是一种根据特定条件动态拼接 SQL 语句的功能&#xff0c;它存在的意义是为了解决拼接 SQL 语句字符串时的痛点问题。 1. if /*** 根据条件查询员工信息if…