36、Java——吃货联盟订餐系统(JDBC+MySQL+Apache DBUtils)

news2024/11/27 18:30:21

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:轻松学习jQuery控制DOM
更多内容点击👇
      一个案例学会三层架构对数据表的增删改查

文章目录

    • ⛳️项目需求
    • ⛳️项目环境准备
    • ⛳️案例覆盖的技能点
    • ⛳️难点分析
      •  ❤️1、环境搭建和相关配置
      •  ❤️2、使用数据库保存Order订单以及Food菜单信息
      •  ❤️3、Dao层实现类中的增删改查方法的编写
    • ⛳️项目实现思路
      •  ❤️1、 数据初始化
      •  ❤️2、 实现菜单切换
      •  ❤️3、 实现查看餐袋
      •  ❤️4、 实现我要订餐
      •  ❤️5、 实现签收订单
      •  ❤️6、 实现删除订单
      •  ❤️7、 实现我要点赞
    • ⛳️代码展示
      •  ❤️1、订单信息:Order类
      •  ❤️2、菜品信息:Food类
      •  ❤️3、定义FoodDao接口
      •  ❤️4、定义FoodDaoImpl实现类
      •  ❤️5、定义OrderDao接口
      •  ❤️6、定义OrderDaoImpl实现类
      •  ❤️7、定义FoodService接口
      •  ❤️8、定义FoodServiceImpl实现类
      •  ❤️9、定义OrderService接口
      •  ❤️10、定义OrderServiceImpl实现类
      •  ❤️11、定义FoodMgr操作类
      •  ❤️12、定义OrderMgr操作类

在这里插入图片描述

⛳️项目需求

  (1)现今已经进入网络时代,人们的日常生活已经离不开网络,如网上购物、看新闻、交友等。
  (2)“只要点点手指,就能送餐上门”,网上订餐越来越受到都市年轻人的青睐。
  (3)现要求开发一个网上订餐系统,需要实现我要订餐、查看餐袋、签收订单、删除订单、我要点赞和退出系统6个功能。

⛳️项目环境准备

  (1)开发工具:MyEclipse,JDK1.7。
  (2)开发语言:Java。

⛳️案例覆盖的技能点

  (1)理解程序基本概念——程序、变量、数据类型。
  (2)会使用顺序、选择、循环、跳转语句编写程序。
  (3)了解类、对象、方法、私有变量等相关知识。
  (4)掌握数据库、JDBC、三层架构等相关知识。
  (5)掌握Druid连接池、Apache的DBUtils使用 。

⛳️难点分析

 ❤️1、环境搭建和相关配置

  (1)添加需要的jar包到项目中,将lib文件夹中的jar文件通过鼠标右单击选择Build Path的方式添加到你设置的eatJar文件目录里。

在这里插入图片描述

  (2)创建database.properties文件,用来配置注册驱动和数据库连接对象的相关数据。

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/java221804

username=root

password=huanghuang

initialSize=10

maxActive=30

maxIdle=5

maxWait=3000

  (3)添加需要的工具类DBUtils类

package cn.eat.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

public class DBUtils {

	private static DruidDataSource druidDataSource;

	static {
		Properties properties = new Properties();

		try {
			InputStream is = DBUtils.class
					.getResourceAsStream("/database.properties");
			properties.load(is);
			druidDataSource = (DruidDataSource) DruidDataSourceFactory
					.createDataSource(properties);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static DataSource getDataSource(){
		return druidDataSource;
	}

}

 ❤️2、使用数据库保存Order订单以及Food菜单信息

  (1)创建数据表:Order表和Food表

# 创建订单表order表
CREATE TABLE IF NOT EXISTS `order`(
`oid` INT PRIMARY KEY AUTO_INCREMENT COMMENT '订单编号',
`name` VARCHAR(20) NOT NULL COMMENT '订餐人姓名',
`dishMegs` VARCHAR(20) NOT NULL COMMENT '餐品信息',
`time` INT NOT NULL COMMENT '送餐时间',	
`address` VARCHAR(30) NOT NULL COMMENT '送餐地址',
`states` INT NOT NULL COMMENT '订单状态,0表示已预订,1表示已完成',
`sumPrices` DOUBLE NOT NULL COMMENT '订单总金额'
);
# 创建Food表
CREATE TABLE IF NOT EXISTS `food`(
`fid` INT PRIMARY KEY AUTO_INCREMENT COMMENT '菜品编号',
`dishNames` VARCHAR(20) NOT NULL COMMENT '菜品名称',
`prices` DOUBLE NOT NULL COMMENT '菜品单价',
`praiseNums` INT NOT NULL COMMENT '菜品点赞数'
);

  (2)根据本项目的需求分析可知,每条订单的信息都包括订餐人姓名、选择菜品及份数、送餐时间、送餐地址、订单状态、总金额,并且会有多条订单信息,可以定义一个Order类和一个Food类,在类中将各个属性设置为私有属性,再添加这些属性的有参构造方法以及Get/Set方法,然后重写toString()方法。

 ❤️3、Dao层实现类中的增删改查方法的编写

  (1)首先创建QueryRunner对象。

private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());

  (2)增删改查方法的编写(以FoodDaoImpl类为例)

  • 增删改用queryRunner.update(sql, args);方法获取。

    Object[] args = { food.getDishNames(),food.getPrices(),food.getPraiseNums()};
  • 查一个用queryRunner.query(sql, new BeanHandler(Food.class), dishName);

    public Food selectOneFood(String dishName) {
    String sql=“select * from food where dishNames=?;”;
    try {
    return queryRunner.query(sql, new BeanHandler(Food.class), dishName);
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return null;
    }
  • 查全部用queryRunner.query(sql, new BeanListHandler(Food.class) );

    public List selectAllFood() {
    String sql = “SELECT * FROM food;”;
    try {
    return queryRunner.query(sql, new BeanListHandler(Food.class) );
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return null;
    }

⛳️项目实现思路

 ❤️1、 数据初始化

  (1)创建Food和Order实体类
  (2)创建数据访问层Dao层的接口和实现类
  (3)创建业务逻辑层Service层的接口和实现类
  (4)创建视图表示层View层相关操作类。

 ❤️2、 实现菜单切换

  执行程序,输出系统主菜单。用户根据显示的主菜单,输入功能编号实现菜单的显示和菜单的切换,具体要求如下:
  (1)当输入1~5时,输出相关的菜单项信息。
  (2)显示“输入0返回”。输入0,则返回主菜单,否则,退出系统,终止程序的运行,输出提示信息“谢谢使用,欢迎下次光临!”。

 ❤️3、 实现查看餐袋

  遍历系统中已有的订单,并逐条显示输出,内容包括序号、订餐人姓名、订餐信息(菜品名和份数)、送餐时间、送餐地址、总金额、订单状态(已预订或已完成)。

 ❤️4、 实现我要订餐

  为用户显示系统中提供的菜品信息,获得订餐人信息,形成订单。每条订单包含如下信息。
  (1)订餐人姓名:要求用户输入。
  (2)选择菜品及份数:显示3个供选择菜品的序号、名称、单价、点赞数,提示用户输入要选择的菜品序号及份数。
  (3)送餐时间:当天10:00-20:00间整点送餐,要求用户输入10-20的整数,输入错误,重新输入。
  (4)送餐地址:要求用户输入。
  (5)状态:订单的当前状态。订单有两种状态,0为已预订状态(默认状态),1为已完成(订单已签收)。
  (6)总金额:订单总金额。总金额 = 菜品单价*份数+送餐费。其中,当单笔订单金额达到50元时,免收送餐费;否则,需交纳5元送餐费。

  各数组中相同下标的数据组成一条订单信息,因此向每个数组相同下标的位置各增加一条数据并保存。

 ❤️5、 实现签收订单

  送餐完成后,要将用户签收订单的状态由“已预订”修改为“已完成”。业务要求如下:
  (1)如果订单的当前状态为:“已预订”且数组下标为用户输入的订单序号减1,就签收。
  (2)如果订单的当前状态为:“已完成”且数组下标为用户输入的订单序号减1,不可签收。

  控制台接收要签收的订单序号。利用for循环结构遍历全部订单,利用if选择结构判断names数组中订餐人姓名是否为null,订单状态是否为已预订且数组下标是指定订单序号减1。
  如果条件成立,该订单的状态值修改为1(即已完成)。

 ❤️6、 实现删除订单

 ❤️7、 实现我要点赞

  选择执行“我要点赞”菜单项。
  (1)界面显示菜品序号、菜品名、单价、点赞数(如为0可不显示),提示用户输入要点赞的菜品序号。
  (2)接收要点赞的菜品序号。
  (3)praiseNums中对应菜品的点赞数加1。

⛳️代码展示

 ❤️1、订单信息:Order类

package cn.eat.entity;

public class Order {
	private int oid;
	private String name;
	private String dishMegs;
	private int times;
	private String address;
	private int states;//
	private double sumPrices;

	public Order() {
		super();
	}

	public Order(String name, String dishMegs, int times, String address,
			int states, double sumPrices) {
		super();
		this.name = name;
		this.dishMegs = dishMegs;
		this.times = times;
		this.address = address;
		this.states = states;
		this.sumPrices = sumPrices;
	}

	public Order(int oid, String name, String dishMegs, int times,
			String address, int states, double sumPrices) {
		super();
		this.oid = oid;
		this.name = name;
		this.dishMegs = dishMegs;
		this.times = times;
		this.address = address;
		this.states = states;
		this.sumPrices = sumPrices;
	}


	public int getOid() {
		return oid;
	}

	public void setOid(int oid) {
		this.oid = oid;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getDishMegs() {
		return dishMegs;
	}

	public void setDishMegs(String dishMegs) {
		this.dishMegs = dishMegs;
	}

	public int getTimes() {
		return times;
	}

	public void setTimes(int times) {
		this.times = times;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public int getStates() {
		return states;
	}

	public void setStates(int states) {
		this.states = states;
	}

	public double getSumPrices() {
		return sumPrices;
	}

	public void setSumPrices(double sumPrices) {
		this.sumPrices = sumPrices;
	}

	@Override
	public String toString() {
		return "Order [oid=" + oid + ", name=" + name + ", dishMegs="
				+ dishMegs + ", times=" + times + ", address=" + address
				+ ", states=" + states + ", sumPrices=" + sumPrices + "]";
	}
	
	

}

 ❤️2、菜品信息:Food类

package cn.eat.entity;

public class Food {

	private String dishNames;
	private double prices;
	private int praiseNums;

	public Food() {
		super();
	}

	public Food(String dishNames, double prices, int praiseNums) {
		super();
		this.dishNames = dishNames;
		this.prices = prices;
		this.praiseNums = praiseNums;
	}

	public String getDishNames() {
		return dishNames;
	}

	public void setDishNames(String dishNames) {
		this.dishNames = dishNames;
	}

	public double getPrices() {
		return prices;
	}

	public void setPrices(double prices) {
		this.prices = prices;
	}

	public int getPraiseNums() {
		return praiseNums;
	}

	public void setPraiseNums(int praiseNums) {
		this.praiseNums = praiseNums;
	}

	@Override
	public String toString() {
		return "Food [dishNames=" + dishNames + ", prices=" + prices
				+ ", praiseNums=" + praiseNums + "]";
	}
	
}

 ❤️3、定义FoodDao接口

package cn.eat.dao;

import java.util.List;

import cn.eat.entity.Food;


public interface FoodDao {
	//增
	int insertFood(Food food);
	
	//删
	int deleteFood(String dishName);
	
	//改
	int updateFood(Food food);
	
	//查一个
	Food selectOneFood(String dishName);
	
	//查全部
	List<Food> selectAllFood();
}

 ❤️4、定义FoodDaoImpl实现类

package cn.eat.dao.impl;

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

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.eat.dao.FoodDao;
import cn.eat.entity.Food;
import cn.eat.entity.Order;
import cn.eat.utils.DBUtils;

public class FoodDaoImpl implements FoodDao {
	private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());
	@Override
	public int insertFood(Food food) {
		String sql = "INSERT INTO `food`(`dishNames`,`prices`,`praiseNums`) VALUES(?,?,?);";
		Object[] args = { food.getDishNames(),food.getPrices(),food.getPraiseNums()};

		try {
			return queryRunner.update(sql, args);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

	@Override
	public int deleteFood(String dishName) {
		String sql="delete from food where dishNames=?;";
		try {
			return queryRunner.update(sql,dishName);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

	@Override
	public int updateFood(Food food) {
		String sql="update food set prices=?,praiseNums=? where dishNames=?;";
		Object[] args={food.getPrices(),food.getPraiseNums(),food.getDishNames()};
		try {
			return queryRunner.update(sql, args);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

	@Override
	public Food selectOneFood(String dishName) {
		String sql="select * from food where dishNames=?;";
		try {
			return queryRunner.query(sql, new BeanHandler<Food>(Food.class), dishName);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public List<Food> selectAllFood() {
		String sql = "SELECT * FROM `food`;";
		try {
			return queryRunner.query(sql, new BeanListHandler<Food>(Food.class) );
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return null;
	}
}

 ❤️5、定义OrderDao接口

package cn.eat.dao;

import java.util.List;

import cn.eat.entity.Order;

public interface OrderDao {
	//增
	int insert(Order order);
	
	//删
	int delete(int oid);
	
	//改
	int update(Order order);
	
	//查一个
	Order selectOne(int oid);
	
	//查全部
	List<Order> selectAll();
}

 ❤️6、定义OrderDaoImpl实现类

package cn.eat.dao.impl;

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

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.eat.dao.OrderDao;
import cn.eat.entity.Order;
import cn.eat.utils.DBUtils;

public class OrderDaoImpl implements OrderDao {
	private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());

	//增
	@Override
	public int insert(Order order) {
		String sql = "INSERT INTO `order`(`name`,`dishMegs`,`time`,`address`,`states`,`sumPrices`) VALUES(?,?,?,?,?,?);";
		Object[] args = { order.getName(), order.getDishMegs(),
				order.getTimes(), order.getAddress(), order.getStates(),
				order.getSumPrices() };

		try {
			return queryRunner.update(sql, args);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

	//删
	@Override
	public int delete(int oid) {
		String sql = "DELETE FROM `order` WHERE `oid`=?;";
		try {
			return queryRunner.update(sql, oid);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

	//改
	@Override
	public int update(Order order) {
		String sql = "UPDATE `order` SET `name` = ?,`dishMegs`=?,`time`=?,`address`=?,`states`=?,`sumPrices`=? WHERE `oid`=?;";
		Object[] args = { order.getName(), order.getDishMegs(),
				order.getTimes(), order.getAddress(), order.getStates(),
				order.getSumPrices(), order.getOid() };
		try {
			return queryRunner.update(sql, args);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

	//查一个
	@Override
	public Order selectOne(int oid) {
		String sql = "SELECT * FROM `order` WHERE `oid` = ?";
		try {
			return queryRunner.query(sql,new BeanHandler<Order>(Order.class),oid);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	//查全部
	@Override
	public List<Order> selectAll() {
		String sql = "SELECT * FROM `order`;";
		try {
			return queryRunner.query(sql, new BeanListHandler<Order>(Order.class) );
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return null;
	}
}

 ❤️7、定义FoodService接口

package cn.eat.service;

import java.util.List;

import cn.eat.entity.Food;

//对菜品进行增删改查的业务
public interface FoodService {

	//添加
	int addFood(Food food);
	
	//删除
	int deleteFood(String dishName);
	
	//修改
	int updateFood(Food food);
	
	//查一个
	Food selectFoodByFid(String dishName);
	
	//查全部
	List<Food> selectAllFood();
}

 ❤️8、定义FoodServiceImpl实现类

package cn.eat.service.Impl;

import java.util.List;

import cn.eat.dao.FoodDao;
import cn.eat.dao.impl.FoodDaoImpl;
import cn.eat.entity.Food;
import cn.eat.service.FoodService;

public class FoodServiceImpl implements FoodService {

	//创建FoodDaoImpl对象;
	FoodDao foodDao=new FoodDaoImpl();
	
	@Override
	public int addFood(Food food) {
		//判断表中是否存在将要添加的菜品
		if(food!=null){
			Food food1=foodDao.selectOneFood(food.getDishNames());
			if(food1!=null){
				System.out.println("菜品已存在,不能添加!");
			}else{
				System.out.println("添加成功!");
				return foodDao.insertFood(food);
			}
		}
		return 0;
	}

	@Override
	public int deleteFood(String dishName) {
		//判断表中是否存在将要删除的菜品
		Food food1=foodDao.selectOneFood(dishName);
		if(food1!=null){
			System.out.println("删除成功!");
			return foodDao.deleteFood(dishName);
		}else{
			System.out.println("菜品不存在,无法删除!");
		}
		return 0;
	}

	@Override
	public int updateFood(Food food) {
		//判断表中是否存在将要修改的菜品
		Food food1=foodDao.selectOneFood(food.getDishNames());
		if(food1!=null){
			System.out.println("修改成功!");
			return foodDao.updateFood(food);
		}else{
			System.out.println("菜品不存在,不能修改!");
		}
		return 0;
	}

	@Override
	public Food selectFoodByFid(String dishName) {
		return foodDao.selectOneFood(dishName);
	}

	@Override
	public List<Food> selectAllFood() {
		List<Food> listFoods= foodDao.selectAllFood();
		return listFoods;
	}
}

 ❤️9、定义OrderService接口

package cn.eat.service;

import java.util.List;

import cn.eat.entity.Order;

public interface OrderService {
	
	//增
	int insertOrder(Order order);
	
	//删
	int delOrder(int oid);
	
	//改
	int updateOrder(Order order);
	
	//查一个
	Order selectOneOrder(int oid);
	
	//查全部
	List<Order> selectAllOrder();
	
}

 ❤️10、定义OrderServiceImpl实现类

package cn.eat.service.Impl;

import java.util.List;

import cn.eat.dao.OrderDao;
import cn.eat.dao.impl.OrderDaoImpl;
import cn.eat.entity.Order;
import cn.eat.service.OrderService;

public class OrderServiceImpl implements OrderService {

	OrderDao orderDao=new OrderDaoImpl();
	@Override
	public int insertOrder(Order order) {
		System.out.println("添加成功!");
		return orderDao.insert(order);
	}

	@Override
	public int delOrder(int oid) {
		Order order=orderDao.selectOne(oid);
		if(order==null){
			System.out.println("您要删除的订单信息不存在,无法删除!");
		}else if(order.getStates()==0){
			System.out.println("该订单仍在预定状态,不能删除!");
		}else{
			System.out.println("删除成功!");
			return orderDao.delete(oid);
		}
		return 0;
	}

	@Override
	public int updateOrder(Order order) {
		if(order==null){
			System.out.println("你要签收的订单信息不存在,无法签收!");
		}else if(order.getStates()==1){
			System.out.println("你选择的订单已完成,不能再次签收订单!");
		}else{
			System.out.println("签收成功!");
			order.setStates(1);
			return orderDao.update(order);
		}
		return 0;
	}

	@Override
	public Order selectOneOrder(int oid) {
		return orderDao.selectOne(oid);
	}

	@Override
	public List<Order> selectAllOrder() {
		List<Order> listOrders=orderDao.selectAll();
		
		return listOrders;
	}
}

 ❤️11、定义FoodMgr操作类

package cn.eat.view;

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

import cn.eat.entity.Food;
import cn.eat.service.FoodService;
import cn.eat.service.Impl.FoodServiceImpl;

public class FoodMgr {
	FoodService foodS = new FoodServiceImpl();
	Scanner sc = new Scanner(System.in);

	// 定义一个欢迎菜单方法
	public void showMenu() {
		System.out.println(" ————————欢迎使用菜品管理系统————————");
		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("-------------------------");
	}

	// 1、添加菜品方法
	public void addFood() {
		System.out.println("请输入菜品名称:");
		String foodName = sc.next();
		System.out.println("请输入菜品价格:");
		double foodPrice = sc.nextDouble();
		Food food = new Food(foodName, foodPrice, 0);
		foodS.addFood(food);
	}
	
	// 2、删除菜品方法
	public void delFood(){
		System.out.println("请输入需要删除的菜品名称:");
		String foodName=sc.next();
		foodS.deleteFood(foodName);
	}
	
	// 3、修改菜品方法
	public void updateFood() {
		System.out.println("请输入需要修改的菜品名称:");
		String foodName=sc.next();
		System.out.println("请输入需要修改的菜品价格:");
		double foodPrice=sc.nextDouble();
		System.out.println("请输入需要修改菜品点赞数:");
		int foodPraise=sc.nextInt();
		Food food=new Food(foodName, foodPrice, foodPraise);
		foodS.updateFood(food);
	}
	
	// 4、查看菜单方法
	public List<Food> showFood(){
		List<Food> listFoods=foodS.selectAllFood();
		System.out.println("序号\t名称\t\t单价\t点赞数");
		int i=1;
		for (Food food : listFoods) {
			System.out.println((i) + "\t" + food.getDishNames()
					+ "\t\t" + food.getPrices() + "\t"
					+ food.getPraiseNums());
			i++;
		}
		return listFoods;


	}

	// 定义方法实现菜品管理系统
	public void startFood() {
		// 默认初始值
		boolean flag = true;
		// 循环初始值
		int num = -1;
		do {
			// 首先显示菜单管理系统
			showMenu();
			System.out.println("请输入菜单操作项:");
			int choose = sc.nextInt();
			switch (choose) {
			case 1:
				// 添加菜品
				addFood();
				break;
			case 2:
				// 删除菜品
				delFood();
				break;
			case 3:
				// 修改菜品
				updateFood();
				break;
			case 4:
				// 查看菜品
				showFood();
				break;
			case 5:
				// 退出系统
				flag = false;
				break;
			default:
				flag = false;
				break;
			}

			if (flag) {
				System.out.println("输入0返回:");
				num = sc.nextInt();
			} else {

				break;
			}
		} while (num == 0);
		System.out.println("谢谢使用,欢迎下次光临");
	}

	public static void main(String[] args) {
		FoodMgr fm = new FoodMgr();
		fm.startFood();

	}
}

 ❤️12、定义OrderMgr操作类

package cn.eat.view;

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

import cn.eat.entity.Food;
import cn.eat.entity.Order;
import cn.eat.service.FoodService;
import cn.eat.service.OrderService;
import cn.eat.service.Impl.FoodServiceImpl;
import cn.eat.service.Impl.OrderServiceImpl;

public class OrderMgr {

	OrderService od = new OrderServiceImpl();
	FoodService foodS = new FoodServiceImpl();
	Scanner input = new Scanner(System.in);
	FoodMgr fm = new FoodMgr();

	// 定义一个订餐使用系统
	public static void showSystem() {
		// 输出欢迎菜单
		System.out.println("欢迎使用吃货联盟订餐系统");
		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("6.退出系统");
		System.out.println("-------------------------");
	}

	// 定义方法实现订餐管理系统
	public void startFood() {
		// 默认初始值
		boolean flag = true;
		// 循环初始值
		int num = -1;
		do {
			// 首先显示菜单管理系统
			showSystem();
			System.out.println("请输入订单操作项:");
			int choose = input.nextInt();
			switch (choose) {
			case 1:
				// 我要订餐
				addOrder();
				break;
			case 2:
				// 查看餐带
				showOrder();
				break;
			case 3:
				// 签收订单
				updateOrder();
				break;
			case 4:
				// 删除订单
				delOrder();
				break;
			case 5:
				// 我要点赞
				orderLike();
				break;
			case 6:
				// 退出系统
				flag = false;
				break;
			default:
				flag = false;
				break;
			}

			if (flag) {
				System.out.println("输入0返回:");
				num = input.nextInt();
			} else {

				break;
			}
		} while (num == 0);
		System.out.println("谢谢使用,欢迎下次光临");
	}

	// 1.我要订餐
	public void addOrder() {
		System.out.println("--新增订单--");
		// (1)订餐人姓名
		System.out.println("请输入订餐人姓名:");
		String orderName = input.next();
		// orders[i].setName(orderName);

		// (2)选择菜品及份数
		List<Food> foods = fm.showFood();
		System.out.println("请选择菜品序号:");
		int caiNum = input.nextInt();
		System.out.println("选择份数:");
		int fenNum = input.nextInt();
		String dishFen = foods.get(caiNum - 1).getDishNames() + " " + fenNum
				+ "份";

		// (3)送餐时间
		System.out.println("请选择送餐时间(10:00-20:00整点送餐):");
		int orderTime = input.nextInt();
		while (orderTime < 10 || orderTime > 20) {
			System.out.println("输入错误,请重新输入:");
			orderTime = input.nextInt();
			// orders[i].setTime(input.nextInt());
		}

		// (4)送餐地址
		System.out.println("请输入送餐地址:");
		String orderAddress = input.next();
		// orders[i].setAddress(input.next());

		// (5)状态(新增时,订单状态均为默认状态0)
		// orders[i].setState(0);

		// (6)总金额 =
		// 菜品单价*份数+送餐费。其中,当单笔订单金额达到50元时,免收送餐费;否则,需交纳5元送餐费。
		double caiPrices = foods.get(caiNum - 1).getPrices() * fenNum;
		if (caiPrices < 50) {
			caiPrices = caiPrices + 5;
			// orders[i].setSumPrices(caiPrices);
		}

		// 将订餐数据插入到数据库
		Order order = new Order(orderName, dishFen, orderTime, orderAddress, 0,
				caiPrices);
		od.insertOrder(order);
	}

	// 2.查看餐带
	public void showOrder() {
		List<Order> orders = od.selectAllOrder();
		System.out.println("--查看餐袋--");
		System.out
				.println("序号\t\t订餐人\t\t餐品信息\t\t\t送餐时间\t\t送餐地址\t\t\t总金额\t\t订单状态");
		for (int i = 0; i < orders.size(); i++) {
			if (orders.get(i) != null) {
				String time = orders.get(i).getTimes() + "点";
				String sumPrice = orders.get(i).getSumPrices() + "元";
				String state;
				if (orders.get(i).getStates() == 0) {
					state = "已预订";
				} else {
					state = "已完成";
				}
				System.out.println((i + 1) + "\t\t" + orders.get(i).getName()
						+ "\t\t" + orders.get(i).getDishMegs() + "\t\t" + time
						+ "\t\t" + orders.get(i).getAddress() + "\t\t"
						+ sumPrice + "\t\t" + state);
			}
		}
	}

	// 3.签收订单
	public void updateOrder() {
		System.out.println("--签收订单--");
		System.out.println("请选择需要签收的订单序号:");
		int orderNum = input.nextInt();
		Order order = od.selectOneOrder(orderNum);
		od.updateOrder(order);
	}

	// 4.删除订单
	public void delOrder() {
		System.out.println("--删除订单--");
		System.out.println("请选择需要删除的订单序号:");
		int orderNum = input.nextInt();
		od.delOrder(orderNum);
	}

	// 5.我要点赞
	public void orderLike() {
		System.out.println("--我要点赞--");
		List<Food> foods = fm.showFood();
		System.out.println("请选择点赞的菜品序号:");
		int caiZanNum = input.nextInt();
		for (int j = 0; j < foods.size(); j++) {
			if (caiZanNum == j + 1) {
				foods.get(j).setPraiseNums(foods.get(j).getPraiseNums() + 1);
				Food food = new Food(foods.get(j).getDishNames(), foods.get(j)
						.getPrices(), foods.get(j).getPraiseNums());
				foodS.updateFood(food);
			}
		}
		System.out.println("点赞后的菜品展示:");
		System.out.println("序号\t名称\t\t单价\t点赞数");
		for (int j = 0; j < foods.size(); j++) {
			System.out.println((j + 1) + "\t" + foods.get(j).getDishNames()
					+ "\t\t" + foods.get(j).getPrices() + "\t"
					+ foods.get(j).getPraiseNums());
		}
	}

	public static void main(String[] args) {
		OrderMgr om = new OrderMgr();
		om.startFood();
	}

}


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/42127.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于物联网你需要知道的一切

如果你想要一个更像 wiki &#xff08;维基百科&#xff09;的定义「什么是物联网&#xff1f;」&#xff0c;我们可以将其视为连接到 Internet 的全球对象网络&#xff0c;这些对象能够在没有人为干预的情况下&#xff0c;相互交互和交换数据。符合这一的一般定义的解决方案&a…

Java项目:基于jsp+sevlet+mysql日记系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目主要功能有&#xff1a; 写日记 查看日记 日记删除 日记修改 日记类别添加 日记类别修改 日记类别删除 个人信息查看 个人信息修改 分页…

java刷题day 05

一. 单选题&#xff1a; 解析&#xff1a; 5 >> 2 相当于 5除于2两次&#xff0c;等于1>>> 表示无符号右移&#xff0c;高位用 0 填充&#xff0c;0001右移两位 0000&#xff0c;所以选A解析&#xff1a;作对这道题的关键是要理解Java的值传递&#xff0c;关于值…

婚纱租赁系统毕业设计,婚纱租赁管理系统设计与实现,论文毕设作品参考

功能清单 【后台管理员功能】 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 资讯分类&#xff1a;录入、修改、查看、删除资讯分类 录入…

【Milvus的以文搜图】

0. 介绍 以文搜图指的是&#xff0c;根据文本描述&#xff0c;从图像数据库中检索与文本内容相似的图像数据并返回。通过在CSDN中搜索以文搜图&#xff0c;找到了如下两篇文章&#xff1a; 从零到一&#xff0c;教你搭建「以文搜图」搜索服务&#xff08;一&#xff09;_Zill…

Linux “挂载” 的概念

0、前言 截至到写这个稿子&#xff0c;始终对挂载的概念有点模糊&#xff0c;到底是硬盘挂载到目录&#xff1f;还是目录挂载到硬盘呢&#xff1f;今天终于从《鸟哥的Linux私房菜》中推断出了答案&#xff0c;而且也恍然大悟地理解了之前书中一句晦涩难懂的话。 1、挂载的概念…

基于Web的Markdown编辑器HedgeDoc

什么是 HedgeDoc &#xff1f; HedgeDoc 是一个开源的、基于 web 的、自托管的、协作的markdown编辑器。您可以使用它轻松地在笔记、图形甚至演示文稿上进行实时协作。用户需要做的就是将你的笔记链接分享给同事&#xff0c;他们就可以开始使用了。 不想自己搭建可以试试官方的…

基于有偏距离权值双线性插值原理(Weighted bilinear with warping)的图像超分辨重构研究-附Matlab程序

⭕⭕ 目 录 ⭕⭕✳️ 一、图像超分辨率重构原理✳️ 二、双线性插值重构理论与实验分析✳️ 2.1 双线性插值理论与实验验证✳️ 2.2 有偏距离双线性插值重构理论与实验验证✳️ 2.3 权重双线性插值理论与实验验证✳️ 2.4 有偏距离权值双线性插值理论与实验验证✳️ 三、参考文…

frps内网穿透

1 原理讲解 frp工作原理 服务端运行&#xff0c;监听一个主端口&#xff0c;等待客户端的连接&#xff1b; 客户端连接到服务端的主端口&#xff0c;同时告诉服务端要监听的端口和转发类型&#xff1b;服务端fork新的进程监听客户端指定的端口&#xff1b; 外网用户连接到客户…

2012-2020中国地区银行多指标数据

1、数据来源&#xff1a;bankscope 2、时间跨度&#xff1a;2012-2020-3季度 3、区域范围&#xff1a;中国 4、指标说明&#xff1a; 包含以下数据&#xff1a; 资产负债表&#xff0c;利润表&#xff0c;流动性表&#xff0c;资本充足率表&#xff0c;财务比率 global s…

java 高级面试题(借鉴)

谈谈ConcurrentHashMap的扩容机制 1.7版本 1. 1.7版本的ConcurrentHashMap是基于Segment分段实现的 2. 每个Segment相对于⼀个⼩型的HashMap 3. 每个Segment内部会进⾏扩容&#xff0c;和HashMap的扩容逻辑类似 4. 先⽣成新的数组&#xff0c;然后转移元素到新数组中 5. 扩容的…

vue3 antd项目实战——table表格(一文带你快速实现后台管理系统最常用的table表格)

零基础filter实现最简单的table表格知识调用核心干货下期预告关键字模糊查找&#xff08;纯前端&#xff09;关键字模糊查找&#xff08;前后交互&#xff09;知识调用 功能实现可能要用到的知识&#xff1a;vue3ant design vuets实战【ant-design-vue组件库引入】vue3项目实战…

超纯水如何除硼,除硼树脂技术分析

硼在超纯水中对晶圆厂的产品良品率的影响&#xff0c;那超纯水深度除硼的方式有哪些呢&#xff0c;在现今新型的微电子、太阳能等行业中&#xff0c;对超纯水的要求越来越高&#xff0c;对超纯水设备中PPb的硼和硅要求达到PPb级。但硼和硅属于弱电离元素&#xff0c;在水中不易…

泛型类的认识 - (了解数据结构的基础)

文章目录前言1. 为什么使用泛型类&#xff1f;2. 泛型类介绍总结前言 本篇通过介绍为什么使用泛型类&#xff0c;什么是泛型类&#xff0c;进一步为以后数据结构的学习打下基础。如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff0…

【强化学习论文合集】IJCAI-2021 强化学习论文

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

户外运动耳机推荐、这几款性能超强的户外运动耳机不可错过

在户外跑步的时候&#xff0c;也有不少朋友会选择戴上耳机&#xff0c;用音乐来”调味“&#xff0c;让跑步的过程不那么枯燥乏味。凡事有利就有弊&#xff0c;跑步时听音乐也如此&#xff0c;它的弊端之一是可能会有安全隐患。如果跑步时耳机音量开得太大&#xff0c;可能会忽…

JAVA-GUI工具的编写-----简易框架篇

好久没写东西了&#xff0c;毕竟一个屁民没那么多东西写的&#xff0c;来来回回就老三样&#xff0c;扯犊子的也不想写&#xff0c;今天给大家来个都感兴趣的-------如何编写自己的GUI工具&#xff1f; 当然了&#xff0c;IDEA怎么去破解&#xff0c;这里就不多比比&#xff0c…

java基础一:基础概念、面向对象

目录 1.基础概念 2.IDEA 开发工具 2.1 JDK环境配置 2.2 注释和变量 2.3 标识符 2.4 数据类型 2.5 算术运算符 2.6 赋值运算符 2.7 关系运算符 2.8 逻辑运算符 2.9 三元运算符 2.10 流程控制 3. 面向对象 3.1类和对象 3.2 静态 static 3.3 package 包 3.4 impor…

Spark系列之Spark概述

title: Spark系列 What is Apache Spark™? Apache Spark™ is a multi-language engine for executing data engineering, data science, and machine learning on single-node machines or clusters. 第一章 Spark概述 1.1 Spark的产生背景 1.1.1 MapReduce的发展 1.1.…

【Flink】时间语义和水位线的概念和使用

文章目录一 时间语义与Wartermark1 Flink中的时间语义2 EventTime的引入3 Watermark&#xff08;水位线&#xff09;&#xff08;1&#xff09;基本概念&#xff08;2&#xff09;水位线测试a 代码编写b 计算水位线c 计算结果d 深入分析&#xff08;3&#xff09;水位线时间测试…