目 录
一、 项目背景 1
二、 需求分析 2
三、 数据库设计 5
四、 详细设计说明 10
五、 系统实现 24
六、 项目运行效果 41
七、 测试分析 42
八、 课程实训总结 44
参考文献 46
附录 46
餐购项目设计与实现
一、 项目背景
随着数字经济的发展和学生生活水平的不断提高,学生的餐饮消费需求水平逐渐提高。传统的食堂模式已经无法完全满足学生多样化的口味和服务需求。结合当前学生消费和当下环境的转变,学生对于就餐环境和安全性的关注度增加,更多学生选择外卖的方式来满足日常饮食需求。此时学生往往选择传统的外卖平台,而传统的外卖平台同有针对性平台相比往往是无法进行比较的,而项目研究是在学校的基础上进行,由此可以提高外卖的送餐速度和质量保证。
结合长期以来在学校观察知道,外卖在学校一直是一个较为热门的话题,常考虑的问题有外卖超时、点的是校外的外卖无法送进校园和外卖丢失等,而本项目针对外卖的质量由学校加入审查机制,进而将学校所有的餐饮纳入一个能进行外卖点餐的平台,同时经过质量筛查可以有选择的挑选出符合学校标准的商户,达成一个让学生点餐更加方便同时饮食更加安全的目标。
因此,为适应学生的需求,提供更加便捷、安全、多样化的餐饮服务,开发一个基于学院的外卖平台的点餐系统是非常必要的。通过该系统,学生可以方便地在线点餐,选择自己喜欢的菜品,并选择外送或自取的方式,提高了学生的用餐体验和满意度。同时,该系统也可以提供数据统计和分析功能,为学校餐饮管理提供决策支持,提升整体运营效率。
综上所述,基于校内外卖平台制作的点餐系统在学院学校背景下具有重要的研究意义和一定的实际应用价值。
二、 需求分析
总体基于SpringBoot + MybatisPlus进行开发,使用MySQL数据库进行数据存储,使用Redis进行项目优化,使用maven进行项目管理。
本项目是专门为学校餐饮定制的一款软件产品,包括系统管理后台和移动端应用两部分。其中系统管理后台主要提供给餐饮内部员工使用,可以对餐厅的菜品、套餐、订单进行管理和维护。移动端应用主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。
网页端后台处理:
图1.2.1
移动端功能实现:
-
后端开发技术:
o Spring Boot: 使用Spring Boot作为项目的基础框架,简化配置和快速开发。
o Spring框架: 使用Spring框架管理应用程序的核心组件,包括依赖注入、AOP等。
o Mybatis-Plus: 集成Mybatis-Plus来简化数据访问层的开发,提供便捷的CRUD操作。
o MySQL数据库: 存储用户、餐厅、订单等数据,使用Mybatis-Plus与数据库进行交互。 -
缓存和性能优化:
o Redis: 使用Redis作为缓存服务器,缓存常用的数据,如菜单信息、用户信息、订单状态等,以提高系统性能和响应速度。
o Spring Cache: 集成Spring Cache来对方法结果进行缓存,降低对数据库和其他数据源的频繁访问。 -
前端开发技术:
o HTML-CSS: 使用HTML和CSS开发响应式的用户界面,确保网站在不同设备上的良好显示和用户体验。
o JavaScript: 增强用户界面的交互性,实现购物车功能、地址选择等。
o 前端框架: 考虑使用现代前端框架如React或Vue.js,以提供更丰富的用户交互体验。 -
安全性:
o 用户身份验证: 实现用户注册、登录、退出等功能,确保用户数据的安全性。
o 数据加密: 使用HTTPS协议加密数据传输,以保护用户隐私和敏感信息。 -
架构和部署:
o Maven: 使用Maven进行项目构建和依赖管理。
o 高可用性: 部署多个应用实例以确保系统的高可用性。
图1.5.2
针对个别功能进行描述,作为用户下单的流程
图1.5.3
图1.5.4
三、 数据库设计
数据库设计共为十一张表,表的相关如下。
图3.1.1.1.1
其中套餐为菜品的各类组合,套餐和菜品的关系由setmeal_dish表来维系,菜品包括不同口味,由dish_flavor表来维系,一个订单可能包括多个内容(即菜品或套餐),这些内容由order_detail表来维系,order表则记录相关订单。
根据给出的SQL文件,数据库中包含三个表:address_book,category和dish。以下是这些表的设计:
address_book:这个表用于管理地址。它包含以下字段:
id:主键,唯一标识每个地址。
user_id:用户ID,标识地址所属的用户。
consignee:收货人。
sex:性别,0表示女性,1表示男性。
phone:手机号。
province_code、province_name:省级区划编号和名称。
city_code、city_name:市级区划编号和名称。
district_code、district_name:区级区划编号和名称。
detail:详细地址。
label:标签,用于标识地址的类型或者用途。
is_default:是否为默认地址,0表示否,1表示是。
create_time、update_time:创建时间和更新时间。
create_user、update_user:创建人和修改人。
is_deleted:是否删除,0表示未删除,1表示已删除。
category:这个表用于管理菜品和套餐的分类。它包含以下字段:
id:主键,唯一标识每个分类。
type:类型,1表示菜品分类,2表示套餐分类。
name:分类名称。
sort:顺序,用于排序。
create_time、update_time:创建时间和更新时间。
create_user、update_user:创建人和修改人。
dish:这个表用于管理菜品。它包含以下字段:
id:主键,唯一标识每个菜品。
name:菜品名称。
category_id:菜品分类ID,标识菜品所属的分类。
price:菜品价格。
code:商品码。
image:图片。
description:描述信息。
status:状态,0表示停售,1表示起售。
sort:顺序,用于排序。
create_time、update_time:创建时间和更新时间。
create_user、update_user:创建人和修改人。
is_deleted:是否删除,0表示未删除,1表示已删除。
、
dish_flavor:这个表用于管理菜品的口味。它包含以下字段:
id:主键,唯一标识每个口味。
dish_id:菜品ID,标识口味所属的菜品。
name:口味名称。
value:口味数据列表。
create_time、update_time:创建时间和更新时间。
create_user、update_user:创建人和修改人。
is_deleted:是否删除,0表示未删除,1表示已删除。
employee:这个表用于管理员工信息。它包含以下字段:
id:主键,唯一标识每个员工。
name:员工姓名。
username:用户名。
password:密码。
phone:手机号。
sex:性别。
id_number:身份证号。
status:状态,0表示禁用,1表示正常。
create_time、update_time:创建时间和更新时间。
create_user、update_user:创建人和修改人。
order_detail:这个表用于管理订单明细。它包含以下字段:
id:主键,唯一标识每个订单明细。
name:名字。
image:图片。
order_id:订单ID,标识订单明细所属的订单。
dish_id:菜品ID。
setmeal_id:套餐ID。
dish_flavor:口味。
number:数量。
amount:金额。
orders:这个表用于管理订单。它包含以下字段:
id:主键,唯一标识每个订单。
number:订单号。
status:订单状态,1表示待付款,2表示待派送,3表示已派送,4表示已完成,5表示已取消。
user_id:下单用户ID。
address_book_id:地址ID。
order_time:下单时间。
checkout_time:结账时间。
pay_method:支付方式,1表示微信,2表示支付宝。
amount:实收金额。
remark:备注。
phone:电话。
address:地址。
user_name:用户名。
consignee:收货人。
setmeal:这个表用于管理套餐。它包含以下字段:
id:主键,唯一标识每个套餐。
category_id:菜品分类ID,标识套餐所属的分类。
name:套餐名称。
price:套餐价格。
status:状态,0表示停用,1表示启用。
code:编码。
description:描述信息。
image:图片。
create_time、update_time:创建时间和更新时间。
create_user、update_user:创建人和修改人。
is_d