一、需求分析
- 点击订餐展示目前已有的食物列表
- 输入姓名、菜品编号、份数、送餐时间、送餐地址
- 选择完毕后展示订单信息
- 查看餐袋,可以查看订单列表
- 签收订单
- 删除订单
- 退出外卖订餐系统
二、数据库表准备
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);
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);
三、数据库连接池、工具类库准备
本小节主要是准备C3P0和DBUtils,下载配置方式可参考上一个项目
⚠️注意:c3p0-config.xml文件需要放在工程src根目录下面
四、工程目录结构
五、详细代码说明
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();
}
}
}