【Java毕业设计】基于JavaWeb的在线美食菜谱系统

18 篇文章 0 订阅


网关源码

摘 要

目前科技发展迅速,人们的生活也走向更全面的电子信息时代,线上美食分享平台代替传统纸质记录,节省时间和人力,使数据更准确,在经过浏览大量网站调研后,进行整体的功能分析和需求细化,完善对该系统的构思,预计此系统的购买和使用量相当可观,市场前景非常广阔。人们对服务的快捷性、便利性标准也越来越高,这是一个基于SpringBoot+vue技术的美食分享平台,能够为广大美食爱好者提供一个方便、日常、便捷的美食交流,促进美食文化源远流长。
本系统正是为了实现美食分享而设计,使用SpringBoot框架来整合MyBatis框架,数据库使用MySQL进行数据的相关操作,使用HTML技术实现页面动态跳转。美食分享平台有二个模块构成:用户,管理员。用户可以进行登录,注册,在此平台可以进行菜谱查询,菜谱浏览,收藏,笔记评论,分享菜品以及添加笔记等。管理员可以对有问题的帐号进行相应处理,可以进行用户信息的管理,例如增加用户,删除用户,修改用户信息,可以进行菜谱信息的管理,例如菜谱信息的增加,信息的删除及修改等。可以对笔记信息增加、删除、修改等,并且可以审核笔记信息,若不合格予以驳回。并且管理员可以进行密码的修改的操作。
关键词:线上美食分享平台;Java;SpringBoot框架;MySQL

ABSTRACT

In the current era of rapid technological development, people’s lives are moving towards a more comprehensive electronic information age. Online food sharing platforms are replacing traditional paper-based records, saving time and manpower, and making data more accurate. After extensive website research, conducting an overall functional analysis and detailed requirement refinement, we have improved our concept for this system. It is expected that this system will have a considerable purchase and usage volume, and the market prospects are very broad. People’s standards for the speed and convenience of services are also increasing. This is a food sharing platform based on SpringBoot + Vue technology, providing a convenient and efficient way for food enthusiasts to exchange culinary experiences, promoting the long-standing food culture.
This system is designed to facilitate food sharing, using the SpringBoot framework to integrate the MyBatis framework, and utilizing MySQL for database-related operations. HTML technology is used to implement dynamic page transitions. The food sharing platform consists of two modules: users and administrators. Users can log in, register, and on this platform, they can search for recipes, browse recipes, bookmark them, comment on and share dishes, as well as add notes. Administrators can deal with problematic accounts, manage user information (add, delete, modify users), manage recipe information (add, delete, modify recipe details), and handle note information (add, delete, modify notes), including reviewing and rejecting notes if they do not meet the standards. Administrators can also perform password modifications.
Keywords: Online food sharing platform, Java, SpringBoot framework, MySQL.

目 录

1 概述 1
1.1 研究背景及意义 1
1.2 国内外研究现状 2
1.3 拟研究内容 2
1.4 系统开发技术 2
1.4.1 Java编程语言 3
1.4.2 SSM框架 3
1.4.3 MySQL数据库 3
1.4.4 B/S结构 3
1.4.5 MVC模式 4
2 系统需求分析 5
2.1 可行性分析 5
2.2 功能需求分析 6
3 系统设计 8
3.1 功能模块设计 8
3.2 系统流程设计 9
3.2.1 登录流程 9
3.2.2 添加信息流程 9
3.2.3 收藏信息流程 10
3.3 数据库设计 11
3.3.1 数据库系统 11
3.3.2 数据库概念设计 11
3.3.3 数据库逻辑设计 13
4 系统实现 22
4.1 系统前台功能实现 22
4.2 后台用户模块实现 29
5 系统测试 37

5.1 测试目的 37
5.2 测试用例 37
6 总结 39
参考文献 40
致 谢 42

1 概述

1.1 研究背景及意义

21世纪以来,随着互联网和移动技术的迅猛发展,网络平台已成为人们获取信息和日常服务的重要途径。在线服务,特别是在线美食菜谱系统,已成为日常生活中不可或缺的一部分。在这个背景下,设计和实现一个基于JavaWeb的在线美食菜谱系统具有重要意义。
首先,随着人们生活节奏的加快,对食品的需求也在变得多样化。人们不仅需要了解各种美食的做法,还希望能够方便地获取相关信息。因此,一个能提供丰富、详尽菜谱信息的系统显得尤为重要。本系统的开发正是为了满足这一市场需求,为用户提供一个易于访问、内容丰富的在线菜谱平台。
其次,该系统不仅服务于普通用户,还可以帮助餐饮业者了解当前美食趋势,从而提供更符合市场需求的菜品。系统中的菜谱信息可以由用户评价和推荐,进一步增加了内容的互动性和实用性。
此外,本系统的设计注重用户体验,界面简洁友好,方便用户快速找到所需菜谱。通过有效的信息管理,系统可以实现菜谱信息的快速更新和准确展示,确保用户能够及时获取最新、最流行的美食信息。
总的来说,这个在线美食菜谱系统的设计与实现不仅满足了时代的需求,促进了美食文化的交流和传播,还提供了一个高效、便捷的平台,使人们在繁忙的生活中也能轻松享受烹饪的乐趣。本系统的主要优势包括:
(1)提供丰富、多样化的菜谱信息,满足不同用户的需求。
(2)界面友好,易于使用,便于用户快速找到所需内容。
(3)系统更新迅速,能够及时反映美食趋势和用户喜好,提高用户满意度。

1.2 国内外研究现状

随着人们对美食文化的兴趣日益增长,以及互联网技术的快速发展,基于JavaWeb的在线美食菜谱系统作为一种新兴的服务模式,已经受到了广泛的关注。这类系统指的是,用户通过互联网平台访问和分享各种美食菜谱,并能够实现在线交流、评价等功能的服务平台。在线美食菜谱系统通过在线平台和现代网页技术实现对美食菜谱的集中展示和共享。
在国外,一些发达国家对于在线美食菜谱系统的研究较为深入。例如,在美国和欧洲,平台如Allrecipes、Epicurious等已经提供丰富的在线菜谱资源,并通过用户社区互动增强用户体验。这些平台不仅提供标准菜谱,还包括用户上传的个性化食谱和评价。
在国内,基于JavaWeb的在线美食菜谱系统的研究起步较晚,但近年来随着互联网技术的普及和饮食文化的多样化,已经得到了快速发展。例如,平台如下厨房、美食杰等已经成为了美食爱好者常用的菜谱分享平台。这些平台不仅提供了大量的菜谱资源,还通过用户评论、图片分享等功能,丰富了用户的互动体验。

1.3 拟研究内容

该系统应能基本完成美食在线分享的基本要求。管理员可以对整个系统进行管理,用户可以实现分享、评论等基本功能。
使用Java语言和SpringBoot框架进行开发设计,具体研究内容如下:
用户登录、注册等基础功能。用户可以对菜谱进行浏览、查询以及分享。同时,用户也可以收藏对应的菜谱信息。用户也可以添加笔记,评论。
管理员登录系统,便可对个人信息进行修改,对用户管理,比如对用户进行修改、添加、删除等功能,并且可以帮助用户修改密码。管理员可以对菜谱信息进行管理,添加、删除与修改菜谱信息。同时,管理员也可以对笔记信息进行管理,添加删除修改笔记,并且审查驳回一些不合理的笔记。

1.4 系统开发技术

1.4.1 Java编程语言

Java语言成为现今主流编程语言之一,是基于其独特特点和众多优势。首先,Java语言编写的程序,在不同操作系统、不同浏览器下使用相同的字符集和语法,可以大大提高代码可读性和可维护性。其次,Java有完善的面向对象编程规范和语法。此外,Java还提供了丰富的类库。另外,Java语言对于开发工具要求不高,有专业的编程工具IntelliJ IDEA会更顺利编程,但是,没有专业的编程软件,用记事本也能进行编辑。

1.4.2 SpringBoot框架

Spring Boot是一个用于简化Spring应用程序开发的开源Java框架。它构建在Spring框架的基础之上,旨在帮助开发人员更快速、更轻松地创建独立的、基于Spring的应用程序。Spring Boot通过提供默认配置和自动化配置来减少了开发者的配置工作。它可以根据项目的依赖自动配置应用程序的各种组件,减少了繁琐的XML配置文件和注解。Spring Boot内置了多种常见的Web服务器(如Tomcat、Jetty和Undertow),使得创建独立的Web应用程序非常容易,开发者无需手动配置服务器。Spring Boot引入了一个称为"Starter"的概念,这是一组预配置的依赖项,可以根据应用程序的需求进行选择。这使得添加常用库和框架变得非常容易。

1.4.3 MySQL数据库

本系统采用的数据库为MySQL。MySQL是由MySQL AB公司研发的一款关系型数据库管理系统[4]。MySQL源码免费开放,所以使用成本特别低,在易操作性、性能、可靠性等方面,MySQL数据库与其他数据库相比也毫不落下风[5]。
经第三方权威机构评测,在性能上,只有Oracle数据库能与MySQL相比;在可靠性与安全性上,与MySQL服务器建立连接需要通过身份认证,确保外部访问者拥有操作数据库的权限,并支持通过日志文件对数据进行恢复[6]。
综上所述MySQL数据库不仅安全性高、占用内存小,而且运行速度十分迅速,且使用不收费,是作为中小型网站系统存储数据的最佳选择[7]。

1.4.4 B/S结构

B/S结构目前广泛应用于绝大部分系统搭建中,这种结构摒弃C/S结构客户端服务端不分离的缺点,具有更多的优势:
(1)跨平台性:B/S的标准由标准化组织确立,适用于绝大多数的系统搭建,通用于应用之间。
(2)低维护成本:系统升级只需将服务端应用升级便可完成系统升级,此方式降低系统升级的难度和成本[8]。

1.4.5 MVC模式

MVC是一种常用的软件架构模式。MVC 模式将传统的输入、处理和输出分离[9]。负责网页设计的人员只需要专注构建前端 JSP 页面,负责业务逻辑设 计的后台开发人员进行模型层设计,负责数据库设计的数据库工程师进行数据层设计[10]。MVC模式的优势在于它的分离关注点原则,使得代码更易于管理、扩展还有利于组件重用[11]。通过清晰的分工和交互,MVC模式提供了更高的灵活性和可维护性,使得团队成员可以独立开发和测试不同的组件。
需要注意的是,MVC模式并不是一种具体的技术或框架,而是一种通用的设计模式,可以用于各种编程语言和平台。许多Web框架(如Ruby on Rails、ASP.NET MVC、Django等)和应用程序开发工具都采用了MVC模式来支持开发过程。

2 系统需求分析

需求分析是开发新系统之前的关键准备工作,其主要任务是理解和了解用户的需求。在当今社会,互联网的普及使得基于网络的服务平台变得更加重要,这也包括在线美食菜谱系统。在线美食菜谱系统也面临一些挑战,如用户互动、菜谱管理、个性化推荐等,因此需要一个有效的系统来解决这些问题。这个系统可以有效地管理用户数据和菜谱信息,因此数据需要被组织成一种有序的格式,以便在计算机内存中进行高效处理。数据库管理系统在此中扮演了重要角色,用于保存、修改、添加索引数据,并设置数据库,以确保系统数据的有效管理。在数据库系统设计中,MySQL作为一个性能良好、被广泛使用的数据库管理系统,非常适合用于实现数据的集中管理。因此,在设计在线美食菜谱系统时,选择MySQL作为数据库管理系统将是一个明智的选择。这不仅有助于保证系统的稳定性,还能提高数据管理的效率和效果。

2.1 可行性分析

以下是从经济、技术和管理方面对本系统做出的可行性分析:
(1) 经济可行性:本在线美食菜谱系统采用Java语言编写,结合B/S架构和Mysql数据库进行数据管理,这种配置对硬件要求较低,因此可以在多种低配置硬件上运行,有效降低硬件成本和维护成本。系统开发中所用的软件主要为免费或开源软件,减少了成本投入同时避免了潜在的法律风险。此外,基于JavaWeb的开发周期相对较短,人力和财力成本控制在合理范围内,综合考虑,该系统在经济上具有较高的可行性。
(2) 技术可行性:该在线美食菜谱系统基于B/S架构和MVC模型设计,通过分层分包的方法,实现功能模块和业务逻辑的分离。这种设计使代码结构清晰,易于维护和扩展。此外,该架构有助于减少代码间的耦合,降低后期维护成本,并且容易进行功能的升级和重构,从技术角度看,该系统的开发和实施是可行的。
(3) 操作可行性:用户可通过浏览器直接访问在线美食菜谱系统,无需下载安装任何客户端软件,使得访问变得更为便捷。系统界面设计简洁直观,操作流程简单明了,用户可以轻松地浏览、搜索和学习各种菜谱。这种用户友好的设计降低了用户的学习成本,提高了系统的可用性。因此,从操作角度来看,该系统具有很高的可行性。

2.2 任务概述

该系统应能基本完成美食在线分享的基本要求。管理员可以对整个系统进行管理,用户可以实现分享、评论等基本功能。
该美食在线分享平台具有以下基本功能:
1、前台功能
(1)用户注册
(2)用户登录
(3)菜谱的查询、浏览、分享
(4)收藏
(5)笔记添加、评论
2、后台功能
(1)管理员登录
(2)用户管理(添加、删除、修改用户信息、修改密码)
(3)菜谱信息管理(添加、删除、修改菜谱信息)
(4)笔记信息管理(添加、删除、修改笔记、审查驳回)

2.3 系统用例图

在这里插入图片描述

图 2.1 系统用例图

2.4 功能性需求

对功能需求的定义,一个软件系统或组件的功能,也是网页所需提供的功能和服务。本系统的功能需求按模块进行分析,主要由前台用户模块,后台管理员两大模块。
本系统的用户可分为用户和管理员二个用户角色组成。管理员可以管理系统内所有功能,主要有系统首页、信息展示、用户信息管理、菜谱信息管理、笔记信息管理、美食信息管理、修改密码、推出登录管理、系统管理等功能;用户登录系统可以对个人信息、收藏菜谱管理、选择菜谱管理、等功能进行操作。
2.5 非功能性需求
(1)健壮性:具有较高的容错能力和恢复能力。
(2)正确性:按照需求正确执行任务,完成各个模块的相应要求。
(4)易用性:系统研制的过程中所有的语言简练、通俗易懂并且前后一致,语句无歧义。图标提示清晰,位置恰当,易于理解。操作简单,不用进行专门学习才可使用。
(5)安全性:为防止软件受到意外或蓄意存取、使用、修改、毁坏、或泄密,该系统上所有的数据应集中存放于总部的数据库服务器,当用户超过一小时未进行操作时,系统将自动退出。
(6)可扩展性:能方便的进行二次开发,满足对功能的需求。

3 系统设计

3.1 系统总体功能设计

考虑到本系统主要是的使用者是年轻消费群体,考虑到科技发展,美食在线分享成为潮流等因素,本网站设计了如下功能。
在这里插入图片描述

图3.1 前台系统模块设计图
在这里插入图片描述

图3.2后台系统模块设计图

3.1.1 前台功能设计

前台主要包括以下功能:
用户登录:用户登录本系统,用户名和密码匹配成功,登录账号成功,没有账号则需要注册新账号。
系统界面:首页展示本系统中的菜谱信息,用户可以根据需求寻找菜谱,可以找到满意的菜谱,觉得满意或喜欢的菜品可以进行收藏并且可以记笔记,评价菜品的好坏,系统首页还可以进入后台管理自己的信息以及退出系统。

3.1.2 后台功能设计

后台主要包括以下功能:
管理员与用户的后台管理系统是不同的,管理员包括用户后台系统的所有权限,还包括用户信息管理模块。
管理员后台功能:系统首页;信息展示包括用户信息管理、菜谱信息管理、笔记信息管理;修改个人信息;退出系统。
用户后台功能:系统首页;信息展示包括菜谱信息管理、笔记信息管理;修改个人信息;退出系统。

3.2 系统数据库设计

3.2.1 概念结构设计

现实世界中客观存在并且可以相互区分的事物称为实体,此系统中的实体主要包括管理员、菜谱大类、收藏信息、笔记评论、菜谱信息、笔记信息、菜谱小类和用户信息等,具体描述如下:
(1)管理员实体有3个属性,用E-R图表示如下:
在这里插入图片描述

图 3.3 管理员实体及属性
(2)菜谱大类实体有3个属性,用E-R图表示如下:
在这里插入图片描述

图 3.4 菜谱大类实体及属性
(3)笔记评论实体有5个属性,用E-R图表示如下:
在这里插入图片描述

图 3.5 笔记评论实体及属性
(4)收藏信息实体有7个属性,用E-R图表示如下:
在这里插入图片描述

图 3.6 收藏信息实体及属性
(5)菜谱信息实体有10个属性,用E-R图表示如下:
在这里插入图片描述

图 3.7 菜谱信息实体及属性
(6)笔记信息实体有6个属性,用E-R图表示如下:
在这里插入图片描述

图 3.7 笔记信息实体及属性
(7)菜谱小类实体有10个属性,用E-R图表示如下:
在这里插入图片描述

图 3.9 菜谱小类实体及属性
(8)用户信息实体有10个属性,用E-R图表示如下:
在这里插入图片描述

图 3.10 用户信息实体及属性

3.2.2 数据库逻辑结构设计

数据库的逻辑结构设计主要分为两步:第一步将概念设计模型得出的E-R图进行转换成关系模型,然后对转化成的关系模型进行优化。本系统中包含了以上几个E-R模型向关系模型的转换:管理员表、菜谱大类表、收藏信息表、笔记评论表、菜谱信息表、笔记信息表、菜谱小类表和用户信息表。

  1. 管理员表
    管理员表里面存储了管理员的相关信息,如表3.1所示:
    表 3.1 管理员表
    序号 字段 说明 数据类型 长度 自增 主键 允许空 默认值
    1 id ID bigint √ × × NULL
    2 name 姓名 varchar 255 × × √ NULL
    3 password 密码 varchar 255 × × √ NULL
  2. 菜谱大类表
    菜谱大类表里面存储了菜谱大类的相关信息,如表3.2所示:
    表 3.2 菜谱大类表
    序号 字段 说明 数据类型 长度 自增 主键 允许空 默认值
    1 id ID bigint √ × × NULL
    2 name 名称 varchar 255 × × √ NULL
    3 descroiption 描述 varchar 255 × × √ NULL
  3. 收藏信息表
    收藏信息表里面存储了收藏的相关信息,如表3.3所示:
    表 3.3 收藏信息表
    序号 字段 说明 数据类型 长度 自增 主键 允许空 默认值
    1 id ID bigint √ × × NULL
    2 name 名称 varchar 255 × × √ NULL
    3 time 时间 varchar 255 × × √ NULL
    4 foodsId 菜谱id bigint × × √ NULL
    5 notesId 笔记id bigint × × √ NULL
    6 userId 用户id bigint × × √ NULL
    7 level 用户登记 int × × √ NULL
  4. 笔记评论表
    笔记评论表里面存储了笔记评论的相关信息,如表3.4所示:
    表 3.4 笔记评论表
    序号 字段 说明 数据类型 长度 自增 主键 允许空 默认值
    1 id ID bigint √ × × NULL
    2 content 评论内容 varchar 255 × × √ NULL
    3 time 评论时间 varchar 255 × × √ NULL
    4 name 评论人 varchar 255 × × √ NULL
    5 foreignId 关联的模块id bigint × × √ NULL
  5. 菜谱信息表
    菜谱信息表里面存储了菜谱的相关信息,如表3.5所示:
    表 3.5 菜谱信息表
    序号 字段 说明 数据类型 长度 自增 主键 允许空 默认值
    1 id ID bigint √ × × NULL
    2 name 名称 varchar 255 × × √ NULL
    3 description 描述 varchar 255 × × √ NULL
    4 tips 菜谱标签 varchar 255 × × √ NULL
    5 subId 菜谱小类id bigint × × √ NULL
    6 fileId 文件id bigint × × √ NULL
    7 fileName 文件名 varchar 255 × × √ NULL
    8 userName 上传人 varchar 255 × × √ NULL
    9 level 用户等级 int × × √ NULL
    10 uploadUserId 用户id bigint × × √ NULL
  6. 笔记信息表
    笔记信息表里面存储了笔记相关信息,如表3.6所示:
    表 3.6 笔记信息表
    序号 字段 说明 数据类型 长度 自增 主键 允许空 默认值
    1 id ID bigint √ × × NULL
    2 name 名称 varchar 255 × × √ NULL
    3 time 上传时间 varchar 255 × × √ NULL
    4 userId 用户id bigint × × √ NULL
    5 status 审核状态 int × × √ 0
  7. 菜谱小类表
    菜谱小类表里面存储了菜谱小类的相关信息,如表3.7所示:
    表 3.7 菜谱小类表
    序号 字段 说明 数据类型 长度 自增 主键 允许空 默认值
    1 id ID bigint √ × × NULL
    2 name 名称 varchar 255 × × √ NULL
    3 description 描述 varchar 255 × × √ NULL
    4 classifyId 菜谱大类id bigint × × √ NULL
  8. 用户信息表
    用户信息表里面存储了用户的相关信息,如表3.8所示:
    表 3.8 用户信息表
    序号 字段 说明 数据类型 长度 自增 主键 允许空 默认值
    1 id ID bigint √ × × NULL
    2 name 姓名 varchar 255 × × √ NULL
    3 password 密码 varchar 255 × × √ NULL
    4 nickName 昵称 varchar 255 × × √ NULL
    5 sex 性别 varchar 255 × × √ NULL
    6 age 年龄 int × × √ NULL
    7 birthday 生日 varchar 255 × × √ NULL
    8 phone 手机号 varchar 255 × × √ NULL
    9 address 地址 varchar 255 × × √ NULL
    10 email 邮箱 varchar 255 × × √ NULL
    11 cardId 身份证 varchar 255 × × √ NULL
    12 level 权限等级 int × × × 2

4 系统实现

4.1 前台功能模块

4.1.1 登录

用户登录时通过vue页面的Ajax请求,发送post请求到/login,在Accountcontroller里面首先设置请求地址为/login,然后把前台输入的数据获取。
如果是管理员进行登录,则调用admininfoservice的login方法,首先要判断管理员输入的名字和密码是否为空,如果为空则返回错误。不为空的情况下,获取前台输入的用户名和数据。然后和数据库进行比对,比对成功则可进入该平台。如果是用户进行登录,则调用userinfoservice的login方法,首先要判断用户输入的名字和密码是否为空,如果为空则返回错误。不为空的情况下,获取前台输入的用户名和数据。然后和数据库进行比对,比对成功则可进入该平台。
在这里插入图片描述

图4.1.1 登录界面

关键代码:
@PostMapping(“/login”)
public Result login(@RequestBody Account account, HttpServletRequest request) {
if (StrUtil.isBlank(account.getName()) || StrUtil.isBlank(account.getPassword()) || account.getLevel() == null) {
throw new CustomException(ResultCode.PARAM_LOST_ERROR);
}
Integer level = account.getLevel();
Account login = new Account();
if (1 == level) {
login = adminInfoService.login(account.getName(), account.getPassword());
}
if (2 == level) {
login = userInfoService.login(account.getName(), account.getPassword());
}

    request.getSession().setAttribute("user", login);
    return Result.success(login);
}

4.1.2 注册

用户首次登陆时需要进行注册,在前台输入注册相关信息,通过axios发送post请求到/register,调用后端add方法进行后端注册操作。首先要判断输入的用户名是否重名,如果重复,则返回用户名已存在。然后判断密码 是否为空,如果不为空,则调用insetselective语句将用户信息存入数据库中,并且返回登陆界面。
在这里插入图片描述

图4.1.2 注册界面
关键代码:
@PostMapping(“/register”)
public Result register(@RequestBody Account account) {
Integer level = account.getLevel();
Account login = new Account();
if (1 == level) {
AdminInfo info = new AdminInfo();
BeanUtils.copyProperties(account, info);
login = adminInfoService.add(info);
}
if (2 == level) {
UserInfo info = new UserInfo();
BeanUtils.copyProperties(account, info);
login = userInfoService.add(info);
}

    return Result.success(login);

}

4.1.3 菜谱查询

菜谱查询分为菜谱大类与小类两种查询条件,通过不同菜谱的name属性,确定其所属类别,当点击此类别时,首先确定菜谱小类的name属性,其次调用List findByClassifyId(Long classifyId)方法,获取所属的菜谱大类,在菜谱大类中,通过name属性筛选出符合条件的菜谱,并显示在界面上。
在这里插入图片描述

图4.1.3 菜谱查询界面
关键代码:
public PageInfo findPage(String name, Integer pageNum, Integer pageSize, HttpServletRequest request) {
PageHelper.startPage(pageNum, pageSize);
List all = findAllPage(request, name);
return PageInfo.of(all);
}
public List findAllPage(HttpServletRequest request, String name) {
return subClassifyInfoDao.findByName(name);
}
public List findAll() {
List all = classifyInfoDao.findByName(“all”);
for (ClassifyInfoVo classifyInfoVo : all) {
List subList = subClassifyInfoDao.findByClassifyId(classifyInfoVo.getId());
classifyInfoVo.setSubList(subList);
}
return all;
}

4.1.4 菜谱浏览

用户点击头部标题栏中的首页,发送post请求调用后端方法,通过id和name属性,获取到所有菜谱信息,并在前端展示出来。
在这里插入图片描述

图4.1.4 菜谱浏览界面
在这里插入图片描述

图4.1.5 菜谱浏览界面
关键代码:
@Repository
public interface FoodsMenuInfoDao extends Mapper {
List findByNameAndId(@Param(“name”) String name, @Param(“id”) Long id, @Param(“classifyId”) Long classifyId);

List<FoodsMenuInfoVo> findByNameAndUser(@Param("name") String name, @Param("username") String username, @Param("level") Integer level);

}

4.1.5 收藏

用户点击界面中的菜品图片,图片下方有收藏按钮,点击收藏,触发collect(),收藏数目加1,然后到收藏页面collectInfo.html,展示所收藏菜品的信息。
在这里插入图片描述

图4.1.6 收藏成功页面
关键代码:
@RestController
@RequestMapping(value = “/collectInfo”)
public class CollectInfoController {
@Resource
private CollectInfoService collectInfoService;
@PostMapping
public Result add(@RequestBody CollectInfoVo collectInfo, HttpServletRequest request) {
collectInfoService.add(collectInfo, request);
return Result.success(collectInfo);
}

4.1.6 查看笔记

用户点击头部标题栏中的笔记,发送post请求调用后端方法,通过userid和name属性以获取到所有笔记。之后确定其审核状态,当为通过状态时,在前端展示此条笔记。
在这里插入图片描述

图4.1.7 查看笔记界面
在这里插入图片描述

图4.1.8 查看笔记界面
关键代码:
@Repository
public interface NotesInfoDao extends Mapper {
List findByName(@Param(“name”) String name, @Param(“userId”) String userId, @Param(“status”) String status);
}

4.2 后台功能模块

4.2.1 用户信息管理

(1)添加用户信息
添加用户信息时通过vue页面的Ajax请求,发送post请求到/add,弹出添加用户信息的页面,输入要添加用户的信息,点击保存数据存入数据库中。然后然后在UserInfoController里面调用接口userInfoService的add方法,在service里面调用UserInfoDao的insertSelective方法,成功添加用户。
在这里插入图片描述

图4.2.1 添加用户
关键代码:
@RestController
@RequestMapping(value = “/userInfo”)
public class UserInfoController {
@Resource
private UserInfoService userInfoService;
@PostMapping
public Result add(@RequestBody UserInfoVo userInfo) {
userInfoService.add(userInfo);
return Result.success(userInfo);
}

修改用户信息
修改用户信息时通过vue页面的Ajax请求,发送post请求到/update,调用UserInfoController里面的update方法,首先看信息是否匹配,如果不匹配,则返回不能此用户,如果匹配成功,调用userInfoService的update方法,成功修改用户信息。
在这里插入图片描述

图4.2.2 修改用户信息
关键代码:
@RestController
@RequestMapping(value = “/userInfo”)
public class UserInfoController {
@Resource
private UserInfoService userInfoService;
@PutMapping
public Result update(@RequestBody UserInfoVo userInfo) {
userInfoService.update(userInfo);
return Result.success();
}

删除用户信息
删除用户信息时通过vue页面的Ajax请求,发送post请求到/delete,调用UserInfoController里面的delete方法,首先调用userInfoService的findById方法,如果不匹配,则返回不能删除用户,如果匹配成功,弹出是否要删除用户,确认删除,则成功删除用户信息。
在这里插入图片描述

图4.2.3 删除用户信息
关键代码:
@RestController
@RequestMapping(value = “/userInfo”)
public class UserInfoController {
@Resource
private UserInfoService userInfoService;
@DeleteMapping(“/{id}”)
public Result delete(@PathVariable Long id) {
userInfoService.delete(id);
return Result.success();
}

4.2.2菜谱信息管理

(1)添加菜谱
添加餐谱信息时通过vue页面的Ajax请求,发送post请求到/add,首先输入菜的名称,标签等一些信息。然后在FoodsMenuInfocontroller里面调用接口FoodinfoService的add方法,在service里面调用foodsmenuinfodao的insertselective方法,成功添加菜谱。
在这里插入图片描述

图4.2.4 添加菜谱界面
关键代码:
@PostMapping(“/add”)
public Result add(@RequestBody FoodsMenuInfo info, HttpServletRequest request) {
Account account = (Account) request.getSession().getAttribute(“user”);
info.setUserName(account.getName());
info.setLevel(account.getLevel());
info.setUploadUserId(account.getId());
foodsMenuInfoService.add(info);
return Result.success(info);
}

(2)删除菜谱
删除菜谱信息时通过vue页面的Ajax请求,发送post请求到/delete,调用FoodsMenuInfoController里面的delete方法,首先调用foodsMenuInfoService的findbyid方法,如果不匹配,则返回不能删除他人的记录,如果匹配成功,则成功删除。
在这里插入图片描述

图4.2.5删除菜谱界面
关键代码:
@DeleteMapping(“/delete”)
public Result delete(@PathVariable Long id, HttpServletRequest request) {
Account account = (Account) request.getSession().getAttribute(“user”);
FoodsMenuInfo info = foodsMenuInfoService.findById(id);
if (!account.getLevel().equals(info.getLevel()) || !account.getId().equals(info.getUploadUserId())) {
return Result.error(“1001”, “不能删除他人的记录”);
}
foodsMenuInfoService.delete(id);
// 删除对应文件记录
if (info.getFileId() != null) {
nxSystemFileController.deleteFile(info.getFileId().toString());
}
return Result.success();
}

(3)更新菜谱
更新菜谱信息时通过vue页面的Ajax请求,发送post请求到/update,调用FoodsMenuInfoController里面的update方法,首先看信息是否匹配,如果不匹配,则返回不能修改他人的记录,如果匹配成功,调用foodsMenuinfoService的update方法,成功修改信息。
在这里插入图片描述

图4.2.6 更新菜谱界面
关键代码:
@PutMapping(“/update”)
public Result update(@RequestBody FoodsMenuInfo info, HttpServletRequest request) {
Account account = (Account) request.getSession().getAttribute(“user”);
if (!account.getLevel().equals(info.getLevel()) || !account.getId().equals(info.getUploadUserId())) {
return Result.error(“1001”, “不能修改他人的记录”);
}
foodsMenuInfoService.update(info);
return Result.success();
}

4.2.3 笔记信息管理

(1)添加笔记
添加笔记信息时通过vue页面的Ajax请求,发送post请求到/add,首先输入菜的名称,标签等一些信息。然后在NotesInfocontroller里面调用接口NotesinfoService的add方法,在service里面调用Notesinfodao的insertselective方法,成功添加笔记。
在这里插入图片描述

图4.2.7 添加笔记界面
关键代码:
@PostMapping(“/add”)
public Result add(@RequestBody NotesInfoVo info) {
notesInfoService.add(info);
return Result.success(info);
}

(2)删除笔记
删除笔记信息时通过vue页面的Ajax请求,发送post请求到/delete,调用NotesInfoController里面的delete方法,首先调用NotesInfoService的findbyid方法,如果不匹配,则返回不能删除他人的记录,如果匹配成功,则成功删除。
在这里插入图片描述

图4.2.8 删除笔记界面
关键代码:
@DeleteMapping(“/delete”)
public Result delete(@PathVariable Long id) {
notesInfoService.delete(id);
return Result.success();
}

(3)更新笔记
更新笔记信息时通过vue页面的Ajax请求,发送post请求到/update,调用NotesInfoController里面的update方法,首先看信息是否匹配,如果不匹配,则返回不能修改他人的记录,如果匹配成功,调用NotesinfoService的update方法,成功修改信息。
在这里插入图片描述

图4.2.9 更新笔记界面
关键代码:
@PutMapping(“/update”)
public Result update(@RequestBody NotesInfoVo info) {
notesInfoService.update(info);
return Result.success();
}

(4)通过驳回
审核笔记信息时通过vue页面的Ajax请求,发送post请求到/page,调用NotesInfoController里面的page方法,首先看信息是否匹配,如果不匹配,则驳回,如果匹配成功,调用NotesinfoService的page方法,则通过。
在这里插入图片描述

图4.2.10 通过驳回界面
关键代码:
@GetMapping(“/page/{name}”)
public Result<PageInfo> page(@PathVariable String name,
@RequestParam(defaultValue = “1”) Integer pageNum,
@RequestParam(defaultValue = “5”) Integer pageSize,
HttpServletRequest request) {
return Result.success(notesInfoService.findPage(name, pageNum, pageSize, request));
}
}

4.2.4 修改密码

修改密码时通过vue页面的Ajax请求,发送post请求到/resetPassword,调用AccountController里面的resetPassword方法,首先看信息是否匹配,如果不匹配,则返回不能修改密码,如果匹配成功,调用Account的方法,成功修改密码。
在这里插入图片描述

图4.2.11 修改密码界面
关键代码:
@PostMapping(“/resetPassword”)
public Result resetPassword(@RequestBody Account account) {
Integer level = account.getLevel();
if (1 == level) {
AdminInfo info = adminInfoService.findByUserName(account.getName());
if (info == null) {
return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);
}
info.setPassword(SecureUtil.md5(“123456”));
adminInfoService.update(info);
}
if (2 == level) {
UserInfo info = userInfoService.findByUserName(account.getName());
if (info == null) {
return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);
}
info.setPassword(SecureUtil.md5(“123456”));
userInfoService.update(info);
}

  return Result.success();

}

5 系统测试

5.1 系统测试的目的

系统测试的目的在于找出系统在开发与设计时可能出现的缺陷与错误,验证系统是否满足用户的需求。
其主要目的如下:
(1)通过系统测试验证系统是否符合用户需求。
在真实系统工作环境下通过与系统的需求定义作比较,检验完整的软件配置项能否和系统正确连接,发现软件与系统/子系统设计文档和软件开发合同规定不符合或与之矛盾的地方,发现潜在的各种错误和缺陷。设计测试用例,并利用这些实例来运行程序,以便发现错误通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合起来,在实际运行(使用)环境下,对计算机系统按照系统的功能和性能需求进行的测试。而且,系统测试还要检验系统的文档等是否完整、有效。另外,系统测试的测试用例应根据需求分析说明书来设计,并在实际使用环境下来运行。
(2) 通过测试验证数据库的连接,编辑,删除,插入数据。
检验数据,确保功能均可实现。

5.2 测试用例及测试结果

5.2.1功能测试用例及测试结果

逐个测试子模块的功能,查看平台是否能够达到预期目标。由于测试内容较多,下面仅给出部分子模块功能测试用例:
用例id 用例标题 测试步骤 预期结果 实际结果
1 输入符合要求的注册数据能否注册 1.输入美食分享系统注册页面URL
2.输入用户名、密码. 能够注册成功 能够登陆成功
2 输入和已经注册过的用户相同用户名是否可以注册 1.输入美食分享系统注册页面URL
2.输入和已经注册过的用户相同用户名 注册失败 注册失败
3 注册失败,是否有失败信息提示 1.输入美食分享系统注册页面URL
2.输入和已经注册过的用户相同用户名 注册失败,有失败信息提示 注册失败,有失败信息提示
4 用户名为空是否可以注册 1.输入美食分享系统注册页面URL
2.用户名为空 注册失败 注册失败
5 密码为空是否可以注册 1.输入美食分享系统注册页面URL
2密码为空 注册失败 注册失败
6 输入已注册的用户名和密码能否正常登录 1.输入美食分享系统登陆页面URL
2输入已经注册的用户名
3.输入正确的密码并提交登陆; 登陆成功 登陆成功
7 输入错误的密码,正确的用户名能否登陆成功 1.输入美食分享系统登陆页面URL
2输入已经注册的用户名. 登陆失败 登陆失败
8 用户名、密码均为空能否登陆 1.输入美食分享系统登陆页面URL
2点击登录 登陆失败 登陆失败
9 登录成功后,提示跳转链接是否有效 1.输入美食分享系统登陆页面URL 成功进入博客首页 成功进入博客首页
10 登录失败后,提示跳转链接是否有效 1.输入美食分享系统登陆页面URL 成功进入登陆页面 成功进入登陆页面
11 用户-菜谱 1.用户成功登陆
2.点击菜谱
3.点赞4.收藏 成功 成功
12 用户-收藏 1.用户登陆成功
2.点击收藏 能看到该用户所有收藏的菜谱 能看到该用户所有收藏的菜谱
13 用户-笔记 1.用户登陆成功
2.点击笔记
3.点击查看详情 能看到笔记详情 能看到笔记详情
14 管理员-查看用户信息 1.管理员登陆成功
2.点击查看用户信息 能看到所有已经注册的用户信息 能看到所有已经注册的用户信息
15 管理员-查看菜谱删除菜品 1.管理员登陆成功
2.点击查看菜品
3.删除菜品 删除菜品成功 删除菜品成功
16 管理员-添加菜品菜品名为空 1.管理员登陆成功
2.点击查看菜品
3.点击添加菜品
4.菜品名为空 添加菜品失败 添加菜品成功
17 管理员-添加菜品菜品名正常 1.管理员登陆成功
2.点击查看菜品
3.点击添加菜品
4.菜品名正常 添加菜品成功 添加菜品成功
18 管理员-查看笔记信息 1.管理员登陆成功
2.点击查看笔记信息 能看到笔记详情 能看到笔记详情
19 管理员-修改密码,输入正确的原密码 1.管理员登陆成功
2.修改密码 修改成功 修改成功
20 在Chrome浏览器使用该系统 1.打chrome浏览器
2.输入美食分享系统URL
3.验证各个功能 各项功能正常 各项功能正常
5.2.2界面测试用例及测试结果
测试步骤 预期结果 实际结果
页面是否整洁 是 是
文本描述通俗易懂 是 是
布局大致左右对称 是 是
界面上的按钮符合大部分人的使用习惯 是 是

5.3 测试总结

通过对系统功能用例的测试,系统的功能实现模块基本符合需求。但是为了更好的保证软件的可靠性,需要定期对软件进行维护升级。经过功能测试,本系统的功能达到预期目标,具有一定的实用价值。系统采用的是MySQL数据库,性能卓越服务稳定,使得数据的容量与安全性得到保证;且架构清楚,界面简单直观,视觉层次清晰,布局设计合理,满足用户需求,能够完成基本功能的实现,平台的安全性与稳定性都达到了基本要求。
6 总结
共享经济这一新兴经济模式的崛起,为互联网背景下共享平台的发展带来了契机。这种全新的消费模式在餐饮住宿、交通出行、社会服务等多个经济领域逐步渗透。作为人们日常生活重要组成部分的餐饮,也在共享经济领域掀起了一片狂潮。关于美食共享系统平台的出现,促进了共享经济在美食领域的发展。该平台致力于发掘愿分享的吃货达人,以实现美食信息资源的有效利用问题,更好的满足人们对美食正宗、特色的需求。一个人通过该平台分享美食、店铺或者攻略,来满足其他人对美食正宗、特色的需求,同时其他人分享,满足该人的需求。
本文针对美食分享平台的现状及巨大的发展空间,提使用SpringBoot、HTML、Mybatis等技术对该平台进行了理论研究和项目开发,开发完成后对相关功能进行测试,经过测试,系统界面展示完好,基本功能已实现,达到了预期目标。
虽然在开发过程中受专业知识水平和时间所限,在设计中还有些欠缺或考虑不周全的地方,例如未能在后台主页面进行功能分区,未能用图象展示事物的趋势和变化,还需进行进一步的加强和优化。需要具体优化的内容主要有:
(1)在后台主界面增加图像,展示事物变化的趋势。
(2)进一步完善该分享平台,进行功能细化,方便用户使用。

参考文献

[1] 李恋. 基于JAVA WEB的美食网设计与实现[J]. 福建电脑,2019,35(2):78-79. DOI:10.3969/j.issn.1673-2782.2019.02.025.
[2] 王璐瑶. 基于位置优化的移动订餐服务系统的设计与实现[D]. 辽宁:大连理工大学,2018.
[3] 孙文心. 社会化美食推荐系统研究与设计[D]. 辽宁:大连海事大学,2013. DOI:10.7666/d.Y2300789.
[4] 李一凡,余杰,沈洁. “云媒体电视”美食点餐系统建设[J]. 中国有线电视,2016(8):926-929. DOI:10.3969/j.issn.1007-7022.2016.08.008.
[5] 邹勤. 校园美食天下订餐系统的设计与实现[D]. 重庆:重庆大学,2015.
[6] 张橡如,陈淼绚,孙振亚,等. 缘聚美食APP开发与营销策划[J]. 计算机产品与流通,2018(10).
[7] 伍剑,刘璐,刘艳艳. 用JAVA语言实现网上定餐[C]. //全国第四届Java技术及应用学术会议论文集.北京:中国计算机学会, 2001:397-400.
[8] 段华东. 基于JAVA技术的餐馆前台信息管理系统[D]. 江苏:南京航空航天大学,2005. DOI:10.7666/d.d015159.
[9] 施海涛. 基于Java的连锁餐饮管理系统设计[J]. 无线互联科技,2023,20(18):83-85. DOI:10.3969/j.issn.1672-6944.2023.18.025.
[10] 王帅,刘磊. 测试驱动开发在Java程序设计课程实验教学中的应用[J]. 淮北师范大学学报(自然科学版),2023,44(3):83-87. DOI:10.3969/j.issn.2096-8248.2023.03.016.
[11] 张雅茹. 基于Java的数据库通用转储工具的研究[J]. 软件,2023,44(8):177-180. DOI:10.3969/j.issn.1003-6970.2023.08.044.
[12] 熊威. 基于项目驱动的Java编程基础教学研究与实践[J]. 中国教育技术装备,2023(2):80-82. DOI:10.3969/j.issn.1671-489X.2023.02.080.
[13] 谭添,马晓星,许畅,等. Java指针分析综述[J]. 计算机研究与发展,2023,60(2):274-293. DOI:10.7544/issn1000-1239.202220901
[14] 杨艳,许占文,李建伟. 利用Java实现Web页面的动态功能[J]. 沈阳工业大学学报,2000,22(4):335-338. DOI:10.3969/j.issn.1000-1646.2000.04.018.
[15] 李恋. 基于JAVA WEB的美食网设计与实现[J]. 福建电脑,2019,35(2):78-79. DOI:10.3969/j.issn.1673-2782.2019.02.025.
[16] 王璐瑶. 基于位置优化的移动订餐服务系统的设计与实现[D]. 辽宁:大连理工大学,2018.

[17] 孙文心. 社会化美食推荐系统研究与设计[D]. 辽宁:大连海事大学,2013. DOI:10.7666/d.Y2300789.
[18] 李一凡,余杰,沈洁. “云媒体电视”美食点餐系统建设[J]. 中国有线电视,2016(8):926-929. DOI:10.3969/j.issn.1007-7022.2016.08.008.
[19] 邹勤. 校园美食天下订餐系统的设计与实现[D]. 重庆:重庆大学,2015.
[20] 张橡如,陈淼绚,孙振亚,等. 缘聚美食APP开发与营销策划[J]. 计算机产品与流通,2018(10).

致 谢

在这篇关于基于JavaWeb的在线美食菜谱系统设计与实现的毕业设计论文完成之际,我衷心感谢所有给予我帮助和支持的人。首先,我要特别感谢我的指导老师,他们不仅在专业知识上给予我巨大的帮助,还在研究方法和论文撰写上提供了宝贵的指导。他们的耐心和专业精神一直是我学习的榜样。
我还要感谢我的同学和朋友们,他们在我遇到困难和挑战时给予了我鼓励和支持。在论文撰写过程中,他们的意见和建议对我帮助极大。
此外,我还要感谢我的家人对我的理解和支持,他们的爱和鼓励是我前进的动力。
最后,感谢所有直接或间接帮助和影响我完成这项毕业设计的每一个人。没有你们的帮助,我无法完成这份工作。衷心感谢你们的支持与陪伴。

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhangBlossom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值