基于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'); ```