一、项目分析

1.1 需求说明

满汉楼项目功能多,界面复杂,涉及到复杂的awt 和 swing 技术 和事件编程,做如下调整

  1. 去掉界面和事件处理(只需重点掌握核心功能),使用控制台界面
  2. 完成满汉楼项目的登录、订座、点餐和结账、查看账单等功能
  3. 提示:在实际工作中,独立完成项目新功能非常重要,这是锻炼编程能力和思想的重要途经

1.2 界面设计

  1. 用户登录
    image.png
  2. 显示餐桌状态
    image.png
  3. 预定
    image.png
  4. 显示菜品
    image.png
  5. 点餐
    image.png
  6. 查看账单
    image.png
  7. 结账
    image.png

1.3 程序框架图

image.png

二、数据库开发

2.1 相关表设计

  1. employee 表:主键 id,empId,name,pwd,job 。用户表,用于保存员工信息,验证登录等
  2. diningTable 表:主键 id,state,orderName,orderTel。餐桌表,用于餐桌管理,订餐,显示餐桌状态等
  3. menu 表:主键 id,name,type,price。菜谱表,用于菜品管理
  4. bill 表:主键 id,billId,menuId,nums,money,diningTableId,billDate,state。账单表,用于显示账单流水,结账等功能

2.2 SQL 语句

  1. #用户表
  2. create table employee (
  3. id int primary key auto_increment, #自增
  4. empId varchar(50) unique not null default '',#员工号
  5. pwd char(32) not null default '',#密码md5
  6. name varchar(50) not null default '',#姓名
  7. job varchar(50) not null default '' #岗位
  8. )charset=utf8;
  9. insert into employee values(null, '6668612', md5('123456'), '张三丰', '经理');
  10. insert into employee values(null, '6668622', md5('123456'),'小龙女', '服务员');
  11. insert into employee values(null, '6668633', md5('123456'), '张无忌', '收银员');
  12. insert into employee values(null, '666', md5('123456'), '老韩', '经理');
  13. #餐桌表
  14. create table diningTable (
  15. id int primary key auto_increment, #自增, 表示餐桌编号
  16. state varchar(20) not null default '',#餐桌的状态
  17. orderName varchar(50) not null default '',#预订人的名字
  18. orderTel varchar(20) not null default ''
  19. )charset=utf8;
  20. insert into diningTable values(null, '空','','');
  21. #菜谱
  22. create table menu (
  23. id int primary key auto_increment, #自增主键,作为菜谱编号(唯一)
  24. name varchar(50) not null default '',#菜品名称
  25. type varchar(50) not null default '', #菜品种类
  26. price double not null default 0#价格
  27. )charset=utf8;
  28. insert into menu values(null, '八宝饭', '主食类', 10);
  29. insert into menu values(null, '叉烧包', '主食类', 20);
  30. insert into menu values(null, '宫保鸡丁', '热菜类', 30);
  31. insert into menu values(null, '山药拨鱼', '凉菜类', 14);
  32. insert into menu values(null, '银丝卷', '甜食类', 9);
  33. insert into menu values(null, '水煮鱼', '热菜类', 26);
  34. insert into menu values(null, '甲鱼汤', '汤类', 100);
  35. insert into menu values(null, '鸡蛋汤', '汤类', 16);
  36. #账单流水, 考虑可以分开结账, 并考虑将来分别统计各个不同菜品的销售情况
  37. create table bill (
  38. id int primary key auto_increment, #自增主键
  39. billId varchar(50) not null default '',#账单号可以按照自己规则生成 UUID
  40. menuId int not null default 0,#菜品的编号, 也可以使用外键
  41. nums SMALLINT not null default 0,#份数
  42. money double not null default 0, #金额
  43. diningTableId int not null default 0, #餐桌
  44. billDate datetime not null ,#订单日期
  45. state varchar(50) not null default '' # 状态 '未结账' , '已经结账', '挂单'
  46. )charset=utf8;
  47. insert into menu values(null,?,?,?,0,?,now(),'未结账')
  48. drop table bill;

三、DAO及工具类

3.1 DAO

  1. BasicDAO.java 【DAO基类】
    BasicDAO.java

3.2 工具类

  1. Utility.java 【输入判断

Utility.java

  1. JDBCUtilsByDruid.java 【基于druid数据库连接池的工具类

JDBCUtilsByDruid.java

四、Service 业务层

4.1 EmployeeService

4.2

4.3

4.4

五、View 视图层

5.1 主菜单

  1. //显示主菜单
  2. public void mainMenu() {
  3. do {
  4. System.out.println("=============满汉楼=============");
  5. System.out.println("\t\t 1 登录满汉楼");
  6. System.out.println("\t\t 2 退出满汉楼");
  7. System.out.println("请输入你的选择: ");
  8. key = Utility.readString(1);
  9. switch (key) {
  10. case "1":
  11. System.out.println("请输入员工号: ");
  12. String empId = Utility.readString(50);
  13. System.out.println("请输入密 码: ");
  14. String pwd = Utility.readString(50);
  15. //与数据库交互进行判断
  16. if ("123".equals(pwd)) {
  17. System.out.println("===============登陆成功==============");
  18. //显示二级菜单
  19. while (loop) {
  20. System.out.println("=============满汉楼二级菜单=============");
  21. System.out.println("\t\t 1 显示餐桌状态");
  22. System.out.println("\t\t 2 预定餐桌");
  23. System.out.println("\t\t 3 显示所有菜品");
  24. System.out.println("\t\t 4 点餐服务");
  25. System.out.println("\t\t 5 查看账单");
  26. System.out.println("\t\t 6 结账");
  27. System.out.println("\t\t 9 退出满汉楼");
  28. System.out.println("请输入你的选择: ");
  29. key = "";
  30. key = Utility.readString(1);
  31. switch (key) {
  32. case "1":
  33. System.out.println("餐桌状态: ");
  34. break;
  35. case "2":
  36. System.out.println("预定");
  37. break;
  38. case "3":
  39. System.out.println("菜品");
  40. break;
  41. case "4":
  42. System.out.println("点餐");
  43. break;
  44. case "5":
  45. System.out.println("账单");
  46. break;
  47. case "6":
  48. System.out.println("结账");
  49. break;
  50. case "9":
  51. loop = false;
  52. break;
  53. default:
  54. System.out.println("输入有误,请重新输入");
  55. break;
  56. }
  57. }
  58. } else {
  59. System.out.println("===============登录失败==============");
  60. }
  61. break;
  62. case "2":
  63. loop = false;
  64. break;
  65. default:
  66. System.out.println("输入有误,请重新输入");
  67. break;
  68. }
  69. } while (loop);
  70. System.out.println("你退出了满汉楼系统");
  71. }

5.2 显示餐桌状态

5.3

5.4

六、

6.1

6.2

6.3

6.4

七、

7.1

7.2

7.3

7.4

学习参考(致谢):

  1. B站 @程序员鱼皮 Java学习一条龙
  2. B站 @韩顺平 零基础30天学会Java