毕业设计开发全解析——基于微信小程序的校园团购系统31314【部署教程+可完整运行源码+数据库】
本文设计并实现了一个基于SpringBoot框架和微信小程序的校园团购系统,旨在提升校园团购服务的便捷性和管理效率。系统采用前后端分离架构,后端使用SpringBoot处理业务逻辑,前端采用uni-app框架开发跨平台应用,数据库选用MySQL进行数据存储。系统主要分为普通用户、商家用户和管理员三大模块,实现了用户管理、商品展示、订单处理、投诉反馈等核心功能。通过测试验证,系统功能完整、性能稳定,

摘 要
随着移动互联网的迅猛发展,校园生活的便利性日益受到关注,团购作为一种新兴的消费模式在校园内逐渐流行。因此,本系统借助先进的现代化技术设计并实现一个高效便捷的校园团购系统,以提升校园团购效率和水平,为学生提供更加便捷的购物体验。
本系统后端采用SpringBoot框架实现业务逻辑和数据处理,前端使用uni-app框架结合微信小程序技术开发用户界面,数据库选用MySQL进行数据存储与管理。系统分为普通用户、商家用户和管理员三大核心部分,主要涵盖了用户管理、用户反馈管理、用户投诉管理、商家投诉管理、财务报表管理、广告信息管理、系统管理、通知公告管理、资源管理、商城管理以及数据统计等功能,通过引入合理的流程和权限管理,确保各类用户在系统中进行高效的交互,能够实现对校园团购信息的全面管理。通过整合前后端技术,最终构建与实现了一个用户友好、便捷高效的校园团购平台。
该系统的实施不仅为学生提供了一种实惠便利的购物方式,还为商家提供了新的销售渠道,可以有效提升校园购物的便捷性和可靠性,推动校园经济的信息化发展,为校园营造健康的消费环境,具有良好的实践意义和推广价值。
关键词:校园团购系统;SpringBoot;Java;微信小程序;uni-app
Abstract
With the rapid development of mobile Internet, the convenience of campus life is increasingly concerned. Group buying, as a new consumption mode, is gradually popular on campus. Therefore, this system utilizes advanced modern technology to design and implement an efficient and convenient campus group buying system, in order to improve the efficiency and level of campus group buying and provide students with a more convenient shopping experience.
The backend of this system adopts the SpringBoot framework to implement business logic and data processing. The frontend uses the uni app framework combined with WeChat mini program technology to develop the user interface. MySQL is used for data storage and management. The system is divided into three core parts: ordinary users, merchant users, and administrators. It mainly covers functions such as user management, user feedback management, user complaint management, merchant complaint management, financial statement management, advertising information management, system management, notification and announcement management, resource management, mall management, and data statistics. By introducing reasonable processes and permission management, it ensures efficient interaction among various users in the system and enables comprehensive management of campus group buying information. By integrating front-end and back-end technologies, a user-friendly, convenient, and efficient dormitory repair platform was ultimately built and implemented.
The implementation of this system not only provides students with an affordable and convenient shopping method, but also offers new sales channels for businesses, which can effectively enhance the convenience and reliability of campus shopping, promote the informationization development of campus economy, and create a healthy consumption environment for campuses. It has good practical significance and promotional value.
Keywords:Campus group buying system; SpringBoot; Java; WeChat Mini Program; uni-app
目录
随着互联网技术的迅猛发展和智能手机的普及,传统的消费模式正经历着深刻的变革。以微信、支付宝等为代表的移动支付手段的广泛应用,使得线上购物逐渐成为人们日常生活的重要组成部分。校园作为一个特定的市场,消费群体主要以年轻学生为主,具备强烈的价格敏感性和集体购买意识,这为团购模式的发展提供了良好的土壤。
在这样的时代背景下,校园团购逐渐兴起,成为连接学生与商家的一座桥梁。通过团购,学生不仅能够享受更优惠的价格,还能够形成良好的社区氛围。然而,传统校园团购方式存在信息不对称、缺乏有效管理和投诉处理响应低下等问题,亟需通过技术手段进行优化与提升。所以,基于微信小程序开发一套校园团购系统,是符合当下时代趋势和市场需求的创新尝试。
本研究主要通过采用SpringBoot框架,结合uni-app和微信小程序技术构建一套功能全面且操作简便的校园团购系统,探讨如何借助现代化先进技术提升校园团购服务管理效率和用户体验,具有重要的理论与实践价值。
本研究将前沿技术应用于校园团购服务管理的实际场景,为校园电子商务的发展提供新的视角和方法,丰富信息技术在校园管理和团购模式的研究理论,可以为后续相关研究和类似电子商务系统的开发提供参考。通过开发基于微信小程序的团购系统,可以解决线下团购中遇到的繁琐问题,构建一个综合性的校园购物平台,让校内人员能够享受到更优质、实惠且便利的购物服务,提高校园消费的整体体验。同时该系统能够为商家提供了一个高效便捷的销售管理工具,不仅可以实现商品及订单的高效管理和有效推广销售,而且能通过系统的数据统计与分析,帮助商家更好地了解市场需求和用户偏好,增强运营决策的科学性,优化资源配置,提升市场竞争力。通过提供完善的反馈和投诉管理机制,管理者能借助系统及时掌握用户需求与存在的问题,进而在服务质量上进行改进,提升整体管理水平。本系统的实施还可以推动团购经济模式的发展,促进校园内外的商业交流合作,形成良性循环,推动校园购物的数字化和信息化转型,从而增强校园经济的活力,提升校园生活质量。
国外方面,尤其是欧美等发达国家,团购模式的成熟度较高,相关研究也更为深入,主要集中在商业模式、消费者心理及网络平台的应用等方面。国外研究者重点关注团购对商家的影响,分析了团购在拉动消费、提高品牌知名度和促进市场竞争方面的作用,指出团购能够有效提升小型商家的客流量和销售额,特别是在经济不景气时,团购成为商家吸引消费者的一种有效手段。以全球知名的团购网站Groupon为例,通过与本地商家的合作,提高小型商家的市场曝光,成功帮助多个小企业摆脱困境,并推出“大幅折扣”策略迅速吸引了大量用户,激发消费者的团购热情。国外研究还探讨了Groupon在消费者决策中的影响,包括社会认同、稀缺性和时间限制等因素。研究发现,紧迫感和稀缺性能够显著提高消费者的购买意愿,商家可以利用这一心理特点来设计促销活动。另外国外研究者探讨了社交网络平台在团购中的作用,认为社交媒体能够显著提升消费者参与度。如开展基于Facebook或Instagram的团购活动,通过社交平台传播吸引更多用户的同时,能够显著提高团购的成交率。
近年来,国内对校园团购模式的研究和实践逐渐增多。随着移动互联网的普及,阿里巴巴、拼多多等电商平台对团购模式的构建推广,越来越多的高校纷纷开始尝试在校园内推广团购服务。研究侧重于在市场需求、用户行为、运营模式等领域。国内研究深入探讨了高校学生的购物习惯、心理需求以及团购决策影响因素。例如,通过针对校园团购平台的问卷调查,指出价格优惠、商品质量和信任度是学生选择团购的主要考虑因素。该研究结果可以为商家的运营决策提供参考,如在设计团购活动时应优先考虑价格因素,并增强用户的信任。国内学者还分析了多种校园团购平台的商业模式,例如“拼多多”与“美团”等成功案例。其中拼多多以社交团购为核心,通过拼团模式吸引大量用户,形成了良好的网络效应。研究指出,校园团购平台可以借鉴此成功模式,通过社交分享增加学生间的互动,提升购买意愿。另外国内研究集中在用户体验方面,强调系统界面的简洁性和操作便捷性,表示简化的操作流程、个性化推荐和多样化支付方式都能显著提升用户满意度。如专为大学生设计的团购小程序“校园好物”,该平台通过丰富的商品类型、简洁的操作界面以及定期的促销活动吸引了众多学生使用。
Java语言是一种广泛使用的高级编程语言,具有平台无关性、面向对象特性和丰富的标准库[1]。Java的面向对象特性使得代码复用和模块化变得更加容易,促进了软件的维护和扩展。Java支持多线程编程,允许开发者在同一程序中同时执行多个任务,提升了应用程序的性能。Java语言的语法结构简洁且易于理解,吸引了大量开发者。Java的标准库包含数据结构、输入输出处理、网络编程等众多功能模块[2]。这使得开发者在构建应用程序时能够高效利用已有工具,减少重复劳动。Java广泛应用于企业级应用、移动应用、Web开发和大数据处理等领域。
SpringBoot框架是基于Spring框架的开源项目,简化Java应用程序的开发过程。SpringBoot通过约定优于配置的理念,减少了传统Spring应用的繁琐配置,开发者可以快速搭建和部署应用程序[3]。SpringBoot框架提供了一系列默认配置,支持自动化配置,简化了应用启动的复杂性。SpringBoot内置了嵌入式Web服务器,使得开发者能够独立运行Java应用,无需外部容器。SpringBoot支持微服务架构,开发者可以轻松创建和管理多个微服务。SpringBoot集成了丰富的功能模块,包括安全、数据访问和消息中间件等,支持RESTful API和JSON数据格式的处理[4]。SpringBoot还提供了强大的监控和管理功能,允许开发者实时监控应用的健康状态和性能指标。借助SpringBoot,开发者能够高效构建和维护现代企业级应用,满足复杂业务需求。
2.3 uni-app框架
uni-app是一个使用Vue.js开发所有前端应用的框架,只需编写一套代码即可编译到iOS、Android、H5、以及各种小程序等多个平台,用户通过uni-app建立的移动端应用能够方便地进行各种功能操作[5]。对于需要跨多个平台部署的应用来说,uni-app能够极大地提高开发效率,减少了不同平台间开发的学习成本和维护成本。
2.4 微信小程序
微信小程序是一种不需要下载安装即可在微信内使用的应用程序,用户只需扫描二维码或搜索特定名称即可打开应用[6]。它为用户提供了一种便捷的应用体验,同时也为开发者提供了便捷的开发工具与环境,能够降低开发门槛,并且可以充分利用微信庞大的用户基础进行推广。
MySQL是一种开源关系型数据库管理系统,广泛应用于Web应用和企业级数据存储。MySQL支持结构化查询语言,允许开发者通过标准语句进行数据的创建、读取、更新和删除操作。数据库通过表格形式组织数据,支持数据完整性和约束条件的定义[7]。MySQL的存储引擎机制使得用户可以根据具体需求选择不同的存储引擎,以优化性能和功能。MySQL具有高性能和可扩展性,支持大规模数据存储和高并发访问。系统提供了丰富的用户权限管理和数据加密安全特性。MySQL能够与多种编程语言和框架兼容,广泛应用于内容管理系统、电子商务平台和数据分析等各种场景[8]。
B/S(Browser/Server)架构是一种基于浏览器和服务器的系统架构模式,用户通过浏览器与服务器进行交互[9]。B/S架构简化了客户端的部署和管理,用户无需在本地安装复杂的软件,只需使用标准浏览器即可访问应用程序。服务器端负责处理业务逻辑和数据存储,客户端则主要负责展示用户界面和数据交互[10]。B/S架构通常采用Web技术进行实现,包括HTML、CSS和JavaScript等。用户在浏览器中发起请求,服务器响应并返回数据。数据传输通常通过HTTP或HTTPS协议进行,B/S架构的灵活性使其适用于在线购物、信息管理系统和社交网络等各类应用场景。由于其易于扩展性,B/S架构可以方便地支持大规模用户访问,适应不断变化的业务需求。
系统选择当前主流的Java编程语言,并采用Spring Boot作为后端开发框架,可以充分利用其强大的生态系统和自动配置能力,加速开发进程。同时,利用uni-app开发前端能够确保应用在不同平台上的兼容性和一致性,降低开发成本。微信小程序的集成也使得用户可以通过最便捷的方式访问服务。MySQL作为关系型数据库解决方案,能够提供稳定的数据存储和管理功能。另个人拥有丰富的相关技术经验,能够有效应对潜在技术挑战。所以这些技术的选择都是成熟可靠的,具备较高的技术可行性。
本系统设计采用B/S架构,用户只需要通过浏览器或微信小程序就能访问系统,极大地降低了用户的使用门槛。同时系统具备直观友好的用户界面,支持简便的导航和功能访问,极大地提升了用户的使用体验。系统还提供了自定义的工作流程和角色权限管理,使不同层级的用户能够快速上手,完成各自的任务。所以,该系统具有很高的操作可行性。
系统所使用的软件为开源技术,能够降低了开发和使用费用,同时硬件成本较低,使得整体初始投入相对合理,具备较高性价比。另外微信小程序无需用户额外下载安装,降低了推广成本。在开发完成上线后,可通过广告或其他增值服务支持系统后期运维成本。因此,系统在经济上是完全可行的。
3.2.1 用例模型
本文将对系统按照角色模块进行需求分析。UML(统一建模语言)用例图是需求分析阶段常用的工具,通过直观的图形方式表示系统的功能需求和参与者。每个用例图包含一系列用例,即系统能够执行的特定功能,以及与之交互的参与者。根据用户分析,本校园团购系统可以划分为普通用户角色、商家用户角色和管理员角色,各角色的用例图如下所示。
(1)普通用户角色用例
本校园团购系统的普通用户角色模块主要包含注册登录、首页(轮播图、通知公告、广告信息、团购商城)、购物车、校园资讯、我的(基本信息、我的资产、我的订单、收货地址、收藏、评论、用户反馈、用户投诉、订单配送)等功能。普通用户角色用例图如下图3-1 所示。

图3-1 普通用户角色用例图
(2)商家用户角色用例
本校园团购系统的商家用户角色模块含有注册登录、后台首页、商家投诉管理、财务报表管理、商城管理等功能。商家用户角色用例图如下图3-2 所示。

图3-2 商家用户角色用例图
(3)管理员角色用例
本校园团购系统的管理员角色模块则涵盖了登录、后台首页、系统用户、用户反馈管理、用户投诉管理、商家投诉管理、财务报表管理、广告信息管理、系统管理、通知公告管理、资源管理、商城管理等功能。管理员角色用例图如下图3-3 所示。

图3-3 管理员角色用例图
3.2.2 功能分析
按照用户需求和角色用例图分析,可以得出本校园团购系统主要划分为普通用户模块、商家用户模块和管理员模块三大部分,各角色功能模块详细说明如下所示。
(1)普通用户功能模块
① 注册登录:提供注册登录功能,游客可以通过注册成为系统用户,使用账号密码可登录系统前台,使用权限内功能操作,实现微信授权登录。
② 首页:用户登录系统后首先进入首页界面,该界面主要提供系统功能导航和系统重要信息概览和推荐信息(根据协同过滤优先推荐购买过的同类型产品),包括可查看轮播图、通知公告等内容;并提供广告信息、团购商城等系统子功能链接入口。
③ 通知公告:当用户点击首页的“通知公告”时,可查看管理员发布的系统公告内容。
④ 广告信息:当用户点击首页的“广告信息”时,可搜索和浏览发布的各类广告信息,进入详情页可评论、收藏和点赞广告信息。
⑤ 团购商城:当用户点击首页的“团购商城”时,可搜索和浏览所有的团购商城,进入详情页可评论(购买后才可发表评论),收藏团购商城,提供积分兑换和领取优惠券操作,并实现客服、加入购物车、立即购买功能。
⑥ 购物车:普通用户可查看和管理加入购物车的商品信息,批量选择商品进行购买结算或删除操作。
⑦ 校园资讯:普通用户可搜索和浏览发布的所有校园资讯信息,包括相关新闻、文章等资讯内容,进行点赞、收藏和评论资讯信息。
⑧ 我的:“我的”模块主要提供包括基本信息、我的资产、我的订单、收货地址、收藏、用户反馈、用户投诉、订单配送等子功能管理操作,普通用户可根据需求对自己各类信息进行管控和处理。具体如下:
基本信息:支持更新个人基本资料和修改账户密码信息。
我的资产:展示优惠券、钱包及积分等信息,支持查看优惠券,充值钱包及查询积分(购买商品成功可获取对应积分)。
我的订单:支持管理我的订单,展示待付款、已付款、已取消及售后退款等订单信息,允许支付待付款订单或删除订单,发起售后申请。
收货地址:支持创建自己的收货地址,可删除和修改地址信息,允许设置默认地址。
收藏:支持查看管控自己收藏的各类系统信息。
评论:支持跟踪和删除自己发表的评论内容。
用户反馈:展示自己提交的用户反馈信息,支持添加提交用户反馈内容,查看反馈处理审核情况,并可删除和修改用户反馈。
用户投诉:展示自己提交的用户投诉信息,支持添加提交用户投诉内容,查看投诉处理审核情况,并可删除和修改用户投诉。
订单配送:展示自己的订单配送信息,支持查询跟踪订单配送情况,实现签收操作。
(2)商家用户功能模块
① 注册登录:提供注册登录功能,商家可以在后台通过注册创建账户,注册信息需经管理员审核通过,才可成功登录系统后台,实现权限内管理操作,提供个人信息和密码管理功能。
② 后台首页:商家用户登录系统后首先进入后台首页界面,该界面主要提供系统信息概览和数据统计分析图表,包括商品销售金额统计、商品销售数量统计等图表。
③ 商家投诉管理:商家用户可对自己的商家投诉信息进行管理,支持添加提交新的商家投诉信息,可删除和修改投诉,并确认审核处理情况。
④ 财务报表管理:商家用户可搜索和浏览自己的财务报表信息(商家佣金财务),查看财务报表的详细内容。
⑤ 商城管理:商家用户可管理自己的商城信息,提供包括团购商城、分类列表、订单列表、订单配送、优惠券、订单售后等商城管理子功能。支持上架、下架团购商城商品,进行分类管理;可处理订单,负责更新配送信息,允许跟踪物流签收情况;支持查阅订单售后处理情况;可管理和发布自己的优惠券(只适用于自己商城的商品)。
(3)管理员功能模块
① 登录:管理员账号密码由系统生成,可使用账号密码进行登录系统后台,负责管理和维护系统各类信息,提供个人信息和密码管理功能。
② 后台首页:管理员登录系统后首先进入后台首页界面,该界面主要提供系统信息概览和数据统计分析图表,包括商品销售金额统计、商品销售数量统计等图表。
③ 系统用户:管理员可对系统用户信息进行管理,包括普通用户、商家用户和管理员等用户,实现添加、删除、封禁和审核用户信息等操作。
④ 用户反馈管理:管理员可对所有用户反馈信息进行管理,实现增改删查操作,提供审核操作,负责审核回复用户反馈信息。
⑤ 用户投诉管理:管理员可管理所有用户投诉信息,实现增改删查操作,提供审核操作,负责审核回复用户投诉信息。
⑥ 商家投诉管理:管理员可对商家投诉信息进行管理,实现增改删查操作,提供审核操作,负责审核回复商家投诉信息。
⑦ 财务报表管理:管理员可管理所有财务报表信息,允许添加新的财务报表(商家佣金财务信息),支持更新和删除财务报表,提供搜索操作。
⑧ 广告信息管理:管理员可对所有广告信息进行管理,支持编辑发布新的广告,可删除和查看现有广告信息,允许管控其评论内容。
⑨ 系统管理:管理员可对首页的轮播图进行管理,支持上传轮播图和更新图片跳转链接,提供标题搜索功能。
⑩ 通知公告管理:管理员可对通知公告进行管理,实现增删改查操作,支持标题搜索,可查看其详情信息。
⑪ 资源管理:管理员可管理校园资讯和资讯分类等资源信息,可发布、删除和更新校园资讯内容,并进行资讯分类管理,支持关键字搜索,提供评论查看和管控功能。
⑫ 商城管理:管理员可管理包括团购商城、分类列表、订单列表、订单配送、优惠券、订单售后等商城信息。支持上架、下架团购商城商品,进行分类管理;可处理订单,允许跟踪和更新订单配送及物流签收情况;负责审核订单售后申请;可管理和发布优惠券(适用于商城所有商品)。
(1)可用性
系统应具备高可用性,用户在任何时间都能顺畅访问。系统的正常运行时间应达到99.9%以上,用户不会因系统故障而影响操作体验。用户界面设计应简洁明了,降低操作复杂性。
(2)可靠性
系统需要具备高可靠性,在故障发生时能够快速恢复。在并发操作情况下,系统应能确保数据的一致性并定期备份,避免出现数据冲突或数据丢失现象。
(3)安全性
系统应实现严格的安全控制,保护用户数据的隐私和完整性。用户信息应加密存储,传输过程中的数据也需采用加密协议,防止数据泄露。系统应具备权限管理功能,不同用户只能访问相应的数据和功能。
(4)可扩展性
系统设计应具备良好的可扩展性,模块化设计使得新功能可以方便地集成,系统能够支持更高的用户负载而无需重构基础架构。
(5)性能
系统的响应时间应控制在合理范围内,通常不超过2秒。系统应支持至少500名并发用户进行操作,且不影响系统性能。
(6)兼容性
系统应支持主流浏览器(如Chrome、Firefox、Safari、Edge)和移动设备的访问,确保用户在不同设备上具有一致的体验。如果需要与第三方系统(如支付接口、物流系统)集成,系统的API应遵循RESTful标准,并提供良好的文档支持。
本校园团购系统的架构设计将采用分层架构,确保系统的可扩展性和维护性。架构主要将分为前端、后端和数据库三部分。用户界面层(前端)负责与用户交互,使用uni-app实现移动端应用,支持H5和微信小程序,能够适配多个终端,提高用户体验。业务逻辑层(后端)使用Spring Boot 实现系统的核心业务逻辑,并提供RESTful接口,为前端提供数据支持,实现前后端分离,提高了系统的灵活性和可扩展性,让前端能够独立开发和更新。使用Spring Data JPA或MyBatis与数据库进行交互,提供数据的持久化操作,负责数据的CRUD(创建、读取、更新、删除)。数据库层(数据库)使用MySQL作为后端的数据库,存储用户信息、系统数据和操作日志等。该校园团购系统的架构设计充分考虑了可扩展性、维护性和用户体验,各个模块的合理分离确保系统在未来能够顺利进行优化与扩展,整个系统架构如图4-1所示。

图4-1 系统架构图
用户输入用户名和密码后,系统先检查输入是否为空,再验证用户名是否存在,若存在则通过用户名获取密码并校验。若密码正确则登录成功,否则提示密码错误。若用户名不存在或无法登录,提示用户操作无效。如图4-2所示。

图4-2 登录流程图
管理员可以添加信息,用户添加可以自己权限内的信息,输入信息后,要想利用这个软件来进行系统的安全管理,首先需要登录到该软件中。添加信息流程如图4-3所示。

图4-3 添加信息流程图
用户首先选择需要修改的记录,输入修改后的数据,系统判断输入数据是否合法。若数据不合法,提示重新输入;若数据合法,则将修改后的数据写入数据库,完成操作后流程结束。修改信息流程图如图4-4所示。

图4-4 修改信息流程图
用户选择需要删除的记录后,系统判断是否确认删除。若未确认,返回选择环节;若确认删除,则更新数据库,删除对应记录,完成操作后流程结束。删除信息流程图如图4-5所示。

图4-5 删除信息流程图
根据需求分析的结果,可以将校园团购系统的功能划分为不同的模块。该系统主要可以划分为普通用户、商家用户和管理员三大模块,每个模块负责实现特定的功能,又可细分不同子模块,并与其他模块进行协作。本校园团购系统的功能结构图如图4-6所示。

图4-6 系统功能结构图
概念设计是数据库设计的第一步,其主要目标是对系统的数据需求进行全面的理解和抽象。在进行数据库设计时,概念设计可以帮助明确系统的整体结构和需求。在这一阶段,需要确定实体、属性以及它们之间的关系,为后续的数据库表设计奠定基础。接下来,将深入探讨数据库表设计的具体细节,实现更高效的数据存储和管理。本校园团购系统全局E-R图如图4-7所示。

图4-7 系统总体E-R图
普通用户实体拥有普通用户ID、用户姓名、用户性别、联系方式、审核状态、用户ID、创建时间、更新时间等属性,普通用户实体属性图如图4-8所示。

图4-8 普通用户实体属性图
用户投诉实体拥有用户投诉ID、普通用户、用户姓名、投诉名称、投诉时间、投诉内容、审核状态、审核回复、创建时间、更新时间等属性,用户投诉实体属性图如图4-9所示。

图4-9 用户投诉实体属性图
用户反馈实体拥有用户反馈ID、普通用户、用户姓名、反馈名称、反馈时间、反馈内容、审核状态、审核回复、创建时间、更新时间等属性,用户反馈实体属性图如图4-10所示。

图4-10 用户反馈实体属性图
商家用户实体拥有商家用户ID、商家名称、联系方式、审核状态、用户ID、创建时间、更新时间等属性,商家用户实体属性图如图4-11所示。

图4-11 商家用户实体属性图
商家投诉实体拥有商家投诉ID、商家用户、商家名称、投诉名称、投诉时间、投诉内容、审核状态、审核回复、创建时间、更新时间等属性,商家投诉实体属性图如图4-12所示。

图4-12 商家投诉实体属性图
优惠券实体拥有优惠券ID、优惠券用户ID、优惠券用户、优惠券名称、优惠券价格、优惠券券后价格、优惠券时间、优惠券类型、创建时间、更新时间等属性,优惠券实体属性图如图4-13所示。

图4-13 优惠券实体属性图
团购商城实体拥有团购商城ID、商家用户、商家名称、收藏数、评论数、标题、封面图、描述、原价、卖价、商品库存、商品分类、正文、主图1、主图2、主图3、主图4、主图5、积分、团购价、团购人数、创建时间、更新时间等属性,团购商城实体属性图如图4-14所示。

图4-14 团购商城实体属性图
订单实体拥有订单ID、订单号、商品ID、商品标题、商品图片、价格、原价、数量、总价、规格、商品分类、联系人姓名、联系人邮箱、联系人手机、收件地址、邮政编码、买家ID、商家ID、描述、订单状态、订单备注、发货状态、折扣、积分、团购单号、团购状态等属性,订单实体属性图如图4-15所示。

图4-15 订单实体属性图
普通用户(普通用户ID、用户姓名、用户性别、联系方式、审核状态、用户ID、创建时间、更新时间)
用户投诉(用户投诉ID、普通用户、用户姓名、投诉名称、投诉时间、投诉内容、审核状态、审核回复、创建时间、更新时间)
用户反馈(用户反馈ID、普通用户、用户姓名、反馈名称、反馈时间、反馈内容、审核状态、审核回复、创建时间、更新时间)
商家用户(商家用户ID、商家名称、联系方式、审核状态、用户ID、创建时间、更新时间)
商家投诉(商家投诉ID、商家用户、商家名称、投诉名称、投诉时间、投诉内容、审核状态、审核回复、创建时间、更新时间)
优惠券(优惠券ID、优惠券用户ID、优惠券用户、优惠券名称、优惠券价格、优惠券券后价格、优惠券时间、优惠券类型、创建时间、更新时间)
团购商城(团购商城ID、商家用户、商家名称、收藏数、评论数、标题、封面图、描述、原价、卖价、商品库存、商品分类、正文、主图1、主图2、主图3、主图4、主图5、积分、团购价、团购人数、创建时间、更新时间)
订单(订单ID、订单号、商品ID、商品标题、商品图片、价格、原价、数量、总价、规格、商品分类、联系人姓名、联系人邮箱、联系人手机、收件地址、邮政编码、买家ID、商家ID、描述、订单状态、订单备注、发货状态、折扣、积分、团购单号、团购状态)
数据库表设计的重点是将概念模型转换为实际的数据库结构,包括表的创建、字段的定义及数据类型的选择。每个实体通常对应于数据库中的一张表,而实体的属性则转化为表的字段。以下是系统的数据库表设计具体内容展示,在此主要罗列部分主要功能数据表结构。
普通用户表主要储存普通用户的基本信息,包含普通用户ID、用户姓名、用户性别、联系方式、审核状态、用户ID、创建时间、更新时间等字段内容,普通用户表如表4-1所示。
表4-1 ordinary_user(普通用户)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
ordinary_user_id |
int |
是 |
是 |
普通用户ID |
|
|
2 |
user_name |
varchar |
64 |
否 |
否 |
用户姓名 |
|
3 |
user_gender |
varchar |
64 |
否 |
否 |
用户性别 |
表4-1(续)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
4 |
contact_information |
varchar |
16 |
否 |
否 |
联系方式 |
|
5 |
examine_state |
varchar |
16 |
是 |
否 |
审核状态 |
|
6 |
user_id |
int |
是 |
否 |
用户ID |
|
|
7 |
create_time |
datetime |
是 |
否 |
创建时间 |
|
|
8 |
update_time |
timestamp |
是 |
否 |
更新时间 |
用户投诉表主要储存用户投诉的基本信息,包含用户投诉ID、普通用户、用户姓名、投诉名称、投诉时间、投诉内容、审核状态、审核回复、创建时间、更新时间等字段内容,用户投诉表如表4-2所示。
表4-2 user_complaints(用户投诉)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
user_complaints_id |
int |
是 |
是 |
用户投诉ID |
|
|
2 |
ordinary_user |
int |
否 |
否 |
普通用户 |
|
|
3 |
user_name |
varchar |
64 |
否 |
否 |
用户姓名 |
|
4 |
complaint_name |
varchar |
64 |
否 |
否 |
投诉名称 |
|
5 |
complaint_time |
date |
否 |
否 |
投诉时间 |
|
|
6 |
complaint_content |
text |
65535 |
否 |
否 |
投诉内容 |
|
7 |
examine_state |
varchar |
16 |
是 |
否 |
审核状态 |
|
8 |
examine_reply |
varchar |
255 |
否 |
否 |
审核回复 |
|
9 |
create_time |
datetime |
是 |
否 |
创建时间 |
|
|
10 |
update_time |
timestamp |
是 |
否 |
更新时间 |
用户反馈表主要储存用户反馈的基本信息,包含用户反馈ID、普通用户、用户姓名、反馈名称、反馈时间、反馈内容、审核状态、审核回复、创建时间、更新时间等字段内容,用户反馈表如表4-3所示。
表4-3 user_feedback(用户反馈)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
user_feedback_id |
int |
是 |
是 |
用户反馈ID |
|
|
2 |
ordinary_user |
int |
否 |
否 |
普通用户 |
表4-3 (续)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
3 |
user_name |
varchar |
64 |
否 |
否 |
用户姓名 |
|
4 |
feedback_name |
varchar |
64 |
否 |
否 |
反馈名称 |
|
5 |
feedback_time |
date |
否 |
否 |
反馈时间 |
|
|
6 |
feedback_content |
text |
65535 |
否 |
否 |
反馈内容 |
|
7 |
examine_state |
varchar |
16 |
是 |
否 |
审核状态 |
|
8 |
examine_reply |
varchar |
255 |
否 |
否 |
审核回复 |
|
9 |
create_time |
datetime |
是 |
否 |
创建时间 |
|
|
10 |
update_time |
timestamp |
是 |
否 |
更新时间 |
商家用户表主要储存商家用户的基本信息,包含商家用户ID、商家名称、联系方式、审核状态、用户ID、创建时间、更新时间等字段内容,商家用户表如表4-4所示。
表4-4 business_user(商家用户)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
business_user_id |
int |
是 |
是 |
商家用户ID |
|
|
2 |
merchant_name |
varchar |
64 |
否 |
否 |
商家名称 |
|
3 |
contact_information |
varchar |
16 |
否 |
否 |
联系方式 |
|
4 |
examine_state |
varchar |
16 |
是 |
否 |
审核状态 |
|
5 |
user_id |
int |
是 |
否 |
用户ID |
|
|
6 |
create_time |
datetime |
是 |
否 |
创建时间 |
|
|
7 |
update_time |
timestamp |
是 |
否 |
更新时间 |
商家投诉表主要储存商家投诉的基本信息,包含商家投诉ID、商家用户、商家名称、投诉名称、投诉时间、投诉内容、审核状态、审核回复、创建时间、更新时间等字段内容,商家投诉表如表4-5所示。
表4-5 business_complaints(商家投诉)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
business_complaints_id |
int |
是 |
是 |
商家投诉ID |
|
|
2 |
business_user |
int |
否 |
否 |
商家用户 |
表4-5 (续)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
3 |
merchant_name |
varchar |
64 |
否 |
否 |
商家名称 |
|
4 |
complaint_name |
varchar |
64 |
否 |
否 |
投诉名称 |
|
5 |
complaint_time |
date |
否 |
否 |
投诉时间 |
|
|
6 |
complaint_content |
text |
65535 |
否 |
否 |
投诉内容 |
|
7 |
examine_state |
varchar |
16 |
是 |
否 |
审核状态 |
|
8 |
examine_reply |
varchar |
255 |
否 |
否 |
审核回复 |
|
9 |
create_time |
datetime |
是 |
否 |
创建时间 |
|
|
10 |
update_time |
timestamp |
是 |
否 |
更新时间 |
优惠券表主要储存优惠券的基本信息,包含优惠券ID、优惠券用户ID、优惠券用户、优惠券名称、优惠券价格、优惠券券后价格、优惠券时间、优惠券类型、创建时间、更新时间等字段内容,优惠券表如表4-6所示。
表4-6 coupon(优惠券)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
coupon_id |
int |
是 |
是 |
优惠券ID |
|
|
2 |
coupon_user_id |
int |
否 |
否 |
优惠券用户ID |
|
|
3 |
coupon_user_auth |
varchar |
255 |
否 |
否 |
优惠券用户 |
|
4 |
coupon_name |
varchar |
255 |
否 |
否 |
优惠券名称 |
|
5 |
coupon_price |
int |
否 |
否 |
优惠券价格 |
|
|
6 |
coupon_price1 |
int |
否 |
否 |
优惠券券后价格 |
|
|
7 |
coupon_time |
varchar |
255 |
否 |
否 |
优惠券时间 |
|
8 |
coupon_type |
varchar |
255 |
否 |
否 |
优惠券类型 |
|
9 |
create_time |
timestamp |
否 |
否 |
创建时间 |
|
|
10 |
update_time |
timestamp |
否 |
否 |
更新时间 |
团购商城表主要储存团购商城的基本信息,包含团购商城ID、商家用户、商家名称、收藏数、评论数、标题、封面图、描述、原价、卖价、商品库存、商品分类、正文、主图1、主图2、主图3、主图4、主图5、积分、团购价、团购人数、创建时间、更新时间等字段内容,团购商城表如表4-7所示。
表4-7 group_buying_mall(团购商城)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
group_buying_mall_id |
int |
是 |
是 |
团购商城ID |
|
|
2 |
business_user |
int |
否 |
否 |
商家用户 |
|
|
3 |
merchant_name |
varchar |
64 |
否 |
否 |
商家名称 |
|
4 |
collect_len |
int |
是 |
否 |
收藏数 |
|
|
5 |
comment_len |
int |
是 |
否 |
评论数 |
|
|
6 |
cart_title |
varchar |
125 |
否 |
否 |
标题 |
|
7 |
cart_img |
text |
65535 |
否 |
否 |
封面图 |
|
8 |
cart_description |
varchar |
255 |
否 |
否 |
描述 |
|
9 |
cart_price_ago |
double |
是 |
否 |
原价 |
|
|
10 |
cart_price |
double |
是 |
否 |
卖价 |
|
|
11 |
cart_inventory |
int |
是 |
否 |
商品库存 |
|
|
12 |
cart_type |
varchar |
64 |
是 |
否 |
商品分类 |
|
13 |
cart_content |
longtext |
4294967295 |
否 |
否 |
正文 |
|
14 |
cart_img_1 |
text |
65535 |
否 |
否 |
主图1 |
|
15 |
cart_img_2 |
text |
65535 |
否 |
否 |
主图2 |
|
16 |
cart_img_3 |
text |
65535 |
否 |
否 |
主图3 |
|
17 |
cart_img_4 |
text |
65535 |
否 |
否 |
主图4 |
|
18 |
cart_img_5 |
text |
65535 |
否 |
否 |
主图5 |
|
19 |
cart_integral |
int |
否 |
否 |
积分 |
|
|
20 |
group_price |
double |
否 |
否 |
团购价 |
|
|
21 |
group_people |
int |
否 |
否 |
团购人数 |
|
|
22 |
create_time |
datetime |
是 |
否 |
创建时间 |
|
|
23 |
update_time |
timestamp |
是 |
否 |
更新时间 |
订单表主要储存订单的基本信息,包含订单ID、订单号、商品ID、商品标题、商品图片、价格、原价、数量、总价、规格、商品分类、联系人姓名、联系人邮箱、联系人手机、收件地址、邮政编码、买家ID、商家ID、描述、订单状态、订单备注、发货状态、折扣、积分、团购单号、团购状态等字段内容,订单表如表4-8所示。
表4-8 order(订单)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
order_id |
int |
是 |
是 |
订单ID |
|
|
2 |
order_number |
varchar |
64 |
否 |
否 |
订单号 |
表4-8 (续)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
3 |
goods_id |
mediumint |
是 |
是 |
商品ID |
|
|
4 |
title |
varchar |
255 |
否 |
否 |
商品标题 |
|
5 |
img |
varchar |
255 |
否 |
否 |
商品图片 |
|
6 |
price |
double |
是 |
否 |
价格 |
|
|
7 |
price_ago |
double |
是 |
否 |
原价 |
|
|
8 |
num |
int |
是 |
否 |
数量 |
|
|
9 |
price_count |
double |
是 |
否 |
总价 |
|
|
10 |
norms |
varchar |
255 |
否 |
否 |
规格 |
|
11 |
type |
varchar |
64 |
是 |
否 |
商品分类 |
|
12 |
contact_name |
varchar |
32 |
否 |
否 |
联系人姓名 |
|
13 |
contact_email |
varchar |
125 |
否 |
否 |
联系人邮箱 |
|
14 |
contact_phone |
varchar |
11 |
否 |
否 |
联系人手机 |
|
15 |
contact_address |
varchar |
255 |
否 |
否 |
收件地址 |
|
16 |
postal_code |
varchar |
9 |
否 |
否 |
邮政编码 |
|
17 |
user_id |
int |
是 |
否 |
买家ID |
|
|
18 |
merchant_id |
mediumint |
是 |
否 |
商家ID |
|
|
19 |
description |
varchar |
255 |
否 |
否 |
描述 |
|
20 |
state |
varchar |
16 |
是 |
否 |
订单状态:待付款,待发货,待签收,已签收,待退款,已退款,已拒绝,已完成 |
|
21 |
remark |
text |
65535 |
否 |
否 |
订单备注 |
|
22 |
delivery_state |
varchar |
16 |
否 |
否 |
发货状态:未配送,已配送 |
|
23 |
vip_discount |
double |
否 |
否 |
折扣 |
|
|
24 |
integral |
int |
否 |
否 |
积分 |
表4-8 (续)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
25 |
buy_type |
tinyint |
否 |
否 |
1 全额购买,2 积分兑换,3 钱包购买 |
|
|
26 |
group_order_number |
varchar |
64 |
否 |
否 |
团购单号: |
|
27 |
group_status |
varchar |
16 |
否 |
否 |
团购状态:未拼团,拼团中,拼团成功,拼团失败 |
5.1 普通用户功能实现
5.1.1 用户注册模块
用户可以通过注册功能创建个人账户,便于使用系统提供的各项服务。用户在注册界面,填写用户名、密码、邮箱、手机号等基本信息,点击“注册”按钮,系统进行数据校验,若信息有效,则创建账户。界面如下图所示。

图5-1 用户注册界面
5.1.2 用户登录模块
用户通过登录功能访问其个人账户,享受个性化的服务。用户需在登录界面输入已注册的用户名或邮箱及密码进行登录。用户成功登录后,系统将用户引导至首页,显示个性化内容。若登录失败,系统会提示错误信息(如用户名或密码错误)。界面如下图所示。

图5-2 用户登录界面
5.1.3 首页模块
首页是用户进入系统后的第一界面,是用户获取信息和进行操作的主要入口。该界面主要提供系统搜索功能和系统功能导航栏,展示轮播图、公告通知、新闻资讯等系统概览和推荐信息,并提供广告信息、团购商城等系统子功能链接入口。用户可根据自身需求选择相应功能进行操作。界面如下图所示。

图5-3 首页界面
5.1.4 团购商城模块
当用户点击首页的“团购商城”时,可搜索和浏览所有的团购商城,进入详情页可评论(购买后才可发表评论),收藏团购商城,提供积分兑换和领取优惠券操作,并实现客服、加入购物车、立即购买功能。界面如下图所示。

图5-4 团购商城界面
5.1.5 我的模块
我的模块主要为用户主要提供包括基本信息、我的资产、我的订单、收货地址、收藏、用户反馈、用户投诉、订单配送等子功能管理操作,普通用户可根据需求对自己各类信息进行管控和处理。界面如下图所示。

图5-5 我的界面
我的订单子模块支持用户管理我的订单,展示待付款、已付款、已取消及售后退款等订单信息,允许支付待付款订单或删除订单,发起售后申请。界面如下图所示。

图5-6 我的订单界面
用户反馈子模块展示自己提交的用户反馈信息,支持用户添加提交用户反馈内容,查看反馈处理审核情况,并可删除和修改用户反馈。界面如下图所示。

图5-7 用户反馈界面
5.2 商家用户功能实现
5.2.1 商家投诉管理模块
商家用户可对自己的商家投诉信息进行管理,支持添加提交新的商家投诉信息,可删除和修改投诉,并确认审核处理情况。界面如下图所示。

图5-8 商家投诉添加界面
商家用户可搜索和浏览自己的财务报表信息(商家佣金财务),查看财务报表的详细内容。界面如下图所示。

图5-9 财务报表查看界面
商家用户可管理自己的商城信息,提供包括团购商城、分类列表、订单列表、订单配送、优惠券、订单售后等商城管理子功能。支持上架、下架团购商城商品,进行分类管理;可处理订单,负责更新配送信息,允许跟踪物流签收情况;支持查阅订单售后处理情况;可管理和发布自己的优惠券(只适用于自己商城的商品)。界面如下图所示。

图5-10 商城管理界面
5.3 管理员功能实现
管理员登录系统后首先进入后台首页界面,该界面主要提供系统信息概览和数据统计分析图表,包括商品销售金额统计、商品销售数量统计等图表。界面如下图所示。

图5-11 后台首页界面
管理员可对所有用户反馈信息进行管理,实现增改删查操作,提供审核操作,负责审核回复用户反馈信息。界面如下图所示。

图5-12 用户反馈审核界面
管理员可对商家投诉信息进行管理,实现增改删查操作,提供审核操作,负责审核回复商家投诉信息。界面如下图所示。

图5-13 商家投诉管理界面
管理员可管理所有财务报表信息,允许添加新的财务报表(商家佣金财务信息),支持更新和删除财务报表,提供搜索操作。界面如下图所示。

图5-14 财务报表管理界面
管理员可管理包括团购商城、分类列表、订单列表、订单配送、优惠券、订单售后等商城信息。支持上架、下架团购商城商品,进行分类管理;可处理订单,允许跟踪和更新订单配送及物流签收情况;负责审核订单售后申请;可管理和发布优惠券(适用于商城所有商品)。界面如下图所示。

图5-15 商城管理界面
测试的主要目的是确保系统的功能和性能满足预期的需求,同时识别和修复潜在的缺陷。通过系统测试,可以验证各个功能模块的正确性和稳定性,确保系统在不同使用场景下的表现符合设计要求。测试目的包括确认系统功能的完整性、验证数据处理的准确性、评估系统的性能和安全性。测试还可以提高用户满意度,保证用户在使用系统时获得流畅和可靠的体验。通过全面的测试,可以降低后期维护成本,减少系统上线后出现故障的风险,从而保障系统的长期稳定运行。
在本系统中,测试方法主要依赖于测试用例的设计与执行。测试用例是根据系统需求文档编写的,覆盖所有功能模块及其边界情况。每个测试用例包含输入数据、预期结果和实际结果的对比,以验证系统的功能是否按预期工作。
用户注册功能测试用例表是用来验证用户能否成功注册成为系统用户的测试用例。用户注册功能测试用例如下表所示。
表6-1 用户注册功能测试用例
|
测试描述 |
测试用例 |
预期结果 |
结论 |
|
正常用户注册 |
根据提示输入完整正确的注册信息并点击注册 |
注册成功,跳转至登录页面 |
与预期一致 |
|
注册时用户名已存在 |
输入已存在的用户名 |
提示用户名已存在 |
与预期一致 |
|
注册时邮箱格式错误 |
输入无效的邮箱格式 |
提示邮箱格式错误 |
与预期一致 |
|
注册时必填信息未填写 |
注册信息未填写完整 |
提示请输入完整信息 |
与预期一致 |
用户登录功能测试用例表是用来验证用户能否成功登录成为系统用户的测试用例。用户登录功能测试用例如下表所示。
表6-2 用户登录功能测试用例
|
测试描述 |
测试用例 |
预期结果 |
结论 |
|
正常用户登录 |
输入正确的用户名和密码 |
登录成功,跳转至系统首页 |
与预期一致 |
|
登录时用户名错误 |
输入错误的用户名 |
提示用户名或密码错误 |
与预期一致 |
|
登录时密码错误 |
输入错误的密码 |
提示用户名或密码错误 |
与预期一致 |
用户投诉管理功能测试用例表是用来验证管理员和普通用户能否正确完成用户投诉操作的测试用例。用户投诉功能测试用例表如下表所示。
表6-3 用户投诉功能测试用例
|
测试项 |
测试用例 |
预期结果 |
结论 |
|
用户投诉内容显示功能测试 |
用户打开目标用户反馈 |
页面正常加载,并成功进入用户投诉界面。 |
与预期一致 |
|
用户投诉内容输入功能测试 |
用户填写输入用户投诉内容,点击提交 |
信息成功输入并保存,页面提示信息提交成功 |
与预期一致 |
|
用户投诉内容查看功能测试 |
管理员打开用户投诉管理页面 |
页面正常加载,显示用户投诉列表及操作选项 |
与预期一致 |
|
用户投诉审核功能测试 |
管理员选择用户投诉内容,点击审核,更新审核状态并提交 |
用户投诉审核状态更新成功,并显示在前台页面 |
与预期一致 |
用户反馈管理功能测试用例表是用来验证管理员和普通用户能否正确完成用户反馈操作的测试用例。用户反馈功能测试用例表如下表所示。
表6-4 用户反馈功能测试用例
|
测试项 |
测试用例 |
预期结果 |
结论 |
|
用户反馈内容显示功能测试 |
用户打开目标用户反馈 |
页面正常加载,并成功进入用户反馈界面。 |
与预期一致 |
|
用户反馈内容输入功能测试 |
用户填写输入用户反馈内容,点击提交 |
信息成功输入并保存,页面提示信息提交成功 |
与预期一致 |
|
用户反馈内容查看功能测试 |
管理员打开用户反馈管理页面 |
页面正常加载,显示用户反馈列表及操作选项 |
与预期一致 |
|
用户反馈审核功能测试 |
管理员选择用户反馈内容,点击审核,更新审核状态并提交 |
用户反馈审核状态更新成功,并显示在前台页面 |
与预期一致 |
商家投诉管理功能测试用例表是用来验证管理员和商家用户能否正确进行管理商家投诉操作的测试用例。商家投诉管理功能测试用例如下表所示。
表6-5 商家投诉管理功能测试用例
|
测试描述 |
测试用例 |
预期结果 |
结论 |
|
商家投诉查看功能测试 |
打开商家投诉管理页面 |
页面正常加载,显示商家投诉列表及操作选项 |
与预期一致 |
|
商家投诉搜索功能测试 |
输入关键字搜索特定商家投诉内容 |
目标商家投诉成功显示在界面中 |
与预期一致 |
|
商家投诉添加功能测试 |
商家用户点击添加商家投诉,输入添加内容并提交 |
成功加载到商家投诉添加界面,信息输入并保存添加成功 |
与预期一致 |
|
商家投诉修改功能测试 |
选择修改商家投诉内容,输入修改内容并提交 |
加载到目标商家投诉编辑界面,信息输入并保存更新成功 |
与预期一致 |
|
商家投诉删除功能测试 |
选择商家投诉内容,点击删除按钮 |
商家投诉成功从商家投诉列表中删除 |
与预期一致 |
|
商家投诉审核功能测试 |
管理员选择商家投诉内容,点击审核按钮,更新审核状态并提交 |
成功加载到商家投诉审核界面,更新审核状态并保存审核成功 |
与预期一致 |
团购商城管理功能测试用例表是用来验证管理员和商家用户能否正确进行管理团购商城操作的测试用例。团购商城管理功能测试用例如下表所示。
表6-6 团购商城管理功能测试用例
|
测试描述 |
测试用例 |
预期结果 |
结论 |
|
团购商城查看功能测试 |
打开团购商城管理页面 |
页面正常加载,显示团购商城列表及操作选项 |
与预期一致 |
|
团购商城搜索功能测试 |
输入关键字搜索特定团购商城内容 |
目标团购商城成功显示在界面中 |
与预期一致 |
|
团购商城添加功能测试 |
点击添加团购商城,输入添加内容并提交 |
成功加载到团购商城添加界面,信息输入并保存添加成功 |
与预期一致 |
|
团购商城修改功能测试 |
选择修改团购商城内容,输入修改内容并提交 |
加载到目标团购商城编辑界面,信息输入并保存更新成功 |
与预期一致 |
|
团购商城删除功能测试 |
选择团购商城内容,点击删除按钮 |
团购商城成功从团购商城列表中删除 |
与预期一致 |
订单管理功能测试用例表是用来验证管理员、商家用户或普通用户能否正确管理订单内容的测试用例。订单管理功能测试用例如下表所示。
表6-7 订单管理功能测试用例
|
测试描述 |
测试用例 |
预期结果 |
结论 |
|
订单查看功能测试 |
打开订单管理页面 |
页面正常加载,显示订单列表及操作选项 |
与预期一致 |
|
订单搜索功能测试 |
输入关键字搜索特定订单内容 |
目标订单成功显示在界面中 |
与预期一致 |
|
订单添加功能测试 |
点击添加订单,输入添加内容并提交 |
成功加载到订单添加界面,信息输入并保存添加成功 |
与预期一致 |
|
订单修改功能测试 |
选择修改订单内容,输入修改内容并提交 |
加载到目标订单编辑界面,信息输入并保存更新成功。 |
与预期一致 |
|
订单删除功能测试 |
选择订单内容,点击删除按钮 |
订单成功从订单列表中删除 |
与预期一致 |
通过对用户注册、用户登录、用户反馈管理、用户投诉管理、商家投诉管理、团购商城管理、订单管理等核心功能的测试,所有关键功能模块均能按照预期工作,系统主要业务逻辑和操作无误。用户能够成功注册并登录系统实现各项操作,可搜索和浏览团购商城信息,实现创建和管理订单;支持提交用户反馈及投诉。管理员可以快速增改删查团购商城信息,负责查阅和审核用户提交的用户反馈、用户投诉及商家投诉等投诉反馈信息。商家用户能够管理自己的团购商城,处理订单,提交商家投诉。同时在测试过程中未发现明显的用户体验问题,所有操作均能够顺利完成且反馈及时准确。同时,系统能够在不同操作下保持稳定运行,未出现异常崩溃或数据丢失现象。
7.1 总结
本文基于SpringBoot和微信小程序技术设计并实现了一个校园团购系统系统,旨在解决传统校园团购服务管理中信息不透明、操作繁琐及用户互动性差等问题。通过对国内外团购模式和电子商务系统发展现状的分析,本文总结了当前领域的研究情况和痛点,并提出了系统的设计目标。系统采用前后端分离架构,后端使用SpringBoot框架实现业务逻辑,前端使用uni-app、微信小程序等技术构建用户界面,数据库选用MySQL进行数据存储。通过系统的整体设计与实现,不仅提升了校园团购的便利性和有效性,也增强了用户体验与安全性。系统功能涵盖普通用户模块、商家用户模块和管理员模块等三大部分,普通用户可通过平台快速获取公告、资讯和广告信息,浏览和选择团购商城商品,实现立即购买、参团购买及积分换购等功能,支持管理订单,申请售后,跟踪配送情况,并可进行投诉反馈。商家用户可以快速高效地管理自己的商城及订单,进行投诉,查收财务情况。管理员则负责管理和更新系统各类信息等操作,负责处理审核用户请求,保证系统正常运转。通过功能测试,系统各项功能均运行正常,达到了预期设计目标。
系统的实现为校园团购服务管理提供了一个高效、透明且用户友好的解决方案。通过优化信息共享流程和简化管理操作,系统显著提升了用户体验和管理效率。同时,系统的模块化设计和可扩展性为未来功能升级提供了便利。测试结果表明,系统在功能完整性、操作流畅性及数据安全性方面均表现良好。
7.2 展望
尽管系统在功能和用户体验上得到了良好的反馈,但仍存在一些不足之处。例如在用户体验方面,现有界面设计尚可进一步优化,增加人性化元素和个性化功能。另外订单处理速度在高并发情况下有待提升,以及在用户及商家数据分析方面的功能尚不完善。未来可以将根据用户反馈对现有界面进行迭代,增加更友好的交互设计,使用户操作更为流畅。同时对服务器进行性能优化,考虑采用负载均衡和缓存技术,提高系统的高并发处理能力。另外可进一步优化智能推荐算法,以根据用户的历史购买行为和兴趣进行个性化推荐,从而提高用户的购买率和满意度并考虑引入大数据、人工智能和区块链技术,以增强系统的智能化和数据可信度及提升交易的透明度和安全性。本文的研究为校园团购领域的数字化转型提供了参考,具有一定的理论价值和实践意义。
- 张帅.计算机软件Java编程特点与技术探究[J].科技资讯,2024,22(17):23-25.DOI:10.16661/j.cnki.1672-3791.2404-5042-5333.
- 卢长鹏,张业男,周敏.Java程序设计项目化教程[M].化学工业出版社:202403.298.
- 郭甲天,陈婷,向阳.一种基于SpringBoot框架校园宿舍管理系统的设计与实现[J].电脑知识与技术,2024,20(07):37-40.DOI:10.14004/j.cnki.ckt.2024.0444.
- 王志亮,纪松波.基于SpringBoot的Web前端与数据库的接口设计[J].工业控制计算机,2023,36(03):51-53.
- 张玮,廖若飞.基于uni-App的小程序开发技术路线及系统研究[J].无线互联科技,2024,21(22):41-44.
- 张强志,郑庆,黄志芳,等.校园学习生活小助手微信小程序的设计与实现[J].电脑知识与技术,2025,21(07):61-63.DOI:10.14004/j.cnki.ckt.2025.0322.
- 王希,戴靓婕.MySQL数据库技术在Web动态网页设计中的运用研究[J].软件,2024,45(07):77-79.
- 李艳杰.MySQL数据库下存储过程的综合运用研究[J].现代信息科技,2023,7(11):80-82+88.
- 王志涛.基于B/S模式的项目管理信息系统开发与设计[J].办公自动化,2024,29(24):84-86.
- 张丹丹,李弘.基于B/S架构的办公管理系统设计与开发[J].铁路通信信号工程技术,2024,21(09):44-48+106.
- 夏永康,左向山.新零售社区团购信息管理系统设计[J].软件,2024,45(09):127-129.
- 孟翔宇,董浩,胡艳玲.校园团购平台营销策略研究[J].全国流通经济,2024,(14):36-39.DOI:10.16834/j.cnki.issn1009-5292.2024.14.024.
- 彭苧仟.社区团购服务系统设计与应用研究[D].江西财经大学,2024.
- 王培培.基于SpringBoot的网上商城管理系统设计与实现[J].现代计算机,2024,30(07):117-120.
- Sonsi A .Online Shopping: Whether Profitable or Not[J].Journal of Social Science and Humanities,2022,4(7):
- M D A ,Sahar B .Using the B/S Model to Design and Implement Online Shopping System for Gulf Brands[J].Sustainability,2022,14(6):3176-3176.
- 李双艳,张立中,姜新新,等.基于电子商务的校园团购模式探析——以“橙心优选”为例[J].商展经济,2022,(02):56-59.DOI:10.19995/j.cnki.CN10-1617/F7.2022.02.056.
- 王雪雪,呙飒英,张淑芳,等.社区团购现状及运营模式探讨——以橙心优选为例[C]//四川劳动保障杂志出版有限公司.劳动保障研究会议论文集(十一).成都信息工程大学物流学院;,2021:51-52+57.DOI:10.26914/c.cnkihy.2021.023752.
- 黄斯奡.基于用户体验的社区团购微信小程序设计研究[D].武汉纺织大学,2021.DOI:10.27698/d.cnki.gwhxj.2021.000436.
- Wang Y ,Zhu Y ,Zhang Z , et al.Design of Hybrid Recommendation Algorithm in Online Shopping System[J].Journal of New Media,2021,3(4):119-128.
在本项目的实施过程中,许多人给予了我无私的支持和帮助,令我深感感谢。
我要衷心感谢我的指导老师。不仅在项目的初期提供了宝贵的建议,还在整个过程中给予了我细致入微的指导。专业知识和严谨态度始终激励着我,让我在遇到困难时能够保持信心,继续前行。每一次的讨论都让我对项目有了更深刻的理解,帮助我克服了许多技术难题。
我也要感谢参与用户测试的同学们。你们的反馈和建议为我们系统的优化提供了重要的参考,帮助我们更好地理解用户需求。正是因为有了你们的参与,我们才能够不断改进,提升系统的用户体验。感谢所有支持我的家人和朋友。你们的理解与鼓励让我在项目的紧张时刻始终能够保持积极的心态,成为我前进的动力。每当我遇到挑战时,想到你们的支持,我就能够重新振作,继续努力。最后,我要感谢所有在我职业发展过程中给予帮助的人。每一次的交流与分享都让我受益匪浅,拓宽了我的视野,让我在这条道路上走得更加坚定。
项目的完成不仅是我个人努力的结果,更是许多人共同支持与协作的成果。在此,我再次向所有关心和支持我的人表达衷心的感谢。希望未来我们能够继续携手,共同创造更多的价值和成就。
连接数据库的文件在Resources 文件夹下的application.yml文件,代码如下:
server:
port: 5000
servlet:
context-path: /api
spring:
mvc:
static-path-pattern: /upload/**
resources:
static-locations: file:此处填写地址/project93355/server/src/main/resources/static
datasource:
jdbc:mysql://127.0.0.1:3306/projectxxxxx?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
jackson:
property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
default-property-inclusion: ALWAYS
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
servlet:
multipart:
max-file-size: 500MB
max-request-size: 500MB
redis:
host: 127.0.0.1
port: 6379
password:
database: 2
lettuce:
pool:
max-idle: 30
min-idle: 10
max-active: 30
max-wait: 10000
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: com.project.demo.entity
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
use-column-label: true
map-underscore-to-camel-case: false
lazy-loading-enabled: true
aggressive-lazy-loading: false
use-generated-keys: true
项目采用三层架构controller(每一个实体对应一个controller),entity(项目表实体),service
,Controller 均继承自BaseController,注入两个对象,一个是实体类(以Auth为例),另一个是其AuthService:
@RestController
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
/**
* 服务对象
*/
@Autowired
public AuthController(AuthService service) {
setService(service);
}
}
Controller用于spring控制请求的地址
新增一条数据,通过post传入一个json对象,然后经过request.getReader(),最后经过readBody()转成一个Map,含有String和Object,key用的是字段名,Object存放数据,最终得到Map,insert用拼装sql,读取body,组装成一个insert对象,runCountSql()语句,代码如下:
@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);
}
修改一个数据,原理与add基本一致,不同点在于通过readConfig()读取关键字,以及通过readQuery()获取URL后面?指定位置的标识,转成Map对象后,执行update操作,同样通过拼接的sql语句执行,执行过程读取query,toWhereSql()语句完成数据库操作,body为修改对象的值,代码如下:
@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);
}
删除一条数据,通过readQuery(),获取URL后面的对象地址,删除FROM具体的table,query删除查询FindConfig语句,代码如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
public void delete(Map<String,String> query,Map<String,String> config){
QueryWrapper wrapper = new QueryWrapper<E>();
toWhereWrapper(query, "0".equals(config.get(FindConfig.GROUP_BY)),wrapper);
baseMapper.delete(wrapper);
log.info("[{}] - 删除操作:{}",wrapper.getSqlSelect());
}
通过请求的参数获取一条数据,通过readQuery(),获取URL后面的对象地址,查询FindConfig语句,select筛选Map对象,FIELD为查询字段,未传输的情况下传入“*”,代码如下:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
通过请求的参数获取列表数据,代码如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
获取某个组下面的数量,代码如下:
@RequestMapping(value = {"/count_group", "/count"})
public Map<String, Object> count(HttpServletRequest request) {
Integer value= service.selectSqlToInteger(service.groupCount(service.readQuery(request), service.readConfig(request)));
return success(value);
}
获取某个组下面的总计值,代码如下:
@RequestMapping(value = {"/sum_group", "/sum"})
public Map<String, Object> sum(HttpServletRequest request) {
Integer value = service.selectSqlToInteger(service.sum(service.readQuery(request), service.readConfig(request)));
return success(value);
}
图片/文件/视频等的上传方法通过MultipartFile,代码如下:
@PostMapping("/upload")
public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = System.getProperty("user.dir") + "/src/main/resources/static/";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
String fileName = file.getOriginalFilename();
File dest = new File(filePath + fileName);
log.info("文件路径:{}", dest.getPath());
log.info("文件名:{}", dest.getName());
file.transferTo(dest);
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", "/api/upload/" + fileName);
return success(jsonObject);
} catch (IOException e) {
log.info("上传失败:{}", e.getMessage());
}
return error(30000, "上传失败");
}
注册页UserController.java,传入user对象,并将"user_id"、 "state"、 "user_group"、"login_time"、"phone"、"phone_state"、 "username"、"nickname"、"password"、"email"、"email_state"、"avatar"、"create_time"输入,重点是 "username"、"nickname"、"password"必须输入,通过获取username,数据库查询是否有该用户,如果存在,则提示“用户已存在”,否则执行将UserId置为空(数据库表中该字段已设置自动递增),代码如下:
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = JSON.parseObject(JSON.toJSONString(user));
query.put("username",user.getUsername());
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
注册页password则使用了MD5加密,代码如下:
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;
}
登录页,首先传入"username"、"email"、"phone"、"password",用户可通过用户名、邮箱、手机号进行登录,通过判断resultList来确定查询结果,然后执行查询用户组UserGroup,用户组里面不存在,依然报“用户不存在”,执行完以上代码,最后涉及到用户带有“审核”的,会查询examine_state(用户的审核状态),数据库表user_group中含有source_table和source_field进行查询,以上步骤完成,对输入的密码进行存储Token到数据库,匹对账号和密码,数据库中的AccessToken为令牌,用于身份认证,其代码如下:
/**
* 登录
* @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, "账号或密码不正确");
}
}
找回密码,接收用户输入的用户名、密码、验证码,并进行条件判断,代码如下:
/**
* 找回密码
* @param form
* @return
*/
@PostMapping("forget_password")
public Map<String, Object> forgetPassword(@RequestBody User form,HttpServletRequest request) {
JSONObject ret = new JSONObject();
String username = form.getUsername();
String code = form.getCode();
String password = form.getPassword();
// 判断条件
if(code == null || code.length() == 0){
return error(30000, "验证码不能为空");
}
if(username == null || username.length() == 0){
return error(30000, "用户名不能为空");
}
if(password == null || password.length() == 0){
return error(30000, "密码不能为空");
}
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",username);
List list = service.selectBaseList(service.select(query, service.readConfig(request)));
if (list.size() > 0) {
User o = (User) list.get(0);
JSONObject query2 = new JSONObject();
JSONObject form2 = new JSONObject();
// 修改用户密码
query2.put("user_id",o.getUserId());
form2.put("password",service.encryption(password));
service.update(query, service.readConfig(request), form2);
return success(1);
}
return error(70000,"用户不存在");
}
修改密码,通过请求data,获取旧密码,并将新密码重新赋值,期间都是需要通过加密,代码如下:
/**
* 修改密码
* @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,"密码修改失败!");
}
点赞❤关注+私信博主,免费领取项目源码,谢谢~
更多推荐
所有评论(0)