基于Java+Mysql实现(WEB)宿舍管理系统【100010016】

news2024/11/16 5:21:49

数据库实践课程之宿舍管理系统

一、系统需求分析

1.1 系统描述

随着社会的发展以及教育水平的提高,当今社会在校生的数量越来越庞大,使用传统的方式对学生的信息进行管理效率非常低下。在互联网技术高度发达的今天,使用数据库技术对学生的住宿信息进行管理能够使学校对学生信息的管理更加的高效,检索迅速,查找方便,可靠性高,存储量大。此外,使用数据库技术可以使得学生信息出错的可能性大大降低,还可以使学生住宿信息长时间稳定地保存,不易丢失。可见,开发出这样的一个数据库具有很强的显示意义。

1.2 数据存储需求

宿舍管理系统数据库需要存储如下信息:

  • 系统管理员的用户名,密码,真实姓名,性别,电话;
  • 宿管老师的的用户名,密码,真实姓名,性别,电话;
  • 学生的学号,用户名,密码,真实姓名,院系信息,性别,电话;
  • 宿舍楼的名称,类型;
  • 寝室的名称,大小,现居人数;
  • 学生缺寝的日期,原因,登记老师是谁;
  • 学生的当前状态(入住还是迁出),以及相应的登记时间。

各种数据之间的关系:

  • 寝室与学生是一对多的关系,一个寝室下可有多名学生;
  • 宿舍楼与寝室是一对多的关系,一栋宿舍楼下可有多个寝室;
  • 宿管老师与宿舍楼是多对多的关系,一个宿管老师可以负责多个宿舍楼,一个宿舍楼也可以由多个宿管老师负责;
  • 宿管老师与学生是多对多的关系,一个宿管老师可以负责多个学生的缺寝情况,一个学生也可以由多个宿管老师负责登记缺寝信息;
  • 系统管理员可以获取所有的数据信息,拥有最高的权限。

1.3 系统常做的查询与更新

经常做的查询,或许对创建索引有影响的:

  • 根据学生的入住状态,姓名,学号,院系,查询学生相关信息
  • 根据宿管老师的姓名,电话,查询宿管老师相关信息
  • 根据宿舍楼的名称,查询宿舍楼相关信息
  • 根据寝室所在楼宇,寝室号,寝室大小,现有人数,查询寝室相关信息

根据经常做的查询,需要创建有关视图的:

  • 学生信息 + 寝室信息视图
  • 宿舍楼信息 + 寝室信息视图

关于更新

  • 当有学生入住某一寝室时,需要使相应的寝室现有人数加一
  • 当有学生迁出某一寝室时,需要使相应的寝室现有人数减一
  • 当有学生调换寝室时,需要使原本的寝室现有人数减一,新的寝室现有人数加一
  • 学生只能入住还有空余位置的寝室

关于删除

  • 当删除某一寝室时,其中不能有学生入住

1.4 应用程序功能

前台的主要功能如下:

对于学生:

  • 登录以及退出系统。

  • 每个学生可以查看自己的缺寝记录。

对于宿管老师:

  • 登录以及退出系统。

  • 每个宿管老师可以查看自己负责的宿舍楼中学生的基本信息以及缺寝记录。

对于系统管理员:

  • 登录以及退出系统。
  • 查看宿管老师的基本信息。
  • 查看学生的基本信息以及缺寝记录。
  • 查看宿舍楼的基本信息。
  • 查看寝室的基本信息。

后台的主要功能如下:

对于学生:

  • 可以修改自己的密码。

对于宿管老师:

  • 可以修改自己的密码。

  • 可以对自己负责的宿舍楼中的学生添加缺寝记录。

对于系统管理员:

  • 可以修改自己的密码。
  • 可以添加,修改,删除宿管老师。
  • 可以添加新入住的学生,修改学生的基本信息,删除指定的学生。
  • 可以添加新的宿舍楼,修改宿舍楼的基本信息,查看每栋宿舍楼的负责老师,也可添加或移除每栋楼的负责老师。
  • 可以添加新的寝室,修改寝室的基本信息,删除指定的寝室。
  • 可以安排指定学生的寝室调换。
  • 可以迁出已经毕业的学生。
  • 可以查看所有指定学生的缺寝记录。

二、数据库概念设计

2.1 确定实体和属性

分析宿舍管理系统的系统需求,将系统中设计的人、物进行抽象,得到了系统的实体如下:

  • 系统管理员实体集。属性包括:管理员 ID,用户名,登录密码,真实姓名,性别,电话。
  • 宿管老师实体集。属性包括:宿管老师 ID,用户名,登录密码,真实姓名,性别,电话。
  • 学生实体集。属性包括:学生 ID 即学号,用户名,登录密码,真实姓名,院系信息,性别,电话。
  • 宿舍楼实体集。属性包括:宿舍楼 ID,宿舍楼名称,宿舍楼类型。
  • 寝室实体集。属性包括:寝室 ID,寝室名称,寝室大小,寝室现有人数。

2.2 E-R 图

系统 E-R 图如图 2-1 所示:
在这里插入图片描述

三、数据库逻辑结构设计

3.1 关系模式设计

根据概念结构设计得到的 E-R 图和转换规则,得到如下关系模式(主键用下划线标出,外键用蓝色标志并予以说明):

  • 系统管理员表(管理员 ID,用户名,登录密码,真实姓名,性别,电话)
  • 宿管老师表(宿管老师 ID,用户名,登录密码,真实姓名,性别,电话)
  • 学生表(学生 ID 即学号,用户名,登录密码,真实姓名,院系信息,性别,电话)
  • 宿舍楼表(宿舍楼 ID,宿舍楼名称,宿舍楼类型)
  • 寝室表(寝室 ID,寝室名称,寝室大小,寝室现有人数)
  • 缺寝记录表(缺寝记录 ID,被登记学生的 ID,登记老师的 ID,登记日期,缺寝原因)
  • 宿舍楼-寝室表(宿舍楼-寝室对 ID,宿舍楼 ID,寝室 ID)
  • 宿舍楼-教师表(宿舍楼-教师对 ID,宿舍楼 ID,教师 ID)
  • 寝室-学生表(寝室-学生对 ID,寝室 ID,学生 ID,学生入住状态,登记日期)

3.2 基本表设计

基本表设计如表 3-1~3-9 所示。

表 3-1:系统管理员表的设计

属性名数据类型是否可空列约束默认值解释
Admin_IDint主键管理员 ID
Admin_Usernamevarchar(30)unique用户名
Admin_Passwordvarchar(30)密码
Admin_Namevarchar(30)真实姓名
Admin_Sexvarchar(10)“男”或“女”性别
Admin_Telvarchar(30)电话

表 3-2:宿管老师表的设计

属性名数据类型是否可空列约束默认值解释
Teacher_IDint主键宿管老师 ID
Teacher _Usernamevarchar(30)unique用户名
Teacher _Passwordvarchar(30)密码
Teacher _Namevarchar(30)真实姓名
Teacher _Sexvarchar(10)“男”或“女”性别
Teacher _Telvarchar(30)电话

表 3-3:学生表的设计

属性名数据类型是否可空列约束默认值解释
Student_IDint主键学生 ID
Student _Usernamevarchar(30)unique用户名
Student _Passwordvarchar(30)密码
Student _Namevarchar(30)真实姓名
Student _Sexvarchar(10)“男”或“女”性别
Student _Telvarchar(30)电话
Student_Deptvarchar(30)院系

表 3-4:宿舍楼表的设计

属性名数据类型是否可空列约束默认值解释
Building_IDint主键宿舍楼 ID
Building _Namevarchar(30)名称
Building _Typevarchar(30)“男生宿舍”或“女生宿舍”类型

表 3-5:寝室表的设计

属性名数据类型是否可空列约束默认值解释
Dormitory_IDint主键寝室 ID
Dormitory _Namevarchar(30)名称
Dormitory _Sizeint大小
Dormitory_Nowint0现有人数

表 3-6:缺寝记录表的设计

属性名数据类型是否可空列约束默认值解释
Log_IDint主键ID
Log _StudentIDint外键参考学生表学生 ID
Log _TeacherIDint外键参考宿管老师表老师 ID
Log _Datevarchar(30)登记日期
Log_Reasonvarchar(255)缺寝原因

表 3-7:宿舍楼-寝室表的设计

属性名数据类型是否可空列约束默认值解释
DB_IDint主键ID
DB_DormitoryIDint外键参考寝室表寝室 ID
DB_BuildingIDint外键参考宿管老师表宿舍楼 ID

表 3-8:宿舍楼-教师表的设计

属性名数据类型是否可空列约束默认值解释
TB_IDint主键ID
TB_TeacherIDint外键参考宿管老师表教师 ID
TB_BuildingIDint外键参考宿舍楼表宿舍楼 ID

表 3-9:寝室-学生表的设计

属性名数据类型是否可空列约束默认值解释
SD_IDint主键ID
SD_StudentIDint外键参考宿管老师表教师 ID
SD_DormitoryIDint外键参考宿舍楼表宿舍楼 ID
SD_Statevarchar(30)“入住”或“迁出”学生入住状态
SD_Datevarchar(30)登记日期

四、数据库物理设计和实施

4.1 数据库的创建

使用 Navicat for MySQL 建立寝室管理系统的数据库,数据库基本信息如下:

表 4-1:寝室管理系统的数据库参数表

选项参数
数据库名称dormitory
物理文件名dormitory.sql

4.2 创建基本表

CREATE TABLE `admin` (
    `Admin_ID` int(11) NOT NULL AUTO_INCREMENT,
    `Admin_Username` varchar(30) NOT NULL,
    `Admin_Password` varchar(30) NOT NULL,
    `Admin_Name` varchar(30) NOT NULL,
    `Admin_Sex` varchar(10) DEFAULT NULL,
    `Admin_Tel` varchar(30) DEFAULT '',
    PRIMARY KEY (`Admin_ID`),
    UNIQUE KEY `Admin_Username` (`Admin_Username`)
    ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
    CREATE TABLE `building` (
        `Building_ID` int(11) NOT NULL AUTO_INCREMENT,
        `Building_Name` varchar(30) NOT NULL,
        `Building_Type` varchar(30) NOT NULL,
        PRIMARY KEY (`Building_ID`)
        ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4;
        CREATE TABLE `dormitory` (
            `Dormitory_ID` int(11) NOT NULL AUTO_INCREMENT,
            `Dormitory_Name` varchar(30) NOT NULL,
            `Dormitory_Size` int(11) NOT NULL,
            `Dormitory_Now` int(10) unsigned zerofill NOT NULL DEFAULT '0000000000',
            PRIMARY KEY (`Dormitory_ID`)
            ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4;
            CREATE TABLE `dor_bui` (
                `DB_ID` int(11) NOT NULL AUTO_INCREMENT,
                `DB_DormitoryID` int(11) NOT NULL,
                `DB_BuildingID` int(11) NOT NULL,
                PRIMARY KEY (`DB_ID`),
                KEY `DB_DormitoryID` (`DB_DormitoryID`),
                KEY `DB_BuildingID` (`DB_BuildingID`),
                CONSTRAINT `dor_bui_ibfk_1` FOREIGN KEY (`DB_DormitoryID`) REFERENCES `dormitory` (`Dormitory_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
                CONSTRAINT `dor_bui_ibfk_2` FOREIGN KEY (`DB_BuildingID`) REFERENCES `building` (`Building_ID`) ON DELETE CASCADE ON UPDATE CASCADE
                ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4;
                CREATE TABLE `log` (
                    `Log_ID` int(11) NOT NULL AUTO_INCREMENT,
                    `Log_StudentID` int(11) NOT NULL,
                    `Log_Date` varchar(30) NOT NULL,
                    `Log_Reason` varchar(255) NOT NULL,
                    `Log_TeacherID` int(11) DEFAULT NULL,
                    PRIMARY KEY (`Log_ID`),
                    KEY `absence_ibfk_1` (`Log_StudentID`),
                    KEY `Log_TeacherID` (`Log_TeacherID`),
                    CONSTRAINT `log_ibfk_1` FOREIGN KEY (`Log_StudentID`) REFERENCES `student` (`Student_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
                    CONSTRAINT `log_ibfk_2` FOREIGN KEY (`Log_TeacherID`) REFERENCES `teacher` (`Teacher_ID`)
                    ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4;
                    CREATE TABLE `student` (
                        `Student_ID` int(11) NOT NULL AUTO_INCREMENT,
                        `Student_Username` varchar(30) NOT NULL,
                        `Student_Password` varchar(30) NOT NULL,
                        `Student_Name` varchar(30) NOT NULL,
                        `Student_Dept` varchar(30) DEFAULT NULL,
                        `Student_Tel` varchar(30) DEFAULT NULL,
                        `Student_Sex` varchar(10) DEFAULT NULL,
                        PRIMARY KEY (`Student_ID`),
                        UNIQUE KEY `Student_Username` (`Student_Username`)
                        ENGINE=InnoDB AUTO_INCREMENT=71 DEFAULT CHARSET=utf8mb4;
                        CREATE TABLE `stu_dor` (
                            `SD_ID` int(11) NOT NULL AUTO_INCREMENT,
                            `SD_StudentID` int(11) NOT NULL,
                            `SD_DormitoryID` int(11) NOT NULL,
                            `SD_State` varchar(30) NOT NULL,
                            `SD_Date` varchar(30) NOT NULL,
                            PRIMARY KEY (`SD_ID`),
                            KEY `SD_StudentID` (`SD_StudentID`),
                            KEY `SD_DormitoryID` (`SD_DormitoryID`),
                            CONSTRAINT `stu_dor_ibfk_1` FOREIGN KEY (`SD_StudentID`) REFERENCES `student` (`Student_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
                            CONSTRAINT `stu_dor_ibfk_2` FOREIGN KEY (`SD_DormitoryID`) REFERENCES `dormitory` (`Dormitory_ID`) ON DELETE CASCADE ON UPDATE CASCADE
                            ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8mb4;
                            CREATE TABLE `teacher` (
                                `Teacher_ID` int(11) NOT NULL AUTO_INCREMENT,
                                `Teacher_Username` varchar(30) NOT NULL,
                                `Teacher_Password` varchar(30) NOT NULL,
                                `Teacher_Name` varchar(30) NOT NULL,
                                `Teacher_Sex` varchar(10) DEFAULT NULL,
                                `Teacher_Tel` varchar(30) DEFAULT NULL,
                                PRIMARY KEY (`Teacher_ID`),
                                UNIQUE KEY `Teacher_Username` (`Teacher_Username`)
                                ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;
                                CREATE TABLE `tea_bui` (
                                    `TB_ID` int(11) NOT NULL AUTO_INCREMENT,
                                    `TB_TeacherID` int(11) NOT NULL,
                                    `TB_BuildingID` int(11) NOT NULL,
                                    PRIMARY KEY (`TB_ID`),
                                    KEY `tea_bui_ibfk_1` (`TB_TeacherID`),
                                    KEY `tea_bui_ibfk_2` (`TB_BuildingID`),
 CONSTRAINT `tea_bui_ibfk_1` FOREIGN KEY (`TB_TeacherID`) REFERENCES `teacher` (`Teacher_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `tea_bui_ibfk_2` FOREIGN KEY (`TB_BuildingID`) REFERENCES `building` (`Building_ID`) ON DELETE CASCADE ON UPDATE CASCADE
ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4;

4.3 触发器设计

当有新的学生入住时,对应的寝室现有人数要加一:

CREATE TRIGGER stu_dor_insert_after_trigger after insert
ON stu_dor FOR EACH ROW
BEGIN
update dormitory set Dormitory_Now=Dormitory_Now+1 where Dormitory_ID=new.SD_DormitoryID;
end;

4.4 视图设计

学生信息 + 寝室信息视图:

create view stu_dor_view as
select * from Student, stu_dor, Dormitory
where SD_StudentID=Student_ID and SD_DormitoryID=Dormitory_ID;

宿舍楼信息 + 寝室信息视图:

create view dor_bui_view as
select * from Dormitory,Building,dor_bui where Dormitory_ID=DB_DormitoryID and Building_ID=DB_BuildingID;

五、应用程序设计

5.1 开发及运行环境介绍

  • 系统使用的开发工具是 MyEclipse 2017,Navicat for MySQL
  • 运行环境是 Tomcat v8.5
  • 开发采用 Struts2 + JavaBean + JSP + MySQL 的实现方式
  • 测试浏览器为 Chrome 和 MyEclipse 内置浏览器

5.2 主要功能设计

  • 登录身份共有三种:系统管理员,宿管老师,学生。输入用户名、密码和身份之后,判断是否和数据库中记录相符。如果用户名和密码正确,那么根据不同身份进入不同子界面。其中用到的权限控制代码段如下:
public String execute() throws Exception {
    if(Type.equals("系统管理员"))
    {
        if (null == new AdminDao().CheckLogin(Username, Password)) {
            Msg = "用户名或者密码错误";
            return INPUT;
        }
        else
        {
//获取ID
            String Admin_ID = new AdminDao().CheckLogin(Username, Password);
//创建session
            HttpSession session = ServletActionContext.getRequest().getSession();
            session.setAttribute("id", Admin_ID);
            session.setAttribute("type", "1");
            return SUCCESS;
        }
    }
    else if(Type.equals("宿管老师"))
    {
        if (null == new TeacherDao().CheckLogin(Username, Password)) {
            Msg = "用户名或者密码错误";
            return INPUT;
        }
        else
        {
//获取ID
            String Teacher_ID=new TeacherDao().CheckLogin(Username, Password);
//创建session
            HttpSession session = ServletActionContext.getRequest().getSession();
            session.setAttribute("id", Teacher_ID);
            session.setAttribute("type", "2");
            return SUCCESS;
        }
    }
    else if(Type.equals("学生"))
    {
        if (null == new StudentDao().CheckLogin(Username, Password)) {
            Msg = "用户名或者密码错误";
            return INPUT;
        }
        else
        {
//获取ID
            String Student_ID=new StudentDao().CheckLogin(Username, Password);
//创建session
            HttpSession session = ServletActionContext.getRequest().getSession();
            session.setAttribute("id", Student_ID);
            session.setAttribute("type", "3");
            return SUCCESS;
        }
    }
    else
    {
        Msg = "身份类型错误";
        return INPUT;
    }
}
  • 管理员界面提供各种增删改查功能,针对的对象包括学生,宿管老师,宿舍楼,寝室。点击各个功能后会进入对应的子界面。输入需要的参数之后,点击按钮即可完成操作。
<%if(session.getAttribute("type").toString().equals("1")) {
    %>
    <li><a href="TeacherManager.action">宿管老师管理</a></li>
                <li><a href="StudentManager.action">学生管理</a></li>
                            <li><a href="BuildingManager.action">楼宇管理</a></li>
                                        <li><a href="DormitoryManager.action">宿舍管理</a></li>
                                                <li><a href="StudentRZ.action">学生入住登记</a></li>
                                                        <li><a href="StudentDH.jsp">学生寝室调换</a></li>
                                                                <li><a href="StudentQC.jsp">学生迁出登记</a></li>
                                                                        <li><a href="AdminLog.action">学生缺寝记录</a></li>
                                                                                <%
}%>
  • 教师界面和管理员类似,不过只提供了对学生缺寝记录的添加和查询操作。
<%if(session.getAttribute("type").toString().equals("2")) {
    %>
    <li><a href="MyStudent.action">学生管理</a></li>
                <li><a href="MyLog.action">学生缺寝记录</a></li>
                            <%
}%>
  • 学生界面只提供了查询自己缺寝记录的功能。
<%if(session.getAttribute("type").toString().equals("3")) {
    %>
    <li><a href="StudentLog.action">我的缺寝记录</a></li>
                <%
}%>
  • 下面展示关于教师增删改查的代码,其余类似:
//获取列表
public List<TeacherBean> GetList(String strwhere,String strorder) {
    String sql="select * from Teacher";
    if(!(isInvalid(strwhere)))
    {
        sql+=" where "+strwhere;
    }
    if(!(isInvalid(strorder)))
    {
        sql+=" order by "+strorder;
    }
    Statement stat = null;
    ResultSet rs = null;
    Connection conn = new DBHelper().getConn();
    List<TeacherBean> list=new ArrayList<TeacherBean>();
    try {
        stat = conn.createStatement();
        rs = stat.executeQuery(sql);
        while(rs.next()) {
            TeacherBean cnbean=new TeacherBean();
            cnbean.setTeacher_ID(rs.getInt("Teacher_ID"));
            cnbean.setTeacher_Username(rs.getString("Teacher_Username"));
            cnbean.setTeacher_Password(rs.getString("Teacher_Password"));
            cnbean.setTeacher_Name(rs.getString("Teacher_Name"));
            cnbean.setTeacher_Sex(rs.getString("Teacher_Sex"));
            cnbean.setTeacher_Tel(rs.getString("Teacher_Tel"));
            list.add(cnbean);
        }
    } catch (SQLException e) {
        printStackTrace();
    }
    finally {
        try {
            if (conn != null)
                conn.close();
            if (stat != null)
                stat.close();
            if (rs != null)
                rs.close();
        } catch (SQLException e) {
            printStackTrace();
        }
    }
    return list;
}
//获取指定ID的实体Bean
public TeacherBean GetBean(int id) {
    String sql="select * from Teacher where Teacher_ID="+id;
    Statement stat = null;
    ResultSet rs = null;
    Connection conn = new DBHelper().getConn();
    TeacherBean cnbean=new TeacherBean();
    try {
        stat = conn.createStatement();
        rs = stat.executeQuery(sql);
        while(rs.next()) {
            cnbean.setTeacher_ID(rs.getInt("Teacher_ID"));
            cnbean.setTeacher_Username(rs.getString("Teacher_Username"));
            cnbean.setTeacher_Password(rs.getString("Teacher_Password"));
            cnbean.setTeacher_Name(rs.getString("Teacher_Name"));
            cnbean.setTeacher_Sex(rs.getString("Teacher_Sex"));
            cnbean.setTeacher_Tel(rs.getString("Teacher_Tel"));
        }
    } catch (SQLException e) {
        printStackTrace();
    }
    finally {
        try {
            if (conn != null)
                conn.close();
            if (stat != null)
                stat.close();
            if (rs != null)
                rs.close();
        } catch (SQLException e) {
            printStackTrace();
        }
    }
    return cnbean;
}
//添加
public void Add(TeacherBean cnbean) {
    String sql="insert into Teacher (";
    sql+="Teacher_Username,Teacher_Password,Teacher_Name,Teacher_Sex,Teacher_Tel";
    sql+=") values(";
    sql+="'"+cnbean.getTeacher_Username()+"','"+cnbean.getTeacher_Password()+"','"+cnbean.getTeacher_Name()+"','"+cnbean.getTeacher_Sex()+"','"+cnbean.getTeacher_Tel()+"'";
    sql+=")";
    Statement stat = null;
    ResultSet rs = null;
    Connection conn = new DBHelper().getConn();
    try {
        stat = conn.createStatement();
        stat.executeUpdate(sql);
    } catch (SQLException e) {
        printStackTrace();
    }
    finally {
        try {
            if (conn != null)
                conn.close();
            if (stat != null)
                stat.close();
            if (rs != null)
                rs.close();
        } catch (SQLException e) {
            printStackTrace();
        }
    }
}
//修改
public void Update(TeacherBean cnbean) {
    String sql="update Teacher set ";
    sql+="Teacher_Username='"+cnbean.getTeacher_Username()+"',";
    sql+="Teacher_Password='"+cnbean.getTeacher_Password()+"',";
    sql+="Teacher_Name='"+cnbean.getTeacher_Name()+"',";
    sql+="Teacher_Sex='"+cnbean.getTeacher_Sex()+"',";
    sql+="Teacher_Tel='"+cnbean.getTeacher_Tel()+"'";
    sql+=" where Teacher_ID='"+cnbean.getTeacher_ID()+"'";
    Statement stat = null;
    ResultSet rs = null;
    Connection conn = new DBHelper().getConn();
    try {
        stat = conn.createStatement();
        stat.executeUpdate(sql);
    } catch (SQLException e) {
        printStackTrace();
    }
    finally {
        try {
            if (conn != null)
                conn.close();
            if (stat != null)
                stat.close();
            if (rs != null)
                rs.close();
        } catch (SQLException e) {
            printStackTrace();
        }
    }
}
//删除
public void Delete(String strwhere) {
    String sql="delete from Teacher where ";
    sql+=strwhere;
    Statement stat = null;
    ResultSet rs = null;
    Connection conn = new DBHelper().getConn();
    try {
        stat = conn.createStatement();
        stat.executeUpdate(sql);
    } catch (SQLException e) {
        printStackTrace();
    }
    finally {
        try {
            if (conn != null)
                conn.close();
            if (stat != null)
                stat.close();
            if (rs != null)
                rs.close();
        } catch (SQLException e) {
            printStackTrace();
        }
    }
}

5.3 主要界面

登录界面如图 5-1 所示。用户名或密码为空时点击登录会有提醒。登陆失败时也会有提醒如图 5-2 所示。

​ 图 5-1 登陆界面

​ 图 5-2 登陆失败界面

以管理员身份登录后的主界面如图 5-3 所示,左侧为导航栏:

​ 图 5-3 管理员主界面

管理员可以查看宿管老师列表,如图 5-4 所示,有分页和模糊查询功能:

在这里插入图片描述

​ 图 5-4 宿管老师列表界面

管理员可以添加宿管老师,如图 5-5 所示:

​ 图 5-5 添加宿管老师界面

管理员可以修改宿管老师的基本信息,如图 5-6 所示:

​ 图 5-6 修改宿管老师界面

删除宿管老师时,会弹出确认框,如图 5-7 所示:

​ 图 5-7 删除宿管老师界面

管理员可以查看学生列表,如图 5-8 所示,有分页和模糊查询功能:

​ 图 5-8 学生列表界面

管理员可以添加入住学生,如图 5-9 所示:

​ 图 5-9 学生入住登记界面

管理员可以修改学生的基本信息,如图 5-10 所示:

​ 图 5-10 修改学生界面

删除学生时,会弹出确认框,如图 5-11 所示:

​ 图 5-11 删除学生界面

管理员可以查看宿舍楼列表,如图 5-12 所示,有分页和模糊查询功能:

​ 图 5-12 宿舍楼列表界面

管理员可以添加宿舍楼,如图 5-13 所示:

​ 图 5-13 添加宿舍楼界面

管理员可以查看负责某一宿舍楼的宿管老师,并能进行添加和删除操作,如图 5-14 所示:

​ 图 5-14 宿舍楼负责老师列表界面

管理员可以修改宿舍楼的基本信息,如图 5-15 所示:

​ 图 5-15 修改宿舍楼界面

管理员可以查看宿舍列表,如图 5-16 所示,有分页和模糊查询功能:

​ 图 5-16 宿舍列表界面

管理员可以添加宿舍,如图 5-17 所示:

​ 图 5-17 添加宿舍界面

管理员可以修改宿舍的基本信息,如图 5-18 所示:

​ 图 5-18 修改宿舍界面

删除宿舍时,会弹出确认框,如图 5-19 所示:

​ 图 5-19 删除宿舍界面

管理员可以调换学生的宿舍,如图 5-20,5-21 所示:

​ 图 5-20 调换学生宿舍界面 1

​ 图 5-21 调换学生宿舍界面 2

管理员可以迁出学生,如图 5-22,5-23 所示:

​ 图 5-22 迁出学生界面 1

​ 图 5-23 迁出学生界面 2

管理员可以查看学生的缺寝记录,如图 5-24,5-25 所示:

​ 图 5-24 查看学生的缺寝记录界面 1

​ 图 5-25 查看学生的缺寝记录界面 2

管理员可以修改自己的密码,如图 5-26 所示,宿管老师和学生也有同样的功能,后面不再赘述:

​ 图 5-26 修改密码界面

管理员可以退出系统,如图 5-27 所示,宿管老师和学生也有同样的功能,后面不再赘述:

​ 图 5-27 退出系统界面

以宿管老师身份登录后,可以进行学生管理,如图 5-28,5-29 所示,有分页和模糊查询功能:

​ 图 5-28 学生管理界面 1

​ 图 5-29 学生管理界面 2

宿管老师可以针对某一学生进行缺寝登记:

​ 图 5-30 学生缺寝登记界面

宿管老师可以查看自己负责的学生的缺寝记录,如图 5-31,5-32 所示,有分页和模糊查询功能:

​ 图 5-31 学生缺寝记录界面 1

​ 图 5-32 学生缺寝记录界面 2

以学生身份登录后,可以查看自己的缺寝记录,有分页功能,如图 5-33 所示:

图 5-33 学生查看自己缺寝记录界面

♻️ 资源

在这里插入图片描述
大小: 6.53MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87247986

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go 实现希尔排序算法及图解

耐心和持久胜过激烈和狂热。 哈喽大家好&#xff0c;我是陈明勇&#xff0c;今天分享的内容是使用 Go 实现希尔排序算法。如果本文对你有帮助&#xff0c;不妨点个赞&#xff0c;如果你是 Go 语言初学者&#xff0c;不妨点个关注&#xff0c;一起成长一起进步&#xff0c;如果本…

游戏开发51课 性能优化9

4.5 光照模型&#xff08;Lighting/Illumination Model&#xff09; 4.5.1 Flat Shading&#xff08;平面着色&#xff09; 根据表面法向量计算光照&#xff0c;并应用到整个面片上。速度最快&#xff0c;效果最差&#xff0c;容易暴露物体的多边形本质&#xff08;下图&…

微服务框架 SpringCloud微服务架构 29 ES 集群 29.4 分布式新增和查询流程

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构29 ES 集群29.4 分布式新增和查询流程29.4.1 ES集群的分布式存储29.4.2 总…

鸿蒙手机卸载内置应用 adb连接

鸿蒙手机傻瓜式卸载内置应用 adb连接**傻瓜式删除鸿蒙系统内置应用&#xff0c;自己亲测有效。**准备物品准备软件准备工作教程开始&#xff1a;第一步第二步完成包名列表一般软件谷歌服务格外的注意连接错误**鸣谢**傻瓜式删除鸿蒙系统内置应用&#xff0c;自己亲测有效。 准…

缓存数据丢了,原来是Redis持久化没玩明白

&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3; &#x1f38d;大家好&#xff0c;我是慕枫 &#x1f38d;前阿里巴巴高级工程师&#xff0c;InfoQ签约作者、阿里云专家博主&#xff0c;一直致力于用大白话讲解技术知识 &#x…

Windows下MySQL5.5升级5.7(或直接安装MySQL5.7)

Windows下MySQL5.5升级5.7&#xff08;或直接安装MySQL5.7&#xff09; 1、关闭MySQL服务&#xff1a; Ctrl shift Esc找到服务&#xff0c;找到下面的MySQL服务&#xff0c;停止服务。 2、卸载程序&#xff1a; 控制面板中卸载mysql5.5。 3、删除mysql5.5的安装目录及注…

Linux文件操作

文章目录前言什么是文件文件操作C语言文件操作接口文件操作系统调用接口文件描述符如何理解FILE和文件描述符的关系前言 本文主要介绍的是Linux系统下的文件操作和Linux的文件系统的机制&#xff0c;希望能够通过本文来增加读者对于文件操作的基本使用和理解。以及了解Linux系…

【大数据入门核心技术-Ambari】(一)Ambari介绍

一、什么是Ambari Apache Ambari是一种基于Web的工具&#xff0c;支持Apache Hadoop集群的供应、管理和监控。Ambari已支持大多数Hadoop组件&#xff0c;包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等。 Apache Ambari 支持HDFS、MapReduce、Hive、Pi…

C语言宏和预处理

C语言宏和预处理【1】include【2】【#pragma】【3】C #include【4】# 和 ## 操作符【5】宏替换【6】#line【7】#error【8】#undef【9】源码【10】结果【1】include #include本命令包含一个文件并在当前位置插入.一般尖括号意味着在标准库目录中搜索, #include “filename” 引…

【C语言与汇编】简单学学C到汇编代码

C语言与汇编 部分过程可参考C primer plus 本书余下的篇幅讨论源代码文件中的内容&#xff1b;本节讨论创建源代码文 件的技巧。有些C实现&#xff08;如Microsoft Visual C、Embarcadero C Builder、Apple Xcode、Open Watcom C、Digital Mars C和Freescale CodeWarrior&…

精品基于SSM的民宿预订管理系统

《民宿预订管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 使用技术&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;my…

云原生事件驱动框架(KnativeEventing)

事件驱动是指事件在持续事务管理过程中&#xff0c;进行决策的一种策略。可以通过调动可用资源执行相关任务&#xff0c;从而解决不断出现的问题。通俗地说是当用户触发使用行为时对用户行为的响应。在 Serverless 场景下&#xff0c;事件驱动完美符合其设计初衷之一&#xff1…

基于xv6的Copy-On-Write

为什么需要写时拷贝呢&#xff1f; 当 shell执行指令的时候会 fork()&#xff0c;而这个 fork()出来的进程首先会调用的就是 exec来执行对应的命令&#xff0c;如果我们将 fork()创建的进程对地址空间进行了完整的拷贝,那将是一个巨大的消耗 因为在实际应用中&#xff0c;for…

SSM项目整合

文章目录1. 导入依赖2. 配置web.xml文件3. 编写springmvc.xml配置文件4. 编写spring.xml配置文件5. 编写项目整体业务逻辑6. 开发过程中常见状态码错误1. 导入依赖 在整合SSM项目时&#xff0c;需要导入以下依赖 Spring 相关依赖 &#xff08;springmvc相关、事务相关、spring…

凤姐从国外回来会再次爆红吗?她最近的一段话发人深省

随着互联网的发展&#xff0c;也诞生了很多的网红&#xff0c;其实现如今的众多网红&#xff0c;和凤姐比起来都是小巫见大巫。凤姐原名叫罗玉凤&#xff0c;当年因为参加各种选秀节目&#xff0c;再加上鬼使神差语无伦次的言谈&#xff0c;让她一夜之间爆红了网络。 其实当我们…

Pandas统计计数value_counts()的使用

value_counts()方法返回一个序列Series&#xff0c;该序列包含每个值的数量(对于数据框中的任何列&#xff0c;value_counts()方法会返回该列每个项的计数) value_counts()是Series拥有的方法&#xff0c;一般在DataFrame中使用时&#xff0c;需要指定对哪一列进行使用 语法 …

微服务框架 SpringCloud微服务架构 29 ES 集群 29.5 故障转移

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构29 ES 集群29.5 故障转移29.5.1 ES集群的故障转移29.5.2 总结29 ES 集群 …

【图像分割】粒子群优化T熵图像分割【含Matlab源码 286期】

⛄一、简介 本文所采用的基于熵的切割点和最小描述长度原则(MDLP)。 A.特征选择 特征选择是一个组合优化问题&#xff0c;因为在具有N个特征的数据集上有2N个可能的不同特征子集。FS方法通常有两个重要的部分组成&#xff0c;即搜索技术和特征评估方法。 在特征评估方面&am…

Python项目之文化和旅游数据可视化

文章目录关键词一、做什么二、怎么做1.爬取数据和处理2.数据库设计&#xff0c;并将数据写入数据库3.开发后端接口4.使用Echarts官方模板三、效果展示关键词 Python后端开发Python网络爬虫Echarts可视化面向对象(见源码) 一、做什么 国家5A级旅游景区数据可视化 国家级旅游休…

状态设计模式

一、状态模式 1、定义 状态模式&#xff08;State Pattern&#xff09;又称作状态机模式&#xff08;State Machine Pattern&#xff09;&#xff0c;允许对象在内部状态发生改变时改变它的行为&#xff0c;对象看起来好像修改了它的类。属于行为型设计模式。 状态模式的核心是…