ssm的图书商城

浏览 6 次

Book Mall Management System Based on SSM

本项目是一个基于SSM框架开发的图书商城管理系统,旨在实现图书信息的高效管理与在线销售。系统核心功能包括用户管理、图书分类展示、购物车管理、订单处理及后台数据维护,为管理员和用户提供便捷的操作界面。该系统适合作为毕业设计或实际项目实现,展示了SSM在Web系统开发中的应用,具备良好的可扩展性和实用性。

SSMMySQL后台管理

项目简介

本项目是一个基于SSM框架开发的图书商城管理系统,旨在实现图书信息的高效管理与在线销售。系统核心功能包括用户管理、图书分类展示、购物车管理、订单处理及后台数据维护,为管理员和用户提供便捷的操作界面。该系统适合作为毕业设计或实际项目实现,展示了SSM在Web系统开发中的应用,具备良好的可扩展性和实用性。

项目基础信息

适合专业计算机科学与技术 / 软件工程 / 信息管理
技术栈SSM + JSP + MySQL + jQuery
系统架构MVC架构
项目类型电商系统 / 管理系统
运行环境JDK1.8、Tomcat8+、MySQL5.7+
开发工具Eclipse/IDEA、Maven

项目包含内容

  • 前后端完整源码
  • 数据库完整脚本
  • 参考论文(如有)
  • 部署软件及部署说明
  • 项目介绍文档(如有)

项目详细介绍

基于SSM的图书商城的设计与实现

本系统的设计结果如下:

系统将分三个角色:卖家、买家用户、管理员。

卖家:可以管理图书库存信息,图书上架下架状态。

普通用户:访问系统主页后,可以浏览商品,对商品筛选查询,找到心意图书,然后浏览图书,登录成功后可以加入购物车,以及可以对购物车中的商品进行结算。

管理员:管理后台系统,对前台用户的商品信息进行处理,比如订单的处理、商品的发货,审核卖家上架图书的信息,如图书的状态、库存等。

4.1.1 前台(游客和用户)部分

游客模块

访问了前台主页的游客可以搜索图书,即通过图书相关的信息,如作者,名称等进行搜索匹配。

用户模块

1、登录模块

验证帐号、密码是否正确。当不输入密码时,提示密码不能为空。只有登录成功才可以进行商品加购物车功能,加入购物车才可以进行商品结算。

2、注册模块

可以选择注册卖家或者买家用户。买家用户可以进购买图书商品。卖家用户可以登录后台管理系统,卖家能够添加图书信息、图书库存、申请图书上架。

当点击了注册按钮后,弹出注册模态框,填写用户相关的信息,昵称、密码、确认密码、手机号、电子邮箱、角色。所填写手机号不能小于11位,填写密码长度大于六位时才会符合密码格式,且要和确认密码一致,验证码也要输入正确,最后点击注册,当昵称不存在时注册成功。昵称存在提示该昵称已被注册。

3、密码修改

用户可以自行修改密码。

4、用户个人信息模块

用户可以查看自己的信息、也可以进行信息修改,修改个人昵称,手机号,邮箱。

5、购物车模块

用户浏览到心意的图书时,可以把图书加购物车。用户可以对自己的购物车进行管理,比如商品结算,商品删除,商品数量的增加或减少。

6、用户订单模块

用户选择购物车中的商品进行结算订单,点击提交订单前需填写收货人姓名、手机号码、详细地址、电子邮箱。

7、安全退出模块

销毁登录session,防止非法登录

4.1.2 后台(管理员)部分

1、登录模块

验证帐号、密码、验证码是否正确,验证用户是属于什么角色。

2、用户管理模块

超级管理员:管理所有用户信息,可以添加用户、修改所有的用户信息、删除所有用户信息。

卖家用户:可以修改自己的个人信息。

3、图书管理模块

超级管理员:审核卖家用户提交的图书状态,有待审核、审核通过、审核不通过、已下架。

卖家用户:可以添加要进行上架售卖的图书,修改图书信息、删除图书、搜索图书、查看图书详细信息、修改图书状态即是否上架,然后需超级管理员审核通过才会在商城进行上架。

4、权限管理模块

超级管理员:权限信息的管理,赋予用户某个操作权限,可以对卖家以及管理员的权限进行添加或修改。

5、图书订单模块

超级管理员:和卖家用户管理图书模块的操作一样

卖家用户:查看订单详情、管理订单状态,如已发货、已签收、已支付待发货。

6、库存模块

超级管理员:可以进行的操作和卖家用户一样

卖家用户:添加图书库存、修改图书库存、删除图书库存、库存量大于0才能进行上架图书。

7、安全退出模块

销毁登录session,防止非法登录。


/**

 * 库存Stock业务实现类

 */

@Service

@Transactional

public class StockServiceImpl implements IStockService {



    @Autowired

    private StockDao stockDao;



    @Autowired

    private UserDao userDao;



    @Autowired

    private BookDao bookDao;



    @Override

    public ResponseVo<Boolean> addStock(Stock stock) {

        if(stock == null){

            return ResponseVo.errorByMsg(CodeMsg.DATA_ERROR);

        }

        //进行统一表单验证

        CodeMsg validate = ValidateEntityUtil.validate(stock);

        if(!validate.getCode().equals(CodeMsg.SUCCESS.getCode())){

            return ResponseVo.errorByMsg(validate);

        }

        //判断该用户是否已经使用了该库存名称

        if(isNameExist(stock, 0L)){

            return ResponseVo.errorByMsg(CodeMsg.STOCK_NAME_EXIST);

        }

        //添加数据库中的库存信息

        if(stockDao.insert(stock) < 0){

            return ResponseVo.errorByMsg(CodeMsg.STOCK_ADD_ERROR);

        }

        return ResponseVo.successByMsg(true, 成功添加库存信息!);

    }



    @Override

    public ResponseVo<Boolean> editStock(Stock stock) {

        if(stock == null || stock.getId() == null){

            return ResponseVo.errorByMsg(CodeMsg.DATA_ERROR);

        }

        //进行统一表单验证

        CodeMsg validate = ValidateEntityUtil.validate(stock);

        if(!validate.getCode().equals(CodeMsg.SUCCESS.getCode())){

            return ResponseVo.errorByMsg(validate);

        }

        //判断该用户是否已经使用了该库存名称

        if(isNameExist(stock, stock.getId())){

            return ResponseVo.errorByMsg(CodeMsg.STOCK_NAME_EXIST);

        }

        //修改数据库中的库存信息

        if(stockDao.updateById(stock) < 0){

            return ResponseVo.errorByMsg(CodeMsg.STOCK_EDIT_ERROR);

        }

        return ResponseVo.successByMsg(true, 成功修改库存信息!);

    }



    @Override

    public ResponseVo<Boolean> deleteStock(String ids) {

        if(CommonUtil.isEmpty(ids)){

            return ResponseVo.errorByMsg(CodeMsg.DATA_ERROR);

        }

        //把ids根据','拆分,然后转换成List类型

        String[] split = ids.split(,);

        List<String> idsList = Arrays.asList(split);

        if(stockDao.deleteBatchIds(idsList) < 0){

            return ResponseVo.errorByMsg(CodeMsg.STOCK_DELETE_ERROR);

        }

        return ResponseVo.successByMsg(true, 成功删除库存信息!);

    }



    @Override

    public Map<String, Object> getStockList(Page page, String name) {

        Map<String, Object> ret = new HashMap<>();

        Map<String, Object> queryMap = new HashMap<>();

        if(!CommonUtil.isEmpty(name)){

            queryMap.put(name, name);

        }

        queryMap.put(offset, page.getOffset());

        queryMap.put(pageSize, page.getRows());

        //获取当前登录的用户

        User user = (User) SecurityUtils.getSubject().getPrincipal();

        if(user == null){

            return ret;

        }

        if(RoleEnum.SELLER.getCode().equals(user.getRoleId())){

            //如果是卖家角色,只能看到自己的库存

            queryMap.put(sellerId, user.getId());

        }

        //如果是管理员角色,可以看到所有卖家的库存

        ret.put(rows, stockDao.getStockList(queryMap));

        ret.put(total, stockDao.getAllTotal(queryMap));

        return ret;

    }



    @Override

    public Boolean isNameExist(Stock stock, Long id) {

        QueryWrapper<Stock> queryWrapper = new QueryWrapper<>();

        queryWrapper.eq(name, stock.getName());

        queryWrapper.eq(seller_id, stock.getSellerId());

        List<Stock> selectedStock = stockDao.selectList(queryWrapper);

        if(selectedStock != null && selectedStock.size() > 0) {

            if(selectedStock.size() > 1){

                return true; //出现重名

            }

            if(!selectedStock.get(0).getId().equals(id)) {

                return true; //出现重名

            }

        }

        return false;//没有重名

    }



    @Override

    public String toStockList(Model model) {

        //获取当前登录的用户

        User user = (User) SecurityUtils.getSubject().getPrincipal();

        if(user == null){

            return admin/user/login;

        }

        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();

        if(RoleEnum.SELLER.getCode().equals(user.getRoleId())){

            //如果是卖家角色,只能查看到自己的信息

            userQueryWrapper.eq(id, user.getId());

            model.addAttribute(allSellerList, userDao.selectList(userQueryWrapper));

        }else if(RoleEnum.ADMIN.getCode().equals(user.getRoleId())){

            //如果是管理员角色,能看到所有卖家的信息

            userQueryWrapper.eq(role_id, RoleEnum.SELLER.getCode());

            model.addAttribute(allSellerList, userDao.selectList(userQueryWrapper));

        }

        return admin/stock/list;

    }



    @Override

    public Stock checkStock(Long bookId, Integer quantity) {

        if(quantity == null || bookId == null){

            return null; //库存不合格

        }

        Map<String, Object> queryMap = new HashMap<>();

        queryMap.put(id, bookId);

        queryMap.put(state, BookStateEnum.AUDIT_SUCCESS.getCode());

        List<Book> bookList = bookDao.getBookList(queryMap);

        if(bookList == null || bookList.size() != 1){

            return null; //库存不合格

        }

        if(bookList.get(0).getStock() == null){

            return null; //库存不合格

        }

        if(quantity > bookList.get(0).getStock().getCount()){

            return null; //库存不合格

        }

        return bookList.get(0).getStock(); //库存合格

    }

}


联系咨询区

可沟通项目方向、预算、交付周期与答辩时间安排,支持按学校要求定制交付内容。

为你推荐

根据你的浏览兴趣与热门趋势,精选可能适合你的毕业设计项目。

基于JAVA+SpringBoot+Vue+uniapp的微信小程序点餐平台

SpringBootVue微信小程序UniAppMySQL前后端分离支付功能小程序端

该系统是一个基于Java+SpringBoot后端、Vue+Uniapp前端的微信小程序点餐平台。平台实现了在线菜单浏览、购物车管理、订单提交与支付、后台数据统计等核心功能,为餐饮商家提供高效便捷的数字化点餐解决方案。项目采用前后端分离架构,适合作为毕业设计或实际项目开发,展示了现代Web与移动应用系统的完整实现流程。

基于JAVA+SpringBoot+Vue+uniapp+协同过滤算法+爬虫+AI的减肥小程序

SpringBootVueUniAppAI智能推荐算法小程序端

该项目是一个集成了协同过滤推荐算法、网络爬虫与AI技术的智能减肥小程序。系统采用JAVA+SpringBoot构建后端服务,Vue+uniapp实现跨平台前端,旨在为用户提供个性化的饮食与运动方案。核心功能包括基于用户行为的智能推荐、健康数据管理及社区互动,适合作为毕业设计或实际项目开发,展示了现代Web与移动应用在信息管理与系统开发中的综合实践。

基于JAVA+SpringBoot+Vue的自动阅卷分析系统

SpringBootVueMySQLAI智能数据可视化前后端分离PC端

该系统是一个基于JAVA+SpringBoot后端与Vue前端的自动阅卷分析系统,旨在实现高效、准确的试卷批改与学习数据分析。核心功能包括智能识别与评分、错题统计分析、成绩报告生成以及教学效果评估。该系统开发专注于提升阅卷效率与信息管理深度,适用于在线教育、考试机构及毕业设计项目实现,为教学管理与学习分析提供一体化解决方案。

基于JAVA+SpringBoot+Vue+uniApp小程序的心理健康测试平台

SpringBootVue微信小程序UniAppMySQL前后端分离小程序端

该心理健康测试平台是一个集前端小程序与后端管理系统于一体的综合系统开发项目。平台采用JAVA与SpringBoot构建稳健后端,结合Vue与uniApp实现跨端小程序开发,为用户提供便捷的心理测评与报告服务。系统核心功能包括题库管理、在线测试、数据分析及报告生成,旨在通过信息化手段提升心理健康服务的可及性与专业性,适用于毕业设计或实际项目实现。

基于JAVA+SpringBoot+Vue+uniapp的前后端分离的微信小程序的艺术品陶瓷商城

SpringBootVue微信小程序UniAppMySQL前后端分离小程序端

该项目是一个基于JAVA+SpringBoot+Vue+uniapp技术栈的前后端分离微信小程序艺术品陶瓷商城系统。系统开发实现了艺术品陶瓷的在线展示、商品管理、用户订单处理及支付集成等核心功能,为陶瓷艺术品的数字化交易提供了完整的信息管理解决方案,适合作为毕业设计或商业项目实现。

基于JAVA+SpringBoot+Vue的二手车交易系统

SpringBootVueMySQL前后端分离PC端

该系统是一个基于Java+SpringBoot+Vue的二手车交易管理系统,旨在为用户提供便捷的在线车辆买卖平台。核心功能包括车辆信息发布、智能搜索、在线咨询、交易管理及用户评价等模块。通过前后端分离的系统开发模式,实现了高效的信息管理和流畅的用户体验,适合作为毕业设计或实际项目实现,帮助提升二手车交易效率与透明度。

基于JAVA+SpringBoot+Vue的故障报修平台

SpringBootVueMySQL前后端分离PC端

该项目是一个基于Java、SpringBoot和Vue的故障报修平台,旨在实现高效的设备故障管理与维修流程。系统提供用户在线报修、工单分配、进度跟踪及数据统计等核心功能,适用于企业或校园的日常运维。通过前后端分离架构,确保了系统的可扩展性和维护性,适合作为毕业设计或实际项目实现,展示了现代Web信息管理系统的开发实践。

基于JAVA+SpringBoot+Vue的前后端分离的学校请假管理系统

SpringBootVueMySQL权限控制多角色系统前后端分离PC端

这是一个基于JAVA+SpringBoot+Vue的前后端分离学校请假管理系统,旨在实现学生请假流程的数字化与高效管理。系统开发涵盖了学生在线提交申请、辅导员与院系审批、请假记录统计等核心功能,优化了传统纸质流程。该项目可作为信息管理系统的毕业设计或实际应用案例,展示了前后端分离架构在项目实现中的优势。