|
|
# 智能图书管理系统 (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 或更高版本(可选)
|
|
|
|
|
|
### 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
|
|
|
```
|
|
|
|
|
|
## 设计模式图示
|
|
|
|
|
|
项目包含以下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触发器。 |