Java毕业设计项目实战篇|Java项目:生鲜水果商城(java+SpringBoot+HTML+Thymeleaf+easyUI+bootstrap+mysql)
源码获取:博客首页 "资源" 里下载!项目介绍
后台功能:
1. 后台商品信息的添加
2. 后台商品信息的维护
要求:商品图片的修改。先显示现有的图片,当鼠标移动到图片上时,图片右上角显示一把X,即允许删除当前图片,然后提供添加新图片的按钮。类似于QQ空间相册中图片的修改一样。
上传的所有商品图片必须在右下角自动加上水印,即前台显示时,显示已经加好水印的图片。
3. 后台统计报表
要求:使用Echarts显示统计日营业额、月营业额、季度营业额以及年度营业额 以及 根据商品统计月营业额
前台功能:
1. 首页商品显示
要求:显示每种类型的最新四种商品信息(一次性查出,即只能发送一次请求和一条sql语句)
2. 点击首页 查看更多后,根据类型跳到goods.html页面分页显示当前类型的商品信息,排序规则:先根据销售数量降序,再根据商品编号降序
3. 点击加入购物车按钮时
要求: 先判断有没有登录,如果没有登录先提醒用户"请先登录...",然后跳到登录界面,登录成功后再跳回到原来界面
如果已经登录,加入购物车前,先判断该商品购物车中是否已经存在,如果存在则直接加数量,如果不存在则添加次商品信息到购物车
当前页面 "我的购物车" 商品信息的数量相应的改变
4. 当点击头部或其它地方的 "我的购物车" 时,跳到购物车页面
要求:需要做登录校验
完善全选全不选效果
完善增或减商品的数量,合计、商品数量总计等信息需要联动
5. 在我的购物车页面勾选需要结账的商品后,点击去结账
要求:如果没有勾选任何商品,则给出提示信息
点击编辑收货地址,弹出收货地址编辑框,让用户选择当前订单的收货地址,省市区采用js解析xml三级级联实现
完善收货地址编辑列表,添加设为默认收货地址按钮和当前为默认收货地址的标签,效果可参考京东、淘宝的收货地址效果
修改默认收货地址时,只允许发送一条sql语句
6. 点击提交订单时(需要做登录校验)
要求:删除当前用户购物车中,已下单的商品信息
修改用户已经购买的商品的相应的库存量
在订单表中添加一条订单记录
在订单详细表中添加购买商品的详细信息
要求以上操作必须添加事务管理,所有操作要么同时成功要么都回滚,并且对每个表的操作只能发送一条sql一句,即总共下单功能只能发送4条sql语句
7. 在首页或商品信息页面,当用户点击某个商品时,跳到 details.html 显示该商品的详细信息
扩展功能:
1. 添加前台会员信息的修改,允许前台会员拍照上传或选择图片上传的方式修改个人的图像
2. 购物车数据使用redis缓存
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目
6.数据库:MySql 5.7版本;
技术栈
1. 后端:SpringBoot
2. 前端:HTML+Thymeleaf+jQuery+easyUI+bootstrap
使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven; 若为maven项目,导入成功后请执行maven clean; maven install命令,配置tomcat,然后运行;
3. 将项目中application.yml配置文件中的数据库配置改为自己的配置;
4.运行项目,前台地址:http://localhost:8080
用户名 wang11 密码123456
后台地址: http://localhost:8080/toAdminLogin
用户名 supperman 密码123456
文章图片
文章图片
文章图片
文章图片
【Java毕业设计项目实战篇|Java项目:生鲜水果商城(java+SpringBoot+HTML+Thymeleaf+easyUI+bootstrap+mysql)】
文章图片
文章图片
商品信息控制层:
@Controller
@RequestMapping("/goodsInfo")
public class GoodsInfoController{
@Autowired
private IGoodsInfoBiz goodsInfoBiz;
@RequestMapping("/findAll")
@ResponseBody
public List findAll() {
return goodsInfoBiz.findAll();
}
@RequestMapping("/find")
@ResponseBody
public GoodsInfo find(String str) {
System.out.println(goodsInfoBiz.find(str));
return goodsInfoBiz.find(str);
}
@RequestMapping("/findByTno")
@ResponseBody
public List findByTno(String tno,String start) {
return goodsInfoBiz.findByTno(tno,start);
}
@RequestMapping("/updateBal")
@ResponseBody
public Integer updateBal(String[] gnos,String[] nums) {
return goodsInfoBiz.updateBal(gnos,nums);
}
@RequestMapping("/finds")
@ResponseBody
public List finds() {
return goodsInfoBiz.finds();
}
@RequestMapping("/upload")
@ResponseBody
public Map add(@RequestParam("upload")MultipartFile pic,HttpServletRequest request) {
Map map = new HashMap();
if(pic.isEmpty()){
return map;
}
try{
String savePath = "images/goods";
String path = request.getServletContext().getRealPath("");
String temp = request.getServletContext().getInitParameter("uploadPath");
if(temp != null){
savePath = temp;
}//在用户上传的文件名的前面加上时间戳
savePath += "/" + new Date().getTime() + "_" +pic.getOriginalFilename();
File dest = new File(new File(path).getParentFile(),savePath);
//将本地图片保存到服务器
pic.transferTo(dest);
map.put("fileName", pic.getOriginalFilename());
map.put("uploaded", 1);
map.put("url","../../../"+savePath);
}catch(IllegalStateException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
return map;
}
//管理员端的商品信息
@RequestMapping("/addGood")
@ResponseBody
public int addGood(@RequestParam Map map,@RequestParam MultipartFile pic, HttpServletRequest request){
int result =-1;
if(pic.isEmpty()){
result=-2;
//说明没有图片需要上传
}
String savePath="";
try {
String path= request.getServletContext().getRealPath("");
String temp = request.getServletContext().getInitParameter("uploadpath");
if(!StringUtil.checkNull(temp)){
savePath = temp;
}savePath="images/goods/"+pic.getOriginalFilename();
File dest = new File(path, savePath);
//将图片存到服务器的指定文件夹
pic.transferTo(dest);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
map.put("pics", savePath);
result=goodsInfoBiz.addGood(map);
return result;
}
@RequestMapping("/findgoods")
@ResponseBody
public List findgoods() {
return goodsInfoBiz.findgoods();
}
@RequestMapping("/del")
@ResponseBody
public int del(String gno) {
return goodsInfoBiz.del(gno);
}
@RequestMapping("/getPage")
@ResponseBody
public Integer getPage(String tno) {
int total=goodsInfoBiz.getTotal(tno);
int page=total%10==0?total/10:total/10+1;
return page;
}
}
订单信息控制层:
@Controller
@RequestMapping("/orderInfo")
public class OrderInfoController{
@Autowired
private IOrderInfoBiz orderInfoBiz;
@RequestMapping("/addOrderInfo")
@ResponseBody
public Integer addOrderInfo(String ono, String odate, String ano, String price) {
Integer in = 0;
try {
in = orderInfoBiz.addOrderInfo(ono, odate,ano,price);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return in;
}
@RequestMapping("/getOrder")
@ResponseBody
public List getOrder(String mno) {
return orderInfoBiz.getOrder(mno);
}
@RequestMapping("/getallOrder")
@ResponseBody
public List getallOrder(String mno) {
return orderInfoBiz.getallOrder(mno);
}
@RequestMapping("/setStatus")
@ResponseBody
public Integer setStatus(String ono) {
System.out.println("修改1");
return orderInfoBiz.setStatus(ono);
}
@RequestMapping("/getOrderByPage")
@ResponseBody
public List getOrderByPage(String mno, Integer page) {
return orderInfoBiz.getOrderByPage(mno,page);
}
@RequestMapping("/getPage")
@ResponseBody
public Integer getPage(String mno) {
int total=orderInfoBiz.getTotal(mno);
int page=total%2==0?total/2:total/2+1;
return page;
}
}
购物车信息控制层:
@Controller
@RequestMapping("/cartInfo")
public class CartInfoController{
@Autowired
private ICartInfoBiz cartInfoBiz;
@RequestMapping("/finds")
@ResponseBody
public List finds(String mno) {
return cartInfoBiz.finds(mno);
}
@RequestMapping("/update")
@ResponseBody
public Integer update(String cno, Integer num) {
return cartInfoBiz.update(cno, num);
}
@RequestMapping("/del")
@ResponseBody
public Integer del(String cno) {
return cartInfoBiz.del(cno);
}
@RequestMapping("/add")
@ResponseBody
public Integer add(String mno, String gno, Integer num) {
return cartInfoBiz.add(mno,gno,num);
}
@RequestMapping("/checkCar")
@ResponseBody
public Integer checkCar(String mno, String gno) {
return cartInfoBiz.checkCar(mno,gno);
}
@RequestMapping("/dels")
@ResponseBody
public Integer dels(String[]gnos)throws IOException {
return cartInfoBiz.dels(gnos);
}
}
用户管理控制层:
@Controller
@RequestMapping("/admin")
public class AdminInfoController{
@Autowired
private IAdminInfoBiz adminInfoBiz;
@RequestMapping("/checkLogin")
@ResponseBody
public Object checkLogin(HttpSession session) {
Object obj = session.getAttribute("currentLoginUser");
if(obj == null){
return "{\"code\":\"101\"}";
} else {
return obj;
}
}
@RequestMapping("/login")
@ResponseBody
public int login(String aname, String pwd, HttpSession session) {
AdminInfo af = adminInfoBiz.login(aname, pwd);
int result = 0;
if(af != null){
session.setAttribute("currentLoginUser", af);
result = 1;
}
return result;
}
@RequestMapping("/success")
public String loginSuccess(HttpSession session) {
if(session.getAttribute("currentLoginUser") != null){
return "/WEB-INF/back/page/index.html";
} else {
return "/bk/index.html";
//以/开头从项目目录开始算
}
}
@RequestMapping("/findAll")
@ResponseBody
public List findAll() {
return adminInfoBiz.findAll();
}
@RequestMapping("/add")
@ResponseBody
public int add(String aname, String pwd, String tel) {
return adminInfoBiz.add(aname,pwd,tel);
}
@RequestMapping("/update")
@ResponseBody
public int update(String aid,String tel) {
return adminInfoBiz.update(aid,tel);
}
@RequestMapping("/del")
@ResponseBody
public int del(String aid) {
return adminInfoBiz.del(aid);
}
/*@RequestMapping("/upload")
@ResponseBody
public Map upload(MultipartFile pics, HttpServletRequest request, @RequestParam Map params) {
if (pics.isEmpty()){
return Collections.emptyMap();
}
String savePath = "../pics";
try{
String path = request.getServletContext().getRealPath("");
String temp = request.getServletContext().getInitParameter("uploadpath");
if(!StringUtil.checkNull(temp)){
savePath = temp;
}savePath += "/" + new Date().getTime() + "_" + new Random().nextInt(10000) + "-" + pics.getOriginalFilename();
File dest = new File(path, savePath);
//将图片存到服务器的指定文件
pics.transferTo(dest);
} catch (IllegalStateException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
params.put("photo", savePath);
if(adminInfoBiz.updatephoto(params) > 0){
Map map = new HashMap();
map.put("savepath", savePath);
return map;
} else {
return Collections.emptyMap();
} }*/
}
源码获取:博客首页 "资源" 里下载!
推荐阅读
- datax|DBSwitch阉割版实现异构数据库表结构同步
- SpringMVC|软件工程专业电商网站毕业论文答辩实录(基于SSM+VUE前后端分离的 “依伴汉服”网)
- intellij-idea|springboot水果商城含后台管理系统源码
- SpringMVC|毕设|基于SSM+jsp+echarts的疫情地图系统系统(已经开源)
- SpringBoot|postman接口测试工具的使用攻略
- mysql数据库|MySQL Like模糊查询速度太慢如何进行优化
- 如何在C/C++,Python和Java中分割字符串()
- Java|计算机专业Java必读书单,高清PDF电子版下载
- Career|Java学习方法的一点个人见解-完整版