day01-3-介面顯示&用戶登錄&餐桌狀態顯示
滿漢樓01-3
4.功能實現02
4.2菜單介面顯示
4.2.1功能說明
顯示主菜單、二級菜單和退出系統功能
4.2.2程式碼實現
先搭建介面顯示的大體框架,具體的功能後面再實現
創建MHLView類:
package com.li.mhl.view;
import com.li.mhl.utils.Utility;
/**
* @author 李
* @version 1.0
* 這是主介面
*/
public class MHLView {
//控制是否退出菜單
private boolean loop = true;
private String key = "";//接收用戶的輸入
public static void main(String[] args) {
new MHLView().mainMenu();
}
//顯示主菜單
public void mainMenu() {
while (loop) {
System.out.println("==================滿漢樓==================");
System.out.println("\t\t 1 登錄滿漢樓");
System.out.println("\t\t 2 退出滿漢樓");
System.out.print("請輸入你的選擇:");
key = Utility.readString(1);//接收用戶選擇
switch (key) {
case "1":
System.out.print("請輸入員工號: ");
String id=Utility.readString(50);
System.out.print("請輸入密 碼: ");
String pws = Utility.readString(50);
//到資料庫去判斷,這裡先簡單判斷一下
if ("123".equals(pws)) {
System.out.println("==================登錄成功=================\n");
//顯示二級菜單,這裡也和一級菜單一樣是循環操作,也放在循環語句中
while (loop){
System.out.println("==================滿漢樓(二級菜單)==================");
System.out.println("\t\t 1 顯示餐桌狀態");
System.out.println("\t\t 2 預定餐桌");
System.out.println("\t\t 3 顯示所有菜品");
System.out.println("\t\t 4 點餐服務");
System.out.println("\t\t 5 參看賬單");
System.out.println("\t\t 6 結賬");
System.out.println("\t\t 9 退出滿漢樓");
System.out.print("請輸入你的選擇:");
key = Utility.readString(1);//接收用戶的選擇
switch(key){
case "1":
System.out.println("顯示餐桌狀態");
break;
case "2":
System.out.println("預定餐桌");
break;
case "3":
System.out.println("顯示所有菜品");
break;
case "4":
System.out.println("點餐服務");
break;
case "5":
System.out.println("參看賬單");
break;
case "6":
System.out.println("結賬");
break;
case "9":
//因為loop同時控制兩層循環,因此當loop設為false時,
// 裡層循環退出之後,外層循環也會隨之退出
loop=false;
break;
default:
System.out.println("輸入有誤,請重新輸入");
break;
}
}
}else {
System.out.println("==================登錄失敗==================");
}
break;
case "2":
loop = false;//退出一級菜單的循環
break;
default:
System.out.println("輸入有誤,重新輸入..");
}
}
System.out.println("你退出了滿漢樓系統~");
}
}
4.3用戶登錄功能
4.3.1功能說明

4.3.2思路分析
在資料庫創建一張employee表,創建對應的Javabean,創建對應的EmployeeDAO,service層...
(大體上就是根據框架圖從下至上編寫程式碼)
4.3.3程式碼實現
4.3.3.1創建資料庫mhl和表employee
-- 創建滿漢樓的資料庫
CREATE DATABASE mhl;
-- 創建表employee(主鍵id,empId,name,pwd,job等)
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,#自增
empId VARCHAR(50) UNIQUE NOT NULL DEFAULT '',#員工號
pwd CHAR(32) NOT NULL DEFAULT '',#密碼md5
NAME VARCHAR(50) NOT NULL DEFAULT '',#姓名
job VARCHAR(50) NOT NULL DEFAULT ''#崗位
)CHARSET=utf8
-- 插入測試數據
INSERT INTO employee VALUES(NULL,'6668612',MD5('123456'),'張三丰','經理');
INSERT INTO employee VALUES(NULL,'6668622',MD5('123456'),'小龍女','服務員');
INSERT INTO employee VALUES(NULL,'6668633',MD5('123456'),'張無忌','收銀員');
INSERT INTO employee VALUES(NULL,'666666',MD5('123456'),'olien','經理');
SELECT * FROM employee;
4.3.3.2創建Employee類
創建和表employee對應的Javabean-Employee
package com.li.mhl.domain;
/**
* @author 李
* @version 1.0
* 這是一個Javabean ,和表employee對應
*/
public class Employee {
/**
* +-------+-------------+------+-----+---------+----------------+
* | Field | Type | Null | Key | Default | Extra |
* +-------+-------------+------+-----+---------+----------------+
* | id | int(11) | NO | PRI | NULL | auto_increment |
* | empId | varchar(50) | NO | | | |
* | pwd | char(32) | NO | | | |
* | name | varchar(50) | NO | | | |
* | job | varchar(50) | NO | | | |
* +-------+-------------+------+-----+---------+----------------+
*/
private Integer id;
private String empId;
private String pwd;
private String name;
private String job;
public Employee() {//無參構造器,底層的Apache-DBUtils反射需要
}
public Employee(Integer id, String empId, String pwd, String name, String job) {
this.id = id;
this.empId = empId;
this.pwd = pwd;
this.name = name;
this.job = job;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmpId() {
return empId;
}
public void setEmpId(String empId) {
this.empId = empId;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", empId='" + empId + '\'' +
", pwd='" + pwd + '\'' +
", name='" + name + '\'' +
", job='" + job + '\'' +
'}';
}
}
4.3.3.3創建EmployeeDAO類
package com.li.mhl.dao;
import com.li.mhl.domain.Employee;
/**
* @author 李
* @version 1.0
*/
public class EmployeeDAO extends BasicDAO<Employee>{
//這裡還可以執行特有的操作
}
4.3.3.4創建EmployeeService類
編寫一個getEmployeeByIdAndPwd方法,來驗證帳號密碼,並返回相應值
package com.li.mhl.service;
import com.li.mhl.dao.EmployeeDAO;
import com.li.mhl.domain.Employee;
/**
* @author 李
* @version 1.0
* 該類完成對employee表的各種操作(通過調用EmployeeDAO對象完成)
*/
public class EmployeeService {
//定義一個EmployeeDAO屬性
private EmployeeDAO employeeDAO = new EmployeeDAO();
//登錄校驗方法
//根據empId和pwd返回一個Employee對象,如果查詢不到,就返回null
public Employee getEmployeeByIdAndPwd(String empId, String pwd) {
//注意密碼使用md5加密後再查詢比較
Employee employee =
employeeDAO.querySingle("select * from employee where empId=? and pwd=md5(?) ", Employee.class, empId, pwd);
return employee;
}
}
4.3.3.5修改MHLView類
在MHLView類中的裡層循環中,調用方法getEmployeeByIdAndPwd,如果返回的employee對象非空,則說明存在該用戶,登錄成功
修改處1:增加EmployeeService屬性
//定義EmployeeService屬性
private EmployeeService employeeService=new EmployeeService();
修改處2:

4.4顯示餐桌狀態
4.4.1功能說明
當用戶登錄成功之後,選擇顯示餐桌狀態,可以看到所有的餐桌編號以及對應的餐桌狀態
4.4.2思路分析
創建表diningTable,創建對應的Javabean,創建對應的DAO,service層...
4.4.3程式碼實現
4.4.3.1創建diningTable表
-- 創建表diningTable(主鍵id,empId,name,pwd,job等)
CREATE TABLE diningTable(
id INT PRIMARY KEY AUTO_INCREMENT,#自增,表示餐桌編號
state VARCHAR(20)NOT NULL DEFAULT '',#餐桌狀態
orderName VARCHAR(50) NOT NULL DEFAULT '',#預定人的名字
orderTel VARCHAR(20) NOT NULL DEFAULT ''#預定人的電話
)CHARSET=utf8
-- 插入測試數據
INSERT INTO diningTable VALUES(NULL,'空','','');
INSERT INTO diningTable VALUES(NULL,'空','','');
INSERT INTO diningTable VALUES(NULL,'空','','');
SELECT * FROM diningTable;
4.4.3.2創建DiningTable類
package com.li.mhl.domain;
/**
* @author 李
* @version 1.0
* 這是一個Javabean ,和表 diningTable對應
*/
public class DiningTable {
/**
* Field Type Null Key Default Extra
* --------- ----------- ------ ------ ------- ----------------
* id int(11) NO PRI (NULL) auto_increment
* state varchar(20) NO
* orderName varchar(50) NO
* orderTel varchar(20) NO
*/
private Integer id;
private String state;
private String orderName;
private String orderTel;
public DiningTable() {//無參構造器,反射需要
}
public DiningTable(Integer id, String state, String orderName, String orderTel) {
this.id = id;
this.state = state;
this.orderName = orderName;
this.orderTel = orderTel;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public String getOrderTel() {
return orderTel;
}
public void setOrderTel(String orderTel) {
this.orderTel = orderTel;
}
@Override
public String toString() {
return id + "\t\t\t" + state;
}
}
4.4.3.3創建DiningTableDAO類
package com.li.mhl.dao;
import com.li.mhl.domain.DiningTable;
/**
* @author 李
* @version 1.0
*/
public class DiningTableDAO extends BasicDAO<DiningTable>{
//如果有特別的操作,可以寫在DiningTableDAO中
}
4.4.3.4創建DiningTableService類
package com.li.mhl.service;
import com.li.mhl.dao.DiningTableDAO;
import com.li.mhl.domain.DiningTable;
import java.util.List;
/**
* @author 李
* @version 1.0
* 該類完成對 diningTable表的各種操作(通過調用DiningTableDAO對象完成)
*/
public class DiningTableService {//業務層
//定義一個DiningTableDAO對象
private DiningTableDAO diningTableDAO = new DiningTableDAO();
//返回所有餐桌的資訊
public List<DiningTable> list(){
List<DiningTable> diningTables =
diningTableDAO.queryMulti("select id,state from diningTable", DiningTable.class);
return diningTables;
}
}
4.4.3.5修改MHLView類
修改處1:增加DiningTableService屬性
//定義DiningTableService屬性
private DiningTableService diningTableService=new DiningTableService();
修改處2:增加listDiningTable()方法,顯示餐桌資訊
//顯示餐桌狀態
public void listDiningTable(){
List<DiningTable> list = diningTableService.list();
System.out.println("\n餐桌編號\t\t餐桌狀態");
for (DiningTable diningTable:list) {
System.out.println(diningTable);
}
System.out.println("============顯示完畢============");
}
修改處3:在內層循環中調用方法listDiningTable
