|
|
# 智能图书管理系统 (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触发器。 |