Springboot智慧食堂的设计与实现 毕业设计-附源码78635

摘 要

智慧食堂的研究旨在设计和开发一个基于智能技术的食堂管理系统,以提升食堂的运营效率和用户体验。该系统主要包括商城管理、食堂菜谱、用户催单、取消订单等功能模块,本文设计开发的“Springboot智慧食堂”采用Springboo框架,B/S结构,以MySQL为数据库,并选用IDEA进行系统设计。

关键词:智慧食堂;Java编程语言;MySQL数据库

Abstract

The research on smart canteens aims to design and develop an intelligent technology based canteen management system to improve the operational efficiency and user experience of canteens. The system mainly includes functional modules such as mall management, cafeteria menu, user reminder, and order cancellation. The "Springboot Smart Canteen" designed and developed in this article adopts the Springboot framework, B/S structure, MySQL as the database, and IDEA for system design.

Key words:Smart cafeteria; Java programming language; MySQL database

  1. 绪论
    1. 研究背景与意义

传统食堂在人工操作、订单处理和数据管理方面存在一定的局限性,导致运营效率低下、用户体验不佳和资源浪费等问题。同时,随着智能技术的快速发展和互联网应用的普及,智慧食堂作为一种新兴的管理模式,逐渐受到关注。

首先,传统食堂的订单处理和结算往往需要耗费大量的时间和人力,容易出现排队等待和错误结算等情况。而智慧食堂通过引入智能设备和自助结算系统,能够提高订单处理的速度和准确性,实现快速点餐和便捷结算,从而提升整体运营效率。

其次,传统食堂的菜品选择有限,难以满足个性化的需求。而智慧食堂通过智能点餐和个性化推荐系统,能够根据用户的偏好和营养需求,提供个性化的菜品推荐和健康饮食指导,改善用户的用餐体验。

此外,传统食堂难以实现对食材采购、库存管理和消费行为的全面监控和分析。而智慧食堂通过引入大数据分析和环境监测技术,可以帮助食堂管理者进行供应链优化、资源调配和节能减排,实现食堂的可持续发展。

    1. 研究内容

智慧食堂的开发及实现,所需要的工作内容:

(1)首先是确定选题,确定好所要做的系统,并对系统的背景及现在面临的一些问题等进行系统的初步确认。

(2)系统确认完成后,结合系统开发的需求进行确认系统开发所使用的技术,智慧食堂的开发使用Springboo框架,数据库进行平台的搭建开发,确认好使用的技术进行技术分析,所使用的技术是否可以完成系统的实现。

(3)确定好系统使用的技术,进行在线确认系统所划分的用户角色,并且根据用户角色划分确定所要设计的功能模块,对智慧食堂的设计主要划分别为管理员和用户角色。

(4)系统的功能模块确认完成后进行程序及界面的设计,设计完成后,并且通过测试来判断程序是否完善,对于系统测试,需要不同的用户进行不同的内容编辑及提交,及使用不同的测试方式找出程序中存在的漏洞,并对程序出现的漏洞问题进行在线解决处理,如果测试系统没有任何问题时,可以将系统上传进行正式操作使用。

    1. 本文结构

(1)绪论

从开发系统的背景、意义、以及系统的研究内容,详细描述了系统的在哪些方面能得到应用、然后对本文分结构。

(2)系统开发环境介绍

使用技术简介、数据库概念和特点、编码工具、建模工具等。

(3)系统分析

可行性分析概述、用户需求调研、系统业务流程分析、系统数据组成。

(4)系统设计

系统网络结构设计、系统总体设计、系统功能模块的划分、系统功能模块的需求,数据库设计概述、数据库概述结构设计、数据库逻辑结构设计。

(5)系统的实现

核酸检测模块的实现、预约模块设计、检测结果模块的实现。

(6)系统测试

系统编码实现后,需要进行测试,测试包括黑盒测试和白盒测试,本系统采用黑盒测试,通过输入不同组的测试数据进行测试的功能模块测试。

  1. 系统分析
    1. 可行性分析
      1. 技术可行性分析

技术上使用Springboot+Java+MySQL+Apache的架构实现,从技术本身的角度上讲已经相当成熟,不需要考虑其本身的问题,从服务器流量以及并发的角度上讲,由于系统面向的群体为订餐用户,根据服务器和计算能力的发展现状来看不会成为系统不利因素。再者就是开发人员本身的水平问题,笔者在实习期间已经经历过3~5个项目,也独立完成过项目,因此在技术上还是比较有信心,加上有指导老师的协助指导,相信技术上不存在问题。

      1. 经济可行性分析

本系统功能模块相对来说不是很复杂,整个设计和开发过程投入成本较低,在实际使用中,只需要一台能上网的计算机登录浏览器即可访问。操作简单,业务流程很清晰,且运维也比较轻松,面对这么大的一个市场,如果投入使用能得到大面积覆盖的话,不仅是用户的使用能给系统端带来收益,使用者想要入驻当然也是需要缴纳一定的费用的。总的来说,与前期少量的开销相比,最终产出的收益是相当可观的,也就是说该系统在经济上是完全可行的。

      1. 操作可行性分析

系统开发采用的B/S架构是最常见的Web项目架构,常用于简单Web系统项目的开发。基于B/S架构实现的系统,免去了客户端频繁更新换代的成本和麻烦,只需要一台能上网的计算机登录浏览器即可享受线上订餐的快捷。系统操作便捷,可兼容到不同操作系统和不同浏览器,只需要简单熟悉系统的核心业务逻辑和步骤,任何人都能快速上手。前台与后台的分离使得业务逻辑十分清晰,超强的界面友善性同样给用户体验加分。所以,该系统具备超强的功能逻辑和快速上手的优势,我们可以说该系统在操作上是可行的。

    1. 需求分析
      1. 用户端功能分析

用户注册:用户在想利用该系统统进行食堂菜品了解以及在线订餐的情况下,在非登录的状态是无法得以实现的,需要用户先通过注册来完成。在注册的时候,会对用户登录名是否重复存在来进行检测,在数据库中已存在的情况下,无法完成注册;还有对密码进行约定限制,只能是为数字、字母或这两种方式的组合,否则无法被承认完成注册。

用户登录:用户注册时所生成的信息是提供给用户来用以完成登录的必备信息,可通过录入到所需的登录信息并与登录类型相匹配的情况下,可登录成功。

通知公告查看:用户登录系统后可以进行通知公告的查看。

美食资讯浏览:用户登录系统后可以进行美食资讯的浏览,可以进行点赞+收藏+评论。

食堂菜谱:用户可以浏览食堂菜谱信息。

商城管理:在此模块中可以细分为食堂菜品、用户下单、用户催单、取消订单等。

用户用例图如下所示。

图3-1 用户用例图

      1. 管理员端功能分析

公告管理:管理者将一些需要通知用户的公告通过智慧食堂的后台执行公告发布操作,填写公告的标题、输入公告的内容、上传需要显示在公告详细页里的图片,通过智慧食堂的前台向用户展示。

美食资讯管理:管理者可以对系统资讯内容进行增删改查操作等。

用户管理:管理员对系统用户信息进行管理。

商城管理:对食堂菜谱、分类信息以及订单列表进行管理。

用户催单管理:处理用户的催单信息等。

取消订单管理:处理用户的订单取消信息。

系统管理:对系统轮播图进行管理。

管理员用例图如下所示。

图3-2 管理员用例图

    1. 性能需求分析

基于上面功能性需求,非功能需求也是项目设计中一项必定考虑进去的工作。首先是安全性的需求,其次是界面必须整洁干净等的需求,再次就是可扩展的需求。除此之外,还有性能、可靠性的需求,具体可以表示在如下表所示。

表3-1 系统非功能需求表

安全性

只有在登录的情况下才能进行相应功能的操作,尤其是管理员功能,防止后台管理端被侵入。

可靠性

系统的功能明确,操作一个功能,不会产生额外的功能影响,操作功能的时候,页面也不会造成额外的跳动。

性能

响应时间尽量控制在1s之内

可扩展性

后台采用自顶向下的开发,利于开发与维护。

易用性

在用户使用上,尽可能使用更多的图标进行功能暗示,提供系统的可阅读性和友好性。

可维护性

前台和后台注意按照模块化开发的原则,对于组件和方法的保存和包的建立需要遵照一般开发原则,以利于维护。

    1. 系统业务流程分析

管理员权限下的工作流程主要为:管理员通过系统界面提供登录按钮并点击,转入管理员登录界面,并在界面上填入相应的管理员账户和管理员密码,进入管理员权限下的后台系统,并且在系统左侧导航条设置了相应的操作功能。

用户权限下的工作流程主要为:用户通过系统提供的注册功能,进行身份验证并注册,而后在登录界面进行个人身份验证,并且进入用户的个人后台界面,并进行相应的操作。

智慧食堂的业务流程如下图所示。

图3-3 系统业务流程图

  1. 系统设计
    1. 系统功能结构

智慧食堂主要是为用户所服务的,该系统是因他们而存在,要为他们服务,因此,在系统设计时要将他们的需求放在第一位,并且要充分考虑他们的意见。

智慧食堂的用户角色有两种,分别是管理员和用户。管理员功能包括系统用户、用户催单管理、订单取消管理、系统管理、通知公告管理。用户功能包括注册登录、通知公告、美食资讯、食堂菜谱、商城管理、用户催单、取消订单。

系统功能结构图如下所示。

图4-1 系统功能结构图

    1. 功能模块设计

智慧食堂在前端设计采用多种技术交互使用达到界面简洁大方,使用Java作为系统的编译语言,对于之前的分析所产生的问题进行解决,功能模块设计后进行编码实现具体功能:

登录模块:使用者必须输入正确的账号与密码才能访问系统。

美食资讯模块:包括前台的资讯展示和后台的资讯管理,前台让用户查看资讯,后台对资讯进行增删改查。

公告管理模块:如果登录当前管理员有公告管理的权限即可以进行公告的查询、新增、删除、修改信息的操作,前台用户可以进行公告搜索查看。

食堂菜谱管理模块:管理员可以进行食堂菜谱信息的编辑,享有对此模块的增删改查操作,主要编辑菜品名称、库存、价格、菜品规格等,用户登录系统后可以点击导航栏的食堂菜谱进行菜谱信息的查看了解。

用户催单模块:用户可以进行用户催单信息的查询操作,管理员可以对用户催单信息等数据项进行管理操作。

取消订单模块:用户可以在线进行订单取消操作,管理员对用户提交的取消订单信息进行审核处理。

    1. 数据库设计
      1. 概念模型设计

借助目前的UML建模软件,ER图使其他用户可以快速轻松地了解系统的功能以及他们之间的关系。

系统的主要实体间关系E-R图如下图所示。

图4-2 系统E-R图

      1. 逻辑结构设计

数据库是智慧食堂的数据处理的基础,也是为界面数据的展示与存储的关键。智慧食堂的数据库表如下。

    1. 表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

更新时间:

    1. 表cancel_order (取消订单)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

cancel_order_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

mobile_phone_number

varchar

64

0

Y

N

手机号码

5

order_number

varchar

64

0

N

N

订单编号

6

cancel_time

datetime

19

0

Y

N

取消时间

7

reason_for_cancellation

text

65535

0

Y

N

取消原因

8

examine_state

varchar

16

0

N

N

未审核

审核状态

9

examine_reply

varchar

16

0

Y

N

审核回复

10

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

11

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表canteen_recipe (食堂菜谱)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

canteen_recipe_id

int

10

0

N

Y

食堂菜谱ID

2

dish_specifications

varchar

64

0

Y

N

菜品规格

3

praise_len

int

10

0

N

N

0

点赞数

4

cart_title

varchar

125

0

Y

N

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

5

cart_img

text

65535

0

Y

N

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

6

cart_description

varchar

255

0

Y

N

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

7

cart_price_ago

double

8

2

N

N

0.00

原价:[1]

8

cart_price

double

8

2

N

N

0.00

卖价:[1]

9

cart_inventory

int

10

0

N

N

0

商品库存

10

cart_type

varchar

64

0

N

N

未分类

商品分类:

11

cart_content

longtext

2147483647

0

Y

N

正文:产品的主体内容

12

cart_img_1

text

65535

0

Y

N

主图1:

13

cart_img_2

text

65535

0

Y

N

主图2:

14

cart_img_3

text

65535

0

Y

N

主图3:

15

cart_img_4

text

65535

0

Y

N

主图4:

16

cart_img_5

text

65535

0

Y

N

主图5:

17

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

18

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表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]用于产品规格描述

    1. 表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

添加人

    1. 表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

更新时间:

    1. 表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

折扣

    1. 表user_reminder (用户催单)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

user_reminder_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

mobile_phone_number

varchar

64

0

Y

N

手机号码

5

order_number

varchar

64

0

Y

N

订单编号

6

reminder_time

datetime

19

0

Y

N

催单时间

7

reminder_remarks

text

65535

0

Y

N

催单备注

8

examine_state

varchar

16

0

N

N

未审核

审核状态

9

examine_reply

varchar

16

0

Y

N

审核回复

10

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

11

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

  1. 系统实现
    1. 登录模块的实现

将首页的左边的功能设计为用户登录的位置,所以在进行登录的地方就会显示首页。在登录后就是大众较为熟悉的位置,也就是让用户进行账号以及密码输入的样式。

当用户输入完信息并点击登录按钮时,Struts就会将用户输入的信息传递进表单并装入相应的对象之中,然后再转到相应位置进行校验。若用户名和密码框都是空的,那么系统就会不可将账号密码均设置为空值。

系统的底层设置要求账号密码不可以都是空值,将这些信息传递给相关的类中的对象方法并调用相关的信息,对于用户输入的数据进行检验。若检验结果正确会自动转到系统首页欢迎页面,如果不正确系统就会返回用户登录界面。

用户登录流程图如下所示。

图5-1 用户登录流程

系统登录界面如下图所示。

图5-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.select(map, new HashMap<>()).getResultList();

        }

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

            map.put("email", email);

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

        }

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

            map.put("phone", phone);

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

        }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.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

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

        }

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

        //查询用户审核状态

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

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

            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());

            tokenService.save(accessToken);

            // 返回用户信息

            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, "账号或密码不正确");

        }

}

    1. 用户子系统模块的实现
      1. 用户首页模块

首页主要分别展示各个模块的最新动态,浏览者可以很清楚地看到不同模块的最新更新内容。并且系统首页每个部分可以跳转到相对应的模块,方便浏览者选择感兴趣的地方。

首页载入流程图如下所示。

图5-3 首页载入流程

首页如下图所示。

图5-4 首页界面

      1. 用户注册模块

智慧食堂的注册登录操作,用户都是从同一个注册登录页面进行注册登录,若是还未有系统账号,则进行注册操作;若是已注册账号,则用户在操作时,输入账号、密码,再选择相应的角色,如“管理员”、“用户”等。

用户注册流程图如下所示。

图5-5 用户注册流程

用户注册界面如下图所示。

图5-6 用户注册界面

用户注册关键代码如下所示。

/**

     * 注册

     * @param user

     * @return

     */

    @PostMapping("register")

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

        // 查询用户

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

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

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

        if (list.size()>0){

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

        }

        user.setUserId(null);

        user.setPassword(service.encryption(user.getPassword()));

        service.save(user);

        return success(1);

}

/**

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

     */

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "user_id")

    private Integer userId;

    /**

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

     */

    @Basic

    @Column(name = "state")

    private Integer state;

    /**

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

     */

    @Basic

    @Column(name = "user_group")

    private String userGroup;

    /**

     * 上次登录时间:

     */

    @Basic

    @Column(name = "login_time")

    private Timestamp loginTime;

    /**

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

     */

    @Basic

    @Column(name = "phone")

    private String phone;

    /**

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

     */

    @Basic

    @Column(name = "phone_state")

    private Integer phoneState;

    /**

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

     */

    @Basic

    @Column(name = "username")

    private String username;

    /**

     * 昵称:[0,16]

     */

    @Basic

    @Column(name = "nickname")

    private String nickname;

    /**

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

     */

    @Basic

    @Column(name = "password")

    private String password;

    /**

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

     */

    @Basic

    @Column(name = "email")

    private String email;

    /**

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

     */

    @Basic

    @Column(name = "email_state")

    private Integer emailState;

    /**

     * 头像地址:[0,255]

     */

    @Basic

    @Column(name = "avatar")

    private String avatar;

    /**

     * 创建时间:

     */

    @Basic

    @Column(name = "create_time")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

    private Timestamp createTime;

    @Basic

    @Transient

    private String code;

}

      1. 美食资讯模块

用户执行美食资讯,并可以操作相关内容,例如查看搜索,单击查看;成功展示美食资讯信息,界面还可以进行点赞+收藏。

美食资讯流程如下图所示。

图5-7 美食资讯流程

美食资讯界面如下图所示。

图5-8 美食资讯界面

美食资讯关键代码如下所示。

 @RequestMapping(value = {"/sum_group", "/sum"})

    public Map<String, Object> sum(HttpServletRequest request) {

        Query count = service.sum(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

      1. 食堂菜谱模块

用户通过登录系统后点击“食堂菜谱”,便可以查看系统发布的食堂菜谱信息。

食堂菜谱流程如下图所示。

图5-9 食堂菜谱流程

食堂菜谱界面如下图所示。

图5-10 食堂菜谱界面

食堂菜谱关键代码如下所示。

@RequestMapping("/get_list")

    public Map<String, Object> getList(HttpServletRequest request) {

        Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));

        return success(map);

}

    1. 管理员子系统模块的实现
      1. 用户管理模块

用户信息管理与账号管理相比更侧重对个人信息的管理,如电话,性别等,管理员可以对此部分信息进行增删改查,相应的会改变数据库存储的数据。

用户管理界面如下图所示。

图5-11 用户管理界面

登录密码修改界面如下图所示。

图5-12 登录密码修改界面

      1. 食堂菜谱管理模块

管理员执行食堂菜谱管理,并可以操作相关内容,例如添加,查看,编辑和删除。通过单击“添加食堂菜谱”,可以通过食堂菜谱添加界面添加详细信息并添加食堂菜谱注释。单击查看字段级别链接以查看有关所选字段级别的信息。然后单击“提交”跳转重返到添加页面。添加成功后的信息会载入到食堂菜谱查询列表中,管理员可进行编辑以及修改。

食堂菜谱管理流程如下图所示。

图5-13 食堂菜谱管理流程

食堂菜谱添加界面如下图所示。

图5-14 食堂菜谱添加界面

食堂菜谱管理界面如下图所示。

图5-15 食堂菜谱管理界面

食堂菜谱管理关键代码如下所示。

@RequestMapping(value = "/del")

    @Transactional

    public Map<String, Object> del(HttpServletRequest request) {

        service.delete(service.readQuery(request), service.readConfig(request));

        return success(1);

}

    @Transactional

    public void delete(Map<String,String> query,Map<String,String> config){

        StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");

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

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

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

        query1.executeUpdate();

    }

      1. 用户催单管理模块

管理员在“用户催单”模块中可以查看催单信息,对催单信息进行处理。

用户催单管理界面如下图所示。

图5-16 用户催单管理界面

用户催单管理关键代码如下所示。

  @PostMapping("/add")

    @Transactional

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

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

}

    public Map<String,Object> readBody(BufferedReader reader){

        BufferedReader br = null;

        StringBuilder sb = new StringBuilder("");

        try{

            br = reader;

            String str;

            while ((str = br.readLine()) != null){

                sb.append(str);

            }

            br.close();

            String json = sb.toString();

            return JSONObject.parseObject(json, Map.class);

        }catch (IOException e){

            e.printStackTrace();

        }finally{

            if (null != br){

                try{

                    br.close();

                }catch (IOException e){

                    e.printStackTrace();

                }

            }

        }

        return null;

}

    public void insert(Map<String,Object> body){

        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

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

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

        }

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

        sql.append(") VALUES (");

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

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {

                sql.append(entry.getValue()).append(",");

            }

        }

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

        sql.append(")");

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

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

        query.executeUpdate();

    }

  1. 系统测试
    1. 测试过程

对每个用源码进行的单元检测,以验证每个单元能否正常地执行预先设定的函数。在进行单元代码编写的过程中,采用了详细的编程指导,并通过关键的数据界面和路线的检测来检测模块中的缺陷。该试验使用了每个由源码所完成的程序,并按照程序的内部构造来进行测试,以检验各个程序的功能。

集成测试是对单位试验的延伸。装配好的试验组件,并对相关的设计进行软件体系结构的检测。其具体实施方法为:将两个以上的单元模块合并为一个部件进行试验,并进行界面的调试。针对具体的试验,采用了不同的模块整合方法。而将模组转换为体系的方式有两种:一次整合与一次繁殖整合。

    1. 测试用例 

登录测试用例如下表所示。

表6-1 登录测试用例

操作描述

数据

期望结果

实际结果

测试状态

选择管理员登录,输入用户姓名,按“登陆”按钮。

用户姓名:admin,

密码为空

显示警告信息“请填写密码!”

显示警告信息“请填写密码!”

与期望结果相同

选择管理员登录,输入密码,按“登陆”按钮。

用户姓名为空,密码:123456

显示警告信息“请填写用户名”

显示警告信息“请填写用户名”

与期望结果相同

选择管理员登录,输入用户姓名和密码,按“登陆”按钮。

用户姓名:1234,

密  码:1234

显示警告信息“该用户名不存在!”

显示警告信息“该用户名不存在”

与期望结果相同

选择管理员登录,输入用户姓名和密码,按“登陆”按钮。

用户名:admin,密  码:admin

正确登入到后台页面

正确登入到后台页面

与期望结果相同

个人信息管理测试用例如下表所示。

表6-2 个人信息管理测试用例

操作描述

数据

期望结果

实际结果

测试状态

选择个人信息,清空用户名,按“保存”按钮。

用户姓名为空

显示警告信息“用户名不能为空!”

显示警告信息“用户名不能为空!

与期望结果相同

选择个人信息,清空邮箱,按“保存”按钮。

用户邮箱为空

显示警告信息“邮箱不能为空!”

显示警告信息“邮箱不能为空!”

与期望结果相同

选择个人信息,清空联系方式,按“保存”按钮。

用户联系方式为空

显示警告信息“联系方式不能为空!”

显示警告信息“联系方式是不能为空!”

与期望结果相同

选择个人信息,按“上传头像”按钮,上传头像文件大小超过1Mb。

头像文件大小超过1Mb

显示警告信息“图片大小不能超过1Mb!”

显示警告信息“图片大小不能超过1Mb!”

与期望结果相同

公告管理测试用例如下表所示。

表6-3 公告管理测试用例

操作描述

数据

期望结果

实际结果

测试状态

用户点击“公告发布”,填写相关数据后点击“确定”。

在必填项输入测试数据

提示“发布成功”

提示“发布成功”

与期望结果相同

用户选择公告点击“修改”后点击“确定”。

在必填项修改测试数据

提示“修改成功”

提示“修改成功”

与期望结果相同

美食资讯管理测试用例如下表所示。

表6-4 美食资讯管理测试用例

操作描述

数据

期望结果

实际结果

测试状态

用户点击“美食资讯发布”,填写相关数据后点击“确定”。

在必填项输入测试数据

提示“发布成功”

提示“发布成功”

与期望结果相同

用户选择美食资讯点击“修改”后点击“确定”。

在必填项修改测试数据

提示“修改成功”

提示“修改成功”

与期望结果相同

食堂菜谱管理测试用例如下表所示。

表6-5 食堂菜谱管理测试用例

操作描述

数据

期望结果

实际结果

测试状态

用户点击“食堂菜谱发布”,填写相关数据后点击“确定”。

在必填项输入测试数据

提示“发布成功”

提示“发布成功”

与期望结果相同

用户选择食堂菜谱点击“修改”后点击“确定”。

在必填项修改测试数据

提示“修改成功”

提示“修改成功”

与期望结果相同

    1. 测试结果

基于Springboot的智慧食堂的测试已经完成,没有出现错误,能够成功运行。因为系统比较简单,一些功能还急需完善,但已经能够满足用户和管理者的需求,给予用户足够的帮助。

经过测试,得到测试结果如下表所示。

表5-1 测试结果

测试项目

测试结果

登录

成功

注册

成功

用户管理

成功

公告管理

成功

美食资讯管理

成功

食堂菜谱管理

成功

  1. 结论

通过智慧食堂的开发,本人巩固了之前学过的知识,如今将平时所学到的知识融合在设计中,在设计过程中,做了很多的准备,首先,在数据库系统的设计过程中,尤其是在数据库的工作原理、工作特点,对其深刻的讨论,与此同时,对于小型站点来说,最好服务器的选择,其次,利用所学的知识点分析所做的系统,并在此基础上设计。

目前本系统已经上线,正在试运行阶段,用户反馈良好,基本完成用户所需,试运行过程中没有出现阻断性问题,有一些不足和小问题也及时予以修正,系统上线后,为了保证数据的安全性,对系统进行了备份操作,系统备份是每两个月备份一次,数据库备份为每周备份一次,系统部署在租赁的云平台服务器中。

本次系统上线成功后,得到了用户的高度认可,但是在功能上和性能上还需做进一步的研究处理,使其有更高的性能和更好的用户体验。

系统在以后的升级过程中,需要解决一系列用户所提出的问题,例如打印过程中如何避免浏览器的兼容性问题,大量用户访问时,如何保持较高的响应速度,在系统今后的升级过程中将着重解决这些安全性问题。

参考文献

[1]蔡萌萌,何瑞瑞,孙亚男等. 智慧食堂餐饮平台设计与实现 [J]. 科技与创新, 2023, (20): 138-140.

[2]高小玲. 数字媒体交互设计对生活中用户提升体验的探究——以智慧食堂为例 [J]. 明日风尚, 2023, (19): 112-114.

[3]胡翌,李茂全. 智慧食堂平台的设计思路和关键技术 [J]. 中国机关后勤, 2023, (09): 54-55.

[4]潘焜,朱晓文,李广兴等. 基于物联网技术的智慧食堂管理系统设计与实现 [J]. 科技资讯, 2023, 21 (11): 14-17.

[5]王志亮,纪松波. 基于SpringBoot的Web前端与数据库的接口设计 [J]. 工业控制计算机, 2023, 36 (03): 51-53.

[6]银莉,杜啸楠. 基于SpringBoot和Vue的社区服务平台设计与实现 [J]. 电子技术, 2022, 51 (12): 182-183.

[7]Yang Y . Design and Implementation of Student Information Management System Based on Springboot [J]. Advances in Computer, Signals and Systems, 2022, 6 (6):

[8]童立. 基于图像处理的智慧食堂结算系统设计[D]. 华中科技大学, 2022. [9]霍福华,韩慧. 基于SpringBoot微服务架构下前后端分离的MVVM模型 [J]. 电子技术与软件工程, 2022, (01): 73-76.

[10]Cheng F . Talent Recruitment Management System for Small and Micro Enterprises Based on Springboot Framework [J]. Advances in Educational Technology and Psychology, 2021, 5 (2):

[11]卢挺海. Z大学食堂管理改革存在的问题与对策研究[D]. 西南大学, 2020.

致谢

这篇文章的完成经历了多个日日夜夜的努力,终于在今天得以完成。这篇文章的创作过程实为不易,但在老师和同学的辛勤帮助下顺利渡过。让我在设计过程中举步维艰时,非常感谢我的导师不耐其烦的帮助我解决问题,给予了我许多指导意见。也感谢所有为我授业解惑的老师!

另外,本文的完成也参考借鉴了许多国内外在Java技术上的著作,如果没有著作原作的辛勤付出和科研成果,我也很难完成本论文。感谢在本论文中关联到的学者们!也感谢Google等公司,感谢他们强大的搜索引擎,让我的资料查阅省事简单。

感谢之余也还有几句话要说,虽大学学习四年,怎奈何本人才疏学浅,本文的完成已为尽力,但文中不免有些不当和错误之处,诚挚真切的请求各位老师对本文的批评改正,感谢百忙之中费心审阅我论文的老师。

点赞+收藏+关注 → 私信领取本源代码、数据库

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值