Java從零編寫吃貨聯(lián)盟訂餐系統(tǒng)全程講解
項(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定長(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-02java中treemap和treeset實(shí)現(xiàn)紅黑樹(shù)
這篇文章主要為大家詳細(xì)介紹了java中treemap和treeset實(shí)現(xiàn)紅黑樹(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11SpringBoot?AOP統(tǒng)一處理Web請(qǐng)求日志的示例代碼
springboot有很多方法處理日志,例如攔截器,aop切面,service中代碼記錄等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot?AOP統(tǒng)一處理Web請(qǐng)求日志的相關(guān)資料,需要的朋友可以參考下2023-02-02Springboot參數(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-08SpringCloud Nacos配置中心管理超詳細(xì)講解
這篇文章主要介紹了Springcloud中的Nacos服務(wù)配置,本文以用戶微服務(wù)為例,進(jìn)行統(tǒng)一的配置,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11spring?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