点餐系统实战开发教程01需求分析

目录

  • [1 需求分析](#1 需求分析)
    • [1.1 顾客角色](#1.1 顾客角色)
    • [1.2 服务员角色](#1.2 服务员角色)
    • [1.3 后厨角色](#1.3 后厨角色)
    • [1.4 收银员角色](#1.4 收银员角色)
  • [2 数据源设计](#2 数据源设计)
    • [2.1 用户表](#2.1 用户表)
    • [2.2 餐桌表](#2.2 餐桌表)
    • [2.3 菜品表](#2.3 菜品表)
    • [2.4 订单表](#2.4 订单表)
    • [2.5 订单项表](#2.5 订单项表)
    • [2.6 菜品制作状态表](#2.6 菜品制作状态表)
    • [2.7 收银记录表](#2.7 收银记录表)
    • [2.8 会员表](#2.8 会员表)
    • [2.9 充值记录表](#2.9 充值记录表)
    • [2.10 积分表](#2.10 积分表)
    • [2.11 积分记录表](#2.11 积分记录表)
    • [2.12 优惠券表](#2.12 优惠券表)
    • [2.13 优惠券使用记录表](#2.13 优惠券使用记录表)
    • [2.14 活动表](#2.14 活动表)
  • 总结

民以食为天,日常不管是工作餐,商务宴请,聚会,活动,都离不开和餐厅打交道。现在其实餐厅的信息化已经走的比较靠前了,有的提供机器人负责制作和服务。我们本次实战教程,就是结合这种日常的生活场景,结合微搭低代码工具,从0到1构建一个点餐系统。

1 需求分析

在分析需求的时候,我们通常按照角色来梳理功能。比如餐厅我们可以分为常见的几种角色,包括顾客、服务员、收银、后厨。不同的角色我们可以设置不同的功能。

将功能拆分后,我们还要合并在一起,合并的逻辑就是按照实际的业务流程,分析在流程上各种角色如何有机的配合在一起。

按照角色我们先拆解一下功能点:

1.1 顾客角色

首页

  • 餐厅信息、推荐菜品、促销活动展示

点餐

  • 选择用餐方式(堂食/外卖)
  • 浏览菜单,查看菜品详情(包括制作时间、会员价格、评价等)
  • 添加菜品到购物车
  • 显示热门菜品和推荐菜品

订单管理

  • 查看当前订单状态和历史订单记录
  • 进行催单操作
  • 使用优惠券和积分抵扣

个人中心

  • 管理个人信息、查看余额和积分
  • 充值功能,查看充值记录
  • 提供反馈和评价

1.2 服务员角色

首页

  • 显示待处理订单、餐桌状态和重要通知

订单管理

  • 查看所有订单的状态,进行催单、更新状态(如上菜、加急处理
  • 记录上菜操作,更新菜品状态

餐桌管理

  • 查看餐桌状态,管理空闲和占用的餐桌

个人中心

  • 管理个人信息、查看工作记录、提供反馈

1.3 后厨角色

首页

  • 显示待制作的菜品、制作状态和重要通知

制作管理

  • 查看所有待制作的菜品,更新制作状态(如开始制作、完成)

历史记录

  • 查看历史制作记录,分析制作效率

个人中心

  • 管理个人信息、查看工作记录、提供反馈

1.4 收银员角色

首页

  • 显示当前餐桌状态、待结算订单和重要通知

订单管理

  • 查看所有订单的详细信息,进行结算操作
  • 处理退款或修改订单

优惠券管理

  • 创建和管理优惠券,查看使用情况

会员管理

  • 查看会员信息,管理充值和积分

报表和分析

  • 查看销售报表、顾客反馈和活动效果分析

用户管理

  • 管理用户角色和权限

菜品管理

  • 添加、编辑和删除菜品,管理菜品分类和价格

活动和促销管理

  • 创建和管理促销活动,设置优惠券和积分活动

数据分析

  • 查看销售数据、顾客行为分析和库存管理

2 数据源设计

有了一定的功能拆解后,我们需要将功能点设计和拆分到数据源的字段中,我们一共形成了如下的数据源:

2.1 用户表

CREATE TABLE Users (

user_id INT PRIMARY KEY AUTO_INCREMENT,

username VARCHAR(50) NOT NULL,

password VARCHAR(255) NOT NULL,

role ENUM('customer', 'waiter', 'chef', 'cashier') NOT NULL,

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

用户表用来存储我们的登录人员信息

2.2 餐桌表

CREATE TABLE Tables (

table_id INT PRIMARY KEY AUTO_INCREMENT,

table_number VARCHAR(10) NOT NULL,

status ENUM('available', 'occupied') DEFAULT 'available',

capacity INT NOT NULL,

has_table_sign BOOLEAN DEFAULT TRUE, -- 是否有桌签

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

餐桌用来管理餐厅的可以使用的餐桌,餐桌是和点餐业务相关

2.3 菜品表

CREATE TABLE MenuItems (

item_id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(100) NOT NULL,

category VARCHAR(50) NOT NULL,

price DECIMAL(10, 2) NOT NULL,

member_price DECIMAL(10, 2) DEFAULT NULL, -- 会员价格

description TEXT,

preparation_time INT DEFAULT 0, -- 制作时间,以分钟为单位

available BOOLEAN DEFAULT TRUE, -- 是否可点

popularity INT DEFAULT 0, -- 热门程度

is_recommended BOOLEAN DEFAULT FALSE, -- 是否为推荐菜品

is_sample BOOLEAN DEFAULT FALSE, -- 是否为试吃样品

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

菜品是餐厅可以提供的服务的具体体现,日常可以由管理员维护好,后厨根据每日物资采购情况决定当天哪些菜品可以制作和售卖

2.4 订单表

CREATE TABLE Orders (

order_id INT PRIMARY KEY AUTO_INCREMENT,

table_id INT NULL, -- 对于有桌签的订单

order_number VARCHAR(20) UNIQUE, -- 对于无桌签的拼桌订单

user_id INT NOT NULL,

status ENUM('pending', 'in_progress', 'completed', 'cancelled') DEFAULT 'pending',

total_price DECIMAL(10, 2) NOT NULL,

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

FOREIGN KEY (table_id) REFERENCES Tables(table_id),

FOREIGN KEY (user_id) REFERENCES Users(user_id)

);

订单表记录顾客点餐的具体信息

2.5 订单项表

CREATE TABLE OrderItems (

order_item_id INT PRIMARY KEY AUTO_INCREMENT,

order_id INT NOT NULL,

item_id INT NOT NULL,

quantity INT NOT NULL,

priority INT DEFAULT 0, -- 优先级字段

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

FOREIGN KEY (order_id) REFERENCES Orders(order_id),

FOREIGN KEY (item_id) REFERENCES MenuItems(item_id)

);

一个订单可能要关联多个菜品,在订单项表记录顾客点餐的菜品信息

2.6 菜品制作状态表

CREATE TABLE DishStatus (

status_id INT PRIMARY KEY AUTO_INCREMENT,

order_item_id INT NOT NULL,

status ENUM('pending', 'in_progress', 'completed', 'served') DEFAULT 'pending',

priority INT DEFAULT 0, -- 优先级字段

order_time TIMESTAMP, -- 下单时间字段

waiting_time INT DEFAULT 0, -- 等待时间,以秒为单位

served_time TIMESTAMP NULL, -- 记录上菜时间

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

FOREIGN KEY (order_item_id) REFERENCES OrderItems(order_item_id)

);

订单下单后,会通知后厨进行制作,后厨可以根据实际情况来安排菜品制作的优先级

2.7 收银记录表

CREATE TABLE Payments (

payment_id INT PRIMARY KEY AUTO_INCREMENT,

order_id INT NOT NULL,

amount DECIMAL(10, 2) NOT NULL,

payment_method ENUM('cash', 'credit_card', 'mobile_payment') NOT NULL,

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

FOREIGN KEY (order_id) REFERENCES Orders(order_id)

);

用餐完毕后,可以在收银台进行结账,记录结账信息

2.8 会员表

CREATE TABLE Members (

member_id INT PRIMARY KEY AUTO_INCREMENT,

user_id INT NOT NULL, -- 关联用户

membership_level ENUM('regular', 'silver', 'gold', 'platinum') DEFAULT 'regular', -- 会员等级

balance DECIMAL(10, 2) DEFAULT 0.00, -- 账户余额

bonus_amount DECIMAL(10, 2) DEFAULT 0.00, -- 赠送金额

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

FOREIGN KEY (user_id) REFERENCES Users(user_id)

);

为了促进餐厅发展,可以结合会员充值赠送业务来促进回购

2.9 充值记录表

CREATE TABLE RechargeRecords (

recharge_id INT PRIMARY KEY AUTO_INCREMENT,

member_id INT NOT NULL,

amount DECIMAL(10, 2) NOT NULL, -- 充值金额

bonus DECIMAL(10, 2) DEFAULT 0.00, -- 赠送金额

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

FOREIGN KEY (member_id) REFERENCES Members(member_id)

);

记录会员的充值信息,为后续的经营提供数据参考

2.10 积分表

CREATE TABLE Points (

point_id INT PRIMARY KEY AUTO_INCREMENT,

member_id INT NOT NULL,

total_points INT DEFAULT 0, -- 总积分余额

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

FOREIGN KEY (member_id) REFERENCES Members(member_id)

);

充值和消费都可以赠送一定的积分,积分可以用来兑换餐厅里的日常物品

2.11 积分记录表

CREATE TABLE PointsRecords (

record_id INT PRIMARY KEY AUTO_INCREMENT,

member_id INT NOT NULL,

points INT NOT NULL, -- 积分数量(正数为获取,负数为使用)

source ENUM('recharge', 'purchase', 'referral', 'promotion') NOT NULL, -- 积分来源

order_id INT DEFAULT NULL, -- 关联订单(如果适用)

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

FOREIGN KEY (member_id) REFERENCES Members(member_id),

FOREIGN KEY (order_id) REFERENCES Orders(order_id)

);

记录积分获取的过程和消费的过程

2.12 优惠券表

CREATE TABLE Coupons (

coupon_id INT PRIMARY KEY AUTO_INCREMENT,

code VARCHAR(50) UNIQUE NOT NULL, -- 优惠券代码

discount_type ENUM('fixed', 'percentage') NOT NULL, -- 优惠类型(固定金额或百分比)

discount_value DECIMAL(10, 2) NOT NULL, -- 优惠金额或百分比

start_date TIMESTAMP NOT NULL, -- 开始日期

end_date TIMESTAMP NOT NULL, -- 结束日期

usage_limit INT DEFAULT 1, -- 每个用户的使用次数限制

total_limit INT DEFAULT 100, -- 优惠券总使用次数限制

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

优惠券也是一种促销的手段,可以管理各类平台投放的优惠券

2.13 优惠券使用记录表

CREATE TABLE CouponUsage (

usage_id INT PRIMARY KEY AUTO_INCREMENT,

coupon_id INT NOT NULL,

user_id INT NOT NULL,

order_id INT NOT NULL,

used_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

FOREIGN KEY (coupon_id) REFERENCES Coupons(coupon_id),

FOREIGN KEY (user_id) REFERENCES Users(user_id),

FOREIGN KEY (order_id) REFERENCES Orders(order_id)

);

详细记录优惠券的核销数据

2.14 活动表

CREATE TABLE Promotions (

promotion_id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(100) NOT NULL, -- 活动名称

description TEXT, -- 活动描述

start_date TIMESTAMP NOT NULL, -- 活动开始时间

end_date TIMESTAMP NOT NULL, -- 活动结束时间

coupon_id INT, -- 关联的优惠券(可选)

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

FOREIGN KEY (coupon_id) REFERENCES Coupons(coupon_id)

);

管理日常餐厅的促销活动

总结

我们的第一篇是先分析一下具体想开发的功能,还要做好数据的准备,后续篇幅我们就介绍小程序和PC端如何进行开发。

相关推荐
workflower1 天前
Prompt Engineering的重要性
大数据·人工智能·设计模式·prompt·软件工程·需求分析·ai编程
workflower3 天前
如何对比软件需求做的是否合格?
设计模式·软件工程·需求分析
云纳星辰怀自在4 天前
软件工程之软件需求SWE.1
软件工程·需求分析
workflower5 天前
实例研究:设计一个文档编辑器(24)- 完
java·开发语言·设计模式·编辑器·软件工程·需求分析·软件需求
黄焖鸡能干四碗6 天前
什么是信创?信创国产化改造建设实施方案,信创平台搭建,信创技术方案
安全·web安全·需求分析·信创·设计规范·国产化
夏旭泽12 天前
软件工程-软件需求规格说明(SRS)
软件工程·需求分析
学问小小谢18 天前
第28节课:前端项目实战—从需求分析到开发流程的全方位指南
前端·网络·安全·web安全·性能优化·html5·需求分析
东方不败之鸭梨的测试笔记23 天前
需求分析应该从哪些方面来着手做?
需求分析
Stargazer_Wang23 天前
INCOSE需求编写指南-附录 C: 需求模式
系统架构·需求分析·软件需求
Stargazer_Wang24 天前
INCOSE需求编写指南-附录 A: 参考文献
系统架构·需求分析·软件需求