摘要
随着互联网的普及和发展,网上购物变得越来越日常,出于对企业发展的考虑,诸多中小企业都希望搭建自己的购物网站。我们找到更优的技术和方法,来降低网站的响应时间和做到提高系统高并发性性能,提升用户的使用体验,降低硬件需求度,能够使用更便宜的硬件进行部署,从而降低网站建设的成本。此书店管理系统的开发项目采用Springboot框架,结合MYSQL数据库进行设计开发,就论题的各类需求分析说明做出解释,然后再就系统的总体设计和详细设计做出论述,给出了系统总体结构的搭建方法。从而满足大部分中小型电子商务网站的需求。
关键词:Springboot;书店管理;MYSQL
Abstract
With the popularization and development of the Internet, online shopping has become more and more routine. Considering the development of enterprises, many small and medium-sized enterprises want to build their own shopping websites. We found better technologies and methods to reduce the response time of the website and improve the high concurrency performance of the system, improve the user experience, reduce the hardware demand, and deploy with cheaper hardware, thus reducing the cost of website construction. The development project of the bookstore management system uses the Springboot framework and combines with the MYSQL database for design and development. It explains the various requirements analysis descriptions of the topic, then discusses the overall design and detailed design of the system, and gives the building method of the overall structure of the system. So as to meet the needs of most small and medium-sized e-commerce websites.
Keywords: Springboot;Bookstore management; MYSQL
1 绪论
1.1 研究背景及意义
现下大多数行业都在逐步的将电商都信息化带入到自己企业中,其中主要是以电商服务为主导的互联网平台。像目前主要致力于自己的图书销售的用户,同时紧紧围绕图书来展开。通过互联网平台的赋能,能够给图书行业提供智能化的服务,在为用户提供实质性购买帮助的同时,提高自己书店的服务质量。所以书店管理系统更加符合时下图书行业的需求,更加能适应图书行业目前的竞争压力。该交易平台以“互联网+”B2C服务为模式,在为用户提供购买图书服务的同时,可以帮助图书实现销量的突破,同样也可以为图书行业的智能化发展做出努力。
1.2国内外研究现状
由于这几年来,计算机技术的逐日发展,在现代化的生活中,我们所需要的各种信息的处理操作都是通过使用计算机来完成的,有了计算机就可以方便的对各种信息进行查询和维护了。因此需要实现对图书交易管理的电子化,提高图书销售管理效能和销售效能。
因为国内外传统的书店数据管理方式是基于手工的,而人的精力和工作准确度是有限的,所以传统的书店数据管理方式难免会存在效率低下、准确率低等缺点,还伴随着人力资源的大量浪费。在管理的工作中,所涉及到的工作电脑机器比人类更为擅长,能够达到快速、准确、耗费资源小等要求。基于这些显著的优点,如果能设计一套完整且贴合具体书店需求的书店管理系统,那么将大大地提高书店管理的服务质量。在具备这样的书店管理系统之下,书店的管理人员只需配备少量的专业人员对数据库进行日常数据审核、管理以及定期维护[4]。整个过程中,管理员只需提供少量的必要信息,大部分数据处理工作皆由数据库和相关程序来完成,节省了大量时间。如果数据库中的某部分信息存在错误,那么管理人员可以通过批量修改等方式来降低排错过程中所要花费的时间和精力。因此,为书店开发一个称职的书店管理系统是十分有必要的。
书店管理系统的功能很齐全,它是针对个体的销售图书的小企业,书店管理系统提供的服务更多,更方便,且具有针对性,和市面上淘宝网的服务群体是不同的,淘宝网是让多卖家入住自己平台来卖商家自己的商品,虽然客户流量大以及服务方式广泛但不针对具体的书店的小企业,这样就会造成用户粘性不高。其次,书店管理系统的安全性更高,所有图书订单必须通过自己企业的管理人员才能接受用户的订单,同时用户还能够通过书店管理系统对图书订单进行评价。再次,具有良好并准确的图书销售数据分析,是真正帮助书店提高订单的图书交易系统。
1.4论文结构与章节安排
本文共分为六章,章节内容安排如下:
第一章:引言。第一章主要介绍了课题研究的背景意义,国内目前相关研究现状以及技术和本文的研究内容与主要工作。
第二章:系统需求分析。第三章主要从系统的用户、功能等方面进行需求分析。
第三章:系统设计。第四章主要对系统框架、系统功能模块、数据库进行功能设计。
第四章:系统实现。第五章主要介绍了系统框架搭建、系统界面的实现。
第五章:系统测试。第六章主要对系统的部分界面进行测试并对主要功能进行测试
2 书店管理系统系统分析
本章内容概括了书店管理系统的可行性分析、功能分析以及用例分析。
2.1 可行性分析
2.1.1 技术可行性分析
在分析了书店管理系统的真实需求后,将书店管理系统所需要的角色划分整理成了下图2-1和图2-2。
从开发工具来看,由于书店管理系统是基于Springboot开发的,因此当前市面上的开发工具都可以来开发,这些功能强大的开发工具可以给我来设计毕设带来非常大的方便。
从书店管理系统的本身技术来说,对于我来开发一个书店管理系统这个毕设是不费事的。书店管理系统的开发可以简单的分为前台模块、后台模块开发以及数据库开发。其中的大部分技术难点在我上学时已经使用过了,同时网络上很多技术点可以让我来借鉴。Web后台管理使用Springboot开发,数据库使用mysql,因此为我在开发书店管理系统这个毕设上省去了很多多余代码,这给我的毕设项目编写带来了极大的便利。
从用户体验来看,市面上很多被广泛使用的例如淘宝网等电商案例可以让我来参考,因此我可以综合淘宝网上的页面交互设计的优点,基于我的毕设项目特点来进行改版,最后达到令用户满意的页面交互体验。综上所述,从技术层面来看开发书店管理系统是可行的。
2.1.2 经济可行性分析
从书店管理系统的开发成本来看,书店管理系统的设计和开发都是我自己完成的,没有其他成本上的开销。
从书店管理系统的维护成本来看,书店管理系统的开发遵循一套完整的代码编写规范,并且书店管理系统的结构设计非常灵活,遵循高内聚低耦合的原则,因此易于维护和迭代开发。
在书店管理系统上线之后,上线前期我会根据真实需求来调查,对使用我开发的书店管理系统来制定一套符合的使用费。系统运行稳定后我会将推广范围到其他销售图书的企业中,他们可以自己来注册使用我的书店管理系统,只需要缴纳一点点的定金,我会给他们引入广告投资和自营业务。
综合以上的分析,书店管理系统所带来的经济效益将会带来极大的收益。并且随着我的推广,来使用我开发的书店管理系统的市场将越来越大,书店管理系统带来的利润也就越来越多。因此,从经济层面来看开发书店管理系统的是可行的。
书店管理系统的主要的服务对象是需要购买图书的人群,总的来说书店管理系统的使用还是比较简单的,一般不存在操作困难的事情,书店管理系统的管理人员需要对该书店管理系统有一定的了解,比如图书信息的发布、图书购买等操作,如果不会,可以进行简单的培训就好了。
2.2 系统功能分析
书店管理系统我划分为了用户管理模块和管理员模块这两大部分。
前台用户管理模块:
(1)用户注册登录:用户注册为会员并登录书店管理系统;用户对个人信息的增删改查,比如个人资料,密码修改。
(2)用户查看图书:用户进行图书信息的阅览,通过发现喜欢的图书后可以加入到自己的收藏夹、点赞、购买。
(3)我的收藏:用户可以查看自己以往收藏起来的图书,同时可以移除自己的收藏夹。
(4)购买图书:用户对喜欢的图书可以进行购买,填写好购买数量,订单地址,订单备注,当用户确定订购完毕后,将其提交给服务器后台系统,并生成订单。
(5)用户付款:用户在订单中心可以查看自己提交的订单,并且对订单进行支付。
(6)图书资讯:用户在前台可以查看系统最新发布的图书资讯信息。
(7)用户留言:用户可以进行在线留言操作。
后台管理员管理模块:
(1)内容管理:管理员可以对书店管理系统中的轮播图、图书资讯、资讯分类信息进行发布和维护。
(2)系统用户:管理员可以对前台上注册过的用户信息进行管控,同时可以对管理员的信息进行管理。
(3)分类管理:管理员可以对所售卖的图书分类信息进行增删改查。
(4)图书中心:管理员可以对所售卖的图书信息进行增删改查,比如补充库存量以及更改图书信息和发布新图书信息等。
(5)订单列表:管理员对用户订购的图书订单进行管理。
(6)留言管理:管理员可以对用户的留言进行查看。
书店管理系统的非功能性需求比如书店管理系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
表3-1书店管理系统非功能需求表
安全性 | 主要指书店管理系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指书店管理系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响书店管理系统占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着书店管理系统的页面展示内容进行操作,就可以了。 |
可维护性 | 书店管理系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
2.3 系统用例分析
书店管理系统的完整UML用例图分别是图2-1和图2-2。在参与者上包括用户以及管理员。前台上用户角色用例包括用户是注册成为我们正是会员的用户、用户登录、图书资讯、留言交流、图书中心、搜索图书、收藏图书、图书购买、个人资料、密码修改、收藏,用户角色用例如图2-1所示。
图2-1 书店管理系统用户角色用例图
web后台管理上的管理员是维护整个书店管理系统中所有数据信息的,管理员可以进行登录、轮播图、管理员、注册用户、留言交流、交流分类、图书资讯、资讯分类、图书中心列表、分类管理、订单列表等。管理员角色用例如图2-2所示。
3.4本章小结
本章主要通过对书店管理系统的可行性分析、功能需求分析、系统用例分析,确定整个书店管理系统要实现的功能。同时也为书店管理系统的代码实现和测试提供了标准。
3 书店管理系统总体设计
本章主要讨论的内容包括书店管理系统的功能模块设计、数据库系统设计。
3.1 系统架构设计
本书店管理系统从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。
图3-1书店管理系统系统架构设计图
表现层(UI):又称UI层,主要完成本书店管理系统的UI交互功能,一个良好的UI可以打打提高用户的用户体验,增强用户使用本书店管理系统时的舒适度。UI的界面设计也要适应不同版本的书店管理系统以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用户进行交互操作时必须要得到与之相符的交互结果,这就要求表现层要与业务逻辑层进行良好的对接。
业务逻辑层(BLL):主要完成本书店管理系统的数据处理功能。用户从表现层传输过来的数据经过业务逻辑层进行处理交付给数据层,系统从数据层读取的数据经过业务逻辑层进行处理交付给表现层。
数据层(DL):由于本书店管理系统的数据是放在服务端的mysql数据库中,因此本属于服务层的部分可以直接整合在业务逻辑层中,所以数据层中只有数据库,其主要完成本书店管理系统的数据存储和管理功能。
3.2 系统模块设计
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本书店管理系统中的用例。那么接下来就要开始对本书店管理系统的架构、主要功能和数据库开始进行设计。书店管理系统根据前面章节的需求分析得出,其总体设计模块图如图3-2所示。
图3-2 书店管理系统功能模块图
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
3.3.1 数据库概念结构设计
下面是整个书店管理系统中主要的数据库表总E-R实体关系图。
图3-2 书店管理系统总E-R关系图
通过上一小节中书店管理系统中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
(1)用户注册表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
registered_user_id | int | 11 | 是 | 是 | 注册用户ID |
user_no | varchar | 64 | 是 | 否 | 用户编号 |
user_name | varchar | 64 | 否 | 否 | 用户姓名 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
(2)图书中心表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
book_center_id | int | 11 | 是 | 是 | 图书中心ID |
book_name | varchar | 64 | 否 | 否 | 图书名称 |
author | varchar | 64 | 否 | 否 | 作者 |
press | varchar | 64 | 否 | 否 | 出版社 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
cart_title | varchar | 125 | 否 | 否 | 标题 |
cart_img | text | 0 | 否 | 否 | 封面图 |
cart_description | varchar | 255 | 否 | 否 | 描述 |
cart_price_ago | double | 8 | 是 | 否 | 原价:[1] |
cart_price | double | 8 | 是 | 否 | 卖价:[1] |
cart_inventory | int | 11 | 是 | 否 | 商品库存 |
cart_type | varchar | 64 | 是 | 否 | 商品分类: |
cart_content | longtext | 0 | 否 | 否 | 正文 |
cart_img_1 | text | 0 | 否 | 否 | 主图1: |
cart_img_2 | text | 0 | 否 | 否 | 主图2: |
cart_img_3 | text | 0 | 否 | 否 | 主图3: |
cart_img_4 | text | 0 | 否 | 否 | 主图4: |
cart_img_5 | text | 0 | 否 | 否 | 主图5: |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
(3)产品信息表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
goods_id | mediumint | 8 | 是 | 是 | 产品id |
title | varchar | 125 | 否 | 否 | 标题 |
img | text | 0 | 否 | 否 | 封面图 |
description | varchar | 255 | 否 | 否 | 描述 |
price_ago | double | 8 | 是 | 否 | 原价:[1] |
price | double | 8 | 是 | 否 | 卖价:[1] |
sales | int | 10 | 是 | 否 | 销量 |
inventory | int | 11 | 是 | 否 | 商品库存 |
type | varchar | 64 | 是 | 否 | 商品分类: |
hits | int | 10 | 是 | 否 | 点击量 |
content | longtext | 0 | 否 | 否 | 正文 |
img_1 | text | 0 | 否 | 否 | 主图1: |
img_2 | text | 0 | 否 | 否 | 主图2: |
img_3 | text | 0 | 否 | 否 | 主图3: |
img_4 | text | 0 | 否 | 否 | 主图4: |
img_5 | text | 0 | 否 | 否 | 主图5: |
create_time | timestamp | 0 | 是 | 否 | 创建时间: |
update_time | timestamp | 0 | 是 | 否 | 更新时间: |
customize_field | text | 0 | 否 | 否 | 自定义字段 |
source_table | varchar | 255 | 否 | 否 | 来源表: |
source_field | varchar | 255 | 否 | 否 | 来源字段: |
source_id | int | 10 | 是 | 否 | 来源ID: |
user_id | int | 11 | 否 | 否 | 添加人 |
(4)商品分类表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
type_id | int | 11 | 是 | 是 | 商品分类ID: |
father_id | smallint | 5 | 是 | 否 | 上级分类ID |
name | varchar | 255 | 否 | 否 | 商品名称: |
desc | varchar | 255 | 否 | 否 | 描述: |
icon | varchar | 255 | 否 | 否 | 图标: |
source_table | varchar | 255 | 否 | 否 | 来源表: |
source_field | varchar | 255 | 否 | 否 | 来源字段: |
create_time | timestamp | 0 | 是 | 否 | 创建时间: |
update_time | timestamp | 0 | 是 | 否 | 更新时间: |
(5)订单表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
order_id | int | 11 | 是 | 是 | 订单ID: |
order_number | varchar | 64 | 否 | 否 | 订单号: |
goods_id | mediumint | 8 | 是 | 否 | 商品id |
title | varchar | 32 | 否 | 否 | 商品标题: |
img | varchar | 255 | 否 | 否 | 商品图片: |
price | double | 10 | 是 | 否 | 价格: |
price_ago | double | 10 | 是 | 否 | 原价: |
num | int | 8 | 是 | 否 | 数量: |
price_count | double | 8 | 是 | 否 | 总价: |
norms | varchar | 255 | 否 | 否 | 规格: |
type | varchar | 64 | 是 | 否 | 商品分类: |
contact_name | varchar | 32 | 否 | 否 | 联系人姓名: |
contact_email | varchar | 125 | 否 | 否 | 联系人邮箱: |
contact_phone | varchar | 11 | 否 | 否 | 联系人手机: |
contact_address | varchar | 255 | 否 | 否 | 收件地址: |
postal_code | varchar | 9 | 否 | 否 | 邮政编码: |
user_id | int | 10 | 是 | 否 | 买家ID: |
merchant_id | mediumint | 8 | 是 | 否 | 商家ID: |
create_time | timestamp | 0 | 是 | 否 | 创建时间: |
update_time | timestamp | 0 | 是 | 否 | 更新时间: |
description | varchar | 255 | 否 | 否 | 描述 |
state | varchar | 16 | 是 | 否 | 订单状态 |
3.4本章小结
整个书店管理系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4 书店管理系统详细设计与实现
书店管理系统的详细设计与实现主要是根据前面的书店管理系统的需求分析和书店管理系统的总体设计来设计页面并实现业务逻辑。主要从书店管理系统界面实现、业务逻辑实现这两部分进行介绍。
4.1用户功能模块
4.1.1 前台首页界面
在书店管理系统的前台首页界面上采用了上+中+下的方式来布局界面,最右上角是登录+注册这+搜索这三个链接,下面依次是导航栏+轮播图以及下面的图书资讯,下面依次是推荐的图书中心展示,其主界面展示如下图4-1所示。
图4-1 前台首页界面图
前台首页关键代码如下:
@Application
@EnableJpaRepositories
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
4.1.2 用户注册界面
不是书店管理系统中正式用户的是可以在线进行注册的,当填写上自己的账号+设置密码+确认密码+昵称+邮箱+手机号+身份后+用户名再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可注册成功。其用户注册界面展示如下图4-2所示。
图4-2 前台用户注册界面图
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);
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, "账号或密码不正确");
}
}
4.1.4搜索图书界面
在书店管理系统首页上的搜索框中输入自己想要快速检索的图书的关键词并点击“搜索”按钮后将会输入的关键词进行和数据库中保存的图书信息进行模糊匹配,并将检索到最匹配的图书信息显示出来。搜索图书界面如下图4-4所示。
图4-4搜索图书界面图
搜索图书的关键代码如下。
@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.5 留言交流界面
当访客点击书店管理系统中导航栏上的“留言交流”后将会进入到该“留言交流”列表的界面,然后选择想要看的留言交流信息,点击进入到详细界面,也可以发布交流信息,留言交流界面如下图4-5所示。
图4-5留言交流界面图
留言交流的关键代码如下。
@RestController
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
/**
* 服务对象
*/
@Autowired
public AuthController(AuthService service) {
setService(service);
}
}
4.1.6 图书中心界面
当访客点击了任意图书后将会进入该款图书的详情界面,可以了解到该图书的商品信息、价钱信息,同时可以对该图书进行购买+加购+点赞+收藏+评论,图书详情展示页面如图4-6所示。
图4-6 图书中心界面图
图书中心关键代码:
@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.7 图书购买界面
用户可以在线进行图书购买操作。图书购买界面如下图4-7所示。
图4-7 图书购买界面图
图书购买关键代码
@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-8所示。
图4-8 订单支付界面图
4.2管理员功能模块
4.2.1 注册用户管理界面
书店管理系统中的管理人员是可以对前台注册的用户进行管理。注册用户管理界面如下图4-9所示。
图4-9注册用户界管理面图
书店管理系统中的管理人员是可以对前台用户发布的留言交流进行管控,留言交流管理界面如下图4-10所示。
图4-10留言交流界面图
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订单管理界面图
订单管理关键代码
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
4.2.5图书资讯管理界面
书店管理系统中的管理人员是可以对图书资讯进行增删改查等操作。图书资讯管理界面如下图4-13所示。
图4-13图书资讯管理界面图
5系统测试
5.1 系统测试用例
系统测试包括:用户登录功能测试、用户注册功能测试、图书信息功能测试、图书添加功能测试,如表5-1、5-2、5-3、5-4所示:
表5-1 用户登录功能测试表
测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
用户登录模块测试 | 正确输入用户信息,用户成功登录 | 输入用户的信息 | 1.在密码框输入用户密码。2.点击登录 | 跳转到首页 | 正确 |
用户注册功能测试:
表5-2 用户登录功能测试表
测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
用户注册模块测试 | 正确输入用户星系,完成用户注册 | 输入用户的基本信息 | 在注册页面填写用户相应的信息,然后点击“注册”按钮。 | 提示成功并跳转到登录界面 | 正确 |
用户注册模块测试 | 用户注册失败 | 用户两次输入密码不一致 | 用户在注册页面填写信息时输入两个不一致的密码然后点击“注册”按钮。 | 注册失败提示两次密码输入不一致 | 正确 |
图书信息界面测试:
表5-3 图书信息界面测试表
测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
图书信息功能模块测试 | 图书信息正常的显示 | 浏览图书信息 | 在前台首页选择一个图书分类进入分类列表,然后选择一个图书 | 进入该图书的详细信息界面 | 正确 |
管理员添加图书功能测试:
表5-4 管理员添加图书功能测试表
测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
管理员添加图书功能测试 | 添加图书成功的情况 | 输入新图书的基本信息 | 后台选择“发布图书”选项,然后填写新图书基本信息点击“添加”按钮 | 新图书添加成功 | 正确 |
管理员添加图书功能测试 | 添加图书失败的情况 | 输入图书基本信息不完全 | 后台选择“发布图书”选项,然后不完全填写图书信息,点击“添加”按钮。 | 对应信息框后出现提示请输入XXXX信息 | 正确 |
管理员添加图书功能测试 | 添加图书失败的情况 | 管理员在价格框输入非数字字符 | 后台选择“发布图书”选项然后再价格框输入非数字字符,点击“添加”按钮。 | 添加失败,提示“价格必须时货币格式!” | 正确 |
通过编写书店管理系统的测试用例,已经检测完毕用户登录模块、用户注册模块、图书分类展示模块、图书添加模块功能测试,通过这4大模块为书店管理系统的后期推广运营提供了强力的技术支撑。
结论
至此,书店管理系统已经结束,在开发前做了许多的准备,在本系统的设计和开发过程中阅览和学习了许多文献资料,从中我也收获了很多宝贵的方法和设计思路,对系统的开发也起到了很重要的作用,系统的开发技术选用的都是自己比较熟悉的,比如Web、Springboot技术、MYSQL,这些技术都是在以前的学习中学到了,其中许多的设计思路和方法都是在以前不断地学习中摸索出来的经验,其实对于我们来说工作量还是比较大的,但是正是由于之前的积累与准备,才能顺利的完成这个项目,由此看来,积累经验跟做好准备是十分重要的事情。
当然在该系统的设计与实现的过程中也离不开老师以及同学们的帮助,正是因为他们的指导与帮助,我才能够成功的在预期内完成了这个系统。同时在这个过程当中我也收获了很多东西,此系统也有需要改进的地方,但是由于专业知识的浅薄,并不能做到十分完美,希望以后有机会可以让其真正的投入到使用之中。
参考文献
[1]单树倩,任佳勋.基于SpringBoot和Vue框架的数据库原理网站设计与实现[J].电脑知识与技术,2021,17(30):40-41+50.
[2]喻佳,吴丹新.基于SpringBoot的Web快速开发框架[J].电脑编程技巧与维护,2021(09):31-33.
[3]郭永玲,徐志鹏,孟彪,杨倩,杜庆泉.基于网络消费的在线书店创业实践[J].长江丛刊,2020(29):114+116.
[4]葛萌,王颖.基于SpringBoot+SSM框架的进销存管理系统设计与实现[J].科学技术创新,2020(24):74-77.
[5]王昊,薛益鸽.基于Web的书店管理系统的设计开发[J].智能计算机与应用,2019,9(01):267-269.
[6]王茂钢.网上书店管理信息系统的数据库设计[J].信息与电脑(理论版),2019(19):117-118.
[7]刘旭. 书店管理信息系统的设计与开发[D].吉林大学,2019.
[8]李围成,张雪萍.基于J2EE的分布式网络书店管理系统的设计与实现[J].电脑知识与技术,2019,11(05):85-87.
[9]段天夫.试论广智图书管理软件在书店管理中的安全应用[J].中国职工教育,2019(18):141.
[10]周纯然.关于在线书店管理系统的设计的探讨[J].计算机光盘软件与应用,2019,17(17):249-250.
[11]王爱民,程玲.在线书店的设计与实现[J].电脑知识与技术,2019,9(29):6687-6689+6692.
[12]王骁. 基于B/S架构的网上书店系统的设计与实现[D].吉林大学,2019.
[13]吴小秋. 微型B2C在线书店网络推广模式研究[D].北京交通大学,2019.
[14]晏愈光,李民,邢鹏飞.在线书店系统的建立及其数据库连接功能的实现[J].长春师范学院学报,2019(08):106-110.
致 谢
书店管理系统的完成,标志着我即将结束在XXX大学的校园生活并跨入社会。在即将毕业的此刻,我想对所有帮助过我的师长、同学和亲人表达我发自内心的谢意。
感谢学校这个大家庭,在这里我们总能找到自己的归属。学校始终在向我们传达着温暖和关怀,接纳和包容我们的缺点。学校给我最大的感受便是要将自己的专业知识与实践相结合,而我也正在努力的成为学校所要求的应用型人才。
感谢各位老师,学院使我从懵懂一步步走向成熟。在这里每个老师都拥有着最大的善意和耐心,来教育我们这群大孩子。学院举办的各类活动是给予我锻炼自己的机会,正是这些机会让我成为了更好的自己,提升了自己各方面的能力。
其次我要感谢我的论文指导老师。我之所以被老师所吸引,是因为老师对于学生友爱和对于工作认真的态度。从选题到开题到论文的撰写,老师一直都在悉心的指导,在指出存在的问题后会与我们探讨解决方法。
最后,我要对即将参与本篇论文审阅和答辩的各位老师表示感谢。
免费领取项目源码,请关注❤点赞收藏并私信博主,谢谢-