day01-3-介面顯示&用戶登錄&餐桌狀態顯示

滿漢樓01-3

4.功能實現02

4.2菜單介面顯示

4.2.1功能說明

顯示主菜單、二級菜單和退出系統功能

image-20221019180951778 image-20221019181003579

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功能說明

image-20221019184757990 image-20221019184811764

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;
image-20221019201118306
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();
image-20221019203518428

修改處2:

image-20221019203618868

4.4顯示餐桌狀態

4.4.1功能說明

當用戶登錄成功之後,選擇顯示餐桌狀態,可以看到所有的餐桌編號以及對應的餐桌狀態

image-20221019204131622

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;
image-20221019205021938
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

image-20221019212238159
Tags: