• 基于javaweb+mysql的甜品冰淇淋奶茶店网上订餐系统(前台、后台)


    基于javaweb+mysql的甜品冰淇淋奶茶店网上订餐系统(前台、后台)

    运行环境

    Java≥8、MySQL≥5.7、Tomcat≥8

    开发工具

    eclipse/idea/myeclipse/sts等均可配置运行

    适用

    课程设计,大作业,毕业设计,项目练习,学习演示等

    功能说明

    分为前台和后台管理

    前台用户可以注册、登录、查看商品列表与商品详情、加入购物车、下单购买等

    后台管理员可以管理用户、商品、分类、订单等

    前台

    后台

    技术框架

    JavaBean MVC JSP SSM(Spring SpringMVC MyBatis) MySQL jQuery Bootstrap JavaScript CSS


    适用

    课程设计,大作业,毕业设计,项目练习,学习演示等

    
    	/**
    	 * 通过分类搜索
    	 * @param typeid
    	 * @param page
    	 * @param size
    	 * @return
    	 */
    	public List<Goods> getListByType(int typeid, int page, int size) {
    		return typeid > 0 ? goodDao.getListByType(typeid, size * (page-1), size) : goodDao.getList(size * (page-1), size);
    	}
    	
    	/**
    	 * 获取数量
    	 * @param typeid
    	 * @return
    	 */
    	public long getTotalByType(int typeid){
    		return typeid > 0 ? goodDao.getTotalByType(typeid) : goodDao.getTotal();
    	}
    	
    	/**
    	 * 通过id获取
    	 * @param productid
    	 * @return
    	 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    	}
    	
    	/**
    	 * 添加
    	 * @param admin
    	 */
    	public Integer add(Admins admin) {
    		admin.setPassword(SafeUtil.encode(admin.getPassword()));
    		return adminDao.insert(admin);
    	}
    	
    	/**
    	 * 更新
    	 * @param user
    	 */
    	public boolean update(Admins admin) {
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    	 * @param row
    	 * @return
    	 */
    	public List<Orders> getList(byte status, int page, int row) {
    		List<Orders> orderList = orderDao.getListByStatus(status, row * (page-1), row);
    		for(Orders order : orderList) {
    			order.setItemList(this.getItemList(order.getId()));
    		}
    		return orderList;
    	}
    	
    	/**
    	 * 获取总数
    	 * @return
    	 */
    	public int getTotal(byte status) {
    		return (int)orderDao.getTotalByStatus(status);
    	}
    
    	/**
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    		return goods;
    	}
    	
    	/**
    	 * 添加
    	 * @param product
    	 */
    	public Integer add(Goods good) {
    		return goodDao.insert(good);
    	}
    
    	/**
    	 * 修改
    	 * @param product
    	 * @return 
    	 */
    	public boolean update(Goods good) {
    		return goodDao.updateById(good) > 0;
    	}
    	
    	/**
    	 * 删除商品
    	 * 先删除此商品的推荐信息
    	 * @param product
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    		session.removeAttribute("user");
    		session.removeAttribute("order");
    		return "/index/login.jsp";
    	}
    	
    	/**
    	 * 查看购物车
    	 * @return
    	 */
    	@RequestMapping("/cart")
    	public String cart(Model model) {
    		model.addAttribute("typeList", typeService.getList());
    		return "/index/cart.jsp";
    	}
    	
    	/**
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    		request.setAttribute("goodList", goodService.getListByType(typeid, page, rows));
    		request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getTotalByType(typeid), page, rows));
    		return "/index/goods.jsp";
    	}
    	
    	/**
    	 * 商品详情
    	 * @return
    	 */
    	@RequestMapping("/detail")
    	public String detail(int goodid, HttpServletRequest request){
    		request.setAttribute("good", goodService.get(goodid));
    		request.setAttribute("typeList", typeService.getList());
    		return "/index/detail.jsp";
    	}
    	
    	/**
    	 * 搜索
    	 * @return
    	 */
    	@RequestMapping("/search")
    	public String search(String name, @RequestParam(required=false, defaultValue="1")int page, HttpServletRequest request) {
    		if (Objects.nonNull(name) && !name.trim().isEmpty()) {
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    	 */
    	public Orders deleteIndentItem(Orders order, Goods good) {
    		List<Items> itemList = order.getItemList();
    		itemList = itemList==null ? new ArrayList<Items>() : itemList;
    		// 如果购物车已有此项目, 数量清零
    		boolean noneThis = true;
    		int itemAmount = 0;
    		List<Items> resultList = new ArrayList<Items>();
    		for (Items item : itemList) {
    			if (item.getGoodId() == good.getId()) {
    				itemAmount = item.getAmount();
    				noneThis = false;
    				continue;
    			}
    			resultList.add(item);
    		}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    			return null;
    		}
    		order.setItemList(resultList);
    		// 如果当前购物车没有项目, 直接返回
    		if (noneThis) {
    			return order;
    		}
    		order.setTotal(order.getTotal() - good.getPrice() * itemAmount);
    		order.setAmount(order.getAmount() - itemAmount);
    		return order;
    	}
    
    	/**
    	 * 保存订单
    	 * @param order
    	 */
    	public int save(Orders order) {
    		order.setStatus(Orders.STATUS_UNPAY);
    		order.setSystime(new Date());
    		orderDao.insert(order);
    		int orderid = order.getId();
    		for(Items item : order.getItemList()){
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
            return image1;
        }
    
        public void setImage1(String image1) {
            this.image1 = image1 == null ? null : image1.trim();
        }
    
        public String getImage2() {
            return image2;
        }
    
        public void setImage2(String image2) {
            this.image2 = image2 == null ? null : image2.trim();
        }
    
        public Integer getPrice() {
            return price;
        }
    
        public void setPrice(Integer price) {
            this.price = price;
        }
    
        public String getIntro() {
            return intro;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    	}
    
    	/**
    	 * 管理员修改自己密码
    	 * 
    	 * @return
    	 */
    	@RequestMapping("/adminReset")
    	public String adminReset(Admins admin, HttpServletRequest request) {
    		request.setAttribute("flag", 5);
    		if (adminService.get(admin.getId()).getPassword().equals(SafeUtil.encode(admin.getPassword()))) {
    			admin.setPassword(SafeUtil.encode(admin.getPasswordNew()));
    			adminService.update(admin);
    			request.setAttribute("admin", admin);
    			request.setAttribute("msg", "修改成功!");
    		}else {
    			request.setAttribute("msg", "原密码错误!");
    		}
    		return "/admin/admin_reset.jsp";
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    @Service	// 注解为service层spring管理bean
    @Transactional	// 注解此类所有方法加入spring事务, 具体设置默认
    public class OrderService {
    
    	@Autowired
    	private OrdersDao orderDao;
    	@Autowired
    	private ItemsDao itemDao;
    	@Autowired
    	private GoodService goodService;
    	
    	
    	/**
    	 * 创建订单
    	 * @param good
    	 * @return
    	 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    	/**
    	 * 获取总数
    	 * @return
    	 */
    	public int getTotal(byte status) {
    		return (int)orderDao.getTotalByStatus(status);
    	}
    
    	/**
    	 * 订单发货
    	 * @param id
    	 * @return 
    	 */
    	public boolean dispose(int id) {
    		Orders order = orderDao.selectById(id);
    		order.setStatus(Orders.STATUS_SEND);
    		return orderDao.updateByIdSelective(order) > 0;
    	}
    	
    	/**
    	 * 订单完成
    	 * @param id
    	 * @return 
    	 */
    	public boolean finish(int id) {
    		Orders order = orderDao.selectById(id);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
        
        // 以上为mybatis generator自动生成接口, 具体实现在mapper.xml中
        
        // ------------------------------------------------------------
        
        // 以下方法使用mybatis注解实现
        
        
    	/**
    	 * 获取列表
    	 * @param page
    	 * @param size
    	 * @return
    	 */
        @Select("select * from goods order by id desc limit #{begin}, #{size}")
    	public List<Goods> getList(@Param("begin")int begin, @Param("size")int size);
    	
    	/**
    	 * 获取总数
    	 * @return
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
            #{typeId,jdbcType=INTEGER},
          if>
        trim>
      insert>
      <update id="updateByIdSelective" parameterType="com.entity.Goods" >
        update goods
        <set >
          <if test="name != null" >
            name = #{name,jdbcType=VARCHAR},
          if>
          <if test="cover != null" >
            cover = #{cover,jdbcType=VARCHAR},
          if>
          <if test="image1 != null" >
            image1 = #{image1,jdbcType=VARCHAR},
          if>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    			@RequestParam(required=false, defaultValue="1") int page) {
    		request.setAttribute("flag", 3);
    		request.setAttribute("page", page);
    		request.setAttribute("status", status);
    		request.setAttribute("goodList", goodService.getList(status, page, rows));
    		request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getTotal(status), page, rows));
    		return "/admin/good_list.jsp";
    	}
    
    	/**
    	 * 产品添加
    	 * 
    	 * @return
    	 */
    	@RequestMapping("/goodAdd")
    	public String goodAdd(HttpServletRequest request) {
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述

  • 相关阅读:
    R语言ggplot2可视化:使用ggpubr包的ggbarplot函数可视化柱状图、palette参数自定义不同水平柱状图边框以及填充的颜色
    乘法除法运算符规范
    Linux权限
    【轻量化网络】MobileNet系列
    拦截器与过滤器的区别
    教你快速搭建微服务环境
    Jmeter之接口测试
    DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务
    ​k8s如何做容器的高可用?
    拥抱云原生,Java与Python基于gRPC通信
  • 原文地址:https://blog.csdn.net/m0_68415979/article/details/127741553