计算机毕业设计选题推荐-点餐微信小程序/安卓APP-项目实战

news2024/12/24 10:01:08

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

文章目录

  • 一、前言
  • 二、开发环境
  • 三、系统界面展示
  • 四、部分代码设计
  • 五、论文参考
  • 六、系统视频
  • 结语

一、前言

随着移动互联网的快速发展,智能手机和移动应用已经成为了人们日常生活中不可或缺的一部分。在这种背景下,点餐小程序和安卓APP应运而生,为用户提供了便捷的点餐服务。用户可以通过这些应用轻松地浏览菜单、下单、支付,节省了在餐厅排队等待的时间。同时,管理人员可以实时查看订单信息、管理商品和库存,提高了运营效率。因此,研究点餐小程序和安卓APP的开发具有重要的现实意义,有助于满足市场需求,提高用户体验。

尽管市场上已经存在一些点餐应用,但它们在功能、性能和用户体验等方面仍存在一定的问题。例如,部分应用的界面设计不够直观,用户难以快速找到所需功能;有些应用在处理大量订单时,性能下降,导致用户等待时间过长;还有一些应用缺乏安全措施,容易泄露用户隐私。这些问题制约了点餐应用的广泛应用,进一步强调了研究和开发更加便捷的点餐小程序和安卓APP的必要性。

本课题旨在设计并实现一款功能完善、性能优越、用户体验良好的点餐小程序和安卓APP。通过研究用户需求、优化界面设计、提高系统性能、加强安全防护等措施,实现用户管理、商品分类管理、美食信息管理、公告信息管理、订单管理等功能。本课题的研究目的在于为用户提供更加便捷的点餐服务,同时帮助管理人员提高运营效率,降低成本。

本课题的研究意义主要体现在以下几个方面:首先,有助于推动移动互联网产业的发展,满足市场对便捷点餐服务的需求;其次,通过优化现有解决方案,提高点餐应用的用户体验,有助于吸引更多用户使用,从而提高市场占有率;再次,本课题的研究将为相关领域的研究者提供有益的借鉴和启示,推动计算机科学在实际应用中的创新和发展。

二、开发环境

  • 开发语言:Java
  • 数据库:MySQL
  • 系统架构:B/S
  • 后端:SpringBoot
  • 前端:微信小程序/Android+uniapp+Vue

三、系统界面展示

  • 点餐微信小程序/安卓APP系统界面展示:
    点餐微信小程序/安卓APP-菜品详情
    点餐微信小程序/安卓APP-个人中心
    点餐微信小程序/安卓APP-购物车
    点餐微信小程序/安卓APP-我的订单
    点餐微信小程序/安卓APP-美食信息管理
    点餐微信小程序/安卓APP-订单管理

四、部分代码设计

  • 微信小程序/安卓APP项目实战-代码参考:
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/sendMsg")
    public R<String> sendMsg(@RequestBody User user, HttpSession session){
        //获取手机号
        String phone = user.getPhone();
        if(StringUtils.isNotEmpty(phone)){
            //生成随机验证码
            String code = ValidateCodeUtils.generateValidateCode(4).toString();
            log.info("验证码为{}",code);
            //阿里云短信服务Api
//            SMSUtils.sendMessage("签名","模板",phone,code);

            //需要将生成的验证码保存到session
            session.setAttribute(phone,code);
            return R.success("手机验证码发送成功");
        }
        return R.error("手机验证码发送失败");
    }



    @PostMapping("/login")
    public R<User> login(@RequestBody Map user, HttpSession session){
//        log.info("map{}",user);
        String phone = (String) user.get("phone");
        String code = (String) user.get("code");

        String sessionCode = (String) session.getAttribute(phone);
        log.info(sessionCode);
        if(!code.equals("")){
            if(code.equals(sessionCode)){
                //登录成功
                //判断当前手机号对应的用户是否为新用户,如果是则自动完成注册
                LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
                queryWrapper.eq(User::getPhone,phone);
                User user1 = userService.getOne(queryWrapper);
                if(user1==null){
                    //新用户
                    user1 =new User();
                    user1.setPhone(phone);
                    user1.setStatus(1);
                    userService.save(user1);
                }
                session.setAttribute("user",user1.getPhone());
                return R.success(user1);
            }else {
                return R.error("验证码错误");
            }
        }else {
            return R.error("请输入验证码");
        }
    }


}
@RestController
@RequestMapping("/shoppingCart")
@Slf4j
public class ShoppingCartController {

    @Autowired
    private ShoppingCartService shoppingCartService;


    //菜品添加
    @PostMapping("/add")
    public R<ShoppingCart> add(@RequestBody ShoppingCart shoppingCart){
        log.info("{}",shoppingCart);

        //设置用户id,指定当前是哪个用户的购物车
        Long userId = BaseContext.getCurrentId();
        shoppingCart.setUserId(userId);
        LambdaQueryWrapper<ShoppingCart> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(ShoppingCart::getUserId,shoppingCart.getUserId());

        //查询当前菜品/套餐是否在购物车中
        if(shoppingCart.getDishId()!=null){
            //添加的是菜品
            lambdaQueryWrapper.eq(ShoppingCart::getDishId,shoppingCart.getDishId());

        }else {
            //套餐
            lambdaQueryWrapper.eq(ShoppingCart::getSetmealId,shoppingCart.getSetmealId());
        }
        ShoppingCart cartServiceOne = shoppingCartService.getOne(lambdaQueryWrapper);
        if(cartServiceOne!=null){
            //已经存在,原来数量基础上加一
            Integer number = cartServiceOne.getNumber();
            cartServiceOne.setNumber(++number);
            shoppingCartService.updateById(cartServiceOne);
        }else {
            //不存在则加入购物车,熟练默认为1
            shoppingCart.setNumber(1);
            shoppingCart.setCreateTime(LocalDateTime.now());
            shoppingCartService.save(shoppingCart);
            cartServiceOne=shoppingCart;
        }
        return R.success(cartServiceOne);
    }


    //菜品删除
    @PostMapping("/sub")
    public R<ShoppingCart> sub(@RequestBody ShoppingCart shoppingCart){
        Long dishId = shoppingCart.getDishId();
        Long setmealId = shoppingCart.getSetmealId();
        Long currentId = BaseContext.getCurrentId();
        LambdaQueryWrapper<ShoppingCart> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ShoppingCart::getUserId,currentId);

        ShoppingCart shoppingCart1 = new ShoppingCart();

        if(dishId!=null){
            queryWrapper.eq(ShoppingCart::getDishId,dishId);
            ShoppingCart cart = shoppingCartService.getOne(queryWrapper);
            Integer number = cart.getNumber();
            if(number>1){
                cart.setNumber(number-1);
                shoppingCartService.updateById(cart);
                shoppingCart1 = cart;
            }else {
                shoppingCartService.removeById(cart);
            }
        }else {
            queryWrapper.eq(ShoppingCart::getSetmealId,setmealId);
            ShoppingCart cart = shoppingCartService.getOne(queryWrapper);
            Integer number = cart.getNumber();
            if(number>1){
                cart.setNumber(number-1);
                shoppingCartService.updateById(cart);
                shoppingCart1 = cart;
            }else {
                shoppingCartService.removeById(cart);
            }
        }
        return R.success(shoppingCart1);
    }


    //菜品清空
    @DeleteMapping("/clean")
    public R<String> clean(){
        Long currentId = BaseContext.getCurrentId();
        LambdaQueryWrapper<ShoppingCart> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ShoppingCart::getUserId,currentId);
        shoppingCartService.remove(queryWrapper);
        return R.success("清空成功 ");
    }


    //查看购物车
    @GetMapping("/list")
    public R<List<ShoppingCart>> list(){

        LambdaQueryWrapper<ShoppingCart> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(ShoppingCart::getUserId,BaseContext.getCurrentId());
        lambdaQueryWrapper.orderByAsc(ShoppingCart::getCreateTime);
        List<ShoppingCart> list = shoppingCartService.list(lambdaQueryWrapper);
        return R.success(list);
    }

}
//菜品管理
@Slf4j
@RestController
@RequestMapping("/dish")
public class DishController {
    @Autowired
    private DishService dishService;
    @Autowired
    private DishFlavorService dishFlavorService;
    @Autowired
    private CategoryService categoryService;

    @PostMapping
    public R<String> save(@RequestBody DishDto dishDto) {
        log.info("{}",dishDto);
        dishService.saveWithFlavor(dishDto);

        return R.success("新增菜品成功");
    }


    //菜品信息分页
    @GetMapping("/page")
    public  R<Page> page(int page,int pageSize,String name){
        //构造分页构造对象
        Page<Dish> pageInfo = new Page<>(page,pageSize);
        Page<DishDto> dishDtoPageInfo = new Page<>(page,pageSize);

        //构造条件构造器
        LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();

        //过滤条件
        queryWrapper.like(name != null,Dish::getName,name);

        //排序条件
        queryWrapper.orderByDesc(Dish::getUpdateTime);
        //执行查询
        dishService.page(pageInfo,queryWrapper);
        //对象拷贝
        BeanUtils.copyProperties(pageInfo,dishDtoPageInfo,"records");
        List<Dish> records = pageInfo.getRecords();

        List<DishDto> list = records.stream().map((item) ->{
            DishDto dishDto = new DishDto();
            BeanUtils.copyProperties(item,dishDto);
            Long categoryId = item.getCategoryId();//分类ID
            Category category = categoryService.getById(categoryId);    //根据id查询分类对象

            if(category!=null){
                String categoryName = category.getName();
                dishDto.setCategoryName(categoryName);
            }


            return dishDto;
        }).collect(Collectors.toList());
        dishDtoPageInfo.setRecords(list);

        return R.success(dishDtoPageInfo);
    }

    /*
    这是一个Java注解,用于将URL中的路径变量绑定到方法参数中。
    当使用@GetMapping、@PostMapping等注解映射URL时,
    可以使用@PathVariable注解将URL中的特定部分(如/{id}中的{id})作为参数传递给方法。
    在这个例子中,@PathVariable注解将URL中的id部分作为参数传递给get方法,并将该参数赋值给long类型的参数id。
     */
    //根据id查询菜品信息和口味信息
    @GetMapping("/{id}")
    public R<DishDto> get(@PathVariable long id){
        DishDto dishDto = dishService.getByIdWithFlavor(id);
        return R.success(dishDto);
    }


    //修改菜品
    @PutMapping
    public R<String> update(@RequestBody DishDto dishDto) {
        dishService.updateWithFlavor(dishDto);
        return R.success("保存菜品成功");
    }


    //批量修改状态(停售,起售)
    //  http://localhost:8080/dish/status/0?ids=1706991338056179713
    // 从这个请求中获取0和ids
    @PostMapping("/status/{code}")
    public R<String> setStatus(@PathVariable int code,@RequestParam List<Long> ids){
//        log.info(String.valueOf(ids));
//
//        for (Long id : ids) {
//            //更改ids的
//            Dish dish = dishService.getById(id);
//            dish.setStatus(code);
//            dishService.updateById(dish);
//        }

        LambdaUpdateWrapper<Dish> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.in(ids!=null,Dish::getId,ids);
        updateWrapper.set(Dish::getStatus,code);
        dishService.update(updateWrapper);

        return R.success("修改状态成功");
    }


    //批量删除
    @DeleteMapping
    public R<String> delete(@RequestParam List<Long> ids){
        dishService.deleteWithDishFlavors(ids);
        return R.success("删除成功");
    }



    //根据条件查询对应菜品数据
//    @GetMapping("/list")
//    public R<List<Dish>> list(Dish dish){
//
//        //构造条件查询对象
//        LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(dish.getCategoryId()!= null,Dish::getCategoryId,dish.getCategoryId());
//        //添加条件状态为1
//        queryWrapper.eq(Dish::getStatus,1);
//
//        //添加排序条件
//        queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
//
//        List<Dish> list = dishService.list(queryWrapper);
//
//
//        return R.success(list);
//    }

    @GetMapping("/list")
    public R<List<DishDto>> list(Dish dish){

        //构造条件查询对象
        LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(dish.getCategoryId()!= null,Dish::getCategoryId,dish.getCategoryId());
        //添加条件状态为1
        queryWrapper.eq(Dish::getStatus,1);

        //添加排序条件
        queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);

        List<Dish> list = dishService.list(queryWrapper);

        List<DishDto> dishDtoList = list.stream().map((item) ->{
            DishDto dishDto = new DishDto();
            BeanUtils.copyProperties(item,dishDto);
            Long categoryId = item.getCategoryId();//分类ID
            Category category = categoryService.getById(categoryId);    //根据id查询分类对象

            if(category!=null){
                String categoryName = category.getName();
                dishDto.setCategoryName(categoryName);
            }
            //当前菜品id
            Long dishId = item.getId();
            LambdaQueryWrapper<DishFlavor> queryWrapper1 = new LambdaQueryWrapper<>();
            queryWrapper1.eq(DishFlavor::getDishId,dishId);
            List<DishFlavor> flavors = dishFlavorService.list(queryWrapper1);
            dishDto.setFlavors(flavors);

            return dishDto;
        }).collect(Collectors.toList());

        return R.success(dishDtoList);
    }

}

五、论文参考

  • 计算机毕业设计选题推荐-点餐微信小程序/安卓APP-论文参考:
    计算机毕业设计选题推荐-点餐微信小程序/安卓APP-论文参考

六、系统视频

点餐微信小程序/安卓APP-项目视频:

结语

计算机毕业设计选题推荐-点餐微信小程序/安卓APP-项目实战
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:⬇⬇⬇

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

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

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

相关文章

吴恩达《机器学习》9-1-9-3:反向传播算法、反向传播算法的直观理解

一、正向传播的基础 在正向传播中&#xff0c;从神经网络的输入层开始&#xff0c;通过一层一层的计算&#xff0c;最终得到输出层的预测结果。这是一种前向的计算过程&#xff0c;即从输入到输出的传播。 二、反向传播算法概述 反向传播算法是为了计算代价函数相对于模型参数…

贝锐蒲公英路由器X4C如何远程访问NAS?

在目前网盘前路坎坷的情况下&#xff0c;私人云盘已然是一种新的趋势&#xff01;那自己打造一个私有云盘&#xff0c;是否需要高成本或是高门槛呢&#xff1f;其实并不用&#xff01;蒲公英针对个人玩家打造了全方位的私有云解决方案。 &#xff08;1&#xff09;入门级玩家只…

argocd

部署argocd https://github.com/argoproj/argo-cd/releases kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.9.1/manifests/install.yaml官网 https://argo-cd.readthedocs.io/en/stable/ kubectl crea…

基于灰色神经网络的预测算法——订单需求预测

大家好&#xff0c;我是带我去滑雪&#xff01; 灰色系统理论的不确定性处理与神经网络的非线性建模相结合&#xff0c;有望更好地处理实际问题中的不确定性和复杂性。本期使用灰色神经网络实现预测冰箱订单需求。 一、问题背景与模型建立 &#xff08;1&#xff09;灰色理论…

物联网AI MicroPython学习之语法 TIMER硬件定时器

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; TIMER 介绍 模块功能: 硬件定时器模块 接口说明 Timer - 构建Timer对象 函数原型&#xff1a;Timer(id)参数说明&#xff1a; 参数类型必选参数&#xff1f;说明idintY硬件定时器外设模块id&#xff1a…

计算机毕业设计项目选题推荐(免费领源码)java+Springboot+mysql高校自习室座位预约管理系统67512

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对高校自习室座位预约管理系统等问题&#xf…

IIC 实验

IIC 简介 IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线&#xff0c;用于连接微 控制器以及其外围设备。它是由数据线 SDA 和时钟线 SCL 构成的串行总线&#xff0c;可发送和接收数 据&#xff0c;在 CPU 与被控 IC 之间、IC 与 IC 之间进行双…

VBA之Word应用:文档(Document)的书签

《VBA之Word应用》&#xff08;版权10178982&#xff09;&#xff0c;是我推出第八套教程&#xff0c;教程是专门讲解VBA在Word中的应用&#xff0c;围绕“面向对象编程”讲解&#xff0c;首先让大家认识Word中VBA的对象&#xff0c;以及对象的属性、方法&#xff0c;然后通过实…

虚拟机配置完NAT模式之后可以和主机ping通但是ping 百度显示:网络不可达

具体linux网络配置看这&#xff1a;http://t.csdnimg.cn/KRami 解决方案如下&#xff1a; 如果这里网关为空&#xff0c;那么和我遇到的问题一样网关没有设置上&#xff0c;在这直接配置网关之后重启即可

java--贪吃蛇

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Random;public class Snake extends JFrame implements KeyListener, ActionListener, MouseListener {int slong 2;//蛇当前长度//蛇坐标int[] Snakex new int[100];int[] Snakey new…

Google codelab WebGPU入门教程源码<2> - 绘制几何形状(源码)

对应的教程文章: https://codelabs.developers.google.com/your-first-webgpu-app?hlzh-cn#3 源码执行效果: 对应的教程源码: 此处源码和教程本身提供的部分代码可能存在一点差异。 class Color4 {r: number;g: number;b: number;a: number;constructor(pr 1.0, pg 1.0, …

Nginx(七) root和alias的区别及详细测试

本篇文章只讲root和alias的区别&#xff0c;配置文件详解请参考 Nginx(三) 配置文件详解&#xff0c;下面开始进行测试。 Nginx配置如下&#xff1a; server {listen 8688 default_server;server_name www.read******.cn;access_log logs/access.log format2;root pages;set …

【信息安全】浅谈SQL注入攻击的概念、原理和防范措施:简单分析六种常见攻击方式

银狼美图镇楼 用户登录 在开发Web应用程序时&#xff0c;用户登录是一个非常常见的功能。然而&#xff0c;不安全的用户登录功能可能会导致安全漏洞&#xff0c;例如SQL注入和跨站脚本攻击。 SQL注入 SQL注入是一种常见的攻击技术&#xff0c;攻击者通过在用户输入的数据中插…

BGP基本配置

配置逻辑 完成所有路由器的IGP配置使用直连接口建立EBGP对等体关系使用环回接口建立IBGP对等体关系使用connect-interface命令修改IBGP建邻源IP地址使用next-hop-local命令修改路由传递时的下一跳属性若存在使用环回接口建立EBGP对等体关系&#xff0c;则需要建立通讯条件&…

FastJson竟然会导致内存泄露?你遇到过吗?

FastJson是一款性能优异的java序列化和反序列框架&#xff0c;广泛应用于日常开发工作中&#xff0c;也许正是因为作者在设计这款框架时&#xff0c;比较注重性能方面的考量&#xff0c;在框架安全性&#xff0c;空间占用等方面做了一些牺牲。 很不幸小编前两天就遇到了一个使…

Ubuntu中apt-get update显示域名解析失败

第一步 检查主机->虚拟机能否ping成功 ping 红色框中的IPv4地址 能通&#xff0c;表示虚拟机ip配置成功;否则&#xff0c;需要先配置虚拟机ip 第二步 检查是否能ping成功百度网址 ping www.baidu.com 若不成功&#xff0c;可能原因 虚拟机没联网&#xff0c;打开火狐浏览器…

go学习之简单项目

项目 文章目录 项目1.项目开发流程图2.家庭收支记账软件项目2&#xff09;项目代码实现3&#xff09;具体功能实现 3.客户信息管理系统1&#xff09;项目需求说明2&#xff09;界面设计3&#xff09;项目框架图4&#xff09;流程5&#xff09;完成显示客户列表的功能6&#xff…

leetcode刷题日记:190. Reverse Bits(颠倒二进制位)和191. Number of 1 Bits( 位1的个数)

190. Reverse Bits&#xff08;颠倒二进制位&#xff09; 题目要求我们将一个数的二进制位进行颠倒&#xff0c;画出图示如下(以8位二进制为例)&#xff1a; 显然对于这种问题我们需要用到位操作&#xff0c;我们需要将原数的每一位取出来然后颠倒之后放进另一个数。 我们需要…

被锁总时间

题目描述&#xff1a; 对一个事务进行加锁与解锁&#xff0c;其中有加锁数组&#xff0c;解锁数组&#xff0c;这两个数组长度相等&#xff0c;且数组内数据代表加锁与解锁的具体时间点&#xff0c;求给出数组中事务的总被锁时间。&#xff08;其中加锁后默认在60秒后解锁&…