基于Java的校园二手商品寄卖系统的设计与实现

    要

当今社会,随着经济社会的持续健康发展,进入新态势。互联网应用技术已经涉及到了生活当中的不同领域,其中就包括高校校园当中。传统的校园二手商品交易方式已经让同学们感觉过于效率低下,急需一种针对性的校园二手商品寄卖系统。因此,本设计采用Java开发语言,使用了SpringBoot作为框架,缓存中间件redis提升性能,在开发过程中与MySQL数据库系统相结合,为用户提供了一个方便快捷的校园二手商品寄卖平台。本论文首先对基于Java的校园二手商品寄卖系统进行了需求分析,针对本系统开发过程当中所采用的技术,各个功能模块以及最终所想达到的设计效果从多个方面进行设计实施,开发实现了基于Java语言的校园二手商品寄卖系统。主要实现了用户管理,留言管理,商品类别管理,联系方式管理,商品审核管理,轮播图管理,公告管理,用户消息管理,预定记录管理,购物车等模块。用户可以在本系统进行注册登录、发布商品、购买商品、查看商品消息、留言等操作,如果是非在校用户发布商品时可以把商品寄存在仓库,系统会为该商品生成一个寄卖码,当该商品出售时卖家把寄卖码交给买家,买家可以凭寄卖码去仓库取货,方便了不在校用户的商品售出。通过对系统功能的测试,测试结果说明该系统功能完善,操作简单,页面大方,有较高的使用价值,是一个拥有潜在用户和较优秀的应用前景的系统。

关键词:二手物品;寄卖;Java;SpringBoot;MySQL

ABSTRACT

Today's society, with the sustainable and healthy development of economic society, and into a new situation. Internet application technology has been involved in different areas of life, including the university campus. The traditional way of second-hand goods trading on campus has made students feel too inefficient, and a targeted consignment system of second-hand goods on campus is urgently needed. Therefore, this design uses Java development language, uses SpringBoot as a framework, cache middleware redis to improve performance, in the process of development and MySQL database system combined, to provide users with a convenient and quick campus second-hand goods consignment platform. First of all, this paper analyzes the needs of the campus second-hand goods consignment system based on Java. In view of the technology used in the development process of this system, each functional module and the final design effect that you want to achieve from many aspects of the design and implementation, the development and implementation of the campus second-hand goods consignment system based on Java language. The main realization of the user management, message management, commodity category management, contact management, commodity audit management, rotation map management, announcement management, user message management, booking record management, shopping cart and other modules. Users can register and log in this system, publish goods, buy goods, view commodity message, message and other operations, if the non-school user release goods can send goods stored in the warehouse, the system will generate a consignment code for the goods, when the goods are sold sellers send the code to buyers, buyers can go to the warehouse with the consignment code, Facilitates the sale of goods for users who are not on campus. Through the function test of the system, the test results show that the system has perfect function, simple operation, generous page, has high use value, is a system with potential users and better application prospects.

Key wordssecond-hand goods; Sell on consignment; Java;SpringBoot; MySQL

目    录

1  绪论...................................................................................................................................... 1

1.1  项目背景及意义.................................................................................................................. 1

1.2  国内外研究现状.................................................................................................................. 1

1.2.1  国内研究现状............................................................................................................ 1

1.2.2  国外研究现状............................................................................................................ 2

1.3  研究目标与内容.................................................................................................................. 3

1.4  系统开发的技术.................................................................................................................. 3

1.4.1  系统开发语言............................................................................................................ 3

1.4.2  系统数据库................................................................................................................ 4

1.4.3  系统框架.................................................................................................................... 4

2  系统分析.............................................................................................................................. 5

2.1  可行性分析.......................................................................................................................... 5

2.1.1  经济可行性................................................................................................................ 5

2.1.2  技术可行性................................................................................................................ 5

2.1.3  环境可行性................................................................................................................ 5

2.2  需求分析.............................................................................................................................. 5

2.2.1  功能需求分析............................................................................................................ 5

2.2.2  非功能需求分析........................................................................................................ 8

2.3  系统流程分析...................................................................................................................... 8

3  系统设计............................................................................................................................ 10

3.1  系统总体架构设计............................................................................................................ 10

3.2  系统功能模块设计............................................................................................................ 11

3.3  系统数据库设计................................................................................................................ 11

3.3.1  数据库概念结构设计.............................................................................................. 11

3.3.2  数据库逻辑结构设计.............................................................................................. 14

4  系统实现............................................................................................................................ 18

4.1  实现环境............................................................................................................................ 18

4.2  登录注册............................................................................................................................ 18

4.3  分类展示............................................................................................................................ 21

4.4  详情展示............................................................................................................................ 22

4.5  个人中心............................................................................................................................ 23

4.5.1  个人信息页面.......................................................................................................... 23

4.5.2  联系方式.................................................................................................................. 25

4.5.3  发布商品.................................................................................................................. 26

4.5.4  我的商品.................................................................................................................. 28

4.5.5  购物车...................................................................................................................... 29

4.5.6  我的预订.................................................................................................................. 30

4.5.7  我的消息.................................................................................................................. 32

4.5.8  我的留言.................................................................................................................. 33

4.6  后台管理系统模块............................................................................................................ 34

4.6.1  用户管理.................................................................................................................. 34

4.6.2  用户联系方式管理.................................................................................................. 36

4.6.3  用户留言管理.......................................................................................................... 37

4.6.4  商品类别管理.......................................................................................................... 38

4.6.5  仓库管理.................................................................................................................. 40

4.6.6  商品审核管理.......................................................................................................... 41

4.6.7  轮播图管理.............................................................................................................. 42

4.6.8  公告管理.................................................................................................................. 44

4.6.9  用户消息管理.......................................................................................................... 44

4.6.10  预定记录管理........................................................................................................ 46

5  系统测试............................................................................................................................ 48

5.1  测试方法............................................................................................................................ 48

5.2  测试用例............................................................................................................................ 48

5.3  测试结论............................................................................................................................ 51

总结与展望........................................................................................................................................ 52

参考文献............................................................................................................................................ 53

  ................................................................................................................................................ 54

第1章  绪论

1.1  项目背景及意义

在当前大环境下,随着国民的经济实力的增长,高新科技技术的进步与发展,人们的生活发生了很大的变化。共享精神开始不断的融入人们的生活,在我们的现实生活中,也涌现了一大批如共享单车、共享充电宝、共享雨伞等以租赁形式呈现的租赁型共享经济产物[1],都为人们的生活提供了很大的方便。目前大学生队伍也在不断的充实当中,规模也在不断的扩大,每年的毕业人数更是一个比较大的数目。据不完全统计,目前我国在校大学生最高达到4000多万人,再加上大学生存在着消费水平较高或者是地域跨度大的问题,每年都存在着许多的闲置商品被浪费的情况。比如资料书籍,生活用品等往往是浪费最为严重的物品。于是各大高校就出现了传统形式的校园二手买卖市场,比较常见的方式之一是学长学姐在操场上支起一个小摊进行吆喝甩卖,更多的是以夜市的形式出现。去宿舍进行推销也是毕业生们经常采用的方式之一。还有很大一部分人选择将闲置物品捐献给学校的爱心社团。以上三种方式在一定程度上能够实现闲置商品的交换。

但是大四毕业生一般都忙于毕业论文的撰写,整理毕业材料和向一些公司投递简历等事情,这就需要建立一个校园二手商品寄卖平台。这一平台在校园生活中发挥着至关重要的作用。也就是其意义所在。首先会使校园闲置物品的交易更加方便快捷,这也是此平台建立的初衷所在。同学们只需将自己的想出售的物品拍照发到平台上,有平台管理员来管理物品的后续交易,而毕业生也将有更多的时间来处理自己的事情。购买者只需要在闲暇时间通过浏览网上发布的商品来选择自己所需,自行联系商家并进行线下交易,还可以进行线下验货,商品质量有保障。其次则是可以提高这些闲置物品的利用率,在校生绝大多数都是靠父母来支撑自己的花销,通过购买学长学姐闲置下来的物品可以节省资金来做其他的事情,还能够买到自己满意的物品来供自己使用。

1.2  国内外研究现状

1.2.1  国内研究现状

在20世纪末期,我国开始兴起了网络商务的热潮,也就是现在大家所熟知的电子商务。我国电子商务行业起步较国外而言要晚很多,1999年我国电商元年开始,电子商务逐步扩展到一些个比较发达的一线城市,比如:北京,深圳,广东,上海等城市。一种新鲜事物的兴趣总会带动整个产业的发展。电子商务的兴起为一些二手交易网站提供了发展的空间,比如我们大家所熟知的58同城、赶集网等等。这些电子商务平台在为大家提供便利的同时,也存在着一定的漏洞和弊端,从专业方面来讲,它存在技术方面的安全漏洞,从它作为一个交易平台的属性来讲,存在着商品交易的诚信问题等等。

当前我国对高校二手交易市场做了一定的研究,2021年,赵秋雨在《校园二手商品交易平台设计》[5]中采用B/S结构,与Server进行通信,使用Spring Boot微服务系统架构和MySQL数据库做出了这一平台,该系统完成了个人商品管理模块、商品发布模块、分类管理模块等功能,功能比较完善。为学生们提供这样一个处理闲置物品的平台,使得校园内的秩序混乱现象减少,为创造良好的校园环境做出成效。

2022年陈春龙在《基于混合推荐的校园二手交易系统的研究与实现》[1]中提到以二手交易系统为切入点,对推荐算法进行改进,并对搜索方式进行了改善,通过MySQL数据库存储的数据,对用户的浏览进行了记录,并分析出更有可能偏向的物品,并切实应用到设计好的一个校园二手交易系统中。该文指出大学校园的二手交易商品有别于常规二手交易,主要群体为学生,而学生的需求往往大致相同,在一定程度上供需对等,对于数据的缓存和浏览量更有共性,因此更具有针对性。

在当下,高校校园BBS论坛为学生之间进行二手商品交易提供一个平台,为买卖双方提供极大的便利[3]。或者是通过各种社交平台的交流群来进行买卖。但是对于校园这个独特的环境来说,目前我国还没有针对校园这一环境而诞生的专属于高校学生的二手市场交易平台,来更好的满足高校学生的需要。

1.2.2  国外研究现状

二手交易市场主要在欧美国家得到了迅速的发展。在某一段时间内,美国绝大多数的收入都是靠电子商务来获得的。而一般国外高校主要依托国内比较完善的市场服务系统和信用卡交易技术来实现商品的交易。虽然交易比较方便,但是没有针对高校学生的具体情况来进行市场的调整。

AmazonStudent是亚马逊公司专门为高校学生提供二手商品交易服务的平台,用户可以浏览最新发布的资料书籍、电子设备等物品[3]。它在一定程度上考虑到了学生这一个群体的特殊性。学生们可以通过发帖的形式,在这个平台上挂出自己的闲置商品并注明价格。而为了保障交易的真实性和安全性。必须是进行学生身份认证的发帖人才能够在此平台发布交易信息。2022年10月3日,Syahputra K在《New product lauch consignment reogram information system at PT.INDOMARCO ADI PRIMA》[21]中为拥有产品寄售计划的公司建立了一个用于记录存储在商店中的快餐食品形式的寄售数据的信息系统。该系统主要以MySQL为数据库,记录订单和存放物品的数量以及到期日期。有助于公司商品的营销。而将要建立的信息系统采用了以Java为开发技术,springCloud作为框架的有序集合,记录以寄售计划合作的形式存放在商店中的新产品发布商品的数据。而一些需求者也可以浏览自己所需要的电子产品或者是书籍报刊。

2022年8月5日,Ahunanya在《Consignment inventory system and entrepreneurial success among micro warehousing firms》[22]中提出寄售库存系统与微型企业的交易成功密切相关。因此,Ahunanya采用了springboot对系统进行架构,利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,对系统数据进行了划分,更加清晰明了。算是一个比较人性化的平台,但是针对性较差一些。在为高校毕业生提供二手商品售卖服务时就显得不是很专业。虽然他其中的一些个评论私信功能也可以为用户提供二手商品交易服务,但它对于高校生来说,并没有什么优势所在。

1.3  研究目标与内容

本文的研究目标是基于商品上传,类比,访问与管理控制的系统开发方法,并结合当前最新互联网应用技术,设计并实现基于Java的校园二手物品寄卖系统。本系统主要功能模块有用户的注册登录、发布商品、购买商品、搜索商品、寄卖商品等。根据该设计理念,考虑本文将实现系统的预期效果,各个模块的设计过程中涉及到的相关理论与技术等因素,在系统开发过程中进行反复测试,力求设计出一个高效便捷的校园二手商品寄卖系统。为全校学生或者是其他拥有闲置物品的教职工提供便利,促进买卖双方交易达成的同时,提高资源的利用效率。

本文的研究内容分为以下几方面:

(1) 校园二手商品寄卖系统搭建的相关理论、要求。

(2)学校内交易平台的独特性,二手商品买卖的发展历程,校园二手商品寄卖系统的整体架构设计,对系统可行性进行分析,功能需求、非功能需求进行分析,数据库概念结构和逻辑结构进行分析。

(3)在对系统进行需求分析的基础上,设计二手商品寄卖系统的主要功能模块,实现网站的主要功能。

(4)对系统进行完整的测试,主要是功能测试、性能测试等以验证系统的合格性。

1.4  系统开发的技术

1.4.1  系统开发语言

 Java作为计算机编程所必须的语言工具,凭借自身的优势带来的理想编程效果是互联网领域所公认的。这也更加奠定了Java特征多样性与功能强大的独特地位。从某种程度上来说, Java的发展是接过了C++语言的接力棒, C++语言中的指针、多继承等概念是Java所看重的,因此Java对C++语言中的相关概念和功能有选择的进行批判继承,并结合自身的功能和应用范围进行一定的调整。进而编写出不同类型的应用供不同受众群体使用。而其中的代码都是依靠Java语言来完成。 Java语言与其他程序语言所不同之处在于它的特点是面向对象,并且是具有一定稳定性的静态状态。在Java中有8种数据类型来存储数值、字符和布尔值,可以最大程度上满足程序员用简单的思维来设计出复杂的程序系统的需要。

1.4.2  系统数据库

MySQL是当前互联网系统中喜爱度最高的关系型数据库管理系统之一。MySQL目前所使用的需要是SQL语言,该语言可以说是访问数据库的一种万能通用翻译器,因为它是最常用的标准语言。MySQL作为数据库管理系统,最突出的特征就是关系型。它能够将一些数据信息按照一定的类别分类放在不同的小仓库中,这些仓库之间还有着一定的联系。因为这些仓库就是根据原先的大仓库而细分成的各个小仓库。在数据查找方面比大仓库更加的准确方便。MySQL软件分为社区版和商业版,而这也主要得益于它的双授权政策。由于MySQL系统开放源码,再加上应用灵活、成本低等特点,受到了广大中小型和大型网站开发者的青睐。

Redis数据库,是一个内存型非关系型的数据库,可以存储的数据类型很多,支持字符串类型,列表类型,hash数据类型等。也具有广泛的功能,在缓存数据等场景下用的非常多。Redis解决并发问题也非常有用,它的分布式锁可以支持很复杂的锁定策略,以此来决绝并发一致性问题。Redis支持数据缓存到本地,这样数据丢失的可能性会降低。

1.4.3  系统框架

Spring Boot是由Pivotal团队设计出的全新框架,具有时代性、新颖性等特征。此系统框架设计最初目的就是为了给spring应用工作减重,同时也是为了给受众带来更好的体验。从搭建到开发整个流程都进行系统的简化,使用Spring应用的用户不用过多关注XML的配置。从稳健角度来说,Spring Boot用于快速的开发Spring应用,作为一个整合Spring功能的中枢,Spring Boot就是为了对Java web 的开发进行简化和加快速度,可以充分的实现Spring的功能最大化,甚至可以实现零配置开发的神奇操作。因此它在spring应用开发过程当中也是万万不可缺少的。

2章  系统分析

2.1  可行性分析

2.1.1  经济可行性

由于本设计的针对群体是在校大学生,校园电子商务只是立足于本校园内,没有对社会面开放,所以设备上的要求并没有很高。加上此项目建设完成后可以给同学们更轻松的带来物美价廉的二手商品,学校内对于传统摆摊交易方式带来的管理开支也会大大缩减,对学校的收益是可见的。而且也会有寄卖卖家寄存仓库带来的收益用来当作系统维护成本。经济方面不会有太大的压力,所以经济方面存在着可行性。

2.1.2  技术可行性

校园商品二手寄卖系统采用Java语言开发,springboot作为框架,集成Thymeleaf 静态资源加载,数据库采用了MySQL关系型缓存数据库和Redis非关系型缓存数据库。技术已经非常成熟,具有技术可行性。

2.1.3  环境可行性

校园内人群很密集,对于二手商品的购买需求和售卖需求很大,而且本系统对于不在学校的学生也提供了仓库来寄卖物品,既有了物品的安全保障,也能更好的处理临近毕业物品带不走扔掉又浪费的情况。而且学生对于网络上的东西接受能力更加强,可以很轻松明白的使用本系统购买出售物品,所以大环境下存在可行性。

2.2  需求分析

这里所讲的需求分析与平时所理解的需求分析有着很大的不同,传统意义上的需求分析是站在用户的角度进行考虑,而这里的需求分析则是对功能下定义,进一步确定项目具体的功能作用,有助于减少功能不清晰带来的麻烦,从而提高生产效率,降低开发成本。

2.2.1  功能需求分析

本文所设计与实现的校园二手商品寄卖系统用户角色主要分为3种:游客、用户和管理员,游客与用户又被合称为使用者,管理员也可以叫做控制者。其中游客的操作是这三者当中最为简单的,只包括浏览页面和搜索,其他两类用户的具体功能见如下分析。

1、用户

校内的同学可以通过系统注册成为用户,用户的主要功能包括:

(1)用户注册模块: 用户使用账号、个人密码等信息进行注册,并且为了避免因输入密码错误导致密码与记忆中的不同,系统还需要有密码二次验证,并且填写邮箱以方便忘记密码时找回密码。

(2)用户登录模块: 用户通过账号在浏览器登录进入系统,可以在系统首页进行浏览,登陆后可以使用个人中心、商品管理等模块。

(3)商品详情展示与购物车模块: 用户在系统首页可以通过点击物品图片来查看该物品的详情展示,查看物品的详细描述,如果对此物品感兴趣,可以点击加入购物车按钮,并可以点击卖家信息查看到卖家的售卖具体情况和联系方式,不喜欢后可以点击取消该商品。

(4)个人信息管理模块:用户可以在这个模块修改自己的个人信息。

(5)发布商品模块: 卖家可以在此模块上传自己想要卖出的物品,上传物品图片、价格、物品介绍和个人联系方式。寄卖用户在上传时选择寄存的仓库,系统会发送给卖家一个随机码来代表这件物品,买家在购买此物品后可以拿着随机码给管理员去仓库取走物品。卖家可以随时在此模块对上传的物品进行信息修改和删除操作。

(6)我的商品模块:在这里用户可以对自己上传发布的商品信息进行跟踪监控,可以很清晰的了解到自己的商品状态,随时可以更改商品信息。

(7)我的预订模块:加入购物车之后,如果想购买此物品,可以加卖家好友进行详细询问,确认购买价格和交易时间后点击确认订单,此时其他人就无法对此物品进行确认订单操作。

(8)我的消息模块:在这里可以看到本人商品的消息,如被预定、售出等。

(9)留言回复模块:如果商品有后续问题,可以在联系我们给管理员留言,等待管理员的回复。

用户的用例图如图2-1所示。

图2-1  用户用例图

2、管理员

(1)用户信息管理模块:管理员可以在此处对用户进行信息查询、账号封禁等操作。

(2)用户联系方式管理模块:管理员可以在这看到用户的各种联系方式。

(3)留言管理模块:管理员可以对用户提交的留言进行查看、回复以及删除操作。

(4)商品分类管理模块:管理员在此处添加分类,修改分类,删除分类。

(5)商品审核管理模块:管理员对商品进行分类,方便用户进行准确搜索、浏览和上传商品信息,并可以在此处对用户上传的商品进行审核。

(6)轮播图管理模块:管理员可以在此处上传、删减、修改轮播图的内容。

(7)公告管理模块:管理员可以在此处上传、删减、修改公告的内容。 

(8)用户消息管理模块:管理员可以在这里看到用户上传商品的交易记录和交易状态的消息。

(9)预定记录管理模块:管理员可以在此处查看到被预定并且未交易成功的商品信息。

(10)管理员登录:管理员不可以随便注册,只能通过账号密码登录,登陆后可以进入后台管理界面,并在此处理事务。

管理员的用例图如图2-2所示。

图2-2  管理员用例图

2.2.2  非功能需求分析

本系统是一个校园二手商品寄卖系统,除上述的功能以外,性能上,为了更好的为用户提供浏览与购买体验,系统在平时的数据流转与信息查询时,要保证一定的时效性,需要尽可能的缩短系统响应时间。在控制响应时间的同时还要考虑到用户数量的额度,高校当中的学生群体是一个很大的基数,一由于同时登录人数过多,有可能会出现瘫痪状态。在系统观感上,也要注意简洁美观、活泼时尚,业务逻辑也要做到通俗易懂,方便用户进行操作,迎合学生群体的需要。在安全性能上,要保护用户的信息,每个用户都有自己的密码,在登录时需要进行信息验证,在账号丢失时还可以进行申诉。

同时,随着用户的增长,系统也需要能够随着业务进行灵活的扩展和调整,随着后期数量的不断增加,数据的存储能力也需要适当进行灵活扩展。作为一个完整的服务型系统,系统需要有一定的广延性与保障性,来更好的保证能够满足不同用户的业务需求。

2.3  系统流程分析

经过上述的简要概述,已经对系统的角色进行了一个简单的了解,并且确定了用例模型。由于此设计为校园二手交易平台,因此该系统的核心实现功能为交易。其他一切小功能模块都是围绕交易这一主要功能展开的。

当用户进入系统平台之后,对平台首页的相关商品进行浏览,查看商品的类别与简介,还可以看到与交易相关的公告与轮播图。当用户选择到自己所需的商品之后可以加购到购物车,如果想购买它可以在购物车点击加入订单并与商家进行交流。但是在加入订单前必须进行注册或登录账号,否则就没有权限进行购物。双方沟通完毕后就可以提交订单并完成交易。

用户如果没有注册则需要在注册页面输入信息进行注册,当信息有效时提示注册成功,进行账号登录,在登录页面输入账号密码,验证成功后跳转到主页面。

系统用户端流程图如图2-3所示,注册登录流程图如图2-4所示。

图2-3  系统用户端流程图

图2-4  注册登录流程图

3章  系统设计

3.1  系统总体架构设计

本系统的总体架构设计如图3-1所示。

图3-1  总体架构设计图

(1)用户层:系统当中的用户者主要是指系统的使用者和管理者。本系统为二手市场交易系统,因此该系统的用户主要包括游客、学生用户和管理员。学生用户和管理员都可以通过浏览器输入各自的账号密码直接登录该系统平台进行浏览。不过就是学生用户是客户端,管理员是服务端而已。

(2)应用层:应用层可以理解为是该系统的功能实现模块,每一个大的功能模块都有许多小的模块做支撑。如商品类别管理中,又包含了仓库管理和商品管理。应用层的作用的给用户层提供各种功能服务。

(3)业务层:业务层又称为业务逻辑层,是应用层各种模块功能实现的根基所在。所有功能模块的计算与编写都是业务层所要负责的事情。同时业务层也是连接服务层与表现层的中间件。使用者只需要进行点击操作,业务逻辑层在得到响应之后需要将服务层与表现层连接在一起,才能够为使用者提供使用者所选中的信息。业务逻辑层对对于数据层而言,是调用者,对于表示层而言,是被调用者,这种相互作用关系主要在业务层中体现。

(4)数据层:有时候也被叫做是信息层,数据层主要有各种大大小小的数据库组成,系统里各种数据信息的流动都要在这里进行,其主要工作就是为上述各层提供数据信息。其中,业务层最直接来操作的就是数据层。

3.2  系统功能模块设计

根据第2章的功能需求分析,本节对校园二手商品寄卖系统进行功能模块设计,主要包括普通用户模块和管理员模块,在此基础上又对两者的具体功能进行划分,具体结构如图3-2所示。

图3-2  功能模块图

3.3  系统数据库设计

3.3.1  数据库概念结构设计

数据库概念结构设计是分析系统中的实体之间的交互关系,通过对实体之间的属性分析可以结构清楚的描述出该实体类的信息结构,再由本系统将这个信息结构换为具体的数据存储在数据库内。根据功能需求分析,确定了系统中主要实体有用户、用户信息、商品、订单、公告、用户留言、用户交易。

  1. 用户实体。本系统的实际使用用户,包括普通用户和管理员。用户实体的属性包括用户编号、用户名、用户密码、用户昵称、用户权限编号。

用户实体图如图3-3所示。

图3-3  用户实体图

  1. 用户信息实体。用户的个人详细信息,包括用户联系方式、用户邮箱、用户头像、用户信息编号、用户名。

 用户信息实体图如图3-4所示。

图3-4  用户信息实体图

  1. 商品实体。用户发布的具体的商品情况,包括用户编号、商品类别、商品价格、商品名称、寄卖仓库编号、商品详情、商品编号。

 商品实体图如图3-5所示。

图3-5  商品实体图

  1. 订单实体。用户的订单信息。包括订单编号、订单时间、订单状态。

订单实体图如图3-6所示。

图3-6  订单实体图

  1. 公告实体。管理员发布的公告信息。包括公告编号、公告时间、公告标题、公告内容、公告排序。

 公告实体图如图3-7所示。

图3-7  公告实体图

  1. 用户留言实体。用户对管理员上传的留言。包括留言时间、留言编号、留言内容、留言回复内容、用户编号。

     用户留言实体如图3-8所示。

图3-8  用户留言实体图

  1. 系统局部E-R图。每个用户可以加购多个商品,部分商品会被预订进入订单。

     系统局部E-R图如图3-9所示。

图3-9  系统局部E-R图

实体之间有紧密的联系:每个用户拥有属于该用户的用户信息,用户中的管理员可以在后台界面上传系统公告,管理员可以回复用户上传的留言信息;普通用户可以在前台个人中心发布自己的商品,可以加入订单购买多个商品,可以上传多个留言。

3.3.2  数据库逻辑结构设计

数据库逻辑结构设计在某种程度上来说是数据库概念结构设计的延伸,它能够将数据库概念结构设计阶段完成的结构模型转换成直观的数据模型,并且该数据模型有特定的数据库管理系统所支持,而逻辑结构设计也有它自身的任务,数据库中表的数量、结构、字段组成等安排都是逻辑结构所要考虑的。根据上一节对各个数据实体属性的分析,为每个实体设置相应的数据库和相应的表。具体表设计如下:

  1. 用户表user。user表是分类用户身份的表,表中id字段为主键,表示该字段所对应的数据库内的用户编号。type字段用来区分用户角色,1为管理员,2为普通用户。

user的结构如表3-1所示。

3-1  用户表

字段名称

字段类型

长度

字段含义

备注

id

integer

100

用户编号

主键

username

varchar

11

用户名

唯一性

password

varchar

20

密码

type

integer

10

权限编号

nickName

varchar

20

用户昵称

  1. 用户信息表content_information。content_information表用来记录用户的各种个人信息。表中id字段为主键表示用户信息编号。用户联系方式分别有手机号码,QQ,微信等。

 content_information的结构如表3-2所示。

表3-2  用户信息表

字段名称

字段类型

长度

字段含义

备注

id

integer

100

用户信息编号

主键

name

varchar

10

用户联系方式类名

content

varchar

20

用户联系方式

e-mail

varchar

20

用户邮箱

userId

integer

11

用户名

imageName

varchar

2000

用户头像

  1. 商品信息表goods。goods表用来记录用户上传的商品信息。表中的id字段为主键表示商品编号。warehousingTypeId字段用来表示是否寄卖,寄卖则选择寄卖仓库。

goods的结构如表3-3所示。

表3-3  商品信息表

字段名称

字段类型

长度

字段含义

备注

id

integer

1000

商品编号

主键

name

varchar

20

商品名称

price

string

20

商品价格

userId

integer

100

用户编号

goodsTypeId

integer

20

商品类别编号

content

varchar

1000

商品详情

warehousingTypeId

string

10

寄卖仓库编号

  1. 订单信息表message。message表用来记录用户物品的订单状态。表中id字段为主键表示订单编号

Message的结构如表3-4所示。

表3-4  订单信息表

字段名称

字段类型

长度

字段含义

备注

id

integer

1000

订单编号

主键

time

string

100

订单时间

 

userId

integer

100

用户编号

 

goodsId

integer

1000

商品编号

 

content

varchar

10

订单状态

 

  1. 公告信息表announcement。announcement表用来记录管理员发布的公告。

announcement的结构如表3-5所示。

表3-5  公告信息表

字段名称

字段类型

长度

字段含义

备注

id

integer

100

公告编号

主键

time

string

100

公告时间

title

varchar

50

公告标题

content

text

10000

公告内容

sortNum

integer

100

公告排序

  1. 用户留言表contact。contact表用来记录用户的留言以及管理员的回复。

contact的结构如表3-6所示。

表3-6  留言信息表

字段名称

字段类型

长度

字段含义

备注

id

integer

1000

留言编号

主键

time

string

100

留言时间

content

varchar

1000

留言内容

reply

varchar

1000

留言回复内容

userId

varchar

20

用户编号

4章  系统实现

4.1  实现环境 

操作系统:Microsoft Windows 11

程序语言:Java

开发工具:IntelliJ IDEA

服务器: Apache-tomcat

数 据 库:MySQL,Redis

4.2  登录注册

当用户首次进入该交易平台时,需要在注册页面输入自己本人的相关信息,比如用户名、密码、头像和昵称等,来注册属于自己的专门账号。但是用户名不得超过11位数字,密码不能低于六位数字。此注册界面如图4-1所示 ;用户在进行登录时,需要在登录界面输入自己的相关信息,自行选择保存与否并进入首页界面。用户登录界面如图4-2所示。

图4-1  用户注册

图4-2  用户登录

管理员登录时要在后台登陆页面输入管理员账号和密码,并通过验证码验证之后,点击登录按钮,登录后台管理员界面。管理员登录界面如图4-3所示。

图4-3  管理员登录

实现该功能的关键代码如下。

//管理员登录。

@ResponseBody

@RequestMapping("/login")

public Map<String, Object> login(User user, HttpSession session) {

    Map<String, Object> resultMap = new HashMap<>(16);

    String checkCode = (String) session.getAttribute("checkCode");

    //验证码正确

    if (checkCode.equals(user.getImageCode())) {

        User currentUser = userService.findByUserName(user.getUserName());

        //用户存在时

        if (currentUser != null) {

            //登录的用户身份不是管理员

               if (currentUser.getStatus() == 1) {

                    //密码正确时

                    if (currentUser.getPassword().equals(user.getPassword())) {

                        resultMap.put("success", true);

                        resultMap.put("currentUserType", currentUser.getType());

                        session.setAttribute("currentUserAdmin", currentUser);

                    }           
      } else {

                resultMap.put("success", false);

                resultMap.put("errorInfo", "请使用管理员身份登录!!");

            }

        } else {

            resultMap.put("success", false);

            resultMap.put("errorInfo", "用户名或密码错误,请重新输入!!");

        }

    } else {

        resultMap.put("success", false);

        resultMap.put("errorInfo", "验证码错误,请重新输入!!");

    }

    return resultMap;

}
//用户登录
@RequestMapping("/login")

public ModelAndView login(User user, HttpSession session) {

    ModelAndView mav = new ModelAndView();

    User currentUser = userService.findByUserName(user.getUserName());

    //用户存在时

    if (currentUser != null) {

        //登录的用户身份不是普通用户而是管理员

        if (currentUser.getType() != 2) {

            mav.addObject("userNameLogin", user.getUserName());

            mav.addObject("passwordLogin", user.getPassword());

            mav.addObject("title", "用户登录--校园二手商品寄卖系统");

            mav.addObject("mainPage", "page/login");

            mav.addObject("isUserOrNot", false);

        }else {

            //密码正确时

            if (user.getPassword().equals(currentUser.getPassword())) {

                session.setAttribute("currentUser", currentUser);


} 

4.3  分类展示

在此页面物品被分为电子产品、服装、书籍、食品、生活用品、模玩动漫、教学指导等分类条目。用户点击分类即可进入该分类,用户点击任意物品都可以进入到该物品的详情页面。

分类展示页面如图4-4所示。

图4-4  分类展示

分类展示页面的关键代码如下。

//商品分类列表

@RequestMapping("/{id}")

public ModelAndView details(@PathVariable("id") Integer id) {

    ModelAndView mav = new ModelAndView();

    //要展示的商品

    Goods goods = goodsService.findById(id);

    goods.setClick(goods.getClick() + 1);

    goods.setGoodsTypeName(goodsTypeService.findById(goods.getGoodsTypeId()).getName());

    goods.setUser(userService.findById(goods.getUserId()));

    QueryWrapper<ContactInformation> contactInformationQueryWrapper = new QueryWrapper<>();

    contactInformationQueryWrapper.eq("userId", goods.getUserId());

goods.setContactInformationList(contactInformationService.list(contactInformationQueryWrapper))    getFirstImageInGoodsContent(goods);

    mav.addObject("goods", goods);

    goodsService.update(goods);

    //商品分类列表

    QueryWrapper<GoodsType> goodsTypeQueryWrapper = new QueryWrapper<>();

    goodsTypeQueryWrapper.orderByAsc("sortNum");

    List<GoodsType> goodsTypeList = goodsTypeService.list(goodsTypeQueryWrapper);

    for (int i = 0; i < goodsTypeList.size(); i++) {

        if (equals(goodsTypeList.get(i).getName())) {

            goodsTypeList.remove(goodsTypeList.get(i));

            i--;

        }

    }

    mav.addObject("goodsTypeList", goodsTypeList);

4.4  详情展示

用户可以在首页点击物品图片或者查看详情,即可跳转到该物品的详细信息。物品详情页有该物品的图片,商品名字,发布时间,价格,所属类别,是否寄卖物品,寄卖位置等信息。如果喜欢该物品,可以点击获取卖家联系方式与卖家进行沟通。当双方沟通完成,可以点击加入购物车按钮进行缓存。

详情展示页面如图4-5所示。

图4-5  详情展示

详情展示页面的关键代码如下。

@RequestMapping("/toGoodsManagePage")

public ModelAndView toGoodsManagePage(HttpSession session, Goods searchGoods) {

    ModelAndView mav = new ModelAndView();


    User currentUser = (User) session.getAttribute("currentUser");

    if (currentUser == null) {

        ModelAndView mav2 = new ModelAndView("redirect:/toLoginPage");

        return mav2;

    }
QueryWrapper<Goods> goodsQueryWrapper = new QueryWrapper<>();

goodsQueryWrapper.eq("userId", currentUser.getId());

goodsQueryWrapper.orderByDesc("addTime");
List<Goods> goodsList = goodsService.list(goodsQueryWrapper);

for (Goods goods : goodsList) {

goods.setGoodsTypeName(goodsTypeService.findById(goods.getGoodsTypeId()).getName());

4.5  个人中心

用户的个人页面包括用户个人信息,联系方式,发布商品,我的商品,我的预订,我的消息,我的留言和联系管理员等板块。

4.5.1  个人信息页面

个人信息页面展示了用户名,用户昵称,用户类型,绑定的邮箱地址,点击修改按钮可以修改用户的密码,头像,昵称。

用户个人信息页面如图4-6所示。修改个人信息页面如图4-7所示。

图4-6  个人信息

图4-7  修改个人信息

用户个人信息页面的关键代码如下。

@RequestMapping("/save")

public ModelAndView save(User user, @RequestParam("userImage") MultipartFile file, HttpSession session) throws Exception {

    //上传的图片存在时

    if (!file.isEmpty()) {

        //修改用户时,删除原头像

        if (user.getId() != null) {

            FileUtils.deleteQuietly(new File(configProperties.getUserImageFilePath() + userService.findById(user.getId()).getImageName()));

        }

        //获取上传的文件名

        String fileName = file.getOriginalFilename();

        //获取文件的后缀

        String suffixName = null;

        if (fileName != null) {

            suffixName = fileName.split("\\.")[1];

        }

        //新文件名1

        String newFileName1 = DateUtil.getCurrentDateStr2() + System.currentTimeMillis() + "." + suffixName

        //压缩图片

        ImageUtil.compressImage(new File(configProperties.getUserImageFilePath() + newFileName1), new File(configProperties.getUserImageFilePath() + newFileName2));

        user.setImageName(newFileName2);

    }
4.5.2  联系方式

联系方式页面展示了该用户的联系方式,在这里可以修改、查看、删除、上传个人联系方式。联系方式页面如图4-8所示,联系方式修改如图4-9所示。

图4-8  联系方式

图4-9  修改联系方式

添加或修改联系方式关键代码如下。
@RequestMapping("/save")

public ModelAndView save(ContactInformation contactInformation, HttpSession session) {

    ModelAndView mav = new ModelAndView();

    User currentUser = (User) session.getAttribute("currentUser");

    if (contactInformation.getId() == null) {

        int key = contactInformationService.add(contactInformation);

        if (key > 0) {

            mav.addObject("addContactInformationSuccess", true);

        } else {

            mav.addObject("addContactInformationSuccess", false);

        }

    } else {

        int key = contactInforma (文章服务+v:haodaixie)tionService.update(contactInformation);

        if (key > 0) {

            mav.addObject("updateContactInformationSuccess", true);

        } else {

            mav.addObject("updateContactInformationSuccess", false);}

    }
4.5.3  发布商品
发布商品页面可以上传想要出售的商品名称,商品的类别,商品价格,商品详情。如果是非在校生就选择寄存的仓库,在校生则不用选,最后点击提交后,非在校生会收到物品的寄卖码,寄卖码会在我的商品栏中看到。

发布商品页面如图4-10所示,非在校生选择寄卖仓库如图4-11所示。

图4-10  发布商品

图4-11  选择寄卖仓库

发布商品的关键代码如下。
@RequestMapping("/save")

public ModelAndView save(Goods goods) {

    ModelAndView mav = new ModelAndView("redirect:/toGoodsManagePage");

    if (goods.getId() == null) {

        goods.setAddTime(new Date());

        goods.setState(0);

        goods.setIsRecommend(0);

        goods.setClick(0);

        if (goods.getWarehousingTypeId() != null) {

            String substring = UUID.randomUUID().toString().replace("-", "").substring(0, 7);

            goods.setRandomCode(substring);

        }

        goodsService.add(goods);

    } else {

        //数据库中的对应商品,:修改前的商品

        Goods trueGoods = goodsService.findById(goods.getId());

        goods.setState(0);

        //价格进行了修改,就更新上次价格

        if (goods.getPriceNow() != trueGoods.getPriceNow()) {

            goods.setPriceLast(trueGoods.getPriceNow());

        }

        goodsService.update(goods);

    }
4.5.4  我的商品

我的商品页面可以查找自己发布过的商品,商品发布时间、商品名称、商品类别、商品状态是否上架(有没有通过审核),是否被推荐,以及是否寄卖商品,是寄卖会显示寄卖码,还可以对已上传的物品进行修改。

我的商品模块如图4-12所示。

图4-12  我的商品

我的商品页面的关键代码如下。

//如果将商品状态设置为审核不通过

    if (state == 2) {

        goods.setReason(reason.split(",")[0]);

    }

    //如果将商品状态设置为交易成功

    if (state == 5) {

      ReserveRecord reserveRecord = reserveRecordService.findByGoodsIdAndState(goodsId, 0);

        reserveRecord.setState(2);

        reserveRecordService.update(reserveRecord);

    }

    goods.setState(state);

    int key = goodsService.update(goods);

    if (key > 0) {

        resultMap.put("success", true);

    } else {

        resultMap.put("success", false);

    }

    return resultMap;

}
4.5.5  购物车

用户可以把想要购买的商品加入自己的购物车,并且可以点击我的购物车查看购物车内的商品,在我的购物车板块可以选择删除该商品和预订按钮。在与卖家沟通好想要购买之后,就可以点击预定按钮把该商品加入我的预定里面。

购物车界面如图4-13所示。

图4-13  我的购物车

 
我的购物车页面的关键代码如下。
@ResponseBody

@RequestMapping("/addGoodsToShoppingCart")

public Map<String, Object> addGoodsToShoppingCart(Integer goodsId, HttpSession session) {

    Map<String, Object> resultMap = new HashMap<>(16);

    Gson gson = new Gson();

    Goods goods = goodsService.findById(goodsId);

    User currentUser = (User) session.getAttribute("currentUser");

    if (currentUser == null) {

        resultMap.put("success", false);

        resultMap.put("errorInfo", "你的登录状态已经过期,请重新登录!!");

        return resultMap;

    }

    String shoppingCartName = currentUser.getId() + "_shoppingCart";

    List<String> shoppingCartGoodsStr = RedisUtil.listRange(shoppingCartName, 0L, -1L);

    for (int i = 0; i < shoppingCartGoodsStr.size(); i++) {

        Goods goods1 = gson.fromJson(shoppingCartGoodsStr.get(i), Goods.class);

        if (goods.getId().equals(goods1.getId())) {

            resultMap.put("success", false);

            resultMap.put("errorInfo", "加入购物车失败,这个商品已经在你的购物车里了哦!!");

            return resultMap;
4.5.6  我的预订

在我的预订界面可以看到用户加入订单的商品,并可以在这里看到预订时间,预订的商品名称和商品链接,并可以在这里选择取消订单按钮。

我的预订界面如图4-14所示。

图4-14  我的预订

预订界面关键代码如下。

@ResponseBody

@RequestMapping("/reserve")

public Map<String, Object> reserve(Integer goodsId, HttpSession session) {

    Map<String, Object> resultMap = new HashMap<>(16);

    User currentUser = (User) session.getAttribute("currentUser");

    Goods goods = goodsService.findById(goodsId);

    goods.setState(4);

    goodsService.update(goods);

    ReserveRecord reserveRecord = new ReserveRecord();

    reserveRecord.setGoodsId(goodsId);

    reserveRecord.setUserId(currentUser.getId());

    reserveRecord.setReserveTime(new Date());

    reserveRecord.setState(0);

    int key = reserveRecordService.add(reserveRecord);

    Message message = new Message();

    message.setUserId(userService.findById(goods.getUserId()).getId());

    message.setContent("你的商品(" + goods.getName() + ")已被预订,请联系买家当面交易哦!!");

    message.setTime(new Date());

    message.setIsRead(0);

    messageService.add(message);

    if (key > 0) {

        resultMap.put("success", true);

    } else {

        resultMap.put("success", false);

    }

    return resultMap;

}
4.5.7  我的消息

在我的消息界面可以看到卖家的商品的消息,如某商品被预定取消预订等。如图4-15所示。

图4-15  我的消息

我的消息页面关键代码如下。

@ResponseBody

@RequestMapping("/updateGoodsState")

public Map<String, Object> updateGoodsState(Integer goodsId, Integer state, String reason) {

    Map<String, Object> resultMap = new HashMap<>(16);

    Goods goods = goodsService.findById(goodsId);

    //如果是取消预订,goods.getState()是当前的状态,state是要目标状态

    if (goods.getState() == 4 && state == 1) {

        ReserveRecord reserveRecord = reserveRecordService.findByGoodsIdAndState(goodsId, 0);

        reserveRecord.setState(1);

        reserveRecordService.update(reserveRecord);

        //卖家取消买家的预订,系统给买家发送一条消息

        Message message = new Message();

        message.setUserId(userService.findById(reserveRecord.getUserId()).getId());

        message.setContent("你预订的商品(" + goods.getName() + ")已被卖家取消预订!!");

        message.setTime(new Date());

        message.setIsRead(0);

        messageService.add(message);
4.5.8  我的留言

点击联系我们可以进入我的留言界面给管理员提交消息,在这可以看到自己提交的留言内容和留言提交的时间,以及管理员的回复。用户可以选择删除自己不想要的留言。如图4-16所示。查看留言详情如图4-17所示。

图4-16  我的留言

图4-17  查看留言详情

我的留言页面关键代码如下。

//添加或修改留言

@RequestMapping("/save")

public ModelAndView save(Contact contact, HttpSession session) {

    ModelAndView mav = new ModelAndView();

    User currentUser = (User) session.getAttribute("currentUser");

    //idnull时添加

    if (contact.getId() == null) {

        contact.setTime(new Date());

        contactService.add(contact);

        mav.addObject("contactAddSuccess", true);

    } else {

        Contact trueContact = contactService.findById(contact.getId());

        if (contact.getContent() != null) {

            trueContact.setReply(null);

        }

        trueContact.setContent(contact.getContent());

        contactService.update(trueContact);

        mav.addObject("contactModifySuccess", true);

    }

4.6  后台管理系统模块

后台管理界面是管理员登录的界面,在这里可以管理用户的个人信息,管理上传的商品,管理仓库的分类和网站商品的类别,管理公告轮播图等板块,以下是各个板块的详细介绍。

4.6.1  用户管理

用户管理。在这里可以查看用户的信息和帐号状态,并且可以选择对用户进行修改、删除、封禁操作。用户管理界面如图4-18所示,删除用户界面如图4-19所示。

图4-18  用户管理

图4-19  删除用户

用户管理的部分代码如下。

@RequestMapping("/delete")

public Map<String, Object> delete(String ids) {

    Map<String, Object> resultMap = new HashMap<>(16);

    String[] idsStr = ids.split(",");

    int key = 0;

    for (int i = 0; i < idsStr.length; i++) {

        userService.delete(Integer.parseInt(idsStr[i]));

        key++;

    }

    if (key > 0) {

        resultMap.put("success", true);

    } else {

        resultMap.put("success", false);

    }

    return resultMap;

}
4.6.2  用户联系方式管理
 

用户联系方式管理。在这里可以查询到用户编号,用户添加的联系方式名称和联系方式内容,如图4-20所示。分页条件查询联系方式如图4-21所示。

图4-20  用户联系方式管理

图4-21  分页条件查询联系方式

查看用户联系方式关键代码如下。

@RequestMapping("/list")

public Map<String, Object> list(ContactInformation contactInformation, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "rows", required = false) Integer rows) {

    Map<String, Object> resultMap = new HashMap<>(16);

    QueryWrapper<ContactInformation> contactInformationQueryWrapper = new QueryWrapper<>();

    if (contactInformation.getName() != null) {

        contactInformationQueryWrapper.like("name", contactInformation.getName());

    }

    if (contactInformation.getUserName() != null) {

        List<Integer> userIdList = new ArrayList<>();

        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();

        userQueryWrapper.like("userName", contactInformation.getUserName());

        List<User> userList = userService.list(userQueryWrapper);

        if (userList.size() > 0) {

            for (User user : userList) {

                userIdList.add(user.getId());

            }

        } else {

            userIdList.add(-1);

        }

        contactInformationQueryWrapper.in("userId", userIdList);

    }
4.6.3  用户留言管理

用户留言管理。在这里可以查询到用户们留言的内容和时间,管理员在这里为这些留言回复,并且删除一些违规留言。如图4-22所示。

图4-22  用户留言管理

用户留言部分关键代码如下。
    @RequestMapping("/save")
public Map<String, Object> save(Contact contact, HttpSession session) {
    Map<String, Object> resultMap = new HashMap<>(16);
    int result;
    //id
存在,修改留言
    if (contact.getId() != null) {
        User currentUserAdmin = (User) session.getAttribute("currentUserAdmin");
        contact.setUserIdReply(currentUserAdmin.getId());
        result = contactService.update(contact);
    } else {//id
不存在,添加留言
        result = contactService.add(contact);
    }
    if (result > 0) {
        resultMap.put("success", true);
    } else {
        resultMap.put("success", false);
    }
    return resultMap;
}

 
4.6.4  商品类别管理

商品类别管理管理。在此处可以查看到各个商品分类,还有各个分类内的商品数量。商品类别管理界面如图4-23所示,删除商品类别如图4-24所示。

图4-23  商品类别管理

图4-24  删除商品类别

商品类别管理的部分代码如下。

//删除商品类别
 @RequestMapping("/delete")

    public Map<String, Object> delete(String ids) {

        Map<String, Object> resultMap = new HashMap<>(16);

        String[] idsStr = ids.split(",");

        int key = 0;

        for (String s : idsStr) {

            Integer id = Integer.valueOf(s);

            QueryWrapper<Goods> goodsQueryWrapper = new QueryWrapper<>();

            goodsQueryWrapper.eq("goodsTypeId", id);

            if (goodsService.list(goodsQueryWrapper).size() == 0) {

                goodsTypeService.deleteById(id);

                key++;

            } else {

                resultMap.put("errorInfo", "该分类下有商品,不能删除!!");

            }

        }

        if (key > 0) {

            resultMap.put("success", true);

        } else {

            resultMap.put("success", false);

        }

        return resultMap;
4.6.5  仓库管理
仓库管理。在此板块管理员可以看到寄卖所存的所有仓库,以及每个仓库内存的商品数量。仓库管理如图4-25所示。添加仓库如图4-26所示。

图4-25  仓库管理

图4-26  添加仓库

仓库管理的部分代码如下。
//添加或修改分类类别
@RequestMapping("/save1")

public Map<String, Object> save1(GoodsType goodsType) {

    Map<String, Object> resultMap = new HashMap<>(16);

    int key;

    if (goodsType.getId() == null) {

        key = goodsTypeMapper1.add1(goodsType);

    } else {

        key = goodsTypeMapper1.update1(goodsType);

    }

    if (key > 0) {

        resultMap.put("success", true);

    } else {

        resultMap.put("success", false);

    }

    return resultMap;

}
4.6.6  商品审核管理

商品审核管理。在此板块需要管理员足够认真且细心,要对用户上传的产品进行逐个核查。对于那些符合上传和交易的物品,管理员通过操作使其在前台页面进行展示,对于那些不能上传的商品,需要第一时间与上传者进行沟通,并将驳回原因告知。如图4-27所示。

图4-27  商品审核管理

商品审核管理的部分代码如下。
@RequestMapping("/recommendGoodsOrNot")

public Map<String, Object> recommendGoodsOrNot(Integer id, Integer isRecommend,Integer recommendDays) {

    Map<String, Object> resultMap = new HashMap<>(16);

    Goods goods = goodsService.findById(id);

    goods.setIsRecommend(isRecommend);

    if (isRecommend == 1) {

        goods.setRecommendTime(new Date());

        goods.setRecommendDays(recommendDays);

    }

    int key = goodsService.update(goods);

    if (key > 0) {

        resultMap.put("success", true);

    } else {

        resultMap.put("success", false);

    }

    return resultMap;

}
4.6.7  轮播图管理

轮播图管理。管理员在这里添加在首页界面显示的轮播图的内容。轮播图管理如图4-28所示。

图4-28  轮播图管理

轮播图管理关键代码如下。
@RestController

@RequestMapping("/admin/carousel")

public class CarouselAdminController {

    @Value("${carouselImageFilePath}")

    private String carouselImageFilePath;

    @Resource

    private CarouselService carouselService;
@RequestMapping("/list")

public Map<String, Object> list(Carousel carousel, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "rows", required = false) Integer rows) {

    Map<String, Object> resultMap = new HashMap<>(16);

    QueryWrapper<Carousel> carouselQueryWrapper = new QueryWrapper<>();

    if (carousel.getTitle() != null) {

        carouselQueryWrapper.like("title", carousel.getTitle());

    }

    carouselQueryWrapper.orderByAsc("sortNum");

    Page<Carousel> carouselPage = new Page<>(page, rows);

    List<Carousel> carouselList = carouselService.list(carouselQueryWrapper, carouselPage);

    Integer total = carouselService.getCount(carouselQueryWrapper);

    resultMap.put("rows", carouselList);

    resultMap.put("total", total);

    return resultMap;
4.6.8  公告管理
公告管理。管理员在这里添加在首页界面显示的公告的内容。公告管理如图4-29所示。

图4-29  公告管理

公告管理关键代码如下。
@RequestMapping("/list")

public Map<String, Object> list(Announcement announcement, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "rows", required = false) Integer rows) {

    Map<String, Object> resultMap = new HashMap<>(16);

    QueryWrapper<Announcement> announcementQueryWrapper = new QueryWrapper<>();

    if (announcement.getTitle() != null) {

        announcementQueryWrapper.like("title", announcement.getTitle());

    }

    announcementQueryWrapper.orderByAsc("sortNum");

    Page<Announcement> announcementPage = new Page<>(page, rows);

    List<Announcement> announcementList = announcementService.list(announcementQueryWrapper, announcementPage);

    Integer total = announcementService.getCount(announcementQueryWrapper);

    resultMap.put("rows", announcementList);

    resultMap.put("total", total);

    return resultMap;

}
4.6.9  用户消息管理

用户消息管理。此页面展示了用户交易的交易记录。如图4-30所示。

图4-30  后台消息管理

用户消息管理页面的主要代码如下。

 @RequestMapping("/list")a

public Map<String, Object> list(Message message, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "rows", required = false) Integer rows) {

    Map<String, Object> resultMap = new HashMap<>(16);

    QueryWrapper<Message> messageQueryWrapper = new QueryWrapper<>();

    Page<Message> messagePage = new Page<>(page, rows);

    if (message.getUserName() != null) {

        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();

        userQueryWrapper.like("userName", message.getUserName());

        List<Integer> userIdList = new ArrayList<>();

        List<User> userList = userService.list(userQueryWrapper);

        if (userList.size() > 0) {

            for (User user : userList) {

                userIdList.add(user.getId());

            }

        } else {

            userIdList.add(-1);

        }

        messageQueryWrapper.in("userId", userIdList);

      return resultMap;

}
4.6.10  预定记录管理

预定记录管理。此页面展示了被预定的商品的预定时间、预定用户和预定商品。当有用户违约未能在一定时间内完成交易,可以提交管理员,等待管理员取消该商品的预定,删除预订记录后对应的商品状态会被设置为上架中。如图4-31所示。

图4-31  预定记录管理

预定记录管理页面的主要代码如下。

@RequestMapping("/delete")

public Map<String, Object> delete(String ids) {

    Map<String, Object> resultMap = new HashMap<>(16);

    String[] idsStr = ids.split(",");

    int key = 0;

    for (int i = 0; i < idsStr.length; i++) {

        Integer id = Integer.valueOf(idsStr[i]);

        ReserveRecord reserveRecord = reserveRecordService.findById(id);

        //删除前将对应商品设置为上架状态

        Goods goods = goodsService.findById(reserveRecord.getGoodsId());

        goods.setState(1);

        goodsService.update(goods);

        reserveRecordService.deleteById(id);

        key++;

    }

    if (key > 0) {

        resultMap.put("success", true);

    } else {

        resultMap.put("success", false);

    }

    return resultMap;

}

5章  系统测试

系统测试是系统开发过程当中的收尾环节,也是必经环节之一。在系统投入正常使用之前,需要针对每个功能模块进行分别测试。一是检测系统是否进行正常运行,二是检测系统是否达到设计者的预期,以保证系统的运行稳定,方便对系统进行校正和改进。

5.1  测试方法

黑盒测试是测试新系统功能的一种方法,主要测试新系统的合理性与可应用性,测试结果可以直观的反映一个系统设计的成功与否。在测试过程中,因为不能看到盒子内部,所以在测试时就不需要看到系统后台的底层架构,在程序接口测试程序是否能够接收所输入的数据,并且能够准确无误的输出信息。这一系列操作主要是通过对外部界面和系统功能是否可以达到预期结果进行测试。下面对本系统的各项功能进行测试。

5.2  测试用例

本节主要对系统内的各个模块中的功能进行测试。

(1)用户注册登录页面测试用例,测试了两种用户的注册登录功能,如表5-1所示。

表 5-1  注册页面功能测试用例表

测试编号

测试功能

操作步骤

预期结果

测试结果

001

注册测试

第二次密码输入与第一次不一致

提示两次密码不一致,请重新输入

通过

002

注册测试

输入已注册用户名

提示该用户名已被注册,请重写输入

通过

003

注册测试

输入正确注册信息

注册成功

通过

004

登录测试

输入正确的用户名和密码

登录成功

通过

005

登录测试

输入错误用户名

登录失败

通过

006

登录测试

输入错误的密码

登录失败

通过

007

管理员登录测试

输入错误的用户名密码

登陆失败

通过

续表 5-1  注册页面功能测试用例表

008

管理员登录测试

输入错误的验证码

登陆失败

通过

009

管理员登录测试

输入正确的用户名密码和验证码

登陆成功

通过

2)分类展示页面测试用例,测试了商品分类展示和页面转换的功能,如表5-2所示。

表 5-2  分类展示功能测试用例表

测试编号

测试功能

操作步骤

预期结果

测试结果

001

商品分类展示

点击服饰按钮

页面展示所有在售的服饰

通过

002

详情页面跳转

点击某个衣服链接

跳转到该衣服的详情展示页面

通过

3)详情展示页面测试用例,测试了详情展示页面的功能,如表5-3所示。

表 5-3  详情展示功能测试用例表

测试编号

测试功能

操作步骤

预期结果

测试结果

001

详情页面跳转

点击某个电子产品链接

跳转到该电子产品的详情展示页面

通过

002

加入购物车

点击加入购物车

物品出现在用户购物车中

通过

003

获取卖家联系方式

点击获取卖家联系方式

在上方弹出卖家联系方式弹窗

通过

4)个人中心页面测试用例,测试了用户在个人中心的各种功能。如表5-4所示。

表 5-4  个人中心功能测试用例表

测试编号

测试功能

操作步骤

预期结果

测试结果

001

个人信息修改

用户编辑个人信息,点击修改按钮

修改成功

通过

002

密码修改

输入错误的旧密码

修改失败

通过

003

密码修改

输入正确的旧密码和两次相同的新密码

修改成功

通过

续表 5-4  个人中心功能测试用例表

004

添加联系方式

点击添加按钮书写名称和内容

添加成功

通过

005

修改联系方式

点击修改按钮,填写新的联系方式

修改成功

通过

006

发布商品

点击发布商品,填写物品信息,点击提交

物品进入等待审核状态

通过

007

查看我的商品

点击我的商品按钮

查看到卖家商品的状态通过审核或未通过审核

通过

008

购物车

点击购物车按钮

查看到买家加入购物车的所有订单

通过

009

我的预订

点击我的预订按钮

查看买家所有的订单

通过

010

联系我们

输入留言内容后点击提交按钮

留言进入我的留言板块等待管理员回复

通过

011

我的留言

点击我的留言按钮

查看到上传的所有留言内容以及管理员回复内容

通过

5)后台管理员界面测试用例,对管理员的各种权限进行测试,如表5-5所示。

表 5-5  后台管理员界面功能测试用例表

测试编号

测试功能

操作步骤

预期结果

测试结果

001

用户信息展示

点击用户管理按钮

页面显示所有用户的基本信息

通过

002

商品类别展示

点击商品类别管理按钮

页面显示所有的商品分类

通过

003

该类别下有商品删除该类别

点击删除按钮

弹窗显示该分类下有商品不能删除

通过

004

该类别下无商品删除该类别

点击删除按钮

弹窗显示删除成功

通过

005

商品审核

未审核物品审核通过

该物品在前台页面和用户个人中心显示上架

通过

续表 5-5  后台管理员界面功能测试用例表

006

商品审核

未审核物品审核不通过

该物品在用户个人中心显示审核不通过

通过

007

回复留言

给用户提交的留言进行回复

个人中心我的留言板块显示管理员回复的留言

通过

008

下架商品

管理员点击下架该商品按钮

前台页面该商品成为可预订状态

通过

009

删除预订记录

选中记录点击删除按钮

该商品对应的商品状态设置为上架中

通过

5.3  测试结论

根据系统的需求分析和详细设计,本文采用了多个测试用例对系统功能的测试,整个系统在测试中基本上都能很好的把正确数据呈现出来,结果表明本系统的各项功能能够正常运行并实现,可以满足上文所提到的设计预想。

总结与展望

在经济高质量发展的浪潮持续推动下,国民生活水平较之前也有了很大程度的升级。而随着共享意识和环保观念的普及,许多大学生都开始接受并尝试着手低价出售二手商品,所以本系统设计是基于实际情况进行的技术研究。目的是帮助大学生们能够把自己的闲余物品出售,给自己回血的同时,也能帮助其他有需要的学生以更低的价格买到自己能用到的物品,在促进校园内资源循环利用的同时,也帮助买卖双方都能更方便满意的得到自己所需。
     本文对现今二手交易平台的状况和需求进行了研究和思考。在此基础上,结合大学校园内学生们想高效处理自己闲余物品却又找不到很好的渠道的现状,详细介绍了校园二手商品寄卖系统的设计过程和具体功能。本文从前台页面和后台管理员页面两个层面对系统进行了搭建,搭建了十多个不同的板块来满足本系统的基本运转。也通过了系统的黑盒测试,结果表明该系统成功的完成了预期要求。

虽然本系统根据文中提出的设想和设计要求,经过一系列编程通过了测试,但此系统还是存在着一定的漏洞和弊端,不能作为一个正常的系统投入使用。经过对该系统的再三反思本人认为在界面美化和系统方面还是存在着不足,在数据库方面的设计也没有达到预想,与本人设计理念存在着一定的偏差。比如表间的关联约束,数据的冗余问题都没有完善到最完美的状态。下一步希望经过一系列的改进调整以后,该系统能够被各大高校认可,并获得广泛使用,发挥该系统的价值。

参考文献

  1. 陈春龙. 基于混合推荐的校园二手交易系统的研究与实现[D].辽宁大学,2022.
  2. 赵冰,刘星含,杨泰森等.基于微信小程序的校园二手闲置物品交易平台的设计与实现[J].电脑知识与技术,2022,18(21):64-66.
  3. 白忠军. 基于云平台的校园二手商品交易系统的设计与实现[D].贵州大学,2018.
  4. 李元博,王法胜.校园二手商品交易平台设计与实现[J].电脑知识与技术,2021,17(29):64-67+84.
  5. 赵秋雨.校园二手商品交易平台设计[J].许昌学院学报,2021,40(05):107-110.
  6. 胡思思,马诗豪,姜美.绿色校园背景下的校园二手交易平台[J].现代商业,2021(23):33-35.
  7. 欧阳桂秀.基于Java和MySQL的数据库管理系统的设计与实现[J].信息记录材料,2022,23(09):240-242
  8. 陈镇欣,张明庆,卢宇立.校园二手交易平台小程序的设计与实现[J].福建电脑,2021,37(08):102-104.
  9. 程功,王春霞.校园二手物品交易平台的研究[J].农村经济与科技,2021,32(14):97-99.
  10. 张洋洋,王丹,越豪杰等.校园二手物品交易平台研究与设计[J].无线互联科技,2021,18(10):48-49.
  11. 姜启雯,罗薇,马康.校园二手物品交易平台的设计案例[J].电子技术,2021,50(04):64-67.
  12. 孙素华.基于Java的茶叶销售管理系统的设计与实现[J].福建茶叶,2020,42(06):47-48.
  13. 宇海萍,张渤洋.基于微信小程序的校园二手交易平台开发[J].计算机时代,2020(04):29-32.
  14. 高宇,吴海斌,史明霞.校园微信二手平台的SWOT分析以及架构设计[J].市场周刊,2020(04):59-60+80.
  15. 高星宇,张家骏.校园二手交易平台的设计与实现[J].福建电脑,2020,36(02):87-89.
  16. 邓林.基于Java的农产品销售系统的研究与设计[J].电脑知识与技术,2022,18(12):43-45.
  17. 艾杨,刘婧,左静洁等.校园二手交易平台的设计与实现[J].南国博览,2019(09):47.
  18. 仲美涵,吴泽霖,王子涵校园二手物品交易平台优化构建研究[J].中国商论,2021(06):38-40.
  19. 李沛熹,朱晓君,姜建等.基于微信小程序的校园二手书籍交易平台设计与实现[J].电脑知识与技术,2021,17(23):57-59+67.
  20. 郭雨洁,徐强生,杨颖等.基于Android的校园二手物品交易平台的设计与实现[J].信息与电脑(理论版),2020,32(04):70-72.
  21. Syahputra K, Syahputra Z, Wahyuni S. New product lauch consignment reogram information system at PT.INDOMARCO ADI PRIMA[J]. INFOKUM, 2022, 10(03): 144-151.
  22. Ahunanya, Valentine, et al. "Consignment inventory system and entrepreneurial success among micro warehousing firms." International Journal of Social Science & Management Research 8.5 (2022): 18-28.
  23. Çömez-Dolgan N, Moussawi-Haidar L, Jaber M Y. A buyer-vendor system with untimely delivery costs: Traditional coordination vs. VMI with consignment stock[J]. Computers & Industrial Engineering, 2021, 154: 107009.
  24. Handiyanto R A, Wicaksono S R, Setiawan R. Accounting Information System in Egg Trading Business with Consignment Sales Method[J]. JTECS: Jurnal Sistem Telekomunikasi Elektronika Sistem Kontrol Power Sistem dan Komputer, 2023, 3(1): 41-50.
  25. Tomicová J, Poliak M, Zhuravleva N A. Impact of using e-CMR on neutralization of consignment note[J]. Transportation Research Procedia, 2021, 55: 110-117.

    谢

时间真的是猝不及防的东西,转眼间四年的大学生涯马上就要拉下帷幕。四年大学生活马上就要结束了,我也要离开这座充满冀F的城市,回到满是冀E的城市。回首这四年时光,有很多不舍与留恋,四年,一千四百六十多个日日夜夜。校园的一切都见证了我的成长。在这里,我不但认识了很多知识渊博的老师,还认识了许多志同道合的朋友,参加过学校的组织活动,一次又一次认识新的自己。四年内觉得自己成长了不少,这都得益于身边老师和同学的指导和帮助。

本篇论文的写作是在我的导师的帮助和指导下完成的,从一开始的确定论文题目到开题到最后成文,老师给与了我很大的帮助,帮我克服了很多难题,她渊博的专业知识,严谨的治学态度和高尚的人格令我十分钦佩。老师的谆谆教导让我切身体会到一位长者的智慧,并激励我在以后的学习和工作中努力进取,在此对我的导师表示最诚挚的感谢!

另外,在我撰写论文的过程中,还要感谢我亲爱的同学们及信工学院的各个领导及老师,他们给了我很多宝贵意见,在我失落时让我看到了希望与阳光,找到了前进的方向,正是在老师和同学们的热情帮助下,不仅令我的论文进展顺利,而且让我的生活也充满了色彩。

其次,我要感谢我的父母,感谢他们对我的培养和关爱,每当在我生活或学习过程中遇到困难时,他们总是无微不至的开导我,鼓励我,给与我包容和理解,让我有了承受挫折与打击的能力,是他们教会了我很多宝贵的人生道理,让我对未来重拾自信,在他们的鼓励和支持下,我顺利完成了研究阶段的学习,感谢他们,在以后的工作中,我定会积极进取,用优异的工作能力回报他们!

最后,我要感谢那个努力成长的自己,感谢自己的不完美,并能够激励着不断完善自身,感谢自己的乐观,在成长的路上不断的支撑着我度过一个又一个困难,感谢自己的坚持与耐心,不断调整自己的状态,将最好的自己能够展现在不同的人面前。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大写的y

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

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

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

打赏作者

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

抵扣说明:

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

余额充值