Java满汉楼项目 韩顺平 自学笔记

项目部署以及存放

自己跟学了韩顺平老师的满汉楼项目,相关代码已经上传至码云,需要的可以自己fork
码云-满汉楼

文件配置

文件配置

其它说明

拓展功能

相对于老韩讲的内容,扩展了职工管理,这里只加了查询功能,后续新增和删除可以自己实现,这里考虑到需要管理员操作于是没有继续下去了,后续有时间会回来继续修改、完善代码。

需求说明

需求说明

界面设计

用户登录

用户登录

显示餐桌状态

显示餐桌状态

预定

预定

显示菜品

显示菜品

点餐

点餐

查看账单

查看账单

结账

结账

程序框架图

程序框架图

扩展思考

扩展思考

扩展思考2 分表

扩展思考2 分表
在这里插入图片描述

相关代码

dao包

BasicDAO

package com.manhanlou.dao;

import com.manhanlou.utils.DruidUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * 开发 BasicDAO 是其他DAO的父类
 * <T>泛型指定具体类型
 *
 * @author wty
 * @date 2022/11/7 23:37
 */
@SuppressWarnings({"all"})
public class BasicDAO<T> {
    private QueryRunner queryRunner = new QueryRunner();

    /**
     * 开发通用的DML方法
     *
     * @param params 这种写法可以参考源码 queryRunner.query()
     * @param sqlStr
     * @return int
     * @Date 2022/11/7 23:43
     * @Author wty
     **/
    public int dml(String sqlStr, Object... params) {
        Connection connection = null;

        int affectedrows = 0;
        try {
            connection = DruidUtils.getConnection();
            affectedrows = queryRunner.update(connection, sqlStr, params);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            DruidUtils.close(null, null, connection);
        }

        return affectedrows;
    }

    /**
     * 返回多个对象(即查询的结果是多行),针对任意表
     *
     * @return java.util.List<T> 返回对应的ArrayList 集合
     * @param: sqlStr sql语句可以有?
     * @param: clazz 传入一个类的Class对象,比如 Actor.class
     * @param: params 传入?具体的值,可以是多个
     * @date 2022/11/8 0:04
     * @author wty
     **/
    public List<T> queryMulti(String sqlStr, Class<T> clazz, Object... params) {
        Connection connection = null;
        List<T> list = null;

        try {
            connection = DruidUtils.getConnection();
            list = queryRunner.query(connection, sqlStr, new BeanListHandler<T>(clazz), params);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DruidUtils.close(null, null, connection);
        }
        return list;
    }


    /**
     * 返回单行多列数据
     *
     * @return T
     * @param: sqlStr
     * @param: clazz
     * @param: params
     * @date 2022/11/8 0:19
     * @author wty
     **/
    public T querySingle(String sqlStr, Class<T> clazz, Object... params) {
        Connection connection = null;
        T t = null;

        try {
            connection = DruidUtils.getConnection();
            t = queryRunner.query(connection, sqlStr, new BeanHandler<T>(clazz), params);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DruidUtils.close(null, null, connection);
        }
        return t;
    }

    /**
     * 返回单行单列
     *
     * @return T
     * @param: sqlStr
     * @param: clazz
     * @param: params
     * @date 2022/11/8 0:22
     * @author wty
     **/
    public Object queryScalar(String sqlStr, Object... params) {
        Connection connection = null;
        Object o = null;

        try {
            connection = DruidUtils.getConnection();
            o = queryRunner.query(connection, sqlStr, new ScalarHandler(), params);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DruidUtils.close(null, null, connection);
        }
        return o;
    }
}

BillDao

package com.manhanlou.dao;

import com.manhanlou.domain.Bill;

/**
 * @author wty
 * @date 2022/11/9 14:51
 */
public class BillDao extends BasicDAO<Bill> {
    // 这里可以写特有的Dao
}

DiningTableDao

package com.manhanlou.dao;

import com.manhanlou.domain.DiningTable;
import com.manhanlou.utils.DruidUtils;

import java.util.List;

/**
 * @author wty
 * @date 2022/11/9 10:51
 */
public class DiningTableDao extends BasicDAO<DiningTable> {
    // 这里可以写特有的Dao

}

EmployeeDao

package com.manhanlou.dao;

import com.manhanlou.domain.Employee;

/**
 * @author wty
 * @date 2022/11/9 10:06
 */
public class EmployeeDao extends BasicDAO<Employee> {
    // 这里可以写特有的Dao
}

EmployeeInfoDao

package com.manhanlou.dao;

import com.manhanlou.domain.EmployeeInfo;

/**
 * @author wty
 * @date 2022/11/10 9:39
 */
public class EmployeeInfoDao extends BasicDAO<EmployeeInfo> {
}

MenuDao

package com.manhanlou.dao;

import com.manhanlou.domain.Menu;

/**
 * @author wty
 * @date 2022/11/9 13:49
 */
public class MenuDao extends BasicDAO<Menu> {
    // 这里可以写特有的Dao
}

MultiTableDao

package com.manhanlou.dao;


import com.manhanlou.domain.MultiTableBean;

/**
 * @author wty
 * @date 2022/11/9 22:44
 */
public class MultiTableDao extends BasicDAO<MultiTableBean> {
    // 这里可以写特有的Dao

}

domain包

Bill

package com.manhanlou.domain;

import java.time.LocalDateTime;
import java.util.Date;

/**
 * 映射表bill
 *
 * @author wty
 * @date 2022/11/9 14:48
 */
public class Bill {
    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 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;
    }

    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;
    }

    @Override
    public String toString() {
        return "Bill{" +
                "id=" + id +
                ", billId='" + billId + '\'' +
                ", menuId=" + menuId +
                ", nums=" + nums +
                ", money=" + money +
                ", diningTableId=" + diningTableId +
                ", billDate=" + billDate +
                ", state='" + state + '\'' +
                '}';
    }
}

DiningTable

package com.manhanlou.domain;

/**
 * @author wty
 * @date 2022/11/9 10:45
 */
public class DiningTable {
    private Integer id;
    private String state;
    private String orderName;
    private String 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;
    }

    /**
     * 这里定义无参构造器用于反射
     *
     * @param
     * @return
     * @date 2022/11/9 10:48
     * @author wty
     **/
    public DiningTable() {
    }

    public DiningTable(Integer id, String state, String orderName, String orderTel) {
        this.id = id;
        this.state = state;
        this.orderName = orderName;
        this.orderTel = orderTel;
    }

    @Override
    public String toString() {
        return "DiningTable{" +
                "id=" + id +
                ", state='" + state + '\'' +
                ", orderName='" + orderName + '\'' +
                ", orderTel='" + orderTel + '\'' +
                '}';
    }
}

Employee

package com.manhanlou.domain;

/**
 * 这是一个javabean和表employee映射
 *
 * @author wty
 * @date 2022/11/9 10:04
 */
public class Employee {
    /**
     * id INT PRIMARY KEY AUTO_INCREMENT, #自增
     * empId VARCHAR(50) NOT NULL DEFAULT '',#员工号
     * pwd CHAR(32) NOT NULL DEFAULT '',#密码md5
     * NAME VARCHAR(50) NOT NULL DEFAULT '',#姓名
     * job VARCHAR(50) NOT NULL DEFAULT '' #岗位
     */
    private Integer id;
    private String empId;
    private String pwd;
    private String name;
    private String job;

    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;
    }

    /**
     * 这里定义无参构造器用于反射
     *
     * @param
     * @return
     * @date 2022/11/9 10:48
     * @author wty
     **/
    public Employee() {
    }

    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 + '\'' +
                '}';
    }
}

EmployeeInfo

package com.manhanlou.domain;

import java.util.Date;

/**
 * @author wty
 * @date 2022/11/10 9:35
 */
public class EmployeeInfo {
    private Integer id;
    private String empId;
    private String name;
    private String job;
    private String sex;
    private Date borndate;
    private String certno;
    private String study;
    private String marry;
    private String phone;
    private String address;
    private String email;
    private Date registertime;
    private String bz;

    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 getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBorndate() {
        return borndate;
    }

    public void setBorndate(Date borndate) {
        this.borndate = borndate;
    }

    public String getCertno() {
        return certno;
    }

    public void setCertno(String certno) {
        this.certno = certno;
    }

    public String getStudy() {
        return study;
    }

    public void setStudy(String study) {
        this.study = study;
    }

    public String getMarry() {
        return marry;
    }

    public void setMarry(String marry) {
        this.marry = marry;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Date getRegistertime() {
        return registertime;
    }

    public void setRegistertime(Date registertime) {
        this.registertime = registertime;
    }

    public String getBz() {
        return bz;
    }

    public void setBz(String bz) {
        this.bz = bz;
    }

    public EmployeeInfo() {
    }

    public EmployeeInfo(Integer id, String empId, String name, String job, String sex, Date borndate, String certno, String study, String marry, String phone, String address, String email, Date registertime, String bz) {
        this.id = id;
        this.empId = empId;
        this.name = name;
        this.job = job;
        this.sex = sex;
        this.borndate = borndate;
        this.certno = certno;
        this.study = study;
        this.marry = marry;
        this.phone = phone;
        this.address = address;
        this.email = email;
        this.registertime = registertime;
        this.bz = bz;
    }

    @Override
    public String toString() {
        return "EmployeeInfo{" +
                "id=" + id +
                ", empId='" + empId + '\'' +
                ", name='" + name + '\'' +
                ", job='" + job + '\'' +
                ", sex='" + sex + '\'' +
                ", borndate=" + borndate +
                ", certno='" + certno + '\'' +
                ", study='" + study + '\'' +
                ", marry='" + marry + '\'' +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                ", email='" + email + '\'' +
                ", registertime=" + registertime +
                ", bz='" + bz + '\'' +
                '}';
    }
}

Menu

package com.manhanlou.domain;

/**
 * @author wty
 * @date 2022/11/9 13:47
 */
public class Menu {
    private Integer id;
    private String name;
    private String type;
    private Double price;

    public Menu(Integer id, String name, String type, Double price) {
        this.id = id;
        this.name = name;
        this.type = type;
        this.price = price;
    }

    public Menu() {
    }

    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 "Menu{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", price=" + price +
                '}';
    }
}

MultiTableBean

package com.manhanlou.domain;

import java.util.Date;

/**
 * 这里是一个javabean可以和多张表联合
 *
 * @author wty
 * @date 2022/11/9 22:41
 */
public class MultiTableBean {
    private Integer id;
    private Integer menuId;
    private Integer nums;
    private Double money;
    private Integer diningTableId;
    private String state;
    /**
     * 来自diningTable 的菜品名,菜品价格
     */
    private String name;
    private Double price;

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getMenuId() {
        return menuId;
    }

    public void setMenuId(Integer menuId) {
        this.menuId = menuId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    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 String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public MultiTableBean() {
    }

    public MultiTableBean(Integer id, Integer menuId, String name, Integer nums, Double money, Integer diningTableId, String state, Double price) {
        this.id = id;
        this.menuId = menuId;
        this.name = name;
        this.nums = nums;
        this.money = money;
        this.diningTableId = diningTableId;
        this.state = state;
        this.price = price;
    }

    @Override
    public String toString() {
        return "MultiTableBean{" +
                "id=" + id +
                ", menuId=" + menuId +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", nums=" + nums +
                ", money=" + money +
                ", diningTableId=" + diningTableId +
                ", state='" + state + '\'' +
                '}';
    }
}

service包

BillService

package com.manhanlou.service;

import com.manhanlou.dao.BillDao;
import com.manhanlou.domain.Bill;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author wty
 * @date 2022/11/9 14:51
 */
public class BillService {
    private BillDao billDao = new BillDao();

    public int insert(String billId, Integer menuId,
                      Integer nums, Double money, Integer diningTableId,
                      String state) {
        String sqlStr = "insert into bill values(null,?,?,?,?,?,now(),?)";
        int affectedRows = billDao.dml(sqlStr, billId, menuId, nums, money, diningTableId, state);
        return affectedRows;
    }

    public List<Bill> queryBill() {
        List<Bill> list = new ArrayList<>();
        String sqlStr = "SELECT id,menuId,nums,money,diningTableId,billDate,state FROM bill";

        list = billDao.queryMulti(sqlStr, Bill.class);

        return list;
    }

    public int updateBillState(Integer diningTableId, String state) {
        String sqlStr = "UPDATE bill SET state = ? WHERE diningTableId = ? AND state = ?";
        int affectedRows = billDao.dml(sqlStr, state, diningTableId, "未结账");
        return affectedRows;
    }

    /**
     * 判断是否有未支付的账单
     *
     * @param
     * @return boolean
     * @date 2022/11/9 22:11
     * @author wty
     **/
    public boolean checkPayAccount(Integer diningTableId) {
        String sqlStr = "SELECT * FROM bill WHERE diningTableId = ? AND state = ? limit 0,1";
        Bill bill = billDao.querySingle(sqlStr, Bill.class, diningTableId, "未结账");

        return bill != null;
    }
}

DiningTableService

package com.manhanlou.service;

import com.manhanlou.dao.DiningTableDao;
import com.manhanlou.domain.DiningTable;

import java.util.List;

/**
 * @author wty
 * @date 2022/11/9 10:48
 */
public class DiningTableService {
    private DiningTableDao diningTableDao = new DiningTableDao();

    private DiningTable diningTable = new DiningTable();

    /**
     * 查询显示所有点餐状态
     *
     * @param
     * @return void
     * @date 2022/11/9 11:07
     * @author wty
     **/
    public void queryState() {
        String sqlStr = "SELECT id,state from diningTable";
        List<DiningTable> list = diningTableDao.queryMulti(sqlStr, DiningTable.class);
        System.out.println("餐桌编号\t\t餐桌状态");
        for (DiningTable table : list) {
            System.out.println(table.getId() + "\t\t     " + table.getState());
        }
    }

    /**
     * 订座,查询餐桌状态
     *
     * @param
     * @return void
     * @param: id
     * @date 2022/11/9 11:32
     * @author wty
     **/
    public Object queryDiningTableState(Integer id) {
        // 1.首先检查餐桌是否存在
        String sqlStr = "SELECT state FROM diningTable WHERE id = ?";
        Object o = diningTableDao.queryScalar(sqlStr, id);
        return o;
    }

    /**
     * 订桌:修改diningTable表的状态和订餐人等信息
     *
     * @param
     * @return boolean
     * @param: id
     * @param: orderName
     * @param: orderTel
     * @date 2022/11/9 12:06
     * @author wty
     **/
    public void saveOrder(Integer id, String orderName, String orderTel, String state) {
        String sqlStr = "update diningTable set state = ?,orderName = ?,orderTel = ? where id = ?";
        diningTableDao.dml(sqlStr, state, orderName, orderTel, id);
    }

    /**
     * 订桌:修改diningTable表的状态和订餐人等信息
     *
     * @param
     * @return void
     * @param: id
     * @date 2022/11/9 14:41
     * @author wty
     **/
    public void updateDiningTableState(Integer id, String state) {
        String sqlStr = "update diningTable set state = ? where id = ?";
        diningTableDao.dml(sqlStr, state, id);
    }

}

EmployeeInfoService

package com.manhanlou.service;

import com.manhanlou.dao.EmployeeDao;
import com.manhanlou.dao.EmployeeInfoDao;
import com.manhanlou.domain.EmployeeInfo;

import java.util.List;

/**
 * @author wty
 * @date 2022/11/10 9:39
 */
public class EmployeeInfoService {
    private EmployeeInfoDao employeeInfoDao = new EmployeeInfoDao();

    public List<EmployeeInfo> queryPersonMange(String empId) {
        String sqlStr = "SELECT b.id,b.empId,b.name,b.job,b.`sex`," +
                "       b.`borndate`,b.`certno`,b.`study`,b.`marry`," +
                "       b.`phone`,b.`address`,b.`email`,b.`registertime`,b.`bz`" +
                "      FROM employeeInfo b where empId = ?";
        List<EmployeeInfo> list = employeeInfoDao.queryMulti(sqlStr, EmployeeInfo.class, empId);
        return list;
    }
}

EmployeeService

package com.manhanlou.service;

import com.manhanlou.dao.EmployeeDao;
import com.manhanlou.domain.Employee;
import com.manhanlou.utils.DruidUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 业务层:完成对Employee的各种操作--通过调用EmployeeDao完成
 *
 * @author wty
 * @date 2022/11/9 10:07
 */
public class EmployeeService {
    /**
     * 调用EmployeeDao完成各种操作
     */
    private EmployeeDao employeeDao = new EmployeeDao();

    /**
     * 根据empId和pwd返回一个Employee对象
     * 如果查询不到,就返回空
     *
     * @param
     * @return com.manhanlou.domain.Employee
     * @param: empId
     * @param: pwd
     * @date 2022/11/9 10:10
     * @author wty
     **/
    public Employee getEmployeeByEmpidAndPwd(String empId, String pwd) {
        Employee employee = null;

        String sqlStr = "select id,empId,pwd,name,job from employee where empId = ? and pwd = md5(?)";

        employee = employeeDao.querySingle(sqlStr, Employee.class, empId, pwd);

        return employee;
    }

    public List<Employee> getEmployeeInfo() {
        List<Employee> list = new ArrayList<>();

        String sqlStr = "SELECT empid,NAME,job FROM employee";

        list = employeeDao.queryMulti(sqlStr, Employee.class);

        return list;
    }
}

MenuService

package com.manhanlou.service;

import com.manhanlou.dao.MenuDao;
import com.manhanlou.domain.Menu;

import java.util.List;

/**
 * 完成Menu的各种操作
 *
 * @author wty
 * @date 2022/11/9 13:49
 */
public class MenuService {
    private MenuDao menuDao = new MenuDao();

    public List<Menu> queryMenu() {
        String sqlStr = "SELECT id,name,type,price FROM menu";
        List<Menu> list = menuDao.queryMulti(sqlStr, Menu.class);
        return list;
    }

    public Object queryMenuId(Integer id) {
        String sqlStr = "SELECT id FROM menu where id = ?";
        Object o = menuDao.queryScalar(sqlStr, id);
        return o;
    }

    public Menu queryMenu(Integer id) {
        String sqlStr = "SELECT id,name,type,price FROM menu where id = ?";
        Menu menu = menuDao.querySingle(sqlStr, Menu.class, id);
        return menu;
    }
}

MultiTableService

package com.manhanlou.service;

import com.manhanlou.dao.MultiTableDao;
import com.manhanlou.domain.Bill;
import com.manhanlou.domain.MultiTableBean;

import java.util.ArrayList;
import java.util.List;

/**
 * 多表查询业务
 *
 * @author wty
 * @date 2022/11/9 22:51
 */
public class MultiTableService {
    private MultiTableDao multiTableDao = new MultiTableDao();

    public List<MultiTableBean> queryMultiTable() {
        List<MultiTableBean> list = new ArrayList<>();
        String sqlStr = "SELECT a.id,NAME,menuId,price,nums,money,diningTableId,billDate,state FROM bill a,menu b WHERE a.menuId = b.id";

        list = multiTableDao.queryMulti(sqlStr, MultiTableBean.class);

        return list;
    }
}

utils包

DruidUtils

package com.manhanlou.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * @author wty
 * @date 2022/11/7 15:30
 */
public class DruidUtils {
    private static DataSource dataSource = null;

    static {
        Properties properties = new Properties();
        try {
            properties.load(new FileInputStream("src/druid.properties"));
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static Connection getConnection() {
        Connection connection = null;
        try {
            connection = dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return connection;
    }

    /**
     * 数据库连接池技术中:close方法不是真正断掉连接,而是把使用的Connection对象放回连接池
     *
     * @param statement
     * @param connection
     * @return void
     * @Param * @param resultSet
     * @Date 2022/11/7 15:43
     * @Author wty
     **/
    public static void close(ResultSet resultSet, Statement statement, Connection connection) {
        try {
            if (null != resultSet) {
                resultSet.close();
            }
            if (null != statement) {
                statement.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }


}

TestDao

package com.manhanlou.utils;

import org.junit.Test;

import java.sql.Connection;
import java.util.Scanner;

/**
 * @author wty
 * @date 2022/11/9 0:36
 */
public class TestDao {
    @Test
    public void testDao() {
        // 测试
        System.out.println("请输入一个整数");
        int i = Utility.readInt();
        System.out.println(i);

        Connection connection = DruidUtils.getConnection();
        System.out.println(connection.getClass());
        DruidUtils.close(null, null, connection);

    }
}

Utility

package com.manhanlou.utils;


/**
 * 工具类的作用:
 * 处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。
 */

import java.util.*;

/**


 */
@SuppressWarnings({"all"})
public class Utility {
    //静态属性。。。
    private static Scanner scanner = new Scanner(System.in);


    /**
     * 功能:读取键盘输入的一个菜单选项,值:1——5的范围
     * @return 1——5
     */
    public static char readMenuSelection() {
        char c;
        for (; ; ) {
            String str = readKeyBoard(1, false);//包含一个字符的字符串
            c = str.charAt(0);//将字符串转换成字符char类型
            if (c != '1' && c != '2' &&
                    c != '3' && c != '4' && c != '5') {
                System.out.print("选择错误,请重新输入:");
            } else break;
        }
        return c;
    }

    /**
     * 功能:读取键盘输入的一个字符
     * @return 一个字符
     */
    public static char readChar() {
        String str = readKeyBoard(1, false);//就是一个字符
        return str.charAt(0);
    }

    /**
     * 功能:读取键盘输入的一个字符,如果直接按回车,则返回指定的默认值;否则返回输入的那个字符
     * @param defaultValue 指定的默认值
     * @return 默认值或输入的字符
     */

    public static char readChar(char defaultValue) {
        String str = readKeyBoard(1, true);//要么是空字符串,要么是一个字符
        return (str.length() == 0) ? defaultValue : str.charAt(0);
    }

    /**
     * 功能:读取键盘输入的整型,长度小于2位
     * @return 整数
     */
    public static int readInt() {
        int n;
        for (; ; ) {
            String str = readKeyBoard(2, false);//一个整数,长度<=2位
            try {
                n = Integer.parseInt(str);//将字符串转换成整数
                break;
            } catch (NumberFormatException e) {
                System.out.print("数字输入错误,请重新输入:");
            }
        }
        return n;
    }

    /**
     * 功能:读取键盘输入的 整数或默认值,如果直接回车,则返回默认值,否则返回输入的整数
     * @param defaultValue 指定的默认值
     * @return 整数或默认值
     */
    public static int readInt(int defaultValue) {
        int n;
        for (; ; ) {
            String str = readKeyBoard(10, true);
            if (str.equals("")) {
                return defaultValue;
            }

            //异常处理...
            try {
                n = Integer.parseInt(str);
                break;
            } catch (NumberFormatException e) {
                System.out.print("数字输入错误,请重新输入:");
            }
        }
        return n;
    }

    /**
     * 功能:读取键盘输入的指定长度的字符串
     * @param limit 限制的长度
     * @return 指定长度的字符串
     */

    public static String readString(int limit) {
        return readKeyBoard(limit, false);
    }

    /**
     * 功能:读取键盘输入的指定长度的字符串或默认值,如果直接回车,返回默认值,否则返回字符串
     * @param limit 限制的长度
     * @param defaultValue 指定的默认值
     * @return 指定长度的字符串
     */

    public static String readString(int limit, String defaultValue) {
        String str = readKeyBoard(limit, true);
        return str.equals("") ? defaultValue : str;
    }


    /**
     * 功能:读取键盘输入的确认选项,Y或N
     * 将小的功能,封装到一个方法中.
     * @return Y或N
     */
    public static char readConfirmSelection() {
        System.out.println("请输入你的选择(Y/N)");
        char c;
        for (; ; ) {//无限循环
            //在这里,将接受到字符,转成了大写字母
            //y => Y n=>N
            String str = readKeyBoard(1, false).toUpperCase();
            c = str.charAt(0);
            if (c == 'Y' || c == 'N') {
                break;
            } else {
                System.out.print("选择错误,请重新输入:");
            }
        }
        return c;
    }

    /**
     * 功能: 读取一个字符串
     * @param limit 读取的长度
     * @param blankReturn 如果为true ,表示 可以读空字符串。 
     * 					  如果为false表示 不能读空字符串。
     *
     *	如果输入为空,或者输入大于limit的长度,就会提示重新输入。
     * @return
     */
    private static String readKeyBoard(int limit, boolean blankReturn) {

        //定义了字符串
        String line = "";

        //scanner.hasNextLine() 判断有没有下一行
        while (scanner.hasNextLine()) {
            line = scanner.nextLine();//读取这一行

            //如果line.length=0, 即用户没有输入任何内容,直接回车
            if (line.length() == 0) {
                if (blankReturn) return line;//如果blankReturn=true,可以返回空串
                else continue; //如果blankReturn=false,不接受空串,必须输入内容
            }

            //如果用户输入的内容大于了 limit,就提示重写输入
            //如果用户如的内容 >0 <= limit ,我就接受
            if (line.length() < 1 || line.length() > limit) {
                System.out.print("输入长度(不能大于" + limit + ")错误,请重新输入:");
                continue;
            }
            break;
        }

        return line;
    }

    public static String getUUID32() {
        return UUID.randomUUID().toString().replace("-", "").toLowerCase();

    }
}

view包

MHLView

package com.manhanlou.view;

import com.manhanlou.domain.*;
import com.manhanlou.service.*;
import com.manhanlou.utils.Utility;
import org.apache.commons.dbutils.DbUtils;

import java.util.Date;
import java.util.List;

/**
 * 主界面
 *
 * @author wty
 * @date 2022/11/9 0:43
 */
@SuppressWarnings({"all"})
public class MHLView {
    public static void main(String[] args) {
        MyView myView = new MyView();
        myView.showFirstMenu();
    }
}

class MyView {
    /**
     * 一级菜单的循环控制变量
     */
    private boolean firstMenuloop = true;
    /**
     * 一级菜单接收用户的输入
     */
    private String key;

    /**
     * 操作employee表
     */
    private EmployeeService employeeService = new EmployeeService();
    private DiningTableService diningTableService = new DiningTableService();
    private MenuService menuService = new MenuService();
    private BillService billService = new BillService();
    private MultiTableService multiTableService = new MultiTableService();
    private EmployeeInfoService employeeInfoService = new EmployeeInfoService();

    public void showFirstMenu() {
        while (firstMenuloop) {
            System.out.println("===========满汉楼==========");
            System.out.println("1.登录满汉楼");
            System.out.println("2.退出满汉楼");
            System.out.println("请输入你的选择:");
            key = Utility.readString(1);

            if ("1".equals(key)) {
                /**
                 * 二级菜单的循环控制变量
                 */
                System.out.println("请输入员工号");
                String empId = Utility.readString(50);
                System.out.println("请输入密码");
                String pwd = Utility.readString(50);

                if (isVarified(empId, pwd)) {
                    boolean secondMenuloop = true;
                    while (secondMenuloop) {
                        System.out.println("===========满汉楼二级菜单==========");
                        System.out.println("1.显示餐桌状态");
                        System.out.println("2.预定餐桌");
                        System.out.println("3.显示所有菜品");
                        System.out.println("4.点餐服务");
                        System.out.println("5.查看账单");
                        System.out.println("6.结账");
                        System.out.println("7.多表联合查询");
                        System.out.println("8.人事管理");
                        System.out.println("9.退出满汉楼");
                        System.out.println("请输入你的选择:");
                        key = Utility.readString(1);

                        switch (key) {
                            case "1":
                                System.out.println("====1.显示餐桌状态====");
                                diningTableService.queryState();
                                System.out.println("====显示完毕====");
                                break;
                            case "2":
                                System.out.println("====2.预定餐桌====");
                                orderTable();
                                break;
                            case "3":
                                System.out.println("====3.显示所有菜品====");
                                showMenu();
                                break;
                            case "4":
                                System.out.println("====4.点餐服务====");
                                orderMeals();
                                break;
                            case "5":
                                System.out.println("====5.查看账单====");
                                showBill();
                                break;
                            case "6":
                                System.out.println("====6.结账服务====");
                                payAccount();
                                break;
                            case "7":
                                System.out.println("====7.多表联合查询====");
                                multiQuery();
                                break;
                            case "8":
                                System.out.println("====7.人事管理====");
                                personMange();
                                break;
                            case "9":
                                secondMenuloop = false;
                                firstMenuloop = false;
                                break;
                            default:
                                System.out.println("输入有误,请重新输入");
                        }
                    } // while

                } else {
                    System.out.println("---登录失败---");
                }

            } else if ("2".equals(key)) {
                firstMenuloop = false;
                System.out.println("退出满汉楼系统!");
            } else {
                System.out.println("输入有误,请重新输入");
            }
        }
    }

    /**
     * 验证登录名和密码
     *
     * @param
     * @return boolean
     * @param: empId
     * @param: pwd
     * @date 2022/11/9 13:52
     * @author wty
     **/
    public boolean isVarified(String empId, String pwd) {
        Employee employee = employeeService.getEmployeeByEmpidAndPwd(empId, pwd);
        if (null == employee) {
            return false;
        } else {
            System.out.println("---登录成功:" + employee.getName() + "---");
            return true;
        }
    }

    /**
     * 预定座位
     *
     * @param
     * @return void
     * @date 2022/11/9 13:53
     * @author wty
     **/
    public void orderTable() {
        // orderFlag记录是否循环
        boolean orderFlag = true;
        while (orderFlag) {
            System.out.println("请选择要预定餐桌编号(-1退出)");
            Integer id = Utility.readInt(4);
            if (-1 == id) {
                break;
            }
            // 1.检验餐桌编号是否存在 2.该餐桌是否被预定
            // flag:记录餐桌预定情况
            boolean flag = true;
            Object o = diningTableService.queryDiningTableState(id);

            // 检验餐桌编号是否存在
            if (null == o) {
                System.out.println("没有餐桌编号为:" + id + "的餐桌");
                flag = false;
            } else {
                // 2.如果存在,需要查看餐桌的状态
                if ("已预定".equals(o)) {
                    System.out.println("餐桌编号为:" + id + "的餐桌,已经被预定了!");
                    flag = false;
                } else if ("用餐".equals(o)) {
                    System.out.println("餐桌编号为:" + id + "的餐桌,正在用餐!");
                    flag = false;
                }
            }

            if (flag) {
                System.out.println("确认是否预定(Y/N)");
                // 该方法是无限循环:输入的值是Y或者N,如果不是就提示输入错误
                char isOrder = Utility.readConfirmSelection();
//                if ('N' == isOrder) {
//
//                }
                if ('Y' == isOrder) {
                    System.out.println("预定人姓名:");
                    String orderName = Utility.readString(50);
                    System.out.println("预定人电话:");
                    String orderTel = Utility.readString(20);
                    diningTableService.saveOrder(id, orderName, orderTel, "已预定");
                    System.out.println("=====预定成功=====");

                }
            }


        }
    }

    /**
     * 显示菜单
     *
     * @param
     * @return void
     * @date 2022/11/9 13:53
     * @author wty
     **/
    public void showMenu() {
        List<Menu> list = menuService.queryMenu();
        System.out.println("菜品编号\t\t菜品名\t\t\t类别\t\t\t价格 ");
        for (Menu menu : list) {
            System.out.println(menu.getId() + "\t\t\t" + menu.getName()
                    + "\t\t\t" + menu.getType() + "\t\t" + menu.getPrice());
        }
        System.out.println("=====显示完毕=====");
    }

    /**
     * 点餐
     *
     * @param
     * @return void
     * @date 2022/11/9 14:21
     * @author wty
     **/
    public void orderMeals() {
        while (true) {
            System.out.println("请选择点餐的桌号(-1退出)");
            Integer Tableid = Utility.readInt();
            if (-1 == Tableid) {
                break;
            }
            Object o = diningTableService.queryDiningTableState(Tableid);

            if (null == o) {
                System.out.println("输入的餐桌编号:" + Tableid + "不存在");
            } else {

                System.out.println("请选择要菜品编号(-1退出)");
                Integer Menuid = Utility.readInt();
                if (-1 == Menuid) {
                    break;
                }
                Object object = menuService.queryMenuId(Menuid);
                if (null == object) {
                    System.out.println("输入的菜品编号:" + Menuid + "不存在");
                } else {
                    Menuid = (Integer) object;
                    System.out.println("请选择要菜品数量(-1退出)");
                    Integer nums = Utility.readInt();
                    if (-1 == nums) {
                        break;
                    }
                    if (nums <= 0) {
                        System.out.println("输入的菜品数量:" + nums + "不符合规范");
                    } else {
                        System.out.println("确认是否点这个菜(Y/N)");
                        char choose = Utility.readConfirmSelection();

                        if ('Y' == choose) {
                            // 修改餐桌状态
                            diningTableService.updateDiningTableState(Tableid, "用餐");
                            // 生成账单
                            String billId = Utility.getUUID32();

                            // 获取金额
                            Menu menu = menuService.queryMenu(Menuid);
                            Double price = menu.getPrice();

                            int rows = billService.insert(billId, Menuid, nums, price * nums, Tableid, "未结账");
                            System.out.println("点餐结果 = " + rows);

                            System.out.println("=====点餐成功=====");
                        }

                    } // nums else


                } // Menuid else


            } // DiningTableState else

        } // while
    }

    /**
     * 显示账单
     *
     * @param
     * @return void
     * @date 2022/11/9 19:00
     * @author wty
     **/
    public void showBill() {
        List<Bill> list = billService.queryBill();
        System.out.println("编号\t\t菜品号\t\t菜品量\t\t金额\t\t\t桌号\t\t日期\t\t\t\t\t\t\t状态");
        for (Bill bill : list) {
            System.out.println(bill.getId() + "\t\t" + bill.getMenuId() + "\t\t\t"
                    + bill.getNums() + "\t\t\t" + bill.getMoney() + "\t\t\t" + bill.getDiningTableId() + "\t\t\t\t\t\t\t"
                    + bill.getBillDate() + "\t\t" + bill.getState());
        }

        System.out.println("=====显示完毕=====");

    }

    /**
     * 结账
     *
     * @param
     * @return void
     * @date 2022/11/9 19:42
     * @author wty
     **/
    public void payAccount() {
        while (true) {
            System.out.println("请选择要结账的餐桌编号(-1退出)");
            Integer diningTableId = Utility.readInt();
            if (-1 == diningTableId) {
                break;
            }
            // 验证餐桌号码是否存在
            Object o = diningTableService.queryDiningTableState(diningTableId);

            if (null == o) {
                System.out.println("输入的餐桌编号:" + diningTableId + "不存在");
            } else {
                String diningTableState = (String) o;

                if ("空".equals(diningTableState)) {
                    System.out.println("餐桌编号为:" + diningTableId + "的餐桌状态为[空闲],无需支付账单,请核对桌号!");
                }

                if ("已预定".equals(diningTableState)) {
                    System.out.println("餐桌编号为:" + diningTableId + "的餐桌状态为[已预定],还未点单,无需支付账单,请核对桌号!");
                }

                if ("用餐".equals(diningTableState)) {
                    System.out.println("结账的方式(支付宝/微信/现金)  -- 回车退出");
                    String billState = Utility.readString(3, "9");
                    if ("9".equals(billState)) {
                        break;
                    }

                    System.out.println("确认是否结账(Y/N)");
                    char choose = Utility.readConfirmSelection();

                    if ('Y' == choose) {
                        // 先判断是否有未支付的账单
                        if (billService.checkPayAccount(diningTableId)) {
                            // 修改bill的state
                            int i = billService.updateBillState(diningTableId, billState);

                            // 为保证数据一致性,只有账单更新了,餐桌状态才能更新
                            if (i > 0) {
                                // 修改餐桌表的信息
                                diningTableService.saveOrder(diningTableId, "", "", "空");

                                System.out.println("=====结账完成=====");
                            }

                        } else {
                            System.out.println("检测到没有未支付账单!");
                        }
                    }


                }

            }

        }

    }

    /**
     * 多表联合查询
     *
     * @param
     * @return void
     * @date 2022/11/9 22:49
     * @author wty
     **/
    public void multiQuery() {
        List<MultiTableBean> list = multiTableService.queryMultiTable();
        System.out.println("编号\t\t菜品号\t\t菜品名\t\t菜品价格\t\t菜品量\t\t金额\t\t\t\t桌号\t\t状态");
        for (MultiTableBean multiTableBean : list) {
            System.out.println(multiTableBean.getId() + "\t\t" + multiTableBean.getMenuId() + "\t\t\t"
                    + multiTableBean.getName() + "\t\t" + multiTableBean.getPrice() + "\t\t" + multiTableBean.getNums() + "\t\t\t" + multiTableBean.getMoney() + "\t\t\t" + multiTableBean.getDiningTableId()
                    + "\t\t" + multiTableBean.getState());
        }

        System.out.println("=====显示完毕=====");

    }

    /**
     * 人事管理
     *
     * @param
     * @return void
     * @date 2022/11/10 1:12
     * @author wty
     **/
    public void personMange() {
        while (true) {
            List<Employee> list = employeeService.getEmployeeInfo();
            System.out.println("员工号\t\t员工姓名\t\t职位");
            for (Employee employee : list) {
                System.out.println(employee.getEmpId() + "\t\t" + employee.getName() + "\t\t" + employee.getJob());
            }
            System.out.println("=====人事信息展示完毕=====");
            System.out.println("1.查询具体信息");
//            System.out.println("2.新增雇员");
//            System.out.println("3.删除雇员");
//            System.out.println("9.退出");
            System.out.println("------------------------");
            System.out.println("请输入你的选择:");
            int choose = Utility.readInt();
            if (9 == choose) {
                break;
            } else if (1 == choose) {
                System.out.println("请输入员工号查看具体信息");
                String empId = Utility.readString(50);
                List<EmployeeInfo> infos = employeeInfoService.queryPersonMange(empId);
                System.out.println("员工编号\t\t员工姓名\t\t岗位\t\t性别\t\t出生年月\t\t\t\t\t\t\t" +
                        "身份证号码\t\t\t\t\t\t学历\t\t婚姻状况\t\t电话\t\t\t\t邮箱\t\t\t\t" +
                        "地址\t\t\t\t入职时间\t\t\t\t\t\t\t备注");
                for (EmployeeInfo info : infos) {
                    System.out.println(info.getEmpId() + "\t\t" + info.getName() + "\t\t\t" + info.getJob() + "\t\t"
                            + info.getSex() + "\t\t" + info.getBorndate() + "\t\t\t\t\t\t" + info.getCertno() + "\t\t\t\t"
                            + info.getStudy() + "\t\t" + info.getMarry() + "\t\t" + info.getPhone() + "\t\t" + info.getEmail() + "\t\t"
                            + info.getAddress() + "\t\t" + info.getRegistertime() + "\t\t\t\t" + info.getBz());
                }
                System.out.println("=====查询具体信息(完毕)=====");


            } else {
                System.out.println("输入有误,请重新输入!");
            }
        }

    }

}

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心向阳光的天域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值