【最新原创毕设】基于SpringBoot的餐厅点餐系统+29033(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套文案

摘要

随着信息技术的迅猛发展,特别是在大数据、云计算和移动互联网等领域的不断创新,传统餐饮业也开始逐渐转型和升级,向智能化、便捷化、个性化方向发展。其中,餐厅点餐系统作为餐饮业数字化转型的关键一环,受到了广泛的关注和应用。

基于Spring Boot的餐厅点餐系统,正是应这一时代潮流而生。Spring Boot以其简洁、快速、易于集成的特点,成为了构建现代化Web应用的首选框架。它简化了Spring应用的初始搭建以及开发过程,使得开发者能够更加专注于业务逻辑的实现,而非繁琐的配置和部署。

本系统的开发,旨在通过技术手段提升餐厅的运营效率和服务质量。通过整合移动技术、数据库管理、用户认证授权、支付接口等多个功能模块,实现用户在线浏览菜单、自助点餐、移动支付、订单追踪、菜品评价等一系列功能,为顾客带来全新的用餐体验。

同时,该系统也充分考虑了餐厅管理者的需求,提供了菜品订单管理、座位信息管理、座位预约管理、联系餐厅管理等功能,帮助餐厅实现精细化管理和智能化决策。此外,系统还支持多种支付方式和个性化定制,满足不同餐厅和顾客的多样化需求。

综上所述,基于Spring Boot的餐厅点餐系统不仅是一个技术创新的产物,更是餐饮业数字化转型的重要里程碑。它的出现,将推动餐饮业向更加智能化、便捷化、个性化的方向发展,为顾客和餐厅创造更大的价值。

关键词:餐厅点餐系统;Spring Boot;Java语言

Abstract

With the rapid development of information technology, especially the continuous innovation in the fields of big data, cloud computing and mobile Internet, the traditional catering industry has also begun to gradually transform and upgrade to the direction of intelligence, convenience and personalization. Among them, the restaurant ordering system, as a key part of the digital transformation of the catering industry, has received widespread attention and application.

The restaurant ordering system based on Spring Boot is born in response to the trend of this era. Spring Boot has become the preferred framework for building modern web applications due to its simplicity, speed, and ease of integration. It simplifies the initial setup and development process of Spring applications, allowing developers to focus more on implementing business logic rather than tedious configuration and deployment.

The development of this system aims to improve the operational efficiency and service quality of restaurants through technological means. By integrating multiple functional modules such as mobile technology, database management, user authentication and authorization, and payment interfaces, a series of functions such as online menu browsing, self-service ordering, mobile payment, order tracking, and dish evaluation are achieved, bringing customers a brand new dining experience.

At the same time, the system also fully considers the needs of restaurant managers, providing functions such as dish order management, seat information management, seat reservation management, and contact restaurant management, helping restaurants achieve refined management and intelligent decision-making. In addition, the system also supports multiple payment methods and personalized customization to meet the diverse needs of different restaurants and customers.

In summary, the restaurant ordering system based on Spring Boot is not only a product of technological innovation, but also an important milestone in the digital transformation of the catering industry. Its emergence will drive the catering industry towards a more intelligent, convenient, and personalized direction, creating greater value for customers and restaurants.

Keywords: Restaurant ordering system; Spring Boot; Java language

目录

1 绪论

1.1 课题研究背景和意义

1.2 国内外研究现状

1.3本文的组织结构

2 系统分析

2.1可行性分析

2.1.1技术可行性分析

2.1.2经济可行性分析

2.1.3操作可行性分析

2.2功能需求分析

2.3用例分析

2.4 业务流程分析

2.4.1登录流程

2.4.2注册流程

2.4.3添加信息流程

2.4.4删除信息流程

3系统总体设计

3.1系统功能模块设计

3.2数据库设计

3.2.1 数据库E-R模型

3.2.2 数据库表设计

4 系统实现

4.1 普通用户功能模块

4.1.1 用户注册界面

4.1.2 用户登录界面

4.1.3 菜品商城界面

4.1.4我的购物车界面

4.1.5我的订单界面

4.1.6我的地址界面

4.1.7 座位信息界面

4.2管理员模块

4.2.1 系统用户界面

4.2.2菜品订单管理界面

4.2.3座位预约管理界面

4.2.4系统管理界面

4.2.5公告消息管理界面

4.2.6订单列表界面

5 系统测试

5.1系统测试的目的

5.2 系统测试用例

5.3 系统测试结果

总结与展望

参考文献

致谢

1 绪论

1.1 课题研究背景和意义

餐厅点餐系统是近年来随着餐饮业的快速发展和数字化转型而逐渐兴起的一个研究领域。随着消费者对于就餐体验的要求不断提高,传统的点餐方式已经无法满足现代餐饮市场的需求。因此,开发一款高效、便捷、智能的点餐系统成为了餐饮业发展的必然趋势。

课题研究背景方面,随着移动互联网的普及和智能设备的广泛应用,消费者越来越倾向于通过手机或其他智能设备来完成点餐过程。这种趋势促使餐厅必须跟上时代的步伐,进行数字化转型,以满足消费者的需求。同时,餐厅也面临着提高运营效率、降低成本、提升服务质量等多重挑战。因此,开发一款能够满足这些需求的点餐系统成为了餐饮业发展的迫切需求。

课题研究意义方面,餐厅点餐系统的研究不仅有助于提高餐厅的运营效率和服务质量,还能够为消费者带来更加便捷、个性化的用餐体验。通过点餐系统,餐厅可以实现订单的快速处理、库存的有效管理、销售数据的精准分析等功能,从而降低成本、提高盈利能力。同时,点餐系统还能够为消费者提供更加丰富的菜品选择、个性化的点餐推荐、实时的订单追踪等服务,提升消费者的满意度和忠诚度。

综上所述,餐厅点餐系统的课题研究背景和意义在于满足现代餐饮市场对于数字化转型的迫切需求,通过技术手段提高餐厅的运营效率和服务质量,为消费者带来更加便捷、个性化的用餐体验。这一研究不仅有助于推动餐饮业的创新发展,还能够为餐饮企业带来实实在在的经济效益和社会效益。

1.2 国内外研究现状

餐厅点餐系统作为餐饮行业信息化、智能化的重要体现,近年来得到了广泛的关注与研究。随着移动互联网、大数据、人工智能等技术的快速发展,点餐系统不仅简化了消费者的点餐流程,提高了餐厅的运营效率,还为消费者提供了更加个性化、智慧化的服务。

国内研究现状:

在国内,点餐系统的研究与应用取得了显著的进展。徐豪在其研究中提出了基于随机森林模型的推荐点餐系统,该系统通过微信小程序作为前端界面,为消费者提供扫码、登录、浏览菜单、下单、排队、推荐等功能,同时设计并实现了餐厅管理端,提供菜品管理、订单处理、数据统计等功能。该研究还对比了多种推荐算法的性能,最终选择随机森林作为推荐策略,结合隐含狄利克雷(LDA)模型,实现了个性化的菜品推荐功能。这一系统不仅提高了消费者的满意度和点餐体验,也为餐厅提供了更好的运营支持[1]。

另外,张芮绮则关注于线上餐厅管理系统的设计,强调了互联网模式在餐饮行业中的应用意义。该系统面向餐厅消费者、餐厅管理者和餐厅服务员,实现了餐品管理、人员管理、点餐等多项功能,体现了信息化、智能化的管理方式[2]。

宋晴和姚敦红则基于UML技术对餐厅点餐系统进行了设计,旨在提高点餐效率,方便餐厅管理者对相关业务进行管理。他们的研究强调了系统设计的重要性,以及UML技术在系统设计中的应用价值[3]。

在国际上,智慧食堂点餐系统的研发也取得了不少成果。例如,内蒙古赤那网络科技有限公司研发的智慧食堂点餐系统,解决了企业、单位、医院等职工就餐过程中的预约订餐问题,实现了自由订退餐、实时扣款等功能,极大地减少了管理成本,提高了管理效率[4]。

综上所述,餐厅点餐系统的研究与应用在国内外均取得了显著的进展,不仅简化了消费者的点餐流程,提高了餐厅的运营效率,还为消费者提供了更加个性化、智慧化的服务。随着技术的不断发展,未来点餐系统有望实现更加智能化、个性化的服务,为消费者带来更加便捷、高效的用餐体验。

国外研究现状:

国外餐厅点餐系统的研究现状呈现出一种高度集成化、智能化和个性化的趋势。随着科技的快速发展,特别是移动技术、物联网、人工智能和大数据分析等领域的进步,国外的点餐系统不仅在功能上日趋完善,还在用户体验和服务效率上实现了显著的提升。

移动应用和在线平台成为主流,顾客可以通过手机或电脑随时随地进行点餐,不仅方便了顾客,也提高了餐厅的运营效率。同时,这些系统通常与支付系统、会员管理系统等无缝对接,为顾客提供了一站式的服务体验。

在智能化方面,国外研究者正积极探索将人工智能和机器学习技术应用于点餐系统。例如,通过分析顾客的点餐历史和偏好,系统能够智能推荐菜品,提高顾客满意度。此外,一些先进的点餐系统还具备智能排班、库存管理和供应链优化等功能,帮助餐厅实现更高效的运营。

个性化服务也是当前研究的热点之一。通过收集和分析顾客的个人信息、口味偏好和用餐习惯等数据,点餐系统能够为顾客提供更加个性化的服务,如定制化的菜单、独特的用餐体验等。

总体而言,国外餐厅点餐系统的研究现状呈现出一种多元化、智能化和个性化的特点。随着技术的不断进步和创新,未来的点餐系统有望为餐厅和顾客带来更加便捷、高效和个性化的服务体验。

1.3本文的组织结构

第一章是绪论,本文章的开头部分,对本题目的研究背景意义和国内外研究现状等一些做文字性的描述。

第二章是系统分析部分,包括系统总体需求描述、功能性角度分析系统需求、非功能性等各个方面分析系统是否可以实现。

第三章是系统设计部分,本文章的重要部分,提供了系统架构的详细设计和一些主要功能模块的设计说明。

第四章是系统的具体实现,介绍系统的各个模块的具体实现。

第五章在前几章的基础上对系统进行测试和运行。

最后对系统进行了认真的总结,以此对未来有一个新的展望。

2 系统分析

系统分析是开发一个项目的先决条件,通过系统分析可以很好的了解系统的主体用户的基本需求情况,同时这也是项目的开发的原因。进而对系统开发进行可行性分析,通常包括技术可行性、经济可行性等,可行性分析同时也是从项目整体角度进行的分析。然后就是对项目的具体需求进行分析,分析的手段一般都是通过用户的用例图来实现。接下来会进行详细的介绍。

2.1可行性分析

2.1.1技术可行性分析

基于Spring Boot的餐厅点餐系统在技术上是完全可行的。Spring Boot框架提供了丰富的功能和灵活的扩展性,使得开发快速、稳定、安全的Web应用成为可能。同时,结合现代的前端技术和数据库管理系统,我们可以实现用户友好的界面设计、高效的数据处理以及强大的后端逻辑支持。此外,Spring Boot还提供了强大的社区支持和丰富的资源,使得在开发过程中遇到问题时能够快速找到解决方案。因此,从技术角度来看,开发一个基于Spring Boot的餐厅点餐系统是完全可行的,并且有望为餐饮业带来显著的效益和改进。

2.1.2经济可行性分析

在经济可行性方面,基于Spring Boot的餐厅点餐系统具有显著的优势。Spring Boot是一个开源框架,使用它进行开发可以大大降低软件开发的成本。同时,通过整合现有的技术和资源,如开源的前端框架、数据库管理系统和第三方支付接口等,可以进一步减少系统的开发和维护成本。此外,点餐系统的实施可以提高餐厅的运营效率,减少人力成本,并提升顾客满意度,从而增加餐厅的收入。综合来看,基于Spring Boot的餐厅点餐系统在经济上是可行的,并且有望为餐厅带来长期的经济效益。

2.1.3操作可行性分析

在操作可行性方面,基于Spring Boot的餐厅点餐系统同样展现出极高的优势。系统采用用户友好的界面设计,使得餐厅员工和顾客都能轻松上手,无需复杂的培训即可快速掌握使用技巧。此外,系统提供直观的操作流程和明确的功能指引,使得点餐、下单、支付等过程变得简单而高效。同时,系统还具备强大的后台管理功能,方便餐厅员工对菜品、订单、库存等进行快速管理。因此,从操作层面来看,基于Spring Boot的餐厅点餐系统不仅易于使用,而且能够显著提高餐厅的工作效率,为餐厅和顾客带来便捷的操作体验。

2.2功能需求分析

1. 普通用户功能介绍:

注册登录:用户需要能够注册新账户并进行登录,以便访问系统的各项功能和信息。

首页:展示餐厅的最新菜品、促销活动等信息,以吸引用户访问和点餐。

公告消息:用户可以查看系统发布的重要通知和公告,如特别活动、餐厅营业时间等信息。

餐品资讯:提供与餐品相关的信息,如菜品介绍、口味推荐等内容,以帮助用户了解更多信息。

留言板:用户可以在留言板上留下意见、建议或评价,与餐厅进行互动交流。

菜品商城:提供用户浏览菜品、加入购物车、点餐等功能,为用户提供便捷的点餐体验。

商城管理:用户可以管理点餐的订单信息,包括查看订单状态、历史订单等。

座位信息:用户可以查看餐厅的座位信息,预约或选择位置进行就餐。

联系餐厅:提供联系餐厅的方式,如电话、地址等,方便用户进行沟通和预订。

我的账户:用户可以查看个人账户的基本信息和订单记录,管理个人点餐记录和信息。

个人首页:显示用户的个人信息概览,如姓名、联系方式等。

菜品订单:用户可以查看已下的菜品订单、订单状态等详情。

座位预约:用户可以预约餐厅的座位,选择就餐时间和位置。

联系餐厅:提供直接联系餐厅的方式,方便用户进行沟通和预订。

订单配送:用户可以查看订单配送情况,如订单状态、送达时间等信息。

收藏:用户可以收藏喜欢的菜品或餐厅,方便后续查看和点餐。

2. 管理员功能:

登录:管理员需要通过用户名和密码进行登录,以获取管理员权限。

后台首页:提供系统运行状态、重要数据统计、快捷导航等功能,以便管理员快速了解系统运行情况。

系统用户:管理员可以对系统用户进行管理,包括添加、删除、修改用户信息等操作。

菜品订单管理:管理员可以管理菜品订单信息,包括查看订单状态、处理异常订单、统计销售数据等。

座位信息管理:管理员可以管理餐厅的座位信息,包括座位数量、位置分布等。

座位预约管理:管理员可以管理座位预约情况,包括审核预约请求、调整座位安排等。

联系餐厅管理:管理员可以处理用户的联系请求,包括电话、邮件等方式的联系。

轮播图:管理员可以管理网站首页的轮播图内容,更新和编辑相关信息。

公告消息:管理员可以发布重要的系统公告和消息,通知用户相关重要信息。

留言管理:管理员可以管理用户在留言板上的留言,包括审核、回复等操作。

餐品资讯:管理员可以管理系统中发布的餐品资讯内容,包括添加、删除、编辑资讯内容等操作。

资讯分类:管理员可以管理餐品资讯的分类信息,包括添加、删除、编辑资讯分类等操作。

菜品商城:管理员可以管理商城的菜品信息、库存等内容,确保菜品的正常供应。

分类列表:管理员可以管理菜品的分类信息,包括添加、删除、编辑分类等操作。

订单列表:管理员可以查看和管理菜品订单列表,包括订单状态、交易情况等。

2.3用例分析

餐厅点餐系统的完整UML用例图分别是图2-1,图2-2。在参与者上包括普通用户、管理员。

普通用户角色的用例包括首页、公告消息、餐品资讯、留言板、菜品商城、 商城管理、座位信息、联系餐厅、我的账户、个人中心(个人首页、菜品订单、座位预约、联系餐厅、订单配送、收藏)。

图2-1 餐厅点餐系统普通用户角色用例图

管理员角色的用例包括后台首页、系统用户、菜品订单管理、座位信息管理、座位预约管理、联系餐厅管理、系统管理、留言管理、公告消息管理、资源管理、商城管理。

图2-2 餐厅点餐系统管理员角色用例图

2.4 业务流程分析

2.4.1登录流程

登录模块主要满足管理员以及用户的权限登录,用户登录流程图如图2-3所示。

图2-3 登录流程图

2.4.2注册流程

未有账号的用户可进入注册界面进行注册操作,用户注册流程图如图2-4所示。

图2-4 注册流程图

2.4.3添加信息流程

用户在添加信息时,信息编号自动生成,系统会对添加的信息进行验证,验证通过则添加至数据库,添加信息成功,反之添加失败。添加信息流程如图2-5所示。

图2-5 添加信息流程图

2.4.4删除信息流程

用户可选择要删除的信息进行信息删除操作,在删除信息时系统提示是否确定删除信息,是则删除信息成功,系统数据库将信息进行删除。删除信息流程图如图2-6所示。

图2-6删除信息流程图

系统总体设计

在上一章节中分析了餐厅点餐系统的功能性需求,并且根据需求分析了餐厅点餐系统中的用例。那么接下来就要开始对餐厅点餐系统架构、主要功能和数据库开始进行设计。

3.1系统功能模块设计

通过对餐厅点餐系统的功能需求分析以及用例分析,得出了餐厅点餐系统的功能模块图如图3-1所示。

图3-1餐厅点餐系统功能模块图

3.2数据库设计

3.2.1 数据库E-R模型

下面是整个餐厅点餐系统的数据库表的E-R实体关系图,如图3-2所示:

图3-2 餐厅点餐系统E-R实体关系图

3.2.2 数据库表设计

通过上一小节中餐厅点餐系统中总E-R关系图上得出一共需要创建很多个数据表。在此主要罗列几个主要的数据库表结构设计。

表access_token (登陆访问时长)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

token_id

int

10

0

N

Y

临时访问牌ID

2

token

varchar

64

0

Y

N

临时访问牌

3

info

text

65535

0

Y

N

4

maxage

int

10

0

N

N

2

最大寿命:默认2小时

5

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

6

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

7

user_id

int

10

0

N

N

0

用户编号:

表address (收货地址:)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

address_id

int

10

0

N

Y

收货地址:

2

name

varchar

32

0

Y

N

姓名:

3

phone

varchar

13

0

Y

N

手机:

4

postcode

varchar

8

0

Y

N

邮编:

5

address

varchar

255

0

N

N

地址:

6

user_id

mediumint

8

0

N

N

用户ID:[0,8388607]用户获取其他与用户相关的数据

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

9

default

bit

1

0

N

N

0

默认判断

表article (文章:用于内容管理系统的文章)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

article_id

mediumint

8

0

N

Y

文章id:[0,8388607]

2

title

varchar

125

0

N

Y

标题:[0,125]用于文章和html的title标签中

3

type

varchar

64

0

N

N

0

文章分类:[0,1000]用来搜索指定类型的文章

4

hits

int

10

0

N

N

0

点击数:[0,1000000000]访问这篇文章的人次

5

praise_len

int

10

0

N

N

0

点赞数

6

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

7

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

8

source

varchar

255

0

Y

N

来源:[0,255]文章的出处

9

url

varchar

255

0

Y

N

来源地址:[0,255]用于跳转到发布该文章的网站

10

tag

varchar

255

0

Y

N

标签:[0,255]用于标注文章所属相关内容,多个标签用空格隔开

11

content

longtext

2147483647

0

Y

N

正文:文章的主体内容

12

img

varchar

255

0

Y

N

封面图

13

description

text

65535

0

Y

N

文章描述

表article_type (文章分类)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

type_id

smallint

5

0

N

Y

分类ID:[0,10000]

2

display

smallint

5

0

N

N

100

显示顺序:[0,1000]决定分类显示的先后顺序

3

name

varchar

16

0

N

N

分类名称:[2,16]

4

father_id

smallint

5

0

N

N

0

上级分类ID:[0,32767]

5

description

varchar

255

0

Y

N

描述:[0,255]描述该分类的作用

6

icon

text

65535

0

Y

N

分类图标:

7

url

varchar

255

0

Y

N

外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置

8

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表auth (用户权限管理)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

auth_id

int

10

0

N

Y

授权ID:

2

user_group

varchar

64

0

Y

N

用户组:

3

mod_name

varchar

64

0

Y

N

模块名:

4

table_name

varchar

64

0

Y

N

表名:

5

page_title

varchar

255

0

Y

N

页面标题:

6

path

varchar

255

0

Y

N

路由路径:

7

position

varchar

32

0

Y

N

位置:

8

mode

varchar

32

0

N

N

_blank

跳转方式:

9

add

tinyint

3

0

N

N

1

是否可增加:

10

del

tinyint

3

0

N

N

1

是否可删除:

11

set

tinyint

3

0

N

N

1

是否可修改:

12

get

tinyint

3

0

N

N

1

是否可查看:

13

field_add

text

65535

0

Y

N

添加字段:

14

field_set

text

65535

0

Y

N

修改字段:

15

field_get

text

65535

0

Y

N

查询字段:

16

table_nav_name

varchar

500

0

Y

N

跨表导航名称:

17

table_nav

varchar

500

0

Y

N

跨表导航:

18

option

text

65535

0

Y

N

配置:

19

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

20

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表cart (购物车)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

cart_id

int

10

0

N

Y

购物车ID:

2

title

varchar

64

0

Y

N

标题:

3

img

varchar

255

0

N

N

0

图片:

4

user_id

int

10

0

N

N

0

用户ID:

5

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

6

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

7

state

int

10

0

N

N

0

状态:使用中,已失效

8

price

double

9

2

N

N

0.00

单价:

9

price_ago

double

9

2

N

N

0.00

原价:

10

price_count

double

11

2

N

N

0.00

总价:

11

num

int

10

0

N

N

1

数量:

12

goods_id

mediumint

8

0

N

N

商品id:[0,8388607]

13

type

varchar

64

0

N

N

未分类

商品分类:

14

description

varchar

255

0

Y

N

描述:[0,255]用于产品规格描述

表collect (收藏)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

collect_id

int

10

0

N

Y

收藏ID:

2

user_id

int

10

0

N

N

0

收藏人ID:

3

source_table

varchar

255

0

Y

N

来源表:

4

source_field

varchar

255

0

Y

N

来源字段:

5

source_id

int

10

0

N

N

0

来源ID:

6

title

varchar

255

0

Y

N

标题:

7

img

varchar

255

0

Y

N

封面:

8

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表comment (评论)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

comment_id

int

10

0

N

Y

评论ID:

2

user_id

int

10

0

N

N

0

评论人ID:

3

reply_to_id

int

10

0

N

N

0

回复评论ID:空为0

4

content

longtext

2147483647

0

Y

N

内容:

5

nickname

varchar

255

0

Y

N

昵称:

6

avatar

varchar

255

0

Y

N

头像地址:[0,255]

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

9

source_table

varchar

255

0

Y

N

来源表:

10

source_field

varchar

255

0

Y

N

来源字段:

11

source_id

int

10

0

N

N

0

来源ID:

表contact_the_restaurant (联系餐厅)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

contact_the_restaurant_id

int

10

0

N

Y

联系餐厅ID

2

regular_users

int

10

0

Y

N

0

普通用户

3

user_name

varchar

64

0

Y

N

用户姓名

4

contact_time

datetime

19

0

Y

N

联系时间

5

user_information

text

65535

0

Y

N

用户信息

6

reply_to_message

text

65535

0

Y

N

回复信息

7

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表dish_mall (菜品商城)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

dish_mall_id

int

10

0

N

Y

菜品商城ID

2

purchase_notice

varchar

64

0

Y

N

购买须知

3

cart_title

varchar

125

0

Y

N

标题:[0,125]用于产品html的标签中

4

cart_img

text

65535

0

Y

N

封面图:用于显示于产品列表页

5

cart_description

varchar

255

0

Y

N

描述:[0,255]用于产品规格描述

6

cart_price_ago

double

8

2

N

N

0.00

原价:[1]

7

cart_price

double

8

2

N

N

0.00

卖价:[1]

8

cart_inventory

int

10

0

N

N

0

商品库存

9

cart_type

varchar

64

0

N

N

未分类

商品分类:

10

cart_content

longtext

2147483647

0

Y

N

正文:产品的主体内容

11

cart_img_1

text

65535

0

Y

N

主图1:

12

cart_img_2

text

65535

0

Y

N

主图2:

13

cart_img_3

text

65535

0

Y

N

主图3:

14

cart_img_4

text

65535

0

Y

N

主图4:

15

cart_img_5

text

65535

0

Y

N

主图5:

16

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

17

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表dish_orders (菜品订单)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

dish_orders_id

int

10

0

N

Y

菜品订单ID

2

dish_name

varchar

64

0

Y

N

菜品名称

3

type_of_dishes

varchar

64

0

Y

N

菜品类型

4

price_of_dishes

int

10

0

Y

N

0

菜品价格

5

purchasing_users

int

10

0

Y

N

0

购买用户

6

user_name

varchar

64

0

Y

N

用户姓名

7

user_phone_number

varchar

64

0

Y

N

用户电话

8

user_address

varchar

64

0

Y

N

用户地址

9

purchase_quantity

int

10

0

Y

N

0

购买数量

10

purchase_date

date

10

0

Y

N

购买日期

11

purchase_amount

varchar

64

0

Y

N

购买金额

12

order_category

varchar

64

0

Y

N

订单类别

13

order_number

varchar

64

0

Y

N

订单号码

14

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

15

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表goods (商品信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

goods_id

mediumint

8

0

N

Y

产品id:[0,8388607]

2

title

varchar

125

0

Y

N

标题:[0,125]用于产品和html的<title>标签中

3

img

text

65535

0

Y

N

封面图:用于显示于产品列表页

4

description

varchar

255

0

Y

N

描述:[0,255]用于产品规格描述

5

price_ago

double

8

2

N

N

0.00

原价:[1]

6

price

double

8

2

N

N

0.00

卖价:[1]

7

sales

int

10

0

N

N

0

销量:[0,1000000000]

8

inventory

int

10

0

N

N

0

商品库存

9

type

varchar

64

0

N

N

商品分类:

10

hits

int

10

0

N

N

0

点击量:[0,1000000000]访问这篇产品的人次

11

content

longtext

2147483647

0

Y

N

正文:产品的主体内容

12

img_1

text

65535

0

Y

N

主图1:

13

img_2

text

65535

0

Y

N

主图2:

14

img_3

text

65535

0

Y

N

主图3:

15

img_4

text

65535

0

Y

N

主图4:

16

img_5

text

65535

0

Y

N

主图5:

17

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

18

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

19

customize_field

text

65535

0

Y

N

自定义字段

20

source_table

varchar

255

0

Y

N

来源表:

21

source_field

varchar

255

0

Y

N

来源字段:

22

source_id

int

10

0

N

N

0

来源ID:

23

user_id

int

10

0

Y

N

0

添加人

表goods_type (商品类型)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

type_id

int

10

0

N

Y

商品分类ID:

2

father_id

smallint

5

0

N

N

0

上级分类ID:[0,32767]

3

name

varchar

255

0

Y

N

商品名称:

4

desc

varchar

255

0

Y

N

描述:

5

icon

varchar

255

0

Y

N

图标:

6

source_table

varchar

255

0

Y

N

来源表:

7

source_field

varchar

255

0

Y

N

来源字段:

8

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表hits (用户点击)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

hits_id

int

10

0

N

Y

点赞ID:

2

user_id

int

10

0

N

N

0

点赞人:

3

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

5

source_table

varchar

255

0

Y

N

来源表:

6

source_field

varchar

255

0

Y

N

来源字段:

7

source_id

int

10

0

N

N

0

来源ID:

表logistics_delivery (物流配送)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

logistics_delivery_id

int

10

0

N

Y

物流配送ID

2

order_number

varchar

64

0

Y

N

订单号

3

product_name

varchar

64

0

Y

N

商品名称

4

purchase_quantity

varchar

64

0

Y

N

购买数量

5

total_transaction_amount

double

11

2

Y

N

0.00

交易总额

6

the_date_of_issuance

date

10

0

Y

N

发货日期

7

delivery_number

varchar

30

0

Y

N

配送订单

8

ordinary_users

int

10

0

Y

N

0

普通用户

9

shipping_address

varchar

64

0

Y

N

收货地址

10

delivery_status

varchar

64

0

Y

N

配送状态

11

signing_status

varchar

64

0

Y

N

签收状态

12

recommend

int

10

0

N

N

0

智能推荐

13

contact_name

varchar

255

0

Y

N

联系人名字

14

merchant_id

int

10

0

Y

N

商家id

15

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

16

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表message (留言板)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

message_id

int

10

0

N

Y

留言板ID:

2

user_id

int

10

0

N

N

0

用户ID:

3

title

varchar

64

0

Y

N

标题:

4

content

longtext

2147483647

0

N

N

内容:

5

nickname

varchar

32

0

N

N

昵称:

6

avatar

varchar

255

0

Y

N

头像:

7

email

varchar

125

0

Y

N

留言者邮箱

8

phone

varchar

11

0

Y

N

留言者手机号码

9

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

11

reply

longtext

2147483647

0

Y

N

回复

12

reply_state

tinyint

4

0

Y

N

0

回复状态

表notice (公告)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

notice_id

mediumint

8

0

N

Y

公告id:

2

title

varchar

125

0

N

N

标题:

3

content

longtext

2147483647

0

Y

N

正文:

4

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

5

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表order (订单)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

order_id

int

10

0

N

Y

订单ID:

2

order_number

varchar

64

0

Y

N

订单号:

3

goods_id

mediumint

8

0

N

N

商品id:[0,8388607]

4

title

varchar

32

0

Y

N

商品标题:

5

img

varchar

255

0

Y

N

商品图片:

6

price

double

10

2

N

N

0.00

价格:

7

price_ago

double

10

2

N

N

0.00

原价:

8

num

int

10

0

N

N

1

数量:

9

price_count

double

8

2

N

N

0.00

总价:

10

norms

varchar

255

0

Y

N

规格:

11

type

varchar

64

0

N

N

未分类

商品分类:

12

contact_name

varchar

32

0

Y

N

联系人姓名:

13

contact_email

varchar

125

0

Y

N

联系人邮箱:

14

contact_phone

varchar

11

0

Y

N

联系人手机:

15

contact_address

varchar

255

0

Y

N

收件地址:

16

postal_code

varchar

9

0

Y

N

邮政编码:

17

user_id

int

10

0

N

N

0

买家ID:

18

merchant_id

mediumint

8

0

N

N

0

商家ID:

19

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

20

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

21

description

varchar

255

0

Y

N

描述:[0,255]用于产品规格描述

22

state

varchar

16

0

N

N

待付款

订单状态:待付款,待发货,待签收,已签收,待退款,已退款,已拒绝,已完成

23

remark

text

65535

0

Y

N

订单备注

24

delivery_state

varchar

16

0

Y

N

未配送

发货状态:未配送,已配送

25

vip_discount

double

11

2

Y

N

0.00

折扣

表praise (点赞)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

praise_id

int

10

0

N

Y

点赞ID:

2

user_id

int

10

0

N

N

0

点赞人:

3

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

5

source_table

varchar

255

0

Y

N

来源表:

6

source_field

varchar

255

0

Y

N

来源字段:

7

source_id

int

10

0

N

N

0

来源ID:

8

status

bit

1

0

N

N

1

点赞状态:1为点赞,0已取消

表regular_users (普通用户)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

regular_users_id

int

10

0

N

Y

普通用户ID

2

user_name

varchar

64

0

Y

N

用户姓名

3

user_gender

varchar

64

0

Y

N

用户性别

4

user_age

varchar

64

0

Y

N

用户年龄

5

examine_state

varchar

16

0

N

N

已通过

审核状态

6

user_id

int

10

0

N

N

0

用户ID

7

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表seat_information (座位信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

seat_information_id

int

10

0

N

Y

座位信息ID

2

seat_number

varchar

64

0

Y

N

座位编号

3

number_of_seats

int

10

0

Y

N

0

座位数量

4

seat_position

varchar

64

0

Y

N

座位位置

5

seat_image

varchar

255

0

Y

N

座位图片

6

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

7

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表seat_reservation (座位预约)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

seat_reservation_id

int

10

0

N

Y

座位预约ID

2

seat_number

varchar

64

0

Y

N

座位编号

3

number_of_seats

int

10

0

Y

N

0

座位数量

4

seat_position

varchar

64

0

Y

N

座位位置

5

regular_users

int

10

0

Y

N

0

普通用户

6

user_name

varchar

64

0

Y

N

用户姓名

7

user_phone_number

varchar

64

0

Y

N

用户电话

8

appointment_time

datetime

19

0

Y

N

预约时间

9

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表slides (轮播图)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

slides_id

int

10

0

N

Y

轮播图ID:

2

title

varchar

64

0

Y

N

标题:

3

content

varchar

255

0

Y

N

内容:

4

url

varchar

255

0

Y

N

链接:

5

img

varchar

255

0

Y

N

轮播图:

6

hits

int

10

0

N

N

0

点击量:

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表upload (文件上传)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

upload_id

int

10

0

N

Y

上传ID

2

name

varchar

64

0

Y

N

文件名

3

path

varchar

255

0

Y

N

访问路径

4

file

varchar

255

0

Y

N

文件路径

5

display

varchar

255

0

Y

N

显示顺序

6

father_id

int

10

0

Y

N

0

父级ID

7

dir

varchar

255

0

Y

N

文件夹

8

type

varchar

32

0

Y

N

文件类型

表user (用户账户:用于保存用户登录信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

user_id

mediumint

8

0

N

Y

用户ID:[0,8388607]用户获取其他与用户相关的数据

2

state

smallint

5

0

N

N

1

账户状态:[0,10](1可用|2异常|3已冻结|4已注销)

3

user_group

varchar

32

0

Y

N

所在用户组:[0,32767]决定用户身份和权限

4

login_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

上次登录时间:

5

phone

varchar

11

0

Y

N

手机号码:[0,11]用户的手机号码,用于找回密码时或登录时

6

phone_state

smallint

5

0

N

N

0

手机认证:[0,1](0未认证|1审核中|2已认证)

7

username

varchar

16

0

N

N

用户名:[0,16]用户登录时所用的账户名称

8

nickname

varchar

16

0

Y

N

昵称:[0,16]

9

password

varchar

64

0

N

N

密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成

10

email

varchar

64

0

Y

N

邮箱:[0,64]用户的邮箱,用于找回密码时或登录时

11

email_state

smallint

5

0

N

N

0

邮箱认证:[0,1](0未认证|1审核中|2已认证)

12

avatar

varchar

255

0

Y

N

头像地址:[0,255]

13

open_id

varchar

255

0

Y

N

针对获取用户信息字段

14

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

15

vip_level

varchar

255

0

Y

N

会员等级

16

vip_discount

double

11

2

Y

N

0.00

会员折扣

表user_group (用户组:用于用户前端身份和鉴权)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

group_id

mediumint

8

0

N

Y

用户组ID:[0,8388607]

2

display

smallint

5

0

N

N

100

显示顺序:[0,1000]

3

name

varchar

16

0

N

N

名称:[0,16]

4

description

varchar

255

0

Y

N

描述:[0,255]描述该用户组的特点或权限范围

5

source_table

varchar

255

0

Y

N

来源表:

6

source_field

varchar

255

0

Y

N

来源字段:

7

source_id

int

10

0

N

N

0

来源ID:

8

register

smallint

5

0

Y

N

0

注册位置:

9

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

4 系统实现

餐厅点餐系统主要是根据前面的需求分析和总体设计来设计页面并实现业务逻辑。主要从界面实现、业务逻辑实现这两部分进行介绍。

4.1 普通用户功能模块

4.1.1 用户注册界面

不是餐厅点餐系统的用户可以通过在线进行注册,填写上自己的账号、密码、重复密码、昵称、邮箱登信息后点击“提交”按钮后将会验证是否有非空数据,再验证密码和重复密码是否一样,最后验证是否账号重复,都验证没问题后即可注册成功。注册实现了用户注册和发布者注册两部分,其用户注册界面展示如下图4-1所示。

图4-1用户注册界面图

注册逻辑代码如下:

    /**

     * 注册

     * @param user

     * @return

     */

    @PostMapping("register")

    public Map<String, Object> signUp(@RequestBody User user) {

        // 查询用户

        Map<String, String> query = new HashMap<>();

        Map<String,Object> map = JSON.parseObject(JSON.toJSONString(user));

        query.put("username",user.getUsername());

        List list = service.selectBaseList(service.select(query, new HashMap<>()));

        if (list.size()>0){

            return error(30000, "用户已存在");

        }

        map.put("password",service.encryption(String.valueOf(map.get("password"))));

        service.insert(map);

        return success(1);

}     

4.1.2 用户登录界面

餐厅点餐系统上注册后的用户可以通过自己的用户名和密码进行登录,在用户填写好自己的用户名和密码信息并点击“登录”按钮后,将会先验证是否有非空数据,再验证填写的用户信息和数据库中保存的是否一致,一致后将会登录成功,登录成功后将会在左上角上显示用户信息;否则将会提示相应错误信息,用户登录界面如下图4-2所示。

图4-2用户登录界面图

登录的逻辑代码如下所示。

/**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        String username = data.get("username");

        String email = data.get("email");

        String phone = data.get("phone");

        String password = data.get("password");

        List resultList = null;

        Map<String, String> map = new HashMap<>();

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }else{

            return error(30000, "账号或密码不能为空");

        }

        if (resultList == null || password == null) {

            return error(30000, "账号或密码不能为空");

        }

        //判断是否有这个用户

        if (resultList.size()<=0){

            return error(30000,"用户不存在");

        }

        User byUsername = (User) resultList.get(0);

        Map<String, String> groupMap = new HashMap<>();

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());

            if (res==null){

                return error(30000,"用户不存在");

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            Duration duration = Duration.ofSeconds(7200L);

            redisTemplate.opsForValue().set(accessToken.getToken(), accessToken,duration);

            // 返回用户信息

            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

            user.put("token", accessToken.getToken());

            JSONObject ret = new JSONObject();

            ret.put("obj",user);

            return success(ret);

        } else {

            return error(30000, "账号或密码不正确");

        }

    }

输入有效的用户名和密码信息,点击“登录”按钮,自动跳转到“首页”页面,首页界面如下图4-3所示。

图4-3首页界面图

4.1.3 菜品商城界面

当用户点击“菜品商城”这一菜单按钮,会显示管理员在后台发布的所有的菜品信息,支持通过关键词对菜品进行搜索,选择需要的菜品信息点击可以进入到菜品信息详细的介绍界面,同时可以进行购买,菜品商城界面如下图4-4所示。

图4-4菜品商城详情界面图

4.1.4我的购物车界面

当用户浏览到心仪的商品时,可以将商品添加至购物车内,查看购物车列表,修改或者删除购物车。我的购物车界面如下图4-5所示。

图4-5我的购物车界面图

4.1.5我的订单界面

用户可以查看订单的详细信息,包括订单编号、下单时间、订单备注等,可以对订单进行支付。我的订单界面如下图4-6所示。

图4-6我的订单界面图

4.1.6我的地址界面

用户输入收货人、手机号及详细地址可以对收货地址进行添加。我的地址界面如下图4-7所示。

图4-7我的地址界面图

4.1.7 座位信息界面

点击“座位信息”,用户可以查看餐厅的座位信息,预约或选择位置进行就餐。界面如下图4-8所示。

图4-8座位信息界面图

4.2管理员模块

4.2.1 系统用户界面

管理员点击“系统用户”这一菜单会显示管理员、普通用户这两个子菜单,管理员可以对这两个角色的信息进行增删改查操作。界面如下图4-9所示。

图4-9系统用户管理界面图

系统用户管理界面逻辑代码如下:

@PostMapping("/set")

@Transactional

    public Map<String, Object> set(HttpServletRequest request) throws IOException {

        service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));

        return success(1);

}

    public Map<String,String> readConfig(HttpServletRequest request){

        Map<String,String> map = new HashMap<>();

        map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));

        map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));

        map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));

        map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));

        map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));

        map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));

        map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));

        map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));

        return map;

}

    public Map<String,String> readQuery(HttpServletRequest request){

        String queryString = request.getQueryString();

        if (queryString != null && !"".equals(queryString)) {

            String[] querys = queryString.split("&");

            Map<String, String> map = new HashMap<>();

            for (String query : querys) {

                String[] q = query.split("=");

                map.put(q[0], q[1]);

            }

            map.remove(FindConfig.PAGE);

            map.remove(FindConfig.SIZE);

            map.remove(FindConfig.LIKE);

            map.remove(FindConfig.ORDER_BY);

            map.remove(FindConfig.FIELD);

            map.remove(FindConfig.GROUP_BY);

            map.remove(FindConfig.MAX_);

            map.remove(FindConfig.MIN_);

            return map;

        }else {

            return new HashMap<>();

        }

}

    @Transactional

    public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){

        StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET ");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");

            }else {

                sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");

            }

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));

        log.info("[{}] - 更新操作:{}",table,sql);

        Query query1 = runCountSql(sql.toString());

        query1.executeUpdate();

}

    public String toWhereSql(Map<String,String> query, Boolean like) {

        if (query.size() > 0) {

            try {

                StringBuilder sql = new StringBuilder(" WHERE ");

                for (Map.Entry<String, String> entry : query.entrySet()) {

                    if (entry.getKey().contains(FindConfig.MIN_)) {

                        String min = humpToLine(entry.getKey()).replace("_min", "");

                        sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");

                        continue;

                    }

                    if (entry.getKey().contains(FindConfig.MAX_)) {

                        String max = humpToLine(entry.getKey()).replace("_max", "");

                        sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");

                        continue;

                    }

                    if (like == true) {

                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and ");

                    } else {

                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and ");

                    }

                }

                sql.delete(sql.length() - 4, sql.length());

                sql.append(" ");

                return sql.toString();

            } catch (UnsupportedEncodingException e) {

                log.info("拼接sql 失败:{}", e.getMessage());

            }

        }

        return "";

    }

4.2.2菜品订单管理界面

管理员点击后台左边的“菜品订单管理”菜单后,管理员可以管理菜品订单信息,包括查看菜品价格、菜品名称、购买用户、用户电话、用户地址、订单状态、处理异常订单等。可以添加新的菜品订单。菜品订单管理界面如下图4-10和4-11所示。

图4-10菜品订单列表界面图

图4-11菜品订单添加界面图

4.2.3座位预约管理界面

管理员点击后台左边的“座位预约管理”菜单后,管理员可以管理座位预约情况,包括审核预约请求、调整座位安排等。座位预约管理界面如下图4-12所示。

图4-12座位预约管理界面图

4.2.4系统管理界面

管理员点击“系统管理”这一菜单会显示轮播图这一个子菜单,管理员可以对前台展示的轮播图进行设置,界面如下图4-13所示。

图4-13系统管理界面图

轮播图添加代码如下:

   @PostMapping("/upload")

    public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {

        log.info("进入方法");

        if (file.isEmpty()) {

            return error(30000, "没有选择文件");

        }

        try {

            //判断有没路径,没有则创建

            String filePath = System.getProperty("user.dir") + "/src/main/resources/static/";

            File targetDir = new File(filePath);

            if (!targetDir.exists() && !targetDir.isDirectory()) {

                if (targetDir.mkdirs()) {

                    log.info("创建目录成功");

                } else {

                    log.error("创建目录失败");

                }

            }

            String fileName = file.getOriginalFilename();

            File dest = new File(filePath + fileName);

            log.info("文件路径:{}", dest.getPath());

            log.info("文件名:{}", dest.getName());

            file.transferTo(dest);

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("url", "/api/upload/" + fileName);

            return success(jsonObject);

        } catch (IOException e) {

            log.info("上传失败:{}", e.getMessage());

        }

        return error(30000, "上传失败");

    }

4.2.5公告消息管理界面

点击“公告消息管理”这个菜单,可以查看到系统中所有添加的通知公告,支持通过标题对通知公告进行查询,添加、删除等操作。公告消息管理界面如下图4-14所示。

图4-14公告消息管理界面图

4.2.6订单列表界面

管理员点击后台左边的“订单列表”菜单,可以查看所以有订单信息,包括商品名称、订单号、商品图片、价格 、原价、买家、总价、订单状态、买家、备注、创建时间等。还可以进行查询、重置和删除等操作。订单列表界面如下图4-15所示。

图4-15订单列表界面图

5 系统测试

5.1系统测试的目的

系统测试的目的是确保系统的功能完整、性能稳定,并验证系统是否符合预期的设计和需求。通过系统测试,可以发现和修复潜在的错误和缺陷,提高系统的质量和可靠性。同时,系统测试还可以评估系统在不同条件下的性能表现,包括并发性能、响应时间和容错能力等。通过全面的系统测试,可以确保系统在正式上线前达到高品质的状态。

5.2 系统测试用例

通过对用户登录功能、商品展示功能、商品添加功能、商品搜索功能以及密码修改功能进行了测试,测试如下表5-1、5-2、5-3、5-4、5-5所示。

表5-1 用户登录功能测试表

测试用例编号

测试描述

预期结果

实际结果

是否通过

TC001

使用正确的用户名和密码进行登录

成功登录系统,跳转到用户首页

登录成功,跳转到用户首页

通过

TC002

使用不存在的用户名进行登录

显示错误提示信息:用户名不存在

显示错误提示信息:用户名不存在

通过

TC003

使用正确的用户名和错误的密码进行登录

显示错误提示信息:密码错误

显示错误提示信息:密码错误

通过

TC004

不输入用户名和密码直接点击登录按钮

显示错误提示信息:用户名和密码不能为空

显示错误提示信息:用户名和密码不能为空

通过

表5-2 商品展示功能测试表

测试用例编号

测试描述

预期结果

实际结果

是否通过

TC001

打开商品列表页面,检查是否能够正确展示商品

商品列表显示正确

商品列表显示正确

通过

TC002

点击商品详情查看按钮,检查是否能正常打开页面

商品详情页面显示正确

商品详情页面显示正确

通过

TC003

检查商品搜索功能

根据关键字搜索到相关商品并正确展示

根据关键字搜索到相关商品并正确展示

通过

表5-3 商品添加功能测试表

测试用例编号

测试描述

预期结果

实际结果

是否通过

TC001

使用合法的信息添加一个新商品

商品成功添加到系统

商品成功添加到系统

通过

TC002

使用已存在的商品名称添加一个新商品

显示错误提示信息:商品名称已存在

显示错误提示信息:商品名称已存在

通过

TC003

添加商品时不输入必填信息

显示错误提示信息:必填字段不能为空

显示错误提示信息:必填字段不能为空

通过

表5-4商品搜索功能测试表

测试用例编号

测试描述

预期结果

实际结果

是否通过

TC001

使用商品关键字进行搜索

搜索结果包含符合关键字的商品

搜索结果包含符合关键字的商品

通过

TC002

使用不存在的关键字进行搜索

搜索结果为空

搜索结果为空

通过

表5-5 密码修改功能测试表

测试用例编号

测试描述

预期结果

实际结果

是否通过

TC001

输入正确的原密码和新密码进行修改

密码成功修改

密码成功修改

通过

TC002

输入错误的原密码和新密码进行修改

显示错误提示信息:原密码错误

显示错误提示信息:原密码错误

通过

TC003

不输入原密码和新密码直接点击修改按钮

显示错误提示信息:密码不能为空

显示错误提示信息:密码不能为空

通过

5.3 系统测试结果

以上是对系统测试的一些典型测试用例的描述。通过这些测试,可以验证用户登录功能、商品展示功能、商品添加功能、商品搜索功能以及密码修改功能的正确性和稳定性。每个测试用例都有预期结果,并与实际结果进行对比,判断是否通过测试。通过全面的系统测试,可以确保系统的各项功能正常运行,并具备高质量的用户体验。

总结与展望

本次餐厅点餐系统的设计与实现,功能方面,通过功能模块图区分用户端与管理端各自的功能权限;数据库方面,数据库使用口碑较好的mysql进行数据的存储,开源的mysql等技术的使用,相对来说体积较小,服务稳定,减少系统开发成本费用,通过数据库表的E-R实体关系图建立了表单与表单之间的连接,区分不同的表单之间的关系,更好的完善数据库的内容;测试方面,通过测试用例检查餐厅点餐系统的设计缺陷和程序存在的错误,在系统测试阶段的过程中,出现了一些问题,例如,注册信息,没有规范用户在注册页面填写信息时输入两次密码,而导致后期登录错误,最后通过多次修改程序和测试解决了问题。最终经过不断的检测、修改,实现项目的稳定,达到了预期的设计效果。

系统整体的功能到达预期的效果,但页面的美化方面还是存在一些不足,例如:系统的图标过于简洁;wxss页面的渲染布局方面不够完善,人们在使用软件过程中,对某些功能不易找寻,针对此次项目产生的问题,日后将不断改进,使该项目更加完善。

参考文献

[1]徐豪.基于随机森林模型的推荐点餐系统设计与实现[D].兰州大学,2023.DOI:10.27204/d.cnki.glzhu.2023.002414.

[2]张芮绮.线上餐厅管理系统的设计[J].科技风,2023,(06):4-6.DOI:10.19392/j.cnki.1671-7341.202306002.

[3]宋晴,姚敦红.基于UML的餐厅点餐系统设计[J].信息与电脑(理论版),2020,32(13):87-88.

[4]倪自亮,智慧食堂点餐系统.内蒙古自治区,内蒙古赤那网络科技有限公司,2020-04-17.

[5]Suhendra R ,Takahashi R ,Agangi A , et al.Textural-compositional evolution of pyrite and metal remobilization during low-grade metamorphism of metapelite: Contribution to gold mineralization in the Luk Ulo Complex, Central Java, Indonesia[J].Ore Geology Reviews,2024,166105966-.

[6]Slameto ,Fahrudin E D ,Saputra W M .Effect of fertilizer composition and different varieties on yield, methane and nitrous oxide emission from rice field in East Java Indonesia[J].Frontiers in Agronomy,2024,6

[7]Hudalah D ,Octifanny Y ,Talitha T , et al.From Metropolitanization to Megaregionalization: Intentionality in the Urban Restructuring of Java’s North Coast, Indonesia[J].Journal of Planning Education and Research,2024,44(1):292-306.

[8]Handini E ,Hasenaka T ,Barber D N , et al.Systematics of slab-derived components in Central Java, Sunda Arc: Evidence for differential material transfer across the Southeast Asian convergent margin[J].Tectonophysics,2024,873230229-.

[9]王馗,吴勇灵.基于微信小程序的点餐系统设计与实现[J].现代信息科技,2023,7(22):30-35+39.DOI:10.19850/j.cnki.2096-4706.2023.22.007.

[10]苏兵.基于微服务的校园点餐系统后台的设计与实现[J].电脑与电信,2023,(11):23-28.DOI:10.15966/j.cnki.dnydx.2023.11.008.

[11]陈海燕,常莹,张燕宁.基于Android系统的校园点餐系统中不同数据存储方式的教学研究[J].电脑编程技巧与维护,2023,(09):57-60.DOI:10.16184/j.cnki.comprg.2023.09.012.

[12]曾慧群.基于Android的智慧点餐系统设计与实现[J].现代信息科技,2023,7(14):15-19.DOI:10.19850/j.cnki.2096-4706.2023.14.004.

[13]李志伟.基于Eclipse+SDK开发平台的无线点餐系统设计[J].信息与电脑(理论版),2023,35(12):125-128.

[14]叶梦君,焦冰.基于Linux的点餐系统的设计与实现[J].电脑知识与技术,2023,19(03):44-46+50.DOI:10.14004/j.cnki.ckt.2023.0153.

[15]刘德凤.酒店点餐系统的设计与实现[J].电子技术与软件工程,2022,(22):173-176.

[16]张彭飞.基于协同过滤的微信点餐推荐系统的设计与实现[D].吉林大学,2022.DOI:10.27162/d.cnki.gjlin.2022.007344.

[17]种倩倩,孙丽英,陈滨,等.基于微信小程序的点餐系统的设计与开发[J].电脑知识与技术,2022,18(19):66-69+73.DOI:10.14004/j.cnki.ckt.2022.1307.

[18]谷研硕,时振涛,孙申英,等.基于内容推荐算法的点餐系统的设计与实现[J].电脑知识与技术,2022,18(10):48-49.DOI:10.14004/j.cnki.ckt.2022.0815.

[19]王丽爱,周旭东,刘贤.基于MVC框架的手机点餐系统[J].电脑知识与技术,2022,18(05):76-78+84.DOI:10.14004/j.cnki.ckt.2022.0353.

[20]陈南平.基于SOA架构的移动Web点餐系统设计与实现[J].信息与电脑(理论版),2020,32(03):49-52.

致谢

至此论文结束,感谢您的阅读。首先,我要感谢我的父母对我的支持与理解,在两年的本科学习生活中,倾其所能的爱护我,使我能够心无旁骛,全心全意的投入到学习中;不断鼓励我,让我能够拥有不断前进的动力。其次还要感谢我的导师,感谢在这段时间给予我有效的建议,以至于我的毕设有了整体的设计思路,尽管我在实习期间很忙,论文撰写总是停停改改,但是导师依然十分负责,时不时的询问我的任务进展情况,跟进我的论文进度。在老师的帮助下,我逐步完成了自己的论文和程序,从导师身上也学习到很多知识,和经验,这些知识和经验令我受益匪浅。

此外,还要感谢我的同学,热心的解答了我在程序上遇到的问题,是他们在我编写程序过程中给了我很多的启发和感想,也帮助了我对于程序的调试和检测,让我受益良多。在这两年的时间里,我学会了许多专业的知识,还有老师们的谆谆教诲和同学们的帮助使我不断进步,能够做得更好;我也会不断给自己充电,不断突破,成为更好的自己。

最后向所有关心我、帮助我的老师及同学们表示衷心的感谢!

免费领取项目源码,请关注❤点赞收藏并私信博主,谢谢-

免费领取项目源码,请关注❤点赞收藏并私信博主,谢谢-

免费领取项目源码,请关注❤点赞收藏并私信博主,谢谢-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值