✨作者主页:IT毕设梦工厂✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目
一、前言
随着移动互联网的快速发展,智能手机和移动应用已经成为了人们日常生活中不可或缺的一部分。在这种背景下,点餐小程序和安卓APP应运而生,为用户提供了便捷的点餐服务。用户可以通过这些应用轻松地浏览菜单、下单、支付,节省了在餐厅排队等待的时间。同时,管理人员可以实时查看订单信息、管理商品和库存,提高了运营效率。因此,研究点餐小程序和安卓APP的开发具有重要的现实意义,有助于满足市场需求,提高用户体验。
尽管市场上已经存在一些点餐应用,但它们在功能、性能和用户体验等方面仍存在一定的问题。例如,部分应用的界面设计不够直观,用户难以快速找到所需功能;有些应用在处理大量订单时,性能下降,导致用户等待时间过长;还有一些应用缺乏安全措施,容易泄露用户隐私。这些问题制约了点餐应用的广泛应用,进一步强调了研究和开发更加便捷的点餐小程序和安卓APP的必要性。
本课题旨在设计并实现一款功能完善、性能优越、用户体验良好的点餐小程序和安卓APP。通过研究用户需求、优化界面设计、提高系统性能、加强安全防护等措施,实现用户管理、商品分类管理、美食信息管理、公告信息管理、订单管理等功能。本课题的研究目的在于为用户提供更加便捷的点餐服务,同时帮助管理人员提高运营效率,降低成本。
本课题的研究意义主要体现在以下几个方面:首先,有助于推动移动互联网产业的发展,满足市场对便捷点餐服务的需求;其次,通过优化现有解决方案,提高点餐应用的用户体验,有助于吸引更多用户使用,从而提高市场占有率;再次,本课题的研究将为相关领域的研究者提供有益的借鉴和启示,推动计算机科学在实际应用中的创新和发展。
二、开发环境
- 开发语言:Java
- 数据库:MySQL
- 系统架构:B/S
- 后端:SpringBoot
- 前端:微信小程序/Android+uniapp+Vue
三、系统界面展示
- 点餐微信小程序/安卓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-项目实战
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:⬇⬇⬇