学生请假管理系统通过Java实现,采用Student和LeaveRequest类封装数据,使用ArrayList存储并结合文件持久化。1. 设计Student类包含学号、姓名、班级;2. LeaveRequest类包含请假详情与状态;3. 用静态List管理学生和请假记录;4. 提供增、查、审批功能;5. 通过ObjectOutputStream保存对象到文件,启动时加载数据;6. 所有类实现Serializable接口支持序列化;7. main方法演示添加学生、提交请假、审批及保存流程。系统结构清晰,便于扩展数据库或界面功能。

学生请假管理系统是校园信息化中常见的小型应用,使用Java实现时,通过封装类和合理的数据存储方式,可以让系统结构清晰、易于维护。下面从类设计、数据存储两个方面,带你一步步实现一个基础但完整的请假管理系统。
学生与请假信息的封装类设计
在面向对象编程中,合理的类设计是系统稳定的基础。我们需要定义Student和LeaveRequest两个核心类。
● Student类:用于封装学生基本信息
包含学号、姓名、班级等属性,提供构造方法和getter/setter方法。
public class Student { private String studentId; private String name; private String className; public Student(String studentId, String name, String className) { this.studentId = studentId; this.name = name; this.className = className; } // getter 和 setter 方法 public String getStudentId() { return studentId; } public String getName() { return name; } public String getClassName() { return className; }}
● LeaveRequest类:封装请假记录
包含请假ID、学生对象、请假时间、原因、状态(如“待审批”、“已批准”)等。
立即学习“Java免费学习笔记(深入)”;
public class LeaveRequest { private int requestId; private Student student; private String startDate; private String endDate; private String reason; private String status; // "pending", "approved", "rejected" public LeaveRequest(int requestId, Student student, String startDate, String endDate, String reason) { this.requestId = requestId; this.student = student; this.startDate = startDate; this.endDate = endDate; this.reason = reason; this.status = "pending"; // 默认状态 } // getter 和部分 setter 方法 public int getRequestId() { return requestId; } public Student getStudent() { return student; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; }}
数据存储方案:内存集合 + 文件持久化
对于小型系统,可以先将数据存在内存的集合中,再通过Java的序列化或文本文件实现简单持久化。
● 使用ArrayList管理数据
定义两个静态列表来保存学生和请假记录:
怪兽智能全息舱
专业的AI数字人平台,定制数字人专属IP
16 查看详情
import java.util.ArrayList;import java.util.List;public class LeaveSystem { private static List students = new ArrayList(); private static List leaveRequests = new ArrayList(); private static int nextRequestId = 1;}
● 添加学生和请假记录的方法
提供添加学生的接口,并确保不重复添加学号相同的同学。
public static void addStudent(Student student) { if (students.stream().noneMatch(s -> s.getStudentId().equals(student.getStudentId()))) { students.add(student); } else { System.out.println("该学号已存在:" + student.getStudentId()); }}public static void submitLeave(LeaveRequest request) { leaveRequests.add(request); System.out.println("请假提交成功,编号:" + request.getRequestId());}
● 查询与审批功能
支持按学号查询请假记录,以及修改状态。
public static List getLeavesByStudent(String studentId) { return leaveRequests.stream() .filter(r -> r.getStudent().getStudentId().equals(studentId)) .toList();}public static void approveLeave(int requestId) { leaveRequests.stream() .filter(r -> r.getRequestId() == requestId) .findFirst() .ifPresent(req -> req.setStatus("approved"));}
简单的文件存储实现
为了重启程序后保留数据,可以用ObjectOutputStream保存对象到文件。
● 保存数据到文件
import java.io.*;public static void saveData() { try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.dat"))) { out.writeObject(students); out.writeObject(leaveRequests); System.out.println("数据已保存"); } catch (IOException e) { e.printStackTrace(); }}
● 启动时加载数据
public static void loadData() { File file = new File("data.dat"); if (!file.exists()) return; try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(file))) { students = (List) in.readObject(); leaveRequests = (List) in.readObject(); // 更新请求ID计数器 nextRequestId = leaveRequests.stream() .mapToInt(LeaveRequest::getRequestId) .max().orElse(0) + 1; } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); }}
注意:Student和LeaveRequest类需要实现Serializable接口才能被序列化。
运行示例
在main方法中初始化数据并测试流程:
public static void main(String[] args) { loadData(); Student s1 = new Student("S001", "张三", "高一1班"); addStudent(s1); LeaveRequest lr = new LeaveRequest(nextRequestId++, s1, "2024-04-01", "2024-04-03", "感冒"); submitLeave(lr); approveLeave(1); System.out.println("当前状态:" + lr.getStatus()); saveData();}
基本上就这些。通过封装类明确职责,用集合管理数据,辅以文件存储,就能构建出一个可运行的学生请假系统原型。后续可扩展数据库连接、图形界面或Web服务。
以上就是Java实现学生请假管理系统_封装类与数据存储实战的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/897822.html
微信扫一扫
支付宝扫一扫