10 KiB
Raw Permalink Blame History

基于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

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方法
}
  1. 测试运行
    • 测试数据库连接
    • 确保项目能够正常编译运行

完成标准

  • 项目结构完整,包含所有必要的目录
  • 成功导入所需的第三方库
  • 数据库表结构创建完成
  • 数据库连接配置正确
  • Student类实现完整包含所有必要的属性和方法
  • 项目可以正常编译运行

注意事项

  1. 建立项目时注意包结构的规范性
  2. 数据库字符集使用utf8mb4避免中文乱码
  3. 代码编写要规范,加上必要的注释
  4. 提交代码前进行本地测试,确保无编译错误

参考代码

util/DatabaseUtil.java

sql/init.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');