摘 要
国内的京东商城、天猫、苏宁易购等大型网站在图书销售等商品零售领域已经十分成熟完善,但是以高校学生二手书为主的二手图书资源目前还没有得到合理的开发利用。本人设计和实现的基于微信小程序的二手书籍交易平台是通过合理的市场调查然后才着手实施的。系统分前端和后端。前端是面向用户,实现二手书籍查询和购买等功能,后端实现管理员对系统的管理和控制。基于微信小程序的二手书籍交易平台使用Java语言,采用基于MVVM模式的Springboot框架进行开发。
关键词:二手书籍交易;Java;MySQL
Abstract
Large domestic websites such as JD.com, Tmall, and Suning.com have become very mature and complete in the field of book sales and other retail products. However, second-hand book resources mainly focused on college students' second-hand books have not yet been reasonably developed and utilized. The second-hand book trading platform designed and implemented by myself based on WeChat mini programs was implemented through reasonable market research. The system is divided into front-end and back-end. The front-end is user oriented, achieving functions such as querying and purchasing second-hand books, while the back-end enables administrators to manage and control the system. The second-hand book trading platform based on WeChat mini program is developed using Java language and the Springboot framework based on MVVM mode.
目 录
1 绪论
1.1 研究背景意义
随着市场经济的发展和人们生活水平的提高,二手书的市场是一个环保和低成本看书的选择,尤其在学校里,二手书籍交易就带给同学们一个供需平台,但是对于二手书籍的管理和销售,普通的旧书市场不能有效的进行,而随着电子商务的迅速发展和普及,网上购买商品和获取信息已经成为现代人生活的一种习惯。并且网上购物对于以高校学生为主的群体来说已经是不可或缺的一部分,所以基于微信小程序的二手书籍交易平台的出现也正是时代发展过程中解决旧书管理问题的科学方法。前期在二手书籍交易方面,市场存在二手书的购买和使用需求,但可能由于书籍购买后的快递配送还不够普及,还有付款的方式也不够简单方便等问题,所以二手书籍网上交易目前在以高校为主的市场还没有普及,因此,此次基于微信小程序的二手书籍交易平台项目对二手书籍交易中出现的实际购买及配送和付款等方面的功能进行了改善。
因为国内外传统的二手书籍的交易的方式是基于手工的,而人的精力和工作准确度是有限的,所以传统的二手书籍交易的数据管理方式难免会存在效率低下、准确率低等缺点,还伴随着人力资源的大量浪费。在管理的工作中,所涉及到的工作电脑机器比人类更为擅长,能够达到快速、准确、耗费资源小等要求。基于这些显著的优点,如果能设计一套完整且贴合具体校园用户需求的基于微信小程序的二手书籍交易平台,那么将大大地提高二手书籍交易的服务质量。在具备这样的基于微信小程序的二手书籍交易平台之下,买家只要登录到系统中就能看到所有的二手书籍,并且进行购买,卖家只要登录到系统中就能够出售二手书籍管理人员只需配备少量的专业人员对数据库进行日常数据审核、管理以及定期维护。整个过程中,使用者只需提供少量的必要信息,大部分数据处理工作皆由数据库和相关程序来完成,节省了大量时间。
1.3论文结构与章节安排
论文将分层次经行编排,除去论文摘要致谢文献参考部分,正文部分还会对网站需求做出分析,以及阐述大体的设计和实现的功能,最后罗列部分调测记录,论文主要架构如下:
第一章:引言。第一章主要介绍了课题研究的背景,系统开发的意义和本文的研究机器信息与主要工作。
第二章:系统需求分析。第二章主要从系统的用户、功能等方面进行需求分析。
第三章:系统设计。第三章主要对系统框架、系统功能模块、数据库进行功能设计。
第四章:系统实现。第四章主要介绍了系统框架搭建、系统界面的实现。
第五章:系统测试。第五章主要对系统的部分界面进行测试并对主要功能进行测试
2 基于微信小程序的二手书籍交易平台系统分析
系统分析是开发一个项目的先决条件,通过系统分析可以很好的了解系统的主体用户的基本需求情况,同时这也是项目的开发的原因。进而对系统开发进行可行性分析,通常包括技术可行性、经济可行性等,可行性分析同时也是从项目整体角度进行的分析。然后就是对项目的具体需求进行分析,分析的手段一般都是通过用户的用例图来实现。下面是详细的介绍。
2.1 可行性分析
整个系统从设计到开发以及测试过程严谨步骤齐全,所有工作任务全部由本人完成,并未获取外部技术支持,节约了一切服务成本开销以及人工成本,在硬件方面,为节约成本使用一台二手移动工作站作为项目部署服务器以及数据库服务器,成本在一万元一下,真个网络部署也是由本人独立完成不涉及到其他人工费用,整个开发过程本着低成本,低消耗的原则。
所以经济可行性没有问题。
(2)操作可行性:
此次项目设计参考了几个该模式下系统的开发案例,对他们的操作界面分析,将众多案例结合在一起,突出以人为本简化操作,所以具有基本计算机知识的人都会操作本项目。
因此操作可行性也没有问题。
(3)技术可行性:
技术可行性指的是对于搭建框架的可行性,以及有更优秀的技术出现时系统的技术更新换代的纳新性如何,开发时间成本费用比如何。
现有的Java语言能够迎合所有电子商务系统的搭建,系统技术设备的可扩展性可以由Springboot框架的资源优势予以促成。我采用了编译器eclipse+java+mysql用以运行整体程序。
综上所述技术可行性也没有问题。
(4)法律可行性:
从开发者角度来看,Springboot框架是网上开源且免费的,在知识产权方面不会产生任何法律纠纷。
从用户使用角度来看,只要不再系统上贩卖违禁品,对系统做出条约协议,杜绝非法支付即可。
综上所述法律可行性也没有问题。
业务流程是用一些特定的符合和线条来进行演示用户在使用系统时的过程,在进行系统分析的时候,业务流程可以帮助开发人员更好的理解业务,发现错误,完善系统。
用户成功登入系统后就能够实现增加数据的操作,增加数据的编号是特定的,系统生成,用户不能随意填写,除了编号以外,其他增加信息用户自己填写,填写后的信息经过系统验证,验证合法通过就显示增加数据成功了,相反的话,就没有增加成功,图2-1显示的就是在增加数据时的流程。
图2-1 数据增加流程图
数据修改时的流程和上面介绍的数据增加时的流程差不多,如图2-2所示。
图2-2 数据修改流程图
如果系统里面存在一些没有用的数据的话,相关的管理人员还可以对这些数据进行删除,图2-3就是数据删除时的流程图。
图2-3 数据删除流程图
按照基于微信小程序的二手书籍交易平台的角色,我划分为了用户模块和管理员模块这两大部分。
用户管理模块:
(1)注册登录:游客可以随时进入到系统中,根据自己的电话号码进行注册,根据注册账号及密码进行登录。
(2)首页:用户登录进入首页,可以浏览轮播图,系统公告信息。书籍资讯信息等内容。
(3)书籍信息:买家用户点击“书籍信息”这个菜单按钮,可以浏览书籍信息,可以根据“书籍标签、书籍名称、书籍分类、作者”等搜索书籍。点击书籍浏览书籍具体信息,可点击收藏书籍。卖家用户可在此页面上传待销售的二手书籍信息。
(4)订单信息:在书籍详细信息页面点击“购买”,跳转至购买页面,填写具体信息后提交。订单提交后卖家用户在订单信息中审核订单,订单通过后,买家实现在线支付,卖家根据订单收货地址进行发货。
(5)收货信息:用户点击收货信息可以查看查看订单信息、物流信息等,点击“评价”可以对这笔订单进行评价。
(6)我的收藏:用户在我的收藏管理页面可以查看收藏书籍信息,同时可以对已收藏书籍取消收藏。
管理员管理模块:
(1)个人中心管理:管理员可以对个人信息及密码进行修改管理。
(2)用户管理:管理员可以对用户进行新增或删除管理。
(3)书籍分类管理:管理员对书籍分类进行增删改查。
(4)书籍信息管理:管理员可以对书籍信息进行维护管理。
(5)订单信息管理:管理员可以对用户订单信息进行管理。
(6)物流信息管理:管理员可以对物流信息进行管理。
(7)收货信息管理:管理员可以对收货信息进行后台管理。
(8)评价信息管理:管理员可以对用户评价信息进行管理。
(9)系统管理:管理员可以对轮播图、系统公告等进行后台管理。
基于微信小程序的二手书籍交易平台的非功能性需求比如基于微信小程序的二手书籍交易平台的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
表2-1基于微信小程序的二手书籍交易平台非功能需求表
安全性 | 主要指基于微信小程序的二手书籍交易平台数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指基于微信小程序的二手书籍交易平台能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响基于微信小程序的二手书籍交易平台占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着基于微信小程序的二手书籍交易平台的页面展示机器信息进行操作,就可以了。 |
可维护性 | 基于微信小程序的二手书籍交易平台开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
2.4 系统用例分析
通过2.3功能的分析,得出了本基于微信小程序的二手书籍交易平台的用例图:
图2-4就是用户、管理者角色的用例展示。
图2-4 基于微信小程序的二手书籍交易平台用户、管理员例图
本章主要通过对基于微信小程序的二手书籍交易平台的可行性分析、流程分析、功能需求分析、系统用例分析,确定整个基于微信小程序的二手书籍交易平台要实现的功能。同时也为基于微信小程序的二手书籍交易平台的代码实现和测试提供了标准。
本章主要讨论的机器信息包括基于微信小程序的二手书籍交易平台的功能模块设计、数据库系统设计。
3.1 系统架构设计
本基于微信小程序的二手书籍交易平台从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。
图3-1基于微信小程序的二手书籍交易平台系统架构设计图
表现层(UI):又称UI层,主要完成本基于微信小程序的二手书籍交易平台的UI交互功能,一个良好的UI可以打打提高用户的用户体验,增强用户使用本基于微信小程序的二手书籍交易平台时的舒适度。UI的界面设计也要适应不同版本的基于微信小程序的二手书籍交易平台以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用户进行交互操作时必须要得到与之相符的交互结果,这就要求表现层要与业务逻辑层进行良好的对接。
业务逻辑层(BLL):主要完成本基于微信小程序的二手书籍交易平台的数据处理功能。用户从表现层传输过来的数据经过业务逻辑层进行处理交付给数据层,系统从数据层读取的数据经过业务逻辑层进行处理交付给表现层。
数据层(DL):由于本基于微信小程序的二手书籍交易平台的数据是放在服务端的mysql数据库中,因此本属于服务层的部分可以直接整合在业务逻辑层中,所以数据层中只有数据库,其主要完成本基于微信小程序的二手书籍交易平台的数据存储和管理功能。
3.2 系统功能模块设计
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本基于微信小程序的二手书籍交易平台中的用例。那么接下来就要开始对本基于微信小程序的二手书籍交易平台的架构、主要功能和数据库开始进行设计。基于微信小程序的二手书籍交易平台根据前面章节的需求分析得出,其总体设计模块图如图3-2所示。
图3-2 基于微信小程序的二手书籍交易平台功能模块图
3.2.2用户模块设计
本系统的用户包括管理员和用户。两种用户模块的功能基本是相同的,用户比管理员多了一个注册功能,所以以用户模块的结构图为例进行分析,用户模块结构图为例进行分析。
图3-3用户模块结构图
3.2.3 订单信息管理模块设计
基于微信小程序的二手书籍交易平台中买家用户可以进行订单提交,卖家用户可以后台查看订单信息进行审核回复。所以需要专门设计一个订单西信息管理模块,具体的结构图如下:
图3-4订单信息模块结构图
3.2.4书籍信息管理模块设计
基于微信小程序的二手书籍交易平台是中需要存储图书信息信息,其模块功能结构,具体的结构图如下:
图3-5书籍信息模块结构图
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
3.3.1 数据库概念结构设计
下面是整个基于微信小程序的二手书籍交易平台中主要的数据库表总E-R实体关系图。
图3-6 基于微信小程序的二手书籍交易平台总E-R关系图
通过上一小节中基于微信小程序的二手书籍交易平台中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
功能:书籍信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
shujibiaoqian | varchar | 200 | 书籍标签 | ||
shujimingcheng | varchar | 200 | 书籍名称 | ||
shujifenlei | varchar | 200 | 书籍分类 | ||
shujifengmian | longtext | 4294967295 | 书籍封面 | ||
zuozhe | varchar | 200 | 作者 | ||
chubanshe | varchar | 200 | 出版社 | ||
danjia | float | 单价 | |||
shuliang | int | 数量 | |||
jianjie | longtext | 4294967295 | 简介 | ||
zhanghao | varchar | 200 | 账号 | ||
xingming | varchar | 200 | 姓名 | ||
shoujihaoma | varchar | 200 | 手机号码 | ||
faburiqi | date | 发布日期 |
表名:shujifenlei
功能:书籍分类
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
shujifenlei | varchar | 200 | 书籍分类 |
表名:shouhuoxinxi
功能:收货信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
shujibiaoqian | varchar | 200 | 书籍标签 | ||
shujimingcheng | varchar | 200 | 书籍名称 | ||
shuliang | varchar | 200 | 数量 | ||
jine | varchar | 200 | 金额 | ||
zhanghao | varchar | 200 | 账号 | ||
xingming | varchar | 200 | 姓名 | ||
shoujihaoma | varchar | 200 | 手机号码 | ||
maifangzhanghao | varchar | 200 | 买方账号 | ||
maifangxingming | varchar | 200 | 买方姓名 | ||
maifangshouji | varchar | 200 | 买方手机 | ||
shouhuodizhi | varchar | 200 | 收货地址 | ||
xiadanshijian | varchar | 200 | 下单时间 | ||
wuliudanhao | varchar | 200 | 物流单号 | ||
shouhuobeizhu | varchar | 200 | 收货备注 | ||
shouhuoshijian | datetime | 收货时间 | |||
userid | bigint | 用户id |
表名:pingjiaxinxi
功能:评价信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
pingjiabianhao | varchar | 200 | 评价编号 | ||
shujibiaoqian | varchar | 200 | 书籍标签 | ||
shujimingcheng | varchar | 200 | 书籍名称 | ||
zhanghao | varchar | 200 | 账号 | ||
xingming | varchar | 200 | 姓名 | ||
pingjianeirong | longtext | 4294967295 | 评价内容 | ||
maifangzhanghao | varchar | 200 | 买方账号 | ||
maifangxingming | varchar | 200 | 买方姓名 | ||
pingjiariqi | date | 评价日期 | |||
userid | bigint | 用户id |
表名:news
功能:系统公告
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
title | varchar | 200 | 标题 | ||
introduction | longtext | 4294967295 | 简介 | ||
picture | longtext | 4294967295 | 图片 | ||
content | longtext | 4294967295 | 内容 |
表名:yonghu
功能:用户
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zhanghao | varchar | 200 | 账号 | ||
mima | varchar | 200 | 密码 | ||
xingming | varchar | 200 | 姓名 | ||
xingbie | varchar | 200 | 性别 | ||
youxiang | varchar | 200 | 邮箱 | ||
shoujihaoma | varchar | 200 | 手机号码 | ||
touxiang | longtext | 4294967295 | 头像 |
表名:dingdanxinxi
功能:订单信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
shujibiaoqian | varchar | 200 | 书籍标签 | ||
shujimingcheng | varchar | 200 | 书籍名称 | ||
shujifengmian | longtext | 4294967295 | 书籍封面 | ||
danjia | float | 单价 | |||
shuliang | int | 数量 | |||
jine | float | 金额 | |||
zhanghao | varchar | 200 | 账号 | ||
xingming | varchar | 200 | 姓名 | ||
shoujihaoma | varchar | 200 | 手机号码 | ||
dingdanzhuangtai | varchar | 200 | 订单状态 | ||
maifangzhanghao | varchar | 200 | 买方账号 | ||
maifangxingming | varchar | 200 | 买方姓名 | ||
maifangshouji | varchar | 200 | 买方手机 | ||
shouhuodizhi | varchar | 200 | 收货地址 | ||
beizhu | varchar | 200 | 备注 | ||
xiadanshijian | datetime | 下单时间 | |||
sfsh | varchar | 200 | 是否审核 | 待审核 | |
shhf | longtext | 4294967295 | 审核回复 | ||
ispay | varchar | 200 | 是否支付 | 未支付 | |
userid | bigint | 用户id |
表名:wuliuxinxi
功能:物流信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
shujibiaoqian | varchar | 200 | 书籍标签 | ||
shujimingcheng | varchar | 200 | 书籍名称 | ||
shuliang | varchar | 200 | 数量 | ||
jine | varchar | 200 | 金额 | ||
zhanghao | varchar | 200 | 账号 | ||
xingming | varchar | 200 | 姓名 | ||
shoujihaoma | varchar | 200 | 手机号码 | ||
maifangzhanghao | varchar | 200 | 买方账号 | ||
maifangxingming | varchar | 200 | 买方姓名 | ||
maifangshouji | varchar | 200 | 买方手机 | ||
shouhuodizhi | varchar | 200 | 收货地址 | ||
xiadanshijian | varchar | 200 | 下单时间 | ||
shouhuozhuangtai | varchar | 200 | 收货状态 | ||
wuliuzhuangtai | varchar | 200 | 物流状态 | ||
wuliudanhao | varchar | 200 | 物流单号 | ||
wuliuxiangqing | longtext | 4294967295 | 物流详情 | ||
gengxinshijian | datetime | 更新时间 | |||
userid | bigint | 用户id |
表名:users
功能:用户表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
username | varchar | 100 | 用户名 | ||
password | varchar | 100 | 密码 | ||
role | varchar | 100 | 角色 | 管理员 | |
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP |
整个基于微信小程序的二手书籍交易平台的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4 基于微信小程序的二手书籍交易平台详细设计与实现
基于微信小程序的二手书籍交易平台的详细设计与实现主要是根据前面的基于微信小程序的二手书籍交易平台的需求分析和基于微信小程序的二手书籍交易平台的总体设计来设计页面并实现业务逻辑。主要从基于微信小程序的二手书籍交易平台界面实现、业务逻辑实现这两部分进行介绍。
4.1用户功能模块
4.1.1 首页界面
当进入基于微信小程序的二手书籍交易平台的时候,系统可以分为“首页”、“书籍信息”、“我的”,首先映入眼帘的是系统的轮播图,再往下是各种各样的系统公告,其主界面展示如下图4-1所示。
图4-1 首页界面图
4.1.2 用户注册界面
不是基于微信小程序的二手书籍交易平台中正式用户的是可以在线进行注册的,当用户右上角“注册”按钮的时候,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等信息后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用用户注册界面展示如下图4-2所示。
图4-2 前台用户注册界面图
用户注册的关键代码如下。
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
4.1.3 用户登录界面
基于微信小程序的二手书籍交易平台中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到基于微信小程序的二手书籍交易平台的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。
图4-3用户登录界面图
用户登录的关键代码如下。
/**
* 登录
* @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.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}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);
4.1.4书籍信息界面
当点击导航栏上的“书籍信息”的时候,就会进入对应的书籍列表界面,用户可以点击某个书籍进行详情查看,也可以根据书籍名称进行搜索框搜索。书籍信息界面如下图4-4所示。
图4-4书籍信息界面图
书籍信息的关键代码如下。
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
4.1.5 书籍购买界面
当用户点击基于微信小程序的二手书籍交易平台中导航栏上的“书籍”后将会进入到书籍购买界面,然后填写购买信息点击提交,书籍购买界面如下图4-5所示。
图4-5书籍购买界面图
书籍购买的关键代码如下。
@RequestMapping(value = {"/count_group", "/count"})
public Map<String, Object> count(HttpServletRequest request) {
Query count = service.count(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
4.1.6 物流信息界面
当用户点击“物流信息”后就可以进行物流信息查看了解,物流信息详情页面如图4-6所示。
图4-6 物流信息详情界面图
物流信息的关键代码:
@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);
}
4.1.7 订单支付界面
当用户点击“订单支付”链接后就进入订单支付详情界面,可以进行支付方式选择,。订单支付界面如下图4-7所示。
图4-7 订单支付界面图
订单支付界面关键代码:
@RequestMapping(value = {"/count_group", "/count"})
public Map<String, Object> count(HttpServletRequest request) {
Query count = service.count(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
4.1.8收货信息界面
可以查看收货信息,收货信息界面如下图4-8所示。
图4-8 收货信息界面图
收货信息的关键代码如下。
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
Query select = service.select(service.readQuery(request), service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
public Query select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return runEntitySql(sql.toString());
}
4.2管理员功能模块
4.2.1 用户管理界面
基于微信小程序的二手书籍交易平台中的管理人员在“用户管理”这一菜单中是可以对用户信息进行管控。界面如下图4-9所示。
图4-9用户管理界面图
用户管理的关键代码如下。
@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);
}
public Map<String,String> readConfig(HttpServletRequest request){
Map<String,String> map = new HashMap<>();
map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));
map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));
map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));
map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));
map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));
map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));
map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));
map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));
return map;
}
public Map<String,String> readQuery(HttpServletRequest request){
String queryString = request.getQueryString();
if (queryString != null && !"".equals(queryString)) {
String[] querys = queryString.split("&");
Map<String, String> map = new HashMap<>();
for (String query : querys) {
String[] q = query.split("=");
map.put(q[0], q[1]);
}
map.remove(FindConfig.PAGE);
map.remove(FindConfig.SIZE);
map.remove(FindConfig.LIKE);
map.remove(FindConfig.ORDER_BY);
map.remove(FindConfig.FIELD);
map.remove(FindConfig.GROUP_BY);
map.remove(FindConfig.MAX_);
map.remove(FindConfig.MIN_);
return map;
}else {
return new HashMap<>();
}
}
@Transactional
public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){
StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET ");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");
}else {
sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");
}
4.2.2 书籍管理界面
基于微信小程序的二手书籍交易平台中的管理人员在“书籍管理”这一菜单是中可以对所有书籍信息进行增删改查。书籍管理界面如下图4-10所示。
图4-10书籍管理界面图
书籍管理关键代码:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
@Transactional
public void delete(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");
sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY))));
log.info("[{}] - 删除操作:{}",table,sql);
Query query1 = runCountSql(sql.toString());
query1.executeUpdate();
}
4.2.3 订单管理界面
基于微信小程序的二手书籍交易平台中的管理人员在“订单管理”这一菜单中是可以对基于微信小程序的二手书籍交易平台内的用户提交的书籍购买订单进行维护和管理的,界面如下图4-11所示。
图4-11订单管理界面图
订单管理关键代码:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append("`").append(table).append("`").append(" (");
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(") VALUES (");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
4.2.4 物流信息管理界面
基于微信小程序的二手书籍交易平台中的管理人员在“物流信息管理”这一菜单下是可以对基于微信小程序的二手书籍交易平台内用户订单的物流信息进行管控的,其管理界面如下图4-12所示。
图4-12物流信息管理界面图
物流信息管理关键代码:
@RestController
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
/**
* 服务对象
*/
@Autowired
public AuthController(AuthService service) {
setService(service);
}
}
4.2.5评价管理界面
基于微信小程序的二手书籍交易平台中的管理人员在“评价管理”这一菜单下主要对用户提交的评价信息进行管理,其界面如下图4-12所示。
图4-12评价管理界面图
评价管理关键代码:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
Query select = service.select(service.readQuery(request), service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
public Query select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return runEntitySql(sql.toString());
}
5系统测试
5.1 系统测试用例
系统测试包括:用户登录功能测试、书籍购买功能测试、书籍添加、密码修改功能测试,如表5-1、5-2、5-3、5-4所示:
表5-1 用户登录功能测试表
用例名称 | 用户登录系统 |
目的 | 测试用户通过正确的用户名和密码可否登录功能 |
前提 | 未登录的情况下 |
测试流程 | 1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 | 用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 | 实际结果与预期结果一致 |
书籍购买查看功能测试:
表5-2 书籍购买功能测试表
用例名称 | 书籍购买 |
目的 | 测试书籍购买功能 |
前提 | 用户登录 |
测试流程 | 点击书籍购买 |
预期结果 | 可以进行书籍购买提交 |
实际结果 | 实际结果与预期结果一致 |
管理员添加书籍界面测试:
表5-3 管理员添加书籍界面测试表
用例名称 | 书籍添加测试用例 | ||
目的 | 测试书籍添加功能 | ||
前提 | 管理员正常登录情况下 | ||
测试流程 | 1)管理员点击书籍,然后点击添加后并填写信息。 2)点击进行提交。 | ||
预期结果 | 提交以后,页面首页会显示新的书籍 | ||
实际结果 | 实际结果与预期结果一致 | ||
实际结果 | 实际结果与预期结果一致 |
密码修改搜索功能测试:
表5-4 密码修改功能测试表
用例名称 | 密码修改测试用例 |
目的 | 测试管理员密码修改功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 | 使用新的密码可以登录 |
实际结果 | 实际结果与预期结果一致 |
通过编写基于微信小程序的二手书籍交易平台的测试用例,已经检测完毕用户登录功能测试、书籍购买功能测试、书籍添加、密码修改功能测试,通过这4大模块为基于微信小程序的二手书籍交易平台的后期推广运营提供了强力的技术支撑。
结 论
在基于微信小程序的二手书籍交易平台开发之前,需要先对不同用户身份的具体需求进行分析。包括系统的可行性分析、功能需求分析以及其他需求等。在可行性分析过程中,对系统实现的技术性、经济性以及管理等方面进行了分析。总体上证明了系统实施的可行性。
本文总结了基于微信小程序的二手书籍交易平台实现背景与现状,然后阐述了系统的具体业务需求,并根据系统需求对系统结构以及功能模块等进行了详细地设计,将整个系统划分为多个不同的功能模块。在分析系统功能需求时,对整个系统的总体架构以及功能模块等进行了分析,并选择合适的系统开发技术完成了对各个模块的开发工作。系统开发完成之后进行了部署,同时进行了系统的测试过程,通过测试证明了系统在功能以及性能等方面都达到了预期的要求,具有较高的稳定性与可靠性。
参考文献
[1]曹瑜琳,周春晖,陈云燕,孟庆芸,韩思梦,方怡.关于高校二手书交易平台“易书屋”的分析与设计[J].科技与创新,2022(04):95-97+100.
[2]简工博. 二手商品交易成“80后”“90后”时尚生活方式[N]. 解放日报,2022-01-31(004).
[3]李俊,马琦,朱嘉灵,陈乐.新型大学校园二手交易平台构建研究[J].物流工程与管理,2021,43(12):145-148.
[4]陈光磊,王廷湘,吴艳,王茂华,李东阳,唐徐韵.O2O模式:高校二手书交易现状与平台构建设想[J].营销界,2021(Z3):76-78.
[5]徐彦. C2B2C模式垂直二手交易平台商业模式研究[D].电子科技大学,2021.
[6]贺欢,胡成耀,汪洋,谢腾飞.大学生二手交易平台的现状调查与前景预测——以阜阳师范大学为例[J].现代营销(学苑版),2021(06):93-95.
[7]赵壮. 推荐算法在校园二手交易平台中的研究与应用[D].武汉轻工大学,2021.
[8]邬红梅,路雨晴.高校二手书交易现状分析与分享平台建设——以洛阳市高校为例[J].科技创新与应用,2020(29):44-47.
[9]邬红梅,路雨晴.高校二手书市场交易现状与存在问题分析——以洛阳市高校为例[J].时代经贸,2020(20):53-55.
[10]郑青青. 网络二手书平台经营现状与创新策略研究[D].苏州大学,2020.
[11]肖肖,林道婷,向志成,朱晓华.基于自主购书模式下的书籍循环利用体系的构建——以高校ibooking交易平台为例[J].教育现代化,2019,6(77):172-174.
[12]龙晓菲,陈斌,毕蒙蒙,汪露,郁玥.关于建立线上二手书交易平台的可行性研究[J].纳税,2019,13(16):184+187.
[13]任长玉. 我国二手书网络交易平台现状和发展策略研究[D].青岛科技大学,2019.
[14]徐红银,吴恋,李裕米,蔡霞.大学校园闲置书籍交换交易平台开发与设计[J].物联网技术,2018,8(08):96-97.
[15]林源. 高校二手书交易平台的研究与设计[D].长春工业大学,2018.
致 谢
时光飞逝,转眼间我在学校的这些年生活即将结束,回顾这几年的学习生活,收获良多,既有幸福也有难过,学校生活的结束对于我来说也是一个新的开始。论文即将完成,在此,我心中有许多想要感谢的人。首先感谢我的导师,不仅在学习研究方面加以指导,也在生活和为人处世上给予帮助。还要感谢授课老师,你们严谨的学术精神和积极向上的工作态度都在激励我的成长和进步。感谢多年来一直生活在一起的室友,谢谢你们多年来的陪伴和照顾。最后,要感谢各位论文评审老师,感谢您们在百忙之中抽空评阅本论文并给出宝贵的意见和建议。
点赞、收藏、关注 私信博主可领取源代码
关注博主下篇更精彩
一键三连!!!
一键三连!!!
一键三连!!!
感谢一键三连!!!