# 学生住宿管理系统设计与实现
## 系统分析
### 问题说明
学生住宿管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工去一条条的查找,这样做非常麻烦,会浪费许多时间,因此效率比较低。当今社会是飞速发展的世界,原始的记录方式应该被社会淘汰,信息化管理才是适应时代的数据管理方式。进入21世纪,信息社会占着主流地位,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。
基于以上背景,我设计并实现了一套学生住宿管理系统。此管理系统被设计成一个采用B/S架构的Web应用程序,系统做的尽量人性化,使用者会感到操作非常方便,管理人员需要做的就是将数据输入到系统的数据库中去。由于数据库存储容量相当大,而且比较稳定,适合较长时间的保存,也不容易丢失。这无疑是为信息存储量比较大的学校提供了一个方便、快捷的操作方式。此系统具有运行速度快、安全性高、稳定性好的优点,并且具备完善的人机交互、信息修改功能,能够快速的查询到所需要的学生住宿信息。
### 功能需求
#### 主要功能描述
基于Web应用程序的学生住宿管理系统会被部署在一个Linux服务器上,宿舍管理员和学生这两类用户可以通过浏览器访问该系统。在实现上,学生住宿管理系统具有如下功能:
- 用户登录访问的功能。允许用户通过各自正确的用户名和密码登录并进入系统。本系统的目标用户要按角色分为宿舍管理员和学生两类,不同的角色拥有不同的权限,能够在系统上执行的操作不同。
- 查询学生宿舍分配情况的功能。学生能够登录系统查看自己被分配的寝室,如果该学生没有被分配寝室,则显示未分配状态。宿舍管理员可以在后台根据学生姓名、班级或寝室名等条件模糊查询出对应的宿舍分配情况,即查询出某位学生当前居住的寝室,某班的学生都分别住在哪个寝室,或者是某寝室当前住了哪些学生。
- 学生自选寝室的功能。允许学生在正式入住宿舍前通过本系统查询并选择心仪的寝室,向宿舍管理员发送入住申请。若入住申请被管理员通过,则学生可以在本系统上查看到自己被分配的寝室,且不能再次发送入住申请。若入住申请被管理员拒绝,即学生依然处于未分配宿舍状态,则学生可以再次通过该系统发送入住申请。
- 处理学生入住申请的功能。宿舍管理员能够在后台查看到学生通过系统提出的入住申请,宿舍管理员可执行的处理方式分为通过申请和拒绝申请两种。若通过申请,则系统将对应的寝室分配给该学生。若拒绝申请,则学生仍然处于未分配宿舍状态,需要选择其它寝室再次发送申请。因寝室容量有限,学生不能对已住满的寝室提出入住申请,系统会自动拒绝这种不合理的入住申请。
- 住宿解约的功能。若某位学生不再住宿,则宿舍管理员能够在后台为该学生执行解约的操作,收回对应的寝室,使得该学生处于未分配宿舍状态。其他学生可以通过系统申请入住这个空出来的寝室。
- 后台信息管理的功能。宿舍管理员能够在后台对系统的用户、学生信息、寝室信息进行查询、更新和删除操作。在查询时能够进行按主键精确查询或根据某些条件进行模糊查询,可以将查询到的结果导出为pdf文件或Excel文件。其中每次向系统中添加一个新的学生,系统会自动为该学生创建一个用户名和密码都是学号的账户。
- 用户修改个人信息的功能。学生和宿舍管理员在登录系统后能够修改自己的密码、联系方式和其它个人信息。密码要进行单向加密后才能保存在数据库中,宿舍管理员可以在后台为忘记密码的学生重置密码。
#### 用例图
![](https://www.writebug.com/myres/static/uploads/2022/3/8/e2e2bf3eef688c6bd20b0e3e672d569b.writebug)
图1 系统的用例图
### 数据需求
#### 数据结构
表1 寝室类型的数据结构
| 字段名 |数据类型 |数据描述 |
|----|----|----|
| id |bigint(20) |寝室类型主键 |
| name |varchar(255) |寝室类型名称 |
| max_size |bigint(20) |容量限制 |
表2 寝室的数据结构
| 字段名 |数据类型 |数据描述 |
|----|----|----|
| id |bigint(20) |寝室主键 |
| address |varchar(255) |地址 |
| picture |varchar(255) |照片 |
| name |varchar(255) |寝室名 |
| category_id |bigint(20) |寝室类型 |
表3 用户的数据结构
| 字段名 |数据类型 |数据描述 |
|----|----|----|
| id |bigint(20) |用户主键 |
| gender |varchar(255) |用户的性别 |
| address |varchar(255) |住址 |
| password |varchar(255) |用于登录系统的密码 |
| phone |varchar(255) |联系方式 |
| avatar |varchar(255) |头像的图片存储位置 |
| username |varchar(255) |用于登录系统的用户名 |
| role_id |bigint(20) |角色 |
表4 学生的数据结构
| 字段名 |数据类型 |数据描述 |
|----|----|----|
| id |varchar(255) |学号,学生主键 |
| name |varchar(255) |姓名 |
| room_id |bigint(20) |寝室 |
| teaching_class_id |bigint(20) |班级 |
| user_id |bigint(20) |该学生的用户名 |
表5 入住申请的数据结构
| 字段名 |数据类型 |数据描述 |
|----|----|----|
| id |bigint(20) |入住申请的主键 |
| status |varchar(255) |未处理/通过/拒绝的状态码 |
| room_id |bigint(20) |寝室 |
| student_id |varchar(255) |学生 |
表6 用户角色的数据结构
| 字段名 |数据类型 |数据描述 |
|----|----|----|
| id |bigint(20) |角色主键 |
| name |varchar(255) |角色名 |
表7 学生班级的数据结构
| 字段名 |数据类型 |数据描述 |
|----|----|----|
| id |bigint(20) |班级主键 |
| name |varchar(255) |班级名称 |
表8 权限的数据结构
| 字段名 |数据类型 |数据描述 |
|----|----|----|
| id |bigint(20) |权限主键 |
| code |varchar(255) |权限码 |
| description |varchar(255) |权限描述 |
| name |varchar(255) |权限名 |
#### 数据处理要求
数据录入和处理的准确性和实时性。数据的输入是否准确是数据处理的前提,错误的输入会导致系统输出的不正确,从而使系统的工作失去意义。数据的输入来源是手工输入,因此系统界面上的输入系统要具有一定的容错性,并且要对工作人员进行系统的培训。在系统中,数据的输入往往是大量的,因此系统必须要有一定的批处理能力与并发处理能力,以保证迅速地处理数据。
数据的一致性与完整性。由于系统的数据是共享的,在不同的客户端中学生住宿信息是共享数据,所以如何保证这些数据的一致性,是系统必须解决的问题。
数据的共享性和独立性,整个学生住宿管理系统的数据是共享的。然而,从系统开发的角度上看,共享会给设计和调试带来困难。因此,应该提供灵活的配置,使各个分系统能够独立运行,而通过人工干预的手段进行系统数据的交换。这样也能增强系统的健壮性。
### 性能需求
本系统要实现的性能特性主要包括实用性、灵活性、可扩展性、易维护性、可靠性等。
- 实用性。实用性是衡量一个应用系统好坏的�