摘 要
在当今快节奏的生活中,人们越来越注重健康、美味和便捷的餐饮体验。"springboot 叙州区私厨到家" 网站应运而生,致力于为您带来独特而令人难忘的私厨到家服务。
本网站采用Java语言,基于 MVVM模式的springboot技术进行开发,使用 Eclipse 编译器编写,数据方面主要采用的是微软的MySQL关系型数据库来作为数据存储媒介。通过这些技术打造了一个高效、稳定和安全的平台,让您可以轻松预订叙州区的专业私厨,享受定制化的美食盛宴。通过此平台,您可以在家中尽情享受高品质的私人餐饮体验,无需出门就能品尝到各种美味佳肴。
本网站还提供了便捷的预订系统和个性化的菜单选择,让您可以根据自己的口味和喜好定制专属的美食方案。不仅如此,本网站还注重细节和服务,为您提供贴心的上门服务,让您在舒适的家中尽情享受美食的乐趣。
"springboot 叙州区私厨到家" 网站不仅仅是一个餐饮平台,更是一种生活方式的选择。我们致力于为您打造独特、精致和令人愉悦的餐饮体验,让美食成为您生活中的美好回忆。
关键词:叙州区私厨到家网站;Java语言;springboot技术
Springboot Xuzhou District Private Kitchen Home Website
SystemAbstract
In today's fast-paced life, people are increasingly focusing on healthy, delicious, and convenient dining experiences. The "Springboot Xuzhou District Private Kitchen Home" website has emerged, dedicated to bringing you unique and unforgettable private kitchen home services.
This website is developed using Java language and Springboot technology based on MVVM pattern. It is written using Eclipse compiler and mainly uses Microsoft's MySQL relational database as the data storage medium. Through these technologies, an efficient, stable, and secure platform has been created, allowing you to easily book professional private chefs in Xuzhou District and enjoy customized culinary feasts. Through this platform, you can fully enjoy high-quality private dining experiences at home and taste various delicious dishes without going out.
This website also provides a convenient reservation system and personalized menu selection, allowing you to customize exclusive food plans according to your taste and preferences. Not only that, this website also pays attention to details and services, providing you with thoughtful door-to-door service, allowing you to fully enjoy the fun of delicious food in a comfortable home.
The "Springboot Xuzhou District Private Kitchen Home" website is not only a dining platform, but also a lifestyle choice. We are committed to creating a unique, exquisite, and enjoyable dining experience for you, making food a beautiful memory in your life.
Keywords: Xuzhou District Private Kitchen Home Website; Java language; Springboot technology
目 录
第一章 绪论
1.1 研究背景和意义
随着社会的发展和人们生活水平的提高,对于个性化、健康、方便的餐饮服务需求日益增长。在这样的背景下,开发一个基于Spring Boot的叙州区私厨到家网站具有重要的研究背景和实践意义。
该网站旨在为用户提供私厨到家的在线订购服务,使用户能够享受优质的私人定制菜品,同时也为私厨提供更广阔的市场和商机。通过使用Spring Boot框架进行开发,可以快速构建稳定、高效的网站系统,并结合互联网技术,实现用户与私厨之间的便捷交流和订单管理。
该研究的背景主要在于满足人们对个性化餐饮服务的需求。传统餐饮服务往往缺乏灵活性和个性化选择,而私厨到家网站可以打破传统的餐饮模式,为用户提供多样化的私人订制菜品,符合他们的口味和膳食需求。
该网站的研究还能够促进私厨行业的发展和创新。通过网站平台的搭建和推广,为私厨提供一个展示自己才华和技艺的机会,并通过在线订单管理系统,提高私厨与用户之间的交流和合作效率。
在实践意义上,该网站将为用户提供便捷、个性化的订餐服务,方便他们享受优质的私厨美食。对于私厨来说,该网站将提供更广阔的市场和商机,帮助他们推广自己的品牌和服务。此外,该研究还有助于促进互联网技术在餐饮行业的应用和创新,推动餐饮行业的数字化转型和发展。
基于Spring Boot的叙州区私厨到家网站的研究背景在于满足人们对个性化餐饮服务的需求,促进私厨行业的发展和创新。其实践意义在于为用户提供便捷、个性化的订餐服务,为私厨提供市场拓展的机会,并推动餐饮行业的数字化转型和发展。
1.2 国内外研究现状
在国内外,私厨到家服务以及基于Spring Boot的网站开发都得到了一定的关注和研究。以下是国内外研究现状的描述:
国内研究现状:
在国内,私厨到家服务逐渐受到人们的喜爱和需求,成为餐饮行业的新兴领域。许多企业和创业者开始探索私厨到家服务的商业模式和运营方式,并尝试开发相应的在线平台。这些平台通过互联网技术和移动应用,将用户与私厨连接起来,方便用户享受优质的私厨菜品。同时,一些研究也关注如何通过数据分析和用户反馈,提高私厨到家服务的质量和用户满意度。
国外研究现状:
在国外,类似的私厨到家服务也受到了广泛的关注和研究。特别是在一些发达国家,私厨到家服务已经形成了相对成熟的市场。一些研究专注于私厨行业的商业模式和运营策略,探索如何提供更多元化、个性化的菜品选择,并通过在线平台实现订单管理和用户反馈。此外,还有研究关注私厨到家服务对于社交和文化交流的影响,以及如何提高私厨行业的可持续发展和创新。
综上所述,国内外在私厨到家服务和基于Spring Boot的网站开发方面都进行了一定的研究。国内研究主要关注商业模式、用户体验和数据分析等方面,而国外研究则更加注重菜品选择、用户反馈以及服务的社交和文化价值。这些研究为叙州区私厨到家网站的开发和优化提供了借鉴和参考,促进了私厨到家服务在全球范围内的发展和创新。
1.3 本文的组织结构
第一章是绪论,本文章的开头部分,对本题目的研究背景意义和国内外研究现状等一些做文字性的描述。
第二章研究了叙州区私厨到家网站的所采用的开发技术和开发工具。
第三章是系统分析部分,包括系统总体需求描述、功能性角度分析系统需求、非功能性等各个方面分析系统是否可以实现。
第四章是系统设计部分,本文章的重要部分,提供了系统架构的详细设计和一些主要功能模块的设计说明。
第五章是系统的具体实现,介绍系统的各个模块的具体实现。
第六章在前几章的基础上对系统进行测试和运行。
最后对系统进行了认真的总结,以此对未来有一个新的展望。
第二章 相关技术介绍
2.1 Springboot框架描述
Spring Boot是一个基于Spring框架的开发框架,它旨在简化Java应用程序的开发和部署。与传统的Spring开发相比,Spring Boot采用了约定优于配置的原则,通过自动配置和默认值,使得开发者可以更快地搭建和运行应用程序。
Spring Boot提供了一种快速启动项目的方式,只需少量的配置即可构建一个独立运行的、可执行的JAR包。它集成了大量常用的第三方库和工具,如Hibernate、Thymeleaf、Jackson等,使得开发者无需手动配置这些组件,而是通过引入对应的starter依赖来实现自动配置。
另外,Spring Boot还提供了一套丰富的功能和特性,例如内嵌的Servlet容器(如Tomcat、Jetty)、健康检查、度量指标、配置管理等。它还支持多种数据访问方式,包括关系型数据库、NoSQL数据库、消息队列等。
Spring Boot的设计理念是简化开发,提高生产力。它通过减少开发者的配置工作、提供默认配置和自动化任务,让开发者能够更专注于业务逻辑的实现。同时,Spring Boot也提供了强大的扩展性和灵活性,开发者可以根据自己的需求进行定制和扩展。
总之,Spring Boot是一个简化Java应用程序开发的框架,它通过约定优于配置、自动配置和默认值等特性,使得开发者能够更快速地构建和部署应用程序,并提供了丰富的功能和扩展性。
2.2 Vue.js 主要功能
Vue.js是一个流行的渐进式JavaScript框架,它主要提供了响应式数据绑定、组件化开发、虚拟DOM、模板语法、生命周期钩子和插件系统等功能。通过响应式数据绑定,Vue.js实现了数据和视图之间的自动更新,简化了数据管理。组件化开发使得页面可以被拆分为独立的组件,提高了代码的可重用性和可维护性。利用虚拟DOM技术和模板语法,Vue.js实现了高效的页面渲染和开发体验。通过生命周期钩子函数,开发者可以在不同阶段执行相应操作。而丰富的插件系统则使得Vue.js可以与各种插件集成,扩展其功能。综上所述,Vue.js的主要功能使得前端开发更加高效、灵活和可维护。
2.3 MySQL数据库
MySQL是一种开源的关系型数据库管理系统(RDBMS),具有可靠性、稳定性和高性能的特点。它支持灵活的数据模型,提供了丰富的功能和高级特性,如表、行、列、约束、触发器和存储过程等。MySQL还注重安全性,通过权限管理和加密机制保护数据的安全性。它具有良好的扩展性,可以根据需求进行水平和垂直扩展。作为一种兼容SQL标准的数据库系统,MySQL提供多种API和驱动程序,方便开发者使用不同的编程语言和平台进行开发和集成。总之,MySQL是一种可靠、高性能、灵活且安全的关系型数据库管理系统,广泛应用于各种应用场景中。
2.4 JAVA语言
Java是一种面向对象的高级编程语言,具有简单易学、平台无关、强大的生态系统、高性能、安全性和大型应用支持等特点。它的语法设计简洁清晰,使得程序结构更加模块化和可扩展。通过Java虚拟机(JVM)实现了平台无关性,开发者只需编写一次代码,就可以在不同操作系统上运行。Java拥有庞大且活跃的开发社区,提供了众多优秀的开发工具、框架和库,帮助开发者提高效率。同时,Java通过即时编译和垃圾回收等技术,提供了高性能的执行环境,并内置了安全机制保护应用程序免受恶意代码的攻击。Java适用于各种规模的应用程序开发,从小型桌面应用到大型企业级应用都可以使用。总之,Java是一种功能强大且广泛应用的编程语言,目前是最受欢迎的编程语言之一。
第三章 系统分析
3.1 可行性分析
本次设计基于B/S 模式下,运用Java技术采用的是MySQL数据库和Eclipse实现,总体的可行性共分为以下三个方面。
3.1.1 技术可行性分析
基于springboot的叙州区私厨到家网站是一个基于Web的预订平台,我们在实现这个系统所采用的技术方案是基于Java语言,SpringBoot框架和MYSQL数据库,在大学的学习中这两门课程都已经学过,而且自己也用这些技术开发过小的项目,在平时的课程设计以及作业也经常用到Java和MYSQL,在技术上实现自己的自主开发是可行的。
3.1.2 经济可行性分析
在项目上使用的工具大部分都是是当下流行开源免费的,所以在开发前期,开发时用于项目的经费将会大大降低,不会让开发该软件在项目启动期受到经费的影响,所以经济上还是可行的。尽量用最少的花费去满足用户的需求。省下经费用于人工费,以及设备费用。将在无纸化,高效率的道路上越走越远。
3.1.3操作可行性分析
本系统实现功能的操作很简单,普通电脑的常见配置就可以运行本软件,并且只要粗通电脑使用的基本常识就可以流畅的使用本软件。电脑具备连接互联网的能力,并且可以正常访问系统,并不需要操作者有什么高超的能力,只需了解业务流程,并且按照专业知识进行正确操作即可,所以叙州区私厨到家网站具备操作可行性。
3.2 功能需求分析
叙州区私厨到家网站分为三大部分:管理员模块、注册用户模块和厨师用户模块。
(一)管理员管理模块:
- 管理员登录:管理员进入到系统登录界面,需要填写正确的登录名、密码、选择权限等信息输入准确无误后登录进入到系统操作界面。管理员的账号是在数据表表中直接设置生成的,不需要进行注册;修改密码:管理员可以随时修改自己进入系统的登录密码,以保证系统的安全性。
- 系统用户:管理系统中的用户信息,包括添加、编辑、删除用户,设置用户权限等。
- 菜品分类管理:对菜品进行分类管理,例如创建、修改或删除菜品类别,以方便用户浏览和搜索菜品。
- 菜品信息管理:添加、编辑和删除菜品的详细信息,如菜品名称、描述、价格、图片等。
- 预约订单管理:查看、处理和管理用户的预约订单,包括订单状态跟踪、确认和取消订单等。
- 系统管理:管理网站首页的轮播图,如上传、更新或删除轮播图片,以展示吸引人的图片和信息。
- 留言管理:查看和回复用户在网站上的留言,与用户进行互动和沟通。
- 网站公告管理:发布、编辑和删除网站公告,向用户传达重要信息或通知。
- 资源管理:管理美食资讯的内容,包括添加、编辑和分类美食相关的文章、视频或其他资源。
(二)注册用户管理模块:
- 用户注册:用户输入对应的账号(必须填写)+密码(必须填写)+确认密码(必须填写,而且要与密码一直)+昵称+邮箱+身份+姓名+电话+性别,选择用户身份等等,然后点击“注册”,系统在用户这一数据库中会查询账号是不是存在,两次密码是不是一样,都填写正确就会注册成功,然后再进行登录,如果是之前已经注册过的用户很长时间没有使用,忘记密码,也可以点击“忘记密码”进行找回。
- 用户登录:系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到叙州区私厨到家网站的首页中;否则将会提示相应错误信息。
- 网站公告:查看展示网站的重要通知、消息或更新内容,让用户了解网站的动态。
- 美食资讯:查看有关美食的文章、食谱、烹饪技巧等信息,满足用户对美食知识的需求。
- 留言板:用户可以在此发表留言、评论或提问,与其他用户进行互动交流。
- 菜品信息:查看各种菜品的详细介绍,包括名称、图片、描述、价格等,方便用户浏览和选择。
- 我的账户:用户个人账户的管理页面,包括个人信息的修改、头像、密码设置等。
- 个人中心:
● 预约订单:用户可以查看和管理自己的预约订单,包括订单状态、历史记录等。
● 留言板:查看和管理自己发布的留言,以及与其他用户的互动回复。
● 收藏:用户可以收藏自己喜欢的菜品或文章,方便后续查看。
(二)厨师用户管理模块:
- 首页:厨师用户登录后的起始页面,可能显示重要信息、推荐菜品或最新活动。
- 网站公告:展示网站的重要通知、消息或更新内容,让厨师用户了解网站的动态。
- 美食资讯:提供有关美食的文章、新闻、烹饪技巧等信息,帮助厨师用户了解行业动态和学习新的烹饪知识。
- 留言板:厨师用户可以查看其他用户的留言,并与他们进行交流和互动。
- 菜品信息:展示各种菜品的详细信息,包括菜名、原料、做法、口味等,方便厨师用户了解和准备菜品。
- 我的账户:厨师用户个人账户的管理页面,包括个人信息的更新、密码修改等。
- 个人中心:
● 菜品信息:厨师用户可以管理和展示自己提供的菜品信息,包括添加、编辑或删除菜品。
● 预约订单:查看和管理用户对自己菜品的预约订单,及时处理和准备。
● 留言板:厨师用户可以查看和回复其他用户对自己的留言,进行沟通和互动。
● 收藏:厨师用户可以收藏自己感兴趣的菜品或文章,方便以后查看和学习。
3.3 非功能需求分析
叙州区私厨到家网站的安全性、可靠性、性能和可扩展性是其重要的考量因素,它们不仅满足了用户对于功能性的要求,还为用户提供了更多的便利。根据表格3-1,我们可以清楚地看到这一点:
表3-1 叙州区私厨到家网站非功能需求表
安全性 | 主要指叙州区私厨到家网站数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指叙州区私厨到家网站能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响叙州区私厨到家网站占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着叙州区私厨到家网站的页面展示内容进行操作,就可以了。 |
可维护性 | 叙州区私厨到家网站开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
3.4 系统流程和逻辑
系统业务流程图,如图所示:
图3-2登录流程图
图3-3添加信息流程图
图3-4注册信息流程图
3.5 系统用例分析
注册用户用例图如下所示。
图3-5注册用户用例图
管理员用例图如下所示。
图3-6管理员用例图
图3-7厨师用户用例图
第四章 系统设计
4.1 系统架构设计
目前B/S体系的系统主要的数据访问方式是:通过浏览器页面用户可以进入系统,系统可以自动对用户向服务器发送的请求进行处理,处理请求是在系统后台中进行的,用户在浏览器页面上进行相应操作,就能够看到服务端传递的处理结果。叙州区私厨到家网站主要分为视图-模型-控制三层架构设计。在视图层中,主要是操作在服务器端向客户端反馈并显示的数据,在模型层中,主要处理相关的业务逻辑、数据整合等,最后的控制层它介于视图和模型之间,主要是调整两层之间的关系,最终落实数据的传递。
系统架构图如下图所示。
图4-1系统架构图
4.2 系统功能结构
系统设计的目的是分析系统包括的所有功能结构,为开发人员设计开发和实现系统做好准备工作。经过前期的需求调查、分析和整理之后,确定的总体需求主要包括多个模块,分别是:后台首页、系统用户、菜品分类管理 、菜品信息管理、预约订单管理、系统管理(轮播图)、留言管理、网站公告管理、资源管理(美食资讯,资讯分类)。系统整体角色分为三个部分,一是注册用户、二是管理员、三是厨师用户,权限分布也是很明显,管理员可以实现对用户的增加以及删除,是最高权限拥有者。
系统功能结构图如下图所示。
图4-2系统功能结构图
4.3 数据库设计
4.3.1 概念模型
根据前面的数据流程图,结合系统的功能模块设计,设计出符合系统的各信息实体。
系统总体ER图如下图所示。
图4-3系统总体ER图
4.3.2 数据表
数据库逻辑结构就是将E-R图在数据库中用具体的字段进行描述。用字段和数据类型描述来使对象特征实体化,最后形成具有一定逻辑关系的数据库表结构。叙州区私厨到家网站所需要的部分数据结构表如下表所示。
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 用户编号: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | appointment_order_id | int | 10 | 0 | N | Y | 预约订单ID | |
2 | order_number | varchar | 64 | 0 | Y | N | 订单号 | |
3 | dish_name | varchar | 64 | 0 | Y | N | 菜品名称 | |
4 | category_of_dishes | varchar | 64 | 0 | Y | N | 菜品类别 | |
5 | price_of_dishes | varchar | 64 | 0 | Y | N | 菜品价格 | |
6 | chef_user | int | 10 | 0 | Y | N | 0 | 厨师用户 |
7 | appointment_users | int | 10 | 0 | Y | N | 0 | 预约用户 |
8 | contact_number | varchar | 64 | 0 | Y | N | 联系电话 | |
9 | appointment_address | varchar | 64 | 0 | Y | N | 预约地址 | |
10 | appointment_time | datetime | 19 | 0 | Y | N | 预约时间 | |
11 | appointment_notes | text | 65535 | 0 | Y | N | 预约备注 | |
12 | chef_review | varchar | 64 | 0 | Y | N | 厨师审核 | |
13 | review_response | text | 65535 | 0 | Y | N | 审核回复 | |
14 | pay_state | varchar | 16 | 0 | N | N | 未支付 | 支付状态 |
15 | pay_type | varchar | 16 | 0 | Y | N | 支付类型: 微信、支付宝、网银 | |
16 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
17 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 文章描述 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
表categorization_of_dishes (菜品分类)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | categorization_of_dishes_id | int | 10 | 0 | N | Y | 菜品分类ID | |
2 | category_of_dishes | varchar | 64 | 0 | Y | N | 菜品类别 | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | chef_user_id | int | 10 | 0 | N | Y | 厨师用户ID | |
2 | chef_name | varchar | 64 | 0 | Y | N | 厨师姓名 | |
3 | chef_star_rating | varchar | 64 | 0 | Y | N | 厨师星级 | |
4 | chef_gender | 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 | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | dish_information_id | int | 10 | 0 | N | Y | 菜品信息ID | |
2 | dish_name | varchar | 64 | 0 | Y | N | 菜品名称 | |
3 | category_of_dishes | varchar | 64 | 0 | Y | N | 菜品类别 | |
4 | picture | varchar | 255 | 0 | Y | N | 图片 | |
5 | price_of_dishes | int | 10 | 0 | Y | N | 0 | 菜品价格 |
6 | cooking_duration | varchar | 64 | 0 | Y | N | 烹饪时长 | |
7 | chef_user | int | 10 | 0 | Y | N | 0 | 厨师用户 |
8 | dishes_and_ingredients | text | 65535 | 0 | Y | N | 菜品食材 | |
9 | introduction_to_dishes | longtext | 2147483647 | 0 | Y | N | 菜品介绍 | |
10 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
11 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
12 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
13 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | | 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 | 回复状态 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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已取消 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | registered_users_id | int | 10 | 0 | N | Y | 注册用户ID | |
2 | name | varchar | 64 | 0 | Y | N | 姓名 | |
3 | gender | varchar | 64 | 0 | Y | N | 性别 | |
4 | telephone | 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 | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | sensitive_vocabulary_id | int | 10 | 0 | N | Y | 敏感词汇ID | |
2 | sensitive_vocabulary | varchar | 64 | 0 | Y | N | 敏感词汇 | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 文件类型 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | | 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 | 会员折扣 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
第五章 系统实现
5.1 注册用户模块的实现
5.1.1 用户注册界面
用户注册:用户输入对应的账号(必须填写)+密码(必须填写)+确认密码(必须填写,而且要与密码一直)+昵称+邮箱+身份+电话等信息,选择用户身份等等,然后点击“注册”,系统在用户这一数据库中会查询账号是不是存在,两次密码是不是一样,都填写正确就会注册成功,然后再进行登录,如果是之前已经注册过的用户很长时间没有使用,忘记密码,也可以点击“忘记密码”进行找回。用户注册界面如
图5-1用户注册界面图
注册代码如下:
public String encryption(String plainText) {
String re_md5 = new String();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
re_md5 = buf.toString();
} catch (Exception e) {
e.printStackTrace();
}
return re_md5;
}
5.1.2用户登录界面
系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到叙州区私厨到家网站的首页中;否则将会提示相应错误信息。用户登录界面如下图所示。
图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.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, "账号或密码不正确");
}
}
5.1.3密码修改界面
用户使用该系统注册完成后,用户对登录密码有修改需求时,系统也可以提供用户修改密码权限。系统中所有的操作者能够变更自己的密码信息,执行该功能首先必须要登入系统,然后选择密码变更选项以后在给定的文本框中填写初始密码和新密码来完成修改密码的操作。在填写的时候,假如两次密码填写存在差异,那么此次密码变更操作失败。密码修改界面如下图所示。
图5-3密码修改界面图
修改密码关键代码如下:
/**
* 修改密码
* @param data
* @param request
* @return
*/
@PostMapping("change_password")
public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
// 根据Token获取UserId
String token = request.getHeader("x-auth-token");
Integer userId = tokenGetUserId(token);
// 根据UserId和旧密码获取用户
Map<String, String> query = new HashMap<>();
String o_password = data.get("o_password");
query.put("user_id" ,String.valueOf(userId));
query.put("password" ,service.encryption(o_password));
int count = service.selectBaseCount(service.count(query, service.readConfig(request)));
if(count > 0){
// 修改密码
Map<String,Object> form = new HashMap<>();
form.put("password",service.encryption(data.get("password")));
service.update(query,service.readConfig(request),form);
return success(1);
}
return error(10000,"密码修改失败!");
}
5.1.4 个人资料界面
个人资料:当用户点击首页右上角“我的账户”这个按钮,可以对个人的资料、进行修改,个人资料界面图如下图所示。
图5-4个人资料界面图
5.1.5 美食资讯界面
美食资讯:当用户点击了任意美食资讯后将会进入该款美食的详情界面,可以了解到该美食的图片信息、分类信息等,同时可以对该美食进行加购、评论。美食资讯界面如下图所示。
图5-5美食资讯界面图
5.1.6 预约订单界面
预约订单:用户可以预约私厨到家服务。预约订单界面图如下图所示。
图5-6预约订单界面图
5.2管理员功能模块的实现
5.2.1 管理员登录界面
管理员进入到系统登录界面,需要填写正确的登录名、密码、选择权限等信息输入准确无误后登录进入到系统操作界面。管理员的账号是在数据表表中直接设置生成的,不需要进行注册;修改密码:管理员可以随时修改自己进入系统的登录密码,以保证系统的安全性。管理员登录界面如下图所示。
图5-7管理员登录界面图
5.2.2 管理员功能界面
管理员可以查看首页、系统用户、菜品分类管理 、菜品信息管理、预约订单管理、系统管理(轮播图)、留言管理、网站公告管理、资源管理(美食资讯,资讯分类)等,并且可以根据需要进行相应的操作,管理员功能界面如下图所示。
图5-8管理员功能界面图
5.2.3 系统用户管理界面
系统用户管理:管理员可以对系统中所有的用户角色进行管控,包含了管理员、注册用户和厨师用户这三种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户。系统用户管理界面如下图所示。
图5-9系统用户管理界面图
用户管理关键代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
5.2.4 菜品分类管理界面
菜品分类管理:管理人员是可以对系统内的菜品的类别进行管控。菜品分类列表和菜品分类添加界面如下图所示。
图5-10菜品分类列表界面图
图5-11菜品分类添加界面图
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
5.2.5 菜品信息管理界面
菜品信息管理:系统中的管理人员是可以对系统内的不同菜品分类下的菜品信息进行维护和管理的,菜品信息列表和菜品信息添加界面如下图所示。
图5-12菜品信息列表界面图
图5-13菜品信息添加界面图
5.2.6 轮播图管理界面
管理员可以对系统前台展示的轮播图以及公告栏进行增删改查,方便用户进行查看。轮播图管理界面如下图所示。
图5-14轮播图管理界面图
5.2.7留言管理界面
可以获取留言内容、留言时间、回复内容、回复时间等信息,进行查看回复或删除操作。留言管理界面如下图所示。
图5-15留言管理界面图
留言信息管理关键代码如下:
@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);
}
5.2.8网站公告管理界面
点击“网站公告管理”这个菜单,可以查看到系统中所有添加的系统公告,支持通过标题对系统公告进行查询,添加、删除等操作。网站公告管理界面如下图所示。
图5-16网站公告管理界面图
5.3 厨师用户功能模块的实现
5.3.1菜品信息界面
厨师可以管理菜品信息,可以添加新的菜品信息,还可以进行查询、重置、添加和删除等操作。菜品信息界面如下图所示。
图5-17菜品信息资管理界面图
5.3.2预约订单界面
查看和管理用户的预约订单信息,合理安排工作时间。对预约订单进行审核和回复。预约订单界面如下图所示。
图5-18预约订单管理界面图
第六章 系统测试
6.1 测试目的
测试存在于软件开发进程中的最后一个阶段,它可以保证一个软件的开发质量是否符合设计者的初衷,也为程序的正式上线做了最后一道质量检测的工序。软件测试主要是控制各种条件、包括软件输出方式,使用模式和运行环境等,来评估一个系统或应用是否符合设计标准。在软件测试过程中,我们一般刻意的去制造错误和极端条件,不能仅依照正常模式允许,而是多去尝试那些意外的情况。
6.2 系统测试用例
系统测试包括:用户登录功能测试、菜品信息查看功能测试、发布菜品分类、预约订单添加、密码修改功能测试,如表6-1、6-2、6-3、6-4、6-5所示:
表6-1 用户登录功能测试表
用例名称 | 用户登录系统 |
目的 | 测试用户通过正确的用户名和密码可否登录功能 |
前提 | 未登录的情况下 |
测试流程 | 1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 | 用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 | 实际结果与预期结果一致 |
菜品信息查看功能测试:
表6-2 菜品信息查看功能测试表
用例名称 | 菜品信息查看 |
目的 | 测试菜品信息查看功能 |
前提 | 用户登录 |
测试流程 | 点击菜品信息列表 |
预期结果 | 可以查看到所有菜品信息分类 |
实际结果 | 实际结果与预期结果一致 |
管理员发布菜品分类测试:
表6-3 管理员发布菜品分类测试表
用例名称 | 菜品分类发布测试用例 |
目的 | 测试菜品分类发布功能 |
前提 | 用户正常登录情况下 |
测试流程 | 1)点击菜品分类,然后点击发布添加后并填写信息。 2)点击进行提交。 |
预期结果 | 提交以后,页面首页会显示新的菜品分类 |
实际结果 | 实际结果与预期结果一致 |
预约订单展示添加功能测试:
表6-4预约订单添加功能测试表
用例名称 | 预约订单添加测试 |
目的 | 测试预约订单添加功能 |
前提 | 无 |
测试流程 | 1)在搜索框填入添加关键字。 2)点击添加按钮。 |
预期结果 | 页面显示包含有添加关键字的预约订单 |
实际结果 | 实际结果与预期结果一致 |
密码修改功能测试:
表6-5 密码修改功能测试表
用例名称 | 密码修改测试用例 |
目的 | 测试管理员密码修改功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 | 使用新的密码可以登录 |
实际结果 | 实际结果与预期结果一致 |
6.3 系统测试结果
经过对叙州区私厨到家网站的测试,我们已经完成了5大模块的检测,包括用户登录功能测试、菜品信息查看功能测试、发布菜品分类、预约订单添加、密码修改功能测试,,这些功能为后续的推广运营提供了强有力的技术支持。
第七章 总结与展望
通过叙州区私厨到家网站的开发,我巩固了之前学习过的知识,并将平时所学到的知识融入到设计中。在设计过程中,我做了大量准备工作。首先,在数据库系统的设计中,深入讨论了数据库的工作原理和特点。同时,对于小型站点来说,选择合适的服务器也是非常重要的。其次,我利用所学的知识点分析了系统需求,并在此基础上进行设计。
目前该系统已经上线,并处于试运行阶段。用户反馈良好,基本满足了用户需求。在试运行过程中,没有遇到严重的问题,一些不足和小问题也得到及时修正。为了保证数据的安全性,我们对系统进行了定期备份操作。系统备份频率为每两个月备份一次,数据库备份频率为每周备份一次。系统部署在租赁的云平台服务器上。
系统成功上线后,得到了用户的高度认可。然而,在功能和性能方面仍需要进一步研究和改进,以提供更高的性能和更好的用户体验。
在系统升级过程中,我们需要解决一系列用户提出的问题,例如如何避免浏览器兼容性问题影响打印过程,如何在大量用户访问时保持较高的响应速度。在今后的系统升级中,我们将重点解决这些安全性问题,并不断优化系统功能和性能。
参考文献
[1]粟梁.基于Java的汽车租赁管理系统[J].电脑编程技巧与维护,2024,(01):43-45+52.DOI:10.16184/j.cnki.comprg.2024.01.035.
[2]石雨昕,关家兴,邹博华等.基于SpringBoot微服务架构设计与实现实验室开放课题管理系统[J].实验室检测,2024,2(01):101-106.
[3]Astuti Y ,Paek C S ,Meemon N , et al.Analysis of traditional feeding practices and stunting among children aged 6 to 59 months in Karanganyar District, Central Java Province, Indonesia.[J].BMC pediatrics,2024,24(1):29-29.
[4]谭光兴,甘景,戚秋晨.基于Java语言的远程数据采集系统设计与实现[J].科技与创新,2024,(01):19-22.DOI:10.15913/j.cnki.kjycx.2024.01.005.
[5]Jia W ,Xiaoyu Z ,Shuqin L , et al.Physical properties, phenolic profile and antioxidant capacity of Java tea (Clerodendranthus spicatus) stems as affected by steam explosion treatment[J].Food Chemistry,2024,440138190-.
[6]Muthiati N R ,Agoes S ,Bambang I , et al.The spatial distribution and physico-chemical characteristic of microplastics in the sediment and cockle (Anadara granosa) from the coastal waters of East Java, Indonesia, and the health hazards associated with cockle consumption[J].Marine Pollution Bulletin,2024,198115906-.
[7]吴伶琳.基于SpringBoot的客户关系管理系统设计与实现[J].无线互联科技,2023,20(24):60-62.
[8]Syaeful H ,Ciputra C R ,Adimedha B T , et al.Radiometric Signatures of Gold Mineralization Zone in Pongkor, West Java, Indonesia: A Baseline for Radiometric Mapping Application on Low-Sulfidation Epithermal Deposit[J].Resources,2023,13(1):
[9]Siregar N S ,Dewi R ,Rahmiati D .Democratic Regression in Indonesian Local Elections: Police in Political Positions Prior to The West Java Governor Election 2018[J].Journal of Humanities and Social Sciences Studies,2023,5(12):140-145.
[10]苏婉怡,揣小龙,刘美瑜等.基于Java技术的实验室管理系统设计与实现[J].无线互联科技,2023,20(23):58-60.
[11]姜一波.基于SpringBoot+Vue的在线考试系统设计与实现[J].无线互联科技,2023,20(23):68-71.
[12]杜朋轩,陈芳,曹梦川.基于Java Web的智慧农业信息采集系统的设计与实现[J].科技资讯,2023,21(23):162-165.DOI:10.16661/j.cnki.1672-3791.2307-5042-8177.
[13]田玉昆.基于Java Web技术的手机销售网站的设计与实现[J].电脑知识与技术,2023,19(32):47-49.DOI:10.14004/j.cnki.ckt.2023.1766.
[14]游晶,邱淑丽,李敬文.基于SpringBoot的校园智慧报修系统的设计与实现[J].电脑知识与技术,2023,19(32):50-52+65.DOI:10.14004/j.cnki.ckt.2023.1718.
[15]刘明,杨胜飞,张冶锋等.基于SpringBoot框架的长距离输水工程水量监测系统设计[J].云南水力发电,2023,39(11):359-362.
[16]郭子傲,杨凯江.基于Java的在线音乐系统的设计与实现[J].工业控制计算机,2023,36(10):66-67+70.
[17]徐文倩,谢丹艳,黎柳等.基于JSP的美食分享网站的设计与实现[J].电脑知识与技术,2023,19(09):57-59.DOI:10.14004/j.cnki.ckt.2023.0421.
[18]单树倩,任佳勋.基于SpringBoot和Vue框架的数据库原理网站设计与实现[J].电脑知识与技术,2021,17(30):40-41+50.DOI:10.14004/j.cnki.ckt.2021.2868.
[19]孙岩,李晶.基于SpringBoot的旅游资源管理网站的设计与实现[J].信息技术与信息化,2021,(01):37-39.
[20]李孟津,杨丹.基于SpringBoot的在线招聘网站的设计与实现[J].科学技术创新,2020,(26):98-99.
致 谢
到此,整个springboot叙州区私厨到家网站就算完成了,虽然过程十分艰难,但是等到都完成的时候,我感觉无比的自豪,虽然设计的系统还存在许多的纰漏,但是我已经拼劲全力,给自己的大学四年画上了一个圆满的句号。
在这里我首先要感谢的就是大学四年来所有教导我的老师,是他们教会了我许多的专业知识以及做人的道理,从一进校门对对开发系统一窍不通到现在能自主开发一个管理系统,里面包含了前台框架、后台框架、业务流程、数据结构、操作系统等各种知识,只有把他们统一运用好,才能够完成整个系统,这都是老师的功劳;其次我要感谢我的指导老师,在开发这个系统的时候,我遇到了无数的问题,经常通过线上、线下的方式去请教导师,每次去请教导师,他从来没有不耐烦,都是细心的引导,告诉我怎么样实现这个功能,怎么样才能使得系统更加完善,然后通过自己查询相关资料解决问题,提高了自己自主解决问题的能力,授人以鱼不如授人以渔,指导老师的这种工作态度受益终生,我也会向老师不断靠拢,向他学习,在此我只想说一句:“老师,谢谢您,您辛苦了”!最后我还要感谢我的室友、同学,在一起学习这四年,他们不但学习上给了我很多建议,在生活上更加给了我帮助,正是有他们的帮助,我的大学生涯才如此完美。
最后,希望自己在未来的道路上能够越走越远,不辜负在大学的学习以及老师们的细致的教导,追风赶月莫停留,平荒尽处是春山。