java实现简易外卖订餐系统

yizhihongxing

Java实现简易外卖订餐系统攻略

简介

本项目是一个简单的外卖订餐系统,使用Java语言实现,主要功能包括选择菜品,下单,查询订单等。

准备工作

在开始实现之前,我们需要完成一些准备工作。

环境准备

  1. 安装JDK,并配置环境变量。

  2. 安装Eclipse或IntelliJ IDEA等Java开发工具。

技术选型

  1. 使用Java语言编写。

  2. 使用Maven管理依赖。

  3. 使用Spring框架进行依赖注入和AOP编程。

  4. 使用MyBatis框架进行数据访问。

  5. 使用MySQL作为数据库。

实现步骤

1. 创建数据库

本系统中使用的是MySQL数据库。

在MySQL中创建一个名为"order_system"的数据库,执行以下SQL语句:

CREATE DATABASE order_system;

2. 创建表

在"order_system"数据库中创建三个表:

2.1 customer

存储顾客信息的表。

CREATE TABLE `customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `phone` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.2 menu

存储菜单信息的表。

CREATE TABLE `menu` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `price` float NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.3 order

存储订单信息的表。

CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_id` int(11) NOT NULL,
  `menu_id` int(11) NOT NULL,
  `count` int(11) NOT NULL,
  `total_price` float NOT NULL,
  `create_time` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3. 创建Java工程

使用Eclipse或IntelliJ IDEA等Java开发工具,创建一个Maven工程。

4. 配置数据源和MyBatis

在pom.xml文件中添加以下依赖:

<!--数据源-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.20</version>
</dependency>

<!--MyBatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

在application.yml文件中配置数据源和MyBatis:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/order_system?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    # druid配置
    type: com.alibaba.druid.pool.DruidDataSource
    initial-size: 5
    min-idle: 5
    max-active: 20
    max-wait: 60000
    # 配置Druid监控
    filters: stat,wall,log4j
    use-global-data-source-stat: false
    connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: cn.edu.nju.entity

5. 创建实体类和Mapper

5.1 实体类

在src/main/java/cn/edu/nju/entity目录下创建Customer、Menu、Order三个类,分别对应数据库中的三个表。

public class Customer {
    private int id;
    private String name;
    private String phone;
    //...
}

public class Menu {
    private int id;
    private String name;
    private float price;
    //...
}

public class Order {
    private int id;
    private int customerId;
    private int menuId;
    private int count;
    private float totalPrice;
    private Date createTime;
    //...
}

5.2 Mapper

在src/main/java/cn/edu/nju/mapper目录下创建CustomerMapper、MenuMapper、OrderMapper三个接口,用于操作数据库中的三个表。

public interface CustomerMapper {
    List<Customer> findAll();
    void insert(Customer customer);
    //...
}

public interface MenuMapper {
    List<Menu> findAll();
    //...
}

public interface OrderMapper {
    void insert(Order order);
    List<Order> findByCustomerId(int customerId);
    //...
}

在src/main/resources/mapper目录下创建这三个接口的xml文件CustomerMapper.xml、MenuMapper.xml、OrderMapper.xml。

用于实现数据库的增删改查操作。

6. 编写业务逻辑和控制器

6.1 业务逻辑

在src/main/java/cn/edu/nju/service目录下创建CustomerService、MenuService、OrderService三个类,用于实现业务逻辑。

@Service
public class CustomerService {
    // 使用注入的CustomerMapper进行数据库操作
    @Autowired
    private CustomerMapper customerMapper;
    public void add(Customer customer) {
        customerMapper.insert(customer);
    }
    public List<Customer> findAll() {
        return customerMapper.findAll();
    }
    //...
}

@Service
public class MenuService {
    @Autowired
    private MenuMapper menuMapper;
    public List<Menu> findAll() {
        return menuMapper.findAll();
    }
    //...
}

@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;
    public void addOrder(Order order) {
        orderMapper.insert(order);
    }
    public List<Order> findByCustomerId(int customerId) {
        return orderMapper.findByCustomerId(customerId);
    }
    //...
}

6.2 控制器

在src/main/java/cn/edu/nju/controller目录下创建OrderController控制器类,用于实现外部访问API。

@Controller
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private OrderService orderService;
    @Autowired
    private MenuService menuService;
    @Autowired
    private CustomerService customerService;
    @RequestMapping(value = "/add", method = RequestMethod.POST)
    @ResponseBody
    public String addOrder(@RequestParam("customerId")int customerId, @RequestParam("menuId")int menuId, @RequestParam("count")int count) {
        Menu menu = menuService.findById(menuId);
        if(menu == null) {
            return "该菜品不存在";
        } else {
            Order order = new Order();
            order.setCustomerId(customerId);
            order.setMenuId(menuId);
            order.setCount(count);
            order.setTotalPrice(count * menu.getPrice());
            order.setCreateTime(new Date());
            orderService.addOrder(order);
            return "下单成功";
        }
    }
    @RequestMapping(value = "/list", method = RequestMethod.GET)
    @ResponseBody
    public String getOrderList(@RequestParam("customerId")int customerId) {
        List<Order> orderList = orderService.findByCustomerId(customerId);
        if(orderList.isEmpty()) {
            return "未查询到订单";
        } else {
            StringBuilder result = new StringBuilder();
            for(Order order : orderList) {
                result.append("订单编号:").append(order.getId())
                        .append(" 菜品名称:").append(menuService.findById(order.getMenuId()).getName())
                        .append(" 数量:").append(order.getCount())
                        .append('\n');
            }
            return result.toString();
        }
    }
    //...
}

7. 测试

使用Postman等工具,测试系统的所有API接口,确保系统实现正确。

示例说明

示例1:添加顾客

请求URL:http://localhost:8080/customer/add
请求参数:
name=张三
phone=13812345678

返回结果:
添加成功

示例2:下单

请求URL:http://localhost:8080/order/add
请求参数:
customerId=1
menuId=1
count=2

返回结果:
下单成功

示例3:查询订单

请求URL:http://localhost:8080/order/list
请求参数:
customerId=1

返回结果:
订单编号:1 菜品名称:宫爆鸡丁 数量:2

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现简易外卖订餐系统 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 用于提取网易文件的hta代码

    为了提取网易文件,我们需要将其下载到本地。这个过程可以通过使用.hta文件来完成,它是一种HTML应用程序,用于在本地系统上运行脚本和批处理命令。本教程将向您展示如何利用.hta文件来提取网易云的音乐文件。 步骤一:新建HTA文件 我们先新建一个.hta文件,比如说我们把文件名命名为music.hta。然后在文件中输入以下代码。 <!DOCTYPE h…

    Java 2023年6月15日
    00
  • 探讨Java中最常见的十道面试题(超经典)

    让我来为你详细讲解“探讨Java中最常见的十道面试题(超经典)”的完整攻略。 前言 在面试Java相关职位时,经常会被问到一些非常经典的问题。本文将列举出Java中最常见的十道面试题,并为每个问题提供完整的解答,希望能够帮助你在面试时取得更好的成绩。 面试题1:Java中的“值传递”和“引用传递”有何区别? 在Java中,所有的参数传递都是“值传递”,也就是…

    Java 2023年5月24日
    00
  • 使用Java实现类似Comet风格的web app

    针对使用Java实现类似Comet风格的web app,我可以给您提供以下的攻略: 一、了解Comet Comet是一种Web服务器向浏览器发送异步数据的技术。在传统的Web应用程序中,客户端通过HTTP协议发起请求,服务器收到请求后即时返回响应。而Comet则是一种在Web服务器与浏览器之间建立持久连接的技术,使得服务端可以在有数据更新时主动向客户端推送数…

    Java 2023年5月19日
    00
  • Java递归算法详解(动力节点整理)

    Java递归算法详解(动力节点整理) 什么是递归? 递归是指在函数的定义中,直接或间接地调用自身的行为。 递归调用的实现过程 递归调用是通过栈实现的,每一次函数调用会将调用时的参数和函数运行的状态信息压入栈中,函数运行完成后,再从栈中弹出上一次调用的信息并恢复上一种状态信息,继续执行下去。 递归调用的分类 递归调用可以分为两类:直接递归和间接递归。 直接递归…

    Java 2023年5月26日
    00
  • 解决SpringMVC 返回Java8 时间JSON数据的格式化问题处理

    SpringMVC是一款非常优秀的JavaWeb框架,但是在返回Java8时间JSON数据时,常会遇到一些格式化上的问题。为了解决这些问题,我们需要采用一些特殊的方式来处理。本文将提供两种常见的解决方案。 解决方案1:使用@JsonFormat注解 在我们的Java实体类中,可以使用@JsonFormat注解进行配置。该注解可以控制Java8时间的序列化或者…

    Java 2023年5月20日
    00
  • JSP中param动作的实例详解

    当我们想要把参数传递给 JSP 页面时,param 动作是一种非常有用的方法。通过在 JSP 页面中使用 param 动作,我们可以轻松地向页面中传递参数,这些参数可以来自域对象,例如 request、session 或 application,也可以来源于页面 URL 中的查询字符串或表单提交。本文将为大家深入详解 param 动作的用法,通过两个实例帮助…

    Java 2023年6月15日
    00
  • Java中的Checked异常有哪些?

    Java中的Checked异常 在Java程序设计中,异常是无法避免的,可能是程序中的代码出现了错误,也可能是其他外部因素造成的异常。其实,Java中的异常分为两类:Checked异常和Unchecked异常。其中,Checked异常必须在代码中进行处理,否则程序无法编译通过。在本篇攻略中,我们来详细讲解Java中的Checked异常。 Checked异常的…

    Java 2023年4月28日
    00
  • JAVA中 Spring定时器的两种实现方式

    JAVA中Spring定时器可以使用两种方式实现,分别是基于注解的方式和基于XML配置的方式。下面分别进行说明。 基于注解的方式 1. 引入相关依赖 在pom.xml中引入Spring的定时器依赖: <dependency> <groupId>org.springframework</groupId> <artifa…

    Java 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部