基于Java网上点餐系统设计与实现

news2025/1/19 11:37:12

博主介绍: ✌至今服务客户已经1000+、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌
🍅 文末获取源码联系 🍅
👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到

Java项目精品实战专区icon-default.png?t=N7T8https://blog.csdn.net/java18343246781/category_12537229.htmlJava各种开发工具资源包网站icon-default.png?t=N7T8http://62.234.13.119:9000/html/visitor/softwareResourceList.html

软件安装+项目部署专区icon-default.png?t=N7T8https://blog.csdn.net/java18343246781/category_12539864.htmlv


系列文章目录

前言

一、运行环境

二、代码示例

三、系统展示


前言

  在快节奏的现代生活中,网上点餐系统成为了满足用户便捷用餐需求的重要工具。本文将为您介绍一款多功能而智能的网上点餐系统,为用户提供了全方位的用餐体验。该系统的前端设计涵盖了各类便捷功能,使得用户可以轻松浏览菜单、分类点菜、加入购物车、下单,同时享受查看订单、管理钱包、地址、留言等一系列便捷服务。同时,后端管理功能丰富,包括对菜单、用户、留言、订单、餐桌等的全面管理,为商家提供了高效的运营工具。

  用户可以通过系统直观而美观的界面,轻松浏览丰富的菜单,根据个人口味和需求分类点菜,并随时加入购物车,构建个性化的点餐体验。一键下单后,用户可以方便地查看自己的订单,进行支付,同时管理自己的钱包、地址等信息。系统还提供了投诉信息和留言功能,用户可以通过系统表达建议、意见和需求,促进用户与商家的有效沟通。

  对于商家而言,后端管理系统为其提供了高效的工具,可以对菜单进行灵活管理,维护用户信息,处理留言和投诉,以及有效管理订单和餐桌。这使得商家能够更好地把握经营状况,提高服务水平。

  希望这款网上点餐系统能够为用户和商家之间搭建起一座便捷而愉悦的沟通桥梁,为现代餐饮行业注入更多智能化、便捷化的元素。

一、运行环境

系统采用了JDK 1.8作为基础开发环境,并搭建在Spring Boot框架之上,实现了快速、简便的Java应用程序开发。数据库方面选择了MySQL,作为可靠的关系型数据库管理系统,用于存储和管理商品、用户以及订单等相关数据。持久层框架方面使用了MyBatis和MyBatis Plus,简化了数据访问层的开发,提供了便捷的操作和功能。

        在前端设计上,系统使用了Layui框架,为用户提供了直观而美观的界面,包括商城列表、购物车、订单列表等功能。同时,为了实现动态页面生成,系统引入了Thymeleaf技术,与Spring框架良好集成,使得前端页面与后端数据更加紧密地结合,提升了用户体验。

二、代码示例

代码如下(示例):

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.wl.dto.OrdersDto;
import com.wl.enums.OrdersStateEnum;
import com.wl.enums.OrdersTypeEnum;
import com.wl.enums.TableStateEnum;
import com.wl.mapper.OrdersEntryMapper;
import com.wl.po.*;
import com.wl.service.*;
import org.apache.tomcat.util.buf.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;

import javax.servlet.http.HttpSession;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * 表现层控制类

 */
@Controller
@RequestMapping("cart")
@Slf4j
public class ShoppingCartController {

    @Autowired
    private ShoppingCartService shoppingCartService;

    @Autowired
    private AddressService addressService;

    @Autowired
    private WalletService walletService;

    @Autowired
    private UserService userService;

    @Autowired
    private DeskService deskService;

    @Autowired
    private MenuService menuService;

    @Autowired
    private OrdersService ordersService;

    @Autowired
    private OrdersEntryService entryService;

    //加入购物车
    @ResponseBody
    @RequestMapping(value = "/addToCart", method = RequestMethod.GET)
    public String addToCart(String menuId, HttpSession session) {
        User user = comment(session);
        ShoppingCart cart = new ShoppingCart();
        cart.setUserId(Integer.parseInt(user.getId()));
        cart.setMenuId(Integer.parseInt(menuId));
        Integer count = shoppingCartService.selectCountByCart(cart);
        if (count == null || count == 0) {
            cart.setCount(1);
            shoppingCartService.addCart(cart);
        } else {
            cart.setCount(count + 1);
            shoppingCartService.updateCartCount(cart);
        }
        return "商品成功加入购物车";
    }

    //加入购物车
    @RequestMapping("addCart/{menuId}")
    public String addCart(@PathVariable("menuId") String menuId, HttpSession session) {
        User user = comment(session);
        ShoppingCart cart = new ShoppingCart();
        cart.setUserId(Integer.parseInt(user.getId()));
        cart.setMenuId(Integer.parseInt(menuId));
        Integer count = shoppingCartService.selectCountByCart(cart);
        if (count == null || count == 0) {
            cart.setCount(1);
            shoppingCartService.addCart(cart);
        } else {
            cart.setCount(count + 1);
            shoppingCartService.updateCartCount(cart);
        }
        return "redirect:/user/cart";
    }

    //批量删除购物车商品
    @RequestMapping("delAllCart")
    @ResponseBody
    public String delAllCart(String menuIds, HttpSession session) {
        String[] strings = null;
        String string = null;
        if (menuIds.contains("&")) {
            strings = menuIds.split("&");
        } else {
            string = menuIds;
        }
        User user = comment(session);
        if (string == null) {
            for (int i = 0; i < strings.length; i++) {
                ShoppingCart cart = new ShoppingCart();
                cart.setUserId(Integer.parseInt(user.getId()));
                cart.setMenuId(Integer.parseInt(strings[i]));
                shoppingCartService.delCart(cart);
            }
        } else {
            ShoppingCart cart = new ShoppingCart();
            cart.setUserId(Integer.parseInt(user.getId()));
            cart.setMenuId(Integer.parseInt(string));
            shoppingCartService.delCart(cart);
        }

        return "删除成功";
    }

    //购物车商品减一
    @RequestMapping("redCart/{menuId}")
    public String redCart(@PathVariable("menuId") String menuId, HttpSession session) {
        User user = comment(session);
        ShoppingCart cart = new ShoppingCart();
        cart.setUserId(Integer.parseInt(user.getId()));
        cart.setMenuId(Integer.parseInt(menuId));
        Integer count = shoppingCartService.selectCountByCart(cart);
        if (count > 1) {
            cart.setCount(count - 1);
            shoppingCartService.updateCartCount(cart);
        } else {
            shoppingCartService.delCart(cart);
        }
        return "redirect:/user/cart";
    }


    //单个商品下单详情页面
    @RequestMapping("choiceOrders")
    @ResponseBody
    public String choiceOrders(String menuIds, HttpSession session, Model model) {
        User user = comment(session);
        String[] strings = menuIds.split("&");
        //判断用户是否填写地址信息
        Address address = addressService.selectByUserId(user.getId());
        if (address.getAddress() == null || address.getName() == null || address.getPhoneNumber() == null) {
            return "地址信息未填写";
        }
        BigDecimal menuAllPrice = BigDecimal.ZERO;
        BigDecimal menuPrice;
        List<OrdersEntry> entryList = new ArrayList<>();
        for (int i = 0; i < strings.length; i++) {
            //购物车信息
            ShoppingCart cart = new ShoppingCart();
            cart.setUserId(Integer.parseInt(user.getId()));
            cart.setMenuId(Integer.parseInt(strings[i]));
            cart = shoppingCartService.selectCart(cart);
            //订单条目类
            Menu menu = menuService.selectByMenuId(Integer.parseInt(strings[i]));
            OrdersEntry entry = new OrdersEntry();
            entry.setCount(cart.getCount());
            entry.setDishName(menu.getDishName());
            entry.setPrice(menu.getPrice());
            menuPrice = menu.getPrice().multiply(new BigDecimal(cart.getCount()));
            entryList.add(entry);
            //累加计算订单总金额
            menuAllPrice = menuAllPrice.add(menuPrice);
        }
        //订单DTO
        OrdersDto ordersDto = new OrdersDto();
        ordersDto.setOrdersEntryList(entryList);
        ordersDto.setUserId(Integer.parseInt(user.getId()));
        ordersDto.setUserName(address.getName());
        ordersDto.setTotalPrice(menuAllPrice);
        ordersDto.setPhoneNumber(address.getPhoneNumber());
        ordersDto.setOrdersAddress(address.getAddress());
        ordersDto.setRemark(address.getRemark());
        ordersDto.setOrdersState(OrdersStateEnum.ORDERS_STATE_UNPROCESSED.getText());
        ordersDto.setOrdersType(OrdersTypeEnum.ORDERS_TYPE_ENTER.getText());
        model.addAttribute("ordersDto", ordersDto);
        session.setAttribute("choicePageSession", ordersDto);
        session.setAttribute("menuIdsSession", menuIds);
        return "true";
    }

    //单个下单,批量下单
    @ResponseBody
    @Transactional
    @RequestMapping("toOrdersOne")
    public String toOrdersOne(OrdersDto choiceDto, HttpSession session) {
        //判断的地址信息是否填写
        User user = comment(session);
        Address address = addressService.selectByUserId(user.getId());
        if (address.getAddress() == null || address.getName() == null || address.getPhoneNumber() == null) {
            return "地址信息未填写";
        }
        //下单前获取支付密码并判断输入密码是否正确
        Account account = (Account) session.getAttribute("account");
        Wallet wallet = walletService.selectWalletByAccountId(account.getId());
        OrdersDto dtoSession = (OrdersDto) session.getAttribute("choicePageSession");
        //余额判断
        if (dtoSession.getTotalPrice().compareTo(wallet.getMoney()) > 0) {
            return "余额不足";
        }
        if (!wallet.getPayPassword().equals(choiceDto.getPayPwd())) {
            return "密码错误";
        }
        //订单编号生成
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        String ordersNumber = format.format(date).concat(dtoSession.getUserId().toString());
        String menuIdsSession = (String) session.getAttribute("menuIdsSession");
        String[] strings = null;
        String string = null;
        if (menuIdsSession.contains("&")) {
            strings = menuIdsSession.split("&");
        } else {
            string = menuIdsSession;
        }
        //批量下单
        if (null == string) {
            for (String s : strings) {
                //购物车
                ShoppingCart cart = new ShoppingCart();
                cart.setUserId(dtoSession.getUserId());
                cart.setMenuId(Integer.parseInt(s));
                cart = shoppingCartService.selectCart(cart);

                //订单条目类
                Menu menu = menuService.selectByMenuId(Integer.parseInt(s));
                OrdersEntry entry = new OrdersEntry();
                entry.setCount(cart.getCount());
                entry.setDishName(menu.getDishName());
                entry.setOrdersNumber(ordersNumber);
                entry.setPrice(menu.getPrice());
                entryService.addEntry(entry);
                //订单生成后删除购物车中数据
                ShoppingCart cart1 = new ShoppingCart();
                cart1.setUserId(dtoSession.getUserId());
                cart1.setMenuId(Integer.parseInt(s));
                shoppingCartService.delCart(cart1);
                //商品销量加count
                menu.setSale(menu.getSale() + cart.getCount());
                boolean b = menuService.updateDish(menu);
            }
        }
        //单个下单
        else {
            //购物车
            ShoppingCart cart = new ShoppingCart();
            cart.setUserId(dtoSession.getUserId());
            cart.setMenuId(Integer.parseInt(string));
            cart = shoppingCartService.selectCart(cart);

            //订单条目类
            Menu menu = menuService.selectByMenuId(Integer.parseInt(string));
            OrdersEntry entry = new OrdersEntry();
            entry.setCount(cart.getCount());
            entry.setDishName(menu.getDishName());
            entry.setOrdersNumber(ordersNumber);
            entry.setPrice(menu.getPrice());
            entryService.addEntry(entry);
            //订单生成后删除购物车中数据
            ShoppingCart cart1 = new ShoppingCart();
            cart1.setUserId(dtoSession.getUserId());
            cart1.setMenuId(Integer.parseInt(string));
            shoppingCartService.delCart(cart1);
            //商品销量加count
            menu.setSale(menu.getSale() + cart.getCount());
            boolean b = menuService.updateDish(menu);
        }
        //订单
        Orders orders = new Orders();
        orders.setOrdersType(dtoSession.getOrdersType());
        //进店用餐 餐桌信息绑定
        if (dtoSession.getOrdersType().equals(OrdersTypeEnum.ORDERS_TYPE_ENTER.getText())) {
            orders.setOrdersTable(choiceDto.getOrdersTable());
            orders.setOrdersAddress(null);
            String reserveDate = choiceDto.getReserveDate();
            String ordersStartTime = choiceDto.getOrdersStartTime();
            String ordersEndTime = choiceDto.getOrdersEndTime();
            orders.setReserveDate(choiceDto.getReserveDate());
            orders.setOrdersStartTime(choiceDto.getOrdersStartTime());
            orders.setOrdersEndTime(choiceDto.getOrdersEndTime());
            deskService.updDesk(ordersNumber,choiceDto.getOrdersTable(), dtoSession.getUserId(), TableStateEnum.STATE_TRUE.getValue(), reserveDate,ordersStartTime,ordersEndTime);
        } else {
            //外卖配送 地址信息
            orders.setOrdersAddress(choiceDto.getOrdersAddress());
            orders.setOrdersTable(null);
        }
        orders.setPhoneNumber(choiceDto.getPhoneNumber());
        orders.setRemark(choiceDto.getRemark());
        orders.setUserId(dtoSession.getUserId());
        orders.setOrdersState(dtoSession.getOrdersState());
        orders.setOrdersType(dtoSession.getOrdersType());
        orders.setOrdersNumber(ordersNumber);
        orders.setUserName(dtoSession.getUserName());
        orders.setTotalPrice(dtoSession.getTotalPrice());
        ordersService.addOrders(orders);
        //钱包减
        BigDecimal subtract = wallet.getMoney().subtract(dtoSession.getTotalPrice());
        wallet.setMoney(subtract);
        walletService.updateWallet(wallet);
        return "下单成功";
    }

    //更新订单信息
    @ResponseBody
    @Transactional
    @RequestMapping("toUpdateOrders")
    public String toUpdateOrders(OrdersDto choiceDto, HttpSession session) {

        //下单前获取支付密码并判断输入密码是否正确
        Account account = (Account) session.getAttribute("account");
        //获取订单类型
        OrdersDto ordersDtoGetType = (OrdersDto)session.getAttribute("choicePageSession");
        //获取修改的订单编号
        String ordersNumberUpd = (String) session.getAttribute("ordersNumberUpd");
        Wallet wallet = walletService.selectWalletByAccountId(account.getId());
        if (!wallet.getPayPassword().equals(choiceDto.getPayPwd())) {
            return "密码错误";
        }
        //根据订单编号,更新订单信息
        Orders orders = new Orders();
        orders.setOrdersNumber(ordersNumberUpd);
        orders.setOrdersType(ordersDtoGetType.getOrdersType());
        //获取用户id
        User user = userService.selectByAccountId(Integer.parseInt(account.getId()));
        //进店用餐
        if (orders.getOrdersType().equals(OrdersTypeEnum.ORDERS_TYPE_ENTER.getText())){
            orders.setOrdersAddress(null);
            orders.setOrdersTable(choiceDto.getOrdersTable());
            String reserveDate = choiceDto.getReserveDate();
            String ordersStartTime =choiceDto.getOrdersStartTime();
            String ordersEndTime = choiceDto.getOrdersEndTime();
            orders.setReserveDate(choiceDto.getReserveDate());
            orders.setOrdersStartTime(choiceDto.getOrdersStartTime());
            orders.setOrdersEndTime(choiceDto.getOrdersEndTime());
            deskService.updDesk(ordersNumberUpd,choiceDto.getOrdersTable(), Integer.parseInt(user.getId()), TableStateEnum.STATE_TRUE.getValue(), reserveDate,ordersStartTime,ordersEndTime);
        }
        //外卖配送
        else{
            orders.setOrdersAddress(choiceDto.getOrdersAddress());
            orders.setOrdersTable(null);
        }
        orders.setPhoneNumber(choiceDto.getPhoneNumber());
        orders.setRemark(choiceDto.getRemark());
        return ordersService.updateOrdersByNumber(orders);
    }


    //下单  订单类型
    @RequestMapping("ordersType/{type}")
    public String ordersType(@PathVariable("type") Integer type, HttpSession session,Model model) {
        String ordersType = "进店用餐";
        if (type == 1) {
            ordersType = "外卖配送";
        }
        OrdersDto choicePageSession = (OrdersDto) session.getAttribute("choicePageSession");
        choicePageSession.setOrdersType(ordersType);
        session.removeAttribute("choicePageSession");
        session.setAttribute("choicePageSession", choicePageSession);
        model.addAttribute("ordersDto", choicePageSession);
        return "user/choicePage";
    }

    //订单修改  订单类型
    @RequestMapping("ordersUpdType/{type}")
    public String ordersUpdType(@PathVariable("type") Integer type, HttpSession session,Model model) {
        String ordersType = "进店用餐";
        if (type == 1) {
            ordersType = "外卖配送";
        }
        OrdersDto choicePageSession = (OrdersDto) session.getAttribute("choicePageSession");
        choicePageSession.setOrdersType(ordersType);
        session.removeAttribute("choicePageSession");
        session.setAttribute("choicePageSession", choicePageSession);
        model.addAttribute("ordersDto", choicePageSession);
        return "user/editOrdersPage";
    }

    @RequestMapping("zhuan")
    public String zhuan(HttpSession session, Model model) {
        OrdersDto choicePageSession = (OrdersDto) session.getAttribute("choicePageSession");
        model.addAttribute("ordersDto", choicePageSession);
        return "user/choicePage";
    }

    //公共方法
    private User comment(HttpSession session) {
        Account account = (Account) session.getAttribute("account");
        return userService.selectByAccountId(Integer.parseInt(account.getId()));
    }

}

三、系统展示

系统首页:可以通过餐品类别进行筛选。同时可以看到留言板,也可以进行留言。

基本信息:可更改自己的基本信息。

购物车信息:可以查看购物车的菜品,可以进行删除、下单。

菜品下单:可以备注预约餐桌与时间。支持进店用餐和外卖配送。

订单信息:查看订单详情,支持添加商品、修改信息、取消订单。

地址管理:如需外卖配送需要填写配送地址。

我的钱包:可以进行重置与更改密码。

投诉信息:可以对商家进行投诉。

后台管理员登录页面。

用户管理:可以重置用户密码。

钱包管理:查看用户钱包剩余金额。

菜品管理:可以新增、删除、修改。

餐桌管理:支持用户进店就餐。

订单管理:分为四种订单未处理、处理中、已完成、已取消订单。

留言管理:可以选择优质留言在首页进行展示。

投诉管理:商家可看到投诉信息并进行处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1344942.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jmeter吞吐量控制器总结

吞吐量控制器(Throughput Controller) 场景&#xff1a; 在同一个线程组里, 有10个并发, 7个做A业务, 3个做B业务,要模拟这种场景,可以通过吞吐量模拟器来实现。 添加吞吐量控制器 用法1: Percent Executions 在一个线程组内分别建立两个吞吐量控制器, 分别放业务A和业务B …

行车记录仪变清晰,变高清的办法一定要收藏

有时候我们会发现行车记录仪拍摄的视频不够清晰&#xff0c;特别是出现事故需要视频为证的时候&#xff0c;如果视频太模糊&#xff0c;很难获得交警的支持&#xff0c;那么如何让行车记录仪拍摄的视频变得更加清晰呢&#xff1f; 小编给大家分享几个办法&#xff0c;建议收藏…

山西电力市场日前价格预测【2023-12-31】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-31&#xff09;山西电力市场全天平均日前电价为445.23元/MWh。其中&#xff0c;最高日前电价为791.27元/MWh&#xff0c;预计出现在08:15。最低日前电价为270.52元/MWh&#xff0c;预计…

SpringIOC之ApplicationObjectSupport

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

LT8612UX-HDMI2.0 to HDMI2.0 and VGA Converter with Audio,支持三通道视频DAC

HDMI2.0 to HDMI2.0 and VGA Converter with Audio 1. 描述 LT8612UX是一个HDMI到HDMI和vga转换器&#xff0c;它将HDMI2.0数据流转换为HDMI2.0信号和模拟RGB信号。 它还输出8通道I2S和SPDIF信号&#xff0c;使高质量的7.1通道音频。 LT8612UX支持符合HDMI2.0/ 1.4规范的…

k8s搭建(五、k8s可视化管理工具Dashboard配置)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【Java开发岗面试】八股文—数据库MySQLRedis

声明&#xff1a; 背景&#xff1a;本人为24届双非硕校招生&#xff0c;已经完整经历了一次秋招&#xff0c;拿到了三个offer。本专题旨在分享自己的一些Java开发岗面试经验&#xff08;主要是校招&#xff09;&#xff0c;包括我自己总结的八股文、算法、项目介绍、HR面和面试…

一起玩儿物联网人工智能小车(ESP32)——20. PWM(脉冲宽度调制)技术初探

摘要&#xff1a;本文主要介绍脉冲宽度调制技术的基本知识。 今天继续完善智能小车的功能。前面&#xff0c;已经通过控制ESP32的GPIO引脚输出高低电平来实现了小车向各个方向行走的运动。但能走只是最基础的功能&#xff0c;下面就来学习在智能小车行走的时候&#xff0c;如何…

元旦特辑:Note5---插入排序

目录 前言&#x1faa9; 1. 排序的概念运用&#x1f7e3; 1.1 排序的概念&#x1f7ea; 1.2 排序的运用&#x1f49c; 2. 直接插入排序&#x1f7e2; 2.1 基本思想&#x1f7e9; 2.2 思路分析&#x1f49a; 2.3 代码实现✅ 2.3.1 sort.h 2.3.2 sort.c 2.3.3 test.c …

Linux网络编程学习心得.4

1.epoll工作模式 水平触发 LT 边沿触发 ET 因为设置为水平触发,只要缓存区有数据epoll_wait就会被触发,epoll_wait是一个系统调用,尽量少调用 所以尽量使用边沿触发,边沿出触发数据来一次只触发一次,这个时候要求一次性将数据读完,所以while循环读,读到最后read默认带阻塞…

设计模式——行为型模式

模板方法模式 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式&#xff0c;前者采用继承机制来在类间…

专访大华智慧运营:利用物联网技术,加快融合智能

近日&#xff0c;指令集智能科技到访浙江大华智慧物联运营服务有限公司&#xff0c;对产品研发部总经理孙旭先生进行了深度采访。孙旭先生在采访中表示“现在行业对于运营服务的诉求越来越高&#xff0c;而针对物理空间的运营&#xff0c;最典型的特征就是要靠物联网产品支撑……

嵌入式科普(8)ESP-IDF newlib相关介绍和对比分析

一、目的/概述 二、资料来源 三、ESP-IDF简介 3.1 ESP-IDF FreeRTOS 3.2 ESP-IDF heap_caps 3.3 ESP-IDF newlib 四、对比 嵌入式科普(8)ESP-IDF newlib相关介绍和对比分析 一、目的/概述 1、在我的嵌入式科普(6)你听说过FreeRTOS heap6吗&#xff1f;…

命令模式-举例

开关和电灯之间并不存在直接耦合关系&#xff0c;在命令模式中&#xff0c;发送者与接收者之间引入了新的命令对象&#xff0c;将发送者的请求封装在命令对象中&#xff0c;再通过命令对象来调用接收者的方法。 命令模式的主要缺点如下&#xff1a; 使用命令模式可能会导致某…

Halcon纹理分析texture_laws/trans_from_rgb

Halcon纹理分析 文章目录 Halcon纹理分析1. 纹理滤波器2. 织物折痕检测 纹理是图像表面的一种灰度变化。有的纹理很规则&#xff0c;会以局部小区域为单元重复出现&#xff0c;而有的纹理则呈现出随机性。对于规则的纹理&#xff0c;可以很容易地从中分辨出重复的区域&#xff…

【BERT】深入理解BERT模型1——模型整体架构介绍

前言 BERT出自论文&#xff1a;《BERT&#xff1a;Pre-training of Deep Bidirectional Transformers for Language Understanding》 2019年 近年来&#xff0c;在自然语言处理领域&#xff0c;BERT模型受到了极为广泛的关注&#xff0c;很多模型中都用到了BERT-base或者是BE…

一个静态网站可以增加什么第三方功能/服务

一个静态网站&#xff0c;无后台功能&#xff0c;怎么增加一些实用功能呢&#xff1f;我们来看看一些免费的第三方服务。 静态页面寄存 Gitee pages/Github pages 都可以&#xff0c;绑定一个域名&#xff0c;版本一提交&#xff0c;直接发布有效果。 评论 每个 URL 页面都…

从零开始学Python系列课程第17课:容器型数据类型之列表(上)

前言 列表算是 Python 中比较常用的一种容器型数据类型&#xff0c;那么什么是列表&#xff0c;列表有什么样的作用致使它在 Python 中这么受欢迎呢&#xff1f;这便是接下来我们要一起讨论的问题。 在不久之前我们讲过变量&#xff0c;我们将数据使用变量保存&#xff0c;但是…

【动态规划精选题目】3、简单多状态模型

此动态规划系列主要讲解大约10个系列【后续持续更新】 本篇讲解简单多状态模型中的9道经典题&#xff0c;会在讲解题目同时给出AC代码 目录 1、按摩师 2、力扣198:打家劫舍1 3、打家劫舍II 4、删除并获得点数 5、 粉刷房子 6、力扣309:买卖股票的最佳时机含冷冻期 7、 买…

MySQL入门教程-触发器

9.触发器 什么是触发器 触发器(trigger)&#xff1a;监视某种情况&#xff0c;并进行某种操作&#xff0c;它的执行并不是程序调用&#xff0c;也不是手工启动&#xff0c;而是由事件来触发&#xff0c;例如&#xff1a;对一张表进行操作&#xff08;插入&#xff0c;更新&…