一、项目分析
1.1 需求说明
满汉楼项目功能多,界面复杂,涉及到复杂的awt 和 swing 技术 和事件编程,做如下调整
- 去掉界面和事件处理(只需重点掌握核心功能),使用控制台界面
- 完成满汉楼项目的登录、订座、点餐和结账、查看账单等功能
- 提示:在实际工作中,独立完成项目新功能非常重要,这是锻炼编程能力和思想的重要途经
1.2 界面设计
- 用户登录
- 显示餐桌状态
- 预定
- 显示菜品
- 点餐
- 查看账单
- 结账
1.3 程序框架图
二、数据库开发
2.1 相关表设计
- employee 表:主键 id,empId,name,pwd,job 。用户表,用于保存员工信息,验证登录等
- diningTable 表:主键 id,state,orderName,orderTel。餐桌表,用于餐桌管理,订餐,显示餐桌状态等
- menu 表:主键 id,name,type,price。菜谱表,用于菜品管理
- bill 表:主键 id,billId,menuId,nums,money,diningTableId,billDate,state。账单表,用于显示账单流水,结账等功能
2.2 SQL 语句
#用户表
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, '666', 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, '空','','');
#菜谱
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 '',#账单号可以按照自己规则生成 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;
insert into menu values(null,?,?,?,0,?,now(),'未结账')
drop table bill;
三、DAO及工具类
3.1 DAO
- BasicDAO.java 【DAO基类】
BasicDAO.java
3.2 工具类
- Utility.java 【输入判断】
- JDBCUtilsByDruid.java 【基于druid数据库连接池的工具类】
四、Service 业务层
4.1 EmployeeService
4.2
4.3
4.4
五、View 视图层
5.1 主菜单
//显示主菜单
public void mainMenu() {
do {
System.out.println("=============满汉楼=============");
System.out.println("\t\t 1 登录满汉楼");
System.out.println("\t\t 2 退出满汉楼");
System.out.println("请输入你的选择: ");
key = Utility.readString(1);
switch (key) {
case "1":
System.out.println("请输入员工号: ");
String empId = Utility.readString(50);
System.out.println("请输入密 码: ");
String pwd = Utility.readString(50);
//与数据库交互进行判断
if ("123".equals(pwd)) {
System.out.println("===============登陆成功==============");
//显示二级菜单
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.println("请输入你的选择: ");
key = "";
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 = false;
break;
default:
System.out.println("输入有误,请重新输入");
break;
}
}
} else {
System.out.println("===============登录失败==============");
}
break;
case "2":
loop = false;
break;
default:
System.out.println("输入有误,请重新输入");
break;
}
} while (loop);
System.out.println("你退出了满汉楼系统");
}
5.2 显示餐桌状态
5.3
5.4
六、
6.1
6.2
6.3
6.4
七、
7.1
7.2
7.3
7.4
学习参考(致谢):
- B站 @程序员鱼皮 Java学习一条龙
- B站 @韩顺平 零基础30天学会Java