(免费领源码)基于Java和mysql的无人公益书店信息系统的设计与实现04272-计算机毕设JAVA、PHP、python、爬虫、APP、小程序、C# 、C++、数据可视化、大数据、全套文案
摘 要
随着社会的发展,无人公益书店作为一个公益性质的机构逐渐兴起。在互联网高速发展的当下,需要设计和实现一个无人公益书店信息系统来更好地服务读者和管理图书。
无人公益书店信息系统的开发运用Java开发余元,采用前后端分离技术架构,兼容PC和移动设备,后端基于SpringBoot构建高效稳定的API接口,配合MySQL等关系型数据库存储结构化数据,辅以MongoDB等NoSQL数据库处理非结构化数据。此外,系统设计充分考虑了高可用性、扩展性和容灾备份策略,确保系统长期稳定运行,全方位提升无人公益书店管理效率和服务质量。
该系统可以提供便捷、高效的图书管理和借阅服务,方便读者借阅图书并进行归还。同时,提供公益活动搜索、浏览和报名服务,可以增加读者参与公益活动的积极性,提高社区的文化氛围。此外,系统管理员可以通过系统便捷地管理图书信息和公益活动信息,保证系统正常运转的同时使整个系统运作效率更高。因此,设计和实现这样一个功能齐全基于Java和mysql的无人公益书店信息系统具有重要的实际应用价值和研究意义。
关键词:Java;MySQL;无人公益书店信息系统;SpringBoot
Abstract
With the development of society, unmanned public welfare bookstores have gradually emerged as a non-profit organization. With the rapid development of the Internet, it is necessary to design and implement an unmanned public welfare bookstore information system to better serve readers and manage books.
The development of the unmanned public welfare bookstore information system utilizes Java development resources, adopts a front-end and back-end separation technology architecture, compatible with PC and mobile devices, and builds an efficient and stable API interface based on SpringBoot on the backend. It is used in conjunction with relational databases such as MySQL to store structured data, and supplemented by NoSQL databases such as MongoDB to process unstructured data. In addition, the system design fully considers high availability, scalability, and disaster recovery backup strategies to ensure long-term stable operation of the system and comprehensively improve the management efficiency and service quality of unmanned public welfare bookstores.
This system can provide convenient and efficient book management and borrowing services, making it convenient for readers to borrow books and return them. At the same time, providing search, browsing, and registration services for public welfare activities can increase the enthusiasm of readers to participate in public welfare activities and improve the cultural atmosphere of the community. In addition, system administrators can conveniently manage book information and public welfare activity information through the system, ensuring the normal operation of the system while improving the overall efficiency of the system operation. Therefore, designing and implementing a fully functional unmanned public welfare bookstore information system based on Java and MySQL has important practical application value and research significance.
Keywords: Java; MySQL; Unmanned public welfare bookstore information system; SpringBoot
目 录
1 绪论
1.1 选题背景
近年来,无人公益书店在一些城市兴起,并逐渐成为社区文化活动的重要组成部分。这种新型公益模式不仅提供了便捷的图书借阅服务,还通过举办各种文化活动、讲座和展览等,为社区居民提供了更多的学习和交流机会。然而,目前一些无人公益书店的管理仍然存在一些问题。因此,为了更好地服务读者和管理图书,设计和实现一个基于Java和MySQL的无人公益书店信息系统,在有效解决无人公益书店存在问题的同时,提升无人公益书店的管理和服务水平,进一步推动无人公益书店文化。
无人公益书店信息系统的开发运用Java开发语言,采用前后端分离技术架构,兼容PC和移动设备,后端基于SpringBoot构建高效稳定的API接口,配合MySQL等关系型数据库存储结构化数据,辅以MongoDB等NoSQL数据库处理非结构化数据。此外,系统设计充分考虑了高可用性、扩展性和容灾备份策略,确保系统长期稳定运行,全方位提升无人公益书店管理效率和服务质量。
无人公益书店信息系统的发展已经取得了一定的进展,目前已经有一些实际运营的案例。下面是该系统发展及现状的几个方面:
技术支持:无人公益书店信息系统主要依赖于互联网和信息技术实现,并且在互联网行业得到了广泛应用,具备稳定性和高效性。
硬件设备:无人公益书店信息系统需要配备一些硬件设备,如自助借还书机、摄像头、安全门、电子支付终端等。这些设备能够实现图书的自动检索、归还和支付功能。
管理与服务:信息系统可以帮助书店实现自动化的图书管理,包括图书目录管理、借还书管理、库存管理等。同时,还可以提供一些增值服务,如个性化推荐、图书社区讨论等。
数据分析与智能决策:信息系统可以实时收集和分析读者的借阅记录、行为习惯等数据,通过数据挖掘和机器学习算法,为书店提供智能决策支持,如采购策略、优惠策略等。
目前,国内外已经有一些无人公益书店项目在实际运营中应用了信息系统,取得了一定的成功。不同项目的具体实现方式和功能可能有所不同,但都是基于类似的技术和原理,旨在提高书店的自动化管理水平和服务质量。随着技术的不断发展和应用场景的丰富,无人公益书店信息系统有望在更多地方推广和应用。
基于Java和mysql的无人公益书店信息系统的设计与实现,可以提供便捷、高效、友好的图书管理和借阅服务,方便读者借阅图书并进行归还。同时,该系统提供公益活动搜索、浏览和报名服务,可以增加读者参与公益活动的积极性,提高社区的文化氛围。并且系统管理员可以通过系统便捷地管理图书信息和公益活动信息,保证系统正常运转的同时使整个系统运作效率更高。通过该系统还可以提升无人公益书店的管理水平和服务品质,通过数据分析和智能决策,优化图书管理、活动组织等资源,为社会提供更好的服务;有助于吸引更多群总参与公益活动,推动公益事业的发展,增进用户之间文化交流和共享。此外,通过搭建无人公益书店信息系统,可以深入研究Java编程语言和MySQL数据库的应用和优化,为其他类似项目提供技术参考和借鉴。因此,设计和实现这样一个功能齐全基于Java和mysql的无人公益书店信息系统具有重要的实际应用价值和研究意义。
无人公益书店是一种新型的书店模式,通常采用自助服务的形式,读者可以在无人书店中自由选择图书,阅读并借阅,完成归还等操作。智能无人书店的出现满足了人们数字阅读和个性化消费需求。各大商业中心也在共享经济模式下积极加盟优质的无人书店,打造多方互利共赢的生态商业圈,创造新的市场空间。
无人书店相比传统书店,确实有着促进图书的共享和循环利用、节省消费者时间、节省经营成本、线上线下联合、营业时间不受限制等优势。作为一种新兴商业模式;无人书店在人工智能应用方面岚处于探索阶段,作为实体书店的延使,面临着经赏与生在等务方面的压力,但无人书店要想在激烈的市场竞争中发展壮大,必然要走智慧化经营道路,在这个阶段中打造智能公共阅读空间成为近年来研究的热点。
无人公益书店现阶段并没有管理系统,现将无人公益书店主要业务介绍如下:
数据分析:可查看图书信息、图书借阅、活动报名等统计信息数据分析图表
用户管理:管理对用户和管理员等系统用户进行管控。
图书分类:管理员对图书进行分类,方便用户检索。
图书信息:管理员可发布图书信息,用户可进行查看详情,点赞、收藏、评论图书信息,并可以借阅图书。
图书借阅:管理员可查看和管理所有图书借阅信息,用户可管理自己的借阅信息,并进行归还图书。
图书归还:管理员可查看和管理所有图书归还信息,用户可管理自己的归还信息。
活动分类:管理员对活动进行分类,方便用户检索。
公益活动:管理员可发布公益活动信息,用户可进行查看详情,点赞、收藏、评论公益活动信息,并可以报名参加公益活动。
活动报名:管理员可查看和管理所有活动报名信息,用户可管理自己的报名信息。
系统管理:可对首页的轮播图进行管理,进行增删改查操作,支持标题搜索,可点击查看详情。
公告管理:管理员对公告进行管理和发布,方便用户及时获知系统信息。
资源管理:管理员可发布图书资讯,对资讯进行分类,方便用户及时了解近期图书市场信息。
交流管理:管理员可管理书友圈子,对圈子进行分类,用户可在书友圈子发布帖子,进行交流交互。
权限管理:管理可对用户组的权限进行管理,修改用户组对系统各项信息添加、修改、删除、查阅的权限。
目前一些无人公益书店的管理仍然存在一些问题,这些问题可能会限制其发展和运营例如图书管理不够高效、活动信息发布不及时、借阅归还流程不够便捷等。具体如下:
技术问题:无人公益书店信息系统的稳定性和可靠性是一个关键问题。系统中可能出现故障、网络连接中断等技术问题,影响读者的正常使用体验。
安全问题:由于无人公益书店的自助性质,容易引发一些安全问题。例如,读者可能存在盗窃图书的行为,或者利用系统漏洞进行非法操作。此外,个人隐私保护也是一个重要的安全问题。
维护问题:无人公益书店需要定期维护和保养,包括设备维修、软件更新、书籍整理等。如果维护不及时或不到位,可能会影响书店的正常运营。
阅读环境问题:无人公益书店通常没有专门的工作人员,缺少监督管理,可能导致图书乱放、损坏等问题。此外,如果书店环境不舒适,可能会影响读者的阅读体验。
图书选择问题:有些无人公益书店的图书信息存在一定的局限性,不能满足所有读者的需求。并且借阅和归还流程繁琐,战略采购和更新图书的能力也是一个问题,如果无法及时提供新书和热门书籍,可能会导致读者流失。
这些问题需要通过技术改进、管理优化和读者教育等手段进行解决。同时,政府、社会组织和企业可以加大对无人公益书店的支持力度,提供相关培训和指导,推动无人公益书店的良性发展。
本研究基于Java开发语言和MySQL数据库,采用前后端分离技术架构,兼容PC和移动设备,利用SpringBoot快速部署和实施无人公益书店信息系统,具体开发环境及技术工具如下:
操作系统:Windows
开发工具:IDE(集成开发环境)Eclipse、Navicat
后端开发技术:
SpringBoot框架:用于快速构建后端应用程序,提供了自动配置和约定优于配置的特性。
Java编程语言:作为后端主要编程语言,用于实现业务逻辑和数据处理。
MySQL数据库:用于存储和管理平台的数据。
前端开发技术:
Vue.js框架:用于构建响应式的用户界面,提供了组件化开发和数据驱动的特性。
SpringBootBoot是一个Java平台上的基于Spring的快速开发框架,它提供了自动配置和约定优于配置的特性,简化了后端应用程序的开发过程,减少了样板代码的编写。提供具有控制反转特性的容器。尽管SpringBoot框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。SpringBoot框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。SpringBoot框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。SpringBoot框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。SpringBoot框架具有面向切面编程(AOP)框架,SpringBootAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。SpringBoot框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。
MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),其稳定性、可靠性和卓越性能使其成为众多应用程序的首选数据库。MySQL支持标准SQL语法,并提供丰富的功能和特性,如事务处理、触发器和存储过程等,以满足开发者对数据管理和操作的需求。MySQL经过多次的更新,功能层面已经非常的丰富和完善了,从MySQL4版本到5版本进行了比较大的更新,在商业的实际使用中取得了很好的实际应用效果。最新版本的MySQL支持对信息的压缩,同时还能进行加密能更好的满足对信息安全性的需求。同时经过系统的多次更新,数据库自身的镜像功能也得到了很大的增强,运行的流畅度和易用性方面有了不小的进步,驱动的使用和创建也更加的高效快捷。最大的变动还是进行了空间信息的显示优化,能更加方便的在应用地图上进行坐标的标注和运算。强大的备份功能也保证了用户使用的过程会更加安心,同时支持的Office特性还支持用户的自行安装和使用。在信息的显示形式上也进行了不小的更新,增加了两个非常使用的显示区,一个是信息区,对表格和文字进行了分类处理,界面的显示更加清爽和具体。第二是仪表的信息控件,能在仪表信息区进行信息的显示,同时还能进行多个信息的比对,为用户的实际使用带来了很大的便捷。
Java编程语言是一种面向对象的高级编程语言,以其简单、可移植、安全和高性能等特点在软件开发领域广泛应用。通过支持类、对象、继承、多态等面向对象概念,Java提供了结构化的编程方式,使代码更易读、维护和重用。其可移植性得益于Java虚拟机(JVM),使得Java程序可以在不同平台上运行,只需编写一次代码。Java注重安全性,提供了字节码验证、异常处理和访问控制等安全机制,确保程序的稳定和安全。此外,Java还拥有丰富的类库和框架,覆盖了各个领域,如图形界面、数据库操作和企业级应用。总而言之,Java作为一门成熟且强大的编程语言,在软件开发中发挥着重要作用,帮助开发者轻松构建可靠、可移植和安全的应用程序。
2 无人公益书店信息系统分析
通过对无人公益书店存在问题的分析,无人公益书店有必要设计开发一个网络管理信息系统。
此系统完全针对无人公益书店表现出来的管理特征,用信息技术理念和网站设计技术,利用Java语言和MySQL数据库实现无人公益书店信息管理系统。系统主要解决传统无人公益书店经营管理模式下的不足。系统包括前台用户功能部分和后台管理功能部分,前台实现贵宾用户注册、登录,首页、书友圈子、公告、图书资讯、图书信息、公益活动、我的账户、个人中心(个人首页、图书借阅、图书归还、活动报名、收藏)等功能,其中图书借阅和活动报名功能是针对无人公益书店的情况特意设计的,由于安全技术的限制,在不实现现金交易的情况下实现图书借阅和活动报名操作。后台主要实现动态信息发布,数据采集分析,构建和运行系统用户、图书分类管理、图书信息管理、图书借阅管理、图书归还管理、活动分类管理、公益活动管理、活动报名管理、系统管理、公告管理、资源管理、交流管理、权限信息管理等功能模块,方便管理员及时更新系统信息,维护系统正常运转。通过系统功能及网络环境解决传统管理模式和经营理念带来的不足,提升无人公益书店的管理效率和服务品质,进而树立无人公益书店品牌形象,扩大无人公益书店影响率,促使无人公益书店文化发展,有利于人们阅览图书和参加公益活动的积极度。
2.2 无人公益书店信息系统可行性分析
2.2.1 技术可行性分析
所谓的技术可行性就是在限定时间,前期拟定的功能能否被满足。在开发设计上是否会遇上解决不了的问题。做完的项目能否被很好地应用,如果存在缺点在后期的维护上是否存在很大的难度。在对这个系统评估后,认定已存在的技术能达成目标。系统用Java技术来实现动态的页面,嵌入低依赖性的设计模式,具有广泛的库和工具生态系统,可以满足项目的需求。springboot作为一个成熟的开发框架,常作为数据源较简单的web项目的框架,拥有丰富的功能和广泛的社会支持。它提供了快速开发和部署应用程序的能力,适合构建无人公益书店信息系统所需的功能和性能要求。此外,配合MySQL等关系型数据库存储结构化数据,辅以MongoDB等NoSQL数据库处理非结构化数据,整个系统的运行效率大大提升。因此,在技术层面上,该项目是可行的。
在项目上使用的工具大部分都是当下流行开源免费的,并且springboot框架的自动配置功能可以根据应用程序的依赖和环境来进行自动配置,减少了大量的手动配置工作,能够降低成本,所以在开发前期,开发时用于项目的经费将会大大降低,不会让开发该软件在项目启动期受到经费的影响。另外,Spring Boot的代码质量和可维护性较高,可以降低后期维护成本,缩短开发周期。此外,springboot框架具备良好的性能和稳定性,可以降低系统的运行成本和维护成本。因此,在经济层面上,该项目是可行的。
2.2.3 运行可行性分析
本系统采用前后端分离技术架构,兼容PC和移动设备,是在服务器的基础上开发的,系统开发成功以后,用户无需导航指导便可自己上手进行操作。系统一经开发测试、开发完成后,在计算机移动客户端能上网的情况下,只需在浏览器里完成所有可用操作,也无需配置复杂的使用和运行环境,只需一个网址便可进入系统。因此,在运行层面上,该项目是可行的。
2.3 无人公益书店信息系统的业务流程分析
系统流程是用一些特定的符合和线条来进行演示用户在使用系统时的过程,在进行系统分析的时候,业务流程可以帮助开发人员更好的理解业务,发现错误,完善系统。
经过对系统功能的分析,调查,研究,总结出本系统主要实现的是对书友圈子、公告、图书资讯、图书信息、图书借阅、图书归还、公益活动、活动报名等管理功能。这样,可以对该系统绘制业务流程图。
如下为业务流程图图例。
图3-1业务流程图图例
系统的总体业务流程如下图所示。
图3-2系统总体业务流程图
无人公益书店信息系统一个主要的目的就是实现图书借阅和归还的操作,下图就是图书借阅归还业务流程图:
图3-3图书借阅归还业务流程图
无人公益书店信息系统还可以进行搜索浏览公益活动,并实现在线报名,下图就是活动报名业务流程图:
图3-4活动报名业务流程图
根据上文所述的业务流程特点,首先对各个方面总的数据处理环节和外部实体进行了描述, 根据自顶向下原则,逐层分解功能,这个过程产生DFD图。
以下是本文当中使用的数据流图图例,见下图所示。
图3-5系统数据流图图例(顶层)
顶层数据流程是流程中最抽象的一层,它包括了注册与登录管理、用户功能管理和检索维护管理等功能模块,在登录注册模块使用到的数据存储有用户账户信息文档、用户信息文档,用户功能管理模块需要的存储是用户动态信息文档、评论信息文档、图片信息文档,检索维护是通过以上这些文档信息通过关键词进行搜索。
系统的顶层数据流图如下图所示。
图3-6系统数据流图(顶层)
一层数据流程图是对顶层数据流程图的细化,将登录与注册细分为填制登录注册信息和完善信息,用户功能管理细分为用户基本功能管理和用户特色功能管理。
系统的1层数据流图如下图所示。
图3-7系统数据流图(1层)
二层数据流程是对一层数据流层图中用户填写登录注册信息、用户基本功能和用户特色功能的细化。即:填写登录注册信息细化为填制信息、后台审核,用户基本功能细化为书友圈子、公告、图书资讯、图书信息、公益活动、我的账户、个人中心操作,用户特色功能细化为图书借阅、图书归还、活动报名操作。
系统的2层数据流图如下图所示。
图3-8系统数据流图(2层)
本章主要讨论的内容包括无人公益书店信息系统的功能模块设计、数据库系统设计。
平台设计一般分为硬件配置和软件配置。
无人公益书店信息系统的设计对于所使用的计算机没有什么硬性的要求,计算机只要可以正常的使用进行代码的编写及页面设计就可行,主要是对于服务器有些要求,对于平台搭建完成要上传的服务器是有一定的要求的,服务器必须选择安全性比较高的,满足中小型网站的运行,然后就是在打开系统必须顺畅,不能停顿太长时间;且性价比高;安全性高。同时,Windows平台是目前全球最主流的移动操作系统之一,具有广泛的用户群体和成熟的开发工具和资源。
在软件环境方面,要针对系统开发使用的语言、工具、Web 服务器种类对无人公益书店信息系统软件进行配置。开发整个系统使用的是云计算,流量的可扩展性和基于流量的智能调整云计算的优点就是流量的可扩展性和基于流量的智能调整,保障系统的安全及数据信息的及时备份。简而言之,无人公益书店信息系统的建议配置如下表:
表3-1系统的平台设计的建议配置
| 硬件 配置 | 处理器 | 2.8GHz 的 CPU,拥有 800MHz 前端总线和 2MB 二级缓存 |
| 内存 | 1. 拥有 4 个 DIMM 槽,支持具备 ECC 功能的 DDR 2 内存 2. 支持双路交叉存取技术,标配 512 MB DDR2 ECC 内存,可扩展至 8GB | |
| 硬盘 | 采用 SCSI 采用高速、稳定、安全的 SCSI 接口硬盘 | |
| 内置电源 | ATX 或是 SSI 作为电源机箱电源,最好带有冗余电源 | |
| 外置电源 | 后备时间达 7 分钟,允许 130%过载、切换时间小于 10ms 的后备式不间 断电源 (UPS) | |
| 软件 配置 | 操作系统 | Windows10 |
| 数据库 | MySQL数据库 | |
| Web 服务器 | Tomcat 6.0.18 |
3.2 系统的总体结构设计
3.2.1功能结构图设计
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本无人公益书店信息系统中的用例。那么接下来就要开始对本无人公益书店信息系统的架构、主要功能和数据库开始进行设计。无人公益书店信息系统根据前面章节的需求分析得出,其总体设计模块图如下图所示。
图3-1 无人公益书店信息系统功能模块图
表3-2 书友圈子模块说明
| 模块名称 | 书友圈子 |
| 主要功能 | 用户可以查看书友圈子详情 |
| 参与者 | 用户 |
| 前置条件 | 用户成功登录 |
| 后置条件 | 操作成功 |
| 主事件流 | (1)用户进入前台书友圈子页面,查询和查看书友圈子的信息 (2)用户可以对书友圈子进行点赞、收藏、评论书友圈子操作 (3)用户可以对书友圈子进行发布操作,填写书友圈子帖子信息并提交成功跳转到查询页面 |
| 异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-3 公告模块说明
| 模块名称 | 公告 |
| 主要功能 | 用户可以查看公告的详情 |
| 参与者 | 用户 |
| 前置条件 | 使用者是读者用户类型并成功进入该系统 |
| 后置条件 | 浏览成功 |
| 主事件流 | (1)用户可以浏览公告的模块、公告的内容 (2)用户点击公告可以对公告进行详情阅读 |
| 异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-4 图书资讯模块说明
| 模块名称 | 图书资讯 |
| 主要功能 | 用户可以查看图书资讯详情 |
| 参与者 | 用户 |
| 前置条件 | 用户成功登录 |
| 后置条件 | 操作成功 |
| 主事件流 | (1)用户进入前台图书资讯页面,查询和查看图书资讯的信息 (2)用户可以对图书资讯进行点赞、收藏、评论图书资讯操作 |
| 异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-5 图书信息模块说明
| 模块名称 | 图书信息 |
| 主要功能 | 用户可以查看图书信息详情 |
| 参与者 | 用户 |
| 前置条件 | 用户成功登录 |
| 后置条件 | 操作成功 |
| 主事件流 | (1)用户进入前台图书信息页面,查询和查看图书信息的信息 (2)用户可以对图书信息进行点赞、收藏、评论图书信息操作 (3)用户可以对图书信息进行借阅操作,填写借阅信息并提交成功跳转到查询页面 |
| 异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-6 公益活动模块说明
| 模块名称 | 公益活动 |
| 主要功能 | 用户可以查看公益活动信息详情 |
| 参与者 | 用户 |
| 前置条件 | 用户成功登录 |
| 后置条件 | 操作成功 |
| 主事件流 | (1)用户进入前台公益活动页面,查询和查看公益活动的信息 (2)用户可以对公益活动进行点赞、收藏、评论公益活动操作 (3)用户可以公益活动进行报名操作,填写报名信息并提交成功跳转到查询页面 |
| 异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-7 个人资料模块说明
| 模块名称 | 我的账户个人资料 |
| 参与者 | 用户 |
| 主要功能 | 用户查看、修改个人资料 |
| 参与者 | 用户 |
| 前置条件 | 用户已登录到系统中 |
| 后置条件 | 无 |
| 事件流 | (1)用户查看个人资料 (2)用户修改个人资料 |
| 补充说明 | (a)用户可修改密码 (b)用户可修改资料,例如姓名,头像等 |
表3-8 收藏模块说明
| 模块名称 | 个人中心收藏 |
| 参与者 | 用户 |
| 描述 | 用户将内容加入收藏夹 |
| 前置条件 | 用户已登录 |
| 后置条件 | 无 |
| 事件流 | (1)收藏页加入收藏,可以在个人中心查看收藏页 (2)更新并显示收藏夹 |
| 补充说明 | 无 |
表3-9 系统用户模块说明
| 模块名称 | 系统用户 |
| 主要功能 | 管理员正确登录后台管理的条件下,在系统用户界面可对用户进行管理 |
| 参与者 | 管理员 |
| 前置条件 | 管理员登录成功并跳转到后台主界面 |
| 后置条件 | 操作成功 |
| 主事件流 | 管理员跳转用户管理页面,查询用户详情的信息 管理员可以删除用户信息 |
| 异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-10 图书信息管理模块说明
| 模块名称 | 图书信息管理 |
| 主要功能 | 管理员正确登录后台管理的条件下,对图书信息模块进行管理 |
| 参与者 | 管理员 |
| 前置条件 | 管理员成功登录 |
| 后置条件 | 操作成功 |
| 主事件流 | (1)管理员进入图书信息管理页面,查询图书信息的信息 (2)管理员可以对图书信息进行增改删查图书信息操作 (3)管理员新增图书信息,添加成功跳转到查询页面 |
| 异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-10 图书借阅管理模块说明
表3-12 图书归还管理模块说明
| 模块名称 | 图书归还管理 |
| 主要功能 | 管理员正确登录后台管理的条件下,图书归还模块进行管理 |
| 参与者 | 管理员 |
| 前置条件 | 管理员成功登录 |
| 后置条件 | 操作成功 |
| 主事件流 | (1)管理员进入图书归还管理页面,查询图书归还内容的信息 (2)管理员可以对图书归还进行删除操作 |
| 异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-13 公益活动管理模块说明
| 模块名称 | 公益活动管理 |
| 主要功能 | 管理员正确登录后台管理的条件下,对公益活动模块进行管理 |
| 参与者 | 管理员 |
| 前置条件 | 管理员成功登录 |
| 后置条件 | 操作成功 |
| 主事件流 | (1)管理员进入公益活动管理页面,查询公益活动的信息 (2)管理员可以对公益活动进行增改删查公益活动操作 (3)管理员新增公益活动,添加成功跳转到查询页面 |
| 异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-14 活动报名管理模块说明
| 模块名称 | 活动报名管理 |
| 模块说明 | 管理员正确登录后台管理的条件下,活动报名模块进行管理 |
| 参与者 | 管理员 |
| 前置条件 | 管理员成功登录 |
| 后置条件 | 操作成功 |
| 主事件流 | (1)管理员进入活动报名管理页面,查询和审核活动报名内容的信息 (2)管理员可以对活动报名进行删除操作 |
| 异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-15 系统管理模块说明
| 模块名称 | 系统管理 |
| 参与者 | 管理者 |
| 描述 | 管理者提供新增、修改、删除、查阅等功能 |
| 前置条件 |
|
| 后置条件 | 无 |
| 事件流 | (1)管理者查看修改系统前台首页轮播图 (2)管理者添加系统前台首页轮播图 (3)管理者删除系统前台首页轮播图 |
| 补充说明 | (a)新添加的系统不符合要求时会添加失败 (b)修改的系统不符合要求时会修改失败 |
表3-16 公告管理模块说明
| 模块名称 | 公告管理 |
| 参与者 | 管理者 |
| 描述 | 管理者提供新增、修改、删除、查阅等功能 |
| 前置条件 |
|
| 后置条件 | 无 |
| 事件流 | (1)管理者查看修改公告 (2)管理者添加公告 (3)管理者删除公告 |
| 补充说明 | (a)新添加的公告不符合要求时会添加失败 (b)修改的公告不符合要求时会修改失败 |
表3-17资源管理模块说明
| 模块名称 | 资源管理 |
| 参与者 | 管理者 |
| 描述 | 管理者提供新增、修改、删除、查阅等功能 |
| 前置条件 |
|
| 后置条件 | 无 |
| 事件流 | (1)管理者查看修改图书资讯和资讯分类 (2)管理者添加图书资讯和资讯分类 (3)管理者删除图书资讯和资讯分类 |
| 补充说明 | (a)新添加的资源不符合要求时会添加失败 (b)修改的资源不符合要求时会修改失败 |
表3-18 交流管理模块说明
| 模块名称 | 交流管理 |
| 参与者 | 管理者 |
| 描述 | 管理者提供新增、修改、删除、查阅等功能 |
| 前置条件 |
|
| 后置条件 | 无 |
| 事件流 | (1)管理者查看修改书友圈子和圈子分类 (2)管理者添加书友圈子和圈子分类 (3)管理者删除书友圈子和圈子分类 |
| 补充说明 | (a)新添加的交流不符合要求时会添加失败 (b)修改的交流不符合要求时会修改失败 |
表3-19 权限管理模块说明
| 模块名称 | 权限管理 |
| 参与者 | 管理者 |
| 描述 | 管理者提供查询、修改、查阅等功能 |
| 前置条件 |
|
| 后置条件 | 无 |
| 事件流 | (1)管理者查看和修改用户组的权限 |
| 补充说明 | (a)新添加的权限不符合要求时会添加失败 (b)修改的权限不符合要求时会修改失败 |
3.3 数据库设计
3.3.1 E-R图
层次框图是一系列由多层矩形框架组成的树,其顶部为矩形框架,表示整个数据结构,下方的长方形立方体表示独立的数据,下方的长方形表示该数据的实际数据(不能进行分割)。由于这个架构的精炼,层级方块图描述的资料结构也愈加详尽,这个模型很好地满足了需求分析的要求。首先对最上层的信息进行分类,然后在图表中的每个路径上重复地进行优化,直至完整的数据结构被确定。
这个系统由两大模块组成,一是管理员,二是读者用户,这两个部分看起来是独立的,实际上却是连接着数据库,每个模块都有自己的权限,唯一不同的,就是访问的方式不同。在调研资料的基础上,完成了各个模块的功能。在对上述功能进行分析的基础上,本系统提出了两大主要的模块,每个单元可划分为若干小单元。
下面是整个无人公益书店信息系统中主要的模块总E-R实体关系图。
图4-2 无人公益书店信息系统总E-R关系图
3.3.2 数据表设计
通过上一小节中无人公益书店信息系统中总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 | 用户编号: |
表activity_classification (活动分类)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | activity_classification_id | int | 10 | 0 | N | Y | 活动分类ID | |
| 2 | activity_type | 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 | 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 | 文章描述 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 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 | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 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 | book_borrowing_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_author | varchar | 64 | 0 | Y | N | 图书作者 | |
| 6 | reader_users | int | 10 | 0 | Y | N | 0 | 读者用户 |
| 7 | readers_name | varchar | 64 | 0 | Y | N | 读者姓名 | |
| 8 | borrowed_quantity | varchar | 64 | 0 | Y | N | 借阅数量 | |
| 9 | borrowing_date | date | 10 | 0 | Y | N | 借阅日期 | |
| 10 | borrowing_days | varchar | 64 | 0 | Y | N | 借阅天数 | |
| 11 | borrowing_instructions | text | 65535 | 0 | Y | N | 借阅说明 | |
| 12 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
| 13 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
| 14 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | book_classification_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 | book_information_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_author | varchar | 64 | 0 | Y | N | 图书作者 | |
| 6 | book_cover | varchar | 255 | 0 | Y | N | 图书封面 | |
| 7 | book_inventory | int | 10 | 0 | Y | N | 0 | 图书库存 |
| 8 | publication_time | date | 10 | 0 | Y | N | 出版时间 | |
| 9 | press | varchar | 64 | 0 | Y | N | 出版社 | |
| 10 | storage_location | varchar | 64 | 0 | Y | N | 存放位置 | |
| 11 | book_introduction | text | 65535 | 0 | Y | N | 图书简介 | |
| 12 | partial_chapters | text | 65535 | 0 | Y | N | 部分章节 | |
| 13 | book_details | longtext | 2147483647 | 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 | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | book_return_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_author | varchar | 64 | 0 | Y | N | 图书作者 | |
| 6 | reader_users | int | 10 | 0 | Y | N | 0 | 读者用户 |
| 7 | readers_name | varchar | 64 | 0 | Y | N | 读者姓名 | |
| 8 | borrowed_quantity | varchar | 64 | 0 | Y | N | 借阅数量 | |
| 9 | borrowing_date | date | 10 | 0 | Y | N | 借阅日期 | |
| 10 | borrowing_days | varchar | 64 | 0 | Y | N | 借阅天数 | |
| 11 | return_date | date | 10 | 0 | Y | N | 归还日期 | |
| 12 | return_quantity | varchar | 64 | 0 | Y | N | 归还数量 | |
| 13 | return_instructions | text | 65535 | 0 | Y | N | 归还说明 | |
| 14 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 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 | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 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: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | event_registration_id | int | 10 | 0 | N | Y | 活动报名ID | |
| 2 | activity_number | varchar | 64 | 0 | Y | N | 活动编号 | |
| 3 | activity_name | varchar | 64 | 0 | Y | N | 活动名称 | |
| 4 | activity_type | varchar | 64 | 0 | Y | N | 活动类型 | |
| 5 | event_location | varchar | 64 | 0 | Y | N | 活动地点 | |
| 6 | start_time | datetime | 19 | 0 | Y | N | 开始时间 | |
| 7 | end_time | datetime | 19 | 0 | Y | N | 结束时间 | |
| 8 | reader_users | int | 10 | 0 | Y | N | 0 | 读者用户 |
| 9 | readers_name | varchar | 64 | 0 | Y | N | 读者姓名 | |
| 10 | registration_date | date | 10 | 0 | Y | N | 报名日期 | |
| 11 | number_of_applicants | varchar | 64 | 0 | Y | N | 报名人数 | |
| 12 | reason_for_registration | text | 65535 | 0 | Y | N | 报名原因 | |
| 13 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
| 14 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
| 15 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 16 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 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 | 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 | 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 | 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 | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 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已取消 |
表public_welfare_activities (公益活动)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | public_welfare_activities_id | int | 10 | 0 | N | Y | 公益活动ID | |
| 2 | activity_number | varchar | 64 | 0 | Y | N | 活动编号 | |
| 3 | activity_name | varchar | 64 | 0 | Y | N | 活动名称 | |
| 4 | activity_type | varchar | 64 | 0 | Y | N | 活动类型 | |
| 5 | event_location | varchar | 64 | 0 | Y | N | 活动地点 | |
| 6 | activity_photos | varchar | 255 | 0 | Y | N | 活动照片 | |
| 7 | start_time | datetime | 19 | 0 | Y | N | 开始时间 | |
| 8 | end_time | datetime | 19 | 0 | Y | N | 结束时间 | |
| 9 | activity_status | varchar | 64 | 0 | Y | N | 活动状态 | |
| 10 | activity_content | text | 65535 | 0 | Y | N | 活动内容 | |
| 11 | activity_introduction | text | 65535 | 0 | Y | N | 活动介绍 | |
| 12 | event_details | longtext | 2147483647 | 0 | Y | N | 活动详情 | |
| 13 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
| 14 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 15 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 16 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | reader_users_id | int | 10 | 0 | N | Y | 读者用户ID | |
| 2 | readers_name | varchar | 64 | 0 | Y | N | 读者姓名 | |
| 3 | reader_gender | varchar | 64 | 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 | 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 | 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 无人公益书店信息系统详细设计与实现
无人公益书店信息系统的详细设计与实现主要是根据前面的无人公益书店信息系统的需求分析和无人公益书店信息系统的总体设计来设计页面并实现业务逻辑。主要从无人公益书店信息系统界面实现、业务逻辑实现这两部分进行介绍。
用户右上角“注册”按钮进入注册页面填写账号、密码、确认密码、昵称、邮箱、身份等信息后点击“注册”按钮,系统会对输入的信息进行验证,验证通过后即可完成注册,其界面展示如下图4-2所示。
图4-1 用户注册界面图
无人公益书店信息系统的登录界面设计简洁明了;用户可以在登录界面上输入自己的账号,并填写与账号对应的密码。通过点击“登录”按钮,用户可以完成登录操作。如果用户忘记密码,登录界面提供了相应的“忘记密码”链接,方便找回或重置密码。同时,登录界面也可能包含一个注册链接,以便新用户可以直接跳转到注册界面进行账号注册。通过这样的设计,无人公益书店信息系统的登录界面旨在提供用户友好、便捷的登录体验,确保用户能够安全、快速地进入系统,用户登录界面如下图所示。
图4-2登录界面图
4.2 读者用户界面设计
4.2.1 前台首页界面
在书海购管理系统的前台首页界面上采用了上+中+下的方式来布局界面,最右上角是登录+注册+搜索这三个链接,下面依次是导航栏+轮播图以及下面的公告栏,下面依次是推荐的图书资讯展示。界面如下图所示。
图4-3 前台首页界面图
可查看所有书友圈子消息,支持局部搜索,点击可查看详情,可进行发布内容(封面图、标题、分类、标签、正文)操作,并进行点赞、收藏和评论。界面如下图所示。
图4-4 书友圈子界面图
4.2.3 图书信息界面
可查看发布的所有图书信息,支持关键字(图书类型、图书作者)搜索和下拉(图书类型、排序)搜索,点击可查看详情,进行点赞、收藏和评论,并可点击借阅操作。界面如下图所示。
图4-5 图书信息详情界面图
可查看发布的所有公益活动信息,支持关键字(活动名称、活动类型)搜索和下拉(活动类型排序)搜索,点击可查看详情,进行点赞、收藏和评论,并可点击报名操作。界面如下图所示。
图4-6 公益活动详情界面图
可对个人首页、图书借阅、图书归还、活动报名、收藏等信息进行管理,点击可查看详情。界面如下图所示。
图4-7 个人中心界面图
4.3.1 后台首页界面
管理员登录后首先进入系统后台首页面,可查看图书信息、图书借阅、活动报名等统计信息数据分析图表。界面如下图所示。
图4-8 后台首页界面图
可对读者用户和管理员进行管控,进行增改删查操作,可点击查看详情。界面如下图所示。
图4-9 系统用户界面图
可查看所有图书信息,进行增改删查操作,支持图书类型、图书作者搜索,点击可查看详情和查看评论。界面如下图所示。
图4-10 图书信息管理界面图
可查看所有图书借阅信息,进行查询和删除操作,支持图书类型、借阅日期、审核状态搜索,点击可查看详情,进行审核,并可点击还书操作。界面如下图所示。
图4-11 图书借阅管理详情界面图
可查看所有活动报名管信息,进行查询和删除操作,支持活动名称、报名日期、审核状态搜索,点击可查看详情,进行审核。界面如下图所示。
图4-12 活动报名管理详情界面图
可对首页的轮播图进行管理,进行增删改查操作,支持标题搜索,可点击查看详情。界面如下图所示。
图4-13 系统管理界面图
可查看所有活动报名管信息,进行查询和删除操作,支持活动名称、报名日期、审核状态搜索,点击可查看详情,进行审核。界面如下图所示。
图4-14 资源管理界面图
可对用户组的权限进行管理,进行查询和查看操作,支持权限名、用户组、添加权限、修改权限、删除权限、查询权限搜索,可点击修改操作,修改用户组权限(添加、修改、删除、查询)。界面如下图所示。
图4-16 权限管理界面图
系统安全对于无人公益书店信息系统的设计与实现至关重要。网络安全主要涉及系统与外部环境的连接和交互过程中的安全性,而数据安全则着重保护系统内部的数据免受未经授权的访问、篡改或泄露。以下是针对这两个方面的分析:
使用安全连接协议:系统应采用安全的通信协议,如HTTPS,以保护网络传输数据的机密性和完整性。
防火墙保护:在系统与外部网络之间应设置防火墙,过滤恶意流量和攻击,有效保障系统网络安全。
访问控制:实现用户身份验证和授权机制,限制对系统的访问权限,防止未经授权的用户进入系统。
定期漏洞扫描:建立漏洞管理流程,对系统进行定期的漏洞扫描和安全评估,及时发现并修复潜在的安全漏洞,减少系统面临的风险。
数据加密:对系统中的敏感数据进行加密存储,采用适当的加密算法和密钥管理策略进行保护,确保数据在传输和存储中的安全性,避免数据泄露风险。
定期备份:建立完善的数据容灾、备份与恢复机制,确保系统在面对灾难性事件时能够快速恢复。采用及时备份和可复原策略,保证系统数据的安全性和可恢复性,降低数据丢失风险。
访问审计:记录用户对系统数据的访问记录,追踪数据操作情况,保证数据使用的可追溯性与透明度。
安全审计:建立安全审计机制,记录系统数据的操作活动和安全事件,及时发现异常行为并采取相应措施。
数据权限控制:根据用户角色和权限设置不同级别的数据访问权限,确保只有有权人员可以访问相应的数据。
综合以上措施,能够全面保护无人公益书店信息系统的网络和数据安全,确保系统的稳定运行和用户信息的安全性。
数据库实施是指应用程序与数据库之间建立的连接,通过该连接可以进行数据的读取、写入和修改操作。JDBC连接:JDBC是Java语言访问数据库的标准API。通过JDBC连接,可以使用Java程序访关系型数据库MySQL。使用JDBC连接数据库的主要步骤包括加载数据库驱动、建立连接、创建Statement对象、执行SQL语句、处理结果。从Springboot+jsp架构的原理可知,二手汽车推荐系统分析系统的各大模块的实现均需要对数据库的数据进行操作,具体包括查询数据、写入数据、更新数据和删除数据。
例如,数据库流程图如下图所示。
图4-28 数据库增改删查流程图
连接数据库的文件在Resources 文件夹下的application.yml文件,代码如下:
server:
port: 5000
servlet:
context-path: /api
spring:
mvc:
static-path-pattern: /upload/**
resources:
static-locations: file:此处填写地址/project93355/server/src/main/resources/static
datasource:
jdbc:mysql://127.0.0.1:3306/projectxxxxx?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
jackson:
property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
default-property-inclusion: ALWAYS
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
servlet:
multipart:
max-file-size: 500MB
max-request-size: 500MB
redis:
host: 127.0.0.1
port: 6379
password:
database: 2
lettuce:
pool:
max-idle: 30
min-idle: 10
max-active: 30
max-wait: 10000
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: com.project.demo.entity
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
use-column-label: true
map-underscore-to-camel-case: false
lazy-loading-enabled: true
aggressive-lazy-loading: false
use-generated-keys: true
用户注册的关键代码如下:
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = JSON.parseObject(JSON.toJSONString(user));
query.put("username",user.getUsername());
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(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, "账号或密码不正确");
}
}
添加关键代码:
@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);
}
删除关键代码:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
public void delete(Map<String,String> query,Map<String,String> config){
QueryWrapper wrapper = new QueryWrapper<E>();
toWhereWrapper(query, "0".equals(config.get(FindConfig.GROUP_BY)),wrapper);
baseMapper.delete(wrapper);
log.info("[{}] - 删除操作:{}",wrapper.getSqlSelect());
}
修改关键代码:
@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);
}
查询关键代码:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
图片/文件/视频等的上传方法通过MultipartFile,代码如下:
@PostMapping("/upload")
public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = System.getProperty("user.dir") + "/src/main/resources/static/";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
String fileName = file.getOriginalFilename();
File dest = new File(filePath + fileName);
log.info("文件路径:{}", dest.getPath());
log.info("文件名:{}", dest.getName());
file.transferTo(dest);
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", "/api/upload/" + fileName);
return success(jsonObject);
} catch (IOException e) {
log.info("上传失败:{}", e.getMessage());
}
return error(30000, "上传失败");
}
找回密码,接收用户输入的用户名、密码、验证码,并进行条件判断,代码如下:
/**
* 找回密码
* @param form
* @return
*/
@PostMapping("forget_password")
public Map<String, Object> forgetPassword(@RequestBody User form,HttpServletRequest request) {
JSONObject ret = new JSONObject();
String username = form.getUsername();
String code = form.getCode();
String password = form.getPassword();
// 判断条件
if(code == null || code.length() == 0){
return error(30000, "验证码不能为空");
}
if(username == null || username.length() == 0){
return error(30000, "用户名不能为空");
}
if(password == null || password.length() == 0){
return error(30000, "密码不能为空");
}
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",username);
List list = service.selectBaseList(service.select(query, service.readConfig(request)));
if (list.size() > 0) {
User o = (User) list.get(0);
JSONObject query2 = new JSONObject();
JSONObject form2 = new JSONObject();
// 修改用户密码
query2.put("user_id",o.getUserId());
form2.put("password",service.encryption(password));
service.update(query, service.readConfig(request), form2);
return success(1);
}
return error(70000,"用户不存在");
}
修改密码,通过请求data,获取旧密码,并将新密码重新赋值,期间都是需要通过加密,代码如下:
/**
* 修改密码
* @param data
* @param request
* @return
*/
@PostMapping("change_password")
public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
// 根据Token获取UserId
String token = request.getHeader("x-auth-token");
Integer userId = tokenGetUserId(token);
// 根据UserId和旧密码获取用户
Map<String, String> query = new HashMap<>();
String o_password = data.get("o_password");
query.put("user_id" ,String.valueOf(userId));
query.put("password" ,service.encryption(o_password));
int count = service.selectBaseCount(service.count(query, service.readConfig(request)));
if(count > 0){
// 修改密码
Map<String,Object> form = new HashMap<>();
form.put("password",service.encryption(data.get("password")));
service.update(query,service.readConfig(request),form);
return success(1);
}
return error(10000,"密码修改失败!");
}
5系统测试
5.1 测试目的
在对该系统进行完详细设计和编码之后,就要对基于Java和mysql的无人公益书店信息系统的程序进行测试,检测程序是否运行无误,反复进行测试和修改,使之最后成为完整的软件,满足用户的需求,实现预期的功能。
5.2 测试过程
在软件的测试过程中,通常测试人员需要针对不同的功能模块设计多种测试用例。通过测试用例能够及时发现代码业务逻辑上是否与真实的业务逻辑相对应,及时发现代码上或逻辑上的缺陷,以此来来完善系统,提高软件产品的质量,使软件具有良好的用户体验。
表5-1 用户登录功能测试表
| 测试用例编号 | YL_01 | |
| 测试用例名称 | 系统使用者进行登录系统 | |
| 测试用例描述 | 使用者输入正确的用户名和密码可否登录功能 | |
| 系统入口 | 浏览器 | |
| 步骤 | 预期结果 | 实际结果 |
| 输入完整并且格式正确的数据 | 提示“登录成功”,并显示所有数据 | 预期结果 |
| 核心数据位置不输入数据 | 提示“登录失败” | 预期结果 |
在系统中,创建功能也是基础功能之一,因此创建功能的测试很有代表性。在此章节主要列举在创建时各种情况下系统结果的测试。由于系统涉及创建功能操作过多,因此将多处统称创建功能。
创建数据用例如下表所示。
表5-2 创建数据测试用例
| 测试用例编号 | YL_02 | |
| 测试用例名称 | 系统使用者进行创建数据 | |
| 测试用例描述 | 使用者输入要创建的数据 | |
| 系统入口 | 浏览器 | |
| 步骤 | 预期结果 | 实际结果 |
| 输入完整并且格式正确的数据 | 提示“创建成功”,并显示所有数据 | 预期结果 |
| 核心位置数据但非必要位置不输入数据 | 提示“创建成功”,并显示所有数据 | 预期结果 |
| 核心数据位置不输入数据 | 提示“创建失败” | 预期结果 |
在系统中,修改功能是系统主要实现功能,因此修改功能的测试很有代表性。在此章节主要列举在修改时各种情况下系统结果的测试。由于系统涉及修改功能操作过多,因此将多处数据表记录修改和状态修改统称修改功能。
修改数据用例如下表所示。
表5-3 修改数据测试用例
| 测试用例编号 | YL_03 | |
| 测试用例名称 | 系统使用者进行修改数据 | |
| 测试用例描述 | 使用者对可修改的数据项进行修改 | |
| 系统入口 | 浏览器 | |
| 步骤 | 预期结果 | 实际结果 |
| 将现有数据修改成正确的数据 | 提示“修改成功”,并显示所有数据 | 预期结果 |
| 将现有数据修改成错误的数据 | 提示“修改失败” | 预期结果 |
在系统中,查询功能是使用系统使用最多也是最基础的功能,因此查询功能的测试很有代表性。在此章节主要列举在查询时各种情况下系统结果的测试。
查询数据用例如下表所示。
表5-4 查询数据测试用例
| 测试用例编号 | YL_04 | |
| 测试用例名称 | 系统使用者进行查询数据 | |
| 测试用例描述 | 全部查询以及输入关键词查询 | |
| 系统入口 | 浏览器 | |
| 步骤 | 预期结果 | 实际结果 |
| 界面自动查询全部 | 显示对应所有记录 | 预期结果 |
| 输入已存在且能匹配成功的关键字 | 显示所查询到的数据 | 预期结果 |
| 输入不存在的关键字 | 显示数据界面为空 | 预期结果 |
5.3 测试结果
在本次测试的过程主要针对所有功能下的添加操作,修改操作和删除操作,并以真实数据一一进行相关功能项目的输入,最终能够保证每个项目涉及的功能都是能够正常运行,因此能够保证本次设计的,已实现的功能能够正常运行并且相关数据库的信息也同样保证正确。经过对此系统的测试,得出该系统足以满足用户日常需求,在功能项目和操作等方面也能满足操作员对于其他用户的管理。但是,还有很多功能有待添加,这个系统仅能满足大部分的需求,还需要对此系统的功能更进一步的完善,这样使用起来才能更加的完美。
结论
6.1 系统评价
经过对无人公益书店信息系统的设计与开发,我们成功地基于Java和MySQL技术,使用springboot框架快速构建了一个安全、友好、便捷、高效的无人公益书店信息系统。在系统的开发过程中,我们充分利用了Java编程语言的优势,如自动配置、快速开发等特点,加快了项目的迭代和部署速度。采取稳定且可靠的MySQL开源关系型数据库储存和处理数据,同时,借助springboot提供的丰富的生态系统,我们引入了一些常用的第三方库和组件,增强了系统的功能和性能。
无人公益书店信息系统在试运行后进行系统评估,可以认为该系统达到预定的目标要求,可以满足用户的需求,也满足了系统开发前所作目标。系统在经过大量重复测试后运行十分稳定,安全实用,功能模块已经达到预定目标所需。在规定的时间内实现系统的大部分功能,且满足要求,节省开发成本,有助于提高科学管理水平,符合本人经济情况。
但是无人公益书店信息系统仍有进一步的改进空间。首先,我们可以继续优化系统的用户界面和交互体验,使其更加直观友好。其次,可以引入更多的智能化技术,提升用户的个性化体验和服务质量,为用户提供更全面的无人公益书店借阅、归还、报名等服务。
未来,我们将继续关注用户的需求变化和行业趋势,持续优化无人公益书店信息系统。通过不断的迭代和创新,我们希望将该系统打造成为该领域的领先平台,为用户提供更便捷、高效的无人公益书店信息系统体验。同时,我们也将加强与合作伙伴的合作,共同推动无人公益书店信息系统行业的发展和创新。
总之,无人公益书店信息系统在设计与实现过程中取得了一定的成果,但仍有进一步的改进和发展空间。未来我们将持续努力,不断提升系统的功能和性能,为用户提供更好的服务体验。
至此,无人公益书店信息系统已经结束,在开发前做了许多的准备,在本系统的设计和开发过程中我阅览和学习了许多文献资料,从中我也收获了很多宝贵的方法和设计思路,对系统的开发也起到了很重要的作用,系统的开发技术选用的都是自己比较熟悉的,包括Java开发技术、springboot技术框架、MYSQL数据库等开发技术工具,这些技术都是在以前的学习中学到了,其中许多的设计思路和方法都是在以前不断地学习中摸索出来的经验,其实对于我来说工作量还是比较大的,但是正是由于之前的积累与准备,才能顺利的完成这个项目,由此看来,积累经验跟做好准备是十分重要的事情。
当然在该系统的设计与实现的过程中也离不开老师以及同学们的帮助,正是因为他们的指导与帮助,我才能够成功的在预期内完成了这个系统。在此感谢我的指导教师和其他所有给予我帮助的老师和同学们。同时,在这个过程当中我也收获了很多东西,此系统也有需要改进的地方,但是由于专业知识的浅薄,并不能做到十分完美,希望以后有机会可以让其真正的投入到使用之中。
[1]郑晓渊,姜黎,贾中芝,等.基于物联网技术的图书馆书籍自动定位系统[J].自动化技术与应用,2024,43(03):132-135.DOI:10.20033/j.1003-7241.(2024)03-0132-04.
[2]赵彩霞,张栽培,杨璇.基于Java编程导航学习平台开发设计的研究[J].家电维修,2024,(03):62-64.
[3]李宏.云计算环境下儿童图书馆自动化系统发展探究[J].参花,2024,(06):122-124.
[4]王秋云.图书馆信息安全风险及应对措施研究——基于系统安全漏洞分析[J].图书馆界,2024,(01):67-74.DOI:10.14072/j.cnki.tsgj.2024.01.016.
[5]杨小妹.面向智能图书馆的自动化书目管理系统设计与实现[J].大数据时代,2024,(01):60-63.
[6]秦艳华,李一凡.基于图书用户行为大数据分析与应用的新零售智慧书店建设研究——以不吝BOOLINK书店为例[J].中国数字出版,2024,2(01):43-48+67.
[7]王颖.智慧图书馆中的智能阅读辅助系统设计[J].集成电路应用,2024,41(01):216-217.DOI:10.19339/j.issn.1674-2583.2024.01.097.
[8]韩小龙,司珍,吕晓峰,等.基于面向对象编程的Java语言程序设计方法分析[J].集成电路应用,2024,41(01):228-229.DOI:10.19339/j.issn.1674-2583.2024.01.103.
[9]林江丽.高校图书馆平台系统的现状与发展[J].文化产业,2024,(01):151-153.
[10]赵旭东.计算机软件开发与设计中Java语言的应用研究[J].信息与电脑(理论版),2023,35(24):31-33.
[11]贺延辉.“绿动未来”环保公益图书馆可持续发展研究[J].图书馆建设,2023,(06):148-154.DOI:10.19764/j.cnki.tsgjs.20222227.
[12]范青楠,刘伟,胡金超,等.现象学视角下的网红建筑分析——以三联书店海边公益图书馆为例[J].艺术教育,2023,(10):226-229.
[13]李栋楠.书店书籍资料管理信息系统分析与设计[J].河北建筑工程学院学报,2022,40(03):192-196.
[14]张彦芳,靳继红.基于JSP的网上书店系统设计[J].信息技术与信息化,2021,(08):110-112.
[15]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):
[16]Chen G ,Xu J .Design and implementation of efficient Learning platform based on SpringBoot Framework[J].Journal of Electronics and Information Science,2020,6(1):
[17]三联书店海边公益图书馆[J].江西教育,2020,(32):82.
[18]He M ,Lv S .Research on Civil Aircraft Structural Strength Material Performance Database Based on SpringBoot[C]//Advanced Science and Industry Research Center.Proceedings of 2020 4th International Conference on Electrical,Automation and Mechanical Engineering(EAME2020).School of Software, Northwestern Polytechnical University;Science and Technology of UAV Laboratory, Northwestern Polytechnical University;,2020:6.DOI:10.26914/c.cnkihy.2020.057541.
[19]孟敏,张卓云.基于JSP技术网上书店系统的设计与实现[J].河北软件职业技术学院学报,2020,22(01):7-11.DOI:10.13314/j.cnki.jhbsi.2020.01.003.
[20]关秀瑜,张宏涛.基于HTML5的网络书店设计与实现[J].中外企业家,2019,(17):112.
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢!
更多推荐
所有评论(0)