文章目录
- 功能
- 界面
- 用户登录界面
- 显示餐桌状态
- 预定
- 显示所有菜品
- 点餐
- 查看账单
- 结账
- 退出满汉楼
- 程序框架图
- 项目依赖
- 项目结构
- 方法调用图
- 功能实现
- 登录
- 显示餐桌状态
- 订座
- 显示所有菜品
- 点餐
- 查看账单
- 结账
- 退出满汉楼
- 扩展思考
- 多表查询
- 如果将来字段越来越多怎么办?
- 员工信息字段可能有很多,而且员工数有会很多,为提高效率,可以采用分表设计
- 数据库设计
- 满汉楼用户表
- 满汉楼餐桌表
- 菜谱表
- 账单表
功能
界面
用户登录界面
显示餐桌状态
预定
显示所有菜品
点餐
查看账单
结账
退出满汉楼
程序框架图
软件分层是逻辑概念
1.可以用不同包来存放对应的类
2.体现了一个调用的关系
3.可以各司其职
项目依赖
commons-dbutils-1.8.1.jar
druid-1.1.10.jar
mysql-connector-java-5.1.23-bin.jar
项目结构
方法调用图
功能实现
准备工具类Utility
在实际开发中,公司都会提供相应的工具类和开发库,可以提高开发效率
登录
接受用户输入员工号和密码
通过员工ID和密码获取员工信息
如果找到匹配的员工信息,则返回该员工对象;否则返回null
如果!=null则登录成功,否则登录失败
显示餐桌状态
调用diningTableService的list方法获取所有餐桌的列表,然后遍历列表,打印每个餐桌的编号和状态到控制台。最后,打印一条分隔线表示显示完毕。
订座
功能说明
如果该餐桌处于已经预定或者就餐状态,给出提示
思路分析
(1)要检测餐桌是否存在。
(2)要检测餐桌的状态允许用户选择要预订的餐桌,并输入预订信息。如果用户选择取消预订,则方法会输出取消预订的消息。如果用户确认预订,方法会检查所选餐桌是否存在且未被预订,然后接收用户的预订信息并尝试更新餐桌状态。如果预订成功,会输出预订成功的消息;如果失败,会输出预订失败的消息。 如果用户选择取消预订,则方法会输出取消预订的消息。
显示所有菜品
调用menuService的list方法获取所有菜品列表,然后遍历列表并打印每个菜品的编号、名称、类别和价格。
最后,打印一条分隔线表示显示完毕。
点餐
1.功能说明
要求对餐桌号,菜品编号,做合理性校验,如果不合理,给出提示信息
2.思路分析
(1)餐桌号,菜品编号检验
(2)点餐成功,需要修改餐桌状态
(3)生成账单允许用户选择餐桌号、菜品编号和点餐数量,并确认是否进行点餐。
如果用户选择取消点餐或输入的餐桌号、菜品编号不存在,则方法会提前退出。
如果用户确认点餐,则调用billService的orderMenu方法进行点餐操作,并根据点餐结果输出相应的提示信息。
查看账单
该方法调用billService的list方法获取所有账单列表,并打印账单的详细信息,包括编号、菜品号、菜品量、金额、桌号、日期和状态。打印完毕后,输出一条分隔线表示显示完毕。
结账
思路分析
(1)对餐桌号进行校验
(2)修改bill表的state
(3)修改diningTable信息
(4)不需要增加新表,不需要增加新的类,需要增加方法提供结账服务,允许用户选择餐桌进行结账操作。用户可以选择不同的结账方式,并在确认后执行结账。如果用户在过程中选择取消或输入无效信息,将终止结账流程。
退出满汉楼
扩展思考
多表查询
package com.hspedu.mhl.domain;import java.util.Date;/*** @program: mhl* @since: jdk1.8* @description: 这是一个javabean 可以和多张表进行对应* @author: Administrator* @create: 2024-12-18 20:43**/
public class MultiTableBean {private Integer id;private String billId;private Integer menuId;private Integer nums;private Double money;private Integer diningTableId;private Date billDate;private String state;// 增加一个来自menu表的列nameprivate String name;// 增加一个来自menu表的priceprivate Double price;public MultiTableBean() {}public MultiTableBean(Integer id, String billId, Integer menuId, Integer nums, Double money, Integer diningTableId, Date billDate, String state, String name, Double price) {this.id = id;this.billId = billId;this.menuId = menuId;this.nums = nums;this.money = money;this.diningTableId = diningTableId;this.billDate = billDate;this.state = state;this.name = name;this.price = price;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}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;}@Overridepublic String toString() {return id + "\t\t" + menuId + "\t\t\t" + name + "\t\t\t" + price + "\t\t\t" + nums + "\t\t\t" + money + "\t\t" + diningTableId + "\t\t" + billDate + "\t\t" + state;}
}
如果将来字段越来越多怎么办?
员工信息字段可能有很多,而且员工数有会很多,为提高效率,可以采用分表设计
数据库设计
满汉楼用户表
# 员工表
CREATE TABLE employee (id INT PRIMARY KEY auto_increment,empId VARCHAR (50) UNIQUE NOT NULL DEFAULT '',pwd CHAR(32) NOT NULL DEFAULT '',`name` VARCHAR (50) NOT NULL DEFAULT '',job VARCHAR (50) NOT NULL DEFAULT ''
) CHARSET='utf8';# 测试数据
insert into employee values(null,'6668612',md5('1123456'),'张三丰','经理');
insert into employee values (null,'6668622', md5('1123456'),'小龙女','服务员');
insert into employee values(null,'6668633', md5('123456'),'张无忌','收银员');
insert into employee values(null,'666666',md5('123456'),'老韩','经理');
满汉楼餐桌表
# 餐桌表
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, '空', '','');
菜谱表
# 菜谱表
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);
账单表
CREATE TABLE bill(id INT PRIMARY KEY auto_increment,billId VARCHAR(50) NOT NULL DEFAULT '',menuId INT NOT NULL DEFAULT 0,nums INT 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
自增主键 账单号(UUID) 菜品编号 份数 金额 餐桌 订单日期 状态