You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
slms/docs/README.md

272 lines
8.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 智能图书管理系统 (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 TokenSecret text类型的Token用于Jenkins的Webhook触发器。