基于SSM的二手车管理系统的设计与实现 (含源码+sql+视频导入教程)

news2024/9/23 17:21:36

👉文末查看项目功能视频演示+获取源码+sql脚本+视频导入教程视频

1 、功能描述

  基于SSM的二手车管理系统4拥有三种角色

  管理员:订单管理、在售车辆管理、下架车辆管理、品牌管理、分类管理、推荐管理、统计等

  商家:登录注册、添加/下架/删除车辆、订单管理、发货等

  用户:登录注册、收货、购物车、下单购买、条件搜索等

1.1 背景描述

  基于SSM的二手车管理系统是一个基于Spring、SpringMVC和MyBatis框架的Web应用程序,旨在实现二手车交易的信息化管理。该系统包括二手车信息管理、交易流程管理、客户信息管理、支付管理等功能,可提高二手车交易的效率和安全性,降低交易成本。

2、项目技术

后端框架:SSM(Spring、SpringMVC、Mybatis)

前端技术:jsp、css、JavaScript、JQuery

2.1 SSM

  SSM(Spring+SpringMVC+MyBatis)是目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统。其中,Spring就像是整个项目中的粘合剂,负责装配bean并管理其生命周期,实现控制反转(IoC)的功能。SpringMVC负责拦截用户请求,通过DispatcherServlet将请求匹配到相应的Controller并执行。而MyBatis则是对JDBC的封装,让数据库底层操作变得透明,通过配置文件关联到各实体类的Mapper文件,实现了SQL语句映射。

2.2 mysql

  MySQL是一款Relational Database Management System,直译过来的意思就是关系型数据库管理系统,MySQL有着它独特的特点,这些特点使他成为目前最流行的RDBMS之一,MySQL想比与其他数据库如ORACLE、DB2等,它属于一款体积小、速度快的数据库,重点是它符合本次毕业设计的真实租赁环境,拥有成本低,开发源码这些特点,这也是选择它的主要原因。

3、开发环境

  • JAVA版本:JDK1.8
  • IDE类型:IDEA、Eclipse都可运行
  • tomcat版本:Tomcat 7-10版本均可
  • 数据库类型:MySql(5.5-5.7、8.x版本都可)
  • maven项目:否
  • 硬件环境:Windows

4、功能截图+视频演示+文档目录

4.1 登录

在这里插入图片描述

4.2 用户模块

用户-下单页面

用户-购物车

用户-商城

4.3 商家模块

商家-车辆管理

商家-订单管理

商家-订单详情

4.4 管理员模块

管理员-订单管理

管理员-分类管理

管理员-品牌管理

管理员-汽车推荐管理

管理员-下架车辆管理

管理员-在售车辆管理

5 、核心代码实现

5.1 配置代码

jdbc_mysql_driver=com.mysql.cj.jdbc.Driver
jdbc_mysql_url=jdbc:mysql://localhost:3306/second_hand_car_system?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
jdbc_mysql_username=root
jdbc_mysql_password=root

5.2 其它核心代码

package com.carSystem.action;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.carSystem.entity.Login;
import com.carSystem.entity.Person;
import com.carSystem.service.LoginService;
import com.carSystem.service.PersonService;
import com.google.gson.Gson;

@Controller
public class LoginAction {
	
	@Autowired
	private LoginService loginService;
	
	@Autowired
	private PersonService personService;
	
	//登录初始化页面
	@RequestMapping("/loginInitAction")
	public String loginInitAction(){
		return "login";
	}
	
	//注册
	@RequestMapping("/register")
	public String register(String passwd, String username, String tel, String login_permession, Map<String, Object> map, HttpSession session){
		if(personService.textTelExist(tel)){
			map.put("registerTelError", "对不起,您输入的手机号码已经被注册过了。");
			return "login";
		}
		
		String newId = loginService.getNewId();
		loginService.addLogin(passwd, newId, login_permession);
		personService.addPerson(username, newId, tel);
		
		Login loginInfo = loginService.getRegisterLoginEntity();
		if(loginInfo.getLogin_permission().equals("shop")){
			session.setAttribute("shoploginSession", loginInfo);
			session.setAttribute("shoploginSession_name", username);
			return "/shop/index";
		}else{
			session.setAttribute("loginSession", loginInfo);
			session.setAttribute("loginSession_name", username);
		}
		return "redirect:/indexInitAction";
	}
	
	//登录处理
	@RequestMapping("/loginAction")
	public String loginAction(Login login, Map<String, Object> map, HttpSession session){
		Login queryLogin = loginService.queryLoginById(login.getLogin_id());
		if(queryLogin == null){		//账号不存在
			map.put("loginError", "账号或密码输入错误");
			return "login";
		}else if(! queryLogin.getLogin_password().equals(login.getLogin_password()) ){	//密码错误
			System.out.println("---------error-------");
			map.put("permission", queryLogin.getLogin_permission());
			map.put("loginError1", "账号或密码输入错误");
			return "login";
		}else if(queryLogin.getLogin_permission().equals("admin")){		//管理员
			System.out.println("---------admin-------");
			session.setAttribute("adminloginSession", queryLogin);
			return "admin/index";
		}else if(queryLogin.getLogin_permission().equals("shop")){		//商家
			System.out.println("---------shop-------");
			session.setAttribute("shoploginSession", queryLogin);
			session.setAttribute("shoploginSession_name", personService.queryPersonById(queryLogin.getLogin_id()).getPerson_name());
			return "shop/index";
		}else{	//用户
			System.out.println("---------user--------");
			session.setAttribute("loginSession", queryLogin);
			session.setAttribute("loginSession_name", personService.queryPersonById(queryLogin.getLogin_id()).getPerson_name());
			return "redirect:/indexInitAction";
		}
	}
	
	//跳转到(用户或商家)主页。
	@RequestMapping("/indexInitAction")
	public String indexInit(HttpSession session, Map<String, Object> map){
		Login login =  (Login)session.getAttribute("loginSession");
		if(login != null && login.getLogin_permission().equals("user") ){
			Person person = personService.queryPersonById(login.getLogin_id());
			session.setAttribute("loginSession_name", person.getPerson_name());
			System.out.println("==========index=========" + login.getLogin_permission() + "===========");
		}
		return "/user/index";
	}
	
	
	//利用ajax确定修改后的电话号码没有被注册
	@RequestMapping("/ajaxTextIdAndTel")
	public void ajaxTextIdAndTel(HttpServletRequest request, HttpServletResponse response, String person_tel, String login_id) throws UnsupportedEncodingException{
		response.setCharacterEncoding("UTF-8");
		request.setCharacterEncoding("UTF-8");

		boolean boolReturn = true;
		
		Login login = loginService.queryLoginById(login_id);
		if(login == null){
			boolReturn = false;
		}else{
			Person person = personService.queryPersonById(login_id);
			if( !person.getPerson_tel().equals(person_tel)){
				boolReturn = false;
			}
		}
		
		String json = new Gson().toJson(boolReturn);
		try {
			response.getWriter().print(json);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	//保存用户找回的的密码
	@RequestMapping("/findSaveNewPwd")
	public String findSaveNewPwd(Map<String, Object> map,Login login, HttpSession session){
		loginService.saveLogin(login);
		
		Login loginInfo  = loginService.queryLoginById(login.getLogin_id());
		if(loginInfo.getLogin_permission().equals("shop")){
			session.setAttribute("shoploginSession", loginInfo);
		}else{
			session.setAttribute("loginSession", loginInfo);
		}
		return "redirect:/indexInitAction";
	}
	
	
	
	
}

6 、功能视频演示

基于SSM的二手车管理系统

7 、 获取方式

👇 大家点赞、收藏、关注、评论啦 👇🏻获取联系方式,后台回复关键词:二手👇🏻

请添加图片描述

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

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

相关文章

vscode搭建ros开发环境问题记录(更新...)

文章目录 vscode 不能自动补全 开发环境&#xff1a; vmware 15.7 ubuntu 20.04 ros noetic vscode 不能自动补全 这里将头文件已经正确包含到c_cpp_properties.json中代码中仍然不能自动补全&#xff0c; 将C_CPP插件设置中的Intelli Sense Engine 设置为TagParser,然后重新加…

828华为云征文 | 云服务器Flexus X实例:部署 Gitea,拥有自己的Git仓库,管理本地代码

目录 一、什么是 Gitea 二、安装 Docker 环境 2.1 更新 apt 软件源 2.2 安装依赖 2.3 安装 Docker 三、安装 Gitea 3.1 创建 docker-compose.yml 3.2 启动 Gitea 服务 3.3 初始化配置 四、运行 Gitea 4.1 登录/注册 4.2 创建仓库 五、总结 本篇文章通过部署 Gite…

【BFS专题】— 多源最短路问题

1、矩阵 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 首先创建一个dist数组&#xff0c;将dist数组初始化为-1&#xff0c;表示该位置没有被搜索和记录该位置的值然后再遍历mat数组&#xff0c;将数组中的 0 添加到队列中&#xff0c;并且修改dist对应位置的值为…

全网最全最详细的跨域解决方案

你们好&#xff0c;我是金金金。 前置知识 本篇文章以通俗易懂的方式进行描述&#xff0c;自己组织语言进行输出&#xff0c;尽量让每一个人都能看得懂。哪里有说的不正确的地方 大佬请在评论区指正&#xff01; 首先需要了解浏览器的同源策略 浏览器的同源策略 MDN解释地址&…

神经网络通俗理解学习笔记(3)注意力神经网络

Tansformer 什么是注意力机制注意力的计算键值对注意力和多头注意力自注意力机制注意力池化及代码实现Transformer模型Transformer代码实现 什么是注意力机制 注意力机制的发展史 Attention Mechanism Mnih V, Heess N, Graves A. Recurrent models of visual attention, 2014…

JVM 调优篇7 调优案例1-堆空间的优化解决

一 jvm优化 1.1 优化实施步骤* 1)减少使用全局变量和大对象&#xff1b; 2)调整新生代的大小到最合适&#xff1b; 3)设置老年代的大小为最合适&#xff1b; 4)选择合适的GC收集器&#xff1b; 1.2 关于GC优化原则 多数的Java应用不需要在服务器上进行GC优化&#xff1…

NeMo Curator 整理用于 LLM 参数高效微调的自定义数据集

目录 概述 预备知识 定义自定义文档构建器 下载数据集 解析和迭代数据集 将数据集写入 JSONL 格式 使用文档构建器加载数据集 使用现有工具统一 Unicode 格式 设计自定义数据集过滤器 编辑所有个人识别信息 添加指令提示 整合管线 概述 出于演示目的&#xff0c;本…

【PyQt6 应用程序】应用程序携带数据源文件一并打包

在开发好应用程序打包之后给到其他用户会发现数据文件比如封面图片不见了。 例如这样,很影响用户使用。 这里介绍一个非常简单的打包方法,不光要在打包命令的时候添加对应数据文件,在源码中也要进行一些简单的修改。 修改需要添加打包文件的地方。首先需要添加一个绝对路径…

143234234123432

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

【C++】c++的继承

目录 思维导图大纲&#xff1a; 1.基类和派生类 1.1 定义格式 1.2 继承方式 1.3 基类和派生类的转换 2. 继承中的作用域(隐藏关系) 2.1 考察继承作⽤域相关选择题 3. 派生类的默认成员函数 4. 继承类模板 5. 一个不能被继承的类 ​编辑 6.继承与友元 ​编辑 7. 继…

Java面向对象六大设计原则总结(超级详细,附有代码、图解以及案例)

文章目录 三.软件(面向对象)设计原则3.1 开闭原则(OSP)3.1.1 概述3.1.2 案列 3.2 里氏代换原则(LSP)3.2.1 概述3.2.2 案例 3.3 依赖倒转原则(DIP)3.3.1概述3.3.2 案例 3.4 接口隔离原则(ISP)3.4.1 概述3.4.2 案列 3.5 迪米特法则(DP)3.5.1 概述3.5.2 案例 3.6 合成复用原则(CRP…

红黑树前语

目录 概念 性质 红黑树与AVL树的比较 过两天更新红黑树的模拟实现,中秋快乐各位 概念 1. 概念&#xff1a; 是一种搜索二叉树&#xff0c; 但在每个结点上增加一个存储位表示节点的颜色&#xff0c;可以是Red 或 Black。通过对任何一条从根到叶子的路径上各个节点着色方式的…

[JVM]JVM内存划分, 类加载过程, 双亲委派模型,垃圾回收机制

文章目录 一. JVM内存划分1. 堆2. 栈3. 元数据区4. 程序计数器 二. 类加载过程1. 加载2. 验证3. 准备4. 解析5. 初始化 三. 双亲委派模型四. JVM的垃圾回收机制GC1. 找到需要回收的对象2. 释放垃圾的策略 一. JVM内存划分 JVM就是java进程 这个进程一旦跑起来, 就会从操作系统…

Windows本地制作java证书(与jeecgboot配置本地证书ssl问题)

1&#xff1a;JDK生成自签证书SSL,首先以管理员身份运行CMD窗口&#xff0c;执行命令 keytool -genkey -alias testhttps -keyalg RSA -keysize 2048 -validity 36500 -keystore "F:/ssl/testhttps.keystore"F:\ssl>keytool -genkey -alias testhttps -keyalg R…

PCIe进阶之TL:Memory, I/O, and Configuration Request Rules TPH Rules

1 Memory, I/O, and Configuration Request Rules 下述规则适用于 Memory 请求、IO 请求和配置请求。 除了公共的 header 字段外,所有 Memory 请求、IO 请求和配置请求还包括以下字段: (1)Requester ID[15:0] 和 Tag[9:0],组成了 Transaction ID 。 (2)Last DW BE[3:0]…

计算架构模式之接口高可用

接口高可用整体框架 接口高可用主要应对两类问题&#xff1a;雪崩效应和链式效应。 雪崩&#xff1a;当请求量超过系统处理能力之后&#xff0c;会导致系统性能螺旋快速下降&#xff0c;本来系统可以处理1000条&#xff0c;但是当请求量超过1200的时候&#xff0c;此时性能会下…

【415】【最高乘法得分】

目录 使用dp python版本 java版本 递推式 python版本 java版本 PS: java语法 1.定义数组 2.记忆化 3.计算max 难绷&#xff0c;本来想着4个指针&#xff0c;和四数之和那道题挺类似的。。。。 四数之和好像剪枝和预处理都是先排序的比较好做。 无奈&#xff0c;只…

[网络]https的概念及加密过程

文章目录 一. HTTPS二. https加密过程 一. HTTPS https本质上就是http的基础上增加了一个加密层, 抛开加密之后, 剩下的就是个http是一样的 s > SSL HTTPS HTTP SSL 这个过程, 涉及到密码学的几个核心概念 明文 要传输的真正意思是啥 2)密文 加密之后得到的数据 这个密文…

CTF(misc)1和0的故事

题目链接 下载题目后是一堆整齐的01字符串&#xff0c;猜测是生成二维码&#xff0c;将0变成白色方块&#xff0c;1变成黑色方块。 0000000001110010000000000 0000000000011110100000000 0000000001110001000000000 0000000010111100000000000 0000000010101010000000000 00…

Python基础语法(3)下

列表和元组 列表是什么&#xff0c;元组是什么 编程中&#xff0c;经常需要使用变量&#xff0c;来保存/表示数据。变量就是内存空间&#xff0c;用来表示或者存储数据。 如果代码中需要表示的数据个数比较少&#xff0c;我们直接创建多个变量即可。 num1 10 num2 20 num3…