# 资产管理系统 — 软件架构设计文档 --- ## 封面 | 项目 | 内容 | |------|------| | 姓名 | (请填写) | | 学号 | (请填写) | | 课程名称 | Java程序设计与AI辅助编程 | | 作业名称 | Java全栈自主开发实践项目 | | 项目名称 | 资产管理系统(Asset Management System) | | 日期 | 2026年5月 | --- ## 一、项目概述 ### 1.1 项目背景 资产管理系统旨在为企业或机构提供一套完整的固定资产信息化管理解决方案,覆盖资产从入库、分类、借用、归还到报废的全生命周期管理。系统采用 Java + Swing + MySQL 技术栈实现,功能规模达到课堂车辆管理(租车)系统的 2-3 倍。 ### 1.2 项目目标 - 实现资产全生命周期的信息化管理 - 提供直观的数据可视化统计功能 - 建立完善的表单校验与业务规则约束 - 支持多用户角色与权限管理 - 满足课程对功能完整性、代码质量、文档配套的要求 ### 1.3 功能量级对比 | 对比维度 | 车辆管理系统 | 资产管理系统(本项目) | |----------|-------------|------------------------| | 实体表数量 | 3-4张 | 5张(用户、资产、分类、借用、报废) | | 核心功能模块 | 4-5个 | 8个(详见下方) | | 业务流程 | 租车/还车 | 借用/归还/报废/统计 | | 数据可视化 | 基础 | 多维度统计图表 | | 权限控制 | 基础登录 | 角色分级(管理员/普通用户) | | 表单校验 | 基础 | 全面校验+即时反馈 | --- ## 二、技术架构 ### 2.1 技术栈 | 层次 | 技术选型 | 说明 | |------|---------|------| | 表示层 | Java Swing | 桌面GUI,JFrame/JDialog/JTable等组件 | | 业务逻辑层 | Java SE | Service层封装业务规则与校验逻辑 | | 数据访问层 | JDBC | 原生JDBC连接MySQL,PreparedStatement防注入 | | 数据存储层 | MySQL 8.x | 关系型数据库,存储所有业务数据 | | 构建工具 | Maven | 依赖管理与项目构建 | | 可视化组件 | JFreeChart | 资产统计饼图/柱状图 | | 日期处理 | java.time | Java 8日期API | | 日志 | java.util.logging | JDK内置日志框架 | ### 2.2 架构模式 采用**经典三层架构(MVC变体)**: ``` ┌─────────────────────────────────────────────────┐ │ 表示层(View) │ │ Swing界面:登录/主界面/资产管理/借用管理/统计等 │ ├─────────────────────────────────────────────────┤ │ 业务逻辑层(Service) │ │ UserService / AssetService / BorrowService / │ │ CategoryService / DisposalService / StatService │ ├─────────────────────────────────────────────────┤ │ 数据访问层(DAO) │ │ UserDAO / AssetDAO / BorrowDAO / CategoryDAO / │ │ DisposalDAO(JDBC操作MySQL) │ ├─────────────────────────────────────────────────┤ │ 数据存储层(MySQL) │ │ asset_db: user / asset / category / borrow / │ │ disposal │ └─────────────────────────────────────────────────┘ ``` ### 2.3 架构设计原则 1. **单一职责原则**:每个类只负责一个功能模块 2. **分层解耦**:表示层不直接操作数据库,通过Service→DAO逐层调用 3. **接口隔离**:DAO层面向接口编程,便于扩展和测试 4. **统一异常处理**:自定义业务异常,全局异常处理机制 5. **连接池管理**:DBUtil统一管理数据库连接的获取与释放 --- ## 三、功能模块划分 ### 3.1 功能模块总览 ``` 资产管理系统 ├── 模块1:用户管理 │ ├── 用户登录 │ ├── 用户注册 │ ├── 修改密码 │ └── 角色权限(管理员/普通用户) ├── 模块2:资产分类管理 │ ├── 分类新增 │ ├── 分类修改 │ ├── 分类删除(含引用检查) │ └── 分类树形展示 ├── 模块3:资产管理(核心) │ ├── 资产录入 │ ├── 资产修改 │ ├── 资产删除 │ ├── 资产查询(多条件组合) │ └── 资产详情查看 ├── 模块4:资产借用管理 │ ├── 借用申请 │ ├── 借用审批(管理员) │ ├── 归还登记 │ └── 借用记录查询 ├── 模块5:资产报废管理 │ ├── 报废申请 │ ├── 报废审批(管理员) │ ├── 报废记录查询 │ └── 报废资产统计 ├── 模块6:数据统计与可视化 │ ├── 资产分类统计(饼图) │ ├── 资产状态统计(柱状图) │ ├── 借用频率统计 │ └── 资产价值统计 ├── 模块7:表单校验 │ ├── 必填项校验 │ ├── 格式校验(金额、日期、编号) │ ├── 唯一性校验(用户名、资产编号) │ └── 即时反馈提示 └── 模块8:系统管理 ├── 用户列表管理 ├── 操作日志记录 └── 系统参数配置 ``` ### 3.2 必备功能模块详细说明 #### 模块1:用户管理 | 功能 | 描述 | 优先级 | |------|------|--------| | 用户登录 | 用户名+密码登录,校验角色权限 | P0 | | 用户注册 | 填写用户名、密码、真实姓名,默认普通用户角色 | P0 | | 修改密码 | 旧密码验证后修改新密码 | P1 | | 角色权限 | 管理员可审批借用/报废、管理用户;普通用户可借用资产 | P0 | #### 模块2:资产分类管理 | 功能 | 描述 | 优先级 | |------|------|--------| | 分类新增 | 输入分类名称、描述,系统生成分类编号 | P0 | | 分类修改 | 修改分类名称、描述 | P0 | | 分类删除 | 检查该分类下是否有资产,有则禁止删除 | P0 | | 分类树形展示 | 以树形结构展示分类层级 | P1 | #### 模块3:资产管理 | 功能 | 描述 | 优先级 | |------|------|--------| | 资产录入 | 录入名称、分类、价值、购入日期、存放位置等 | P0 | | 资产修改 | 修改资产各项属性 | P0 | | 资产删除 | 仅可删除未被借用的资产 | P0 | | 资产查询 | 支持按名称/分类/状态/位置组合查询 | P0 | | 资产详情 | 查看资产完整信息及借用历史 | P1 | #### 模块4:资产借用管理 | 功能 | 描述 | 优先级 | |------|------|--------| | 借用申请 | 选择可用资产,填写借用原因、预计归还日期 | P0 | | 借用审批 | 管理员审批/拒绝借用申请 | P0 | | 归还登记 | 登记实际归还日期,更新资产状态 | P0 | | 借用记录 | 查询个人借用记录、全部借用记录 | P0 | #### 模块5:资产报废管理 | 功能 | 描述 | 优先级 | |------|------|--------| | 报废申请 | 选择资产,填写报废原因 | P0 | | 报废审批 | 管理员审批/拒绝报废申请 | P0 | | 报废记录 | 查询报废历史记录 | P1 | #### 模块6:数据统计与可视化 | 功能 | 描述 | 优先级 | |------|------|--------| | 分类统计饼图 | 按资产分类统计数量占比 | P0 | | 状态统计柱状图 | 按资产状态统计数量 | P0 | | 借用频率统计 | 统计资产借用次数排名 | P1 | | 价值统计 | 各分类资产价值汇总 | P1 | #### 模块7:表单校验 | 校验类型 | 描述 | 应用场景 | |----------|------|---------| | 必填校验 | 关键字段不能为空 | 所有表单 | | 格式校验 | 金额为正数、日期格式正确、编号格式 | 资产录入/借用/报废 | | 唯一性校验 | 用户名唯一、资产编号唯一 | 注册/资产录入 | | 即时反馈 | 输入时实时校验提示 | 所有表单 | #### 模块8:系统管理 | 功能 | 描述 | 优先级 | |------|------|--------| | 用户列表 | 管理员查看所有用户、修改角色、禁用账户 | P1 | | 操作日志 | 记录关键操作(登录、增删改) | P2 | --- ## 四、数据库表设计 ### 4.1 数据库概述 - 数据库名:`asset_db` - 字符集:`utf8mb4` - 排序规则:`utf8mb4_general_ci` - 引擎:InnoDB(支持事务) ### 4.2 E-R关系概览 ``` user(1) ──────< borrow(N) >────── asset(1) | category(1) ──────< asset(N) | | user(1) ──────< disposal(N) >────── asset(1) ``` ### 4.3 用户表(t_user) | 字段名 | 类型 | 约束 | 说明 | |--------|------|------|------| | id | INT | PK, AUTO_INCREMENT | 主键 | | username | VARCHAR(50) | UNIQUE, NOT NULL | 用户名 | | password | VARCHAR(100) | NOT NULL | 密码(MD5加密存储) | | real_name | VARCHAR(50) | NOT NULL | 真实姓名 | | role | VARCHAR(20) | NOT NULL, DEFAULT 'user' | 角色(admin/user) | | status | TINYINT | NOT NULL, DEFAULT 1 | 状态(1启用/0禁用) | | create_time | DATETIME | NOT NULL | 创建时间 | | update_time | DATETIME | | 更新时间 | **索引**:`idx_username` (username) ### 4.4 资产分类表(t_category) | 字段名 | 类型 | 约束 | 说明 | |--------|------|------|------| | id | INT | PK, AUTO_INCREMENT | 主键 | | category_code | VARCHAR(20) | UNIQUE, NOT NULL | 分类编号 | | category_name | VARCHAR(50) | NOT NULL | 分类名称 | | description | VARCHAR(200) | | 分类描述 | | create_time | DATETIME | NOT NULL | 创建时间 | | update_time | DATETIME | | 更新时间 | **索引**:`idx_category_code` (category_code) ### 4.5 资产表(t_asset) | 字段名 | 类型 | 约束 | 说明 | |--------|------|------|------| | id | INT | PK, AUTO_INCREMENT | 主键 | | asset_code | VARCHAR(30) | UNIQUE, NOT NULL | 资产编号 | | asset_name | VARCHAR(100) | NOT NULL | 资产名称 | | category_id | INT | FK, NOT NULL | 分类ID(关联t_category) | | status | VARCHAR(20) | NOT NULL, DEFAULT 'available' | 状态(available/borrowed/disposed) | | value | DECIMAL(12,2) | NOT NULL | 资产价值(元) | | purchase_date | DATE | NOT NULL | 购入日期 | | location | VARCHAR(100) | | 存放位置 | | description | VARCHAR(500) | | 资产描述 | | create_time | DATETIME | NOT NULL | 创建时间 | | update_time | DATETIME | | 更新时间 | **索引**:`idx_asset_code` (asset_code), `idx_category_id` (category_id), `idx_status` (status) ### 4.6 借用表(t_borrow) | 字段名 | 类型 | 约束 | 说明 | |--------|------|------|------| | id | INT | PK, AUTO_INCREMENT | 主键 | | asset_id | INT | FK, NOT NULL | 资产ID(关联t_asset) | | user_id | INT | FK, NOT NULL | 借用人ID(关联t_user) | | borrow_date | DATETIME | NOT NULL | 借用时间 | | expected_return_date | DATE | NOT NULL | 预计归还日期 | | actual_return_date | DATETIME | | 实际归还日期 | | reason | VARCHAR(200) | NOT NULL | 借用原因 | | status | VARCHAR(20) | NOT NULL, DEFAULT 'pending' | 状态(pending/approved/rejected/returned/overdue) | | approver_id | INT | FK | 审批人ID(关联t_user) | | approve_time | DATETIME | | 审批时间 | | approve_remark | VARCHAR(200) | | 审批备注 | | create_time | DATETIME | NOT NULL | 创建时间 | | update_time | DATETIME | | 更新时间 | **索引**:`idx_asset_id` (asset_id), `idx_user_id` (user_id), `idx_status` (status) ### 4.7 报废表(t_disposal) | 字段名 | 类型 | 约束 | 说明 | |--------|------|------|------| | id | INT | PK, AUTO_INCREMENT | 主键 | | asset_id | INT | FK, NOT NULL | 资产ID(关联t_asset) | | user_id | INT | FK, NOT NULL | 申请人ID(关联t_user) | | reason | VARCHAR(200) | NOT NULL | 报废原因 | | status | VARCHAR(20) | NOT NULL, DEFAULT 'pending' | 状态(pending/approved/rejected) | | approver_id | INT | FK | 审批人ID(关联t_user) | | approve_time | DATETIME | | 审批时间 | | approve_remark | VARCHAR(200) | | 审批备注 | | disposal_date | DATETIME | | 报废执行日期 | | create_time | DATETIME | NOT NULL | 创建时间 | | update_time | DATETIME | | 更新时间 | **索引**:`idx_asset_id` (asset_id), `idx_user_id` (user_id), `idx_status` (status) ### 4.8 外键约束 | 外键名 | 子表 | 子表字段 | 父表 | 父表字段 | |--------|------|---------|------|---------| | fk_asset_category | t_asset | category_id | t_category | id | | fk_borrow_asset | t_borrow | asset_id | t_asset | id | | fk_borrow_user | t_borrow | user_id | t_user | id | | fk_borrow_approver | t_borrow | approver_id | t_user | id | | fk_disposal_asset | t_disposal | asset_id | t_asset | id | | fk_disposal_user | t_disposal | user_id | t_user | id | | fk_disposal_approver | t_disposal | approver_id | t_user | id | --- ## 五、AI辅助开发规范 ### 5.1 AI辅助使用原则 1. **AI为辅,人为主**:AI生成代码仅作为参考和初稿,必须经过人工深度审查、优化和重构 2. **理解优先**:使用AI生成的代码前,必须完全理解其逻辑与实现方式 3. **质量把控**:AI生成代码需检查:命名规范、异常处理、SQL注入防护、业务逻辑正确性 4. **逐步验证**:每完成一个模块,立即编译运行验证,不堆积问题 ### 5.2 AI辅助开发流程 ``` 需求分析 → AI生成代码初稿 → 人工审查与优化 → 单元测试 → 集成验证 ``` ### 5.3 人工校验清单 | 校验项 | 校验内容 | |--------|---------| | 命名规范 | 类名大驼峰、方法名小驼峰、常量全大写下划线 | | 注释完整 | 类注释、方法注释、关键逻辑行内注释 | | 异常处理 | try-catch合理、异常信息明确、资源正确释放 | | SQL安全 | 使用PreparedStatement、参数化查询 | | 业务逻辑 | 边界条件、状态流转、并发场景 | | 代码风格 | 缩进统一、行宽控制、无冗余代码 | ### 5.4 禁止事项 - 禁止直接复制AI代码不做审查就提交 - 禁止使用AI生成未经理解的黑盒代码 - 禁止忽略AI代码中的安全隐患 - 禁止使用AI绕过课程要求的自主理解与实践 --- ## 六、课程及实践感悟 > (此处预留约500字的课程及实践感悟,待项目完成后填写) > > 感悟撰写方向建议: > 1. Java全栈开发过程中对面向对象思想的理解与深化 > 2. Swing桌面应用开发的经验与体会 > 3. JDBC直接操作数据库与ORM框架的对比思考 > 4. 三层架构设计对代码可维护性的实际影响 > 5. AI辅助编程的实际体验:效率提升与质量把控的平衡 > 6. 从需求分析到完整系统实现的全流程实践心得 > 7. 表单校验、异常处理等细节功能对系统健壮性的重要意义 > 8. 项目开发中遇到的典型问题及解决方案 --- ## 七、附录 ### 7.1 术语表 | 术语 | 说明 | |------|------| | CRUD | Create, Read, Update, Delete — 增删改查 | | DAO | Data Access Object — 数据访问对象 | | JDBC | Java Database Connectivity — Java数据库连接 | | MVC | Model-View-Controller — 模型-视图-控制器 | | MD5 | Message-Digest Algorithm 5 — 消息摘要算法 | ### 7.2 参考规范 - 《阿里巴巴Java开发手册》 - MySQL 8.0官方文档 - Java Swing官方教程 - JFreeChart开发指南 ### 7.3 版本记录 | 版本 | 日期 | 修改内容 | 修改人 | |------|------|---------|--------| | V1.0 | 2026-05-14 | 初始版本 | (请填写) |