README.md
智能图书管理系统 (SLMS)
项目概述
本项目是一个基于Java的智能图书管理系统(SLMS),展示了多种设计模式的应用。系统遵循SOLID原则,实现了图书管理、借阅记录、通知系统等功能。
设计模式应用
1. 单一职责原则 (Single Responsibility Principle)
- 实现类:
Book和Loan - 职责分离:
Book类仅负责封装图书信息(书名、作者、ISBN等)Loan类仅负责管理借阅记录(借阅人、借阅时间、归还时间等)
2. 开闭原则 (Open/Closed Principle)
- 实现类:
Notification接口及其实现类 - 设计特点:
- 通过接口设计支持多种通知方式
- 新增通知方式时无需修改现有代码
- 实现类:
EmailNotification,SMSNotification,InAppNotification
3. 单例模式 (Singleton Pattern)
- 实现类:
DatabaseConnection - 设计特点:
- 确保系统运行期间仅存在一个数据库连接实例
- 使用双重检查锁定实现线程安全
- 提供全局访问点
4. 观察者模式 (Observer Pattern)
- 实现类:
BookStatusObserver接口,BookStatusSubject接口,BookStatusManager,BookNotificationObserver - 设计特点:
- 实现图书状态变更通知机制
- 支持多种事件类型(图书上架、借出、归还、逾期等)
- 解耦被观察者和观察者之间的关系
5. 工厂模式 (Factory Pattern)
- 实现类:
BookFactory接口,PhysicalBookFactory,EBookFactory,JournalFactory,BookFactoryProvider - 设计特点:
- 创建不同类型图书对象(实体书、电子书、期刊)
- 支持动态注册新的图书类型
- 提供统一的图书创建接口
项目结构
SLMS/
├── src/
│ └── main/
│ └── java/
│ └── com/
│ └── smartlibrary/
│ ├── SLMS.java # 主程序入口
│ ├── database/
│ │ └── DatabaseConnection.java # 数据库连接管理(单例模式)
│ ├── factory/
│ │ ├── BookFactory.java # 图书工厂接口
│ │ ├── BookFactoryProvider.java # 工厂提供者
│ │ ├── EBookFactory.java # 电子书工厂
│ │ ├── JournalFactory.java # 期刊工厂
│ │ └── PhysicalBookFactory.java # 实体书工厂
│ ├── model/
│ │ ├── Book.java # 图书模型(单一职责原则)
│ │ └── Loan.java # 借阅记录模型(单一职责原则)
│ ├── notification/
│ │ ├── EmailNotification.java # 邮件通知(开闭原则)
│ │ ├── InAppNotification.java # 应用内通知(开闭原则)
│ │ ├── Notification.java # 通知接口(开闭原则)
│ │ └── SMSNotification.java # 短信通知(开闭原则)
│ └── observer/
│ ├── BookEventType.java # 图书事件类型枚举
│ ├── BookNotificationObserver.java # 图书状态通知观察者
│ ├── BookStatusManager.java # 图书状态管理器
│ ├── BookStatusObserver.java # 图书状态观察者接口
│ └── BookStatusSubject.java # 图书状态被观察者接口
└── src/
└── test/
└── java/
└── com/
└── smartlibrary/
└── test/
└── DesignPatternsTest.java # 设计模式测试类
└── docs/
├── factory_pattern.puml # 工厂模式类图
├── observer_pattern.puml # 观察者模式类图
├── open_closed_principle.puml # 开闭原则类图
├── single_responsibility_principle.puml # 单一职责原则类图
├── singleton_pattern.puml # 单例模式类图
└── smart_library_system.puml # 系统综合类图
如何运行
前置要求
- Java 8 或更高版本
- Maven 3.6 或更高版本(可选)
- JDK 14+ (用于生成 GUI 安装包)
- WiX Toolset v3.11 (用于生成 MSI 安装包)
Android环境配置
本项目包含Android应用模块,需要以下环境配置:
- Android SDK:
D:\development\Android - JDK:
E:\2025-2026\GitAIOps\jdk - 模拟器: 已配置在Android SDK目录中
环境变量设置
# 设置ANDROID_HOME环境变量
set ANDROID_HOME=D:\development\Android
# 设置JAVA_HOME环境变量
set JAVA_HOME=E:\2025-2026\GitAIOps\jdk
# 添加到PATH
set PATH=%JAVA_HOME%\bin;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;%PATH%
构建Android APK
-
清理项目:
gradlew clean -
编译项目:
gradlew build -
运行测试:
gradlew test gradlew connectedAndroidTest -
构建Debug APK:
gradlew assembleDebug生成的APK位置:
android/build/outputs/apk/debug/android-debug.apk -
构建Release APK:
gradlew assembleRelease生成的APK位置:
android/build/outputs/apk/release/android-release-unsigned.apk -
安装到设备/模拟器:
gradlew installDebug
方式一:使用Maven(推荐)
-
运行PowerShell脚本(Windows):
.\run_maven.ps1 -
运行批处理脚本(Windows):
.\run_maven_en.bat -
或者手动执行以下命令:
# 编译项目 mvn compile # 运行主程序 mvn exec:java -Dexec.mainClass="com.smartlibrary.SLMS" -
运行测试:
# 使用PowerShell脚本 .\test_maven.ps1 # 使用批处理脚本 .\test_maven_en.bat # 或者手动执行命令 java -cp "target/classes;target/test-classes;lib/*" com.smartlibrary.test.DesignPatternsTest
方式二:不使用Maven
-
运行PowerShell脚本(Windows):
.\run.ps1 -
运行批处理脚本(Windows):
run.bat -
或者手动执行以下命令:
# 创建编译输出目录 mkdir build # 编译主代码 $files = Get-ChildItem -Path "src\main\java" -Recurse -Filter "*.java"; javac -d build -cp "lib/*;src" -encoding UTF-8 $files.FullName # 编译测试代码 $files = Get-ChildItem -Path "src\test\java" -Recurse -Filter "*.java"; javac -d build -cp "lib/*;build" -encoding UTF-8 $files.FullName # 运行主程序 java -cp "build;lib/*" com.smartlibrary.SLMS
运行测试
有以下几种方式运行测试:
-
标准Maven命令(推荐):
mvn test -
PowerShell脚本:
. est_maven.ps1 -
批处理脚本(英文系统):
. est_maven_en.bat -
手动命令:
java -cp "target/classes;target/test-classes;lib/*" com.smartlibrary.test.DesignPatternsTest
生成 GUI 安装包(EXE 和 MSI)
本项目支持生成 Windows 平台的 GUI 应用安装包,包括独立可执行文件(EXE)和标准安装程序(MSI)。
快速开始
-
使用快速启动脚本(推荐):
build-installers.bat -
使用完整脚本:
scripts\build-gui-installers.bat -
测试生成的安装包:
scripts\test-installers.bat
生成的文件
构建完成后,在 target 目录会生成以下文件:
slms-gui.exe(约 50-80 MB) - 独立可执行文件,包含 JRE,无需安装 Javaslms-gui-installer.msi(约 50-80 MB) - Windows 标准安装程序,支持开始菜单快捷方式README-GUI-EXE.txt- EXE 版本使用说明README-GUI-MSI.txt- MSI 版本安装说明
详细文档
- GUI 安装包构建指南 - 详细的构建步骤和说明
- GUI 安装包快速参考 - 常用命令和故障排除
使用场景
EXE 版本适用于:
- 便携式使用(U盘运行)
- 无需安装的快速测试
- 单用户环境
MSI 版本适用于:
设计模式图示
项目包含以下PlantUML类图,展示了各种设计模式的实现:
single_responsibility_principle.puml: 单一职责原则类图open_closed_principle.puml: 开闭原则类图singleton_pattern.puml: 单例模式类图observer_pattern.puml: 观察者模式类图factory_pattern.puml: 工厂模式类图smart_library_system.puml: 系统综合类图
可以使用PlantUML工具将这些文件转换为图片格式。
系统功能
- 图书管理: 添加、查询、更新图书信息
- 借阅管理: 创建借阅记录、计算逾期罚款、管理归还
- 通知系统: 支持邮件、短信、应用内通知
- 状态监控: 实时监控图书状态变更并通知相关人员
扩展性
系统设计具有良好的扩展性:
- 新增通知方式: 实现
Notification接口即可 - 新增图书类型: 实现
BookFactory接口并注册到BookFactoryProvider - 新增观察者: 实现
BookStatusObserver接口并注册到BookStatusManager
总结
本项目通过实现智能图书管理系统,展示了多种设计模式的应用,包括单一职责原则、开闭原则、单例模式、观察者模式和工厂模式。系统遵循SOLID原则,具有良好的可维护性和扩展性。
Gitea中的Webhook触发器: http://localhost:8084/generic-webhook-trigger/invoke?token=gitaiops123
gitaiops123为Jenkins的Webhook Token,Secret text类型的Token,用于Jenkins的Webhook触发器。