一、项目背景
随着互联网技术的飞速发展和智能手机的普及,人们的生活方式发生了翻天覆地的变化,其中之一便是网上订餐系统的兴起。这种系统通过在线平台连接消费者和餐饮服务提供商,使得用户可以随时随地浏览菜单、下单并支付,极大地提高了订餐的便捷性。同时,网上订餐系统也为餐饮业带来了新的商业模式和市场机遇,推动了整个行业的数字化转型。然而,随着市场竞争的加剧,如何提高用户体验、优化订单处理流程、降低运营成本等问题成为网上订餐系统研究的重要课题。因此,深入研究网上订餐系统的设计、实现和优化,对于满足消费者需求、提升餐饮服务质量、推动行业创新具有重要的现实意义。
二、需求分析
2.1 系统功能需求
1.用户管理功能
用户注册:允许新用户输入必要信息进行注册,创建个人账号。
用户登录:用户通过输入用户名和密码登录系统,进入个人中心。
个人中心:用户可以查看和修改个人信息,包括联系方式、地址等。
2.菜品信息展示功能
菜品分类展示:将菜品按照不同类别进行分类展示,方便用户查找。
菜品详细信息:展示菜品的图片、名称、价格、描述等详细信息。
3.订餐功能
下单订餐:用户选择菜品、数量后提交订单,填写送餐地址等信息。
订单管理:用户可以查看订单状态、历史订单,以及进行订单的取消、修改等操作。
4.管理员管理功能
会员管理:管理员可以查看会员信息,对会员进行等级调整、积分管理等操作。菜品分类管理:添加、删除、修改菜品分类。
菜品信息管理:对菜品的信息进行编辑、上架、下架等操作。
订单信息管理:查看订单详情,处理订单状态,如确认接单、配送中、已完成等。
订单配送管理:分配配送任务,跟踪配送进度。
管理员管理:添加、删除、修改管理员账号信息。
系统管理:进行系统参数设置、数据备份与恢复等操作。
2.2 系统非功能性需求
1. 性能需求
响应时间:系统对于用户的操作响应时间应在 2 秒以内,确保用户体验流畅。 吞吐量:系统应能够同时处理至少 100 个并发用户请求,满足高峰时段的使用需求。
2.可靠性需求
可用性:系统应保证 99.5%以上的可用性,减少因系统故障导致的服务中断时间。 容错性:当出现网络故障、数据库连接错误等异常情况时,系统应能够及时给出提示,并尽量保持部分功能可用,等待故障恢复后自动恢复正常运行。
3.安全性需求
用户认证与授权:采用强密码策略,对用户登录进行加密传输,确保用户账号安全。根据用户角色分配不同的权限,防止越权操作。
数据加密:对用户的个人信息、订单信息等敏感数据进行加密存储,防止数据泄露。
4.易用性需求
界面设计:系统界面应简洁美观,布局合理,易于操作。采用直观的图标和清晰的文字说明,方便用户快速理解和使用。
操作流程:简化订餐流程,减少用户操作步骤,提供便捷的下单、支付等功能。 5. 可维护性需求
代码结构:系统代码应具有良好的结构和注释,便于开发人员进行维护和扩展。 日志管理:记录系统的运行日志,方便管理员进行故障排查和性能优化。
数据管理:提供方便的数据导入、导出和备份功能,便于管理员进行数据管理和维护。
2.3 关键业务流程
业务流程图
用例图
三、系统设计
3.1 系统架构设计
随着互联网和浏览器的发展,B/S的开发架构逐渐取代了C/S架构,B/S的开发架构是一种浏览器和服务器的模式,它将应用程序的大部分功能都放在服务器端,客户机端只需要安装浏览器(Browser),通过Web Server对服务器端安装的数据库进行数据读取和存储[3]。其B/S架构图如下图3.1.1所示:
图3.1.1
基于Spring Boot的网上订餐系统的特点就是利用Browser/Server(B/S)结构,为用户提供了一个网络订餐的平台,让用户只要上网就可以实现订餐的操作。
本系统的网络应用原理示意图如图3.1.2所示:
图3.1.2系统的网络应用原理示意图
3.2 系统功能模块设计
3.2.1系统整体功能
系统的设计和划分是系统的核心研究问题,以确定整体结构和功能模块。该系统的结构化设计的思想,是自顶向下的方式将系统分成若干个子系统,以及反过来的子系统分成模块,其被划分成子模块,层划分各计算机可执行模块可迄今用作一个单独的程序。
本基于Spring Boot的网上订餐系统主要管理员模块以及用户模块两大部分,系统结构图如图3.2.1所示。
图3.2.1 系统模块图
3.2.2注册流程
未有账号的用户可进行注册操作,用户注册流程图如图3.2.2所示。
图3.2.2 注册信息流程图
3.2.3登录流程
登录模块主要满足了管理员和用户的权限登录,用户登录流程图如图3.2.3所示。
图3.2.3 登录流程图
3.3 数据库设计
3.3.1 概念结构设计
根据需求分析,可得本系统的实体属性图如下:
会员实体属性图如图3.3.1所示:
图3.3.1 会员实体属性图
订单信息实体属性图如图3.3.2所示:
图3.3.2 订单信息实体属性图
订单配送实体属性图如图3.3.3所示:
图3.3.3 订单配送实体属性图
菜品信息实体属性图如图3.3.4所示:
图3.3.4 菜品信息实体属性图
菜品分类实体属性图如图3.3.5所示:
图3.3.5 菜品分类实体属性图
用户实体属性图如图3.3.6所示:
图3.3.6 用户实体属性图
TOKEN实体属性图如图3.3.7所示:
图3.3.7 TOKEN实体属性图
根据需求分析,可得出本系统的总E-R图如图3.3.8所示
图3.3.8 系统总E-R图
3.3.2 逻辑结构设计
通过分析系统的具体情况和需求,使用MySQL作为数据存储工具,根据具体的功能模块,现在数据库建立了以下八张表
表3.3.1 huiyuan(会员表)
字段名 | 说明 | 数据类型 | 是否为主键 | 是否为空 |
id | 唯一标识符 | bigint | 是 | 否 |
addtime | 创建时间 | timestamp | 否 | 否 |
huiyuanzhanghao | 会员账号 | varchar | 否,唯一 | 否 |
mima | 会员密码 | varchar | 否 | 否 |
huiyuanxingming | 会员姓名 | varchar | 否 | 否 |
touxiang | 会员头像链接 | varchar | 否 | 是 |
xingbie | 会员性别 | varchar | 否 | 是 |
nianling | 会员年龄 | varchar | 否 | 是 |
shoujihaoma | 会员手机号码 | varchar | 否 | 是 |
dizhi | 会员地址 | varchar | 否 | 是 |
huiyuandengji | 会员等级 | varchar | 否 | 是 |
huiyuanzhekou | 会员折扣 | varchar | 否 | 是 |
表3.3.2 caipinfenlei(菜品分类表)
字段名 | 说明 | 数据类型 | 是否为主键 | 是否为空 |
id | 唯一标识符 | bigint | 是 | 否 |
addtime | 创建时间 | timestamp | 否 | 否 |
caipinfenlei | 菜品分类名称 | varchar | 否 | 是 |
表3.3.3 caipinxinxi(菜品信息表)
字段名 | 说明 | 数据类型 | 是否为主键 | 是否为空 |
id | 唯一标识符 | bigint | 是 | 否 |
addtime | 创建时间 | timestamp | 否 | 否 |
caipinmingcheng | 菜品名称 | varchar | 否 | 是 |
tupian | 菜品图片链接 | varchar | 否 | 是 |
caipinfenlei | 菜品所属分类 | varchar | 否 | 是 |
tuijianzhishu | 菜品推荐指数 | varchar | 否 | 是 |
jiage | 菜品价格 | varchar(200) | 否 | 是 |
kouwei | 菜品口味描述 | varchar(200) | 否 | 是 |
shicai | 菜品食材描述 | varchar(200) | 否 | 是 |
caipinxiangqing | 菜品详细介绍 | longtext | 否 | 是 |
clicktime | 菜品最近被点击时间 | datetime | 否 | 是 |
clicknum | 菜品被点击次数 | int | 否 | 是,默认值为 0 |
表3.3.4 dingdanxinxi(订单信息表)
字段名 | 说明 | 数据类型 | 是否为主键 | 是否为空 |
id | 唯一标识符 | bigint | 是 | 否 |
addtime | 订单创建时间 | timestamp | 否 | 否 |
dingdanbianhao | 订单编号 | varchar | 否,唯一 | 否 |
caipinmingcheng | 订单中菜品名称 | varchar | 否 | 是 |
caipinfenlei | 订单中菜品所属分类 | varchar | 否 | 是 |
jiage | 订单中菜品价格 | varchar | 否 | 是 |
shuliang | 订单中菜品数量 | varchar | 否 | 是 |
zongjine | 订单总金额 | float | 否 | 是 |
xiadanshijian | 订单下单时间 | datetime | 否 | 是 |
beizhu | 订单备注信息 | varchar | 否 | 是 |
huiyuanzhanghao | 下订单的会员账号 | varchar | 否 | 是 |
huiyuanxingming | 下订单的会员姓名 | varchar | 否 | 是 |
shoujihaoma | 下订单会员的手机号码 | varchar( | 否 | 是 |
dizhi | 下订单会员的地址 | varchar | 否 | 是 |
huiyuanzhekou | 会员在该订单中可享受的折扣 | varchar | 否 | 是 |
ispay | 订单的支付状态 | varchar | 否 | 是,默认值为 “未支付” |
表3.3.5 dingdanpeisong(订单配送表)
字段名 | 说明 | 数据类型 | 是否为主键 | 是否为空 |
id | 唯一标识符 | bigint | 是 | 否 |
addtime | 订单配送信息创建时间戳 | timestamp | 否 | 否 |
dingdanbianhao | 订单编号 | varchar(200) | 否 | 是 |
caipinmingcheng | 配送订单中的菜品名称 | varchar(200) | 否 | 是 |
caipinfenlei | 配送订单中菜品所属分类 | varchar(200) | 否 | 是 |
jiage | 配送订单中菜品的价格 | varchar | 否 | 是 |
shuliang | 配送订单中菜品的数量 | varchar | 否 | 是 |
zongjine | 配送订单的总金额 | varchar | 否 | 是 |
peisongshijian | 订单的配送时间 | datetime | 否 | 是 |
huiyuanzhanghao | 下订单的会员账号 | varchar | 否 | 是 |
huiyuanxingming | 下订单的会员姓名 | varchar | 否 | 是 |
shoujihaoma | 下订单会员的手机号码 | varchar | 否 | 是 |
dizhi | 下订单会员的地址 | varchar | 否 | 是 |
huiyuanzhekou | 会员折扣 | varchar | 否 | 是 |
表3.3.6 token(令牌表)
字段名 | 说明 | 数据类型 | 是否为主键 | 是否为空 |
id | 唯一标识符 | bigint | 是 | 否 |
userid | 与用户表(huiyuan或users)中的id关联,标识令牌所属的用户 | bigint | 否 | 否 |
username | 用户名 | varchar | 否 | 否 |
tablename | 用户所属的表名(如huiyuan或users) | varchar | 否 | 是 |
role | 用户的角色 | varchar | 否 | 是 |
token | 令牌的值 | varchar | 否 | 否 |
addtime | 记录令牌创建的时间戳 | timestamp | 否 | 否 |
expiratedtime | 记录令牌过期的时间戳 | timestamp | 否 | 否 |
表3.3.7 users(用户表,主要用于管理员)
字段名 | 说明 | 数据类型 | 是否为主键 | 是否为空 |
id | 唯一标识符 | bigint | 是 | 否 |
username | 用户名 | varchar | 否 | 否 |
password | 用户的密码 | varchar | 否 | 否 |
role | 用户的角色 | varchar | 否 | 是,默认值为 “管理员” |
addtime | 记录用户创建的时间 | timestamp | 否 | 否 |
表3.3.8 config(配置表)
字段名 | 说明 | 数据类型 | 是否为主键 | 是否为空 |
id | 配置参数的唯一标识符 | bigint | 是 | 否 |
name | 配置参数的名称 | varchar(100) | 否 | 否 |
value | 配置参数的值 | varchar(100) | 否 | 是 |
3.3.3 物理结构设计
系统实现的物理结构如图3.3.1所示:
系统实现的物理结构图