190 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

基于Java Swing的学生请假管理系统的设计和实现文档。文档内容包括项目结构、技术栈、功能特性、运行环境要求以及**第一天的项目框架搭建任务步骤**。
## 项目结构
```
AbsenceManager/
├── src/ # 源代码目录
│ ├── dao/ # 数据访问层
│ │ └── impl/ # DAO接口实现类
│ ├── service/ # 业务逻辑层
│ ├── model/ # 数据模型层
│ ├── gui/ # 图形界面层
│ └── util/ # 工具类
├── lib/ # 第三方依赖库
├── sql/ # 数据库相关文件
│ └── init.sql # 数据库初始化脚本
└── README.md # 项目说明文档
```
## 技术栈
- Java SE
- Java Swing (GUI界面)
- MySQL (数据库)
- JDBC (数据库连接)
## 功能特性
1. 用户管理
- 学生账号登录
- 教师账号登录
2. 请假申请
- 学生提交日常出校申请
- 支持多种请假类型(学习、就医、办事等)
- 自动计算请假时长
- 详细事由说明
3. 请假审批
- 教师查看待审批申请
- 按状态筛选(待审批、已通过、已拒绝)
- 教师审批处理
- 审批意见填写
4. 信息查询
- 学生查看个人请假记录
- 教师查看所有请假记录
- 按时间范围查询
- 按审批状态筛选
- 双击查看详细信息
5. 界面特性
- 简洁美观的Swing界面
- 表格化展示信息
- 详情对话框展示
## 运行环境要求
- JDK 8 或更高版本
- MySQL 5.7 或更高版本
- IDE推荐使用IntelliJ IDEA
## Day 1 - 项目框架搭建
### 任务步骤
1. 项目初始化
- 创建Java项目
- 建立项目目录结构src, lib, sql等参考“项目结构”部分
- 导入必要的第三方库mysql-connector-java.jar
2. 数据库配置
- 创建MySQL数据库absence_manager
- 运行sql/init.sql脚本创建表结构
- 配置数据库连接src/util/DatabaseUtil.java
3. 实现学生实体类model/Student.java
```java
public class Student {
private int id; // 数据库主键ID
private String studentId; // 学号
private String name; // 学生姓名
private String className; // 班级
private String contact; // 联系方式
private String college; // 学院
private String major; // 专业
private String password; // 登录密码
// 构造方法
// getter和setter方法
}
```
4. 测试运行
- 测试数据库连接
- 确保项目能够正常编译运行
### 完成标准
- [ ] 项目结构完整,包含所有必要的目录
- [ ] 成功导入所需的第三方库
- [ ] 数据库表结构创建完成
- [ ] 数据库连接配置正确
- [ ] Student类实现完整包含所有必要的属性和方法
- [ ] 项目可以正常编译运行
### 注意事项
1. 建立项目时注意包结构的规范性
2. 数据库字符集使用utf8mb4避免中文乱码
3. 代码编写要规范,加上必要的注释
4. 提交代码前进行本地测试,确保无编译错误
### 参考代码
#### util/DatabaseUtil.java
![](https://static.seahi.me/2024/12/202412171225346.png)
#### sql/init.sql
```sql
-- 创建数据库
CREATE DATABASE IF NOT EXISTS absence_manager DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE absence_manager;
-- 创建学生表
CREATE TABLE IF NOT EXISTS students (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id VARCHAR(20) UNIQUE NOT NULL, -- 学号
name VARCHAR(50) NOT NULL, -- 姓名
class_name VARCHAR(50) NOT NULL, -- 班级
contact VARCHAR(20), -- 联系方式
college VARCHAR(50) NOT NULL, -- 学院
major VARCHAR(50) NOT NULL, -- 专业
password VARCHAR(50) NOT NULL -- 密码
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生信息表';
-- 创建教师表
CREATE TABLE IF NOT EXISTS teachers (
id INT PRIMARY KEY AUTO_INCREMENT,
teacher_id VARCHAR(20) UNIQUE NOT NULL, -- 工号
name VARCHAR(50) NOT NULL, -- 姓名
department VARCHAR(50) NOT NULL, -- 部门
contact VARCHAR(20), -- 联系方式
password VARCHAR(50) NOT NULL -- 密码
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师信息表';
-- 创建请假申请表
CREATE TABLE IF NOT EXISTS leave_requests (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT NOT NULL, -- 关联学生ID
start_time DATETIME NOT NULL, -- 开始时间
end_time DATETIME NOT NULL, -- 结束时间
duration DECIMAL(5,2) NOT NULL, -- 时长
location VARCHAR(100) NOT NULL, -- 外出地址
reason_type VARCHAR(50) NOT NULL, -- 外出事由类型
reason_detail TEXT, -- 详细事由
is_leaving_city BOOLEAN DEFAULT FALSE, -- 是否离津
status VARCHAR(20) NOT NULL DEFAULT 'PENDING', -- 审批状态
approver_id INT, -- 审批人ID
approval_comment TEXT, -- 审批意见
request_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 申请时间
approval_time TIMESTAMP NULL, -- 审批时间
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (approver_id) REFERENCES teachers(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='请假申请表';
-- 插入示例数据
INSERT INTO students (student_id, name, class_name, contact, college, major, password) VALUES
('2023208145', '李同学', '云计算G23-1', '15842087237', '信息工程学院', '云计算技术应用', '123456'),
('2023208146', '张同学', '云计算G23-1', '15842087238', '信息工程学院', '云计算技术应用', '123456');
INSERT INTO teachers (teacher_id, name, department, contact, password) VALUES
('2023001', '王老师', '信息工程学院', '13912345678', '123456'),
('2023002', '李老师', '信息工程学院', '13912345679', '123456');
-- 插入请假申请示例数据
INSERT INTO leave_requests (student_id, start_time, end_time, duration, location, reason_type, reason_detail, is_leaving_city, status, approver_id, approval_comment, request_time) VALUES
(1, '2024-01-15 08:00:00', '2024-01-15 17:00:00', 9.00, '天津市河西区图书馆', '学习', '去图书馆学习准备考试', false, 'APPROVED', 1, '同意', '2024-01-14 10:00:00'),
(2, '2024-01-16 13:00:00', '2024-01-16 17:30:00', 4.50, '天津市南开医院', '就医', '牙科复诊', false, 'APPROVED', 1, '注意安全', '2024-01-15 09:30:00'),
(1, '2024-01-17 09:00:00', '2024-01-17 12:00:00', 3.00, '天津市档案馆', '办事', '办理个人档案', false, 'PENDING', null, null, '2024-01-16 16:20:00'),
(2, '2024-01-18 14:00:00', '2024-01-18 18:00:00', 4.00, '和平区文化中心', '活动', '参加志愿者活动', false, 'REJECTED', 2, '活动时间与课程冲突', '2024-01-17 11:15:00'),
(1, '2024-01-19 10:00:00', '2024-01-19 16:00:00', 6.00, '天津站', '返乡', '购买返乡车票', true, 'APPROVED', 2, '请注意防疫', '2024-01-18 14:40:00'),
(2, '2024-01-20 09:30:00', '2024-01-20 11:30:00', 2.00, '河西区人才市场', '求职', '参加招聘会', false, 'PENDING', null, null, '2024-01-19 17:00:00'),
(1, '2024-01-21 13:00:00', '2024-01-21 17:00:00', 4.00, '天津市第一中心医院', '就医', '例行体检', false, 'APPROVED', 1, '准假', '2024-01-20 10:25:00'),
(2, '2024-01-22 08:00:00', '2024-01-22 18:00:00', 10.00, '滨海新区图书馆', '实习', '企业实地考察', false, 'PENDING', null, null, '2024-01-21 15:30:00'),
(1, '2024-01-23 14:00:00', '2024-01-23 16:00:00', 2.00, '南开区政务中心', '办事', '办理身份证', false, 'APPROVED', 2, '同意', '2024-01-22 09:45:00'),
(2, '2024-01-24 09:00:00', '2024-01-24 18:00:00', 9.00, '天津市人民医院', '就医', '陪同父亲做检查', false, 'PENDING', null, null, '2024-01-23 16:50:00');
```