Java小项目(二)外卖订餐系统

261 阅读4分钟

一、需求分析

  • 点击订餐展示目前已有的食物列表
  • 输入姓名、菜品编号、份数、送餐时间、送餐地址
  • 选择完毕后展示订单信息
  • 查看餐袋,可以查看订单列表
  • 签收订单
  • 删除订单
  • 退出外卖订餐系统

二、数据库表准备

CREATE TABLE food( 
    id INT PRIMARY KEY AUTO_INCREMENT, 
    name varchar(20) NOT NULL,
    price double NOT NULL);
    
insert into food values(null, '红烧茄子', 24.0);
insert into food values(null, '红烧排骨', 36.0);
insert into food values(null, '鱼香肉丝', 32.0);
insert into food values(null, '糖醋里脊', 28.0);
insert into food values(null, '番茄炒蛋', 14.0);
image.png
CREATE TABLE menu( 
    id INT PRIMARY KEY AUTO_INCREMENT, 
    name varchar(20) NOT NULL,
    foodMes varchar(40) NOT NULL,
    time INT NOT NULL,
    address varchar(40) NOT NULL,
    price double NOT NULL,
    now varchar(20) NOT NULL);
image.png

三、数据库连接池、工具类库准备

本小节主要是准备C3P0和DBUtils,下载配置方式可参考上一个项目

⚠️注意:c3p0-config.xml文件需要放在工程src根目录下面

四、工程目录结构

image.png

五、详细代码说明

1、主工程代码

package FoodOrderSystem.test;

import FoodOrderSystem.entity.Food;
import FoodOrderSystem.entity.Menu;
import FoodOrderSystem.service.food.impl.FoodServiceImpl;
import FoodOrderSystem.service.menu.impl.MenuServiceImpl;
import FoodOrderSystem.utils.MenuBack;
import FoodOrderSystem.view.MainPage;

import java.util.List;
import java.util.Scanner;

public class FoodOrder {
    public static void main(String[] args) {
        // 定义scanner对象
        Scanner scanner = new Scanner(System.in);
        // 定义循环控制变量
        boolean isFood = true;
        // 定义菜单对象,订单序号设为1
        Menu menu = new Menu();
        menu.setId(1);
        // 定义service
        FoodServiceImpl foodServiceImpl = new FoodServiceImpl();
        MenuServiceImpl menuServiceImpl = new MenuServiceImpl();

        System.out.println("👏欢迎使用饿了么外卖订餐系统👏");
        while (isFood) {
            MainPage.menu();
            System.out.println("请输入您的选择:");
            int chooseNumber = scanner.nextInt(); // 用户选择的数字
            switch (chooseNumber) {
                case 1:
                    System.out.println("****我要订餐****");
                    System.out.println("请输入订餐人姓名:");
                    String name = scanner.next();
                    menu.setName(name);
                    System.out.println("序号\t\t菜名\t\t单价");
                    // 输出显示所有菜单食物
                    List<Food> foodList = foodServiceImpl.selectFood();
                    for (Food food : foodList) {
                        System.out.println(food.getId() + "\t\t" + food.getName() + "\t\t" + food.getPrice());
                    }
                    System.out.println("请输入您要点的菜品编号:");
                    int foodId = scanner.nextInt();
                    if (foodId >= 1 && foodId <= 5) {

                    } else {
                        System.out.println("输入错误,菜品编号需要输入1-5的整数");
                        break;
                    }
                    System.out.println("请输入您要点的份数");
                    int foodNumber = scanner.nextInt();
                    menu.setFoodMes(foodList.get(foodId - 1).getName() + " " + foodNumber + "份");
                    System.out.println("请输入送餐时间(送餐时间是10-20之间整点送):");
                    menu.setTime(scanner.nextInt());
                    System.out.println("请输入送餐地址信息:");
                    String address = scanner.next();
                    menu.setAddress(address);
                    menu.setPrice(foodNumber * foodList.get(foodId - 1).getPrice());
                    menu.setNow("已预定");
                    System.out.println("恭喜您下单成功!🎉🎉🎉🎉");
                    System.out.println(menu.toString());
                    // 写入订单到数据库
                    menuServiceImpl.addMenu(menu);
                    MenuBack.back();
                    break;

                case 2:
                    System.out.println("****查看餐袋****");
                    List<Menu> menuList = menuServiceImpl.selectMenu();
                    System.out.println(menuList);
                    for (Menu temp : menuList) {
                        temp.toString();
                    }
                    break;

                case 3:
                    System.out.println("****签收订单****");
                    System.out.println("请选择要签收的订单序号:");
                    int num = scanner.nextInt();
                    if (num == menu.getId()) {
                        System.out.println("订单签收成功!");
                        // 修改订单状态为已签收
                        menuServiceImpl.modifyMenuStatus("已签收", menu.getId());
                    } else {
                        System.out.println("签收失败,这不是您的外卖订单!");
                    }
                    System.out.println("结束?");
                    break;

                case 4:
                    System.out.println("****删除订单****");
                    System.out.println("请选择要删除的订单序号:");
                    int deleteId = scanner.nextInt();
                    System.out.println("您选择删除订单编号为" + deleteId + "的订单");
                    Menu menu1 = menuServiceImpl.selectMenu().get(0);
                    if (deleteId == menu1.getId()) {
                        if ("已预定".equals(menu1.getNow())) {
                            System.out.println("订单删除成功!");
                            // 删除订单
                            menuServiceImpl.deleteMenu(menu1.getId());
                        } else if ("已签收".equals(menu1.getNow())) {
                            System.out.println("订单删除失败,因为该订单已被签收");
                        }
                    } else {
                        System.out.println("删除失败,您没有此外卖订单!");
                    }
                    break;

                case 5:
                    System.out.println("****退出系统****");
                    isFood = false;
                    break;

                default:
                    break;
            }
        }

    }
}

2、工具类代码

package FoodOrderSystem.utils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtils {

    // 创建C3P0连接池
    private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();

    /**
     * 获得连接的方法
     *
     * @return
     */
    public static Connection getConnection() {
        Connection connection = null;
        try {
            connection = dataSource.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return connection;
    }

    /**
     * 获得数据库连接池
     *
     * @return
     */
    public static DataSource getDataSource() {
        return dataSource;
    }

    /**
     * 释放资源的方法
     *
     * @param statement
     * @param connection
     */
    public static void release(Statement statement, Connection connection) {
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            statement = null;
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            connection = null;
        }
    }

    /**
     * 释放资源的方法(查询用)
     * @param statement
     * @param connection
     * @param resultSet
     */
    public static void release(Statement statement, Connection connection, ResultSet resultSet) {
        release(statement, connection);
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            resultSet = null;
        }
    }
}
package FoodOrderSystem.utils;

import ShopSystem.view.MainPage;

import java.util.Scanner;

public class MenuBack {

    public static void back() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("[按q键返回上一层]");
        String back = scanner.nextLine();
        if ("q".equals(back) || "Q".equals(back)) {
            MainPage.menu();
        } else {
            back();
        }
    }
}

3、主页面代码

package FoodOrderSystem.view;

/**
 * 外卖订餐系统-菜单页面
 */
public class MainPage {
    public static void menu(){
        System.out.println("===============外卖订餐系统===============");
        System.out.println("1、我要订餐💰");
        System.out.println("2、查看餐袋👀");
        System.out.println("3、签收订单👌");
        System.out.println("4、删除订单🈚️");
        System.out.println("5、退出系统👻");
        System.out.println("===============饿了叫饿了么===============");
    }
}

4、service代码

package FoodOrderSystem.service.food;

import FoodOrderSystem.entity.Food;

import java.util.List;

public interface FoodService {
    List<Food> selectFood();
}
package FoodOrderSystem.service.food.impl;

import FoodOrderSystem.dao.food.impl.FoodDaoImpl;
import FoodOrderSystem.entity.Food;
import FoodOrderSystem.service.food.FoodService;

import java.util.List;

public class FoodServiceImpl implements FoodService {
    FoodDaoImpl foodDaoImpl = new FoodDaoImpl();

    @Override
    public List<Food> selectFood() {
        return foodDaoImpl.selectFood();
    }
}
package FoodOrderSystem.service.menu;

import FoodOrderSystem.entity.Menu;

import java.util.List;

public interface MenuService {
    void addMenu(Menu menu);

    List<Menu> selectMenu();

    void modifyMenuStatus(String now, int id);

    void deleteMenu(int id);
}
package FoodOrderSystem.service.menu.impl;

import FoodOrderSystem.dao.menu.impl.MenuDaoImpl;
import FoodOrderSystem.entity.Menu;
import FoodOrderSystem.service.menu.MenuService;

import java.util.List;

public class MenuServiceImpl implements MenuService {
    MenuDaoImpl menuDaoImpl = new MenuDaoImpl();

    @Override
    public void addMenu(Menu menu) {
        menuDaoImpl.addMenu(menu);
    }

    @Override
    public List<Menu> selectMenu() {
        return menuDaoImpl.selectMenu();
    }

    @Override
    public void modifyMenuStatus(String now, int id) {
        menuDaoImpl.modifyMenuStatus(now, id);
    }

    @Override
    public void deleteMenu(int id) {
        menuDaoImpl.deleteMenu(id);
    }
}

5、dao代码

package FoodOrderSystem.dao.food;

import FoodOrderSystem.entity.Food;

import java.util.List;

public interface FoodDao {
    List<Food> selectFood();
}
package FoodOrderSystem.dao.food.impl;

import FoodOrderSystem.dao.food.FoodDao;
import FoodOrderSystem.entity.Food;
import FoodOrderSystem.utils.JDBCUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class FoodDaoImpl implements FoodDao {
    @Override
    public List<Food> selectFood() {
        List<Food> foodResult = null;
        QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
        try {
            foodResult = queryRunner.query("select * from food", new ResultSetHandler<List<Food>>() {
                @Override
                public List<Food> handle(ResultSet resultSet) throws SQLException {
                    List<Food> foods = new ArrayList<>();
                    while (resultSet.next()) {
                        Food food = new Food();
                        food.setId(resultSet.getInt("id"));
                        food.setName(resultSet.getString("name"));
                        food.setPrice(resultSet.getDouble("price"));
                        foods.add(food);
                    }
                    return foods;
                }
            });
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return foodResult;
    }
}
package FoodOrderSystem.dao.menu;

import FoodOrderSystem.entity.Menu;

import java.util.List;

public interface MenuDao {
    void addMenu(Menu menu);

    List<Menu> selectMenu();

    void modifyMenuStatus(String now, int id);

    void deleteMenu(int id);
}
package FoodOrderSystem.dao.menu.impl;

import FoodOrderSystem.dao.menu.MenuDao;
import FoodOrderSystem.entity.Menu;
import FoodOrderSystem.utils.JDBCUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class MenuDaoImpl implements MenuDao {

    @Override
    public void addMenu(Menu menu) {
        QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
        try {
            queryRunner.update("insert into menu values (null, ?, ?, ?, ?, ?, ?)",
                    menu.getName(), menu.getFoodMes(), menu.getTime(),
                    menu.getAddress(), menu.getPrice(), menu.getNow());
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    @Override
    public List<Menu> selectMenu() {
        List<Menu> menuResult = null;
        QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
        try {
            menuResult = queryRunner.query("select * from menu", new ResultSetHandler<List<Menu>>() {
                @Override
                public List<Menu> handle(ResultSet resultSet) throws SQLException {
                    List<Menu> menus = new ArrayList<>();
                    while (resultSet.next()) {
                        Menu menu = new Menu();
                        menu.setId(resultSet.getInt("id"));
                        menu.setName(resultSet.getString("name"));
                        menu.setFoodMes(resultSet.getString("foodMes"));
                        menu.setTime(resultSet.getInt("time"));
                        menu.setAddress(resultSet.getString("address"));
                        menu.setPrice(resultSet.getDouble("price"));
                        menu.setNow(resultSet.getString("now"));

                        menus.add(menu);
                    }
                    return menus;
                }
            });
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return menuResult;
    }

    @Override
    public void modifyMenuStatus(String now, int id) {
        QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
        try {
            queryRunner.update("update menu set now=? where id=?", now, id);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    @Override
    public void deleteMenu(int id) {
        QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
        try {
            queryRunner.update("delete from menu where id=?", id);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}