欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java從零編寫吃貨聯(lián)盟訂餐系統(tǒng)全程講解

 更新時(shí)間:2022年12月13日 10:15:14   作者:Java Fans  
這篇文章主要介紹了Java訂餐系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

項(xiàng)目需求

(1)現(xiàn)今已經(jīng)進(jìn)入網(wǎng)絡(luò)時(shí)代,人們的日常生活已經(jīng)離不開(kāi)網(wǎng)絡(luò),如網(wǎng)上購(gòu)物、看新聞、交友等。

(2)“只要點(diǎn)點(diǎn)手指,就能送餐上門”,網(wǎng)上訂餐越來(lái)越受到都市年輕人的青睞。

(3)現(xiàn)要求開(kāi)發(fā)一個(gè)網(wǎng)上訂餐系統(tǒng),需要實(shí)現(xiàn)我要訂餐、查看餐袋、簽收訂單、刪除訂單、我要點(diǎn)贊和退出系統(tǒng)6個(gè)功能。

項(xiàng)目環(huán)境準(zhǔn)備

(1)開(kāi)發(fā)工具:MyEclipse,JDK1.7。

(2)開(kāi)發(fā)語(yǔ)言:Java。

案例覆蓋的技能點(diǎn)

(1)理解程序基本概念——程序、變量、數(shù)據(jù)類型。

(2)會(huì)使用順序、選擇、循環(huán)、跳轉(zhuǎn)語(yǔ)句編寫程序。

(3)了解類、對(duì)象、方法、私有變量等相關(guān)知識(shí)。

(4)掌握數(shù)據(jù)庫(kù)、JDBC、三層架構(gòu)等相關(guān)知識(shí)。

(5)掌握Druid連接池、Apache的DBUtils使用 。

難點(diǎn)分析

1、環(huán)境搭建和相關(guān)配置

(1)添加需要的jar包到項(xiàng)目中,將lib文件夾中的jar文件通過(guò)鼠標(biāo)右單擊選擇Build Path的方式添加到你設(shè)置的eatJar文件目錄里。

(2)創(chuàng)建database.properties文件,用來(lái)配置注冊(cè)驅(qū)動(dòng)和數(shù)據(jù)庫(kù)連接對(duì)象的相關(guān)數(shù)據(jù)。

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、使用數(shù)據(jù)庫(kù)保存Order訂單以及Food菜單信息

(1)創(chuàng)建數(shù)據(jù)表:Order表和Food表

# 創(chuàng)建訂單表order表
CREATE TABLE IF NOT EXISTS `order`(
`oid` INT PRIMARY KEY AUTO_INCREMENT COMMENT '訂單編號(hào)',
`name` VARCHAR(20) NOT NULL COMMENT '訂餐人姓名',
`dishMegs` VARCHAR(20) NOT NULL COMMENT '餐品信息',
`time` INT NOT NULL COMMENT '送餐時(shí)間',	
`address` VARCHAR(30) NOT NULL COMMENT '送餐地址',
`states` INT NOT NULL COMMENT '訂單狀態(tài),0表示已預(yù)訂,1表示已完成',
`sumPrices` DOUBLE NOT NULL COMMENT '訂單總金額'
);
# 創(chuàng)建Food表
CREATE TABLE IF NOT EXISTS `food`(
`fid` INT PRIMARY KEY AUTO_INCREMENT COMMENT '菜品編號(hào)',
`dishNames` VARCHAR(20) NOT NULL COMMENT '菜品名稱',
`prices` DOUBLE NOT NULL COMMENT '菜品單價(jià)',
`praiseNums` INT NOT NULL COMMENT '菜品點(diǎn)贊數(shù)'
);

(2)根據(jù)本項(xiàng)目的需求分析可知,每條訂單的信息都包括訂餐人姓名、選擇菜品及份數(shù)、送餐時(shí)間、送餐地址、訂單狀態(tài)、總金額,并且會(huì)有多條訂單信息,可以定義一個(gè)Order類和一個(gè)Food類,在類中將各個(gè)屬性設(shè)置為私有屬性,再添加這些屬性的有參構(gòu)造方法以及Get/Set方法,然后重寫toString()方法。

3、Dao層實(shí)現(xiàn)類中的增刪改查方法的編寫

(1)首先創(chuàng)建QueryRunner對(duì)象。

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

(2)增刪改查方法的編寫(以FoodDaoImpl類為例)

增刪改用queryRunner.update(sql, args);方法獲取。

Object[] args = { food.getDishNames(),food.getPrices(),food.getPraiseNums()};

查一個(gè)用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;
}

項(xiàng)目實(shí)現(xiàn)思路

1、數(shù)據(jù)初始化

(1)創(chuàng)建Food和Order實(shí)體類

(2)創(chuàng)建數(shù)據(jù)訪問(wèn)層Dao層的接口和實(shí)現(xiàn)類

(3)創(chuàng)建業(yè)務(wù)邏輯層Service層的接口和實(shí)現(xiàn)類

(4)創(chuàng)建視圖表示層View層相關(guān)操作類。

2、實(shí)現(xiàn)菜單切換

執(zhí)行程序,輸出系統(tǒng)主菜單。用戶根據(jù)顯示的主菜單,輸入功能編號(hào)實(shí)現(xiàn)菜單的顯示和菜單的切換,具體要求如下:

(1)當(dāng)輸入1~5時(shí),輸出相關(guān)的菜單項(xiàng)信息。

(2)顯示“輸入0返回”。輸入0,則返回主菜單,否則,退出系統(tǒng),終止程序的運(yùn)行,輸出提示信息“謝謝使用,歡迎下次光臨!”。

3、實(shí)現(xiàn)查看餐袋

遍歷系統(tǒng)中已有的訂單,并逐條顯示輸出,內(nèi)容包括序號(hào)、訂餐人姓名、訂餐信息(菜品名和份數(shù))、送餐時(shí)間、送餐地址、總金額、訂單狀態(tài)(已預(yù)訂或已完成)。

4、實(shí)現(xiàn)我要訂餐

為用戶顯示系統(tǒng)中提供的菜品信息,獲得訂餐人信息,形成訂單。每條訂單包含如下信息。

(1)訂餐人姓名:要求用戶輸入。

(2)選擇菜品及份數(shù):顯示3個(gè)供選擇菜品的序號(hào)、名稱、單價(jià)、點(diǎn)贊數(shù),提示用戶輸入要選擇的菜品序號(hào)及份數(shù)。

(3)送餐時(shí)間:當(dāng)天10:00-20:00間整點(diǎn)送餐,要求用戶輸入10-20的整數(shù),輸入錯(cuò)誤,重新輸入。

(4)送餐地址:要求用戶輸入。

(5)狀態(tài):訂單的當(dāng)前狀態(tài)。訂單有兩種狀態(tài),0為已預(yù)訂狀態(tài)(默認(rèn)狀態(tài)),1為已完成(訂單已簽收)。

(6)總金額:訂單總金額??偨痤~ = 菜品單價(jià)*份數(shù)+送餐費(fèi)。其中,當(dāng)單筆訂單金額達(dá)到50元時(shí),免收送餐費(fèi);否則,需交納5元送餐費(fèi)。

各數(shù)組中相同下標(biāo)的數(shù)據(jù)組成一條訂單信息,因此向每個(gè)數(shù)組相同下標(biāo)的位置各增加一條數(shù)據(jù)并保存。

5、實(shí)現(xiàn)簽收訂單

送餐完成后,要將用戶簽收訂單的狀態(tài)由“已預(yù)訂”修改為“已完成”。業(yè)務(wù)要求如下:

(1)如果訂單的當(dāng)前狀態(tài)為:“已預(yù)訂”且數(shù)組下標(biāo)為用戶輸入的訂單序號(hào)減1,就簽收。

(2)如果訂單的當(dāng)前狀態(tài)為:“已完成”且數(shù)組下標(biāo)為用戶輸入的訂單序號(hào)減1,不可簽收。

控制臺(tái)接收要簽收的訂單序號(hào)。利用for循環(huán)結(jié)構(gòu)遍歷全部訂單,利用if選擇結(jié)構(gòu)判斷names數(shù)組中訂餐人姓名是否為null,訂單狀態(tài)是否為已預(yù)訂且數(shù)組下標(biāo)是指定訂單序號(hào)減1。

如果條件成立,該訂單的狀態(tài)值修改為1(即已完成)。

6、實(shí)現(xiàn)刪除訂單

7、實(shí)現(xiàn)我要點(diǎn)贊

選擇執(zhí)行“我要點(diǎn)贊”菜單項(xiàng)。

(1)界面顯示菜品序號(hào)、菜品名、單價(jià)、點(diǎn)贊數(shù)(如為0可不顯示),提示用戶輸入要點(diǎn)贊的菜品序號(hào)。

(2)接收要點(diǎn)贊的菜品序號(hào)。

(3)praiseNums中對(duì)應(yīng)菜品的點(diǎn)贊數(shù)加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);
	//查一個(gè)
	Food selectOneFood(String dishName);
	//查全部
	List<Food> selectAllFood();
}

4、定義FoodDaoImpl實(shí)現(xiàn)類

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);
	//查一個(gè)
	Order selectOne(int oid);
	//查全部
	List<Order> selectAll();
}

6、定義OrderDaoImpl實(shí)現(xiàn)類

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;
	}
	//查一個(gè)
	@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;
//對(duì)菜品進(jìn)行增刪改查的業(yè)務(wù)
public interface FoodService {
	//添加
	int addFood(Food food);
	//刪除
	int deleteFood(String dishName);
	//修改
	int updateFood(Food food);
	//查一個(gè)
	Food selectFoodByFid(String dishName);
	//查全部
	List<Food> selectAllFood();
}

8、定義FoodServiceImpl實(shí)現(xiàn)類

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 {
	//創(chuàng)建FoodDaoImpl對(duì)象;
	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) {
		//判斷表中是否存在將要?jiǎng)h除的菜品
		Food food1=foodDao.selectOneFood(dishName);
		if(food1!=null){
			System.out.println("刪除成功!");
			return foodDao.deleteFood(dishName);
		}else{
			System.out.println("菜品不存在,無(wú)法刪除!");
		}
		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);
	//查一個(gè)
	Order selectOneOrder(int oid);
	//查全部
	List<Order> selectAllOrder();
}

10、定義OrderServiceImpl實(shí)現(xiàn)類

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("您要?jiǎng)h除的訂單信息不存在,無(wú)法刪除!");
		}else if(order.getStates()==0){
			System.out.println("該訂單仍在預(yù)定狀態(tài),不能刪除!");
		}else{
			System.out.println("刪除成功!");
			return orderDao.delete(oid);
		}
		return 0;
	}
	@Override
	public int updateOrder(Order order) {
		if(order==null){
			System.out.println("你要簽收的訂單信息不存在,無(wú)法簽收!");
		}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);
	// 定義一個(gè)歡迎菜單方法
	public void showMenu() {
		System.out.println(" ————————?dú)g迎使用菜品管理系統(tǒng)————————");
		System.out.println("-------------------------");
		System.out.println("1.添加菜品");
		System.out.println("2.刪除菜品");
		System.out.println("3.修改菜品");
		System.out.println("4.查看菜單");
		System.out.println("5.退出系統(tǒng)");
		System.out.println("-------------------------");
	}
	// 1、添加菜品方法
	public void addFood() {
		System.out.println("請(qǐng)輸入菜品名稱:");
		String foodName = sc.next();
		System.out.println("請(qǐng)輸入菜品價(jià)格:");
		double foodPrice = sc.nextDouble();
		Food food = new Food(foodName, foodPrice, 0);
		foodS.addFood(food);
	}
	// 2、刪除菜品方法
	public void delFood(){
		System.out.println("請(qǐng)輸入需要?jiǎng)h除的菜品名稱:");
		String foodName=sc.next();
		foodS.deleteFood(foodName);
	}
	// 3、修改菜品方法
	public void updateFood() {
		System.out.println("請(qǐng)輸入需要修改的菜品名稱:");
		String foodName=sc.next();
		System.out.println("請(qǐng)輸入需要修改的菜品價(jià)格:");
		double foodPrice=sc.nextDouble();
		System.out.println("請(qǐng)輸入需要修改菜品點(diǎn)贊數(shù):");
		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("序號(hào)\t名稱\t\t單價(jià)\t點(diǎn)贊數(shù)");
		int i=1;
		for (Food food : listFoods) {
			System.out.println((i) + "\t" + food.getDishNames()
					+ "\t\t" + food.getPrices() + "\t"
					+ food.getPraiseNums());
			i++;
		}
		return listFoods;
	}
	// 定義方法實(shí)現(xiàn)菜品管理系統(tǒng)
	public void startFood() {
		// 默認(rèn)初始值
		boolean flag = true;
		// 循環(huán)初始值
		int num = -1;
		do {
			// 首先顯示菜單管理系統(tǒng)
			showMenu();
			System.out.println("請(qǐng)輸入菜單操作項(xiàng):");
			int choose = sc.nextInt();
			switch (choose) {
			case 1:
				// 添加菜品
				addFood();
				break;
			case 2:
				// 刪除菜品
				delFood();
				break;
			case 3:
				// 修改菜品
				updateFood();
				break;
			case 4:
				// 查看菜品
				showFood();
				break;
			case 5:
				// 退出系統(tǒng)
				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();
	// 定義一個(gè)訂餐使用系統(tǒng)
	public static void showSystem() {
		// 輸出歡迎菜單
		System.out.println("歡迎使用吃貨聯(lián)盟訂餐系統(tǒng)");
		System.out.println("-------------------------");
		System.out.println("1.我要訂餐");
		System.out.println("2.查看餐帶");
		System.out.println("3.簽收訂單");
		System.out.println("4.刪除訂單");
		System.out.println("5.我要點(diǎn)贊");
		System.out.println("6.退出系統(tǒng)");
		System.out.println("-------------------------");
	}
	// 定義方法實(shí)現(xiàn)訂餐管理系統(tǒng)
	public void startFood() {
		// 默認(rèn)初始值
		boolean flag = true;
		// 循環(huán)初始值
		int num = -1;
		do {
			// 首先顯示菜單管理系統(tǒng)
			showSystem();
			System.out.println("請(qǐng)輸入訂單操作項(xiàng):");
			int choose = input.nextInt();
			switch (choose) {
			case 1:
				// 我要訂餐
				addOrder();
				break;
			case 2:
				// 查看餐帶
				showOrder();
				break;
			case 3:
				// 簽收訂單
				updateOrder();
				break;
			case 4:
				// 刪除訂單
				delOrder();
				break;
			case 5:
				// 我要點(diǎn)贊
				orderLike();
				break;
			case 6:
				// 退出系統(tǒng)
				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("請(qǐng)輸入訂餐人姓名:");
		String orderName = input.next();
		// orders[i].setName(orderName);
		// (2)選擇菜品及份數(shù)
		List<Food> foods = fm.showFood();
		System.out.println("請(qǐng)選擇菜品序號(hào):");
		int caiNum = input.nextInt();
		System.out.println("選擇份數(shù):");
		int fenNum = input.nextInt();
		String dishFen = foods.get(caiNum - 1).getDishNames() + " " + fenNum
				+ "份";
		// (3)送餐時(shí)間
		System.out.println("請(qǐng)選擇送餐時(shí)間(10:00-20:00整點(diǎn)送餐):");
		int orderTime = input.nextInt();
		while (orderTime < 10 || orderTime > 20) {
			System.out.println("輸入錯(cuò)誤,請(qǐng)重新輸入:");
			orderTime = input.nextInt();
			// orders[i].setTime(input.nextInt());
		}
		// (4)送餐地址
		System.out.println("請(qǐng)輸入送餐地址:");
		String orderAddress = input.next();
		// orders[i].setAddress(input.next());
		// (5)狀態(tài)(新增時(shí),訂單狀態(tài)均為默認(rèn)狀態(tài)0)
		// orders[i].setState(0);
		// (6)總金額 =
		// 菜品單價(jià)*份數(shù)+送餐費(fèi)。其中,當(dāng)單筆訂單金額達(dá)到50元時(shí),免收送餐費(fèi);否則,需交納5元送餐費(fèi)。
		double caiPrices = foods.get(caiNum - 1).getPrices() * fenNum;
		if (caiPrices < 50) {
			caiPrices = caiPrices + 5;
			// orders[i].setSumPrices(caiPrices);
		}
		// 將訂餐數(shù)據(jù)插入到數(shù)據(jù)庫(kù)
		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("序號(hào)\t\t訂餐人\t\t餐品信息\t\t\t送餐時(shí)間\t\t送餐地址\t\t\t總金額\t\t訂單狀態(tài)");
		for (int i = 0; i < orders.size(); i++) {
			if (orders.get(i) != null) {
				String time = orders.get(i).getTimes() + "點(diǎn)";
				String sumPrice = orders.get(i).getSumPrices() + "元";
				String state;
				if (orders.get(i).getStates() == 0) {
					state = "已預(yù)訂";
				} 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("請(qǐng)選擇需要簽收的訂單序號(hào):");
		int orderNum = input.nextInt();
		Order order = od.selectOneOrder(orderNum);
		od.updateOrder(order);
	}
	// 4.刪除訂單
	public void delOrder() {
		System.out.println("--刪除訂單--");
		System.out.println("請(qǐng)選擇需要?jiǎng)h除的訂單序號(hào):");
		int orderNum = input.nextInt();
		od.delOrder(orderNum);
	}
	// 5.我要點(diǎn)贊
	public void orderLike() {
		System.out.println("--我要點(diǎn)贊--");
		List<Food> foods = fm.showFood();
		System.out.println("請(qǐng)選擇點(diǎn)贊的菜品序號(hào):");
		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("點(diǎn)贊后的菜品展示:");
		System.out.println("序號(hào)\t名稱\t\t單價(jià)\t點(diǎn)贊數(shù)");
		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();
	}
}

到此這篇關(guān)于Java從零編寫吃貨聯(lián)盟訂餐系統(tǒng)全程講解的文章就介紹到這了,更多相關(guān)Java訂餐系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java從工廠方法模式到 IOC/DI思想

    詳解Java從工廠方法模式到 IOC/DI思想

    工廠方法(Factory Method)模式的意義是定義一個(gè)創(chuàng)建產(chǎn)品對(duì)象的工廠接口,將實(shí)際創(chuàng)建工作推遲到子類當(dāng)中。核心工廠類不再負(fù)責(zé)產(chǎn)品的創(chuàng)建,這樣核心類成為一個(gè)抽象工廠角色,僅負(fù)責(zé)具體工廠子類必須實(shí)現(xiàn)的接口。本文將詳細(xì)介紹Java從工廠方法模式到 IOC/DI思想。
    2021-06-06
  • java定長(zhǎng)隊(duì)列的實(shí)現(xiàn)示例

    java定長(zhǎng)隊(duì)列的實(shí)現(xiàn)示例

    定長(zhǎng)隊(duì)列是一種有限容量的隊(duì)列,對(duì)于某些應(yīng)用場(chǎng)景非常有用,本文主要介紹了java定長(zhǎng)隊(duì)列的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • java中treemap和treeset實(shí)現(xiàn)紅黑樹(shù)

    java中treemap和treeset實(shí)現(xiàn)紅黑樹(shù)

    這篇文章主要為大家詳細(xì)介紹了java中treemap和treeset實(shí)現(xiàn)紅黑樹(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • SpringBoot?AOP統(tǒng)一處理Web請(qǐng)求日志的示例代碼

    SpringBoot?AOP統(tǒng)一處理Web請(qǐng)求日志的示例代碼

    springboot有很多方法處理日志,例如攔截器,aop切面,service中代碼記錄等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot?AOP統(tǒng)一處理Web請(qǐng)求日志的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • SpringBoot HTTP 400排查方式

    SpringBoot HTTP 400排查方式

    這篇文章主要介紹了SpringBoot HTTP 400排查方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 基于java解析JSON的三種方式詳解

    基于java解析JSON的三種方式詳解

    這篇文章主要介紹了基于java解析JSON的三種方式,結(jié)合實(shí)例形式詳細(xì)分析了json解析的原理與GSON、FastJSON等常用解析操作技巧,需要的朋友可以參考下
    2016-12-12
  • Springboot參數(shù)校驗(yàn)之分組校驗(yàn)、嵌套校驗(yàn)的實(shí)現(xiàn)

    Springboot參數(shù)校驗(yàn)之分組校驗(yàn)、嵌套校驗(yàn)的實(shí)現(xiàn)

    日常開(kāi)發(fā)中,免不了需要對(duì)請(qǐng)求參數(shù)進(jìn)行校驗(yàn),諸如判空,長(zhǎng)度,正則,集合等,復(fù)雜一點(diǎn)的請(qǐng)求參數(shù)可能會(huì)包含嵌套,分組校驗(yàn),本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2023-08-08
  • Java鎖擦除與鎖粗化概念和使用詳解

    Java鎖擦除與鎖粗化概念和使用詳解

    這篇文章主要介紹了Java鎖擦除與鎖粗化概念和使用,鎖擦除的主要判定依據(jù)來(lái)源于逃逸分析的數(shù)據(jù)支持,如果判斷在一段代碼中,堆上的所有數(shù)據(jù)都不會(huì)逃逸出去從而被其他線程訪問(wèn)到,那就可以把它們當(dāng)做棧上數(shù)據(jù)對(duì)待,認(rèn)為它們是線程私有的,同步加鎖自然就無(wú)須進(jìn)行
    2023-02-02
  • SpringCloud Nacos配置中心管理超詳細(xì)講解

    SpringCloud Nacos配置中心管理超詳細(xì)講解

    這篇文章主要介紹了Springcloud中的Nacos服務(wù)配置,本文以用戶微服務(wù)為例,進(jìn)行統(tǒng)一的配置,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • spring?boot權(quán)限管理的幾種常見(jiàn)方式

    spring?boot權(quán)限管理的幾種常見(jiàn)方式

    這篇文章主要給大家介紹了關(guān)于spring?boot權(quán)限管理的幾種常見(jiàn)方式,在Web應(yīng)用程序中,用戶權(quán)限管理是至關(guān)重要的,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08

最新評(píng)論