计算机毕业设计选题推荐-网上书店-Java/Python项目实战

作者主页:IT毕设梦工厂✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

一、前言

随着互联网的迅速发展,电子商务已被广大互联网用户所接受,网上书店系统作为电子商务的一部分也迅速发展起来。网上书店相比传统书店具有明显的优势,如避免书目订货的局限和盲目性,克服了看样订货投入大、费用高、管理难的不足。此外,网上书店的选择范围更广、能直观看样、随时添订、结算及时、快捷方便,周转高速 。

现有的网上书店系统存在一些问题,如用户界面不够友好,操作复杂,导致用户体验不佳;系统功能不够完善;数据更新不够及时,导致图书信息滞后;支付和物流系统不够成熟,影响了用户的购买体验 。

本课题旨在设计并实现一个功能齐全、用户友好的网上书店系统,该系统将提供简洁直观的用户界面,优化图书检索功能,实现数据的实时更新,以及集成安全便捷的支付和物流系统。通过本课题的研究,希望能够为用户和书店提供一个便捷、安全的在线购书平台 。

在设计的网上书店系统中,管理人员负责用户账户的创建与维护、卖家的审核与管理、图书分类与信息的更新、图书借阅与归还流程的管理、图书资讯的发布与维护、以及订单的监控与管理;卖家则能够管理自己的图书信息、审核用户的借阅请求、处理图书归还的审核、并管理自己图书的订单;用户可以浏览图书和资讯、使用购物车进行购买、管理自己的订单、申请借阅图书以及归还图书。系统通过这些功能模块的整合,旨在提供一个便捷的在线购书和借阅体验。

本课题的研究具有重要的理论意义和实际意义。从理论角度来看,它为电子商务领域提供了新的研究思路,即如何利用信息技术提升网上书店的服务质量和用户体验。从实际角度来看,该系统的应用将显著提高图书交易的效率,降低运营成本,提升用户满意度,推动图书电子商务市场的发展 。

二、开发环境

  • 开发语言:Java/Python
  • 数据库:MySQL
  • 系统架构:B/S
  • 后端:SpringBoot/SSM/Django/Flask
  • 前端:Vue

三、系统界面展示

  • 网上书店界面展示:
    管理员-图书类型管理:
    管理员-图书类型管理管理员-图书信息管理:
    管理员-图书信息管理用户-查看图书信息:
    用户-查看图书信息用户-图书借阅申请:
    用户-图书借阅申请卖家-图书借阅审核:
    卖家-图书借阅审核卖家-图书信息管理:
    卖家-图书信息管理卖家-图书归还审核:
    卖家-图书归还审核卖家-图书订单管理:
    卖家-图书订单管理

四、部分代码设计

  • 项目实战-代码参考:
@RestController
@RequestMapping("/cart")
public class CartController {
    @Resource
    OrderService orderService;

    @Resource
    UserService userService;

    @Resource
    ItemService itemService;

    @Resource
    CartService cartService;

    @AuthAccess(message = "安卓添加购物车")
    @PostMapping("/app/add")
    public Result<?> addCart(@RequestBody ItDTO itDTO){
        Item item = itemService.findById(itDTO.getItemId());
        User user = userService.findById(itDTO.getUserId());
        createCart(item,user,1);
        return Result.success();
    }

    @AuthAccess(message = "安卓获取购物车")
    @GetMapping("/app/getCarts/{userId}")
    public Result<?> getCartList(@PathVariable Integer userId) {
        return Result.success(cartService.getMyCart(userId));
    }
    @AuthAccess(message = "安卓删除购物车")
    @DeleteMapping("/app/delete/{id}")
    public Result<?> deleteById(@PathVariable Integer id){
        cartService.deleteById(id);
        return Result.success();
    }

    @PostMapping("/buyCart")
    public Result<?> buyCart(@RequestBody List<Cart> carts,@RequestParam BigDecimal totalPrice,
                             @RequestParam Integer addressId, HttpServletRequest request) {
        // 生成订单号
        String orderNo = IdUtil.getSnowflake().nextIdStr();
        // 如果是 Web 端
        if (StrUtil.isEmpty(request.getHeader("source-client"))) {
            // 生成订单名称
            String orderName = carts.get(0).getCartName() + "等多件商品";
            // 拼接支付URL
            String payUrl = "http://localhost:9090/alipay/pay?subject=" + orderName + "&traceNo=" + orderNo + "&totalAmount=" + totalPrice;
            // 对所以加入购物车的商品进行处理,添加订单号
            for (Cart cart : carts) {
                Order order = new Order();
                // 设置商品ID
                order.setProductId(cart.getProductId());
                // 获取商品名称
                order.setOrderName(cart.getCartName());
                // 设置订单号
                order.setOrderNo(orderNo);
                // 设置订单价格
                order.setPayPrice(cart.getPayPrice());
                // 设置邮费
                order.setPostFee(BigDecimal.ZERO);
                // 设置商品数量
                order.setCount(cart.getCount());
                // 设置支付状态
                order.setState(2);
                order.setUserId(cart.getUserId());
                order.setUsername(cart.getUsername());
                order.setOrderPicture(cart.getCartPicture());
                //构建创建时间
                Date currDate = new Date();
                order.setCreateTime(currDate);
                orderService.save(order);
                //从购物车中删除
                cartService.deleteById(cart.getId());
            }
            // 返回支付URL
            return Result.success(payUrl);
        }
        // 如果是手机端
        else {
            // 对所有加入购物车的商品进行处理,添加订单号,添加地址
//            for (Order order : orders) {
//                order.setOrderNo(orderNo);
//                order.setAddressId(addressId);
//                // 同时也更新商品的选择数量
//                orderMapper.updateById(order);
//            }
            // 回传统一的订单编号
            return Result.success(orderNo);
        }
    }

    /**
     * @param itemId 要加入购物车的物品ID
     * @param userId 用户的ID
     * @return 返回成功消息就可以了
     */
    @GetMapping("/add")
    public Result<?> addToCart(@RequestParam Long itemId,@RequestParam Integer userId,@RequestParam Integer count){
        Item item = itemService.findById(itemId);
        User user = userService.findById(userId);
        createCart(item,user,count);
        return Result.success();
    }
    private Cart createCart(Item item, User user, Integer count) {
        Cart cart = new Cart();
        // 设置商品ID
        cart.setProductId(item.getId());
        // 获取商品名称
        cart.setCartName(item.getTitle());
        // 设置订单价格
        cart.setPayPrice(item.getPrice());
        // 设置邮费
        cart.setPostFee(BigDecimal.ZERO);
        // 设置商品数量
        cart.setCount(count);

        cart.setUserId(user.getId());
        cart.setUsername(user.getUsername());
        cart.setCartPicture(item.getImage());
        cartService.save(cart);
        return cart;
    }

    @GetMapping("/getCarts")
    public Result<?> getCarts(@RequestParam(defaultValue = "1") Integer pageNum,
                                   @RequestParam(defaultValue = "10") Integer pageSize,
                                   @RequestParam(defaultValue = "") String search) {

        return Result.success(cartService.getCarts(pageNum,pageSize,search));
    }
    @PostMapping("/deleteCarts")
    public Result<?> deleteCarts(@RequestBody List<Cart> carts) {
        for (Cart cart:carts) {
            cartService.deleteById(cart.getId());
        }
        return Result.success();
    }

}

@RestController
@RequestMapping("/order")
public class OrderController {
    @Resource
    OrderService orderService;

    @Resource
    UserService userService;

    @Resource
    ItemService itemService;

    @PostMapping
    public Result<?> save(@RequestBody Order order){
        orderService.save(order);
        return Result.success();
    }

    //更新订单
    @PutMapping
    public Result<?> update(@RequestBody Order order){
        orderService.update(order);
        return Result.success();
    }

    //根据订单ID删除订单
    @DeleteMapping("/{id}")
    public Result<?> delete(@PathVariable Long id){
        orderService.delete(id);
        return Result.success();
    }

    //根据订单ID查询订单
    @GetMapping("/{id}")
    public Result<?> getById(@PathVariable Long id){
        return Result.success(orderService.getById(id));
    }

    //购买商品,新建一个订单,单独购买一个商品
    @GetMapping("/buy")
    public Result<?> buy(@RequestParam Long itemId, @RequestParam Integer userId, @RequestParam Integer count,
                         HttpServletRequest request){
        Item item = itemService.findById(itemId);
        User user = userService.findById(userId);
        String orderNo = IdUtil.getSnowflake().nextIdStr();
        // 先新建未支付订单
        Order order = createOrder(item, user, orderNo,count);
        // 如果是小程序,回传这个订单,进入确认订单页面
        if (StrUtil.isNotEmpty(request.getHeader("source-client"))){
            return Result.success(order);
        }
        // 如果是web端
        else {
            BigDecimal price = item.getPrice().multiply(new BigDecimal(count));
            String payUrl = "http://localhost:9090/alipay/pay?subject=" + item.getTitle() + "&traceNo=" + orderNo + "&totalAmount=" + price;
            return Result.success(payUrl);
        }
    }

    private Order createOrder(Item item, User user, String orderNo, Integer count) {
        Order order = new Order();
        // 设置商品ID
        order.setProductId(item.getId());
        // 获取商品名称
        order.setOrderName(item.getTitle());
        // 设置订单号
        order.setOrderNo(orderNo);
        // 设置订单价格
        order.setPayPrice(item.getPrice());
        // 设置邮费
        order.setPostFee(BigDecimal.ZERO);
        // 设置商品数量
        order.setCount(count);
        // 设置支付状态
        order.setState(2);
        order.setUserId(user.getId());
        order.setUsername(user.getUsername());
        order.setOrderPicture(item.getImage());
        //构建创建时间
        Date currDate = new Date();
        order.setCreateTime(currDate);
        save(order);
        return order;
    }


    /**
     * 查询全部的订单消息
     * @param pageNum 当前的页数
     * @param pageSize 一页的大小
     * @param search 搜索的关键词
     * @return 结果集
     */
    @GetMapping
    public Result<?> findPage(@RequestParam(defaultValue = "1") Integer pageNum,
                              @RequestParam(defaultValue = "10") Integer pageSize,
                              @RequestParam(defaultValue = "") String search) {

        return Result.success(orderService.findPage(pageNum,pageSize,search));
    }

    /**
     * 查询对应用户的订单信息
     * @param pageNum 当前页码
     * @param pageSize 每一页的条数
     * @param search 搜索的商品名称
     * @param state 查询订单的状态类型,0表示全部
     * @return 返回分页好的数据表
     */
    @GetMapping("/user_order")
    public Result<?> findUserOrder(@RequestParam(defaultValue = "1") Integer pageNum,
                                   @RequestParam(defaultValue = "10") Integer pageSize,
                                   @RequestParam(defaultValue = "") String search,
                                   @RequestParam(defaultValue = "0") Integer state) {

        return Result.success(orderService.findUserOrder(pageNum,pageSize,search,state));
    }

    /**
     * 根据传入的订单编号查出该订单购买的商品
     */
    @GetMapping("/selectOrder")
    public Result<?> findOrderByNo(@RequestParam String orderNo){

        return Result.success(orderService.findOrderByNo(orderNo));
    }

    // 小程序端模拟支付接口,直接模拟收到微信回调更新库存等等操作
    @PostMapping("/mockPay")
    public Result<?> mockNotify(@RequestBody List<Order> orders){
        // 获取当前支付时间
        Date payment = new Date();
        // 更新订单状态
        for (Order order : orders) {
            // 先进行库存扣减,如果扣减失败,直接弹出库存不足
            if (itemService.updateStock(order.getProductId(),order.getCount()) <= 0){
                throw new ServiceException("407","您购买的商品中有库存不足的情况");
            }
            // 设置支付时间
            order.setPaymentTime(payment);
            // 设置支付状态
            order.setState(1);
            // 更新订单
            orderService.update(order);
        }
        return Result.success();
    }

    // 发货接口
    @PutMapping("/send/{id}")
    public Result<?> Send(@PathVariable("id") Integer id){
        if (orderService.updateStateWithoutDate(id,4) <= 0)
            throw new ServiceException("400",",发货出错");
        return Result.success();
    }

    // 确定收货接口
    @PutMapping("/receive/{id}")
    public Result<?> receive(@PathVariable Integer id){
        // 创建当前时间
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String now = format.format(new Date());
        // 更新订单状态和结束时间
        if (orderService.updateReceiptState(id,now) <= 0)
            throw new ServiceException("400",",确认收货出错");
        return Result.success();
    }

    // 根据订单编号删除订单接口
    @DeleteMapping("/delete/{orderNo}")
    public Result<?> deleteByOrderNo(@PathVariable String orderNo){
        if (orderService.deleteByOrderNo(orderNo)<= 0)
            throw new ServiceException("400",",删除订单出错");
        return Result.success();
    }

    /**
     * 获取驾驶舱所需要的图表数据
     * @return 图表数据
     */
    @GetMapping("/charts")
    public Result<?> charts() {
        List<Order> orders = orderService.getPayList();
        // 获取下单的日期,并对日期排序
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        List<String> dateList = orders.stream().map(order -> (format.format(order.getPaymentTime())))
                .distinct().sorted(Comparator.naturalOrder()).collect(Collectors.toList());
        List<Dict> lineList = new ArrayList<>();
        // 获取每天下单的金额和
        for (String date : dateList) {
            // 从 orders 里面找到这一天的订单
            BigDecimal sum = orders.stream().filter(order -> format.format(order.getPaymentTime()).equals(date))
                    .map(order -> order.getPayPrice().multiply(new BigDecimal(order.getCount())))
                    .reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
            Dict dict = Dict.create().set("date",date).set("value",sum);
            lineList.add(dict);
        }

        List<Dict> barList = new ArrayList<>();
        // 包装柱状图的数据,每天的订单量
        for (String date : dateList) {
            Integer numbers = orders.stream().filter(order -> format.format(order.getPaymentTime()).equals(date))
                    // 把每个订单映射成 1
                    .map(order -> 1).reduce(Math::addExact).orElse(0);
            Dict dict = Dict.create().set("date",date).set("count",numbers);
            barList.add(dict);
        }

        // todo 饼图的数据根据商品 id 来分类

        Dict res = Dict.create().set("lineData", lineList).set("barData", barList);
        // 包装柱状图数据
        return Result.success(res);
    }
}

五、论文参考

  • 计算机毕业设计选题推荐-网上书店-论文参考:
    计算机毕业设计选题推荐-网上书店-论文参考

六、系统视频

  • 网上书店-项目视频:

计算机毕业设计选题推荐-网上书店-Java/Python项目

结语

计算机毕业设计选题推荐-网上书店-Java/Python项目实战
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:⬇⬇⬇

精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值