【Java毕业设计】基于Java的特色美食推荐网站的设计与实现

文章目录

  • 摘 要
  • ABSTRACT
  • 目 录
  • 1 概述
    • 1.1 研究背景及意义
    • 1.2 国内外研究现状
    • 1.3 拟研究内容
    • 1.4 系统开发技术
      • 1.4.1 Java编程语言
      • 1.4.2 SpringBoot框架
      • 1.4.3 MySQL数据库
      • 1.4.4 B/S结构
      • 1.4.5 MVC模式
  • 2 系统需求分析
    • 2.1 可行性分析
    • 2.2 任务概述
    • 2.3 功能性需求
      • 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.1.8 美食论坛
      • 4.1.9 公告信息
      • 4.1.10 用户信息管理
    • 4.2 后台功能模块
      • 4.2.1 用户信息管理
      • 4.2.2美食信息管理
      • 4.2.3 论坛信息管理
      • 4.2.4 修改密码
      • 4.2.5 美食分类信息
      • 4.2.6 一周美食健康安排管理管理
      • 4.2.7 系统信息管理
      • 4.2.8 用户信息管理
  • 5 系统测试
    • 5.1 系统测试的目的
    • 5.2测试方案
    • 5.3 测试用例及测试结果
      • 5.3.1功能测试用例及测试结果
      • 5.3.2界面测试用例及测试结果
    • 5.4 测试总结
  • 参考文献
  • 致 谢

摘 要

当今社会已经进入了科技进步、经济社会快速发展的新时代。计算机技术对经济社会发展和人民生活改善的影响日益突出,人类的生活方式和思考方式也随之产生了变化。传统的美食信息分享与推荐主要依赖于口口相传或是简单的在线论坛分享,然而,这些管理方式存在着效率低下、安全性不高以及信息传输不精准等问题。同时,随着美食文化的兴盛,人们对于特色美食的发现和分享的需求也日益高涨,急需一种更高效、更安全、更个性化的解决方案。
根据此背景,开发一套基于Java的特色美食推荐网站,不仅可以大大提高美食信息的检索、变更与维护的工作效率,也可以方便用户发现和分享美食,从而减少信息管理成本,提高用户体验。该特色美食推荐网站采用B/S架构、前后端分离以及MVC模型进行设计,并采用Java语言及Spring Boot框架进行开发。该系统界面友好,操作简单,不仅能基本满足美食爱好者、餐饮业从业者以及美食文化研究者的日常需求,而且能有效降低人员成本和时间成本,为推广和发展地方特色美食文化提供强大的技术支持。

关键词:特色美食推荐网站;Java;SpringBoot框架;MySQL

ABSTRACT

Today’s society has entered a new era of scientific and technological progress and rapid economic and social development. The influence of computer technology on the economic and social development and the improvement of people’s life has become increasingly prominent, and the way of life and thinking of human beings have also changed. Traditional food information sharing and recommendation mainly rely on word of mouth or simple online forum sharing. However, these management methods have problems such as inefficiency, low security and inaccurate information transmission. At the same time, with the prosperity of food culture, people’s demand for the discovery and sharing of special food is also increasing, and a more efficient, safer and more personalized solution is urgently needed.
According to this background, the development of a special food recommendation website based on Java can not only greatly improve the efficiency of food information retrieval, change and maintenance, but also facilitate users to discover and share food, thus reducing information management costs and improving user experience. This special food recommendation website uses B/S architecture, front end separation and MVC model to design, and uses Java language and Spring Boot framework to develop. With friendly interface and simple operation, the system can not only basically meet the daily needs of food lovers, catering industry practitioners and food culture researchers, but also effectively reduce personnel costs and time costs, and provide strong technical support for the promotion and development of local characteristic food culture.
Keywords: Special food recommendation website;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
2.2 功能性分析 6
2.2 非功能性分析 6
3 系统设计 8
3.2 系统总功能设计 9
3.2.1 前台功能设计 9
3.2.2 后台功能设计 9
3.2 系统数据库设计 11
3.2.1 概念结构设计 11
3.3.3 数据库逻辑结构设计 13
4 系统实现 22
4.1 前台功能实现 22
4.1.1 登录 9
4.1.2 注册 9
4.1.3 美食查询 9
4.1.4 美食浏览 9
4.1.5 收藏 9
4.1.6 查看一周美食健康安排 9
4.1.7 材料信息管理 9
4.1.8 美食论坛 9
4.1.9 公告管理 9
4.1.10 用户信息管理 9
4.2 后台用户模块实现 29
4.2.1 用户信息管理 9
4.2.2 美食信息管理 9
4.2.3 论坛信息管理 9
4.2.4 修改密码 9
4.2.5 美食分类管理 9
4.2.6 一周美食健康安排管理 9
4.2.7 系统信息管理 9
4.2.8 用户信息管理 9
5 系统测试 37

5.1 系统测试的目的 37
5.2 测试方案 37
5.3 测试用例及测试结果 29
5.3.1 功能测试用例及测试结果 9
5.3.2 界面测试用例及测试结果 9
5.4 测试总结 29
6 总结 39
参考文献 40
致 谢 42

1 概述

1.1 研究背景及意义

信息技术已经广泛应用到社会生产和生活的各个领域, 人们的日常工作中越来越多的依赖信息技术。特色美食推荐系统不仅为广大美食爱好者提供了分享和学习的平台, 而且也在一定程度上促进了美食文化的和谐发展[1]。
随着互联网的普及,越来越多的人倾向于通过在线平台分享自己的烹饪经验,这不仅方便了顾客点餐,也提高了餐饮业的工作效率和营业额。
在中国,饮食文化源远流长,各地美食各具特色。设计和实现一个基于JavaWeb的特色美食推荐系统,对于传承和推广中国丰富的饮食文化具有重要意义。这样的系统能够满足快节奏生活中人们对美食信息的多样化需求,同时帮助餐饮业者把握市场动态,提供更受欢迎的菜品[2]。
本系统的设计注重用户体验,界面简洁直观,使用户能够轻松浏览和搜索美食。通过高效的信息管理,系统能够确保美食内容的实时更新,让用户及时了解最新的美食趋势。此外,系统还支持用户评价和推荐功能,增强了内容的互动性和实用性。
综上所述,这个特色美食推荐系统的设计与实现,不仅顺应了时代发展的需求,而且为美食文化的传播提供了新的途径。它通过提供丰富多样的美食信息、友好的用户界面和快速的系统更新,极大地丰富了人们的烹饪生活,使得烹饪变得更加便捷和有趣。本系统的主要优势包括:
(1)系统收录了大量美食,满足不同口味和烹饪水平的用户需求。
(2)界面友好,易于使用,简洁明了的界面设计,使用户能够快速找到并学习感兴趣的美食。
(3)系统更新迅速,系统能够及时更新美食信息,反映最新的美食趋势,提升用户体验。

1.2 国内外研究现状

随着人们对美食文化的兴趣日益增长,以及互联网技术的快速发展,基于JavaWeb的美食推荐系统作为一种新兴的服务模式,已经受到了广泛的关注。这类系统指的是,用户通过互联网平台获取个性化的美食推荐,并能够实现在线交流、评价等功能的服务平台。美食推荐系统通过在线平台和现代网页技术实现对美食信息的集中展示和个性化推荐。
在国外,美食推荐系统的研究和应用已经相当成熟。例如,平台如Yelp和Zomato等,不仅提供餐厅和美食的评分和评论,还通过算法推荐系统为用户提供个性化的美食体验。这些平台利用用户数据和行为分析,推荐符合用户口味和偏好的美食,极大地丰富了用户的餐饮选择。
在中国,基于JavaWeb的美食推荐系统虽然起步较晚,但随着互联网技术的普及和饮食文化的多样化,这类平台也迅速发展起来。平台如大众点评、美团等,已经成为美食爱好者获取推荐和分享体验的重要场所。这些平台通过提供丰富的餐厅信息、用户评价和美食图片,以及基于用户位置和历史行为的智能推荐,为用户提供了便捷的美食探索体验[4]。
总的来说,基于JavaWeb的美食推荐系统的设计与实现,不仅满足了人们对美食探索的需求,也为餐饮行业的发展提供了新的动力。这些系统通过集中展示和个性化推荐美食信息,促进了美食文化的交流和创新,同时也为美食爱好者提供了一个便捷的探索和分享平台。随着技术的不断进步和用户需求的不断变化,这类系统将继续发展,为用户提供更加丰富和个性化的美食推荐服务。

1.3 拟研究内容

该系统应能基本完成特色美食推荐的基本要求。管理员可以对整个系统进行管理,用户可以实现各种美食的浏览,并了解各种美食的营养价值,同时可以与其他用户对美食进行讨论等基本功能。
使用Java语言和SpringBoot框架进行开发设计,具体研究内容如下:
用户登录、注册等基础功能。用户可以对美食进行浏览、查询以及分享。同时,用户也可以收藏对应的美食信息。用户也可以参加论坛,与其他用户一起讨论美食。
管理员登录系统,便可对个人信息进行修改,对用户管理,比如对用户进行修改、添加、删除等功能,并且可以帮助用户修改密码。管理员可以对美食信息进行管理,添加、删除与修改美食信息。同时,管理员也可以对论坛信息进行管理,添加删除修改论坛,并且审查驳回一些不合理的论坛信息。

1.4 系统开发技术

1.4.1 Java编程语言

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

1.4.2 SpringBoot框架

Spring Boot是由Pivotal团队提供的全新框架,它继承了Spring框架原有的优秀特性,用来简化新Spring应用的初始搭建和开发过程,并且使项目的配置过程、部署过程和监控过程变得简洁高效[3]。Spring Boot是一个开源的Java基础框架,它的主要目标是简化Spring应用的初始搭建以及开发过程。Spring Boot通过提供一系列预设的配置("约定大于配置"的原则),使得开发者能够快速启动和开发新的Spring应用程序。它内嵌了Tomcat、Jetty或Undertow,无需部署WAR文件。通过使用Spring Boot,开发者可以更加专注于业务逻辑的实现,而不必花费太多时间在配置和环境搭建上。这使得Spring Boot成为了构建基于Spring的微服务、REST应用和更多类型应用的首选框架。使用springboot极大提升了开发效率,降低了开发过程的可能出现问题的概率[4] 。SpringBoot框架是Spring框架的扩展,Spring虽然实现了业务逻辑的极大简化,却需要繁琐的配置,SpringBoot在Spring的基础上消除了设置程序所需的XML配置,实现了自动配置,为更快、更高效地开发生态系统铺平了道路[5]。

1.4.3 MySQL数据库

数据的存储使用MySQL数据库[6-7],MySQL数据库可以实现用户多线程服务器的高效处理。其本身具有开放的源代码数据、反应速度快和易于使用的作用,结合Java语言进行开发[8-9],,程序开发的平台功能完整,编程者使用起来简单易懂,技术成熟可靠[10]。
经第三方权威机构评测,在性能上,只有Oracle数据库能与MySQL相比;在可靠性与安全性上,与MySQL服务器建立连接需要通过身份认证,确保外部访问者拥有操作数据库的权限,并支持通过日志文件对数据进行恢复[6]。
综上所述MySQL数据库不仅安全性高、占用内存小,而且运行速度十分迅速,且使用不收费,是作为中小型网站系统存储数据的最佳选择。

1.4.4 B/S结构

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

1.4.5 MVC模式

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

2 系统需求分析

在开发基于Java的特色美食推荐系统之前,进行需求分析是至关重要的。这一阶段的目标是深入理解用户的需求,确保新系统能够满足用户的期望并解决实际问题。在当前互联网高度发达的社会背景下,用户对于在线美食推荐服务的需求日益增长,这要求系统能够提供丰富的美食信息、便捷的用户交互以及个性化的推荐体验[5]。
在线美食推荐系统面临的挑战包括系统需要支持用户之间的互动,如评论、评分和分享,以增强社区氛围、系统应能够高效地管理大量美食数据,包括上传、编辑、分类和搜索等。
为了解决这些挑战,系统需要一个强大的后端支持。数据库管理系统(DBMS)是实现这一目标的关键技术。在数据库系统设计中,MySQL因其高性能、易用性和广泛的社区支持,成为了实现数据集中管理的理想选择。MySQL能够支持复杂的数据结构,可以有效地组织用户数据和美食信息,实现有序存储。随着用户基数和数据量的增长,MySQL可以轻松扩展以应对更高的负载。MySQL提供了多种安全特性,如用户权限管理和数据加密,确保数据的安全性。选择MySQL作为美食推荐系统的数据库管理系统,将有助于确保系统的稳定性和高效运行。通过精心设计的数据模型和优化的数据库操作,系统能够为用户提供快速、准确的美食推荐,同时保持良好的用户体验。此外,MySQL的社区支持和丰富的资源也为系统的开发和维护提供了便利。这不仅有助于保证系统的稳定性,还能提高数据管理的效率和效果。

2.1 可行性分析

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

2.2 任务概述

该系统应能基本完成特色美食推荐的基本要求。管理员可以对整个系统进行管理,用户可以实现浏览、讨论等基本功能。
该美食在线分享平台具有以下基本功能:
1、前台功能
(1)用户注册
(2)用户登录
(3)公告信息的查看
(4)材料信息查看
(5)一周健康美食安排查看
(6)美食的浏览、学习
(7)收藏
(8)论坛讨论
(9)个人信息的管理
2、后台功能
(1)管理员登录
(2)用户管理(添加、删除、修改用户信息、修改密码)
(3)美食信息管理(添加、删除、修改美食信息)
(4)美食分类管理(添加、删除、修改美食分类信息)
(5)材料信息管理(添加、删除、修改、删除)
(6)一周健康美食安排管理(添加、删除、修改、删除)
(7)论坛信息管理(添加、删除、修改笔记、审查驳回)
(8)系统公告信息管理(添加、删除、修改、删除)

2.3 功能性需求

根据需求分析创建系统需要的相应实体类及其属性,各实体类创建相应数据库表存储数据[6]。对功能需求的定义,一个软件系统或组件的功能,也是网页所需提供的功能和服务。本系统的功能需求按模块进行分析,主要由前台用户模块,后台管理员两大模块。
本美食推荐系统主要包括二大功能模块,即用户功能模块和管理员功能模块。
管理员模块:系统中的核心用户是管理员,管理员登录后,通过管理员功能来管理后台系统。主要功能有:首页、个人中心、用户管理、美食分类管理、美食信息管理、一周美食健康安排管理、材料信息管理、美食论坛、系统管理等功能。管理员用例图如图2.1所示。
在这里插入图片描述

图 2.1 管理员用例图

用户模块:首页、个人中心、我的收藏管理、美食论坛等功能,用户如图2.2所示。
在这里插入图片描述

图2.2 用户用例图

2.4 非功能性需求
(1)健壮性:具有较高的容错能力和恢复能力。
(2)正确性:按照需求正确执行任务,完成各个模块的相应要求。
(4)易用性:系统研制的过程中所有的语言简练、通俗易懂并且前后一致,语句无歧义。图标提示清晰,位置恰当,易于理解。操作简单,不用进行专门学习才可使用。
(5)安全性:为防止软件受到意外或蓄意存取、使用、修改、毁坏、或泄密,该系统上所有的数据应集中存放于总部的数据库服务器,当用户超过一小时未进行操作时,系统将自动退出。
(6)可扩展性:能方便的进行二次开发,满足对功能的需求。
3 系统设计
3.1 系统总体功能设计
考虑到本系统主要是的使用者是年轻消费群体,考虑到科技发展,美食在线分享成为潮流等因素,本网站设计了如下功能。
在这里插入图片描述

图3.1 系统模块总功能设计图

3.1.1 前台功能设计
前台主要包括以下功能:
用户登录:用户登录本系统,用户名和密码匹配成功,登录账号成功,没有账号则需要注册新账号。
系统界面:首页展示本系统中的美食信息,用户可以根据需求寻找美食,可以找到满意的美食,觉得满意或喜欢的美食可以进行收藏并且可以记笔记,评价美食的好坏,系统首页还可以进入后台管理自己的信息以及退出系统。
一周美食健康安排:用户可以根据各种美食,来安排自己一周的饮食规划,从而均衡营养。
材料信息:用户可以在首页查看到各种制作美食的材料信息,并了解这些材料的功效和作用。
美食论坛:用户可以参与美食论坛,对美食进行讨论。
3.1.2 后台功能设计
后台主要包括以下功能:
管理员与用户的后台管理系统是不同的,管理员包括用户后台系统的所有权限,还包括用户信息管理模块。
管理员后台功能:系统首页;信息展示包括用户信息管理、美食信息管理、论坛信息管理;修改个人信息;退出系统。
用户后台功能:系统首页;信息展示包括论坛信息管理;修改个人信息;退出系统,我的收藏管理。
3.2 系统数据库设计
3.2.1 概念结构设计
持久层通过MYSQL数据库将系统的数据进行存储管理。 MySQL数据库作为目前广泛使用的开源数据库之一,自然具有比较优秀的运行效率。并且MySQL提供了自适应查询,顾名思义,通过利用查询部分执行中获得的信息来调整数据结构和系统,帮助企业优化查询的执行计划,以提高性能。[19-22]。
现实世界中客观存在并且可以相互区分的事物称为实体,此系统中的实体主要包括管理员、美食信息、收藏信息、论坛、材料信息、用户信息、分类信息等。
本家庭食谱管理系统采用的是MYSQL数据库,数据存储快,因为特色美食推荐系统 ,主要的就是对信息的管理,信息内容比较多,这就需要好好的设计一个好的数据库,分类要清楚,不能添加信息的时候,造成信息太过混乱,设计好的数据库首先就需要先把各个实体之间的关系表达明确,系统的E-R图如下图所示:
(1)用户实体E-R图表示如下:

在这里插入图片描述

图 3.2 用户ER图片
(2)美食实体有3个属性,用E-R图表示如下:
在这里插入图片描述

图 3.3 美食信息ER图片
(3)一周食谱健康安排管理实体E-R图表示如下:
在这里插入图片描述

图 3.4 一周食谱健康安排管理实体及属性
(4)管理员实体E-R图表示如下:
在这里插入图片描述

图 3.5 管理员实体及属性

(5)公告实体E-R图表示如下:
在这里插入图片描述

图 3.6 公告实体及属性
(6)材料实体E-R图表示如下:
在这里插入图片描述

图 3.7 材料实体及属性

3.2.2 数据库逻辑结构设计

数据库的逻辑结构设计主要分为两步:第一步将概念设计模型得出的E-R图进行转换成关系模型,然后对转化成的关系模型进行优化。
在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。

  1. 材料信息表
    材料信息表里面存储了管理员的相关信息,如表3.1所示:
    表 3.1 材料信息表
    字段名称 类型 长度 字段说明 主键 默认值
    id bigint 主键
    主键

addtime timestamp 创建时间 CURRENT_TIMESTAMP
cailiaomingcheng varchar 200 材料名称
tupian varchar 200 图片 shangpinxinxi
shiwugongxiao bigint 食物功效
shiwudapei bigint 食物搭配
shiwujinji varchar 200 食物禁忌

  1. 美食分类表
    美食分类表里面存储了美食分类的相关信息,如表3.2所示:
    表 3.2 美食分类表
    字段名称 类型 长度 字段说明 主键 默认值
    id bigint 主键
    主键

addtime timestamp 创建时间 CURRENT_TIMESTAMP
shipufenlei varchar 200 食谱分类
3. 美食信息表
美食信息表里面存储了美食的相关信息,如表3.3所示:
表 3.3 美食信息表
字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键
主键

addtime timestamp 创建时间 CURRENT_TIMESTAMP
shipumingcheng bigint 食谱名称
tupian bigint 图片
shipufenlei longtext 4294967295 食谱分类
pengrenfangshi longtext 4294967295 烹饪方式
zuofa longtext 4294967295 做法
gongxiao longtext 4294967295 功效
shizhang longtext 4294967295 时长
yuancailiao longtext 4294967295 原材料
dapeijinji longtext 4294967295 搭配禁忌
4. 用户表
用户表里面存储了用户的相关信息,如表3.4所示:
表 3.4 用户表
字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键
主键

addtime timestamp 创建时间 CURRENT_TIMESTAMP
yonghuhao bigint 用户账号
mima bigint 密码
yonghuxingming longtext 4294967295 用户姓名
touxiang longtext 4294967295 头像
xingbie longtext 4294967295 性别
shoujihaoma longtext 4294967295 手机号码
5. 一周美食规划管理表
一周美食规划管理表里面存储了一周美食规划管理的相关信息,如表3.3所示:
表 3.3 美食信息表
字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键
主键

addtime timestamp 创建时间 CURRENT_TIMESTAMP
biaotimingcheng bigint 标题名称
tupian bigint 图片
xinqiyi longtext 4294967295 星期一
xinqier longtext 4294967295 星期二
xinqisan longtext 4294967295 星期三
xinqisi longtext 4294967295 星期四
xinqiwu longtext 4294967295 星期五
xinqiliu longtext 4294967295 星期六
xinqiri longtext 4294967295 星期日

4 系统实现

4.1 前台功能模块

4.1.1 登录

登录是项目的第一个也是最重要的业务。我们使用MVC三层架构能非常容易的区分各个层级。登录功能是业务层第一个要实现的功能。业务层是业务的逻辑处理,提供接口和接口实现类,提供controller层调用的方法[17]。用户登录时通过vue页面的Ajax请求,发送post请求到/login,在Usercontroller里面首先设置请求地址为/login,然后把前台输入的数据获取。
如果是管理员进行登录,则调用AdminController的login方法,首先要判断管理员输入的名字和密码是否为空,如果为空则返回错误。不为空的情况下,获取前台输入的用户名和数据。然后和数据库进行比对,比对成功则可进入该平台。如果是用户进行登录,则调用UserService的login方法,首先要判断用户输入的名字和密码是否为空,如果为空则返回错误。不为空的情况下,获取前台输入的用户名和数据。然后和数据库进行比对,比对成功则可进入该平台。
在这里插入图片描述

图4.1.1 登录界面

关键代码:
@IgnoreAuth
@PostMapping(value = “/login”)
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper().eq(“username”, username));
if(user==null || !user.getPassword().equals(password)) {
return R.error(“账号或密码不正确”);
}
String token = tokenService.generateToken(user.getId(),username, “users”, user.getRole());
return R.ok().put(“token”, token);

4.1.2 注册

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

图4.1.2 注册界面
关键代码:
@IgnoreAuth
@RequestMapping(“/register”)
public R register(@RequestBody YonghuEntity yonghu){
//ValidatorUtils.validateEntity(yonghu);
YonghuEntity user = yonghuService.selectOne(new EntityWrapper().eq(“yonghuhao”, yonghu.getYonghuhao()));
if(user!=null) {
return R.error(“注册用户已存在”);
}
Long uId = new Date().getTime();
yonghu.setId(uId);
yonghuService.insert(yonghu);
return R.ok();
}

4.1.3 美食查询

美食查询提供按照美食的名称的方式进行查询,通过不同美食的name属性,确定其所属类别,当点击此类别时,首先确定美食小类的name属性,其次调用shipuxinxiService.queryPage方法,获取所属的美食信息,在美食分类中,通过type属性筛选出符合条件的美食,并显示在界面上。
在这里插入图片描述

图4.1.3 美食查询界面
关键代码:
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,ShipuxinxiEntity shipuxinxi, HttpServletRequest request){

    EntityWrapper<ShipuxinxiEntity> ew = new EntityWrapper<ShipuxinxiEntity>();PageUtils page = shipuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shipuxinxi), params), params));return R.ok().put("data", page);
}

@Override
public PageUtils queryPage(Map<String, Object> params, Wrapper wrapper) {
Page page =new Query(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}

4.1.4 美食浏览

用户点击头部标题栏中的首页,发送post请求调用后端方法,通过id和name属性,获取到所有美食信息,并在前端展示出来。之后,用户可以点击具体的某一个美食,并且浏览美食的详情信息。
在这里插入图片描述

图4.1.4 美食浏览界面

关键代码:
@RequestMapping(“/query”)
public R query(ShipuxinxiEntity shipuxinxi){
EntityWrapper< ShipuxinxiEntity> ew = new EntityWrapper< ShipuxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( shipuxinxi, “shipuxinxi”));
ShipuxinxiView shipuxinxiView = shipuxinxiService.selectView(ew);
return R.ok(“查询美食信息成功”).put(“data”, shipuxinxiView);
}
@Override
public ShipuxinxiView selectView(Wrapper wrapper) {
return baseMapper.selectView(wrapper);
}

4.1.5 收藏

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

图4.1.5 收藏成功页面
关键代码:
@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请求调用后端方法,通过yizhoushipujiankanganpaiService.queryPage以获取到所有的美食健康安排。
在这里插入图片描述

图4.1.6 查看一周美食健康安排

关键代码:
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,YizhoushipujiankanganpaiEntity yizhoushipujiankanganpai, HttpServletRequest request){

  EntityWrapper<YizhoushipujiankanganpaiEntity> ew = new EntityWrapper<YizhoushipujiankanganpaiEntity>();

PageUtils page = yizhoushipujiankanganpaiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yizhoushipujiankanganpai), params), params));
return R.ok().put(“data”, page);
}
@Override
public PageUtils queryPage(Map<String, Object> params, Wrapper wrapper) {
Page page =new Query(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}

之后用户可以点击一个具体的美食安排,然后查看美食安排的详情信息,如下图所示:
在这里插入图片描述

图4.1.7 查看一周美食健康安排
关键代码:
@RequestMapping(“/query”)
public R query(YizhoushipujiankanganpaiEntity yizhoushipujiankanganpai){
EntityWrapper< YizhoushipujiankanganpaiEntity> ew = new EntityWrapper< YizhoushipujiankanganpaiEntity>();
ew.allEq(MPUtil.allEQMapPre( yizhoushipujiankanganpai, “yizhoushipujiankanganpai”));
YizhoushipujiankanganpaiView yizhoushipujiankanganpaiView = yizhoushipujiankanganpaiService.selectView(ew);
return R.ok(“查询一周美食健康安排成功”).put(“data”, yizhoushipujiankanganpaiView);
}
@Override
YizhoushipujiankanganpaiView selectView(Wrapper wrapper) {
return baseMapper.selectView(wrapper);
}

4.1.7 材料信息管理

点击导航栏顶部的材料信息,就可以查看制作美食所需要的各种材料,以及材料的作用,并且可以根据材料的名称对材料进行搜索。如下图所示:
在这里插入图片描述

图4.1.8 材料信息
关键代码:
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,CailiaoxinxiEntity cailiaoxinxi, HttpServletRequest request){

  EntityWrapper<CailiaoxinxiEntity> ew = new EntityWrapper<CailiaoxinxiEntity>();

PageUtils page = cailiaoxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, cailiaoxinxi), params), params));
return R.ok().put(“data”, page);
}
@Override
public PageUtils queryPage(Map<String, Object> params, Wrapper wrapper) {
Page page =new Query(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
点击某个材料之后,就可以查看材料的详情信息,如下图所示:

图4.1.9 材料详情信息

4.1.8 美食论坛

用户点击首页上面的美食论坛之后,可以进入论坛,查看大家对美食的各种讨论信息,如下图所示:
在这里插入图片描述

图4.1.10 美食论坛信息
关键代码:
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,ForumEntity forum, HttpServletRequest request){
if(!request.getSession().getAttribute(“role”).toString().equals(“管理员”)) {
forum.setUserid((Long)request.getSession().getAttribute(“userId”));
}

    EntityWrapper<ForumEntity> ew = new EntityWrapper<ForumEntity>();PageUtils page = forumService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, forum), params), params));return R.ok().put("data", page);
}

用户可以点击任何一条论坛讨论信息,并且查看具体的讨论内容和帖子内容,并且可以进行评论,如下图所示:
在这里插入图片描述

图4.1.11 美食论坛详情信息
在这里插入图片描述

图4.1.12 美食论坛评论

4.1.9 公告信息

用户可以点击首页上面的公告信息,查看系统的公告。如下图所示:
在这里插入图片描述

图4.1.13 公告信息查看
关键代码:
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
EntityWrapper ew = new EntityWrapper();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put(“data”, page);
}
@Override
public PageUtils queryPage(Map<String, Object> params, Wrapper wrapper) {
Page page =new Query(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
点击某一条公告信息之后,就可以查看公告的详情信息,如下图所示:
在这里插入图片描述

图4.1.14 公告信息详情查看

4.1.10 用户信息管理

点击首页上方的个人中心就可以进入个人中心,查看个人的信息,如下图所示:
在这里插入图片描述

图4.1.15 个人信息查看
关键代码:
@RequestMapping(“/query”)
public R query(YonghuEntity yonghu){
EntityWrapper< YonghuEntity> ew = new EntityWrapper< YonghuEntity>();
ew.allEq(MPUtil.allEQMapPre( yonghu, “yonghu”));
YonghuView yonghuView = yonghuService.selectView(ew);
return R.ok(“查询用户成功”).put(“data”, yonghuView);
}

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,首先输入菜的名称,标签等一些信息。然后在ShipuxinxiController里面调用接口ShipuxinxiService
的add方法,在service里面调用ShipuxinxiDao的insert方法,成功添加美食。
在这里插入图片描述

图4.2.4 添加美食界面
关键代码:
@RequestMapping(“/save”)
public R save(@RequestBody ShipuxinxiEntity shipuxinxi, HttpServletRequest request){
shipuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(shipuxinxi);
shipuxinxiService.insert(shipuxinxi);
return R.ok();
}
(2)删除美食
删除美食信息时通过vue页面的Ajax请求,发送post请求到/delete,调用ShipuxinxiController里面的delete方法,首先调用ShipuxinxiService的findbyid方法,如果不匹配,则返回不能删除,如果匹配成功,则成功删除。
在这里插入图片描述

图4.2.5删除美食界面
关键代码:
@RequestMapping(“/delete”)
public R delete(@RequestBody Long[] ids){
shipuxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
(3)更新美食
更新美食信息时通过vue页面的Ajax请求,发送post请求到/update,调用ShipuxinxiController里面的update方法,首先看信息是否匹配,如果不匹配,则返回不能修改他人的记录,如果匹配成功,调用ShipuxinxiService的update方法。
在这里插入图片描述

图4.2.6 更新美食界面
关键代码:
@RequestMapping(“/update”)
public R update(@RequestBody ShipuxinxiEntity shipuxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(shipuxinxi);
shipuxinxiService.updateById(shipuxinxi);//全部更新
return R.ok();
}

4.2.3 论坛信息管理

(1)查看论坛信息
添加笔记信息时通过vue页面的Ajax请求,发送get请求到/query,查看所有的论坛帖子信息。然后在Forumscontroller里面调用接口ForumsService的query方法,在service里面调用Forumsdao的select方法。
在这里插入图片描述

图4.2.7 论坛帖子界面
关键代码:
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,ForumEntity forum, HttpServletRequest request){
if(!request.getSession().getAttribute(“role”).toString().equals(“管理员”)) {
forum.setUserid((Long)request.getSession().getAttribute(“userId”));
}

    EntityWrapper<ForumEntity> ew = new EntityWrapper<ForumEntity>();PageUtils page = forumService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, forum), params), params));return R.ok().put("data", page);
}

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

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

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

图4.2.9 更新帖子信息界面
关键代码:
@PutMapping(“/update”)
public Result update(@RequestBody ForumsVo info) {
ForumsService.update(info);
return Result.success();
}

(4)查看帖子详情
查看帖子详情信息时通过vue页面的Ajax请求,发送post请求到/page,调用ForumsController里面的page方法,首先看信息是否匹配,如果不匹配,则驳回,如果匹配成功,调用ForumsService的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(ForumsService.findPage(name, pageNum, pageSize, request));
}
}

4.2.4 修改密码

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

图4.2.11 修改密码界面
关键代码:
@PostMapping(“/resetPassword”)
public Result resetPassword(@RequestBody Admin Admin) {
Integer level = Admin.getLevel();
if (1 == level) {
AdminInfo info = adminInfoService.findByUserName(Admin.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(Admin.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();
}

4.2.5 美食分类信息

(1)查看美食分类信息
查看美食分类信息时通过vue页面的Ajax请求,发送post请求到/page,调用MeishifenleiController里面的page方法。
在这里插入图片描述

图4.2.12 美食分类信息界面
关键代码:
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,ShipufenleiEntity shipufenlei, HttpServletRequest request){

    EntityWrapper<ShipufenleiEntity> ew = new EntityWrapper<ShipufenleiEntity>();PageUtils page = shipufenleiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shipufenlei), params), params));return R.ok().put("data", page);

}
(2)添加美食分类信息
查看帖子详情信息时通过vue页面的Ajax请求,发送post请求到/add,调用MeishifenleiController里面的add方法来创建美食分类信息。
在这里插入图片描述

图4.2.13 添加美食分类信息

(3)修改美食分类信息
修改美食分类信息时通过vue页面的Ajax请求,发送post请求到/update,调用MeishifenleiController里面的update方法,首先看信息是否匹配,如果不匹配,则驳回,如果匹配成功,调用MeishifenleiService的update方法,则通过。
在这里插入图片描述

图4.2.14 修改美食分类信息
关键代码:
@RequestMapping(“/update”)
public R update(@RequestBody ShipufenleiEntity shipufenlei, HttpServletRequest request){
//ValidatorUtils.validateEntity(shipufenlei);
shipufenleiService.updateById(shipufenlei);//全部更新
return R.ok();
}

4.2.6 一周美食健康安排管理管理

(1)添加一周美食健康安排管理
添加笔记信息时通过vue页面的Ajax请求,发送get请求到/add,查看所有的论坛帖子信息。然后在Meishianpaicontroller里面调用接口MeishianpaiService的add方法,在service里面调用Meishianpaidao的add方法。

图4.2.15 添加美食安排
关键代码:
@RequestMapping(“/save”)
public R save(@RequestBody YizhoushipujiankanganpaiEntity yizhoushipujiankanganpai, HttpServletRequest request){
yizhoushipujiankanganpai.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(yizhoushipujiankanganpai);

    yizhoushipujiankanganpaiService.insert(yizhoushipujiankanganpai);return R.ok();
}

(2)删除一周美食健康安排管理
删除一周美食健康安排管理
时通过vue页面的Ajax请求,发送post请求到/delete,调用MeishianpaiController里面的delete方法,首先调用MeishianpaiService的findbyid方法,如果不匹配,则返回不能删除他人的记录,如果匹配成功,则成功删除。
在这里插入图片描述

图4.2.16 删除一周美食健康安排管理

关键代码:
@DeleteMapping(“/delete”)
public Result delete(@PathVariable Long id) {
MeishianpaiService.delete(id);
return Result.success();
}
(3)修改一周美食健康安排管理
修改帖子信息时通过vue页面的Ajax请求,发送post请求到/update,调用MeishianpaiController里面的update方法,首先看信息是否匹配,如果不匹配,则返回不能修改他人的记录,如果匹配成功,调用MeishianpaiService的update方法,成功修改信息。
在这里插入图片描述

图4.2.17 更新一周美食健康安排管理信息界面
关键代码:
@PutMapping(“/update”)
public Result update(@RequestBody MeishianpaiVo info) {
MeishianpaiService.update(info);
return Result.success();
}
(4)查看一周美食健康安排管理
查看一周美食健康安排管理详情信息时通过vue页面的Ajax请求,发送post请求到/page,调用MeishianpaiController里面的page方法,首先看信息是否匹配,如果不匹配,则驳回,如果匹配成功,调用MeishianpaiService的page方法,则通过。
在这里插入图片描述

图4.2.18 查看一周美食健康安排管理
关键代码:
@IgnoreAuth
@RequestMapping(“/detail/{id}”)
public R detail(@PathVariable(“id”) Long id){
YizhoushipujiankanganpaiEntity yizhoushipujiankanganpai = yizhoushipujiankanganpaiService.selectById(id);
return R.ok().put(“data”, yizhoushipujiankanganpai);
}

4.2.7 系统信息管理

(1)轮播图管理
管理员可以管理系统的轮播图信息,对轮播图进行修改和删除。
在这里插入图片描述

图4.2.19 轮播图管理

(2)公告信息管理
管理员可以管理系统的公告信息,并且对公告进行增加、删除、创建和查看。
在这里插入图片描述

图4.2.20 公告信息管理

4.2.8 用户信息管理

(1)我的收藏管理
用户可以管理自己的收藏信息,删除自己删除的某些美食或者查看自己收藏的某些美食。
在这里插入图片描述

图4.2.21 我的收藏管理

(2)美食论坛
用户可以管理自己的论坛信息,例如创建自己的论坛帖子或者删除自己创建的论坛帖子。
在这里插入图片描述

图4.2.22 美食论坛管理

5 系统测试

5.1 系统测试的目的

一个系统设计好后,就会进入测试阶段,测试的目标是检验设计好的网站是否可以正常无误的运行,尽可能的发现网站的问题,已使后期网站投入使用后网站尽少出错。
系统测试的目的在于找出系统在开发与设计时可能出现的缺陷与错误,验证系统是否满足用户的需求。
系统测试主要是判断系统是否可以正常运行,功能模块是否可以实现操作。程序代码中是否有错误出现。测试程序是开发过程中的一个主要问题。就算系统完成的再好,再进行程序测试时也会发现一个从来没有被发现的错误信息。
测试不仅是系统开发的开始,而且应该贯穿整个系统的整个生命周期[23]。评估系统质量的方法不局限于系统编码和过程,应该与软件设计工作和历史需求分析密切相关。系统错误,不一定是代码错误,可能是阶段的设计摘要和设计细节存在问题,问题也可能出现在需求分析阶段。从实际情况来看,最初的问题很可能是一个小错误,根据按钮的原理,按钮后的按钮位错将是所有位错。该系统的原因也同样适用,随着后续的开发工作,误差将越来越严重。因此就应该对系统进行测试,在一开始就发现系统中存在的问题,就能保证以后系统能够正常稳定的运行。在测试系统中,开发人员应该站在用户的角度来处理测试工作,而现在主要的测试方法是黑盒测试。测试的目的可以概括为以下几点:首先,用户界面和用户需求是一致的,设置界面和设计风格统一;第二,创新设计接口规范设计标准,具有独特的审美特征;最后,人类传统的接口以满足审美需求,不能盲目地追求一种独特的,合理的规划布局,符合审美标准。

5.2测试方案

对测试计划的把握是测试方案的重中之重。所有的技术难点应该都被包含在这个测试计划之中。而且我们要保证能与目标形成一致性,以至于能够测试出一些主要存在的错误和一些错误的漏洞。可以完美解决这些问题就只有白盒测试或者黑盒测试[14]。
构造测试是白盒测试的另一个名字,了解与分析程序的结构以及性能功用的,从而我们可以得到最终想要的结果并且观察出是不是每一条程序都能得到。
性能测试是黑盒测试别称,程序本身的运作通过程序的进程来观察,主要是看一下程序是不是能够像我们预期的目标那样发展,看一看我们的程序最终能不能完整的得到我们最后想要的功能和储存想得到的数据,到最后看一下我们的这个程序完整性能不能达到要求。

5.3 测试用例及测试结果

5.3.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.3.2界面测试用例及测试结果

测试步骤 预期结果 实际结果
页面是否整洁 是 是
文本描述通俗易懂 是 是
布局大致左右对称 是 是
界面上的按钮符合大部分人的使用习惯 是 是

5.4 测试总结

本基于Java的特色美食推荐网站设计要求基本都可以达到,此系统具有完整的软件功能,良好的用户界面,能够正确的处理错误信息,而且能够准确的提出错误的种类。但是系统测试时也出现了一些系统的不足和缺陷,所以在今后的日子里我会对其视觉上的不足作出修改,其次系统的代码和数据库出现了非常多的冗余现象,都是因为对编程技术的应用不够熟练,在日后我会加强自己的自身学习和能力,减少这样的冗余现象。
经过对上述的测试结果分析,本家庭食谱管理系统无论是在技术方面,还是操作方面,还是经济方面都是完全可以实行的,并且经过测试,该系统操作简单,所有的功能都可以实现,因此该系统可以满足用户的使用需求,值得被推广。
6 总结
本文研究了家庭食谱管理系统的设计与实现,在文章开端首先对个研究背景、研究现状和研究内容作了简单的介绍,然后通过系统分析,引申出本系统研究的主要内容。
通过对Java语言和MYSQL数据库的简介,从硬件和软件两反面说明了家庭食谱管理系统的设计与实现的可行性,本文结论及研究成果如下:实现了Java与MYSQL相结合构建的家庭食谱管理系统 ,我感触到学习一门新技术,最重要的是实践,只有多动手才能尽快掌握它,一个系统的开发,经验是最重要的,经验不足,就难免会有许多考虑不周之处。要想吸引更多的用户,系统的界面必须要美观、有特色、友好,功能要健全。
由于在此之前对于Java知识并不了解,所以从一开始就碰到许多困难,例如一开始的页面显示不规范、数据库连接有问题已经无法实现参数的传递等等,不过通过我不断的查阅相关的资料,以及向老师同学请教,最后出现的所有的问题都得到了解决,通过这次的系统开发,我学到了很多的知识,也明白了自己在哪些方面有不足的地方,尤其是学会如何从大量的信息中筛选出所需有用的信息,同时我更加深刻的体会到了,虽然书本上的大部分知识都是有价值,正确的,但实际上每个人编程的思路和对数据处理的方法、思想都是不同的,这就要求我们一定要通过实践才能找到解决问题的方案。在此次毕业设计活动中,我不断的提高了自己,也得到了宝贵的经验,我相信这些对我以后的发展都会有很大帮助。
通过这次家庭食谱管理系统的开发,让我学到了更多的知识,同时通过这次系统的设计也让我明白了自己在哪方面有不足,以后加以学习争取可以开发住更多有用的适用的系统软件,本次系统的设计提高了我的编程水平,为了我今后系统的开发打下了结实

参考文献

[1]李恋.基于JAVA WEB的美食网设计与实现[J].福建电脑,2019,35(02):78-79.DOI:10.16707/j.cnki.fjpc.2019.02.025.陈诺言. 基于用户体验的线上洗衣服务设计研究[D].华南理工大学,2019.
[2]谢富平.基于SSH2框架的在线美食系统的实现[J].电脑知识与技术,2015,11(33):168-170.DOI:10.14004/j.cnki.ckt.2015.3264.唐媛媛,王晓楠,李京培等.基于SpringBoot的病原生物学在线智能化实验考试系统建设探索[J].赤峰学院学报(自然科学版),2023,39(12):75-78.DOI:10.13398/j.cnki.issn1673-260x.2023.12.024.
[3]杨凡.基于Android的美食APP设计与实现[J].电子世界,2017(19):70+72.DOI:10.19353/j.cnki.dzsj.20170916.001.刘琼,史诺,刘康.基于微信小程序的学生考勤系统的设计与实现[J1.微型电脑应用,2023,39(1):173-176
[4]张豪,朱石磊,胡建华等. 基于B/S架构的校园论坛系统的设计与实现 [J]. 电脑知识与技术, 2023, 19 (33): 32-35. DOI:10.14004/j.cnki.ckt.2023.1779
[5]唐媛媛,王晓楠,李京培等.基于SpringBoot的病原生物学在线智能化实验考试系统建设探索[J].赤峰学院学报(自然科学版),2023,39(12):75-78.DOI:10.13398/j.cnki.issn1673-260x.2023.12.024.
[6]胡鹏飞,于强. 基于B/S的空间站高温柜地基实验远程操控系统 [J]. 计算机应用与软件, 2023, 40 (12): 9-15+78.
[7]刘琼,史诺,刘康.基于微信小程序的学生考勤系统的设计与实现[J1.微型电脑应用,2023,39(1):173-176
[8]姚丽娟,罗宏伟,丑晨,等.基于微信小程序的智慧校园导航系统研究1.网络安全技术与应用,2023(3):48-50.
[9]赵钢.Java Servlet+EJB的Web模式应用研究[J].电子设计工程,2017,21(13):47-49.
[10]邵嘉诚,厉旭杰,林选,等.基于微信小程序的后勤报修系统的设计与实现.智能计算机与应用,2019.9(2):100-103
[11]陈淼,羊开云. 基于微信小程序的校园报修管理系统设计 [J]. 网络安全技术与应用, 2024, (01): 57-60.
[12]顾文静,赵春燕,李娟基于SpringMVC的高性能计算机监视管理系统设计与实现[J].计算机应用与与软件,2017,34(10):102-107.
[13]彭霞,朱萍MVC模式高新科研管理平台构建方案IJ1.计算机技术与发展,201323):249-253
[14]梁粥.基于MVC的高校科研成果管理系统的设计与实现IJ1.计算机技术与发展,2011,21(10):161-163
[15]杜成龙.基于MVC模式的三层架构研究[J].软件,2022,43(6):100-102
[16]海波,匡静,朱承学,等.基于MVC的教学资源管理系统的设计与实现[J].计算机技术与发展2014.24(7):214-217.
[17]罗梓汛,徐鹏,黄听凯.基于MVC模式与MySQL的信息咨询服务系统设计与实现IJ1.信息与电脑(理论版).2022,34(9):184-188.
[18]王絮,陈学斌,王艳彦,等.基于MVC架构的教学考勤系统设计与实现[J1计算机技术与发展2016,26(9):65-68
[19]Xiao Z ,Ali Y ,Xin W , et al.Sports Work Strategy of College Counselors Based on MySQL Database Big Data Analysis[J].International Journal of Information Technology and Web Engineering (IJITWE),2023,18(1):1-14.
[20]Yuan G ,Ximu Y .Data analysis framework of tourism enterprise human resource management system based on MySQL and fuzzy clustering[J].International Journal of System Assurance Engineering and Management,2023,14(5):1647-1659.
[21]Gao Yuan,and Yan Ximu.Data analysis framework of tourism enterprise human resource management system based on MySQL and fuzzy clustering.International Journal of System Assurance Engineering and Management 14.5(2023):1647-1659.
[22]Babatunde Olagoke Sunday Sunday O Nduka.(2023).MySQL Database Server: Deploying Software Application to Enhance Visibility and Accountability.Current Journal of Applied Science and Technology(4),16-23.123
[23]Kharchenko K ,Beznosyk O ,Bulakh B , et al.The development of the method of optimizing costs for software testing in the Agile model[J].Technology audit and production reserves,2023,6(2):10-14.

致 谢

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外汇天眼:FSCS确认TenetConnect Services Ltd已任命管理人

2024年6月5日&#xff0c;Tenet Group Ltd的董事们任命了Interpath Ltd的Ed Boyle、Howard Smith和Rob Spence为联合管理人。Ed Boyle和Rob Spence也被任命为其子公司Tenet Ltd、TenetConnect Ltd和TenetConnect Services Ltd的联合管理人。Tenet Mortgage Services Ltd和Tenet…

【计算机视觉(8)】

基于Python的OpenCV基础入门——图像直方图 直方图图像直方图 图像直方图代码以及实现效果 直方图 直方图是一种用于描述图像亮度分布的统计工具。它将图像的像素亮度值按照不同的亮度等级进行计数&#xff0c;并以直方图的形式呈现出来。图像直方图可以显示图像中每个亮度级别…

点击式的excel电子表格查找修改功能,比xlookup和vlookup简单,多列关联查询速度更快

经过实际测试&#xff0c;excel的xlookup确实非常简单&#xff0c;有部分功能也非常快。但是有的人不会公式&#xff0c;或者不喜欢用公式&#xff0c;或者没有excel2021以上的版本。而且xlookup确实也有些还不是很完美的地方&#xff0c;比如对多列关联查询很慢。所以我们还是…

selenium非全新的方式同时启动多个浏览器又互不影响的一种实现方法,欢迎讨论!

最近在做模拟浏览器批量定时自动点击实现批量操作功能&#xff0c;主要使用selenium&#xff0c;但是发现selenium直接调用本地浏览器&#xff0c;启动的是一个全新的&#xff08;与手动打开的不一致&#xff09;&#xff0c;网站可以检测到&#xff0c;每次都要双重验证(密码登…

Windows系统中不同Java版本共存

Windows系统中不同Java版本共存的方法 在Windows系统中&#xff0c;有时我们需要同时运行多个Java应用&#xff0c;而这些应用可能依赖于不同版本的Java Development Kit (JDK) 或 Java Runtime Environment (JRE)。为了实现这种需求&#xff0c;我们需要在Windows中配置多个J…

电商APP用户体验提升技巧:一个实战案例

随着网络和移动技术的快速发展&#xff0c;加上全球疫情的影响&#xff0c;电子商务应用程序改变了人们的购物方式&#xff0c;积累了大量的用户群体。如今&#xff0c;一个成功的电子商务应用程序&#xff0c;除了网站用户界面的美&#xff0c;电子商务用户体验的设计&#xf…

深度学习笔记: 最详尽LinkedIn Feed 排名系统设计

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家&#xff01; LinkedIn Feed 排名 1. 问题陈述 设计一个个性化的LinkedIn Feed&#xff0c;以最大化用户的长期参与度…

Typecho:简约而强大的开源PHP博客平台

Typecho&#xff1a;让博客写作回归本质- 精选真开源&#xff0c;释放新价值。 概览 Typecho是一个开源的PHP博客平台&#xff0c;以其简洁的界面和强大的功能&#xff0c;为博客作者提供了一个高效、易于管理的写作环境。它是一个轻量级、高性能的解决方案&#xff0c;适用于…

【WP|9】深入解析WordPress [add_shortcode]函数

add_shortcode 是 WordPress 中一个非常强大的函数&#xff0c;用于创建自定义的短代码&#xff08;shortcodes&#xff09;。短代码是一种简洁的方式&#xff0c;允许用户在内容中插入动态的、可重用的功能。通过 add_shortcode&#xff0c;开发者可以定义自己的短代码&#x…

【MMU】——MMU 相关的 CP15 寄存器

文章目录 MMU 相关的 CP15 寄存器C1(System Control Register)C2(Translation Table Base Control Register)C3(Domain Access Control Register)C5(Data Fault Status Register)C6(Data Fault Address Register)C9C10MMU 相关的 CP15 寄存器 寄存器作用寄存器 C1 中…

前端开发环境:Vue、Element Plus、Axios

目录 1. Vue简介 2. Element Plus简介 3. Axios简介 4. 创建Vue项目 4.1 Node.js安装 4.2 创建Vue项目 4.3 Vue项目的结构 4.4 安装Element-Plus 4.5 安装Axios 4.6 解决跨域问题 5. 应用实例 5.1 创建Vue组件 5.2 配置路由 5.3 配置根组件 5.4 启动前端应用服…

Vue 爷孙组件通讯之:Provide / Inject 详细介绍

背景 在父子组件传递数据时&#xff0c;通常使用的是 props 和 emit&#xff0c;父传子时&#xff0c;使用的是 props&#xff0c;如果是父组件传孙组件时&#xff0c;层层传递非常麻烦。 对于这种情况&#xff0c;我们可以使用一对 provide 和 inject。无论组件层次结构有多深…

在不受支持的 Mac 上安装 macOS Sonoma (OpenCore Legacy Patcher v1.5.0)

在不受支持的 Mac 上安装 macOS Sonoma (OpenCore Legacy Patcher v1.5.0) Install macOS on unsupported Macs 请访问原文链接&#xff1a;https://sysin.org/blog/install-macos-on-unsupported-mac/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主…

【leetcode--30.串联所有单词的子串】

有没有一样喜欢看示例的&#xff0c;&#xff0c;看题目就觉得很难懂。大致就是words要进行排列组合&#xff0c;返回s中所有包含这个排列组合的首标。 顺完逻辑蛮好懂的&#xff0c;应该不算困难题&#xff0c;只是不知道用什么模块实现。 class Solution:def findSubstring…

如何利用Varjo混合现实技术改变飞机维修训练方式

自2017年以来&#xff0c;总部位于休斯顿的HTX实验室一直在推进混合现实技术&#xff0c;与美国空军密切合作&#xff0c;通过其EMPACT平台提供可扩展的沉浸式飞机维护虚拟现实培训。 虚拟和混合现实对维修训练的好处&#xff1a; l 实践技能&#xff1a;提供一个非常接近真实场…

【C++题解】1074 - 小青蛙回来了

问题&#xff1a;1074 - 小青蛙回来了 类型&#xff1a;需要找规律的循环 题目描述&#xff1a; 关于小青蛙爬井的故事&#xff0c;你应该早就听过了&#xff1a;井深10 尺&#xff0c;小青蛙从井底向上爬&#xff0c;每个白天向上爬 3 尺&#xff0c;每个晚上又滑下来 2 尺&…

Java | Leetcode Java题解之第136题只出现一次的数字

题目&#xff1a; 题解&#xff1a; class Solution {public int singleNumber(int[] nums) {int single 0;for (int num : nums) {single ^ num;}return single;} }

App UI 风格,尽显魅力

精妙无比的App UI 风格

Eclipse添加C和C++编译成汇编文件的选项

在miscellaneous中添加assemble listing选项就可以生成汇编文件了

[自学记录09*]Unity Shader:在Unity里渲染一个黑洞

一、前言 记得很久很久以前&#xff0c;在ShaderToy上看过一个黑洞的效果&#xff0c;当时感觉太*8帅了&#xff0c;于是这几天就尝试自己弄了一个。 Gargantua With HDR Bloom (shadertoy.com) 下面是我自己实现的黑洞 可以看到还是略逊一筹&#xff08;感觉略逊百筹&#x…