2朱志达 发表于 2024-10-25 22:11:22

基于javaScript图书管理系统

角色定义图设计普通用户的功能包括查询图书和浏览图书两个部分。管理员可以对系统进行图书信息和用户信息的增加、修改以及删除和用户权限设置与修改。


吴瑞哲 发表于 2024-10-25 23:29:34

非常好的设计,爱来自长沙理工大学,英雄联盟

2朱志达 发表于 2024-11-2 08:28:29

本周完成了数据库设计,数据流图等设计"D:\83be1eda-54ba-462b-b268-b587bb60787a.png"

2朱志达 发表于 2024-11-2 08:30:04

数据库结构中包含图书管理系统中的实体及其关系,主要实体有用户、图书、借阅记录和图书管理员,用户可借阅多本图书,生成借阅记录。数据库逻辑结构中包括了用户表、管理员表、管理员权限表、种类表、管理员菜单表、图书表

2朱志达 发表于 2024-11-8 22:35:56

5.2类设计与实现
        5.2.1集成Apache Shiro的Spring配置类设计要点
通过一个Spring配置类,其集成了Apache Shiro安全框架。以下是主要的设计要点:代码中使用了多个@Bean注解定义了Spring管理的组件,包LifecycleBeanPostProcessor、SecurityManager、ShiroFilterFactoryBean等。
这些组件的作用如下。
(1)LifecycleBeanPostProcessor。用于管理Shiro Bean的生命周期,确保这些Bean在Spring容器中正确地初始化和销毁。
(2)SecurityManager。配置了应用程序的安全管理器。这里使用了DefaultWebSecurityManager作为安全管理器的实现,并设置了自定义的WJRealm作为认证和授权数据源,并配置了RememberMe功能。
(3)ShiroFilterFactoryBean。配置了Shiro的过滤器链,用于控制请求的访问权限。通过设置不同路径的访问规则,如/api/authentication和/api/admin/**,以及使用自定义的。
(4)URLPathMatchingFilter来处理特定路径的访问控制逻辑。
(5)自定义过滤器。通过URLPathMatchingFilter实现了自定义的访问控制逻辑,可以根据具体需求定制特定API的访问控制策略。
(6)密码匹配器使用了HashedCredentialsMatcher来加密和验证用户密码,使用MD5算法和2次迭代。
(7)RememberMe管理器。配置了CookieRememberMeManager,用于实现RememberMe功能,提高用户体验。
(8)授权属性源顾问。配置了AuthorizationAttributeSourceAdvisor,用于支持Shiro的授权注解,如@RequiresRoles和@RequiresPermissions,通过Spring AOP实现权限控制。
这些组件的结合使得应用程序能够实现灵活的用户认证和授权管理,保护应用程序的安全性和数据的完整性。
        5.2.2各个实体的类设计与实现
首先确保你的项目中包含 Lombok 依赖。在 Maven 项目中,pom.xml 文件应包含以上依赖。使用 Lombok 注解实现各种类,包括属性、构造方法和各种方法。
(1)        User
其中构造方法默认构造方法和带参数构造方法。方法有builder()、toString()、equals(Object)、canEqual(Object)、hashCode(),属性有name、password、id、email、phone、enabled、salt、username、roles。
实体注解,@Entity 标注该类为 JPA 实体。@Id 和 @GeneratedValue 表示 id 为主键并且自动生成。Lombok 注解:@Data 自动生成所有属性的 getter 和 setter 方法,以及 toString、equals、hashCode 和 canEqual 方法。@NoArgsConstructor 生成无参构造方法。
@AllArgsConstructor生成全参构造方法。@Builder提供builder方法,用于构建对象。属性:定义了用户的基本信息属性,包括name、password、email、phone、enabled、salt和username。roles属性使用@ManyToMany注解,表示用户和角色之间的多对多关系。
(2)AdminRole
其中构造方法有默认构造方法和带参数构造方法。方法有builder()、toString()、equals(Object)、canEqual(Object)、hashCode(),属性有name、id、nameZh、enabled、perms、menus。
实体注解,@Entity标注该类为JPA实体。@Id和@GeneratedValue表示id为主键并且自动生成。Lombok 注解,@Data 自动生成所有属性的getter和setter方法,以及 toString、equals、hashCode和canEqual方法。@NoArgsConstructor生成无参构造方法。@AllArgsConstructor生成全参构造方法。@Builder提供builder方法,用于构建对象。属性定义了权限和菜单的基本信息属性,包括 name。users属性使用 @ManyToMany(mappedBy = "perms")和@ManyToMany(mappedBy="menus") 注解,表示用户和权限、菜单之间的多对多关系的反向映射。
(3)Book:
构造方法只有有默认构造方法。方法有toString()、equals(Object)、canEqual(Object)、hashCode()。属性有press、category、id、title、author、cover、abs、date。属性,定义了书籍的基本信息属性,包括 press、category、id、title、author、cover、abs 和 date。
为了实现一个包含特定构造方法和方法的 Book 类,我们可以手动编写所有必要的代码。以下是 Book 类的实现,包括默认构造方法、toString()、equals(Object)、canEqual(Object)和hashCode()方法,以及指定的属性。构造方法,默认构造方法 public Book()。带参数的构造方法,用于初始化所有属性。Getter和Setter方法,每个属性都有对应的getter和setter方法,用于访问和修改属性值。toString()方法,返回对象的字符串表示形式,方便调试和日志记录。quals(Object o)方法,比较当前对象与另一个对象是否相等。比较时考虑所有属性。canEqual(Object other)方法,确保在 equals方法中,只比较相同类型的对象。hashCode()方法,生成对象的哈希码,用于哈希表中的快速查找。
(4)AdminMenu
构造方法只有有默认构造方法。方法有toString()、equals(Object)、canEqual(Object)
、hashCode(),属性有name、parentId、id、nameZh、iconCls、component、children(List<AdminMenu>)。
为了实现一个包含特定构造方法和方法的AdminMenu类,我们可以手动编写所有必要的代码。以下是 AdminMenu 类的实现,包括默认构造方法、toString()、equals(Object)、canEqual(Object)和hashCode()方法,以及指定的属性。属性,定义了菜单的基本信息属性,包括name、parentId、id、nameZh、iconCls、component 和 children(类型为 List<AdminMenu>)。构造方法默认构造方法public AdminMenu()。Getter和Setter方法,每个属性都有对应的 getter 和 setter 方法,用于访问和修改属性值toString()方法,返回对象的字符串表示形式,方便调试和日志记录。equals(Object o)方法,比较当前对象与另一个对象是否相等。比较时考虑所有属性。canEqual(Object other)方法,确保在 equals 方法中,只比较相同类型的对象。hashCode()方法,生成对象的哈希码,用于哈希表中的快速查找。
(5)AdminPermission
构造方法只有默认构造方法。方法有toString()、equals(Object)、canEqual(Object)、hashCode()。属性有articleDate、id、articleTitle、articleContentHtml、articleAbstract、articleContentMd、articleCover。
为了实现一个包含特定构造方法和方法的AdminPermission类,我们可以手动编写所有必要的代码。以下是 Article 类的实现,包括默认构造方法、toString()、equals(Object)、canEqual(Object)和hashCode()方法,以及指定的属性。属性,定义了文章的基本信息属性,包括 articleDate、id、articleTitle、articleContentHtml、articleAbstract、articleContentMd 和 articleCover。构造方法默认构造方法 public Article()。Getter和Setter方法,每个属性都有对应的getter和setter方法,用于访问和修改属性值。toString()方法,返回对象的字符串表示形式,方便调试和日志记录。equals(Object o)方法,比较当前对象与另一个对象是否相等。比较时考虑所有属性。canEqual(Object other)方法,确保在equals方法中,只比较相同类型的对象。hashCode() 方法,生成对象的哈希码,用于哈希表中的快速查找。

2朱志达 发表于 2024-11-18 23:02:42

5.1功能模块设计与实现
5.1.1登陆与注册
(1)登录方法
①通过 POST 请求 /api/login 进行登录。 ②接收一个 User 对象,其中包含用户名和密码。 ③对用户名进行 HTML 转义以防止 XSS 攻击。 ④创建一个 UsernamePasswordToken 对象,并设置 rememberMe 为 true。 ⑤使用 Shiro 的 subject.login() 方法尝试登录。 ⑥登录成功后,从数据库中查找用户,检查用户是否已被禁用。 ⑦返回相应的成功或失败结果。 (2)注册方法
①通过 POST 请求 /api/register 进行注册。 ②接收一个 User 对象。 ③使用 userService.register(user) 方法注册用户,并返回一个状态码。 ④根据状态码返回相应的注册结果,包括成功、用户名和密码不能为空、用户已存在或未知错误。
        5.1.2用户查询
(1) 用户查询书籍功能
在 LibraryController 中已经有了一个 /api/search 的端点,用于通过关键字搜索书籍。
端点使用/api/search,HTTP 方法使用GET,参数则接受一个字符串类型的参数 keywords,表示搜索的关键字。其中逻辑是如果 keywords 为空字符串,则返回所有书籍。否则,根据关键字进行搜索并返回搜索结果。
(2)查看书籍详细信息
为了让用户能够查看书籍的详细信息,需要添加一个新的端点,通过书籍的 ID 获取书籍的详细信息。
端点使用/api/book/{id},HTTP 方法使用GET参数则是接受一个路径变量 id,表示书籍的 ID。其中逻辑是根据书籍 ID 查找书籍。如果找到书籍,则返回书籍的详细信息。如果未找到书籍,则返回错误信息。
(3)确保服务层方法正确
首先,定义 BookService 接口,以确保我们有一个统一的契约。接下来,在 BookServiceImpl 类中实现这些方法。确保 BookRepository 中定义了必要的查询方法。BookRepository 通常是一个接口,继承自 JpaRepository 或其他 Spring Data 仓库接口。
BookServiceImpl 方法实现详细说明。
②        list()调用 bookRepository.findAll()来获取所有书籍。
②Search()调用 bookRepository.findByTitleContainingOrAuthorContaining()来根据关键字搜索书籍。
该方法在 BookRepository 中定义,使用 Spring Data JPA 提供的命名查询方法,根据书名或作者名进行模糊搜索。
③findById(int id)调用 bookRepository.findById(id).orElse(null)来根据书籍 ID 查找书籍。如果找到书籍则返回,否则返回 null。
④addOrUpdate(Book book)调用 bookRepository.save(book)来保存或更新书籍信息。save() 方法在传入的书籍对象有 ID 时会更新该书籍,否则会插入新书籍。
⑤deleteById(int id)调用 bookRepository.deleteById(id) 来删除书籍。
⑥listByCategory(int cid)调用 bookRepository.findByCategoryId(cid)来根据分类 ID 获取书籍列表。
        5.1.3管理书籍
(1)列出所有书籍
①通过 GET 请求 /api/books 获取所有书籍的列表。 ②调用 bookService.list() 获取书籍列表,并返回成功结果。 ③添加或更新书籍 (addOrUpdateBooks): ④通过 POST 请求 /api/admin/content/books 添加或更新书籍。 ⑤接收一个 Book 对象,使用 @Valid 注解进行数据验证。 ⑥调用 bookService.addOrUpdate(book) 方法添加或更新书籍,并返回成功结果。 (2)删除书籍
①通过 POST 请求 /api/admin/content/books/delete 删除书籍。 ②接收一个 Book 对象,使用 @Valid 注解进行数据验证。 ③调用 bookService.deleteById(book.getId()) 方法删除书籍,并返回成功结果。 (3)搜索书籍 (searchResult): ①通过 GET 请求 /api/search 根据关键字搜索书籍。 ②如果关键字为空,返回所有书籍列表。 ③调用 bookService.Search(keywords) 方法根据关键字搜索书籍,并返回成功结果。 (4)按分类列出书籍 ①通过 GET 请求 /api/categories/{cid}/books 根据分类 ID 列出书籍。 ②如果分类 ID 不为 0,调用 bookService.listByCategory(cid) 方法获取对应分类的书籍列表。 ③如果分类 ID 为 0,返回所有书籍列表。 上传封面图片 ④通过 POST 请求 /api/admin/content/books/covers 上传书籍封面图片。 ⑤接收一个 MultipartFile 对象。 ⑥将图片存储在指定文件夹中,并生成随机文件名。 ⑦返回图片的 URL。
        5.1.4管理用户
(1)列出所有用户①通过 GET 请求 /api/admin/user 获取所有用户的列表。 ②调用 userService.list() 获取用户列表,并返回成功结果。 (2)更新用户状态①通过 PUT 请求 /api/admin/user/status 更新用户状态。 ②接收一个 User 对象,使用 @Valid 注解进行数据验证。 ③调用 userService.updateUserStatus(requestUser) 方法更新用户状态,并返回成功结果。 (3)重置用户密码①通过 PUT 请求 /api/admin/user/password 重置用户密码。 ②接收一个 User 对象,使用 @Valid 注解进行数据验证。 ③调用 userService.resetPassword(requestUser) 方法重置用户密码,并返回成功结果。 (4)编辑用户信息
①通过 PUT 请求 /api/admin/user 编辑用户信息。 ②接收一个 User 对象,使用 @Valid 注解进行数据验证。 ③调用 userService.editUser(requestUser) 方法编辑用户信息,并返回成功结果。
        5.1.5管理用户权限
用户角色权限管理是各类后台管理系统的重要组成部分,由于涉及多种概念与技术,实现起来稍微有一些难度,因此单独拎出来作为项目迭代的一个阶段。用户角色权限管理包括用户管理、角色管理以及权限管理。而在用户管理中有用户信息、组织架构、用户操作以及用户白名单,角色管理中有角色信息以及角色操作,权限管理中有权限粒度和权限操作。

吴瑞哲 发表于 2024-11-18 23:18:07

非常棒的设计,能设计出这么好的东西的人我猜数学一定很好

2朱志达 发表于 2024-11-22 22:42:04

吴瑞哲 发表于 2024-11-18 23:18
非常棒的设计,能设计出这么好的东西的人我猜数学一定很好

我这设计能力去应聘lol设计师了

2朱志达 发表于 2024-11-22 22:43:02

1.2.1问题领域现状
图书管理系统在当前的问题领域中面临以下几个关键挑战和现状。
(1)技术更新和兼容性方面,许多系统可能使用老旧技术,需要定期更新以适应新的硬件和软件环境。此外,不同系统之间的兼容性问题也影响数据交换和整合的效率。
(2)在安全和数据保护方面,系统存储大量用户数据和敏感信息,面临来自黑客和恶意软件的安全威胁。因此,确保数据安全和隐私保护是系统开发和运维中不可忽视的重要问题。
(3)用户体验和界面设计需要简洁直观,以提升用户操作的便利性和效率。系统应当考虑多平台适配,使用户能够在不同设备上方便地进行操作和访问服务。
管理效率和资源优化是系统设计的核心目标之一,通过自动化和优化流程,提高图书馆或书店管理工作的效率和质量,从而更好地满足读者和用户的需求。
1.2.2技术领域现状
随图书管理系统在技术领域的现状涵盖了以下几个关键方面。
(1)云计算和虚拟化。现代图书管理系统越来越多地利用云计算和虚拟化技术,以提供灵活的部署选项和资源管理,同时降低硬件成本和维护成本。
(2)开放数据标准。为了提高系统的互操作性和数据共享能力,许多图书管理系统支持开放数据标准和协议,如MARC格式、Dublin Core等,使得图书馆能够更容易地与其他系统进行集成和数据交换。
(3)数据分析和智能推荐。通过数据分析和机器学习技术,图书管理系统能够分析读者的借阅行为和偏好,为用户提供个性化的图书推荐,提升服务质量和用户满意度。
(4)移动化和响应式设计。随着移动设备的普及,现代图书管理系统通常支持移动化访问和响应式设计,使用户能够在不同设备上方便地使用系统,增强用户体验。
(5)安全和隐私保护。面对日益严峻的网络安全威胁,图书管理系统加强了数据安全措施,包括数据加密、访问控制和安全审计,以确保用户的个人信息和图书馆数据得到充分保护。
这些技术趋势和实践帮助图书管理系统在现代信息化的背景下更好地满足图书馆和书店管理的需求,提升效率和服务质量。
1.2.3现有系统的优缺点
现有的图书管理系统具有以下优缺点。
优点:
(1)自动化管理。能够自动化处理图书的入库、借阅、归还等流程,减少了人工操作和错误率,提高了管理效率。
(2)实时访问和更新。用户可以随时通过系统查询图书的可用性和位置,实时更新图书馆的藏书信息,提升了用户的检索便利性。
(3)数据分析与优化。系统通过数据分析和统计功能,可以帮助图书馆优化图书采购策略,根据读者借阅情况进行合理的藏书管理。
(4)用户服务提升。支持在线预约、续借、评价等功能,提升了用户体验和满意度,使用户能够更方便地使用图书馆资源。
缺点:
(1)初期投入和成本。系统的建设和维护需要较大的初期投入和长期运营成本,包括软件采购、硬件设施更新和技术支持等。
(2)技术兼容性和更新。老旧系统可能存在技术兼容性问题,需要定期更新和升级以适应新的技术发展和用户需求,维护成本较高。
(3)安全和隐私风险。系统涉及大量用户和图书信息的存储和处理,面临来自网络攻击和数据泄露的风险,需要加强安全防护措施。
(4)学习和培训成本。新系统的使用可能需要员工接受培训,适应新的操作流程和功能,导致学习成本和过渡期间的效率低下。
1.2.4项目研究开发的必要性
图书馆管理系统的项目研究开发具有重要的必要性。首先,通过引入现代化系统,可以显著提升图书馆的管理效率。系统能够自动化处理图书的入库、借阅、归还等流程,减少了人工操作,提高了工作效率,同时也降低了管理成本。
其次,系统的数据分析功能能够帮助图书馆优化资源利用。通过分析读者的借阅行为和偏好,图书馆可以更精确地掌握馆藏图书的流通情况,进而优化图书的采购和分布策略,确保馆藏的多样性和实用性。
第三,现代化系统支持在线查询、预约、续借等便捷功能,大大提升了读者的服务体验。用户可以通过系统快速查找到所需的图书信息,随时进行借阅操作,从而增强了图书馆的服务水平和用户满意度。
最后,系统提供的数据分析和统计功能,为图书馆管理者提供了决策支持的依据。通过分析图书馆的借阅数据和使用情况,管理者可以制定更加科学合理的馆藏发展策略,进一步提升图书馆的学术影响力和社会价值。
1.3项目的目标和范围
1.3.1确立项目的目标
本项目旨在开发一个基于springboot和Thymeleaf的图书管理系统,主要目标是提升图书馆管理效率是通过自动化和数字化的手段,减少人工操作时间,提高图书借还、库存管理和信息更新的效率。优化用户体验是提供一个友好、直观的用户界面,使图书馆管理员和读者能够便捷地完成各类操作,从而提升整体用户满意度。增强数据统计与分析能力是集成全面的数据统计和分析功能,帮助图书馆管理员了解图书利用情况和用户需求,支持数据驱动的管理决策。保障系统的安全性和稳定性是通过安全的用户认证和权限管理机制,保护系统数据的安全性;确保系统在高并发和大数据量条件下的稳定运行。实现系统的扩展性和灵活性是设计一个模块化和可扩展的系统架构,能够根据不同图书馆的需求进行灵活的功能扩展和配置。
1.3.2要解决的关键问题
项目需要解决以下关键问题。
(1)构建一个高效的后端服务架构和灵活的前端展示界面,确保系统能够稳定高效地运行。
(2)能够实现精确的用户身份认证和权限控制,确保只有授权用户才能访问和操作相关资源。
(3)设计和实现高效的数据存储和管理方案,确保图书、用户和借还操作的数据能够快速可靠地存储和检索。
(4)开发响应式和直观的用户界面,使系统能够在不同设备上提供一致的用户体验。
(5)设计和实现系统的安全机制,包括用户数据的保护和操作的安全性,防止为经授权的访问和操作。





页: [1]
查看完整版本: 基于javaScript图书管理系统