小学校园“闲书”交易平台的设计与实现-计算机毕业设计源码04282

news2024/11/17 3:00:04

小学校园“闲书”交易平台的设计与实现

 

小学校园“闲书”交易平台是为了解决小学生之间的书籍交流和阅读兴趣培养而设计的。该平台通过使用现代技术手段,如移动应用开发和互联网技术,构建了一个功能齐全的交易平台。平台支持用户注册与登录,用户可以进行图书信息发布和管理。同时,平台还提供搜索和筛选功能,方便用户寻找感兴趣的书籍。小学校园“闲书”交易平台对于小学生之间的书籍交流和阅读兴趣培养具有积极影响。通过该平台,学生能够分享和获取更多的书籍资源,培养阅读兴趣和习惯。

关键词:图书交易;Java语言;Springboot框架

 

Abstract

The "Idle Book" trading platform on primary school campuses is designed to facilitate book exchange and cultivate reading interests among primary school students. The platform has built a fully functional trading platform by using modern technical means, such as mobile application development and Internet technology. The platform supports user registration and login, allowing users to publish and manage book information. At the same time, the platform also provides search and filtering functions, making it convenient for users to find books of interest. The "idle book" trading platform on primary school campuses has a positive impact on the exchange of books and the cultivation of reading interests among primary school students. Through this platform, students can share and access more book resources, cultivate reading interests and habits.

Key words: Book trading; Java language; Springboot framework

目  录

第1章 绪论

1.1 研究背景与意义

1.2 开发现状

1.3 开发目的

1.4 研究内容

2章 系统分析

2.1 可行性分析

2.1.1 技术可行性

2.1.2 经济可行性

2.1.3 社会可行性

2.2系统功能分析和描述

2.3性能分析 6

2.4系统操作流程 7

2.4.1添加信息流程 7

2.4.2操作流程 7

2.4.3删除信息流程 8

3章 系统设计

3.1系统架构设计

3.2数据库设计

3.2.1实体ER 13

3.2.2数据表 14

4 系统实现

4.1 登录模块的实现 16

4.2 通知公告模块的实现 23

4.3 闲书商城模块的实现 24

4.4 图书购买模块的实现 26

4.5 闲书商城管理模块的实现 30

5 系统测试 31

5.1 测试环境 31

5.2 测试目标

5.3 功能测试 31

5.4 测试结果 32

6 总结与展望 34

参考文献 35

致谢 37

  1. 绪论
    1. 研究背景与意义

随着社会的发展和教育的普及,学生们对于阅读的需求日益增加。然而,在学生群体中存在许多闲置的书籍,这些书籍往往被束之高阁,无法得到充分的利用。同时,学生之间分享书籍的渠道也相对有限,导致了资源浪费和信息不对称的问题。因此,小学校园“闲书”交易平台的研究旨在为学生提供一个便捷、安全的书籍交流平台。通过借助移动应用开发和互联网技术,该平台可以使学生能够轻松地交换、借阅和购买闲置书籍。这样一来,学生们可以更好地利用自己的书籍资源,培养阅读兴趣和习惯。此外,小学校园“闲书”交易平台的研究还关注学生之间的社交和合作。通过平台上的交流功能,学生们可以互相沟通、协商和共享阅读心得,促进彼此之间的交流和合作。这不仅有助于学生之间的友谊建立,还能增强他们的阅读体验和理解能力。

    1. 开发现状

国内方面,随着互联网的普及和电子商务的发展,图书交易平台得到了广泛关注和研究。一些大型电商平台,如京东、淘宝等,在图书交易领域已经取得了显著成就。这些平台提供了丰富的图书资源和便捷的交易方式,满足了用户的购买需求。此外,一些新兴的二手图书交易平台也逐渐兴起,为用户提供了闲置图书的交换和转让渠道。然而,目前国内的图书交易系统在个性化推荐、社交交流等方面仍有进一步提升的空间。

在国际上,图书交易系统的研究也取得了一定的进展。例如,美国的亚马逊公司以其强大的图书库存和智能推荐系统成为全球最大的在线图书零售商之一。除了亚马逊,国外还涌现了一些专门的二手图书交易平台,如BookFinder、AbeBooks等,为用户提供了更多的选择和便利。此外,一些图书交易系统也开始探索与社交媒体的结合,通过社交分享和评论等功能,促进用户之间的交流和互动。

    1. 开发目的

通过搭建“闲书”交易平台,旨在提供一个安全、便捷的环境,让学生能够交换和购买闲置书籍。这有助于促进小学生之间的书籍交流和分享,让更多的书籍得到充分利用。该平台的研究目的还在于通过促进学生之间的书籍交流,培养和激发他们的阅读兴趣和习惯。通过与其他同学分享和借阅不同类型的书籍,学生可以拓宽阅读领域,增加阅读的乐趣和意义。平台提供可靠的书籍交易渠道:传统的书籍交易方式可能存在信息不对称和信任问题。而研究该平台的目的是为了提供一个可靠的书籍交易渠道,确保交易的安全和公正性。通过平台上的交流功能和评价系统,用户可以相互沟通、确认交易细节,同时也可以了解交易方的信誉和口碑。

小学校园“闲书”交易平台的研究目的还在于推动数字化教育发展。通过借助移动应用开发和互联网技术,该平台提供了一个基于数字化平台的书籍交流环境,使学生能够适应数字化时代的学习和交流方式。

    1. 研究内容

小学校园“闲书”交易平台的开发及实现,所需要的工作内容:

(1)首先是确定选题,确定好所要做的系统,并对系统的背景及现在面临的一些问题等进行系统的初步确认。

(2)系统确认完成后,结合系统开发的需求进行确认系统开发所使用的技术,小学校园“闲书”交易平台的开发使用Springboot框架,数据库进行平台的搭建开发,确认好使用的技术进行技术分析,所使用的技术是否可以完成系统的实现。

(3)确定好系统使用的技术,进行在线确认系统所划分的用户角色,并且根据用户角色划分确定所要设计的功能模块,对小学校园“闲书”交易平台的设计主要划分别为管理员和用户角色,并所使用的功能模块也相应不同,但是系统的数据库实现的内容是交互的,用户可以随时根据自己的需求进行图书购买,卖家可以对闲书商城进行发布更新,对于系统工作人员可以根据自己的分管内容进行各项数据的管理操作,管理员获取到所有用户的详细数据信息,并根据需求进行第一时间处理解决。

(4)系统的功能模块确认完成后进行程序及界面的设计,设计完成后,并且通过测试来判断程序是否完善,对于系统测试,需要不同的用户进行不同的内容编辑及提交,及使用不同的测试方式找出程序中存在的漏洞,并对程序出现的漏洞问题进行在线解决处理,如果测试系统没有任何问题时,可以将系统上传进行正式操作使用。

  1. 系统分析
    1. 可行性分析

开发任何一个系统,都要对其可行性进行分析,对其时间和资源上的限制进行考虑,这样可以减少系统开发的风险。同时,分析之后不仅能够合理的运用人力,还能在各方面资源的消耗上得到节省。下面就对技术、经济和社会三个方面来介绍。

      1. 技术可行性

技术可行性主要考虑当前项目所用的技术是否能够符合,在设备上是否能够满足,及各种辅助工具是否提供帮助。本系统用的是Java开发语言,调试相对简单,当前的计算机硬件配置也完全能满足开发的需求,因此在技术上是绝对可行的。软件方面:由于软件的开发平台成熟可行,它们速度快、容量大、可靠性能高、价格低,完全能满足系统的需求。采用Java编程语言,已无技术上的问题。

      1. 经济可行性

系统所采用的Myeclipse开发平台和Mysql后端数据库均为免费开发工具。故开发成本主要集中在后期的推广及系统维护上。相对于成本较高的C/S模式,也是选用了成本较低的B/S模式,所以经济上几乎没任何问题。

      1. 社会可行性

本系统是自行开发的系统,以方便高效设计小学校园“闲书”交易平台为出发点,是具有实际意义的系统,开发的环境软件和用到的数据库也都是开源代码,不存在侵权等问题,所以在社会方面也是可行的。

2.2系统流程分析

2.2.1添加信息流程

添加信息,编号系统使用自动编号模式,没有用户填写,用户添加信息输入信息,系统将自动确认的信息和数据,验证的成功是有效的信息添加到数据库,信息无效,重新输入信息。添加信息流程如图2-1所示。

2-1 添加信息流程图

2.2.2操作流程

用户想进入系统,首先进入系统登录界面,通过正确的用户名、密码,选择登录类型登录,系统会检查登录信息,信息正确,然后输入相应的功能界面,提示信息错误,登录失败。系统操作流程如图2-2所示。

               

2-2操作流程图

2.2.3删除信息流程

用户选择要删除的信息并单击Delete按钮。系统提示是否删除信息。如果用户想要删除信息,系统将删除信息。系统数据库删除信息。删除信息流程图如图2-3所示。

2-3 删除信息流程图


  1. 系统设计
    1. 系统架构设计

小学校园“闲书”交易平台 的系统项目的概述设计分析,主要内容有小学校园“闲书”交易平台的具体分析,进行数据库的是设计,数据采用mysql数据库,并且对于系统的设计采用比较人性化的操作设计,对于系统出现的错误信息可以及时做出处理及反馈。

基于小学校园“闲书”交易平台的设计基于现有的电脑,可以实现交换论坛、通知公告、留言板、闲书商城、读书笔记、商城管理等详细的了解及统计分析。根据系统功能需求建立的模块关系图如下图: 

      图3-1管理员功能模块图

  图3-2用户功能模块图

图3-3卖家功能模块图

    1. 数据库设计

数据库是信息系统的基础和核心。数据库设计的好坏直接影响到信息系统开发的成败。创建数据库表首先确定实体的属性和实体之间的关系。根据关系创建一个数据表。

4.3.1实体ER图

数据库是整个软件编程中最重要的一个步骤,对于数据库问题主要是判定数据库的数量和结构公式的创建。展示系统使用的是Mysql进行对数据库进行管理,进行保证数据的安全性、稳定性等。

概念模型的设计是为了抽象真实世界的信息,并对信息世界进行建模。它是数据库设计的强大工具。数据库概念模型设计可以通过E-R图描述现实世界的概念模型。系统的E-R图显示了系统中实体之间的链接。而且Mysql数据库是自我保护能力比较强的数据库,下图主要是对数据库实体的E-R图:

(1)闲书商城E-R图,如图3-4所示:

 图3-4闲书商城实体属性图

 (2)订单信息E-R图如图3-5所示:

   图3-5订单信息实体图

(3)订单配送E-R图如图3-6所示:

   图3-6订单配送实体图

这些功能可以充分满足小学校园“闲书”交易平台的需求。此系统功能较为全面如下图系统功能结构如图3-7所示。

 图3-7系统功能结构图

4.3.2数据表

将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。

    1. 表book_exchange (图书交换)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

book_exchange_id

int

10

0

N

Y

图书交换ID

2

publish_users

int

10

0

Y

N

0

发布用户

3

user_name

varchar

64

0

Y

N

用户名称

4

book_name

varchar

64

0

Y

N

图书名称

5

book_types

varchar

64

0

Y

N

图书类型

6

book_images

varchar

255

0

Y

N

图书图片

7

publishing_house_name

varchar

64

0

Y

N

出版社名

8

damage_level

varchar

64

0

Y

N

损坏程度

9

exchange_location

varchar

64

0

Y

N

交换地点

10

book_introduction

text

65535

0

Y

N

图书介绍

11

hits

int

10

0

N

N

0

点击数

12

praise_len

int

10

0

N

N

0

点赞数

13

examine_state

varchar

16

0

N

N

未审核

审核状态

14

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

15

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表book_types (图书类型)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

book_types_id

int

10

0

N

Y

图书类型ID

2

book_types

varchar

64

0

Y

N

图书类型

3

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表feedback (意见反馈)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

feedback_id

int

10

0

N

Y

意见反馈ID

2

regular_users

int

10

0

Y

N

0

普通用户

3

user_name

varchar

64

0

Y

N

用户名称

4

feedback_title

varchar

64

0

Y

N

反馈标题

5

feedback_time

date

10

0

Y

N

反馈时间

6

feedback_content

text

65535

0

Y

N

反馈内容

7

examine_state

varchar

16

0

N

N

未审核

审核状态

8

examine_reply

varchar

16

0

Y

N

审核回复

9

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表forum (论坛)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

forum_id

mediumint

8

0

N

Y

论坛id

2

display

smallint

5

0

N

N

100

排序

3

user_id

mediumint

8

0

N

N

0

用户ID

4

nickname

varchar

16

0

Y

N

昵称:[0,16]

5

praise_len

int

10

0

Y

N

0

点赞数

6

hits

int

10

0

N

N

0

访问数

7

title

varchar

125

0

N

N

标题

8

keywords

varchar

125

0

Y

N

关键词

9

description

varchar

255

0

Y

N

描述

10

url

varchar

255

0

Y

N

来源地址

11

tag

varchar

255

0

Y

N

标签

12

img

text

65535

0

Y

N

封面图

13

content

longtext

2147483647

0

Y

N

正文

14

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

15

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

16

avatar

varchar

255

0

Y

N

发帖人头像:

17

type

varchar

64

0

N

N

0

论坛分类:[0,1000]用来搜索指定类型的论坛帖

    1. 表message (留言板)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

message_id

int

10

0

N

Y

留言板ID:

2

user_id

int

10

0

N

N

0

用户ID:

3

title

varchar

64

0

Y

N

标题:

4

content

longtext

2147483647

0

N

N

内容:

5

nickname

varchar

32

0

N

N

昵称:

6

avatar

varchar

255

0

Y

N

头像:

7

email

varchar

125

0

Y

N

留言者邮箱

8

phone

varchar

11

0

Y

N

留言者手机号码

9

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

11

reply

longtext

2147483647

0

Y

N

回复

12

reply_state

tinyint

4

0

Y

N

0

回复状态

    1. 表reading_notes (读书笔记)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

reading_notes_id

int

10

0

N

Y

读书笔记ID

2

regular_users

int

10

0

Y

N

0

普通用户

3

user_name

varchar

64

0

Y

N

用户名称

4

book_name

varchar

64

0

Y

N

图书名称

5

book_types

varchar

64

0

Y

N

图书类型

6

book_authors

varchar

64

0

Y

N

图书作者

7

note_images

longtext

2147483647

0

Y

N

笔记图片

8

hits

int

10

0

N

N

0

点击数

9

praise_len

int

10

0

N

N

0

点赞数

10

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

11

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表slides (轮播图)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

slides_id

int

10

0

N

Y

轮播图ID:

2

title

varchar

64

0

Y

N

标题:

3

content

varchar

255

0

Y

N

内容:

4

url

varchar

255

0

Y

N

链接:

5

img

varchar

255

0

Y

N

轮播图:

6

hits

int

10

0

N

N

0

点击量:

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

    1. 表exchange_location (交换地点)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

exchange_location_id

int

10

0

N

Y

交换地点ID

2

exchange_location

varchar

64

0

Y

N

交换地点

3

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表exchange_records (交换记录)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

exchange_records_id

int

10

0

N

Y

交换记录ID

2

exchange_users

int

10

0

Y

N

0

交换用户

3

user_name

varchar

64

0

Y

N

用户名称

4

publish_users

int

10

0

Y

N

0

发布用户

5

book_name

varchar

64

0

Y

N

图书名称

6

exchange_time

datetime

19

0

Y

N

交换时间

7

exchange_content

text

65535

0

Y

N

交换内容

8

examine_state

varchar

16

0

N

N

未审核

审核状态

9

examine_reply

varchar

16

0

Y

N

审核回复

10

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

11

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表forum_type (论坛分类)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

type_id

smallint

5

0

N

Y

分类ID:[0,10000]

2

name

varchar

16

0

N

N

分类名称:[2,16]

3

description

varchar

255

0

Y

N

描述:[0,255]描述该分类的作用

4

url

varchar

255

0

Y

N

外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置

5

father_id

smallint

5

0

N

N

0

上级分类ID:[0,32767]

6

icon

varchar

255

0

Y

N

分类图标:

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

  1. 系统实现
    1. 登录模块的实现

为确保系统安全性,系统操作员只有在登录界面输入正确的用户名、密码、权限以及验证码,单击“登录”按钮后才能够进入本系统的主界面。

用户登录流程图如下所示。               

图4-1用户登录流程图

登录界面如下图所示。

图4-2登录界面

登录关键代码如下所示。

/**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        String username = data.get("username");

        String email = data.get("email");

        String phone = data.get("phone");

        String password = data.get("password");

        List resultList = null;

        Map<String, String> map = new HashMap<>();

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.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);

        Map<String, String> groupMap = new HashMap<>();

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

            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());

            tokenService.save(accessToken);

            // 返回用户信息

            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, "账号或密码不正确");

        }

}

    1. 通知公告模块的实现

用户点击首页的通知公告栏可以查看所有通知公告列表,可以点击某个公告进行查看,可以在公告界面下方进行点赞、评论发布等,公告信息由后台管理员进行增删改查操作。

通知公告数据展示界面如下图所示。

4-3通知公告界面图

通知公告关键代码如下所示。

@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);

}

    1. 闲书商城模块的实现

用户点击闲书商城,可以浏览商城内的图书信息,可以点击某个图书进行详情查看,也可以在界面的搜索界面输入关键字眼进行图书的搜索。

闲书商城界面如下所示。

图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);

}

    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();

    }

    1. 图书购买模块的实现

图书购买功能整体流程:用户点击图书,系统跳转至图书购买详情页面,用户核对好订单编号、商品名称、购买数量、交易总额信息之后,在线购买操作,进行费用支付。

图书购买流程图如下图所示。

图4-5图书购买流程图

图书购买界面如下图所示。

图4-6图书购买界面

闲书商城管理关键代码如下所示。

@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());

    }

    1. 闲书商城管理模块的实现

此页面的关键是编写图书,包括图书编号、封面、图书名称、作者、库存、图书介绍等。单击提交按钮以完成信息的添加。如果未写入完整的图书,例如,如果未写入图书编号,系统将给出相应的错误提示,并且无法成功输入。数据以概念的形式以onsubmit =“return checkForm()”的形式写入以进行检查,checkForm()函数是一种用于写入数据的不同类型的校对方法,是不是为空也是经过form表单中的οnsubmit=”return checkForm()来检查。

图书添加流程图如下图所示。

图4-7图书添加流程图

闲书商城管理界面如下图所示。

图4-8闲书商城管理界面图

闲书商城管理关键代码如下所示。

@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(",");

            }

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));

        log.info("[{}] - 更新操作:{}",table,sql);

        Query query1 = runCountSql(sql.toString());

        query1.executeUpdate();

}

    public String toWhereSql(Map<String,String> query, Boolean like) {

        if (query.size() > 0) {

            try {

                StringBuilder sql = new StringBuilder(" WHERE ");

                for (Map.Entry<String, String> entry : query.entrySet()) {

                    if (entry.getKey().contains(FindConfig.MIN_)) {

                        String min = humpToLine(entry.getKey()).replace("_min", "");

                        sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");

                        continue;

                    }

                    if (entry.getKey().contains(FindConfig.MAX_)) {

                        String max = humpToLine(entry.getKey()).replace("_max", "");

                        sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");

                        continue;

                    }

                    if (like == true) {

                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and ");

                    } else {

                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and ");

                    }

                }

                sql.delete(sql.length() - 4, sql.length());

                sql.append(" ");

                return sql.toString();

            } catch (UnsupportedEncodingException e) {

                log.info("拼接sql 失败:{}", e.getMessage());

            }

        }

        return "";

    }

  1. 系统测试
    1. 测试环境

1、服务器端

操作系统:Windows 7

Web服务器:Tomcat7.0

数据库:Mysql

开发语言:Java

2、客户端

浏览器:Internet Explorer10

界面布局:DIV+CSS

分辨率:最佳效果1027*768以上像素

3、开发工具

Visual Studio Code

Myeclipse

    1. 测试目标

系统测试是用于检查软件的质量、性能、可靠性等是否符合用户需求。一套严谨的、规范的、完善的测试过程将大大提高软件的质量、可信度、可靠性,降低软件的出错率,降低用户风险系数。通过在计算机上对系统进行测试试验并从中发现此系统中存在的问题和错误然后加以修改,使之更加符合用户需求。

1.测试的目的是通过测试来发现程序在执行过程中的错误的过程。

2.好的测试方案是可以检验出还未被发现的错误的方案。

3.好的测试是发现了到目前为止还未被发现的错误的测试。

4.该系统能够完成用户管理、闲书商城、读书笔记、交流论坛等功能,做到所开发的系统操作简单,尽量使系统操作不受用户对电脑知识水平的限制。

    1. 功能测试

下表是系统登录功能测试用例,检测了用户名和密码的不同的输入情况,观察系统的响应情况。得出该功能达到了设计目标。

表5-1 系统登录功能测试用例

功能描述

用于系统登录

测试目的

检测登录时的合法性检查

测试数据以及操作

预期结果

实际结果

输入的用户名和密码带有非法字符

提示用户名或者密码错误

与预期结果一致

输入的用户名或者密码为空

提示用户名或者密码错误

与预期结果一致

输入的用户名和密码不存在

提示用户名或者密码错误

与预期结果一致

输入正确的用户名和密码

登录成功

与预期结果一致

下表是注册功能测试用例,检测了各种数据的输入情况,观察系统的响应情况。得出该功能达到了设计目标。

表5-2 注册功能测试用例

功能描述

用于用户注册

测试目的

检测用户注册时的合法性检查

测试数据以及操作

预期结果

实际结果

输入的手机号不合法

提示请输入正确的手机号码

与预期结果一致

输入的字段为空

提示必填项不能为空

与预期结果一致

输入的密码少于6位

提示密码必须为6-12位

与预期结果一致

输入的密码大于12位

提示密码必须为6-12位

与预期结果一致

下表是小学校园“闲书”交易平台功能的测试用例,检测了小学校园“闲书”交易平台中对图书信息的增删改查操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。

前置条件;卖家登录系统。

表5-3图书信息管理的测试用例

功能描述

用于图书信息管理

测试目的

检测图书信息管理时的各种操作的运行情况

测试数据以及操作

预期结果

实际结果

点击添加图书信息,必填项合法输入,点击保存

提示添加成功

与预期结果一致

点击添加图书信息,必填项输入不合法,点击保存

提示必填项不能为空

与预期结果一致

点击修改图书信息,必填项修改为空,点击保存

提示必填项不能为空

与预期结果一致

点击修改图书信息,必填项输入不合法,点击保存

提示必填项不能为空

与预期结果一致

点击删除图书信息,选择图书信息删除

提示删除成功

与预期结果一致

点击搜索图书信息,输入存在的图书信息名

查找出图书信息

与预期结果一致

点击搜索图书信息 ,输入不存在的在线投票名

不显示图书信息

与预期结果一致

下表是图书购买功能的测试用例,检测了图书购买的操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。

前置条件;用户登录系统。

表5-4 图书购买的测试用例

功能描述

用于图书购买

测试目的

检测图书购买时各种操作的情况

测试数据以及操作

预期结果

实际结果

未选择图书购买,点击提交

提示请选择图书购买

与预期结果一致

未完善购买信息,点击提交

提示请完善信息

与预期结果一致

下表是订单配送功能的测试用例,检测了订单配送的操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。

前置条件;卖家登录系统。

表5-5 订单配送的测试用例

功能描述

用于订单配送

测试目的

检测订单配送时各种操作的情况

测试数据以及操作

预期结果

实际结果

未填写订单配送信息,点击提交

提示请编辑订单配送信息

与预期结果一致

未完善配送信息,点击提交

提示请完善信息

与预期结果一致

    1. 测试结果

根据以上测试情况,测试结果如下表所示。

表5-6测试结果表

测试项目

测试结果

用户注册测试

成功

用户登录测试

成功

图书信息管理测试

成功

图书购买测试

成功

订单配送测试

成功

  1. 总结与展望

经过了几个月的努力,本小学校园“闲书”交易平台终于完成了,虽然在校期间也开发过一些小型的系统,但是都是在老师的讲解以及辅助下完成的,没有经历过开发之前的需求分析、系统分析,都是直接从系统设计开始的,因此本次开发的小学校园“闲书”交易平台对我意义重大。

在开发系统最初,首先对各个功能方面的需求进行调研,了解对于用户来说,开发的系统需要实现哪些功能才能满足其实际需求,对需求进行分析;其次选择自己比较熟悉的Java语言,Mysql数据库,使用Springboot框架来设计开发,通过知网库、学校图书馆等地方查阅、学习这些技术,掌握编程的思想和方法,然后就是对系统进行分析,从系统开发的可行性、系统实现的功能、系统应该具备的性能以及系统的操作流程方面,对系统进行全方位的分析,确定系统的最终功能,从而对系统的功能和数据库进行设计,最后就是系统的实现以及对实现的功能的测试,确保系统能够稳定的运行。

在开发的过程中暴露出了自己的很多问题,比如前期的准备还是不够充分,不能完全掌握其操作流程;在开发过程中对Java的编程掌握的还不够熟练以及对系统的环境配置上还存在很多问题,经常会导致项目在运行的时候出现错误。学无止境,通过一边查阅资料一边向导师请教,慢慢的解决了这些问题,在以后的学习、工作者我会更加严谨,通过本项目的开发,我将会收益终生!

参考文献

[1]陈蓓蕾,洪年松. 基于SpringBoot的数据库接口设计 [J]. 信息与电脑(理论版), 2023, 35 (16): 181-183.

[2]孟思明. 基于SpringBoot框架选购系统的设计与实现 [J]. 中国设备工程, 2023, (11): 94-95.

[3]饶锎月. 可持续商业模式下垂直类二手交易平台服务设计研究[D]. 江南大学, 2023.

[4]王志亮,纪松波. 基于SpringBoot的Web前端与数据库的接口设计 [J]. 工业控制计算机, 2023, 36 (03): 51-53.

[5]Yang Y . Design and Implementation of Student Information Management System Based on Springboot [J]. Advances in Computer, Signals and Systems, 2022, 6 (6):

[6]张威威,郗文豪. 校园二手书交易网站设计与制作 [J]. 现代信息科技, 2022, 6 (14): 35-37+41.

[7]李东亮. 共享发展理念下的闲置图书平台设计研究[D]. 东北石油大学, 2022.

[8]顾明. “多抓鱼”二手书交易平台服务营销策略研究[D]. 吉林大学, 2022.

[9]段春云,王海博. 互联网下大学生二手交易平台的物流网络优化研究 [J]. 中国储运, 2021, (12): 199-201.

[10]郭岩. 二手书网络交易平台的营销策略研究[D]. 陕西师范大学, 2021.

[11]Cheng F . Talent Recruitment Management System for Small and Micro Enterprises Based on Springboot Framework [J]. Advances in Educational Technology and Psychology, 2021, 5 (2):

[12]刘艺璇. 新零售业态下旧书店的经营与发展研究[D]. 河北大学, 2021.

[13]余丽娜. 校园二手图书交易网站设计与实现 [J]. 电脑知识与技术, 2020, 16 (13): 78-79.

[14]郑青青. 网络二手书平台经营现状与创新策略研究[D]. 苏州大学, 2020.

[15]蔡思琴. 我国二手书交易平台竞争战略研究[D]. 南京大学, 2019.

致谢

本逝者如斯夫,不舍昼夜。转眼间,大学生活已经接近尾声,人面对着离别与结束,总是充满着不舍与茫然,我亦如此,仍记得那年秋天,我迫不及待的提前一天到了学校,面对学校巍峨的大门,我心里充满了期待:这里,就是我新生活的起点吗?那天,阳光明媚,学校的欢迎仪式很热烈,我面对着一个个对着我微笑的同学,仿佛一缕缕阳光透过胸口照进了我心里,同时,在那天我认识可爱的室友,我们携手共同度过了这难忘的两年。如今,我望着这篇论文的致谢,不禁又要问自己:现在,我们就要说再见了吗?

感慨莫名,不知所言。遥想当初刚来学校的时候,心里总是想着工科学校会过于板正,会缺乏一些柔情,当时心里甚至有一点点排斥,但是随着我对学校的慢慢认识与了解,我才认识到了她的美丽,她的柔情,并且慢慢的喜欢上了这个校园,但是时间太快了,快到我还没有好好体会她的美丽便要离开了,但是她带给我的回忆,永远不会离开我,也许真正离开那天我的眼里会满含泪水,我不是因为难过,我只是想将她的样子映在我的泪水里,刻在我的心里。最后,感谢我的老师们,是你们教授了我们知识与做人的道理;感谢我的室友们,是你们陪伴了我如此之久;感谢每位关心与支持我的人。

少年,追风赶月莫停留,平荒尽处是春山。

免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1892118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 面试【高难】

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

[OC]萝卜圈Python手动机器人脚本

这是给机器人设置的端口&#xff0c;对照用 代码 # #作者:溥哥’ ##机器人驱动主程序 #请在main中编写您自己的机器人驱动代码 import msvcrt def main():a"none"while True:key_input msvcrt.getch()akey_inputif abw:print(a)robot_drv.set_motors(1,40,2,40,3,…

Qt Group与华为合作开发OpenHarmony版本,打造无缝跨设备操作系统

在华为开发者大会2024上&#xff0c;跨平台软件开发和质量保证工具的领先供应商 Qt Group&#xff08;Nasdaq, Helsinki: QTCOM&#xff09;荣幸地宣布成为OpenHarmony生态系统合作伙伴。这是继近几年华为采用Qt开发框架和自动化测试工具Squish的商业许可后&#xff0c;Qt Grou…

【数学建模】 数据处理与拟合模型

文章目录 数据处理与拟合模型1. 数据与大数据1.1 什么是数&#xff1f;什么是数据&#xff1f;1.2 数据与大数据1.3 数据科学的研究对象 2. 数据的预处理2.1 为什么需要数据预处理2.2 使用pandas处理数据的基础2.3 pandas常用方法总结2.4 数据的规约1) 维度规约2) 数值规约3) 数…

小型语言模型SLM:趋势和用例

前言 近年来&#xff0c;GPT 和 BERT 等大型语言模型 (LLM) 不断发展&#xff0c;参数数量从数亿飙升至 GPT-4 等后继者的一万亿以上。然而&#xff0c;不断增长的参数规模引出了一个问题&#xff1a;对于企业应用来说&#xff0c;参数规模越大就一定越好吗&#xff1f; 答案…

测试图片上传功能,使用postman提供的url

是不是有时候想要测试图片上传功能&#xff0c;但是没有后台url进行测试&#xff0c;这时候就可以使用postman提供的url&#xff1a; https://postman-echo.com/post接下来&#xff0c;我将教你在postman中&#xff0c;用该url测试图片上传功能。 1.发送图片上传请求 第一步…

数据结构 -AVL树

文章目录 AVL树左旋和右旋插入的四种情况&#xff08;一&#xff09;新数字插到了左子树&#xff0c;导致左子树比右子树高2&#xff1b;左孩子的左子树比其右子树高1&#xff08;二&#xff09;新数字插到了左子树&#xff0c;导致左子树比右子树高2&#xff1b;左孩子的右子树…

Echarts中的热力图和漏斗图(在Vue中使用热力图和漏斗图)

热力图 (Heatmap) Echarts的热力图用于展示两个维度数据矩阵中的值分布情况。它通过在平面上划分成多个矩形区域&#xff0c;并用不同的颜色填充这些区域来表示数据的大小或强度。颜色渐变从浅到深通常映射着数值从小到大&#xff0c;从而直观展示数据的集中程度和分布模式。热…

MIPI概述

MIPI MIPI&#xff08;Mobile Industry Processor Interface&#xff09;是移动行业处理器接口的缩写&#xff0c;由移动行业处理器接口联盟&#xff08;MIPI Alliance&#xff09;&#xff08;一个标准化组织&#xff0c;官网&#xff1a;Interface Specifications for Mobil…

【web APIs】快速上手Day04(Dom节点)

目录 Web APIs - 第4天日期对象实例化方法案例-页面显示时间时间的另外一个写法 时间戳三种方式获取时间戳案例-毕业倒计时效果 节点操作DOM节点查找节点父节点查找案例-关闭广告子节点查找兄弟关系查找 增加节点创建节点追加节点案例-学成在线案例渲染克隆节点 删除节点 M端事…

IDEA 一键部署Docker

以部署示例服务&#xff08;sevnce-demo&#xff09;为例。 配置服务器 地址、账号、密码根据实际情况填写 配置镜像仓库 地址、账号、密码根据实际情况填写 编写Dockerfile 在sevnce-demo根目录下右键&#xff0c;选择创建Dockerfile。 # 基础镜像 FROM sevnce-registry.c…

如何为老化的汽车铅酸电池充电

一项小研究表明&#xff0c;汽车铅酸电池不同于深循环或固定电池。汽车电池旨在限度地提高启动电流容量&#xff0c;并且对深度放电或浮充(也称为第 3 阶段充电循环)反应不佳。起动电池的极板结构使表面积化&#xff0c;并且电解液比重 (SG) 高于其他电池&#xff0c;以提供高启…

14.优化算法之BFS解决FloodFill算法1

0.FloodFill简介 dfs&#xff1a;深度优先遍历&#xff08;红色&#xff09; bfs&#xff1a;宽度优先遍历 1.图像渲染 算法原理 class Solution {int[] dx { 0, 0, 1, -1 };int[] dy { 1, -1, 0, 0 };public int[][] floodFill(int[][] image, int sr, int sc, int color)…

小试牛刀-Solana合约账户详解

目录 一.Solana 三.账户详解 3.1 程序账户 3.2 系统所有账户 3.3 程序派生账户(PDA) 3.4 Token账户 四、相关学习文档 五、在线编辑器 Welcome to Code Blocks blog 本篇文章主要介绍了 [Solana合约账户详解] ❤博主广交技术好友&#xff0c;喜欢文章的可以关注一下❤ …

Ai的快速发展会是下一个风口嘛?

人工智能的快速发展确实是当前和未来科技领域的一个重要趋势&#xff0c;可以说是一个“风口”。以下是几个支持这一观点的理由&#xff1a; 1. **技术进步和应用广泛性**&#xff1a;人工智能技术在各个领域的应用越来越广泛&#xff0c;涵盖了医疗、金融、制造、交通、媒体等…

在TkinterGUI界面显示WIFI网络摄像头(ESP32s3)视频画面

本实验结合了之前写过的两篇文章Python调用摄像头&#xff0c;实时显示视频在Tkinter界面以及ESP32 S3搭载OV2640摄像头释放热点&#xff08;AP&#xff09;工作模式–Arduino程序&#xff0c;当然如果手头有其他可以获得网络摄像头的URL即用于访问摄像头视频流的网络地址&…

MySQL关于日志15个讲解

​​​​​​ 1. redo log是什么? 为什么需要redo log&#xff1f; redo log 是什么呢? redo log 是重做日志。 它记录了数据页上的改动。 它指事务中修改了的数据&#xff0c;将会备份存储。 发生数据库服务器宕机、或者脏页未写入磁盘&#xff0c;可以通过redo log恢复…

昇思25天学习打卡营第7天|深度学习流程全解析:从模型训练到评估

目录 构建数据集 定义神经网络模型 定义超参、损失函数和优化器 超参 损失函数 优化器 训练与评估 构建数据集 首先从数据集 Dataset加载代码&#xff0c;构建数据集。 代码如下&#xff1a; #引入了必要的库和模块&#xff0c;像 mindspore 以及相关的数据处理模块等等。…

初识Spark

一、简介 官网&#xff1a;Apache Spark™ - Unified Engine for large-scale data analytics Apache的顶级项目&#xff0c;用于大规模数据处理的统一分析引擎。 支持语言&#xff1a;Java、Scala、Python和R (源码为Scala) 高级工具&#xff1a; 1、SparkSQL用于SQL和结构…

IDEA开发必备的插件,实测非常好用

1、Lombok -- 简化Java代码开发 推荐指数&#xff1a; ★★★★★ Lombok&#xff1a;首当其冲的非常推荐的当然是Lombok Lombok能以简单的注解形式来简化Java代码&#xff0c;提高开发人员的开发效率。例如开发中经常需要写的JavaBean&#xff0c;都需要花时间去添加相应的ge…