Java从零编写吃货联盟订餐系统全程讲解

目录
  • 项目需求
  • 项目环境准备
  • 案例覆盖的技能点
  • 难点分析
    • 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订餐系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java实战之吃货联盟订餐系统

    一.前言 刚刚学完java基础入门,主要学习Java基本环境搭建,定义变量.选择结构,循环结构.数组等.本阶段结束尝试接触此次吃货联盟订餐系统,第一次敲这么长的代码,后面多见识见识应该就好了,多加努力啊! 吃货联盟订餐系统包含的功能:我要订餐.查看餐袋.签收订单.删除订单.我要点赞.退出系统 二.基本业务分析 我要订餐 1.输入订餐人姓名 2.将所有的菜品进行展示 3.输入要订的菜品序号 4.输入要订的菜品份数 5.输入配送时间 6.输入配送地址 7.显示订餐信息 查看餐袋 1.直接展示所有的订

  • Java吃货联盟订餐系统代码实例

    本文实例为大家分享了Java订餐系统的具体代码,供大家参考,具体内容如下 package cn.practice1200; import java.util.Scanner; public class Eater_Alliance { /** * 吃货联盟订餐系统 * * @author QCD * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner

  • Java从零编写吃货联盟订餐系统全程讲解

    目录 项目需求 项目环境准备 案例覆盖的技能点 难点分析 1.环境搭建和相关配置 2.使用数据库保存Order订单以及Food菜单信息 3.Dao层实现类中的增删改查方法的编写 项目实现思路 1.数据初始化 2.实现菜单切换 3.实现查看餐袋 4.实现我要订餐 5.实现签收订单 6.实现删除订单 7.实现我要点赞 代码展示 1.订单信息-Order类 2.菜品信息-Food类 3.定义FoodDao接口 4.定义FoodDaoImpl实现类 5.定义OrderDao接口 6.定义OrderDao

  • Java从零编写汽车租赁系统全程分析

    目录 覆盖知识 项目需求 设计步骤 开发思路 类的属性和方法 代码展示 效果展示 覆盖知识 程序基本概念.数据类型.流程控制.顺序.选择 .循环.跳转语句.变量.类.方法.继承.多态. 掌握数据库.JDBC.三层架构等相关知识. 掌握Druid连接池.Apache的DBUtils使用 . 项目需求 某汽车租赁公司出租多种轿车和客车,出租费用以日为单位计算. 出租车型及信息如下表所示: 车型 具体信息 日租金 折扣 轿车 宝马X6(京NY28588) 800 days>7天9折 days>30天

  • Java实现简单订餐系统

    本文实例为大家分享了Java实现简单订餐系统的具体代码,供大家参考,具体内容如下 import java.util.Scanner; import java.util.*; public class OrderingMsg { public static void main(String[] args) { // 数据主体:一组订单信息 String[] names = new String[4]; // 订餐人名称 String[] dishMegs = new String[4]; // 所

  • java实现订餐系统

    本文实例为大家分享了java实现订餐系统的具体代码,供大家参考,具体内容如下 import java.util.Scanner; public class versionAlliance { public static void main(String[] args) { Scanner in = new Scanner(System.in); String[] names=new String[5];//客户姓名 String[] dishes= {"红烧带鱼","鱼香肉丝

  • Java实现的猴子吃桃问题算法示例

    本文实例讲述了Java实现的猴子吃桃问题算法.分享给大家供大家参考,具体如下: 猴子吃桃问题 概述:猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又吃了一个:第二天又将剩下的桃子吃掉了一半,又多吃了一个:以后每天都吃前一天身下的一半零一个,到第n天再想吃的时候就只剩下一个桃子了,求第一天共摘了多少个桃子? 思路及演算步骤(求出共摘多少桃子的函数表达式): 离现在的天数作为变量 f(1) = 1 (剩下桃子的数目) f(2) = f(3) - (吃掉了一些) =   f(3) -(f(3)/

  • Java使用组件编写窗口实现网上文件下载

    本文实例为大家分享了Java使用组件编写窗口下载网上文件的具体代码,供大家参考,具体内容如下 如图 实现代码: package com.rain.get; import java.awt.*; import java.awt.event.*; import java.net.*; import java.io.*; import javax.swing.*; //从网络取得文件 public class GetFileDemo extends JFrame{ JTextField jtfUrl;

  • java外卖订餐系统小项目

    本文实例为大家分享了java外卖订餐系统的具体代码,供大家参考,具体内容如下 执行结果: 通过选择功能序号,执行响应的功能: 代码实现: package 外卖订餐系统; /* * 代码优点,使用 循环: * 显示菜单, * 根据用户选择的数字执行相应功能(功能实现:do..while循环.) */ import java.util.Scanner; public class OrderingMsg { public static void main(String[] args) { //数据主题

  • 基于Java的Socket编写的C/S聊天程序实现

    一个很久以前写的能够支持C/S模式聊天的Demo,利用Java的Socket写的. 只能聊一句就下线,挺low的. 服务器端程序Server import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class TestTcpServer { pub

随机推荐