java实现简易外卖订餐系统

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日

相关文章

  • JAVA实现单例模式的四种方法和一些特点

    首先我们要了解什么是单例模式。单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供了访问这个实例的全局点。 JAVA实现单例模式的四种方法: 1.饿汉式 饿汉式意味着在我们使用类的时候,这个类已经被实例化了。饿汉模式的实现是在声明类的时候,就直接实例化一个静态对象,避免了线程安全的问题。 示例代码: public class Singleton { …

    Java 2023年5月18日
    00
  • C#实现异步GET的方法

    针对C#实现异步GET的方法,我们可以参考以下步骤: 第一步:创建HttpClient对象 在C#中实现异步GET请求,我们需要使用HttpClient对象。HttpClient对象是一个可以发送和接收HTTP请求和响应的类,可以在.NET Framework 4.5及更高版本和.NET Core中使用。 我们可以通过以下代码创建一个HttpClient对象…

    Java 2023年5月19日
    00
  • JSP中out对象的实例详解

    下面是本人为大家准备的详细讲解“JSP中out对象的实例详解”的攻略。 JSP中out对象的实例详解 1. out对象简介 在JSP页面中,out对象是一个内置对象,用于向客户端输出内容。 2. out对象的创建 当在JSP页面中使用语句 out.print(“hello, world”) 时,就会自动创建一个名为 “out” 的输出流对象。 3. out对…

    Java 2023年6月15日
    00
  • 批量处理JDBC语句提高处理速度

    批量处理JDBC语句可以大大提高处理速度,特别是当需要批量插入或更新大量的数据时更为明显。以下是批量处理JDBC语句的完整攻略: 1. 准备完整的SQL语句 批量处理需要准备完整的SQL语句,即将多个SQL语句合成一个大的SQL语句。这样可以避免频繁的网络传输和数据库请求。比如,如果需要插入1000条数据,则可以将所有数据的插入语句合成一个SQL语句,然后一…

    Java 2023年6月15日
    00
  • 全面剖析java中的注解(Annotation)

    全面剖析Java中的注解(Annotation) 1. 什么是注解 注解(Annotation),是Java 5之后引入的一个重要特性。它是Java语言旨在简化Java开发的一种方式,是代码级别的说明标记,用于描述类、方法、变量等元素的信息。 注解本身并没有实际的执行逻辑,它只是代码的一种附加说明、标记或元数据,提供了一种结构化的方式来描述程序和配置信息。注…

    Java 2023年5月20日
    00
  • Java连接postgresql数据库的示例代码

    接下来我来为您详细讲解Java连接PostgreSQL数据库的示例代码的完整攻略。 第一步:引入PostgreSQL的JDBC驱动 在使用Java连接PostgreSQL数据库之前,需要先下载并安装PostgreSQL的JDBC驱动。可以在 PostgreSQL官网 上下载对应的JDBC驱动。 完成下载和安装之后,需要在编码中引入JDBC驱动,代码如下: i…

    Java 2023年5月19日
    00
  • Java编程实现A*算法完整代码

    下面我将为您详细讲解如何实现A*算法的完整代码: A*算法简介 A算法,也称A星算法,是一种常用于寻路问题的启发式算法。它利用启发式的方式,在搜索时跳过无关的节点,从而提高了搜索效率。A算法基于广度优先搜索和最短路径算法,可以找到一条从起点到目标节点的最佳路径。 A*算法实现步骤 A*算法的实现步骤主要包含以下几个部分: 定义一个节点类(包含节点坐标、节点的…

    Java 2023年5月18日
    00
  • Java微信公众号开发之通过微信公众号获取用户信息

    Java微信公众号开发之通过微信公众号获取用户信息 简介 本文将详细讲解如何通过Java实现微信公众号获取用户信息细节,包括获取用户基本信息和获取关注者列表,最后提供两条常用的示例说明。 准备工作 在开始获取用户信息之前,你需要进行以下步骤的准备工作: 注册微信公众号,并获取关注者OpenID和Access Token. 创建Java Web服务器,并引入相…

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