基于springboot和vue的智能仓储管理系统
摘 要
本文概述了一个利用Spring Boot后端框架和Vue前端框架构建的智能仓储管理系统。该系统通过集成先进的仓储管理理念和技术,实现了对货品类型、货品信息、货品入库以及货品出库等关键仓储环节的全面管理,从而提高了仓储作业的效率和准确性。
在系统设计上,该系统通过Spring Boot框架的灵活性和扩展性,构建了稳定可靠的后端服务,提供了货品类型定义、货品信息录入与查询、入库流程控制以及出库计划生成等功能。同时,Vue框架的响应式设计和组件化开发思想被应用于前端界面,为用户提供了直观友好的操作体验。
在功能实现上,该系统支持自定义货品类型,方便用户根据实际需求进行灵活配置。货品信息管理模块则实现了对货品详细信息的录入、编辑和查询,确保信息的准确性和完整性。入库管理模块通过自动化流程控制,简化了入库操作,提高了入库效率。出库管理模块则根据订单或出库需求,自动生成出库计划,优化了出库流程。
此外,该系统还采用了数据库优化、缓存技术等手段,提升了数据处理效率和系统性能。同时,通过日志记录、异常处理等功能,确保了系统的稳定性和安全性。
综上所述,基于Spring Boot和Vue的智能仓储管理系统为仓储管理带来了显著的改进和提升,实现了仓储流程的自动化、智能化管理,为企业提供了更加高效、精准的仓储解决方案。
关键词:智能仓储管理系统;Java;Spring Boot框架
Intelligent Warehouse Management System Based on Springboot and Vue
Abstract
This article provides an overview of an intelligent warehouse management system built using the Spring Boot backend framework and Vue frontend framework. This system integrates advanced warehousing management concepts and technologies to achieve comprehensive management of key warehousing processes such as product types, product information, product inbound and outbound, thereby improving the efficiency and accuracy of warehousing operations.
In terms of system design, the system utilizes the flexibility and scalability of the Spring Boot framework to build a stable and reliable backend service, providing functions such as defining product types, inputting and querying product information, controlling inbound processes, and generating outbound plans. Meanwhile, the responsive design and component-based development ideas of the Vue framework have been applied to the front-end interface, providing users with an intuitive and user-friendly operating experience.
In terms of functional implementation, the system supports custom product types, making it convenient for users to flexibly configure according to their actual needs. The product information management module enables the entry, editing, and querying of detailed product information, ensuring the accuracy and completeness of the information. The inbound management module simplifies inbound operations and improves inbound efficiency through automated process control. The outbound management module automatically generates outbound plans based on orders or outbound requirements, optimizing the outbound process.
In addition, the system also adopts database optimization, caching technology and other means to improve data processing efficiency and system performance. Meanwhile, the stability and security of the system are ensured through functions such as logging and exception handling.
In summary, the intelligent warehousing management system based on Spring Boot and Vue has brought significant improvements and enhancements to warehousing management, achieving automation and intelligent management of warehousing processes, and providing enterprises with more efficient and accurate warehousing solutions.
Key words:Intelligent warehouse management system; Java; Spring Boot framework
目 录
随着科技的不断进步和互联网的深入发展,传统仓储管理方式已经无法满足现代企业的需求。传统的仓储管理方式往往存在着信息化程度低、操作繁琐、数据不准确等问题,这不仅增加了企业的运营成本,还降低了市场竞争力。因此,开发一套高效、智能、易用的仓储管理系统成为企业迫切的需求。
基于Spring Boot和Vue的智能仓储管理系统正是为了应对这一挑战而诞生的。Spring Boot作为一种轻量级的Java开发框架,具有快速开发、简化配置、易于集成等优点,非常适合用于构建企业级的应用系统。而Vue则以其直观友好的用户界面和灵活的组件化开发方式赢得了广大开发者的青睐。两者的结合,使得智能仓储管理系统在功能实现和用户体验上都达到了较高的水平。
该系统的研究意义在于,通过实现自动化、智能化的仓储管理,能够显著提高企业的运营效率和管理水平。系统通过精准的数据统计与报表功能,帮助用户更好地了解仓库的运营情况,从而做出更明智的决策。同时,系统还能够实时更新库存状态,提供准确的库存信息,优化仓储空间布局,减少库存积压和浪费,进一步降低企业的运营成本。
此外,智能仓储管理系统的研究还有助于提升企业的市场竞争力。通过实时掌握库存动态,企业能够更快速地响应市场需求,调整生产和销售计划,从而在激烈的市场竞争中占据有利地位。
综上所述,基于Spring Boot和Vue的智能仓储管理系统的研究不仅具有深厚的背景,更有着广泛的应用前景和深远的意义。它不仅能够解决传统仓储管理方式存在的问题,还能够为企业的运营和发展提供有力的支持,推动企业在数字化、智能化的道路上不断前行。
-
- 国内外研究现状
在国内,随着信息化建设的推进和物流行业的快速发展,智能仓储管理系统已成为企业提高运营效率、降低成本的重要工具。越来越多的企业开始关注并投入研发基于Spring Boot和Vue的智能仓储管理系统。这些系统通过集成先进的仓储管理理念和技术,实现了对货品类型、货品信息、货品入库以及货品出库等关键仓储环节的全面管理。同时,国内的研究者和开发者也在不断探索和尝试,通过优化算法、提升系统性能等方式,进一步提高智能仓储管理系统的效率和准确性。
在国外,智能仓储管理系统的研究与应用已经相对成熟。许多知名的物流企业和软件开发商都推出了自己的智能仓储管理系统产品,这些产品不仅功能丰富、性能稳定,而且在实际应用中取得了显著的效果。国外的研究者更注重系统的创新性和前瞻性,不断探索新的技术和方法,如人工智能、物联网等,以提升智能仓储管理系统的智能化水平和自动化程度。
总的来说,基于Spring Boot和Vue的智能仓储管理系统在国内外都受到了广泛的关注和重视。虽然国内在技术研发和应用方面相对滞后,但随着信息化建设的不断深入和物流行业的快速发展,相信国内的研究者和开发者会不断追赶并超越国际先进水平,为企业的仓储管理提供更加高效、智能的解决方案。
根据市场调研得到的信息数据,结合国内外前沿研究,利用相关系统开发和设计方法,最终设计出智能仓储管理系统。
本文共有七章,如下所示。
第一章概述了智能仓储管理系统的研究背景和意义;精炼地总结了国内外研究情况和未来的研究趋势,最后给出了论文的组成结构。
第二章简要对系统各业务流程进行需求分析、可行性分析。
第三章对智能仓储管理系统进行设计。
第四章对智能仓储管理系统进行实现,并贴出相关页面截图,语言描述出具体功能实现的操作方法。
第五章对智能仓储管理系统采用测试用例的方式来对一些主要功能模块测试,最后得出测试结果。
第六章总结全文并对未来的研究做出展望。
在软件开发的过程中系统的可行性分析是必不可少的,可行性的研究就是评估问题是否能得到解决并且是要以最少的时间和最少的代价来解决。为实现上面的目标还要必须考虑到解决这些问题的方法的优点和缺点,还要考虑到实现了这些系统规模的开发带来的经济效益。这里可以用技术的可行性,操作的可行性,经济的可行性对我们的系统进行可行性的研究。智能仓储管理系统的可行性分析如下所示:
基于Spring Boot和Vue的智能仓储管理系统在技术上是完全可行的。Spring Boot框架以其快速开发、简化配置和易于集成的特点,为后端服务提供了稳定可靠的技术支持。Vue框架则以其直观友好的用户界面和灵活的组件化开发方式,为前端界面设计提供了高效便捷的实现手段。结合两者,可以构建出功能强大、性能优越的智能仓储管理系统,实现对货品类型、信息、入库和出库等关键环节的全面管理。因此,从技术角度来看,基于Spring Boot和Vue的智能仓储管理系统是可行的,并且有望为企业带来显著的效益和竞争优势。
基于Spring Boot和Vue的智能仓储管理系统在经济上也是可行的。虽然系统的开发和实施需要一定的成本投入,包括技术研发、设备购置、人员培训等方面的费用,但考虑到系统能够显著提高仓储管理的效率和准确性,降低人力成本,减少错误率,以及优化库存管理和减少浪费,这些投入能够在长期运营中为企业带来可观的经济效益。通过提高运营效率、降低库存成本、优化资源配置等方式,系统能够为企业创造更多的价值,从而实现经济上的可行性和回报。因此,从经济角度来看,基于Spring Boot和Vue的智能仓储管理系统是可行的,并且具有良好的投资回报前景。
本系统是基于浏览器和服务器的智能仓储管理系统,系统开发完成之后用户只需要在浏览器中输入正确的URL地址即可进行访问。本系统的前台页面简单明了,在没有操作指导的情况下也可以进行操作,无论是系统管理员还是用户在页面中所有的操作都是在浏览器中完成的,因此只要电脑在有网络的情况下,打开浏览器都能操作。而且在使用之前也不用进行相关的环境配置,因此本系统方便、简单、易于使用,所以该系统是容易并且可操作的。
在设计和开发基于Spring Boot和Vue的智能仓储管理系统时,我们进行了深入且全面的需求分析,以确保系统能够精准地满足仓储业务及其用户群体的实际需求。
明确业务核心:系统应覆盖系统用户、货品类型管理、货品信息管理、货品入库管理、货品出库管理、公告通知管理等。通过整合这些业务流程,系统能够提供一个集中化、高效化的管理平台,帮助仓储企业提升运营效率,减少错误率。
系统性能与效率:考虑到仓储业务通常涉及大量的数据处理和实时更新,系统必须具备高性能和高效率的特性。Spring Boot框架的轻量级和快速开发特性能够确保后端服务的稳定与高效,而Vue框架的响应式设计和组件化开发方式则能够提升前端界面的流畅度和用户体验。此外,系统还需具备强大的数据处理能力,以应对大量并发请求和快速响应各种查询需求。
用户体验与交互:系统界面应设计得直观、友好,并符合用户的使用习惯。通过Vue框架的组件化开发,我们可以构建出模块化、可重用的界面组件,降低开发成本并提高开发效率。同时,系统应提供清晰的用户指引和反馈机制,帮助用户快速熟悉系统操作并解决使用过程中遇到的问题。
数据安全与隐私:仓储管理系统涉及大量的敏感数据,如货品信息、库存数据、订单详情等。因此,系统必须采取严格的数据加密和访问控制措施,确保数据的安全性。Spring Boot框架提供了强大的安全支持,包括身份验证、授权和加密等功能,可以保障系统的数据安全。同时,系统还应建立完善的备份和恢复机制,以防止数据丢失或损坏。
扩展性与可维护性:随着仓储业务的发展和变化,系统可能需要不断扩展和升级。因此,在设计系统时,我们充分考虑了扩展性和可维护性。Spring Boot框架的模块化设计和灵活的配置方式使得系统能够轻松添加新功能或调整现有功能。同时,Vue框架的组件化开发方式也使得前端界面能够方便地进行维护和更新。
综上所述,基于Spring Boot和Vue的智能仓储管理系统的需求分析旨在确保系统能够精准地满足仓储业务的实际需求,提升仓储企业的运营效率和服务质量。通过优化性能、提升用户体验、保障数据安全以及实现系统的可扩展性和可维护性,我们期待这一系统能够为仓储企业带来实质性的改进和竞争优势。
基于Spring Boot和Vue的智能仓储管理系统的性能分析,主要涵盖了系统的响应速度、稳定性、并发处理能力以及资源利用效率等多个方面。
从响应速度来看,Spring Boot框架的快速开发特性以及Vue框架的响应式设计使得系统能够迅速响应用户的操作请求,提供流畅的用户体验。无论是货品信息的查询、库存状态的更新还是订单的处理,系统都能在短时间内完成并返回结果,有效提高了工作效率。
系统的稳定性是确保持续、高效运行的关键。Spring Boot框架通过简化配置和集成多种成熟技术,降低了系统的出错率,提高了系统的稳定性。同时,Vue框架的组件化开发方式也使得系统更加健壮,减少了因代码耦合导致的错误。此外,系统还采用了数据备份和恢复机制,确保了数据的完整性和安全性。
在并发处理能力方面,基于Spring Boot和Vue的智能仓储管理系统展现出了优秀的性能。Spring Boot框架的轻量级特性和高效性能使得系统能够轻松应对大量并发请求,而Vue框架的异步加载和组件复用技术则进一步提升了前端的处理能力。这使得系统在高峰时段依然能够保持稳定的响应速度和良好的用户体验。
资源利用效率也是评估系统性能的重要指标。基于Spring Boot和Vue的智能仓储管理系统通过合理的架构设计和优化算法,实现了对硬件资源的有效利用。无论是CPU、内存还是存储空间,系统都能够根据实际需求进行动态分配和调整,确保资源的最大化利用。
综上所述,基于Spring Boot和Vue的智能仓储管理系统在性能上表现出色,能够快速响应用户请求、保持稳定的运行状态、高效处理并发请求并充分利用硬件资源。这些优点使得系统能够为企业提供高效、可靠的仓储管理服务,提升企业的运营效率和竞争力。
智能仓储管理系统的完整UML用例图分别是图2-1、图2-2和图2-3,在参与者上包括注册用户、管理员和操作员用户。
注册用户角色的用例描述:用户可以通过简单的注册流程,创建个人账号并设置密码,从而获取系统访问权限。登录过程采用加密验证,确保用户信息的安全性。登录成功后,用户将进入后台首页,该页面以直观的方式展示了系统的核心功能和数据概览,便于用户快速了解仓储管理状态。在货品信息管理模块,用户可以轻松查看和搜索货品信息,实现库存的精确查询。此外,公告通知管理功能允许用户发布和查看系统公告,确保用户能够及时获取重要通知和更新。这些功能共同构成了注册用户在智能仓储管理系统中的基础操作框架,提升了用户的工作效率和体验。
注册用户角色用例如图2-1所示。
![](https://i-blog.csdnimg.cn/direct/3797dbff2ffe428b8cf7c3482a804ab5.png)
图2-1注册用户用例图
管理员角色的用例描述:管理员通过安全的登录验证后,可以进入系统的后台首页,快速了解仓储管理的整体情况。在系统用户管理模块,管理员可以方便地查看、添加、编辑和删除用户账号,确保系统的用户权限得到有效控制。在货品类型管理方面,管理员能够定义和管理不同的货品分类,为货品信息管理提供基础框架。通过货品信息管理功能,管理员可以详细记录货品的各项信息,实现库存的精准掌握。此外,系统还提供了货品入库和出库管理功能,管理员可以实时跟踪货品的流动情况,确保库存的准确性与及时性。公告通知管理功能则允许管理员发布重要通知,保持与用户的及时沟通。这些功能共同构成了管理员在智能仓储管理系统中的核心操作体系,极大地提升了仓储管理的效率和准确性。
管理员角色用例如图2-2所示。
![](https://i-blog.csdnimg.cn/direct/ed68efd1b78c40d6822b601b1ad120c6.png)
图2-2管理员用例图
操作员用户角色的用例描述:操作员用户通过简单的注册和登录流程,即可进入系统的后台界面,开始日常的仓储管理工作。在后台首页,操作员用户可以快速了解仓储概况,掌握库存状态。货品信息管理功能允许操作员详细记录货品的各项信息,包括名称、规格、数量等,为库存管理提供数据支持。此外,系统还提供了货品入库和出库管理功能,操作员用户可以根据实际需求进行货品的入库和出库操作,确保库存的准确性和及时性。同时,公告通知管理功能使操作员用户能够随时接收和查看系统发布的通知,以便及时了解仓储管理的最新动态。这些功能设计充分考虑了操作员用户的实际需求和工作流程,有效提升了仓储管理的效率和准确性。
操作员用户角色用例如图2-3所示。
![](https://i-blog.csdnimg.cn/direct/d1234c6a987d45ef894d5a323bf2ca61.png)
图2-3操作员用户用例图
(1)增加数据流程
系统中的所有用户(管理员、注册用户和操作员用户)都可以实现增加数据功能,图2-4显示的就是在增加数据时的流程。
![](https://i-blog.csdnimg.cn/direct/ebc3b2dbd4ba44e7b78ac04b3714acbc.png)
图2-4增加数据流程图
(2)修改数据流程
在录入系统信息的时候如果信息有错,可以对系统中的数据进行编辑。图2-5显示的就是修改数据的流程。
![](https://i-blog.csdnimg.cn/direct/6d28a42a838a4b81b7070d0e8f579244.png)
图2-5修改数据流程图
(3)删除数据流程
在系统中经常会出现一些过期的数据,那就可以直接删除这些数据,图2-6就是删除数据时的流程图。
![](https://i-blog.csdnimg.cn/direct/27b3afa0888a45df9d366919641c8137.png)
图2-6删除数据流程图
由于本系统在逻辑事务处理方面对数据库的操作比较频繁所以系统在底层连接数据库时并没有使用原生的JDBC,而是把JDBC进行了封装,封装之后相当于一个连接数据库的工具DB UTIL,这样使用起来会更加方便而且这样进行封装还可以降低系统中代码的冗余,当我们需要连接和使用数据库时只需要调用这个工具里面的一个方法就可以了。而且通过封装可以把对数据库的操作独立起来,当需要连接不同种类的数据库时只需要加以修改就可以达到目的。
DAO层本来并无这个类,它只是java中MVC构造里的一个model概念,主要就是里面的一些方法,而这些方法就是用来访问数据库的方法。我们在软件开发时DAO层我们一般都放接口和接口的实现类,用于来规范实现类的我们叫它接口,实现类重点用于对数据库的操纵。
MVC是一种系统研发的关键模型,M是Model模型,它是系统内部关键程序运行的核心,主要进行对数据库的各种操作。视图View是V也叫做视图,主要的作用是对一些数据进行显示。控制器Controller 是C执行从View的视图层来读取数据,然后控制用户的输入。
系统架构如下图所示。
图3-1系统架构图
进入系统后首先要进行登录,验证你的身份,赋予你不同的权限。当你成功登录后,页面会有多个板块,分别是后台首页、系统用户、货品类型管理、货品信息管理、货品入库管理、货品出库管理、公告通知管理。系统分为注册用户、操作员用户和管理员三大模块,里面界面简单易懂,根据标示可以直接进行方便快捷的操作。
系统功能结构图如下所示。
图3-2系统功能结构图
一个好的系统它的后台数据库一定要考虑的全面,这和我们建造房子一个概念,房子不是随心所欲建起来的,一切都是在合理设计的基础是实现的,地基打牢固了房子才能建的更高。数据库如果设计的很合理,而且每个方面都能考虑到了那么这个系统才能不会出现大的问题。
一个好的数据库可以关系到程序开发的优劣,数据库设计离不开表结构的设计,还有表与表之间的联系,以及系统开发需要设计的数据表内容等信息。在进行数据库设计期间,要结合实际情况来对数据库进行针对性的开发设计。
-
-
- 数据库E-R图设计
-
智能仓储管理系统采用的是mysql数据库,数据存储快,因为智能仓储管理系统,主要的就是对信息的管理,信息内容比较多,这就需要好好的设计一个好的数据库,分类要清楚,不能添加信息的时候,造成信息太过混乱,设计好的数据库首先就需要先把各个实体之间的关系表达明确,
系统的主要实体间关系E-R图如下图所示。
图3-3系统E-R图
此环节把概念转变成数据。由于整个数据库所处理的信息过多,就只展示以下几个表。
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 用户编号: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | announcement_notice_id | int | 10 | 0 | N | Y | 公告通知ID | |
2 | announcement_name | varchar | 64 | 0 | Y | N | 公告名称 | |
3 | announcement_number | varchar | 64 | 0 | N | N | 公告编号 | |
4 | announcement_type | varchar | 64 | 0 | Y | N | 公告类型 | |
5 | announcement_image | varchar | 255 | 0 | Y | N | 公告图片 | |
6 | announcement_details | text | 65535 | 0 | Y | N | 公告详情 | |
7 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | goods_outbound_id | int | 10 | 0 | N | Y | 货品出库ID | |
2 | operator_user | int | 10 | 0 | Y | N | 0 | 操作员用户 |
3 | operator_name | varchar | 64 | 0 | Y | N | 操作员名称 | |
4 | contact_phone_number | varchar | 64 | 0 | Y | N | 联系电话 | |
5 | description_of_goods | varchar | 64 | 0 | Y | N | 货品名称 | |
6 | item_code | varchar | 64 | 0 | Y | N | 货品编号 | |
7 | product_type | varchar | 64 | 0 | Y | N | 货品类型 | |
8 | product_details | varchar | 64 | 0 | Y | N | 货品详情 | |
9 | storage_location | varchar | 64 | 0 | Y | N | 存放位置 | |
10 | outbound_quantity | int | 10 | 0 | Y | N | 0 | 出库数量 |
11 | outbound_date | datetime | 19 | 0 | Y | N | 出库日期 | |
12 | outbound_remarks | text | 65535 | 0 | Y | N | 出库备注 | |
13 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
14 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | goods_storage_id | int | 10 | 0 | N | Y | 货品入库ID | |
2 | operator_user | int | 10 | 0 | Y | N | 0 | 操作员用户 |
3 | operator_name | varchar | 64 | 0 | Y | N | 操作员名称 | |
4 | contact_phone_number | varchar | 64 | 0 | Y | N | 联系电话 | |
5 | description_of_goods | varchar | 64 | 0 | Y | N | 货品名称 | |
6 | item_code | varchar | 64 | 0 | Y | N | 货品编号 | |
7 | product_type | varchar | 64 | 0 | Y | N | 货品类型 | |
8 | product_details | varchar | 64 | 0 | Y | N | 货品详情 | |
9 | storage_location | varchar | 64 | 0 | Y | N | 存放位置 | |
10 | inventory_quantity | int | 10 | 0 | Y | N | 0 | 入库数量 |
11 | storage_date | datetime | 19 | 0 | Y | N | 入库日期 | |
12 | storage_remarks | text | 65535 | 0 | Y | N | 入库备注 | |
13 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
14 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | logistics_information_id | int | 10 | 0 | N | Y | 物流详情ID | |
2 | registered_users | int | 10 | 0 | Y | N | 0 | 注册用户 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户名称 | |
4 | mobile_phone_number | varchar | 64 | 0 | Y | N | 手机号码 | |
5 | logistics_name | varchar | 64 | 0 | Y | N | 物流名称 | |
6 | logistics_tracking_number | varchar | 64 | 0 | Y | N | 物流单号 | |
7 | logistics_remarks | text | 65535 | 0 | Y | N | 物流备注 | |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | operator_user_id | int | 10 | 0 | N | Y | 操作员用户ID | |
2 | operator_name | varchar | 64 | 0 | Y | N | 操作员名称 | |
3 | contact_phone_number | varchar | 16 | 0 | Y | N | 联系电话 | |
4 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
5 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | product_information_id | int | 10 | 0 | N | Y | 货品信息ID | |
2 | registered_users | int | 10 | 0 | Y | N | 0 | 注册用户 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户名称 | |
4 | mobile_phone_number | varchar | 64 | 0 | Y | N | 手机号码 | |
5 | description_of_goods | varchar | 64 | 0 | Y | N | 货品名称 | |
6 | item_code | varchar | 64 | 0 | N | N | 货品编号 | |
7 | product_images | varchar | 255 | 0 | Y | N | 货品图片 | |
8 | product_type | varchar | 64 | 0 | Y | N | 货品类型 | |
9 | total_inventory | int | 10 | 0 | Y | N | 0 | 库存总数 |
10 | storage_location | text | 65535 | 0 | Y | N | 存放位置 | |
11 | product_details | text | 65535 | 0 | Y | N | 货品详情 | |
12 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
13 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | product_type_id | int | 10 | 0 | N | Y | 货品类型ID | |
2 | type_name | 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 | registered_users_id | int | 10 | 0 | N | Y | 注册用户ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用户名称 | |
3 | mobile_phone_number | varchar | 16 | 0 | Y | N | 手机号码 | |
4 | user_gender | varchar | 64 | 0 | Y | N | 用户性别 | |
5 | personal_introduction | text | 65535 | 0 | Y | N | 个人介绍 | |
6 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 文件类型 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 会员折扣 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
- 系统实现
- 注册用户模块的实现
4.1.1 用户登录界面
系统中的用户是可以通过自己的账户名、密码和验证码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到系统的首页中;否则将会提示相应错误信息。用户登录界面如下图所示。
图4-1用户登录界面图
登录代码如下:
/**
* 登录
* @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.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}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.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
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());
Duration duration = Duration.ofSeconds(7200L);
redisTemplate.opsForValue().set(accessToken.getToken(), accessToken,duration);
// 返回用户信息
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.2货品信息管理界面
注册用户可以查询货品信息,包括货品名称、货品编号、货品图片、货物类型、货物详情等信息,还可以进行查询和删除的操作。界面如下图所示。
图4-2货品信息管理界面图
注册用户能够查看系统内部的公告通知,包括仓储相关的重要信息和通知,以便用户间及时沟通和共享重要消息。界面如下图所示。
图4-3公告通知管理界面图
-
- 管理员功能模块的实现
4.2.1 管理员登录界面
管理员进入到系统登录界面,需要填写正确的账号、密码和验证码等信息输入准确无误后登录进入到系统操作界面。管理员的账号是在数据表表中直接设置生成的,不需要进行注册;修改密码:管理员可以随时修改自己进入系统的登录密码,以保证系统的安全性。管理员登录界面如下图所示。
图4-4管理员登录界面图
4.2.2 管理员功能界面
管理员可以查看后台首页、系统用户、货品类型管理、货品信息管理、货品入库管理、货品出库管理、公告通知管理等,并且可以根据需要进行相应的操作。在功能界面可以查看货品出库统计折线图。管理员功能界面如下图所示。
图4-5管理员功能界面图
4.2.3 系统用户管理界面
管理员可以对系统中所有的用户角色进行管控,包含了管理员、注册用户和操作员用户这三种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户。系统用户管理界面如下图所示。
图4-6系统用户管理界面图
4.2.4货品类型管理界面
管理员可以管理货品的类型信息,包括添加新的货品类型、编辑类型信息、删除类型等,以便对货品进行分类管理。货品类型管理界面如下图所示。
图4-7货品类型管理界面图
4.2.5 货品信息管理界面
管理员能够管理货品的具体信息,包括添加新货品、编辑货品详情、删除货品等操作,以确保仓库货物信息的准确性和实时性。界面如下图所示。
图4-8货品信息管理界面图
管理员可以对系统前台展示的通知公告进行增删改查,方便用户进行查看。公告消息管理界面如下图所示。
图4-9公告通知管理界面图
操作员用户能够查看货品信息,包括添加货品名称、货品图片、货品详情等,可以对货品进行入库的操作。以确保货品信息的准确性和实时性。界面如下图所示。
图4-10货物信息管理界面图
操作员用户能够管理货品出库的权限,包括记录出库信息、更新库存数量、生成出库单据等操作,以确保货物正确出库并实时更新库存信息。界面如下图所示。
图4-11货品入库管理界面图
操作员用户能够管理货品出库的权限,包括记录出库信息、更新库存数量、生成出库单据等操作,以确保货物正确出库并实时更新库存信息。界面如下图所示。
图4-12货品出库管理界面图
系统开发到了最后一个阶段那就是系统测试,系统测试对软件的开发其实是非常有必要的。因为没什么系统一经开发出来就可能会尽善尽美,再厉害的系统开发工程师也会在系统开发的时候出现纰漏,系统测试能够较好的改正一些bug,为后期系统的维护性提供很好的支持。通过系统测试,开发人员也可以建立自己对系统的信心,为后期的系统版本的跟新提供支持。
5.2 系统测试用例
系统测试包括:用户登录功能测试、公告通知查看功能测试、货物信息添加、货物信息搜索、密码修改功能测试,如表5-1、5-2、5-3、5-4、5-5所示:
表5-1 用户登录功能测试表
用例名称 | 用户登录系统 |
目的 | 测试用户通过正确的用户名和密码可否登录功能 |
前提 | 未登录的情况下 |
测试流程 | 1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 | 用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 | 实际结果与预期结果一致 |
公告通知查看功能测试:
表5-2公告通知查看功能测试表
用例名称 | 公告通知查看 |
目的 | 测试公告通知查看功能 |
前提 | 用户登录 |
测试流程 | 点击公告通知列表 |
预期结果 | 可以查看到所有公告通知信息 |
实际结果 | 实际结果与预期结果一致 |
管理员添加货物信息界面测试:
表5-3 管理员添加货物信息界面测试表
用例名称 | 货物信息添加测试用例 |
目的 | 测试货物信息添加功能 |
前提 | 管理员正常登录情况下 |
测试流程 | 1)管理员点击货物信息添加,填写信息。 2)点击进行提交。 |
预期结果 | 提交以后,货物信息列表会显示新的货物信息 |
实际结果 | 实际结果与预期结果一致 |
货物信息搜索功能测试:
表5-4货物信息搜索功能测试表
用例名称 | 货物信息搜索测试 |
目的 | 测试货物信息搜索功能 |
前提 | 无 |
测试流程 | 1)在搜索框填入搜索关键字。 2)点击搜索按钮。 |
预期结果 | 页面显示包含有搜索关键字的货物信息 |
实际结果 | 实际结果与预期结果一致 |
密码修改功能测试:
表5-5 密码修改功能测试表
用例名称 | 密码修改测试用例 |
目的 | 测试管理员密码修改功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 | 使用新的密码可以登录 |
实际结果 | 实际结果与预期结果一致 |
5.3 系统测试结果
通过编写智能仓储管理系统的测试用例,已经检测完毕用户登录模块、公告通知查看模块、货物信息添加模块、货物信息搜索模块、密码修改功能测试,通过这5大模块为智能仓储管理系统的后期推广运营提供了强力的技术支撑。
智能仓储管理系统的开发与实践,是我结合Spring Boot后端框架与Vue前端框架进行的一次深入探索。这个项目不仅加深了我对现代Web开发技术的理解,也为我提供了将理论知识应用于实际项目的宝贵机会。
在开发过程中,我充分利用了Spring Boot的轻量级、快速开发特性以及Vue的响应式设计和组件化开发优势,为仓储管理打造了一套高效、稳定且用户友好的系统。该系统实现了注册登录、用户管理、货品类型管理、货品信息管理、货品入库管理、货品出库管理以及公告通知管理等功能,全面满足了仓储管理的日常需求。
通过该系统的应用,仓储业务得以更加高效、精确地进行。管理员和操作员用户可以轻松管理货品信息、跟踪库存状态,并实时处理入库和出库请求。系统的数据分析功能也为管理层提供了有力的决策支持,帮助他们更好地了解业务状况、优化资源配置。
回顾整个开发过程,我深刻体会到了技术选型的重要性以及持续学习的必要性。Spring Boot和Vue的完美结合使得系统具备了优秀的性能和用户体验,但同时也需要不断跟进技术更新,以应对日益增长的业务需求。
展望未来,我将继续关注仓储管理领域的最新动态和技术发展,不断优化和完善基于Spring Boot和Vue的智能仓储管理系统。例如,我将探索引入更先进的数据分析算法,提升系统的智能化水平;同时,我也会关注前端技术的创新,以提升系统的交互体验和响应速度。
此外,我也希望能够将这套系统的成功经验应用到其他相关领域,为更多行业提供高效、智能的管理解决方案。通过不断学习和实践,我相信自己能够在未来的职业道路上取得更加优异的成绩。
总之,基于Spring Boot和Vue的智能仓储管理系统的开发与实践是我技术生涯中的一次重要里程碑。它不仅锻炼了我的技术能力和解决问题的能力,也为我指明了未来学习和发展的方向。我将继续努力,不断前行,为仓储管理领域的创新发展贡献自己的力量。
参考文献
[1]司丙楠,张浩宇.物联网技术在智能仓储供应链管理系统中的应用及实现[J].电气化铁道,2024,35(02):97-101.DOI:10.19587/j.cnki.1007-936x.2024.02.021.
[2]Insani N ,Ridhoi R ,Hidajat G H , et al.Pro-Environmental Tourism: Lessons Learned from Adventure, Wellness and Eco-tourism in Padusan Village, Mojokerto, East Java[J].IOP Conference Series: Earth and Environmental Science,2024,1313(1):
[3]Annisa F L ,Umi L .Accuracy of Antenatal Visits in West Java Province: Comparison between Rural and Urban Areas Data Analysis of the Indonesian Demographic and Health Survey 2017[J].IOP Conference Series: Earth and Environmental Science,2024,1313(1):
[4]Utami W B ,Hariadi S S ,Raya B A .The Paradox of Farmers in Response Agricultural Land Conversion to National Strategic Development Policies in Central Java[J].IOP Conference Series: Earth and Environmental Science,2024,1313(1):
[5]Hanindityasari L ,Auliyani D ,Wahyuningrum N , et al.Reducing the Susceptibility of Flood Supplier Areas in Gondang Micro-Catchment, Bojonegoro, East Java Province: a Flood Disaster Mitigation Effort[J].IOP Conference Series: Earth and Environmental Science,2024,1313(1):
[6]胡德亮,李勇.铁路四电工程智能仓储系统探讨[J].铁路工程技术与经济,2023,38(06):14-19.
[7]王德真.双碳背景下基于物联网技术的制造业智能仓储管理系统设计[J].科技资讯,2023,21(16):249-252.DOI:10.16661/j.cnki.1672-3791.2305-5042-5739.
[8]钟晓英.基于物联网的智能仓储管理系统设计[J].信息记录材料,2023,24(08):86-88.DOI:10.16009/j.cnki.cn13-1295/tq.2023.08.064.
[9]张宁恩,侯振,万莹.智能仓储物流管理系统分析[J].信息系统工程,2023,(07):24-27.
[10]谢昊天,李靖雅,周宇,等.智能仓储管理系统在有色金属行业的应用研究[J].中国储运,2023,(07):65-66.DOI:10.16301/j.cnki.cn12-1204/f.2023.07.015.
[11]内蒙古移动基于物联网、AI机器人技术的智能仓储管理系统[C]//中国仓储与配送协会.2023年中国仓储配送行业发展报告.[出版者不详],2023:8.
[12]吴杰昊.基于计算机视觉的智能仓储管理系统设计与研究[D].山东交通学院,2023.DOI:10.27864/d.cnki.gsjtd.2023.000137.
[13]张泽治,宿杰.基于“5G+智慧物流装备”的智能仓储管理系统设计[J].青岛大学学报(自然科学版),2023,36(02):58-63.
[14]吴奕飞.基于深度学习的智能仓储管理系统研究[D].杭州电子科技大学,2023.DOI:10.27075/d.cnki.ghzdc.2023.000980.
[15]舒志峰,付祥.基于RFID的空勤智能仓储系统设计[J].现代计算机,2023,29(06):118-120.
[16]王磊.智能物资仓储管理系统解决方案[J].中国设备工程,2022,(S2):101-104.
[17]蒋明贵,刘智,彭聪,等.长江航道趸船智能仓储系统设计与应用研究[J].中国水运,2022,(S1):171-178.DOI:10.13646/j.cnki.42-1395/u.2022.s1.031.
[18]刘斌,陈刚,袁浩,等.基于UWB的危化品智能仓储管理系统研究[J].工业安全与环保,2022,48(10):32-36+41.
[19]董洛含,刘丽华,逄瑞佳,等.基于ZigBee与RFID的仓库货物智能管理系统设计[J].辽宁科技学院学报,2022,24(03):36-38.
[20]刘刚.A公司智能仓储系统设计与实现研究[D].北京交通大学,2022.DOI:10.26944/d.cnki.gbfju.2022.003330.
致谢
经过几个月时间的努力终于完成了这篇文章,在文章的写作与研究的过程中遇到了很多困难,都在同学和老师的帮助下解决了。尤其非常感谢我最敬爱的老师,他对我进行了无私的指导和帮助,不厌其烦的帮助进行文章的修改。老师严谨的治学态度、渊博的学术知识、诲人不倦的敬业精神以及宽容的待人风范使我获益颇丰。此外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助。在此,向帮助和指导过我的老师表示最衷心的感谢!感谢这篇文章所涉及到的各位学者。本文引用了数位学者的文献,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇文章的写作。感谢我的同学和朋友,在我写文章的过程中给与了我很多素材和帮助,还在文章的撰写和排版过程中提供热情的帮助。同时,感谢我的室友对我的热心指导和帮助,经常有不懂之处都是大家在帮助我,才使得我比较顺利的完成了这篇文章。由于我水平有限,所写文章难免有不足之处,恳请各位老师和学友批评和指正!
请关注点赞+私信博主,免费领取项目源码