博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈
⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到🔎百套Python实战项目持续更新中~
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要开题模板的可以私信留言告诉我❤️文末获取源码联系❤️ ⚠️一定要先收藏⚠️
4.2 系统总功能结构设计
系统按照用户的实际需求开发而来,贴近生活。从管理员通过正确的账号的密码进入系统,可以使用相关的系统应用。管理员总体负责整体系统的运行维护,统筹协调。
系统整体模块设计:系统分为管理员和用户两大角色,系统管理员有最大的权限,总体功能展示如图4-5所示。
图4-5 系统总体功能图
4.3开发流程设计
系统开发流程的分析是一个至关重要的过程,它是指通过系统的设计开发目的初衷、面向使用用户的范围、系统运行和操作的安全性、各种问题的处理以及后台数据的分析能力等各个角度,来对在线汽车销售平台进行设计、开发、搭建和调节,以保证该系统能够顺利的完成,达到预期的工作状态。上述每个环节、每个步骤一开始就要下足功夫,从各个方面、各个角度进行调查研究,进行大量的测试和评估,来保证在线汽车销售平台的正常和该系统的后台数据库的完整性以及安全性,从而把控系统所包含信息的安全性、确保信息进入、出口顺利过渡。然后,对系统和数据进行操作和分析,根据每一步的执行步骤,完成信息的流程图制作过程。
系统的开发对管理模型和系统应用中的数据库进行了分类,创建代码,以及系统测试,如图4-6所显示。
图4-6开发系统流程图
4.4 数据库设计原则
学习程序设计,如果要了解数据库管理系统或者是根据需求而制定的系统接口,就必须创建一种数据库管理系统的模式,用来保存数据资料,这样当在应用编程过程中时候,就不需要再向操作系统页面上加载信息,进而增加了整个系统的工作效率。信息库管理系统中保存着许多数据,应该说是一个管理信息系统建设的中心和基础,而信息库管理系统也为管理信息系统建设提出了新增、删除、更改和搜索的操作功能,使管理信息系统建设能够迅速地查询所需要的数据,而不会直接从程序代码中查找。信息库管理系统通过将信息表的各个组成部分按照特定的方法准确地合并,排序和组成信息库管理系统。
4.5 数据表
把按照数据库理念建立的E-R图,转换为国际关系信息库。在关联数据库中,统计关联主要由统计表所构成,但是表的构成主要体现在表格的数文字段上。如下表所示。
表4-1:用户表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
username | varchar | 100 | 用户名 | ||
password | varchar | 100 | 密码 | ||
image | varchar | 200 | 头像 | ||
role | varchar | 100 | 角色 | 管理员 | |
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP |
序号 | 列名 | 数据类型 | 长度 | 是否为空 | 默认值 | 小数位 | 说明 |
1 | id | bigint(20) | NO | 0 | 主键 | ||
2 | addtime | timestamp | NO | CURRENT_TIMESTAMP | 创建时间 | ||
3 | tablename | varchar(200) | 200 | YES | qicheshangpin | 商品表名 | |
4 | userid | bigint(20) | NO | 0 | 用户id | ||
5 | goodid | bigint(20) | NO | 0 | 商品id | ||
6 | goodname | varchar(200) | 200 | YES | 商品名称 | ||
7 | picture | varchar(200) | 200 | YES | 图片 | ||
8 | buynumber | int(11) | NO | 0 | 购买数量 | ||
9 | price | float | YES | 单价 | |||
10 | discountprice | float | YES | 会员价 | |||
11 | goodtype | varchar(200) | 200 | YES | 商品类型 |
表4-2:购物车
表4-3:token表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
userid | bigint | 用户id | |||
username | varchar | 100 | 用户名 | ||
tablename | varchar | 100 | 表名 | ||
role | varchar | 100 | 角色 | ||
token | varchar | 200 | 密码 | ||
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP | ||
expiratedtime | timestamp | 过期时间 | CURRENT_TIMESTAMP |
表4-4:汽车商品
序号 | 列名 | 数据类型 | 长度 | 是否为空 | 默认值 | 小数位 | 说明 |
1 | id | bigint(20) | NO | 0 | 主键 | ||
2 | addtime | timestamp | NO | CURRENT_TIMESTAMP | 创建时间 | ||
3 | qichemingcheng | varchar(200) | 200 | NO | 汽车名称 | ||
4 | qichepinpai | varchar(200) | 200 | NO | 汽车品牌 | ||
5 | qichexinghao | varchar(200) | 200 | YES | 汽车型号 | ||
6 | qichetupian | varchar(200) | 200 | YES | 汽车图片 | ||
7 | qichefenlei | varchar(200) | 200 | NO | 汽车分类 | ||
8 | zixundianhua | varchar(200) | 200 | YES | 咨询电话 | ||
9 | xuanchuanshipin | varchar(200) | 200 | YES | 宣传视频 | ||
10 | peizhijieshao | longtext | 4294967295 | YES | 配置介绍 | ||
11 | shangshiriqi | date | YES | 上市日期 | |||
12 | clicktime | datetime | YES | 最近点击时间 | |||
13 | price | float | YES | 价格 |
表4-5:收藏表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
userid | bigint | 用户id | |||
refid | bigint | 商品id | |||
tablename | varchar | 200 | 表名 | ||
name | varchar | 200 | 名称 | ||
picture | longtext | 4294967295 | 图片 | ||
type | varchar | 200 | 类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注) | 1 | |
inteltype | varchar | 200 | 推荐类型 | ||
remark | varchar | 200 | 备注 |
表4-6:预约试驾
序号 | 列名 | 数据类型 | 长度 | 是否为空 | 默认值 | 小数位 | 说明 |
1 | id | bigint(20) | NO | 0 | 主键 | ||
2 | addtime | timestamp | NO | CURRENT_TIMESTAMP | 创建时间 | ||
3 | qichemingcheng | varchar(200) | 200 | YES | 汽车名称 | ||
4 | qichetupian | varchar(200) | 200 | YES | 汽车图片 | ||
5 | yuyueshijian | datetime | NO | 预约时间 | |||
6 | yuyueneirong | varchar(200) | 200 | YES | |||
7 | yonghuming | varchar(200) | 200 | YES | |||
8 | shouji | varchar(200) | 200 | YES | |||
9 | sfsh | varchar(200) | 200 | YES | 否 | 是否审核 | |
10 | shhf | longtext | 4294967295 | YES | 审核回复 |
表4-7:订单表
序号 | 列名 | 数据类型 | 长度 | 是否为空 | 默认值 | 小数位 | 说明 |
1 | id | bigint(20) | NO | 0 | 主键 | ||
2 | addtime | timestamp | NO | CURRENT_TIMESTAMP | 创建时间 | ||
3 | orderid | varchar(200) | 200 | NO | 订单编号 | ||
4 | tablename | varchar(200) | 200 | YES | qicheshangpin | 商品表名 | |
5 | userid | bigint(20) | NO | 0 | 用户id | ||
6 | goodid | bigint(20) | NO | 0 | 商品id | ||
7 | goodname | varchar(200) | 200 | YES | 商品名称 | ||
8 | picture | varchar(200) | 200 | YES | 商品图片 | ||
9 | buynumber | int(11) | NO | 0 | 购买数量 | ||
10 | price | float | NO | 0 | 价格 | ||
11 | discountprice | float | YES | 0 | 折扣价格 | ||
12 | total | float | NO | 0 | 总价格 | ||
13 | discounttotal | float | YES | 0 | 折扣总价格 | ||
14 | type | int(11) | YES | 1 | 0 | 支付类型 | |
15 | status | varchar(200) | 200 | YES | 状态 | ||
16 | address | varchar(200) | 200 | YES | 地址 | ||
17 | tel | varchar(200) | 200 | YES | 电话 | ||
18 | consignee | varchar(200) | 200 | YES | 收货人 | ||
19 | remark | varchar(200) | 200 | YES | 备注 | ||
20 | logistics | longtext | 4294967295 | YES | 物流 | ||
21 | goodtype | varchar(200) | 200 | YES | 商品类型 |
表4-8:地址表
序号 | 列名 | 数据类型 | 长度 | 是否为空 | 默认值 | 小数位 | 说明 |
1 | id | bigint(20) | NO | 0 | 主键 | ||
2 | addtime | timestamp | NO | CURRENT_TIMESTAMP | 创建时间 | ||
3 | userid | bigint(20) | NO | 0 | 用户id | ||
4 | address | varchar(200) | 200 | NO | 地址 | ||
5 | name | varchar(200) | 200 | NO | 收货人 | ||
6 | phone | varchar(200) | 200 | NO | 电话 | ||
7 | isdefault | varchar(200) | 200 | NO | 是否默认地址[是/否] |
序号 | 列名 | 数据类型 | 长度 | 是否为空 | 默认值 | 小数位 | 说明 |
1 | id | bigint(20) | NO | 0 | 主键 | ||
2 | addtime | timestamp | NO | CURRENT_TIMESTAMP | 创建时间 | ||
3 | title | varchar(200) | 200 | NO | 标题 | ||
4 | introduction | longtext | 4294967295 | YES | 简介 | ||
5 | picture | varchar(200) | 200 | NO | 图片 | ||
6 | content | longtext | 4294967295 | NO | 内容 |
表4-9:公告信息
表4-10:汽车评论表
序号 | 列名 | 数据类型 | 长度 | 是否为空 | 默认值 | 小数位 | 说明 |
1 | id | bigint(20) | NO | 0 | 主键 | ||
2 | addtime | timestamp | NO | CURRENT_TIMESTAMP | 创建时间 | ||
3 | refid | bigint(20) | NO | 0 | 关联表id | ||
4 | userid | bigint(20) | NO | 0 | 用户id | ||
5 | nickname | varchar(200) | 200 | YES | 用户名 | ||
6 | content | longtext | 4294967295 | NO | 评论内容 | ||
7 | reply | longtext | 4294967295 | YES | 回复内容 |
序号 | 列名 | 数据类型 | 长度 | 是否为空 | 默认值 | 小数位 | 说明 |
1 | id | bigint(20) | NO | 0 | 主键 | ||
2 | addtime | timestamp | NO | CURRENT_TIMESTAMP | 创建时间 | ||
3 | qichepinpai | varchar(200) | 200 | NO | 汽车品牌 |
表4-11:汽车品牌
表4-12:车辆分类
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
cheliangfenlei | varchar | 200 | 车辆分类 |
表4-13:用户表
序号 | 列名 | 数据类型 | 长度 | 是否为空 | 默认值 | 小数位 | 说明 |
1 | id | bigint(20) | NO | 0 | 主键 | ||
2 | addtime | timestamp | NO | CURRENT_TIMESTAMP | 创建时间 | ||
3 | yonghuming | varchar(200) | 200 | NO | 用户名 | ||
4 | mima | varchar(200) | 200 | NO | 密码 | ||
5 | xingming | varchar(200) | 200 | NO | 姓名 | ||
6 | xingbie | varchar(200) | 200 | YES | 性别 | ||
7 | touxiang | varchar(200) | 200 | YES | 头像 | ||
8 | shouji | varchar(200) | 200 | NO | 手机 | ||
9 | shenfenzheng | varchar(200) | 200 | NO | 身份证 | ||
10 | money | float | YES | 0 | 余额 |
表4-14:在线客服
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
userid | bigint | 用户id | |||
adminid | bigint | 管理员id | |||
ask | longtext | 4294967295 | 提问 | ||
reply | longtext | 4294967295 | 回复 | ||
isreply | int | 是否回复 |
5 系统详细设计
5.1前台系统模块实现
用户登录系统可以查看在线汽车销售平台的导航条显示首页、汽车商品、公告信息、个人中心、后台管理、购物车、客服咨询,系统首页界面如图5-1所示:
图5-1 系统首页界面
当用户进入系统进行相关操作前必须进行输入个人信息进行注册操作,注册成功后通过输入账号和密码,并点击登录进行系统登录操作。界面如图5-2所示:
图5-2 用户注册界面
图5-3 用户登录界面
用户点击汽车商品,在页面的输入栏中填写车型、品牌、名称,进行查询。如图5-4所示:
图5-4 新车上架界面
通过点击车辆图片进入到车辆详细介绍信息界面,可以查看到车辆价格,品牌分类,型号,上市日期,咨询电话、详细介绍等详细信息,可以对该信息进行添加到购物车,立即购买,预约试驾的操作。如图5-5所示:
图5-5 车辆详情页面
用户点击预约试驾:在预约试驾页面中选择预约的时间,然后点击确定即可预约,如图5-6所示:
图5-6预约填写页面
用户点击客服咨询可以输入内容进行咨询,管理员可以在后台进行查看并回复,达到用户和管理员交流的效果,如图5-7所示:
图5-7在线咨询页面
用户在个人中心界面可以查看到自己的个人详细信息详情,可以对信息进行更新和退出登录的操作,在该界面可以对账户余额进行充值操作,还可以对我的收藏进行详细操作,如图5-8所示:
图5-8个人中心页面
5.2后台管理员模块实现
管理员登录,在登录页面正确输入用户名和密码后,进入操作系统进行操作;如图5-9所示。
图5-9 管理员登录界面
管理员进入系统主页面,主要功能包括对系统首页、用户管理、汽车品牌管理、汽车分类管理、汽车商品管理、预约记录管理、系统管理、订单管理等进行操作。管理员主页面如图5-10所示:
图5-10管理员主界面
JAVA后端代码实现
package com.controller;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/**
* 登录相关
*/
@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);
UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
源码获取
大家点赞、收藏、关注 ,让更多需要的同学看到
不同开发语言专栏推荐订阅:
👇下方有我的微信名片👇