一、项目分析
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 '',#密码md5name 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 '',#账单号可以按照自己规则生成 UUIDmenuId 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
