# 智能图书管理系统 (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目录中 #### 环境变量设置 ```bash # 设置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 1. **清理项目**: ```bash gradlew clean ``` 2. **编译项目**: ```bash gradlew build ``` 3. **运行测试**: ```bash gradlew test gradlew connectedAndroidTest ``` 4. **构建Debug APK**: ```bash gradlew assembleDebug ``` 生成的APK位置: `android/build/outputs/apk/debug/android-debug.apk` 5. **构建Release APK**: ```bash gradlew assembleRelease ``` 生成的APK位置: `android/build/outputs/apk/release/android-release-unsigned.apk` 6. **安装到设备/模拟器**: ```bash gradlew installDebug ``` ### 方式一:使用Maven(推荐) 1. 运行PowerShell脚本(Windows): ``` .\run_maven.ps1 ``` 2. 运行批处理脚本(Windows): ``` .\run_maven_en.bat ``` 3. 或者手动执行以下命令: ``` # 编译项目 mvn compile # 运行主程序 mvn exec:java -Dexec.mainClass="com.smartlibrary.SLMS" ``` 4. 运行测试: ``` # 使用PowerShell脚本 .\test_maven.ps1 # 使用批处理脚本 .\test_maven_en.bat # 或者手动执行命令 java -cp "target/classes;target/test-classes;lib/*" com.smartlibrary.test.DesignPatternsTest ``` ### 方式二:不使用Maven 1. 运行PowerShell脚本(Windows): ``` .\run.ps1 ``` 2. 运行批处理脚本(Windows): ``` run.bat ``` 3. 或者手动执行以下命令: ``` # 创建编译输出目录 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 ``` ### 运行测试 有以下几种方式运行测试: 1. 标准Maven命令(推荐): ```bash mvn test ``` 2. PowerShell脚本:`. est_maven.ps1` 3. 批处理脚本(英文系统):`. est_maven_en.bat` 4. 手动命令: ```bash java -cp "target/classes;target/test-classes;lib/*" com.smartlibrary.test.DesignPatternsTest ``` ### 生成 GUI 安装包(EXE 和 MSI) 本项目支持生成 Windows 平台的 GUI 应用安装包,包括独立可执行文件(EXE)和标准安装程序(MSI)。 #### 快速开始 1. **使用快速启动脚本**(推荐): ```bash build-installers.bat ``` 2. **使用完整脚本**: ```bash scripts\build-gui-installers.bat ``` 3. **测试生成的安装包**: ```bash scripts\test-installers.bat ``` #### 生成的文件 构建完成后,在 `target` 目录会生成以下文件: - `slms-gui.exe` (约 50-80 MB) - 独立可执行文件,包含 JRE,无需安装 Java - `slms-gui-installer.msi` (约 50-80 MB) - Windows 标准安装程序,支持开始菜单快捷方式 - `README-GUI-EXE.txt` - EXE 版本使用说明 - `README-GUI-MSI.txt` - MSI 版本安装说明 #### 详细文档 - [GUI 安装包构建指南](GUI_INSTALLER_BUILD_GUIDE.md) - 详细的构建步骤和说明 - [GUI 安装包快速参考](GUI_INSTALLER_QUICK_REFERENCE.md) - 常用命令和故障排除 #### 使用场景 **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工具将这些文件转换为图片格式。 ## 系统功能 1. **图书管理**: 添加、查询、更新图书信息 2. **借阅管理**: 创建借阅记录、计算逾期罚款、管理归还 3. **通知系统**: 支持邮件、短信、应用内通知 4. **状态监控**: 实时监控图书状态变更并通知相关人员 ## 扩展性 系统设计具有良好的扩展性: 1. **新增通知方式**: 实现`Notification`接口即可 2. **新增图书类型**: 实现`BookFactory`接口并注册到`BookFactoryProvider` 3. **新增观察者**: 实现`BookStatusObserver`接口并注册到`BookStatusManager` ## 总结 本项目通过实现智能图书管理系统,展示了多种设计模式的应用,包括单一职责原则、开闭原则、单例模式、观察者模式和工厂模式。系统遵循SOLID原则,具有良好的可维护性和扩展性。 Gitea中的Webhook触发器: http://localhost:8084/generic-webhook-trigger/invoke?token=gitaiops123 gitaiops123为Jenkins的Webhook Token,Secret text类型的Token,用于Jenkins的Webhook触发器。