滿漢樓02
4.功能實作04
4.6顯示所有菜品
4.6.1思路分析
創建一個選單表menu,在Domain層創建與選單表對應的Javabean-Menu類,在DAO層創建MenuDAO,完成對menu表的增刪改查,在Service層創建一個和menu表相關的service類,service類提供給界面層使用
4.6.2代碼實作
1.創建menu表
-- 創建menu表(id,name,type,price)
CREATE TABLE menu(
id INT PRIMARY KEY AUTO_INCREMENT,#自增主鍵,作為菜譜編號(唯一)
NAME VARCHAR(50) NOT NULL DEFAULT '',#菜品名稱
TYPE VARCHAR(50) NOT NULL DEFAULT '',#菜品種類
price DOUBLE NOT NULL DEFAULT 0 #價格
)CHARSET=utf8
-- 添加測驗資料
INSERT INTO menu VALUES(NULL,'八寶飯','主食',10);
INSERT INTO menu VALUES(NULL,'叉燒包','主食',20);
INSERT INTO menu VALUES(NULL,'宮保雞丁','熱菜',30);
INSERT INTO menu VALUES(NULL,'山藥撥魚','涼菜',14);
INSERT INTO menu VALUES(NULL,'銀絲卷','甜食',9);
INSERT INTO menu VALUES(NULL,'水煮魚','熱菜',26);
INSERT INTO menu VALUES(NULL,'甲魚湯','湯菜',100);
INSERT INTO menu VALUES(NULL,'雞蛋湯','湯菜',16);
2.創建Menu類
package com.li.mhl.domain;
/**
* @author 李
* @version 1.0
* 該類和menu表對應
*/
public class Menu {
/**
* Field Type Null Key Default Extra
* ------ ----------- ------ ------ ------- ----------------
* id int(11) NO PRI (NULL) auto_increment
* name varchar(50) NO
* type varchar(50) NO
* price double NO 0
*/
private Integer id;
private String name;
private String type;
private Double price;
public Menu() {
}
public Menu(Integer id, String name, String type, Double price) {
this.id = id;
this.name = name;
this.type = type;
this.price = price;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return id + "\t\t\t" + name + "\t\t" + type + "\t\t" + price;
}
}
3.創建MenuDAO類
package com.li.mhl.dao;
import com.li.mhl.domain.Menu;
/**
* @author 李
* @version 1.0
*/
public class MenuDAO extends BasicDAO<Menu>{
}
4.創建MenuService類
package com.li.mhl.service;
import com.li.mhl.dao.MenuDAO;
import com.li.mhl.domain.Menu;
import java.util.List;
/**
* @author 李
* @version 1.0
* 完成對menu表的各種操作(通過呼叫MenuDAO)
*/
public class MenuService {
//定義MenuDAO屬性
private MenuDAO menuDAO = new MenuDAO();
//撰寫方法,查詢所有菜品(回傳所有的菜品給界面使用)
public List<Menu> list() {
return menuDAO.queryMulti("select * from menu", Menu.class);
}
}
5.修改MHLView
修改處1:定義屬性
//定義MenuService屬性
private MenuService menuService = new MenuService();
修改處2:撰寫方法
//顯示所有菜品
public void listMenu() {
List<Menu> list = menuService.list();
System.out.println("\n菜品編號\t\t菜品名\t\t類別\t\t價格");
for (Menu menu: list) {
System.out.println(menu);
}
System.out.println("============顯示完畢============");
}
修改處3:在內層回圈的二級選單中呼叫該方法
4.6.3測驗
測驗通過
4.7點餐功能
4.7.1功能說明
4.7.2思路分析
功能如上圖所示,分析如下:
- 在輸入點餐桌號和菜品編號時都需要對其進行合理性校驗,如果不合理,給出提示資訊
- 當點餐成功之后,餐桌的狀態state應該發生變化,由已經預定變為進餐中
- 一旦點餐,就應該生成賬單
根據上述的分析,整體的框架應該如下:
4.7.3代碼實作
1.創建bill表
-- 創建bill賬單表(id,billId,menuId,nums,billDate,money,state,diningTableId)
#賬單流水, 考慮可以分開結賬, 并考慮將來分別統計各個不同菜品的銷售情況
CREATE TABLE bill (
id INT PRIMARY KEY AUTO_INCREMENT, #自增主鍵
billId VARCHAR(50) NOT NULL DEFAULT '',#賬單號可以按照自己規則生成 UUID
menuId INT NOT NULL DEFAULT 0,#菜品的編號, 也可以使用外鍵
nums SMALLINT NOT NULL DEFAULT 0,#份數
money DOUBLE NOT NULL DEFAULT 0, #金額
diningTableId INT NOT NULL DEFAULT 0, #餐桌
billDate DATETIME NOT NULL ,#訂單日期
state VARCHAR(50) NOT NULL DEFAULT '' # 狀態 '未結賬' , '已經結賬-現金/支付寶', '掛單'
)CHARSET=utf8;
2.創建Bill類
package com.li.mhl.domain;
import java.util.Date;
/**
* @author 李
* @version 1.0
* 該類和 bill表對應
*/
public class Bill {
/**
* Field Type Null Key Default Extra
* ------------- ----------- ------ ------ ------- ----------------
* id int(11) NO PRI (NULL) auto_increment
* billId varchar(50) NO
* menuId int(11) NO 0
* nums smallint(6) NO 0
* money double NO 0
* diningTableId int(11) NO 0
* billDate datetime NO (NULL)
* state varchar(50) NO
*/
private Integer id;
private String billId;
private Integer menuId;
private Integer nums;
private Double money;
private Integer diningTableId;
private Date billDate;
private String state;
public Bill() {
}
public Bill(Integer id, String billId, Integer menuId, Integer nums, Double money, Integer diningTableId, Date billDate, String state) {
this.id = id;
this.billId = billId;
this.menuId = menuId;
this.nums = nums;
this.money = money;
this.diningTableId = diningTableId;
this.billDate = billDate;
this.state = state;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getBillId() {
return billId;
}
public void setBillId(String billId) {
this.billId = billId;
}
public Integer getMenuId() {
return menuId;
}
public void setMenuId(Integer menuId) {
this.menuId = menuId;
}
public Integer getNums() {
return nums;
}
public void setNums(Integer nums) {
this.nums = nums;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
public Integer getDiningTableId() {
return diningTableId;
}
public void setDiningTableId(Integer diningTableId) {
this.diningTableId = diningTableId;
}
public Date getBillDate() {
return billDate;
}
public void setBillDate(Date billDate) {
this.billDate = billDate;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
3.創建BillDAO類
package com.li.mhl.dao;
import com.li.mhl.domain.Bill;
/**
* @author 李
* @version 1.0
*/
public class BillDAO extends BasicDAO<Bill>{
}
4.創建BillService類
package com.li.mhl.service;
import com.li.mhl.dao.BillDAO;
import java.util.UUID;
/**
* @author 李
* @version 1.0
* 處理和賬單表bill相關的業務邏輯
*/
public class BillService {
//定義BillDAO屬性
private BillDAO billDAO = new BillDAO();
//定義MenuService屬性
private MenuService menuService = new MenuService();
//定義DiningTableService屬性
private DiningTableService diningTableService = new DiningTableService();
//撰寫點餐的方法
/**
* 1.生成賬單
* 2.需要更新對應的餐桌的狀態
* 3.如成功回傳true,失敗回傳false
*/
public boolean orderMenu(int menuId, int nums, int diningTableId) {
//使用UUID生成一個賬單號
String billID = UUID.randomUUID().toString();
//將賬單生成到bill表()
//這里的金額money = 由menuId(菜品編號)查詢出來的單價 * nums
//因此,在MenuService類中撰寫方法getMenuById()查詢菜品單價
int update = billDAO.update("insert into bill values(null,?,?,?,?,?,now(),'未結賬')",
billID, menuId, nums, menuService.getMenuById(menuId).getPrice() * nums, diningTableId);
if (update <= 0) {
return false;
}
//需要更新對應的餐桌的狀態
//在DiningTableService類中撰寫方法updateDiningTableState()更新對應的餐桌的狀態
return diningTableService.updateDiningTableState(diningTableId, "就餐中");
}
}
5.修改MenuService類
在該類中增加方法getMenuById()
//根據菜品id,回傳Menu物件
public Menu getMenuById(int id) {
return menuDAO.querySingle("select * from menu where id=?", Menu.class, id);
}
6.修改DiningTableService類
在該類中增加方法updateDiningTableState()
//需要提供一個更新 餐桌狀態的方法
public boolean updateDiningTableState(int id, String state) {
int update =
diningTableDAO.update("update diningTable set state=? where id=?", state, id);
return update > 0;
}
7.修改MHLView
修改處1:在該類中定義BillService屬性
//定義BillService屬性
private BillService billService = new BillService();
修改處2:在該類中增加方法
//完成點餐操作
public void orderMenu() {
System.out.println("============點餐服務============");
System.out.print("請輸入點餐的桌號(-1退出): ");
int orderDiningTableId = Utility.readInt();
if (orderDiningTableId == -1) {
System.out.println("============取消點餐============");
return;
}
//驗證餐桌號是否存在
DiningTable diningTableById = diningTableService.getDiningTableById(orderDiningTableId);
if (diningTableById == null) {
System.out.println("============餐桌號不存在============");
return;
}
System.out.print("請輸入菜品編號(-1退出): ");
int orderMenuId = Utility.readInt();
if (orderMenuId == -1) {
System.out.println("============取消點餐============");
return;
}
//驗證菜品編號是否存在
Menu menuById = menuService.getMenuById(orderMenuId);
if (menuById == null) {
System.out.println("============菜品不存在============");
return;
}
System.out.print("請輸入菜品數量(0~99)(-1退出): ");
int orderNums = Utility.readInt();
if (orderNums == -1) {
System.out.println("============取消點餐============");
return;
}
if (orderNums <= 0) {
System.out.println("============菜品數量不能小于等于0============");
return;
}
//點餐
if (billService.orderMenu(orderMenuId, orderNums, orderDiningTableId)) {
System.out.println("============點餐成功============");
} else {
System.out.println("============點餐失敗============");
}
}
修改處3:在二級選單中呼叫該方法
4.7.4測驗
- 正常數值輸入
- 非法數值判斷
測驗通過
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/518703.html
標籤:Java
上一篇:LRU演算法簡單實作
