版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录绪论本章节主要对网上订餐类系统的研究背景和研究现状进行了详细的分析。介绍了开展本课题的原因与目标以及对现有的研究基础进行介绍。1.1研究背景针对网络信息化的不断发展与进步,为了满足人们就餐快捷性的需求,基于JavaWeb的网上订餐系统[1]作为新型的订餐服务模式,它将传统的订餐服务与互联网技术相结合,为消费者提供更加便捷、快速、安全的订餐服务。随着互联网技术的不断发展和普及,越来越多的人开始使用网上订餐服务,这也促使了网上订餐系统的不断完善和发展[2]。在传统的订餐服务中,消费者需要亲自前往餐厅点餐,而且会经历等待上菜、结账等繁琐的流程,而网上订餐系统则可以让消费者在家或办公室中轻松地完成订餐、支付等操作,大大提高了消费者的用餐体验。基于JavaWeb的网上订餐系统是一种具有广泛应用前景的新型订餐服务模式[3],它可以为消费者提供更加便捷、快速、安全的订餐服务,同时也可以为餐厅提供更加高效、精准的订单管理,是一种值得推广和应用的新型订餐服务模式。缺乏网上订餐系统会让消费者的生活更加忙碌和疲惫。现代人的工作压力大,用餐的时间很短,而网上订餐的发展可以为人们节省时间和精力,让他们有更多的时间去做自己想做的事情。此外,网上订餐系统还可以提供更加丰富、多样的餐饮选择,满足人们不同口味的需求。因此,网上订餐系统的发展对于改善人们的生活情绪和提高生活质量具有重要意义[4]。该系统将针对当前网上订餐系统中存在的问题,如传统消费模式的影响和消费群体的差异等,进行改进并提出一些对策。为不同人群提供最合适的服务。1.2研究现状中国互联网的发展也已经渗透到每个家庭,给人们带来了很多便利,计算机普及的时代即将到来。随着网络技术的发展和完善,从餐饮到金融行业的在线服务已经逐渐成熟,就像网上订餐系统[5-7]一样。专门从事网上订餐行业的网站逐渐进入人们的网络生活,并实现了现实生活和网络生活的结合。使用网上订餐系统[8]来管理餐饮业不仅提高了管理水平,还能够提供及时有效的餐饮信息,让消费者能够快速找到需要的美味佳肴。相比传统的人工作业,这种方式不仅节省了用户的时间,还能够提高餐饮企业的管理效率和经济效益。此外,餐馆还可以通过网络宣传自己的品牌,并通过消费者的反馈信息来完善自身问题,提供更高质量的菜品和更好的服务,从而获得更大的发展空间。电子科技大学的郭睿[9]可以运用贝叶斯网络对用户行为进行建模分析。并且其对原有的均值算法进行了优化,并提出了两种改进算法,用于量化评价:固定权重算法和复合权重算法。固定权重算法根据评价的客观程度不同,给予不同的固定影响权重。复合权重算法在固定权重算法的基础上进一步优化,考虑了用户评价习惯和任意评价现象两方面因素。通过统计用户在订餐过程中固定的订餐时间和地点,来预测订餐行为的发生概率,并给出指导性建议。电子科技大学的黄丽[10]首先研究了在随机需求下,顾客需求如何受剩余座位数量的影响,以实现最优动态座位预订控制。为此,我们假设顾客订餐需求服从齐泊松过程,并且到达顾客的预订决策受剩余座位数量的影响。基于这些假设,我们构建了一个餐厅能力分配的随机动态规划模型。在国外的网上订餐系统的研究上,OpenTable该网站[11]在美国餐饮业中处于领先地位,无论是在规模还是技术应用方面。截至目前,OpenTable已经拥有超过15000家餐厅的合作伙伴。尽管如此,OpenTable仍然致力于扩大消费人群,并增加餐厅的数量和规模。该网站的主要服务是为用户提供预订餐位的服务,一旦用户提交预订订单,OpenTable将及时回应,并借助物流配送公司为用户提供送餐上门服务。国内美团系统[12]则是有采用UCD的任务分析方法,通过用户订餐认知过程确定用户体验问题,并基于用户满意度评价对问题进行定量分析。在优化方案设计及评估过程中,美团应用AxureRP软件对平台界面进行优化设计和基于体验式营销的理论给出优化建议,以优化用户体验。最后,针对平台界面优化方案应用问卷打分法进行评估,结果显示用户在内容、技术、服务、安全方面体验满意度明显提高。这表明美团设计的优化方案改善了美团外卖平台的用户体验,有利于其吸引新用户、增强用户粘度、提高平台核心竞争力,同时也为其他O2O外卖平台用户体验优化提供借鉴意义。基于JavaWeb[13]的网上订餐系统是近年来随着互联网的发展而兴起的一种新型订餐服务模式。它通过互联网技术,将餐厅、顾客和配送员连接起来,实现了线上订餐、线下就餐和外卖配送等多种服务方式的无缝衔接。随着移动互联网的普及和人们生活方式的改变,网上订餐系统[14]的发展也越来越迅速。从最初的简单点餐系统,到后来的在线支付、评价、推荐等功能的不断增加,再到现在的智能化、个性化、场景化等多元化发展,网上订餐系统已经成为了人们日常生活中不可或缺的一部分。而JavaWeb中的SpringBoot作为一种快速开发框架,为网上订餐系统[15]的开发提供了很大的便利。它通过简化配置、提供自动化配置等方式,让开发者可以更加专注于业务逻辑的实现,从而加快了系统的开发速度和上线时间。总之,基于JavaWeb的网上订餐系统为人们提供了更加便捷、高效、优质的订餐服务体验,也成为了餐饮行业的数字化转型和升级的有力支撑。1.3研究目的与内容基于JavaWeb的网上订餐系统主要作用是方便人们网上订餐,对各类菜品进行分类,使用户更轻松找到想吃的菜系。用户可以在自己浏览网页时选择他们喜欢的菜品放入购物车。该系统为网上订餐系统,主要分别为三个模块:用户模块、菜品模块、管理员模块。用户模块涵盖用户登录注册功能、购物车功能、我的收藏功能。菜品模块涵盖了菜品推荐功能、菜品分类功能、菜品详情功能。管理员模块涵盖了用户管理功能、订单管理、分类管理和菜品管理功能。管理员用户管理模块能够对用户进行删除、修改、查询以及对用户订单的管理,管理员菜品管理模块能够对菜品信息管理、对菜品分类管理以及对订单管理。1.4设计目标及论文结构本课题目的在于设计并实现一个网上订餐系统,主要帮助用户找到自己喜欢的菜系,以及方便用户下单,节省用户平常时间,让用户吃到令人满意的菜品。第一章为绪论,本文首先介绍了基于JavaWeb的网上订餐系统的研究背景、研究现状、研究目的与研究内容,并指出了本文的研究目的,给出了论文结构。第二章为系统分析,从业务、需求和可行性三个方面进行了系统的分析。第三章为系统总体设计,介绍了基于JavaWeb的网上订餐系统的总体设计,包括架构设计、功能模块设计、数据库设计和接口设计。第四章是对基于JavaWeb的网上订餐系统的详细设计,包含项目设计、交互设计以及功能模块设计。第五章是在前两章的基础上详细阐述了网上订餐系统的各个功能,并给出了相应的系统配置。第六章是系统测试将对实现的网上订餐系统进行测试,并给出了具体的测试方案和具体的测试过程。第七章为对本系统工作的总结和展望。 2系统分析2系统分析在此部分中,本文主要以用例图对基于JavaWeb的网上订餐系统进行业务分析,其次,从功能、非功能等方面进行了需求分析,最后,对系统的可行性进行了分析。2.1业务分析本系统包含两个参与者:用户,能够执行登录注册、购物车、我的收藏、我的订单功能;管理员能够对用户、菜品和分类进行管理,能够执行登录、用户管理、菜品信息管理、菜品分类管理以及订单管理的功能。2.1.1用户用例图用户能够执行登录注册、查看菜品详情、购物车、我的收藏、我的订单。用户用例图如图2.1所示。图2.1用户用例图2.1.2管理员用例图管理员能够对用户、菜品和分类进行管理,能够执行登录、用户管理、菜品信息管理、菜品分类管理以及订单管理的功能。管理员用例图如图2.2所示。图2.2管理员用例图2.2需求分析2.2.1功能需求分析本系统分为用户模块、菜品模块和管理员模块三个模块,其中管理员可以对用户和菜品进行管理,本系统具体功能如下:(1)登陆注册:订餐系统的登陆注册,用户通过登录功能可以安全的访问本系统,可以使用会话跟踪技术达成“记住我”的操作,使用Cookie将数据存储在服务器端,便于用户下次自动登录;注册功能,完成验证码的表单验证,防止恶意注册。(2)菜品信息管理模块:管理员对菜品信息进行增删改查。菜品浏览,用户可以点击查看详情,浏览整体菜品信息,并对菜品进行对应操作,添加购物车或者订单支付功能。管理员在后台对菜品信息进行增删改查的管理。(3)用户信息管理模块:对用户信息进行增删改查。管理员可以在后台管理页面中查询用户信息以及修改用户信息内容。(4)订餐模块:选择相应菜品进行订餐以及购买支付功能。作为网上订餐系统重中之重的当然是订单流程,在前端的订单流程中主要包括了结算、收货、评价等操作。(5)购物车模块:本系统中购物车的功能与常用软件的购物车功能基本一致,主要包含添加到购物车、编辑购物车、删除所选的菜品、以及下单的功能。(6)菜品分类:用户可以根据类型标签对菜品进行筛选,以便于更快寻找到需要查看的菜品。2.2.2非功能需求分析该系统的用户量较小,满足以下需求:效率:该网上订餐系统数据库访问速度最大延迟为1秒,用户访问网站时无影响,正常打开系统速度很快,无卡顿。可靠性:为了保证网上订餐系统的正常工作,本系统有较好的抗干扰能力,网速不好的情况下,出现故障时不会发生崩溃,重启或重新刷新页面后恢复正常。安全性:该网上订餐系统保证信息的可用性、完整性、机密性,用户不用担心账户安全问题和菜品信息问题。可用性:界面友好、方便用户使用,系统功能完善,操作简单,使用方便。适应性:系统能能够适应外部环境及需求的变化,用户可以在不同浏览器上进行访问。2.2.3安全性需求在本系统会维护用户个人信息的安全,用户登录时,为了保证用户数据安全,密码采用MD5加密方式传输,数据库存储密码后,以密文的形式展示,确保用户信息的安全性,同时传输到后台与数据库中密码比较,确保了数据传输的安全。2.3可行性分析2.3.1技术可行性本系统使用Java语言开发,会选择使用SpringBoot整合SSM框架来完成网上订餐系统,在大学实训期间,本人熟悉JavaWeb开发技术,在实训项目完成过相应需求,了解多种前后端开发框架,同时,以前也做过类似的项目,可以借鉴以前的经验。所以在系统的开发上是可行的,学校重视SpringBoot以及Vue框架技术,开展过对应的课程以及实训,在实训中有了项目开发的相关经验,能够明确需求分析,完善功能。Vue框架技术使用Axios来完成异步请求。Vue中ElementUI可以提供前端的多种按钮实现,为开发者前端页面的创造节省时间。JavaWeb中所运用的便捷及高效的SpringBoot框架以及前端所运用的Vue框架为本软件的敏捷开发提供了良好的条件。2.3.2经济可行性系统在开发过程中使用的IntelliJIDEA、Navicat等软件都是免费的,系统采用Java语言开发,系统开发过程中采用Springboot免费框架,支付功能暂未涉及付费接口,不牵扯到其他支付软件使用费用,在保证系统正常运行基础上,该系统具备经济可行性。2.4本章小结这一章以用例图表的方式来展示各个功能,并对它们进行了详细的说明。接着分析用户到系统,系统到用户的反馈,最后,为了满足用户的需要,对系统进行非功能的需求分析和可行性分析。 3系统总体设计3系统总体设计项目分析结束之后,本章节将对网上订餐系统进行总体设计,并通过图片文字加以阐述,本节将从架构设计、功能模块设计方面进行分析。3.1架构设计如图3.1所示,网上订餐系统采用前后端分离开发,采用Springboot框架,MySQL作为物理存储[13],前端采用Vue框架开发。系统采用Springboot+MyBatis框架[14]作为系统的整体架构,系统后台数据库采用MySQL数据库。本系统是一个B/S结构的系统,为了使数据库、需求业务处理以及用户界面之间能够关联而不产生依赖性,决定采用Springboot框架模式[15]。这样的结构有利于对本系统的维护,避免了相互依赖。本系统共有三种角色模块,分别为管理员模块、用户模块、菜品模块。共有登录注册、购物车、我的收藏、菜品推荐、菜品分类、菜品管理等业务[14]。图3.1系统架构图3.2功能模块设计本系统为网上订餐系统,系统主要分为用户模块、管理员模块,两个模块下包含一些子模块,用户模块包括商城展示、菜品浏览、购物车、订单流程。管理员模块包括用户管理、菜品管理、分类管理、订单管理。如图3.2所示:图3.2功能模块图3.2.1子模块功能设计(1)网上订餐系统前台商城功能模块设计用户主要的五个功能模块,分别是:登录注册、购物车、商城展示、商品信息、我的订单。如图3.3所示。具体功能如下。图3.3用户子模块图首页展示:一个系统必不可少的自然是菜品展示、分类展示以及热门菜品了,为了用户能够更好地体验系统,合理的分类以及准确的推荐是十分重要的,首页主要是一张大轮播图,其次有各种菜品的分类,便于用户根据分类快速找到自己想要的菜品。该模块的功能设计如图3.4所示。图3.4首页展示模块图菜品信息:菜品信息可以查看每个菜品的详细信息,购物车是为了给用户在使用中碰到一件或多件有意向但并未决定购买的菜品时,难以抉择是否购买的工具。用户可以将任意件菜品添加或是移出。当决定购买时,可以选择想要购买的菜品一起下单。子模块图如图3.5所示。图3.5菜品信息模块图购物车:购物车主要包含添加到购物车、编辑购物车、删除所选的菜品、以及下单的功能。购物车主要功能如图3.6所示。图3.6购物车模块图登录注册:整个系统中最核心的功能便是登录注册功能,用户成功登录才能够完整体验系统操作和使用,而管理员登录可以管理菜品信息以及菜品分类信息。登录注册主要功能如图3.7所示。图3.7登录注册模块图我的订单:用户需要下单后商家才能发货。订单主要功能如图3.8所示。图3.8订单模块图(2)网上订餐系统后台功能模块设计管理员为系统的管理者,同时在本系统中也扮演着商家的角色,管理着菜品的上下架以及订单的相关操作。如图3.9所示。具体功能如下所述。图3.9后台功能模块设计菜品管理:作为管理员,管理好菜品是重要的一环。主要包括添加菜品,对已有菜品的信息进行编辑修改,删除菜品。具体功能如下图3.10所示。图3.10菜品管理模块图订单管理:管理员可以查看到用户下的所有订单以及执行发货流程。在订单较多的情况下,可根据订单号搜索具体订单。如下图3.11所示。图3.11订单管理模块图分类管理:管理员可以添加、修改、删除菜品分类以及搜索具体分类。如图3.12所示。图3.12分类管理模块图用户管理:身为系统管理员,可以查看、编辑、删除当前所有使用本系统的用户。如下图3.13所示。图3.13用户管理模块图3.3数据库设计3.3.1数据库实体设计图3.14为用户实体属性图。主要属性有用户ID、用户名、密码、手机号。图3.14用户实体属性图图3.15为菜品实体属性图。主要属性有菜品ID、菜品图片、菜品名、菜品价格、菜品分类、菜品库存。图3.15菜品实体属性图图3.16为管理员实体属性图。主要属性有管理员id,管理员名称、手机号、密码。图3.16管理员实体属性图图3.17为订单实体属性图。主要属性有订单id、用户id、菜品id、订单创建时间、菜品数量、菜品价格。图3.17订单实体属性图图3.18为购物车实体属性图。主要属性有购物车id、订单id、用户id、购物车数量。图3.18购物车实体属性图菜品系统实体主要为用户实体、管理员实体、菜品实体、购物车实体、订单实体。在这个系统中,用户与商家是多对多的,同一用户能看到不同的菜品,不同的用户也能看到同样的菜品。管理员菜品的多对多关系是指同一种物品可能有几个管理员管理,同一位管理员也可能负责管理多种菜品。图3.19展示了这些主要的实体和相关联系。图3.19总E-R图3.3.2数据库表设计本系统具有良好的数据库,根据该菜品购物系统的需求分析,同时又根据相关部分数据流程,本系统共创建了4张表,以下为数据库中的表:(1)用户表字段包括用户编号、用户名、用户密码、用户手机号等。用户编号(user_id)为本表的主键,采用varchar数据类型自增,长度为32进行保存。用户名(user_name)采用varchar数据类型,长度为100进行保存。用户密码(user_password)采用varchar数据类型,长度为32进行保存。用户手机号(user_phone_number)采用varchar数据类型,长度为11进行保存,可空。具体用户表格如3.1所示。表3.1用户表字段类型可空主键标记备注User_idint(11)No√用户ID,自增usernamevarchar(20)No用户名,唯一passwordvarchar(32)No密码,使用MD5加密User_phone_numbervarchar(11)Yes用户电话(2)菜品表字段包括菜品编号、菜品名称、菜品价格、菜品售价、菜品标题等。菜品编号(product_id)为本表的主键,采用int数据类型自增,长度为11进行保存。菜品名称(product_name)采用varchar数据类型,长度为100进行保存。菜品所属分类(category_id)采用int数据类型进行保存,菜品标题(product_title)采用varchar数据类型,长度为30进行保存。菜品信息(product_intro)采用text数据类型保存,菜品图片(product_picture)采用varchar数据类型,长度为255进行保存,菜品价格(product_price)采用double数据类型进行保存,菜品售价(product_selling_price)采用double数据类型保存,菜品数量(product_num)采用int数据类型,长度为11进行保存,菜品销售量(product_sales)采用int数据类型,长度为11进行保存。具体地址表格如3.2所示。表3.2菜品表字段类型可空主键标记备注product_idint(11)No√菜品ID,自增product_namevarchar(100)No菜品名称category_idInt(11)No菜品所属分类idproduct_titlevarchar(30)No菜品标题product_introtextYes菜品信息product_picturevarchar(255)No菜品图片product_pricedoubleNo菜品价格product_selling_pricedoubleYes菜品售卖价格product_numInt(11)No菜品数量product_salesInt(11)No菜品销售量(3)购物车表字段包括购物车编号,用户编号,菜品编号,购物车数量等。购物车编号(id)为本表的主键,采用int数据类型自增,长度为11进行保存,不可空。用户编号(user_id)采用int数据类型,长度为11进行保存。菜品编号(product_id)采用int数据类型,长度为11进行保存。购物车数量(num)采用int数据类型,长度为11进行保存。具体菜品表格如3.3所示。表3.3购物车表字段类型可空主键标记备注idint(11)No√购物车ID,自增user_idint(11)No用户id,唯一product_idint(11)No菜品idnumint(11)No购物车数量(4)订单表字段包括订单编号、订单用户名、订单日期、订单价格等。订单编号(order_id)采用varchar数据类型,长度为20进行保存。订单用户(user_id)采用int数据类型,长度为11进行保存。订单日期(order_time)采用bigint数据类型,长度为20进行保存。订单价格(product_price)采用double数据类型进行保存。菜品数量(product_num)采用int数据类型,长度为11进行保存,菜品编号(product_id)采用int数据类型,长度为11进行保存。具体订单表格如3.4所示。 表3.4订单表字段类型可空主键标记备注idint(11)No√ID,自增order_idvarchar(20)No订单id,唯一user_idint(11)No用户idproduct_idint(11)No菜品idproduct_numint(11)No菜品数量product_pricedoubleNo菜品价格order_timebigint(20)No订单创建时间3.4接口设计本系统包括以下接口,如下所示:(1)/product/getById根据id获取菜品种类(2)/product/list管理员查看菜品列表(3)/product管理员搜索菜品(4)/product/add管理员添加菜品(5)/product/delete管理员删除菜品(6)/product/update管理员更新菜品(7)/catgory/list管理员查看菜品分类(8)/goods/getAll获取所有菜品信息(9)/goods/getAllBySelect通过分类获取所需菜品(10)/goods/getByName通过菜品名称获取菜品(11)/goods/detail获取菜品的详情3.5本章小结本章采用E-R曲线图对项目总体设计进行介绍,对各主体间的相互关系进行了分析,并通过功能模块图对各主体的功能进行了分析。然后通过分析数据库表的设计,对各个数据库的字段,类型以及说明进行详细的介绍。 4系统详细设计4系统详细设计本章在项目设计中,通过类图的方式,描述了系统的主要类以及类与类之间的关系,然后通过交互设计,描述了用户、管理员的时序图,进而明确了各个功能的响应操作,最后,通过流程图的方式,明确了各个功能从用户到系统再到用户的流程。4.1对象设计类图显示了模型中存在的类、类中的内容以及类与类之间的关系。本系统共设计了6个类,分别是用户类(User)、购物车类(ShoppingCart)、订单类(Order)、菜品分类类(Category)、菜品类(Product)如图4.1所示。图4.1类图4.2交互设计4.2.1用户时序图用户通过登录进入到菜品系统首页,在主页会看到热门菜品的轮播图。在主页下方的热门推荐中点击菜品即可进入到详情界面,选择喜欢的菜品加入购物车,在我的购物车中进行订单结算,生成订单。用户时序图如图4.2所示。图4.2用户时序图4.2.2管理员时序图管理员输入了正确的帐号和密码之后,就可以进入到后台的管理界面,然后可以对菜品进行管理,并对菜品进行增加、删除、修改、查找等操作;管理用户,增加、删除、修改、查找等操作。管理员时序图如图4.3所示。图4.3管理员时序图4.3功能模块设计4.3.1用户模块(1)用户登录注册模块本系统的登陆注册详细设计,系统的执行流程:由“登录界面”和“登录验证”组成,先是由前端登录页面提供填写帐号及验证码的窗口,获取到用户填写的帐号密码等数据并且判断输入的值是否符合规则,之后传输给后台查询该帐号是否可以正常登录,判断条件包括帐号是否存在、帐号密码是否匹配。根据结果系统将会判定系统是否能进入,如果登录成功通过,系统则会跳转到商城主页面,如果登录失败则提示用户错误信息。具体流程如图4.4所示。图4.4登录注册模块流程图(2)菜品管理功能模块菜品管理功能,对菜品信息的增删改查的基本操作。点击添加按钮,进入菜品添加表单,填写对应信息,判断填写内容是否规范,最后点击提交,与后端进行交互,将信息存入数据库,再通过查询全部操作返回前端页面展示。点击修改按钮,进入菜品修改表单,修改对应信息,判断填写内容是否规范,最后点击提交,与后端进行交互,将信息存入数据库,再通过查询全部操作返回前端页面展示。如图4.5所示。图4.5菜品管理模块流程图4.3.2购物车模块购物车,对订单信息的增删改查的基本操作。点击添加按钮或者拖拽菜品,后台获取订单id并将id存入session中,信息存入数据库,返回前端页面展示。点击修改按钮,进入购物车的订单修改表单,通过session获取对应订单的id,修改对应信息,判断填写内容是否规范,最后点击提交,与后端进行交互,将信息存入数据库,再通过查询全部操作返回前端页面展示。如图4.6所示。图4.6购物车管理模块流程图用户在浏览菜品的时候,可选择菜品是否加入购物车,在加入购物车时会判断用户是否登录,若未登录则需要先登录,才能加入购物车,然后下单。若直接下单也需要判断用户是否登录,未登录需先登录才能下单。在下单时正确填写所需信息,确认支付即可下单成功,本系统的支付是用支付宝的沙盒支付来实现的。如下图4.7所示图4.7下单流程图4.3.3菜品推荐模块本系统有热门菜品推荐,用户在系统首页下方的热门菜品中查看系统推荐的菜品,用户点击推荐菜品,则可进入该菜品的详情界面,菜品详情界面为用户推荐菜品内容。菜品推荐的实现过程:菜品推荐采集的数据无法定位到具体每个用户,统计出的数据都是规模数据,根据当前用户的收藏情况以及菜品销售量,进行菜品的随机推荐,这是系统基于菜品的协同推荐,菜品推荐功能流程如图4.8所示。图4.8菜品推荐模块流程图4.4本章小结在这一章中,本文先用类图来理解这个系统中的一些相关的类和它们之间的关系,再用时序图来阐述每个模块的功能是响应方式,最后用流程图来表示模块的具体流程。
5系统实现5系统实现前几章对系统项目整体的设计分析,软件已基本完成。本章主要是通过系统运行截图和逻辑代码,以直观的形式体现成果。5.1用户功能实现5.1.1用户登录注册模块用户需要进行登录验证才能体验完整服务,进行相应的购物车、我的收藏等功能。用户管理设计,管理员对User表进行相关的新增,修改,查询等操作,管理员登录成功后,进入后台管理页面,在用户管理列表中,进行新增用户操作,在前端填写相关数据后,返回给后端先判断用户名是否存在,再进行新增操作。如果用户名存在,则抛出用户已存在的异常。如果不存在,则进行添加操作。修改用户信息,在前端修改相关信息,返回给后端,和新增操作相似。删除操作,获取用户id后,根据id进行删除用户信息。登录功能,获取用户在前端所填写的密码,并返回给后端,进行md5加密比对,调用selectOne方法获取用户名是否存在。如果用户名以及密码正确,则登录成功,并以ResultMessage形式返回给前端,如果code值相同,则输出message登录成功信息。如果用户名或密码错误,则抛出相关异常。登录界面如图5.1所示,部分代码如下:publicUserlogin(Useruser){user.setPassword(MD5Util.MD5Encode(user.getPassword()+"","UTF-8"));Userone=userMapper.selectOne(user);if(one==null){thrownewXmException(ExceptionEnum.GET_USER_NOT_FOUND);}returnone;}图5.1登录界面图5.2为登录判断样例图。用户输入错误的账号或密码,就会跳出此提示。图5.2登录判断页面图5.3为登录失败样例图,会在页面右侧提示。图5.3登录失败页面图5.4为登录成功样例图,会在页面右侧提示,并在顶层显示用户名。图5.4登陆成功样例图注册功能,在后端idea中,使用mybatis以及springboot完成。建立好user用户的实体类,以及UserMapper接口继承Mapper<T>,在UserService中调用selectone方法查出用户名是否存在,如果用户名不存在,则可以进行注册功能,并对所填写密码进行md5加密。如果用户名存在,则抛出用户名已存在的异常。注册界面如图5.5所示:图5.5用户注册页面图5.6为注册成功样例图,会在页面右侧提示。图5.6注册成功页面5.1.2我的收藏功能用户可以在菜品详情界面将菜品添加到我的收藏中,在首页里的我的收藏查看菜品信息。用户可以对菜品进行收藏,并可以在用户中心的收藏列表中查看。在collect.vue中,调用/api/collect/user接口,调用系统中的collect接口中的add()方法时将用户的收藏的菜品id传输到数据库中,在我的收藏的详细信息栏中,可以看到用户的收藏菜品信息。用户收藏菜品成功,跳出成功提示,如图5.7所示,部分代码如下:publicvoidaddCollect(StringuserId,StringproductId){Collectcollect=newCollect();collect.setUserId(Integer.parseInt(userId));collect.setProductId(Integer.parseInt(productId));Collectone=collectMapper.selectOne(collect);if(one!=null){thrownewXmException(ExceptionEnum.SAVE_COLLECT_REUSE);}}图5.7菜品收藏成功页面收藏成功后,可以在我的收藏页面中查看菜品,如图5.8所示:图5.8我的收藏页面用户不能对已收藏的菜品重复收藏,否则提示收藏失败,收藏失败界面如图5.9所示:图5.9菜品重复收藏失败页面5.1.3购物车模块在该模块中,新用户需要注册才能在网站上下单,未注册的用户或注册失败的用户只能浏览,不能将菜品添加到购物车。在购物车里,使用者可以输入要买的物品的数目,或将物品从购物车里移除。如图5.10所示,用户在菜品详情页面选择菜品添加进购物车。购物车的实现过程:用户可以在购物车中查看到所有添加到购物车的信息。在shoppingcart.vue中,页面展示所有购物车内菜品的信息,调用系统中的/goods/details接口获取用户添加购物车中的菜品信息,部分代码如下:publicList<CartVo>getCartByUserId(StringuserId){ShoppingCartcart=newShoppingCart();cart.setUserId(Integer.parseInt(userId));List<ShoppingCart>list=null;List<CartVo>cartVoList=newArrayList<>();try{list=cartMapper.select(cart);for(ShoppingCartc:list){cartVoList.add(getCartVo(c));}}catch(Exceptione){e.printStackTrace();thrownewXmException(ExceptionEnum.GET_CART_ERROR);}returncartVoList;}图5.10菜品详情页面如图5.11,菜品添加到购物车成功页面。图5.11购物车添加成功页面如图5.12,用户可以在购物车中查看到所有添加到购物车的信息。在shoppingcart.vue中,页面展示所有购物车内菜品的信息。图5.12购物车管理页面5.2菜品功能实现5.2.1菜品分类模块菜品分类的实现过程:根据当前用户需求进行菜品的分类,进行同类别菜品的归纳整理,在Goods.vue中调用/api/category接口,调用其中的getAll(),查看菜品分类,进行商城主页的菜品分类,如图5.13所示,部分代码如下:publicvoidupdateCategory(Categorycategory){Categoryone=newCategory();one.setCategoryName(category.getCategoryName());if(categoryMapper.selectCount(one)==1){thrownewXmException(ExceptionEnum.SAVE_CATEGORY_REUSE);}try{categoryMapper.updateById(category);}catch(Exceptione){e.printStackTrace();thrownewXmException(ExceptionEnum.SAVE_CATEGORY_ERROR);}}图5.13菜品分类界面5.2.2菜品推荐算法模块用户在系统首页下方的热门菜品中查看系统推荐的菜品,用户点击推荐菜品,则可进入该菜品的详情界面,菜品详情界面为用户推荐菜品内容,如图5.14所示。菜品推荐的实现过程:菜品推荐采集的数据无法定位到具体每个用户,统计出的数据都是规模数据,根据当前用户购物情况,进行菜品的随机推荐,这是系统基于菜品的协同推荐。TreeSet<Product>preList=newTreeSet<Product>(newComparator<Product>(){
//重写compare方法按相似度Wij排序;当相似度Wij相同时,按销售量排序
@Override
publicintcompare(Producto1,Producto2){
if(o1.getProductId()!=o2.getProductId()){
return(int)((o1.getProductId()-o2.getProductId())*100);//返回值为0,表示同一元素
}
else{
//当相似度相同时,比较销售量
returno1.getProductSales()-o2.getProductSales();
}
}
});//预处理的列表还有一种就是手动推荐,系统可以根据菜品销售量进行推荐,使用productService.getHotProduct获取高销售量进行推荐,详细代码见附录E。图5.14热门菜品推荐页面5.3管理员功能实现5.3.1用户管理模块管理员在主页中进行管理员登录页面,如图5.15所示。图5.15管理员登陆页面如图5.16,管理员登录成功进入后台管理页面并提示登录成功。图5.16管理员登录成功页面管理员进入系统后台的用户管理,对用户进行增加、删除、修改和查找等操作,如图5.17所示。用户管理的实现过程:管理员可以在用户管理中对用户的信息进行管理。在member.vue中展示所有用户信息,调用系统中的/api/user/list?pagenum接口中的getList()方法获取所有用户信息,进行分页展示,系统将获取到的用户信息展示在后台管理用户管理页面处,部分代码如下:publicvoidupdateUser(Useruser){Userone=newUser();one.setUsername(user.getUsername());one.setUserPhoneNumber(user.getUserPhoneNumber());if(userMapper.selectCount(one)==1){thrownewXmException(ExceptionEnum.SAVE_USER_REUSE);}user.setPassword(MD5Util.MD5Encode(user.getPassword()+"","UTF-8"));try{userMapper.updateById(user);}catch(Exceptione){e.printStackTrace();thrownewXmException(ExceptionEnum.SAVE_USER_ERROR);}}图5.17用户管理页面5.3.2分类管理模块管理员进入系统后台的轮播图管理,对前台分类进行增加、删除、修改和查找等操作,如图5.18所示。菜品分类管理的实现过程:管理员可以在分类管理中对菜品分类的信息进行管理。在category.vue中展示所有菜品分类的信息,调用系统中的/api/category/list?pagenum接口中的getList()方法获取所有分类信息,进行分页展示,系统将获取到的菜品分类信息展示在后台管理菜品分类管理页面处,部分代码如下:if(userMapper.selectCount(one)==1){thrownewXmException(ExceptionEnum.SAVE_USER_REUSE);}user.setPassword(MD5Util.MD5Encode(user.getPassword()+"","UTF-8"));try{userMapper.updateById(user);}catch(Exceptione){e.printStackTrace();thrownewXmException(ExceptionEnum.SAVE_USER_ERROR);}图5.18分类管理页面5.3.3菜品管理模块管理员管理菜品模块主要是对菜品信息,订单管理操作。管理员对菜品信息、以及订单进行添加、删除、修改和查看操作,如图5.19、图5.20所示。菜品管理实现过程:管理员可以在菜品管理中对菜品信息、菜品分类进行改查,在订单管理中对订单进行增删改查。在product.vue中展示所有菜品信息和分类,调用系统中的/api/product/list?pagenum接口中的getList()方法获取菜品信息进行分页展示,将获取到的信息展示在后台管理菜品管理以及订单管理处。图5.19菜品管理页面图5.20查看订单页面5.4本章小结本章主要介绍了本系统的程序代码,并以图文并茂的形式介绍了本系统的程序流程,并在附录中附上了具体的程序代码。 6系统测试
6系统测试通过前几章对项目的分析和设计,软件已初步完成。随着软件技术的不断发展,软件本身的复杂性逐渐提高。本章节将展现软件的部分测试过程。6.1测试方法和目标软件测试的方法包括白盒测试、黑盒测试、集成测试和单元测试。其中,白盒测试是按照程序内部的结构测试程序,黑盒测试则是在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试。集成测试是为了在集成时测试模块/组件,以验证它们是否按预期工作,而单元测试则是对软件产品的局部且特定的功能进行测试。本次测试的目标是发现并排除主要功能的故障,提升关键功能的运行效率。6.2测试过程和结果6.2.1功能测试对软件的部分功能进行测试,验证这些功能是否符合预期要求。登录功能测试。测试内容主要以用户信息错误是否提示,不输入信息是否能登录成功,输入账号密码正确后能否登录成功。如表6.1所示。表6.1登录测试表测试项目名称:网上订餐系统设计测试用例编号:Test_1测试项目标题:登录功能的实现测试内容验证登录功能的实现测试环境与系统配置软件环境:Windows10;硬件环境:CPU:2.50GHZ内存:8GB硬盘:30GB测试输入数据测试次数8次预期结果1信息错误,登录失败;2信息正确,登录成功。测试过程a不输入信息,登录失败1用户注册完毕后,进入登录界面2不输入信息,点击“登录”按钮3提示登录失败b不输入用户名/密码,登录失败1不输入用户名/密码,点击“登录”按钮2提示登录失败c输入正确信息,登录成功1输入正确用户名、密码2提示登录成功测试结果输入正确用户名和密码,点击“登录”按钮,则能登录成功;否则,登录失败。测试结论功能项全部实现备注无注册功能测试。测试内容主要以用户信息错误是否提示,两次密码不一致是否能注册成功,输入合法的账号密码后能否注册成功。如表6.2所示。表6.2注册测试表测试项目名称:网上订餐系统设计测试用例编号:Test_2测试项目标题:注册功能的实现测试内容验证注册功能的实现测试环境与系统配置软件环境:Windows10;硬件环境:CPU:2.50GHZ内存:8GB硬盘:30GB测试输入数据测试次数7次预期结果1信息错误,注册失败;2信息正确,注册成功。测试过程a信息正确,注册成功1用户进入首页,点击“立即注册”按钮2输入用户名、密码、确认密码,点击“注册”按钮3提示注册成功b信息错误,注册失败1输入密码与确认密码不一致2提示密码不一致。测试结果输入正确用户名和密码,点击“登录”按钮,则能登录成功;否则,登录失败。测试结论功能项全部实现备注无菜品详情功能测试。测试内容主要以菜品详情页面出现未知错误是否会跳转到错误页面,菜品详情页面能否展示,菜品详情能否找到对应菜品信息。如表6.3所示。表6.3菜品详情测试表测试项目名称:网上订餐系统设计测试用例编号:Test_3测试项目标题:菜品详情功能的实现测试内容验证菜品详情功能的实现测试环境与系统配置软件环境:Windows10;硬件环境:CPU:2.50GHZ内存:8GB硬盘:30GB测试输入数据测试次数9次预期结果1菜品详情出现未知错误,跳转到错误页面;2菜品详情页面正常展示。3菜品详情未能找到对应菜品信息测试过程a菜品详情页面正常展示1用户进入首页,点击对应菜品2成功跳转到该菜品页面b菜品详情未能找到对应菜品信息1未能找到该菜品的id,不存在菜品详情页面2无法跳转到对应页面,提示获取菜品详情失败c菜品详情出现未知错误,跳转到错误页面1在获取菜品详情时出现未知错误,无法展示2跳转到错误页面测试结果用户在首页点击对应菜品,进入到相关菜品详情页面测试结论功能项全部实现备注无热门菜品功能测试测试内容主要以热门菜品为空,菜品销售量都为0,是否提示未能发现相关热门菜品,热门菜品根据销售量展示在热门菜品栏下,是否可以进行轮换和浏览,热门菜品出现未知错误,是否会提示菜品信息错误。如表6.4所示。表6.4热门菜品测试表测试项目名称:网上订餐系统设计测试用例编号:Test_4测试项目标题:热门菜品功能的实现测试内容验证热门菜品功能的实现测试环境与系统配置软件环境:Windows10;硬件环境:CPU:2.50GHZ内存:8GB硬盘:30GB测试输入数据测试次数6次预期结果1热门菜品为空,菜品销售量都为0,提示未能发现相关热门菜品;2热门菜品根据销售量展示在热门菜品栏下,轮换。3热门菜品出现未知错误,提示菜品信息错误测试过程a热门菜品根据销售量展示在热门菜品栏下,轮换1用户进入首页,查看热门菜品栏2热门菜品能够正常轮换展示b热门菜品为空,菜品销售量都为0,提示未能发现相关热门菜品1热门菜品为空,无法查看2提示热门菜品未能找到c热门菜品出现未知错误,提示菜品信息错误1在获取热门菜品时出现未知错误,无法展示2跳转到错误页面测试结果用户在首页查看热门菜品,热门菜品能够正常轮换展示测试结论功能项全部实现备注无我的收藏功能测试测试内容主要以进入菜品详情页面,将菜品加入我的收藏,是否能在我的收藏中查看以及使用。我的收藏是否能重复添加,重复添加是否提示收藏错误信息。是否可以删除我的收藏。如表6.5所示。表6.5我的收藏测试表测试项目名称:网上订餐系统设计测试用例编号:Test_5测试项目标题:我的收藏功能的实现测试内容验证我的收藏功能的实现测试环境与系统配置软件环境:Windows10;硬件环境:CPU:2.50GHZ内存:8GB硬盘:30GB测试输入数据测试次数8次预期结果1进入菜品详情页面,将菜品加入我的收藏,并能在我的收藏中查看以及使用;2我的收藏不能重复添加,重复添加则提示收藏错误信息。3删除我的收藏,正常删除测试过程a进入菜品详情页面,将菜品加入我的收藏,并能在我的收藏中查看以及使用1用户进入首页,进入相关菜品详情页面2点击收藏,将菜品存入我的收藏3查看我的收藏是否收录b我的收藏不能重复添加,重复添加则提示收藏错误信息1将同一个菜品重复收藏2提示菜品收藏出现错误c删除我的收藏,正常删除1进入我的收藏,点击对应菜品的删除2成功删除菜品测试结果用户在菜品详情页面能够正常收藏,并且在我的收藏中可以删除以及提示是否重复添加。测试结论功能项全部实现备注无购物车功能测试测试内容主要以进入菜品详情页面,是否能将菜品加入购物车,是否能在购物车中查看以及使用。菜品是否可以重复添加,数量进行加1操作,以及价格求和。是否可以删除购物车中的菜品。如表6.6所示。表6.6购物车测试表测试项目名称:网上订餐系统设计测试用例编号:Test_6测试项目标题:购物车功能的实现测试内容验证购物车功能的实现测试环境与系统配置软件环境:Windows10;硬件环境:CPU:2.50GHZ内存:8GB硬盘:30GB测试输入数据测试次数9次预期结果1进入菜品详情页面,将菜品加入购物车,并能在购物车中查看以及使用;2菜品可以重复添加,数量进行加1操作,以及价格求和。3删除购物车中的菜品,正常删除测试过程a进入菜品详情页面,将菜品加入购物车,并能在购物车中查看以及使用1用户进入首页,进入相关菜品详情页面2点击加入购物车,将菜品存入购物车3查看购物车中菜品信息b菜品可以重复添加,数量进行加1操作,以及价格求和1将同一个菜品重复收藏,或者在购物车中进行加1减1操作2购物车中菜品数量以及总价发生对应改变c删除购物车中的菜品,正常删除1进入购物车,点击对应菜品的删除2成功删除菜品测试结果用户在菜品详情页面能够正常将菜品加入购物车,以及购物车菜品数量和总价的更新,菜品的正常删除测试结论功能项全部实现备注无订单结算功能测试测试内容主要以进入菜品详情页面,将菜品加入购物车,是否能在购物车中查看以及支付。在购物车中进行支付功能,是否能跳转到确认地址页面,并进行订单结算。完成支付后,是否能够生成订单,并清除购物车的菜品信息以及菜品的库存数量。如表6.7所示。表6.7订单结算测试表测试项目名称:网上订餐系统设计测试用例编号:Test_7测试项目标题:订单结算功能的实现测试内容验证订单结算功能的实现测试环境与系统配置软件环境:Windows10;硬件环境:CPU:2.50GHZ内存:8GB硬盘:30GB测试输入数据测试次数9次预期结果1进入菜品详情页面,将菜品加入购物车,并能在购物车中查看以及支付;2在购物车中进行支付功能,跳转到确认地址页面,并进行订单结算。3完成支付后,生成订单,并清除购物车的菜品信息以及菜品的库存数量测试过程a进入菜品详情页面,将菜品加入购物车,并能在购物车中查看以及支付1用户进入首页,进入相关菜品详情页面2点击加入购物车,将菜品存入购物车3查看购物车中菜品信息b在购物车中进行支付功能,跳转到确认地址页面,并进行订单结算1在购物车中点击支付,跳转到确认地址页面2支付总价,提示支付成功c完成支付后,生成订单1支付完成后,会提示订单产生2清除购物车里的菜品信息以及扣除对应的菜品库存数量测试结果用户在菜品详情页面能够正常将菜品加入购物车,以及购物车菜品数量和总价的更新,并进行菜品的支付功能,生成相关订单。菜品库存数量也能更新,销售量增加。测试结论功能项全部实现备注无6.3本章小结本章节仅展示了对软件中部分常用功能和性能的测试。是根据功能需求来描述,为实施网站的系统测试,讲述如何进行测试活动,以及对系统的一些模块,或是某个具体的控件进行测试等等,主要采取黑盒测试为主,白盒测试为辅的方式。在测试内容时,也会出现预期结果之外的结果,如果缺少了测试环节,项目代码的bug会存在更多,以及面向用户使用,会出现更多问题。测试环节则是为了更好地完善自己的项目代码,虽然代码仍然存在很多问题,但是基于用户需求,会逐渐完善系统功能,保证良好的体验。 7总结与展望7总结与展望本网站为了方便用户在线购买自己喜欢的菜品,能够节省更多时间来完成个人事务,方便用户购买到实惠的菜品。本项目虽然仍然存在很多问题,但是却是我对完整项目的一个认识。我能够更加理解项目整体开发流程,以及未来要做的相关工作。开发是很困难,但是不断地学习,遇到并解决各种问题,让我感受到自己的进步,从懵懂变得了解。本文主要完成了以下工作:(1)首先通过研究背景、研究现状、关键技术对该系统所用的技术进行分析学习,做好前期的准备工作。(2)其次对该系统进行业务、需求、可行性分析,通过对该系统的用例图、数据流图分析了解该系统的大致定位。(3)然后通过架构设计、功能模块设计、数据库设计、接口设计对该系统进行了一个总体的设计,了解了该系统的主要功能、数据库和接口,该系统的主要功能是管理员能够对用户和菜品进行管理,管理员管理用户模块包括对用户信息进行删除、修改、查询的操作,管理员管理菜品模块包括对菜品信息和菜品分类进行添加、删除的操作。管理员对订单进行管理,包括删除,修改,查看产生的订单,以及确定接收。(4)接着对该系统进行项目、交互、功能模块性的设计,通过详细的设计了解到该系统的类图、时序图和流程图,了解到该系统的相关类和运行逻辑。(5)后来,通过三个模块的界面设计,了解到该系统的前后端主要实现原理。(6)最后,对本系统进行了功能与非功能的测试,以保证本系统的可靠性。虽然该系统已取得了较好的效果,但仍有不少缺陷,如版面设计不够完善,颜色对比度不够,以及一些细节方面的功能有待改进。在后期,对用户,管理员,菜品等相关的功能进行了进一步的完善。 参考文献 参考文献参考文献[1]王金朔,孙延辉.基于SSM和Java的网上订餐系统设计[J].信息通信,2018,No.190(10):99-100.[2]刘娟.基于ASP.NET的网上订餐系统的分析与设计[J].数字技术与应用,2018,36(09):156-157.DOI:10.19695/12-1369.2018.09.76.[3]文明瑶.基于服务的网上订餐系统的设计与实现[J].佳木斯职业学院学报,2017,No.176(07):427-428..[4]张蕾.校园网上订餐管理系统的设计与实现[D].华北理工大学,2017.[5]范博杰.基于JavaWeb的网上订餐系统的设计与实现[D].东北大学,2016.[6]邓雄.基于SSH的网上订餐系统的设计与实现[D].电子科技大学,2017.[7]OnlineFoodOrderingSystem[J].InternationalJournalofRecentTechnologyandEngineering,2019,8(2S3).[8]徐帆.网上订餐系统的设计与实现[D].南昌大学,2018.[9]郭睿.基于地点访问信息的手机订餐评价系统的设计与实现[D].电子科技大学,2015..[10]黄丽.基于顾客选择行为的网络订餐预订控制研究[D].电子科技大学,2012[11]崔钰.订餐系统的设计与实现[D].电子科技大学,2014.[12]祝京京.基于UCD的美团外卖平台用户体验优化研究[D].北京交通大学,2021.DOI:10.26944/ki.gbfju.2021.003261.[13]肖睿,喻晓路,朱微,张超,戴立坤.JavaWeb应用设计及实战[M].人民邮电出版社:大数据开发实战系列,201801.238.[14]ShuoJinFang,KeJiMao,JianShen.TheDesignandImplementationofOnlineMealOrderingSystem[J].AdvancedMaterialsResearch,2012,1917(562-564)[15]CBEST:TheOnlyBestRestaurantOnlineOrderingSysteminCanada[J].M2Presswire,2022... 致谢附录附录A:登录注册核心代码publicUserlogin(Useruser){user.setPassword(MD5Util.MD5Encode(user.getPassword()+"","UTF-8"));Userone=userMapper.selectOne(user);if(one==null){thrownewXmException(ExceptionEnum.GET_USER_NOT_FOUND);}returnone;}publicUserloginAdmin(Useruser){Userone=userMapper.selectOne(user);if(one==null){thrownewXmException(ExceptionEnum.GET_USER_NOT_FOUND);}returnone;}publicvoidregister(Useruser){Userone=newUser();one.setUsername(user.getUsername());//先去看看用户名是否重复if(userMapper.selectCount(one)==1){//用户名已存在thrownewXmException(ExceptionEnum.SAVE_USER_REUSE);}//使用md5对密码进行加密user.setPassword(MD5Util.MD5Encode(user.getPassword()+"","UTF-8"));//存入数据库try{userMapper.insert(user);}catch(Exceptione){e.printStackTrace();thrownewXmException(ExceptionEnum.SAVE_USER_ERROR);}}publicvoidisUserName(Stringusername){Userone=newUser();one.setUsername(username);//先去看看用户名是否重复if(userMapper.selectCount(one)==1){//用户名已存在thrownewXmException(ExceptionEnum.SAVE_USER_REUSE);}}附录B:我的收藏核心代码publicvoidaddCollect(StringuserId,StringproductId){Collectcollect=newCollect();collect.setUserId(Integer.parseInt(userId));collect.setProductId(Integer.parseInt(productId));//先看看是否数据库中已存在Collectone=collectMapper.selectOne(collect);if(one!=null){thrownewXmException(ExceptionEnum.SAVE_COLLECT_REUSE);}//不存在,添加收藏collect.setCollectTime(newDate().getTime());intcount=collectMapper.insert(collect);if(count!=1){thrownewXmException(ExceptionEnum.SAVE_COLLECT_ERROR);}}publicList<Product>getCollect(StringuserId){List<Product>list=null;try{list=collectMapper.getCollect(userId);if(ArrayUtils.isEmpty(list.toArray())){thrownewXmException(ExceptionEnum.GET_COLLECT_NOT_FOUND);}}catch(XmExceptione){e.printStackTrace();thrownewXmException(ExceptionEnum.GET_COLLECT_ERROR);}returnlist;}publicvoiddeleteCollect(StringuserId,StringproductId){Collectcollect=newCollect();collect.setUserId(Integer.parseInt(userId));collect.setProductId(Integer.parseInt(productId));try{intcount=collectMapper.delete(collect);if(count!=1){thrownewXmException(ExceptionEnum.DELETE_COLLECT_ERROR);}}catch(XmExceptione){e.printStackTrace();thrownewXmException(ExceptionEnum.DELETE_COLLECT_ERROR);}}附录C:购物车核心代码publicList<CartVo>getCartByUserId(StringuserId){ShoppingCartcart=newShoppingCart();cart.setUserId(Integer.parseInt(userId));List<ShoppingCart>list=null;List<CartVo>cartVoList=newArrayList<>();try{list=cartMapper.select(cart);for(ShoppingCartc:list){cartVoList.add(getCartVo(c));}}catch(Exceptione){e.printStackTrace();thrownewXmException(ExceptionEnum.GET_CART_ERROR);}returncartVoList;}@TransactionalpublicCartVoaddCart(StringproductId,StringuserId){ShoppingCartcart=newShoppingCart();cart.setUserId(Integer.parseInt(userId));cart.setProductId(Integer.parseInt(productId));//查看数据库是否已存在,存在数量直接加1ShoppingCartone=cartMapper.selectOne(cart);if(one!=null){//还要判断是否达到该菜品规定上限if(one.getNum()>=5){//TODO这里默认设为5后期再动态修改thrownewXmException(ExceptionEnum.ADD_CART_NUM_UPPER);}one.setNum(one.getNum()+1);cartMapper.updateByPrimaryKey(one);returnnull;}else{//不存在cart.setNum(1);cartMapper.insert(cart);returngetCartVo(cart);}}/***封装类*@paramcart*@return*/privateCartVogetCartVo(ShoppingCartcart){//获取菜品,用于封装下面的类Productproduct=productMapper.selectByPrimaryKey(cart.getProductId());//返回购物车详情CartVocartVo=newCartVo();cartVo.setId(cart.getId());cartVo.setProductId(cart.getProductId());cartVo.setProductName(product.getProductName());cartVo.setProductImg(product.getProductPicture());cartVo.setPrice(product.getProductSellingPrice());cartVo.setNum(cart.getNum());cartVo.setMaxNum(5);//TODO这里默认设为5后期再动态修改cartVo.setCheck(false);returncartVo;}publicvoidupdateCartNum(StringcartId,StringuserId,Stringnum){ShoppingCartcart=newShoppingCart();cart.setId(Integer.parseInt(cartId));cart.setUserId(Integer.parseInt(userId));cart.setNum(Integer.parseInt(num));try{intcount=cartMapper.updateByPrimaryKeySelective(cart);if(count!=1){thrownewXmException(ExceptionEnum.UPDATE_CART_ERROR);}}catch(Exceptione){e.printStackTrace();thrownewXmException(ExceptionEnum.UPDATE_CART_ERROR);}}publicvoiddeleteCart(StringcartId,StringuserId){S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年珠宝维护系统集成协议
- 2026年咨询审计隐私合规合同
- 2026年庆阳市西峰区林业系统人员招聘笔试模拟试题及答案解析
- 2026年游戏建设能源托管协议
- 2026年泰州市高港区林业系统人员招聘笔试模拟试题及答案解析
- 2026年福建省宁德市广播电视台(融媒体中心)人员招聘考试备考题库及答案解析
- 2026年广西壮族自治区桂林市林业系统人员招聘考试参考试题及答案解析
- 2026年厦门市翔安区林业系统人员招聘考试模拟试题及答案解析
- 2026年马鞍山市雨山区广播电视台(融媒体中心)人员招聘笔试参考题库及答案解析
- 2026年枣庄市市中区广播电视台(融媒体中心)人员招聘考试备考试题及答案解析
- GB/T 44994-2024声学助听器验配管理
- 智能网联汽车计算平台部署与测试 课件 5.6 ROS通信系统的构建
- 2024年新高考I卷数学高考试卷(原卷+答案)
- 衣食住行见证改革开放时代变迁-(修订)
- 商务数据分析基础与应用(微课版)王华新课后题答案
- 10S507建筑小区埋地塑料给水管道施工
- 拜访函公文格式范文8篇-20210830125246
- DB11∕T 1692-2019 城市树木健康诊断技术规程
- 《建筑结构加固工程施工质量验收规范》
- CJT 297-2016 桥梁缆索用高密度聚乙烯护套料
- DLT 5293-2013 电气装置安装工程 电气设备交接试验报告统一格式
评论
0/150
提交评论