基于SpringBoot+Vue钢材销售管理系统的设计与实现

news2024/9/20 3:31:59

系统介绍

为了更好地发挥本系统的技术优势,根据钢材销售管理系统的需求,本文尝试以B/S经典设计模式中的Spring Boot框架,JAVA语言为基础,通过必要的编码处理、钢材销售管理系统整体框架、功能服务多样化和有效性的高级经验和技术实现方法,旨在完成一个快速、高效、便捷的钢材销售管理系统。本系统以用户与管理员两类人,作为目标用户,其中用户主要功能包含用户的注册与登录,查询商品订单、项目选择、合同信息等,对账号相关信息的修改;管理员主要功能包括了用户、商品信息、项目报价、商品订单、项目选择、合同信息等;管理员可以实现最高权限级别的全系统管理,

系统主要技术 

开发语言:Java
 
使用框架:spring boot
 
前端技术:JavaScript、Vue 、css3
 
开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code
 
数据库:MySQL 5.7/8.0
 
数据库管理工具:phpstudy/Navicat
 
JDK版本:jdk1.8
 
Maven: apache-maven 3.8.1-bin

系统展示

一般个人用户和管理员都需要登录才能进入钢材销售管理系统,使用者登录时会在后台判断使用的权限类型,包括一般使用者和管理者,一般使用者只能对商品信息提供查阅和个别使用信息内容的查看,而管理者则能对多个信息内容提供使用。

整体系统的主要功能模块如图4-1:

5.1前台系统功能模块实现

当游客打开系统的网址后,首先看到的就是首页界面。在这里,游客能够看到钢材销售管理系统的导航条显示首页、商品信息、项目报价、公告信息、后台管理等。系统首页界面如图5-1所示:

图5-1系统首页界面

在系统首页点击注册、登录按钮,在注册、登录界面填写信息完成后,单击注册或者登录操作,如图5-2所示:

图5-2用户注册、用户登录界面

点击商品信息,用户在搜索栏输入商品编号、商品名称,进行查询,也可以查看商品编号、商品名称、商品分类、商品照片、商品价格、商品规格、库存等信息,还可以点击订单按钮或者收藏等操作,如图5-3所示。

图5-3商品信息界面图

点击项目报价,用户在搜索栏输入项目编号,进行查询,也可以查看项目编号、项目名称、项目分类、项目封面、报价、发布时间等信息,还可以点击选择按钮或者收藏等操作,如图5-4所示。

图5-4项目报价界面图

用户点击个人中心,在个人中心页面可以更新个人详细信息,还可以对我的收藏进行详细操作;如图5-5所示:

图5-5个人中心界面

5.2后台管理员功能模块实现

本模块主要是使用者可以通过钢材销售管理系统的首页进入该系统。用户输入正确的账号名和密码,一旦输入信息有错,将在系统显示错误提示,同时严禁系统用户做出其他动作。如果注册信息正确无误,系统就会按照使用者的身份信息做出有关权利的判定,用户进入系统,管理者则进入系统。管理员登录主页面如图5-6所示:

图5-6管理员登录主页面

管理员进入系统主页面,主要功能包括对系统首页、个人中心、用户管理、商品分类管理、商品信息管理、项目分类管理、项目报价管理、商品订单管理、项目选择管理、合同信息管理、系统管理等进行操作。管理员主页面如图5-7所示:

图5-7管理员主界面

管理员点击用户管理,在用户管理页面对用户账号、用户姓名、性别、用户电话、头像等信息,可以查询,新增或删除用户信息等操作。如图5-8所示:

图5-8用户管理界面

管理员点击商品分类管理,在商品分类管理页面对商品分类等信息,可以查询,新增或删除商品分类等操作。如图5-9所示:

图5-9商品分类管理界面

管理员点击商品信息管理,在商品信息管理页面对商品编号、商品名称、商品分类、商品照片、商品价格、商品规格、库存等信息,可以查询或者新增、删除商品信息等操作。如图5-10所示:

图5-10商品信息管理界面

管理员点击项目分类管理,在项目分类管理页面对项目分类等信息,可以查询或删除项目分类等操作。如图5-11所示:

图5-11项目分类管理界面

管理员点击项目报价管理,在项目报价管理页面对项目编号、项目名称、项目分类、项目封面、报价、发布时间等信息,可以查询或删除项目报价等操作。如图5-12所示:

图5-12项目报价管理界面

管理员点击商品订单管理,在商品订单管理页面对订单编号、商品名称、商品分类、商品规格、商品价格、数量、总价、订单时间、用户账号、用户姓名、是否支付等信息,可以查询或删除商品订单等操作。如图5-13所示:

图5-13商品订单管理界面

管理员点击项目选择管理,在项目选择管理页面对选择编号、项目名称、项目分类、报价、选择时间、用户账号、用户姓名、是否支付等信息,可以查询或删除项目选择等操作。如图5-14所示:

图5-14项目选择管理界面

管理员点击合同信息管理,在合同信息管理页面对合同编号、项目名称、合同文件、生效日期、有效日期、签订时间、用户账号、用户姓名等信息,可以查询或删除合同信息等操作。如图5-15所示:

图5-15合同信息管理界面

5.3后台用户功能模块实现

用户登录界面,首先双击打开系统,连上网络之后会显示出本系统的登录界面,这是进入系统的第初始页面“登录”,能成功进入到该登录界面则代表系统的开启是成功的,接下来就可以操作本系统所带有的其他所有的功能,如图5-16所示。

图5-16用户登录界面

用户登录到系统后,用户可以对系统首页、个人中心、商品订单管理、项目选择管理、合同信息管理进行相应操作,如图5-17所示:

图5-17用户功能界面

部分核心代码

/**
 * 登录相关
 */
@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("退出成功");
	}
 
	/**
	 * 修改密码
	 */
	@GetMapping(value = "/updatePassword")
	public R updatePassword(String  oldPassword, String  newPassword, HttpServletRequest request) {
		UsersEntity users = usersService.selectById((Integer)request.getSession().getAttribute("userId"));
		if(newPassword == null){
			return R.error("新密码不能为空") ;
		}
		if(!oldPassword.equals(users.getPassword())){
			return R.error("原密码输入错误");
		}
		if(newPassword.equals(users.getPassword())){
			return R.error("新密码不能和原密码一致") ;
		}
		users.setPassword(newPassword);
		usersService.updateById(users);
		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("用户已存在");
    	}
        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){
		List<UsersEntity> user = usersService.selectList(null);
		if(user.size() > 1){
			usersService.deleteBatchIds(Arrays.asList(ids));
		}else{
			return R.error("管理员最少保留一个");
		}
        return R.ok();
    }
}

 

  此源码非开源,若需要此源码可扫码添加微信或者qq:2214904953进行咨询!

2600多套项目欢迎咨询

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

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

相关文章

[数据结构与算法]-什么是二叉树?

二叉树是一种数据结构&#xff0c;由节点组成&#xff0c;每个节点最多有两个子节点&#xff0c;分别称为左子节点和右子节点。二叉树的每个节点包含一个值&#xff0c;并且左子节点的值小于等于父节点的值&#xff0c;右子节点的值大于等于父节点的值。这个性质使得二叉树在搜…

论文辅助笔记:处理geolife数据

论文笔记&#xff1a;Context-aware multi-head self-attentional neural network model fornext location prediction-CSDN博客 对应命令行里 python preprocessing/geolife.py 20 这一句 1 读取geolife数据 pfs, _ read_geolife(config["raw_geolife"], print_…

文本生成任务的评价方法BLEU 和 ROUGE

BLEU 是 2002 年提出的&#xff0c;而 ROUGE 是 2003 年提出的。这两种指标虽然存在着一些问题&#xff0c;但是仍然是比较主流的评价指标。 BLUE BLEU 的全称是 Bilingual evaluation understudy&#xff0c;BLEU 的分数取值范围是 0&#xff5e;1&#xff0c;分数越接近1&a…

Mysql The last packet sent successfully to the server was 0 milliseconds ago.

项目启动后&#xff0c;报错&#xff0c;但是我的navicat 数据库连接工具是连接上的&#xff0c;没有问题的&#xff0c;但是程序就是连接不上。端口放开了&#xff0c;防火墙也放开了 先说问题&#xff1a;是网络问题&#xff0c; 如何解决&#xff1a;因为我的机子上又跑了…

思颜肌密:匠心独蕴,传世掠影

赋予延绵岁月以华彩乐章&#xff0c;将来自时间的承诺注入生活每分每秒&#xff0c;在思颜肌密的世界里&#xff0c;恒久之美并非遥不可及&#xff0c;它是艺术&#xff0c;亦是心意。华美节日翩然而至&#xff0c;思颜肌密拉开神秘帷幕&#xff0c;在惊鸿掠影中向世人展现传世…

IO实现方式(同步阻塞、同步非阻塞、IO多路复用)

1. 同步阻塞IO 同步阻塞io在数据在数据拷贝到两个阶段都是阻塞的&#xff0c;即把socket的数据拷贝到内核缓冲区和把内核缓冲区的数据拷贝到用户态到应用程序缓冲区都是阻塞的。用户线程在这个期间不能处理其他任务。 优点&#xff1a;简单易用 缺点&#xff1a;为每一次io请…

基于Springboot+Vue的Java项目-网上超市系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

腾讯后端一面:如果需要实现一个分布式锁,你该如何实现?

更多大厂面试内容可见 -> http://11come.cn 腾讯后端一面&#xff1a;如果需要实现一个分布式锁&#xff0c;你该如何实现&#xff1f; 分布式锁 如果让你来实现一个分布式锁&#xff0c;该如何实现&#xff1f; 实现分布式锁的话&#xff0c;肯定需要一个地方去存储锁的…

Python | Leetcode Python题解之第35题搜索插入位置

题目&#xff1a; 题解&#xff1a; class Solution:def searchInsert(self, nums: List[int], target: int) -> int:left, right 0, len(nums) #采用左闭右开区间[left,right)while left < right: # 右开所以不能有,区间不存在mid left (right - left)//2 # 防止溢出…

java线程-线程池

简介 工作原理 如何获取线程池对象 构造器的参数含义 注意事项 构造器-ThreadPoolExecutor // ArrayBlockingQueue 是一个有界的阻塞队列&#xff0c;它的内部实现是一个数组。有界的意思是它的容量是有限的&#xff0c;我们必须在创建 ArrayBlockingQueue 实例的时候指定容量…

IMUGNSS的误差状态卡尔曼滤波器(ESKF)---更新过程

IMU&GNSS的误差状态卡尔曼滤波器&#xff08;ESKF&#xff09;---更新过程 ESKF的更新过程 ESKF的更新过程 前面介绍的是ESKF的运动过程&#xff0c;现在考虑更新过程。假设一个抽象的传感器能够对状态变量产生观测&#xff0c;其观测方程为抽象的h,那么可以写为 其中z为…

科研基础与工具(论文搜索)

免责申明&#xff1a; 本文内容只是学习笔记&#xff0c;不代表个人观点&#xff0c;希望各位看官自行甄别 参考文献 科研基础与工具&#xff08;YouTube&#xff09; 搜索论文 Google Scholar 谷歌学术 涵盖面太全了&#xff0c;都收录&#xff0c;就会有很多低质量的论文…

NodeRed节点编辑用于边缘计算和规则引擎,能做带UI界面和业务逻辑的上位机或前端应用吗?

先说结论&#xff0c;可以&#xff0c;但是需要有页面嵌套继承类似的技术&#xff0c;实现页面模块化封装&#xff0c;否则难以实现复杂应用。 相信目光敏锐的人都在关注节点编辑在自身行业的应用&#xff01; NodeRed在边缘计算做数据协议解析、以及物联网平台中作为规则链引…

算法训练营day13

一、SlidingWindowMaximum(滑动窗口最大值) 前置题&#xff0c;155.最小栈 参考K神155. 最小栈 - 力扣&#xff08;LeetCode&#xff09; 做完最小栈的题能更好的理解这道题 鄙人想到了开辟空间来保存最小值&#xff0c;使用的HashMap&#xff1b;K神用的是栈逻辑优化 cla…

网盘_游戏_博客自动化部署(Nginx多项目部署)

目录 一.前提介绍 二.环境介绍 三.自述&#xff08;脚本&#xff09; 四.关于Nginx多项目部署 一.前提介绍 在我之前的博客里详细介绍了上述项目的部署&#xff0c;那么如何使用简单脚本自动部署和使用Nginx多项目部署是本文来介绍的基础篇章。 二.环境介绍 CentOS Linux…

吴恩达深度学习 (week5,6)

文章目录 一、训练开发测试集二、机器学习基础三、 正则化初步介绍四、Dropout 正则化五、其他正则化方法六、归一化输入介绍七、梯度消失与梯度爆炸八、神经网络的权重初始化九、梯度数值逼近和检验十、上述学习总结第一题 划分训练/开发/测试集第二题 开发和测试集分布第三题…

gradle安装和部署

准备工作 下载地址&#xff1a;https://gradle.org/releases/ 安装和配置环境变量 将压缩包解压到/usr/local/目录下 unzip gradle-8.7-bin.zip -d /usr/local/找到gradle的安装目录/usr/local/gradle-8.7 编辑/etc/vi /etc/profileprofile配置环境变量&#xff08;这是ce…

duke liver datasets数据处理

Duke liver datasets 如果大家是做医学图像处理的&#xff0c;刚好又是做肝脏那边的&#xff0c;对这个数据集应该不会陌生 我发现网上现有的资料很少有说怎么读取这个数据集的&#xff0c;由于我之前一直都是做的nii格式的数据集&#xff0c;现在碰到了dicom格式的数据集页研…

SQLite导出数据库至sql文件

SQLite是一款实现了自包含、无服务器、零配置、事务性SQL数据库引擎的软件库。SQLite是世界上部署最广泛的SQL数据库引擎。 SQLite 是非常小的&#xff0c;是轻量级的&#xff0c;完全配置时小于 400KiB&#xff0c;省略可选功能配置时小于250KiB。 SQLite 源代码不受版权限制。…

分类神经网络3:DenseNet模型复现

目录 DenseNet网络架构 DenseNet部分实现代码 DenseNet网络架构 论文原址&#xff1a;https://arxiv.org/pdf/1608.06993.pdf 稠密连接神经网络&#xff08;DenseNet&#xff09;实质上是ResNet的进阶模型&#xff08;了解ResNet模型请点击&#xff09;&#xff0c;二者均是…