宿舍管理是高校管理的重要组成部分,一套优秀的管理系统不仅可以降低宿舍管理的难度,也能在一定程度上减少学校管理费用的支出,能是建设现代化高校管理体系的重要标志。

本篇文章将带你从运行环境搭建、系统设计、系统编码到整个系统的实现,对整个过程进行详细描述,特别适合作为程序员的进阶项目案列,同样也是高校学生毕业设计系统实现的不二之选!

演示地址:宿舍管理系统演示地址,点我查看

1、系统架构模式

本宿舍管理系统采用B/S架构模式。

B/S架构的全称为Browser/Server,即浏览器/服务器结构。Browser指的是Web浏览器,与C/S架构相比,B/S模式极少数事务逻辑在前端实现,它的主要事务逻辑在服务器端实现。B/S架构的系统无须特别安装,只有Web浏览器即可。

B/S架构的分层:

与C/S架构只有两层不同的是,B/S架构有三层,分别为:

  • 第一层表现层:主要完成用户和后台的交互及最终查询结果的输出功能。
  • 第二层逻辑层:主要是利用服务器完成客户端的应用逻辑功能。
  • 第三层数据层:主要是进行数据持久化存储。

2、技术选型

选择合适的技术,整个项目就已经成功了一半,经过对系统需求和系统自身特点的分析,加上现代B/S模式主流架构解决方案,对本系统技术选型如下:

数据表现层: Html+JavaScript+CSS+VUE

业务逻辑层 Java+Spring+SpringMVC

数据持久层: MySql+MyBatis

开发工具: Eclipse

3、用户分析

本系统主要应用于高校宿舍管理,使用人群如下:

  • 系统管理员:管理整个系统的安全运行,各个功能使用。
  • 宿舍管理员:管理自己负责的宿管和学生
  • 学生:查看浏览信息,提交任务

4、功能分析

系统管理员:

  1. 添加、修改、删除公告信息
  2. 添加、修改、删除宿舍管理员信息
  3. 添加、修改、删除学生信息
  4. 宿舍楼管理及其宿舍管理员分配
  5. 学生寝室管理
  6. 发布考勤、打卡任务
  7. 查看、修改个人信息



宿舍管理员:

  1. 查看公告
  2. 查看、删除自己管理的学生
  3. 添加、修改、删除考勤记录
  4. 查看学生打卡记录
  5. 查看、修改个人信息



学生:

  1. 查看公告
  2. 查看考勤记录
  3. 完成打卡任务,查看打卡记录
  4. 查看、修改个人信息

5、数据库设计

分析系统需求,数据库应有以下几张表:

t_admin: 主要用于存储系统管理员数据

字段名称 类型 是否主键 说明
adminId int 管理员Id,唯一
userName varchar 用户名
password varchar 密码
name varchar 真实名称
sex varchar 性别
sex varchar 电话

t_dormbuild: 存储宿舍楼信息

字段名称 类型 是否主键 说明
dormBuildId int 宿舍楼Id,唯一
dormBuildName varchar 宿舍楼名称
dormBuildDetail varchar 描述

t_dormmanager: 主要存储宿舍管理员信息

字段名称 类型 是否主键 说明
dormManId varchar 宿舍管理员Id,唯一
userName varchar 用户名,用于登录系统
password varchar 密码
dormBuildId int 宿舍楼Id
dormBuildDetail varchar 描述
name varchar 真实姓名
sex varchar 性别
tel varchar 电话

t_notice: 用于存储公告信息

字段名称 类型 是否主键 说明
noticeId int 公告Id,唯一
noticePerson varchar 公告发布人
date date 公告发布日期
content varchar 发布内容

t_punchclock: 用于存储打卡发布记录

字段名称 类型 是否主键 说明
id int Id,唯一
theme varchar 打卡主题
detail varchar 打卡说明
date varchar 发布日期
person varchar 发布人

t_punchclockrecord: 用于存储打卡信息

字段名称 类型 是否主键 说明
id int 记录Id,唯一
punchClock_id varchar 打卡Id
punchClock_date date 发布日期
punchClock_theme varchar 打卡主题
punchClock_detail varchar 打卡说明
punchClock_person varchar 发布人
name varchar 学生姓名
dormName varchar 寝室号
tel varchar 学生电话
stuNum varchar 学生学号
dormBuildId int 宿舍楼
isRecord tinyint 是否已经打卡

t_record: 用于存储考勤记录

字段名称 类型 是否主键 说明
recordId int 考勤Id,唯一
studentNumber varchar 学生学号
dormBuildId int 宿舍楼
dormName varchar 寝室号
date varchar 考勤日期
detail varchar 详细说明

t_student: 学生表,用于存放学生信息

字段名称 类型 是否主键 说明
studentId int 学生Id,唯一
stuNum varchar 学号
password varchar 密码
name varchar 姓名
dormBuildId int 宿舍楼
dormName varchar 寝室号
sex varchar 性别
tel varchar 电话

6、运行环境搭建

前面已经提到,本系统使用SSM框架,搭建过程较为繁琐,因此将此部分独立出来,作为一个专题,具体搭建过程请参考《手把手教你搭建SSM框架(Eclipse版)》 这篇文章。搭建过程若出现其他问题,可以在公众号【C you again】 后台私信。

7、项目工程结构

根据第六步搭建完系统运行环境后,工程结构目录如下图所示



对工程结构各个目录的解释:

com.cya.controller

controller包用于存放接收请求的类,充当前后端数据交互的“桥梁”

com.cya.service

service包是所有业务逻辑的接口

com.cya.service.impl

service.impl包用于存放service接口的所有实现类

com.cya.mapper

mapper包用于存放对数据库操纵的接口和对应的xml实现

com.cya.entity

entity包用于存放项目中用到的所有实体类,它与数据库中的表相对应



resources文件下存放SSM框架整合的必要配置文件,详情请看《手把手教你搭建SSM框架(Eclipse版)》



dorm是存放所有model层文件的父级文件夹,其中admin,dormManager、student三个子文件夹存放系统管理员、宿舍管理员、学生三个角色对应的HTML文件。

8、功能实现及展示

由于系统包含功能众多,在此无法一一列举,所以挑选几个代表做展示,如需获取完整源码请在公众号【C you again】回复“宿舍管理系统”。

8.1 登录功能实现

项目启动成功后,在浏览器地址栏输入:http://localhost:8080/dormManage/ 进入用户登录界面如下图所示:

在此界面用户可以选择不同的角色登录,输入每个角色对应的登录信息后,首先会判断输入信息的有效性,做出相应的响应或提示。登录功能具体的实现代码如下,此处仅展示controller层代码,如下:

package com.cya.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Map; import javax.management.relation.Role;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import org.apache.tomcat.util.digester.ArrayStack;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import com.cya.entity.Login;
import com.cya.entity.Result;
import com.cya.service.ILoginService;
import com.cya.service.impl.LoginServiceImpl; @Controller
@ResponseBody
public class LoginController { @Autowired
private ILoginService loginServiceImpl; @RequestMapping("login")
public List login(HttpServletRequest request, @RequestBody Login login) {
List list=loginServiceImpl.login(login);
if(list.size()==1) {
HttpSession session=request.getSession();
session.setAttribute(login.getRole(), list);
System.out.println("session="+session.getAttribute(login.getRole()));
}
return list;
} @RequestMapping("getSession")
public List getSession(HttpServletRequest request,@RequestBody Login login){
System.out.println(login);
System.out.println(request.getSession().getAttribute(login.getRole()));
List list=new ArrayList<>();
list.add(request.getSession().getAttribute(login.getRole()));
return list;
} @RequestMapping("exitSys")
public Result exitSys(HttpServletRequest request) {
String exit="";
try {
if(request.getParameter("exit")!=null) {
exit=request.getParameter("exit");
}
request.getSession().removeAttribute(exit);
return new Result(true, "注销成功");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return new Result(false, "注销失败");
}
}
}

8.2 发布公告功能实现

在系统管理员端,有发布公告的权限,系统管理员点击添加公告按钮,输入相关信息后进行有效性校验,校验成功及代表公告发布成功。



成功发布公告后,会出现在宿舍管理员端和学生端界面,效果图如下:



公告模块主要代码以mapper层实现为例:

 <!-- ******************** 公告 ******************* -->

  <select id="getNoticeManage" resultType="com.cya.entity.Notice">
select * from t_notice
<where>
<if test="filter=='date' and key !='' ">
date like concat("%",#{key},"%")
</if>
</where>
</select> <insert id="addNoticeManage" parameterType="com.cya.entity.Notice">
insert into t_notice(noticePerson,date,content) values(#{noticePerson},current_date,#{content})
</insert> <select id="getNoticeMangerById" parameterType="Integer" resultType="com.cya.entity.Notice">
select * from t_notice where noticeId=#{noticeId}
</select> <update id="updataNoticeManageById" parameterType="com.cya.entity.Notice">
update t_notice set noticePerson=#{noticePerson},content=#{content} where noticeId=#{noticeId}
</update> <delete id="noticeManagerDeleteById" parameterType="Integer"> delete from t_notice where noticeId=#{noticeId}
</delete> <!-- ******************** 公告 ******************* -->

8.3 考勤记录功能实现

宿舍管理员根据自己所管理楼,对住在管理范围内的学生进行考勤,并添加考勤记录,学生端也会显示考勤信息。



主要实现代码如下:

@RequestMapping("/getRecordMsg")
public PageResult getRecordMsg(HttpServletRequest request){
Integer pageNum=1;
Integer pageSize=20;
Integer dormBuildId=0;
String filter=request.getParameter("filter");
String key=request.getParameter("key");
if(request.getParameter("pageNum")!=null && request.getParameter("pageNum")!="") {
pageNum=Integer.parseInt(request.getParameter("pageNum"));
}
if(request.getParameter("pageSize")!=null && request.getParameter("pageSize")!="") {
pageSize=Integer.parseInt(request.getParameter("pageSize"));
}
if(request.getParameter("dormBuildId")!=null && request.getParameter("dormBuildId")!="") {
dormBuildId=Integer.parseInt(request.getParameter("dormBuildId"));
}
System.out.println("pageNum="+pageNum);
System.out.println("pageSize="+pageSize);
return dormManageServiceImpl.getRecordMsg(pageNum, pageSize, filter, key, dormBuildId);
} @RequestMapping("getRecordById")
public Record getRecordById(Integer recordId) {
return dormManageServiceImpl.getRecordById(recordId);
} @RequestMapping("updataRecordMsg")
public Result updataRecordMsg(@RequestBody Record record) {
try {
dormManageServiceImpl.updataRecordMsg(record);
return new Result(true, "更新成功");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return new Result(false, "更新失败");
}
} @RequestMapping("addRecordMsg")
public Result addRecordMsg(@RequestBody Record record) {
try {
System.out.println(record);
dormManageServiceImpl.addRecordMsg(record);
return new Result(true, "添加成功");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return new Result(false, "添加失败");
}
} @RequestMapping("recordManagerDeleteById1")
public Result recordManagerDeleteById(HttpServletRequest request) {
Integer recordId=0;
if(request.getParameter("recordId")!=null && request.getParameter("recordId")!="") {
recordId=Integer.parseInt(request.getParameter("recordId"));
}
try {
dormManageServiceImpl.recordManagerDeleteById1(recordId);
return new Result(true, "删除成功");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return new Result(false, "删除失败");
}
}

9、源码下载

若需获取本系统源码请在公众号【C you again】回复“宿舍管理系统”

你也可以点击此链接快速回复

10、相关说明

  1. 制作不易,记得点赞+收藏+转发
  2. 本人技术有限,若有错误欢迎指正
  3. 本系统和文章均属于【C you again】原创,欢迎个人博客、各大网站转载,但请注明转载地址

演示地址:宿舍管理系统演示

JavaWeb宿舍管理系统(附 演示、源码下载地址)的更多相关文章

  1. Google Chrome 源码下载地址 (Google Chrome Source Code Download)

    1. Google Chrome 源码 SVN 地址:http://src.chromium.org/svn.包含有 Chrome.Gears.Webkit.GCC 等源码以及编译依赖工具.Chrom ...

  2. 各个版本spring的jar包以及源码下载地址

    各个版本spring的jar包以及源码下载地址,目前最高版本到spring4.1.2,留存备用: http://maven.springframework.org/release/org/spring ...

  3. Cytoscape源码下载地址和编译办法

    开发环境:Windows2008 R2 64位+Jdk1.7+Maven3.2.3 前提条件:安装好JDK1.7到C:\Program Files\Java\jdk1.7.0_67,下载好Maven并 ...

  4. 最新git源码下载地址

    1.最新git源码下载地址: https://github.com/git/git/releases https://www.kernel.org/pub/software/scm/git/ 可以手动 ...

  5. android Activity实现底部滑动弹出窗口及源码下载地址

    在做微信.微博.qq等分享时,一般是点击分享按钮后会从底部弹出滑动窗口,然后选择要分享的社交平台进行分享.今日头条.腾讯新闻等内容App的评论也是从底部滑动弹出输入窗口,进行评论输入的.本篇文章就讲讲 ...

  6. linux2.4.0源码下载地址(配合毛德操情景分析)

    https://www.kernel.org/pub/linux/kernel/v2.4/

  7. MyBatis、Spring、SpringMVC 源码下载地址

    MyBatis.Spring.SpringMVC 源码下载地址 github mybatis https://github.com/fengyu415/MyBatis-Learn.git spring ...

  8. 基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)

    今天我们来盘一盘Socket通讯和WebSocket协议在即时通讯的小应用——聊天. 理论大家估计都知道得差不多了,小编也通过查阅各种资料对理论知识进行了充电,发现好多demo似懂非懂,拷贝回来又运行 ...

  9. 基于spring-boot和docker-java实现对docker容器的动态管理和监控[附完整源码下载]

    ​ (我是个封面) docker简介 Docker 是一个开源的应用容器引擎,和传统的虚拟机技术相比,Docker 容器性能开销极低,因此也广受开发者喜爱.随着基于docker的开发者越来越多,doc ...

随机推荐

  1. SVN检出maven项目

    (一)直接单击项目,右键选择configure,选择convert to maven project (二)删除project explorer中的项目,并重新从工作区间导入maven项目.

  2. profile对比std::regex与boost::regex的性能

    c++11标准库的regex比boost库的regex之间的性能差距接近5倍,这是为什么?stackflow上也找到一篇post<c++11 regex slower than python&g ...

  3. Shell学习(一)认识Shell

    一.啥是Shell Shell : 一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell脚本 :  一种为 shell 编写的 ...

  4. kafk学习笔记(一)

    kafka消费模式 1.点对点模式:消费者主动拉取消息,消费之后删除数据. 2.发布/订阅模式:如果生产者推给消费者,可能会有些消费者消费比较慢,直接爆炸.或者有些消费者消费很快,资源浪费:一般是消费 ...

  5. Centos-文本过滤-grep

    grep 文本过滤,对文本的每一行进行关键字搜索,如果找到则输出 相关选项 -A 除了列出符合关键字的行外,还输出符合关键字行后多少行内容 -c 只显示符号条件的行号 -f  批量搜索,把关键字写入到 ...

  6. 日志分析平台ELK之搜索引擎Elasticsearch集群

    一.简介 什么是ELK?ELK是Elasticsearch.Logstash.Kibana这三个软件的首字母缩写:其中elasticsearch是用来做数据的存储和搜索的搜索引擎:logstash是数 ...

  7. Java知识系统回顾整理01基础05控制流程05 continue

    continue:继续下一次循环 一.continue 题目: 如果是双数,后面的代码不执行,直接进行下一次循环 要求效果: 答案: public class HelloWorld { public ...

  8. python 给IDLE添加行号

    [LineNumbers] enable=1 enable_editor=1 enable_shell=1 visible=1 [LineNumbers_cfgBindings] linenumber ...

  9. Java (一)下载APACHE Commons IO

    一,进入APACHE的官网,在首页往下找APACHE PROJECT LIST > Commons,点击进入. 二,进入Apache Commons页面,找IO组件,点击进入. 三.点击链接Do ...

  10. 【题解】[USACO12JAN]Video Game G

    第一道\(AC\)自动机\(+DP.\) 首先,一个自动机上\(DP\)的套路是设\(dp[i][j]\)表示长度为\(i\)匹配到\(j\)节点的最优得分. 那么,由于我们已经建好了\(Trie\) ...