摘要
随着互联网的普及和发展,网上购物已经成为人们日常生活中不可或缺的一部分。为了满足商家搭建自己购物网站的需求,我们需要寻找更优的技术和方法,以降低网站的响应时间、提高系统的高并发性能,提升用户的使用体验,并降低硬件需求,从而降低网站建设的成本。
本文旨在设计和实现基于SpringBoot的网络网络图书销售系统。通过对网络网络图书销售系统的各类需求进行详细分析和说明,我们确定了系统所需的核心功能,包括图书搜索、浏览、购买、订单管理和用户评价等。
在总体设计方面,我们采用了模块化的架构,将系统划分为不同的功能模块,以便更好地管理和维护。在详细设计方面,我们着重说明了基于SpringBoot框架的技术选型和数据库设计,以及用户界面的友好设计和响应时间的优化方法。此网络网络图书销售系统的开发项目采用Java技术,结合MYSQL数据库进行设计开发,就论题的各类需求分析说明做出解释,然后再就网站的总体设计和详细设计做出论述,给出了网站总体结构的搭建方法。
通过合理的技术选型和系统设计,我们期望能够实现一个高性能、高可用性的网络网络图书销售系统。该系统将提供便捷的图书搜索和浏览功能,支持用户的个性化推荐和安全的支付方式,同时也具备订单管理和用户评价等核心功能。
关键词:SpringBoot;网络网络图书销售系统;Java;MYSQL
Abstract
With the popularization and development of the Internet, online shopping has become an indispensable part of people's daily life. In order to meet the needs of merchants to build their own shopping websites, we need to find better technologies and methods to reduce website response time, improve system high concurrency performance, enhance user experience, and reduce hardware requirements, thereby reducing website construction costs.
This article aims to design and implement an online book sales system based on SpringBoot. Through a detailed analysis and explanation of the various requirements of the online book sales system, we have determined the core functions required by the system, including book search, browsing, purchasing, order management, and user evaluation.
In terms of overall design, we adopted a modular architecture, dividing the system into different functional modules for better management and maintenance. In terms of detailed design, we emphasized the technology selection and database design based on the SpringBoot framework, as well as the user-friendly design and optimization methods for response time. The development project of this online book sales system adopts Java technology, combined with the MYSQL database for design and development. The various requirements of the topic are analyzed and explained, and then the overall and detailed design of the website are discussed, providing a construction method for the overall structure of the website.
Through reasonable technology selection and system design, we hope to achieve a high-performance and highly available online book sales system. The system will provide convenient book search and browsing functions, support personalized recommendations and secure payment methods for users, and also have core functions such as order management and user evaluation.
Keywords: SpringBoot; Online book sales system; Java; MYSQL
1 绪论
1.1 研究背景及意义
现下大多数行业都在逐步的将电商都信息化带入到自己企业中,其中主要是以电商服务为主导的互联网平台。像目前主要致力于自己的图书,同时紧紧围绕图书来展开。通过互联网平台的赋能,能够给图书行业提供智能化的服务,在为用户提供实质性购买帮助的同时,提高自己图书的服务质量。所以网络图书销售系统更加符合时下图书行业的需求,更加能适应图书行业目前的竞争压力。该销售系统以“互联网+”B2C服务为模式,在为用户提供购买图书服务的同时,可以帮助图书实现销量的突破,同样也可以为图书行业的智能化发展做出努力。
1.2研究现状
由于这几年来,计算机技术的逐日发展,在现代化的生活中,我们所需要的各种信息的处理操作都是通过使用计算机来完成的,有了计算机就可以方便的对各种信息进行查询和维护了。因此需要实现对图书交易管理的电子化,提高网络图书销售管理效能和销售效能。
因为国内外传统的书店数据管理方式是基于手工的,而人的精力和工作准确度是有限的,所以传统的书店数据管理方式难免会存在效率低下、准确率低等缺点,还伴随着人力资源的大量浪费。在管理的工作中,所涉及到的工作电脑机器比人类更为擅长,能够达到快速、准确、耗费资源小等要求。基于这些显著的优点,如果能设计一套完整且贴合具体书店需求的网络图书销售系统,那么将大大地提高书店管理的服务质量。在具备这样的网络图书销售系统之下,书店的管理人员只需配备少量的专业人员对数据库进行日常数据审核、管理以及定期维护。整个过程中,管理员只需提供少量的必要信息,大部分数据处理工作皆由数据库和相关程序来完成,节省了大量时间。如果数据库中的某部分信息存在错误,那么管理人员可以通过批量修改等方式来降低排错过程中所要花费的时间和精力。因此,为书店开发一个称职的网络图书销售系统是十分有必要的。
首先,通过引擎搜索或者查阅相关文献资料,了解了本系统开发的背景以及设计系统的意义所在,收集用户需求信息。其次,在开发工具上,最终确定是基于Mysql数据库,在Java的Springboot技术程序设计的基础上实现,设计出系统大致的功能模块。主要从方便系统用户、商家用户和系统管理员的角度进行分析,明确该系统应该具有的功能。最终是测试系统,通过用例测试发现存在的问题并找到解决的方案。利用现有的开发平台,结合自己所学的知识,在老师的指导帮助下来完成该设计,确保系统的可用性、实用性。
1.4论文结构与章节安排
本文共分为六章,章节内容安排如下:
第一章:引言。第一章主要介绍了课题研究的背景意义,国内目前相关研究现状以及技术和本文的研究内容与主要工作。
第二章:系统需求分析。第三章主要从系统的用户、功能等方面进行需求分析。
第三章:系统设计。第四章主要对系统框架、系统功能模块、数据库进行功能设计。
第四章:系统实现。第五章主要介绍了系统框架搭建、系统界面的实现。
第五章:系统测试。第六章主要对系统的部分界面进行测试并对主要功能进行测试
第六章:总结。
1.5研究技术介绍
1.5.1 springboot框架介绍
Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。
1.5.2 Mysql数据库
Mysql 经过多次的更新,功能层面已经非常的丰富和完善了,从Mysql4版本到5版本进行了比较大的更新,在商业的实际使用中取得了很好的实际应用效果。最新版本的Mysql支持对信息的压缩,同时还能进行加密能更好的满足对信息安全性的需求。同时经过系统的多次更新,数据库自身的镜像功能也得到了很大的增强,运行的流畅度和易用性方面有了不小的进步,驱动的使用和创建也更加的高效快捷。最大的变动还是进行了空间信息的显示优化,能更加方便的在应用地图上进行坐标的标注和运算。强大的备份功能也保证了用户使用的过程会更加安心,同时支持的Office特性还支持用户的自行安装和使用。在信息的显示形式上也进行了不小的更新,增加了两个非常使用的显示区,一个是信息区,对表格和文字进行了分类处理,界面的显示更加清爽和具体。第二是仪表的信息控件,能在仪表信息区进行信息的显示,同时还能进行多个信息的比对,为用户的实际使用带来了很大的便捷。
针对本文中设计的网络图书销售系统在实际的实现过程中,最终选择Mysql数据库的主要原因在于在企业的应用系统应用及开发的过程中会存在大量的数据库比较频繁的操作,而且数据的安全性要求也是非常的高。综合这些因素,最终选择安全性系数比较高的Mysql来对网络图书销售系统后台数据进行存储操作。
1.5.3 MVVM模式
MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。
2 网络图书销售系统系统分析
本章内容概括了网络图书销售系统的可行性分析、功能分析以及用例分析。
2.1 可行性分析
2.1.1 技术可行性分析
在分析了网络图书销售系统的真实需求后,将网络图书销售系统所需要的角色划分整理成了下图2-1和图2-2。
从开发工具来看,由于网络图书销售系统是基于Java开发的,因此当前市面上的开发工具都可以来开发,这些功能强大的开发工具可以给我来设计毕设带来非常大的方便。
从网络图书销售系统的本身技术来说,对于我来开发一个网络图书销售系统这个毕设是不费事的。网络图书销售系统的开发可以简单的分为前台模块、后台模块开发以及数据库开发。其中的大部分技术难点在我上学时已经使用过了,同时网络上很多技术点可以让我来借鉴。Web后台管理使用Java开发,数据库使用mysql,因此为我在开发网络图书销售系统这个毕设上省去了很多多余代码,这给我的毕设项目编写带来了极大的便利。
从用户体验来看,市面上很多被广泛使用的管理系统案例可以让我来参考,因此我可以综合网上的系统页面交互设计的优点,基于我的毕设项目特点来进行改版,最后达到令用户满意的页面交互体验。综上所述,从技术层面来看开发网络图书销售系统是可行的。
2.1.2 经济可行性分析
从网络图书销售系统的开发成本来看,网络图书销售系统的设计和开发都是我自己完成的,没有其他成本上的开销。
从网络图书销售系统的维护成本来看,网络图书销售系统的开发遵循一套完整的代码编写规范,并且网络图书销售系统的结构设计非常灵活,遵循高内聚低耦合的原则,因此易于维护和迭代开发。
在网络图书销售系统上线之后,上线前期我会根据真实需求来调查,对使用我开发的网络图书销售系统来制定一套符合的使用费。系统运行稳定后我会将推广范围到其他销售图书的企业中,他们可以自己来注册使用我的网络图书销售系统,只需要缴纳一点点的定金,我会给他们引入广告投资和自营业务。
综合以上的分析,网络图书销售系统所带来的经济效益将会带来极大的收益。并且随着我的推广,来使用我开发的网络图书销售系统的市场将越来越大,网络图书销售系统带来的利润也就越来越多。因此,从经济层面来看开发网络图书销售系统的是可行的。
网络图书销售系统的主要的服务对象是需要购买图书的人群,总的来说网络图书销售系统的使用还是比较简单的,一般不存在操作困难的事情,网络图书销售系统的管理人员需要对该网络图书销售系统有一定的了解,比如查看图书、图书购买等操作,如果不会,可以进行简单的培训就好了。
2.2 系统功能分析
网络图书销售系统我划分为了买家用户管理模块、商家用户管理模块和管理员模块这三大部分。
前台买家用户管理模块:
(1)买家用户注册登录:用户注册为会员并登录网络图书销售系统;用户对个人信息的增删改查,比如个人资料,密码修改。
(2)查看网络图书销售系统的首页信息:网络图书销售系统的首页信息包含了首页、系统公告、图书资讯、图书信息、我的账户、个人中心等。
(3)系统公告:买家用户可以查看前台的网站公告信息。
(4)图书资讯:买家用户在前台可以进行图书资讯的查看。
(5)图书信息:买家用户可以直接在线查看喜欢的图书并进行在线购买。
(6)我的账户:买家用户在前台点击“用户名称”下面的“我的账户”可以对个人资料+密码修改进行管控。
(7)个人中心:当买家用户点击右上角“用户名称”下面的“个人中心”这个按钮,就会进入到对应的后台进行信息的管理了。用户在前台点击“个人中心”可以对个人首页、订单信息、订单发货、收货信息、图书咨询、收藏进行管理。点击订单信息可以查看到所有订单信息列表;点击订单发货可以查看下单的图书订单发货信息;点击“收货信息”可以查看订单的物流配送状态;点击“图书咨询”买家用户可以对感兴趣的图书进行在线发布留言进行该图书的咨询;点击“收藏”按钮的时候就会显示出自己收藏的各种信息了,支持对收藏信息的搜索查询,如果你想不再收藏某一信息,点击删除就可以了。
前台商家用户管理模块:
(1)商家用户注册登录:用户注册为会员并登录网络图书销售系统;用户对个人信息的增删改查,比如个人资料,密码修改。
(2)查看网络图书销售系统的首页信息:网络图书销售系统的首页信息包含了首页、系统公告、图书资讯、图书信息、我的账户、个人中心等。
(3)系统公告:商家用户可以查看前台的网站公告信息。
(4)图书资讯:商家用户在前台可以进行图书资讯的查看。
(5)图书信息:商家用户可以直接在线查看图书信息并进行点赞、收藏。
(6)我的账户商家用户在前台点击“用户名称”下面的“我的账户”可以对个人资料+密码修改进行管控。
(7)个人中心:当商家用户点击右上角“用户名称”下面的“个人中心”这个按钮,就会进入到对应的后台进行信息的管理了。用户在前台点击“个人中心”可以对个人首页、订单信息、订单发货、收货信息、图书咨询、收藏进行管理。点击订单信息可以查看到所有订单信息列表;点击订单发货可以查看下单的图书订单发货信息;点击“收货信息”可以查看订单的物流配送状态;点击“图书咨询”买家用户可以对感兴趣的图书进行在线发布留言进行该图书的咨询;点击“收藏”按钮的时候就会显示出自己收藏的各种信息了,支持对收藏信息的搜索查询,如果你想不再收藏某一信息,点击删除就可以了。
后台管理员管理模块:
(1)后台首页:管理员后台首页有图书信息统计图:管理员用来统计图书库存数、订单信息统计:每天订单数系统会自动变化、订单发货统计:营业额统计这些功能都是方便管理员对系统的操作;
(2)系统用户:管理员可以对前台上注册过的买家用户信息和商家用户信息进行管控,同时可以对管理员的信息进行管理。
(3)图书信息管理:管理员对图书信息管理这个模块里图书信息列表、图书信息添加进行增删查改等管理;
(4)图书类型管理:管理员对图书类型管理这个模块的图书类型列表、图书类型添加进行增删查改等管理;
(5)订单信息管理:管理员对订单信息管理进行增删查改;
(6)订单发货管理:管理员对订单发货管理进行增删查改;
(7)收货信息管理:管理员对收货信息管理进行增删查改;
(8)图书咨询管理:管理员对图书咨询管理进行增删查改;
(9)系统管理:管理员可以对网络图书销售系统中的轮播图进行发布和维护;
(10)系统公告管理:管理员对系统里的公告进行发布维护管理;
(10)资源管理:管理员可以图书资讯、资讯分类进行发布和管理。
网络图书销售系统的非功能性需求比如网络图书销售系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
表3-1网络图书销售系统非功能需求表
安全性 | 主要指网络图书销售系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指网络图书销售系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响网络图书销售系统占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着网络图书销售系统的页面展示内容进行操作,就可以了。 |
可维护性 | 网络图书销售系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
2.3 系统用例分析
网络图书销售系统的完整UML用例图分别是图2-1和图2-2和图2-3。在参与者上包括买家用户、商家用户以及管理员。前台上买家用户角色用例包括用户是注册成为我们正是买家的用户、用户登录、系统公告、图书资讯、图书信息、个人中心,买家用户角色用例如图2-1所示。
图2-1 网络图书销售系统买家用户角色用例图
web后台管理上的管理员是维护整个网络图书销售系统中所有数据信息的,管理员可以进行登录、后台首页、系统用户、图书信息管理、图片类型管理、订单信息管理、订单发货管理、收货信息管理、图书咨询管理、系统管理、系统公告管理、资源管理等信息。管理员角色用例如图2-2所示。
参与者上还包括有商家用户,商家用户是负责发布整个系统里所有在线销售的所以图书角色,前台上商家用户角色用例包括商家可以在线注册、商家用户登录、系统公告、图书资讯、图书信息、个人中心,商家用户角色用例如图2-3所示。
图2-3 网络图书销售系统商家用户角色用例图
对系统的数据流进行分析,系统的使用者分为二类,用户,管理员。系统主要对界面信息传送,登录信息的验证,注册信息的接收,用户各种操作的响应做处理。
系统顶层数据流图如下图所示。
图3-2 顶层数据流图
要判断用户是是什么身份,是根据登录的数据来判断后,跳转到对应的功能界面。在系统的内部用户就可以对数据进行操作,数据库中心就可以接收到系统传输的有效数据流来对数据sql语句进行对应操作。
系统底层数据流图如下图所示。
图3-3 底层数据流图
系统可以分为前台和后台两部分,每一种操作后系统都返回操作结果。前台和后台的数据连接主要通过数据库,既分别对数据库做不同的操作
2.5本章小结
本章主要通过对网络图书销售系统的可行性分析、功能需求分析、系统用例分析、数据流程分析,确定整个网络图书销售系统要实现的功能。同时也为网络图书销售系统的代码实现和测试提供了标准。
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关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
表access_token (登陆访问时长)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
表article (文章:用于内容管理系统的文章)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | article_id | mediumint | 8 | 0 | N | Y | 文章id:[0,8388607] | |
2 | title | varchar | 125 | 0 | N | Y | 标题:[0,125]用于文章和html的title标签中 | |
3 | type | varchar | 64 | 0 | N | N | 0 | 文章分类:[0,1000]用来搜索指定类型的文章 |
4 | hits | int | 10 | 0 | N | N | 0 | 点击数:[0,1000000000]访问这篇文章的人次 |
5 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
8 | source | varchar | 255 | 0 | Y | N | 来源:[0,255]文章的出处 | |
9 | url | varchar | 255 | 0 | Y | N | 来源地址:[0,255]用于跳转到发布该文章的网站 | |
10 | tag | varchar | 255 | 0 | Y | N | 标签:[0,255]用于标注文章所属相关内容,多个标签用空格隔开 | |
11 | content | longtext | 2147483647 | 0 | Y | N | 正文:文章的主体内容 | |
12 | img | varchar | 255 | 0 | Y | N | 封面图 | |
13 | description | text | 65535 | 0 | Y | N | 文章描述 |
表article_type (文章分类)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000]决定分类显示的先后顺序 |
3 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
4 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
5 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
6 | icon | text | 65535 | 0 | Y | N | 分类图标: | |
7 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表auth (用户权限管理)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表books (订单信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | books_id | int | 10 | 0 | N | Y | 订单信息ID | |
2 | order_number | varchar | 64 | 0 | Y | N | 订单编号 | |
3 | book_number | varchar | 64 | 0 | Y | N | 图书编号 | |
4 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
5 | book_types | varchar | 64 | 0 | Y | N | 图书类型 | |
6 | book_cover | varchar | 255 | 0 | Y | N | 图书封面 | |
7 | author | varchar | 64 | 0 | Y | N | 作者 | |
8 | press | varchar | 64 | 0 | Y | N | 出版社 | |
9 | sales_unit_price | int | 10 | 0 | Y | N | 0 | 销售单价 |
10 | merchant_users | int | 10 | 0 | Y | N | 0 | 商家用户 |
11 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
12 | merchant_phone_number | varchar | 64 | 0 | Y | N | 商家电话 | |
13 | order_date | date | 10 | 0 | Y | N | 下单日期 | |
14 | buyer_user | int | 10 | 0 | Y | N | 0 | 买家用户 |
15 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
16 | receiving_address | varchar | 64 | 0 | Y | N | 收货地址 | |
17 | delivery_phone_number | varchar | 64 | 0 | Y | N | 收货电话 | |
18 | purchase_quantity | int | 10 | 0 | Y | N | 0 | 购买数量 |
19 | payment_amount | varchar | 64 | 0 | Y | N | 支付金额 | |
20 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
21 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
22 | pay_state | varchar | 16 | 0 | N | N | 未支付 | 支付状态 |
23 | pay_type | varchar | 16 | 0 | Y | N | 支付类型: 微信、支付宝、网银 | |
24 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
25 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表book_consultation (图书咨询)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | book_consultation_id | int | 10 | 0 | N | Y | 图书咨询ID | |
2 | book_number | varchar | 64 | 0 | Y | N | 图书编号 | |
3 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
4 | book_types | varchar | 64 | 0 | Y | N | 图书类型 | |
5 | book_cover | varchar | 255 | 0 | Y | N | 图书封面 | |
6 | press | varchar | 64 | 0 | Y | N | 出版社 | |
7 | author | varchar | 64 | 0 | Y | N | 作者 | |
8 | merchant_users | int | 10 | 0 | Y | N | 0 | 商家用户 |
9 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
10 | merchant_phone_number | varchar | 64 | 0 | Y | N | 商家电话 | |
11 | consultation_date | date | 10 | 0 | Y | N | 咨询日期 | |
12 | consulting_users | int | 10 | 0 | Y | N | 0 | 咨询用户 |
13 | consultation_content | text | 65535 | 0 | Y | N | 咨询内容 | |
14 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
15 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
16 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
17 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表book_information (图书信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | book_information_id | int | 10 | 0 | N | Y | 图书信息ID | |
2 | book_number | varchar | 64 | 0 | N | N | 图书编号 | |
3 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
4 | book_types | varchar | 64 | 0 | Y | N | 图书类型 | |
5 | book_cover | varchar | 255 | 0 | Y | N | 图书封面 | |
6 | author | varchar | 64 | 0 | Y | N | 作者 | |
7 | press | varchar | 64 | 0 | Y | N | 出版社 | |
8 | sales_unit_price | int | 10 | 0 | Y | N | 0 | 销售单价 |
9 | inventory_quantity | int | 10 | 0 | Y | N | 0 | 库存数量 |
10 | book_introduction | longtext | 2147483647 | 0 | Y | N | 图书简介 | |
11 | merchant_users | int | 10 | 0 | Y | N | 0 | 商家用户 |
12 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
13 | merchant_phone_number | varchar | 64 | 0 | Y | N | 商家电话 | |
14 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
15 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
16 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
17 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表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 | 更新时间 |
表buyer_user (买家用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | buyer_user_id | int | 10 | 0 | N | Y | 买家用户ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
3 | receiving_address | varchar | 64 | 0 | Y | N | 收货地址 | |
4 | delivery_phone_number | varchar | 64 | 0 | Y | N | 收货电话 | |
5 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
6 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
7 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表collect (收藏)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
3 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
4 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
5 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
6 | title | varchar | 255 | 0 | Y | N | 标题: | |
7 | img | varchar | 255 | 0 | Y | N | 封面: | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表comment (评论)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | comment_id | int | 10 | 0 | N | Y | 评论ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 评论人ID: |
3 | reply_to_id | int | 10 | 0 | N | N | 0 | 回复评论ID:空为0 |
4 | content | longtext | 2147483647 | 0 | Y | N | 内容: | |
5 | nickname | varchar | 255 | 0 | Y | N | 昵称: | |
6 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
9 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
10 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
11 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
表hits (用户点击)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
表merchant_users (商家用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | merchant_users_id | int | 10 | 0 | N | Y | 商家用户ID | |
2 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
3 | merchant_phone_number | varchar | 64 | 0 | Y | N | 商家电话 | |
4 | business_license | varchar | 255 | 0 | Y | N | 营业执照 | |
5 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
6 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
7 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表notice (公告)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
2 | title | varchar | 125 | 0 | N | N | 标题: | |
3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表order_shipment (订单发货)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | order_shipment_id | int | 10 | 0 | N | Y | 订单发货ID | |
2 | order_number | varchar | 64 | 0 | N | N | 订单编号 | |
3 | book_number | varchar | 64 | 0 | Y | N | 图书编号 | |
4 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
5 | book_types | varchar | 64 | 0 | Y | N | 图书类型 | |
6 | book_cover | varchar | 255 | 0 | Y | N | 图书封面 | |
7 | author | varchar | 64 | 0 | Y | N | 作者 | |
8 | press | varchar | 64 | 0 | Y | N | 出版社 | |
9 | sales_unit_price | int | 10 | 0 | Y | N | 0 | 销售单价 |
10 | merchant_users | int | 10 | 0 | Y | N | 0 | 商家用户 |
11 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
12 | merchant_phone_number | varchar | 64 | 0 | Y | N | 商家电话 | |
13 | buyer_user | int | 10 | 0 | Y | N | 0 | 买家用户 |
14 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
15 | receiving_address | varchar | 64 | 0 | Y | N | 收货地址 | |
16 | delivery_phone_number | varchar | 64 | 0 | Y | N | 收货电话 | |
17 | purchase_quantity | int | 10 | 0 | Y | N | 0 | 购买数量 |
18 | payment_amount | varchar | 64 | 0 | Y | N | 支付金额 | |
19 | the_date_of_issuance | date | 10 | 0 | Y | N | 发货日期 | |
20 | express_name | varchar | 64 | 0 | Y | N | 快递名称 | |
21 | express_tracking_number | varchar | 64 | 0 | Y | N | 快递单号 | |
22 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
23 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表praise (点赞)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | praise_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | status | bit | 1 | 0 | N | N | 1 | 点赞状态:1为点赞,0已取消 |
表receiving_information (收货信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | receiving_information_id | int | 10 | 0 | N | Y | 收货信息ID | |
2 | order_number | varchar | 64 | 0 | N | N | 订单编号 | |
3 | book_number | varchar | 64 | 0 | Y | N | 图书编号 | |
4 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
5 | book_cover | varchar | 255 | 0 | Y | N | 图书封面 | |
6 | author | varchar | 64 | 0 | Y | N | 作者 | |
7 | press | varchar | 64 | 0 | Y | N | 出版社 | |
8 | sales_unit_price | int | 10 | 0 | Y | N | 0 | 销售单价 |
9 | merchant_users | int | 10 | 0 | Y | N | 0 | 商家用户 |
10 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
11 | book_types | varchar | 64 | 0 | Y | N | 图书类型 | |
12 | merchant_phone_number | varchar | 64 | 0 | Y | N | 商家电话 | |
13 | buyer_user | int | 10 | 0 | Y | N | 0 | 买家用户 |
14 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
15 | receiving_address | varchar | 64 | 0 | Y | N | 收货地址 | |
16 | delivery_phone_number | varchar | 64 | 0 | Y | N | 收货电话 | |
17 | express_name | varchar | 64 | 0 | Y | N | 快递名称 | |
18 | express_tracking_number | varchar | 64 | 0 | Y | N | 快递单号 | |
19 | delivery_date | date | 10 | 0 | Y | N | 收货日期 | |
20 | evaluation_content | text | 65535 | 0 | Y | N | 评价内容 | |
21 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
22 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
23 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
24 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表sensitive_vocabulary (敏感词汇)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | sensitive_vocabulary_id | int | 10 | 0 | N | Y | 敏感词汇ID | |
2 | sensitive_vocabulary | 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 | 更新时间 |
表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 | 更新时间: |
表upload (文件上传)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
表user (用户账户:用于保存用户登录信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
表user_group (用户组:用于用户前端身份和鉴权)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
3.4本章小结
整个网络图书销售系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4 网络图书销售系统详细设计与实现
网络图书销售系统的详细设计与实现主要是根据前面的网络图书销售系统的需求分析和网络图书销售系统的总体设计来设计页面并实现业务逻辑。主要从网络图书销售系统界面实现、业务逻辑实现这两部分进行介绍。
4.1用户功能模块
4.1.1 前台首页界面
在网络图书销售系统的前台首页界面上采用了上+中+下的方式来布局界面,最右上角是登录+注册这+搜索这三个链接,下面依次是导航栏+轮播图以及下面的系统公告,下面依次是模块展示,其主界面展示如下图4-1所示。
![](https://i-blog.csdnimg.cn/direct/453a8b88306448d78c4ffc56926c7a58.png)
图4-1 前台首页界面图
前台首页的关键代码如下。
@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.2 用户注册界面
不是网络图书销售系统中正式用户的是可以在线进行注册的,当填写上自己的账号+设置密码+确认密码+昵称+邮箱+手机号+身份后+用户名再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用用户注册界面展示如下图4-2所示。
![](https://i-blog.csdnimg.cn/direct/5dc8f50891194ad786043c5fe0cbf676.png)
图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所示。
![](https://i-blog.csdnimg.cn/direct/0673cc6c0e1e49b38906caf3a70234e2.png)
图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图书信息搜索界面
在网络图书销售系统图书信息页上的搜索框中输入自己想要快速检索的图书的关键词并点击“搜索”按钮后将会输入的关键词进行和数据库中保存的图书信息进行模糊匹配,并将检索到最匹配的图书信息显示出来。搜索图书界面如下图7所示。
![](https://i-blog.csdnimg.cn/direct/abe474667f474085a88abd2fb93ea145.png)
图4-4图书信息搜索界面图
搜索图书的关键代码如下。
@RestController
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
/**
* 服务对象
*/
@Autowired
public AuthController(AuthService service) {
setService(service);
}
}
4.1.5 图书信息界面
当访客点击网络图书销售系统中导航栏上的“图书信息”后将会进入到该“图书信息”列表的界面,然后选择想要看的图书信息,点击进入到详细界面,也可以进行点赞+收藏+评论,图书信息界面如下图4-5所示。
![](https://i-blog.csdnimg.cn/direct/6c9d72cc430e4f9499556c0184d48048.png)
图4-5图书信息界面图
4.1.6 图书详情界面
当访客点击了任意图书后将会进入该款图书的详情界面,可以了解到该图书的具体信息,同时可以对该图书进行咨询+点赞+收藏+评论+下单,图书详情展示页面如图4-6所示。
![](https://i-blog.csdnimg.cn/direct/355075823fa34336ab5eda2243424191.png)
图4-6 图书详情界面图
4.1.7 图书购买界面
用户可以在线进行图书购买操作。图书购买界面如下图4-7所示。
![](https://i-blog.csdnimg.cn/direct/15630d54dcfb4dcca7acb20b5ca20cc0.png)
图4-7 图书购买界面图
图书购买的关键代码:
@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.1.8 商家首页界面
商家注册需上传营业执照、同时商家需要管理员审核后才能登录、注册成功的商家在系统首页信息中包含了首页、系统公告、图书资讯、图书信息、我的账户、个人中心等。如下图4-8所示。
![](https://i-blog.csdnimg.cn/direct/16e6a4b1dbab44569a05b876ca4e6db6.png)
图4-8商家首页界面图
4.1.9 商家个人中心界面
商家对个人中心页面的个人首页、图书信息、订单信息、订单发货、收货信息、图书咨询、收藏等进行管控;同时对图书信息有发布销售的图书信息的权限,当商家默认发货后图书数量系统会自动递减,商家负责审核买家订单并回复发货;如图4-9所示。
![](https://i-blog.csdnimg.cn/direct/9767fac4849049188e2ced5c0aa22f57.png)
图4-9商家个人中心界面图
4.2管理员功能模块
4.2.1图书资讯管理界面
网络图书销售系统中的管理人员是可以对前台发布的图书资讯进行管控,图书资讯管理界面如下图4-8所示。
![](https://i-blog.csdnimg.cn/direct/ed0cf3dd5f944818b8cd47b8fcbc20f4.png)
图4-8图书资讯管理界面图
资讯管理关键代码:
@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.2.3 图书信息管理界面
网络图书销售系统中的管理人员是可以对网络图书销售系统内的不同图书的分类下的图书信息进行维护和管理的,支持查看到各个图书的库存量情况以及添加+删除图书。图书信息管理界面如下图4-9所示。
![](https://i-blog.csdnimg.cn/direct/051cc54753ab4019afb9980536393f39.png)
图4-9图书信息管理界面图
图书信息管理的关键代码如下。
@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订单信息管理界面
网络图书销售系统中的管理人员是可以对订单信息进行维护管理。订单管理界面如下图4-10所示。
![](https://i-blog.csdnimg.cn/direct/b56baf80805a4ded81f40b973f90cac0.png)
图4-10订单信息管理界面图
订单信息管理关键代码:
@RequestMapping(value = {"/sum_group", "/sum"})
public Map<String, Object> sum(HttpServletRequest request) {
Query count = service.sum(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
4.2.5系统公告管理界面
网络图书销售系统中的管理人员是可以进行系统公告管理的,可以实现对系统公告的增删改查操作。系统公告管理界面如下图4-11所示。
![](https://i-blog.csdnimg.cn/direct/4c65925977a34d158ac15b29467e50ed.png)
图4-11系统公告管理界面图
系统公告管理关键代码:
@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());
}
5系统测试
5.1 系统测试用例
系统测试包括:用户登录功能测试、用户注册功能测试、图书展示功能测试、图书添加功能测试、添加公告功能测试,如表5-1、5-2、5-3、5-4、5-5所示:
表5-1 用户登录功能测试表
测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
用户登录模块测试 | 正确输入用户信息,用户成功登录 | 输入用户的信息 | 1.在密码框输入用户密码。2.点击登录 | 跳转到首页 | 正确 |
用户注册功能测试:
表5-2 用户登录功能测试表
测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
用户注册模块测试 | 正确输入用户星系,完成用户注册 | 输入用户的基本信息 | 在注册页面填写用户相应的信息,然后点击“注册”按钮。 | 提示成功并跳转到登录界面 | 正确 |
用户注册模块测试 | 用户注册失败 | 用户两次输入密码不一致 | 用户在注册页面填写信息时输入两个不一致的密码然后点击“注册”按钮。 | 注册失败提示两次密码输入不一致 | 正确 |
图书信息界面测试:
表5-3 图书信息界面测试表
测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
图书信息功能模块测试 | 图书信息正常的显示 | 浏览图书信息 | 在前台首页选择一个图书分类进入分类列表,然后选择一个图书 | 进入该图书的详细信息界面 | 正确 |
管理员添加图书功能测试:
表5-4 管理员添加图书功能测试表
测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
管理员添加图书功能测试 | 添加图书成功的情况 | 输入新图书的基本信息 | 后台选择“发布图书”选项,然后填写新图书基本信息点击“添加”按钮 | 新图书添加成功 | 正确 |
管理员添加图书功能测试 | 添加图书失败的情况 | 输入图书基本信息不完全 | 后台选择“发布图书”选项,然后不完全填写图书信息,点击“添加”按钮。 | 对应信息框后出现提示请输入XXXX信息 | 正确 |
管理员添加图书功能测试 | 添加图书失败的情况 | 管理员在价格框输入非数字字符 | 后台选择“发布图书”选项然后再价格框输入非数字字符,点击“添加”按钮。 | 添加失败,提示“价格必须时货币格式!” | 正确 |
表5-5 管理员添加公告功能测试表
测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
管理员添加公告功能测试 | 添加公告成功的情况 | 输入新公告的基本信息 | 后台选择“发布公告”选项,然后填写新公告基本信息点击“添加”按钮 | 新公告添加成功 | 正确 |
管理员添加公告功能测试 | 添加公告失败的情况 | 输入公告基本信息不完全 | 后台选择“发布公告”选项,然后不完全填写公告信息,点击“添加”按钮。 | 对应信息框后出现提示请输入XXXX信息 | 正确 |
管理员添加公告功能测试 | 添加公告失败的情况 | 管理员在价格框输入空白 | 后台选择“发布公告”选项然后再标题框输入空白,点击“添加”按钮。 | 添加失败,提示“标题必须填写!” | 正确 |
5.2 系统测试结果
通过编写网络图书销售系统的测试用例,已经检测完毕用户登录功能测试、用户注册功能测试、图书展示功能测试、图书添加功能测试、添加公告功能测试,通过这几大模块为网络图书销售系统的后期推广运营提供了强力的技术支撑。
结论
此时项目已经完成,即使实施的时间不是很长,但是这个过程中需要准备很长的一段时间去对系统设计开发所实际到的技术进行学习。在学习的过程中,我逐渐认识得到了我自身存在的一些不足。对于一些控制是必要的应用技能,能够理解,整个过程中仅仅是一个掌握了常用的性能和控制方法,我觉得挺容易的。从该系统中,系统的分析和设计的调查数据,并且已经经历了几个月,并努力几个月,该系统已经完成。很显然,该系统仍有很多不成熟,在系统设计过程中有许多技术缺陷存在。在设计的过程中也涉及到了很多自己无法解决的问题,主要通过找专业的网站来解决这些问题,对于圆满完成我的毕业设计,他们也贡献了很大一部分力量。系统的开发环境和配置都是可以自行安装的,系统使用Springboot开发框架,使用比较成熟的Mysql数据库进行对系统前台及后台的数据交互,根据技术语言对数据库,结合需求进行修改维护,可以使得系统运行更具有稳定性和安全性,从而完成实现系统的开发。
系统投入运行时,各功能均运行正常。系统的每个界面的操作符合常规逻辑,对使用者来说操作简单,界面友好。整个系统的各个功能设计合理,体现了人性化。
多租户博客网站的主要特点有:
(1)简单大方,易于操作的 Web 页面;
(2)利用 Ajax 技术使页面进行无刷新更新;
(3)有良好的安全性和可扩展性,增强了系统的可靠性,使系统保持持久的生命力。
由于时间限制和本人能力条件有限,该系统还存在一些不足,今后也会出现许多新的开发技术,未来还可以对系统做出如下改进:
(1)优化系统页面,使页面更加美观且方便操作;
(2)优化搜索功能,提供多条件选择查询搜索;
(3)优化图书推荐功能,提高图书推荐的精准度;
(5)进一步提高系统的安全性,使系统更加健壮;
(6)优化数据和代码,提升软件效率,方便系统维护和扩展。
参考文献
[1]Handini E ,Hasenaka T ,Barber D N , et al. Systematics of slab-derived components in Central Java, Sunda Arc: Evidence for differential material transfer across the Southeast Asian convergent margin [J]. Tectonophysics, 2024, 873 230229-.
[2]谭光兴,甘景,戚秋晨. 基于Java语言的远程数据采集系统设计与实现 [J]. 科技与创新, 2024, (01): 19-22.
[3]京东商城图书销售排行榜(2023年12月) [J]. 出版人, 2024, (01): 127.
[4]聂慧超. 全年销售扁平化,图书营销往何处去?[N]. 中国出版传媒商报, 2023-12-08 (010).
[5]杨华,徐扬. MySQL数据库对中文编码支持的探讨 [J]. 网络安全和信息化, 2023, (10): 157-160.
[6]陈蓓蕾,洪年松. 基于SpringBoot的数据库接口设计 [J]. 信息与电脑(理论版), 2023, 35 (16): 181-183.
[7]徐颖. 图书销售渠道之变 [J]. 支点, 2023, (08): 43-45.
[8]Stokes D . Update or migrate? Planning for MySQL 5.7 EOL [J]. InfoWorld.com, 2023,
[9]王丽君,路一平. 基于数据挖掘技术的数字图书馆交互服务系统开发研究 [J]. 信息技术与信息化, 2023, (04): 35-38.
[10]叶文龙,马坤. “互联网+”时代网络图书资源平台推广面临的问题及对策 [J]. 产业与科技论坛, 2022, 21 (23): 241-243.
[11]Yang Y . Design and Implementation of Student Information Management System Based on Springboot [J]. Advances in Computer, Signals and Systems, 2022, 6 (6):
[12]陈超. 基于SSM的网上书城销售管理系统的设计与实现[D]. 北京邮电大学, 2022.
[13]刘玲. 网络图书评论研究[D]. 济南大学, 2022.
[14]陈召久. 基于互联网的图书情报一体化管理系统设计 [J]. 电子技术, 2022, 51 (02): 186-187.
[15]赵龙,王风硕. 基于Vue的图书销售系统设计与实现 [J]. 电脑知识与技术, 2021, 17 (36): 81-82+85.
[16]余任杰,王风硕. 基于Node.js的网上图书销售系统设计 [J]. 电脑知识与技术, 2021, 17 (34): 83-84+92.
[17]刘晶,张曼. “生活化”设计,让项目学习更接地气——以“探索身边的信息系统”为例 [J]. 中国信息技术教育, 2021, (21): 31-33.
[18]刘金兰. 新媒体时代传统图书出版在融合发展中的提升策略 [J]. 传播与版权, 2021, (09): 67-69.
[19]倪楚乔. 基于ASP.NET的网上图书销售系统 [J]. 信息与电脑(理论版), 2021, 33 (12): 99-102.
[20]郑克新. “互联网+”背景下高职院校图书馆服务转型探析 [J]. 才智, 2021, (14): 98-100.
致 谢
本次设计历时3个月。在这个毕业设计中,它离不开指导教师的指导,使事情基本顺利。指导老师无论是在毕业设计历经中,还是在论文做完中都给了了我特别大的助益。另1个方面,教师认真负责的工作姿态,谨慎的教学精神厚重的理论水准都使我获益匪浅。他勤恳谨慎的教学育人学习姿态也给我留下了特别特别深的感觉。我从老师那里学到了很多东西。在理论和实践中,我的技能得到了特别大的提高。在此,特向教师表示由衷的感激。
经过对该毕业设计的全部研究和开发,我的系统研发经历了从需求分析到实现详细功能,再到最终测试和维护的特殊进展。让我对系统研发有了更深层次的认识。如今我的动手本领单独处理疑惑的本领也获取到了特别大的演练学习增多,这是这次毕业设计最好的收获。
最后,在整个系统开发过程中,我周围的同学和朋友给了我很多意见,所以我很快就确认了系统的商业思想。在次,我由衷的向他们表示感激。
免费领取项目源码,请关注❤点赞收藏并私信博主,谢谢-