当前位置: 首页 > 新闻资讯  > 宿舍管理系统

用Java打造宿舍信息管理系统:从零开始的实战教程

本文通过实际代码讲解如何使用Java开发一个宿舍信息管理系统,涵盖数据库设计、类结构和功能实现。

哎呀,今天我来跟大家聊聊怎么用Java写一个宿舍信息管理系统。其实吧,这个系统说白了就是用来管理学生宿舍的信息,比如学生姓名、宿舍号、分配情况这些。听起来是不是挺简单的?但实际做起来还是有不少细节要处理的。不过别担心,我这就一步步带你们走一遍。

 

首先,咱们得确定一下这个系统的功能需求。你想想,一个宿舍管理系统应该有哪些功能呢?比如说添加学生信息、修改、删除、查询,还有可能需要统计一下每个宿舍的人数或者查看某个学生的住宿情况。这些都是基本的功能点。那我们就开始动手吧!

 

Java

先说说技术选型。既然用的是Java,那肯定要用到Java SE,也就是标准版的Java。至于数据库的话,我觉得用MySQL比较合适,毕竟它免费而且功能强大。另外,为了连接数据库,我们还需要JDBC驱动。当然,如果你不想用数据库的话,也可以用文件存储,不过对于实际项目来说,还是数据库更靠谱。

 

接下来是数据库的设计。我们需要建一张表来存学生的数据。表名就叫students吧。字段的话,至少要有id、name、room_number、gender、phone这些。id可以设置成自增的主键,这样每次添加新学生的时候就不需要手动输入了。room_number是宿舍号,gender是性别,phone是电话号码。这些字段都挺直观的。

 

那么在Java中,我们要怎么操作数据库呢?这时候就需要用到JDBC了。JDBC是Java Database Connectivity的缩写,它提供了一套接口,让Java程序能够和数据库进行交互。不过说实话,JDBC有点繁琐,写起来也比较麻烦。不过没关系,我们可以封装一下,让它变得更简单。

 

我们先创建一个Student类,用来表示一个学生对象。这个类里面应该有各个字段的属性,还有getter和setter方法。比如:

 

    public class Student {
        private int id;
        private String name;
        private String roomNumber;
        private String gender;
        private String phone;

        // 构造函数
        public Student() {}

        public Student(int id, String name, String roomNumber, String gender, String phone) {
            this.id = id;
            this.name = name;
            this.roomNumber = roomNumber;
            this.gender = gender;
            this.phone = phone;
        }

        // getter和setter
        public int getId() { return id; }
        public void setId(int id) { this.id = id; }

        public String getName() { return name; }
        public void setName(String name) { this.name = name; }

        public String getRoomNumber() { return roomNumber; }
        public void setRoomNumber(String roomNumber) { this.roomNumber = roomNumber; }

        public String getGender() { return gender; }
        public void setGender(String gender) { this.gender = gender; }

        public String getPhone() { return phone; }
        public void setPhone(String phone) { this.phone = phone; }
    }
    

 

这个Student类看起来是不是很基础?没错,这就是一个普通的POJO(Plain Old Java Object),没什么特别复杂的。接下来,我们需要一个数据库连接类,用来连接MySQL数据库。这里我写了一个DBUtil类,专门负责获取数据库连接。

 

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;

    public class DBUtil {
        private static final String URL = "jdbc:mysql://localhost:3306/dormitory?useSSL=false&serverTimezone=UTC";
        private static final String USER = "root";
        private static final String PASSWORD = "123456";

        public static Connection getConnection() {
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
                return DriverManager.getConnection(URL, USER, PASSWORD);
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
                return null;
            }
        }
    }
    

 

这里需要注意的是,你需要把URL中的数据库名称改成你自己的,比如“dormitory”,还有用户名和密码也要根据你的MySQL配置来改。如果你没装MySQL,或者不知道怎么配置,那就得先去安装一下,不然后面的代码根本跑不起来。

 

然后我们再来写一个StudentDAO类,用来操作数据库。这个类里面包括添加学生、查询学生、更新学生、删除学生等方法。我先写一个添加学生的方法:

 

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;

    public class StudentDAO {
        public boolean addStudent(Student student) {
            String sql = "INSERT INTO students (name, room_number, gender, phone) VALUES (?, ?, ?, ?)";
            try (Connection conn = DBUtil.getConnection();
                 PreparedStatement ps = conn.prepareStatement(sql)) {
                ps.setString(1, student.getName());
                ps.setString(2, student.getRoomNumber());
                ps.setString(3, student.getGender());
                ps.setString(4, student.getPhone());

                int rowsAffected = ps.executeUpdate();
                return rowsAffected > 0;
            } catch (SQLException e) {
                e.printStackTrace();
                return false;
            }
        }
    }
    

 

这个方法用到了PreparedStatement,避免SQL注入,是个好习惯。然后我们再写一个查询所有学生的功能:

 

    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;

    public class StudentDAO {
        public List getAllStudents() {
            List students = new ArrayList<>();
            String sql = "SELECT * FROM students";
            try (Connection conn = DBUtil.getConnection();
                 Statement stmt = conn.createStatement();
                 ResultSet rs = stmt.executeQuery(sql)) {

                while (rs.next()) {
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    String roomNumber = rs.getString("room_number");
                    String gender = rs.getString("gender");
                    String phone = rs.getString("phone");

                    Student student = new Student(id, name, roomNumber, gender, phone);
                    students.add(student);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return students;
        }
    }
    

 

这样我们就完成了基本的数据操作。接下来,我们可以写一个测试类,来验证这些功能是否正常工作。

 

    import java.util.List;

    public class Test {
        public static void main(String[] args) {
            StudentDAO dao = new StudentDAO();

            // 添加学生
            Student student = new Student();
            student.setName("张三");
            student.setRoomNumber("A101");
            student.setGender("男");
            student.setPhone("13812345678");

            boolean result = dao.addStudent(student);
            if (result) {
                System.out.println("学生添加成功!");
            } else {
                System.out.println("学生添加失败!");
            }

            // 查询所有学生
            List students = dao.getAllStudents();
            for (Student s : students) {
                System.out.println("ID: " + s.getId() + ", 姓名: " + s.getName() + ", 宿舍号: " + s.getRoomNumber() + ", 性别: " + s.getGender() + ", 电话: " + s.getPhone());
            }
        }
    }
    

 

运行一下这个Test类,看看输出结果对不对。如果一切顺利,就能看到学生被成功添加,并且能查到所有的学生信息了。

 

不过,这还只是最基础的部分。如果想做一个完整的系统,可能还需要加一些功能,比如按宿舍号查询、按姓名模糊搜索、修改学生信息、删除学生等等。这些功能其实也差不多,都是基于同样的数据库操作逻辑,只是SQL语句会有所不同。

 

比如,我们要按宿舍号查询,就可以写一个getStudentsByRoomNumber方法:

 

    public List getStudentsByRoomNumber(String roomNumber) {
        List students = new ArrayList<>();
        String sql = "SELECT * FROM students WHERE room_number = ?";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, roomNumber);

            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String gender = rs.getString("gender");
                String phone = rs.getString("phone");

                Student student = new Student(id, name, roomNumber, gender, phone);
                students.add(student);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return students;
    }
    

 

这样一来,用户就可以通过宿舍号来查找对应的住客了。

 

再说说界面的问题。目前我们写的都是控制台版本的,也就是说,用户只能通过命令行输入指令。如果想要一个图形界面,可以用Swing或者JavaFX来做。不过对于新手来说,控制台版本已经够用了,而且更容易理解。

 

如果你真的想做一个GUI版本,那就要考虑如何把业务逻辑和界面分离。比如,可以把StudentDAO类单独拿出来,作为数据访问层,而界面部分则负责接收用户的输入和显示结果。这样代码结构更清晰,也更容易维护。

 

另外,还可以加入一些异常处理,比如当用户输入的宿舍号不存在时,系统应该给出提示,而不是直接报错。或者当用户试图添加重复的学生信息时,也要做相应的判断。

 

总结一下,这个宿舍信息管理系统的核心思想就是:用Java连接数据库,通过JDBC操作数据,封装成类和方法,最后通过测试或界面展示功能。虽然看起来有点复杂,但其实只要一步步来,还是很好掌握的。

 

最后,我想说的是,不管做什么项目,都要注意代码的可读性和可维护性。不要写那种又长又乱的代码,而是尽量保持模块化,比如把数据库连接、数据操作、业务逻辑分开处理。这样以后别人接手或者自己回来看看,都能轻松理解。

 

所以,如果你现在正在学习Java,或者对系统开发感兴趣,不妨试着动手做一个小项目,比如这个宿舍信息管理系统。你会发现,学编程真的不是那么难,关键是要多实践,多思考。

 

好了,今天的分享就到这里。希望这篇文章能帮到你,也欢迎你在评论区留言,告诉我你有什么想法或者遇到什么问题。我们一起交流,一起进步!

相关资讯

    暂无相关的数据...