基于SSM和mysql实现的宿舍管理系统·
1.项目简介
宿舍管理是高校管理的重要组成部分,一套优秀的管理系统不仅可以降低宿舍管理的难度,也能在一定程度上减少学校管理费用的支出,更是建设现代化高校管理体系的重要标志。
本篇文章将带你从宿舍管理系统的运行环境搭建、系统设计、系统编码,再到系统的实现,对整个过程进行详细描述,特别适合作为程序员的进阶项目案列,同样也是高校学生毕业设计系统的不二之选!
1.1架构说明
本宿舍管理系统采用B/S架构模式。
B/S架构的全称为Browser/Server,即浏览器/服务器架构。Browser指的是Web浏览器,与C/S架构相比,B/S模式极少数业务逻辑在前端实现,它的主要逻辑在服务器端实现。B/S架构的系统无须特别安装客户端软件,只有Web浏览器即可。
B/S架构的分层:
与C/S架构只有两层不同的是,B/S架构有三层,分别为:
- 第一层表现层:主要完成用户和后台的交互及最终查询结果的输出功能
- 第二层逻辑层:主要是利用服务器完成系统的业务逻辑功能
- 第三层数据层:主要是进行数据瞬时态和持久态两者之间的相互转化
1.2技术选型
选择合适的技术,整个项目就已经成功了一半。经过对系统需求和系统自身特点的分析,加上现代B/S模式主流架构解决方案,对本系统技术选型如下:
- 数据表现层:Html+JavaScript+CSS+VUE
- 业务逻辑层 Java+Spring+SpringMVC
- 数据持久层:MySql+MyBatis
- 开发工具:Eclipse
1.3用户分析
本系统主要应用于高校宿舍管理,使用人群如下:
- 系统管理员:管理整个系统的安全运行,各个功能使用和任务发布。
- 宿舍管理员:管理自己负责的宿舍和学生。
- 学生:查看浏览信息,提交任务。
1.4功能分析
系统管理员:
- 添加、修改、删除公告信息
- 添加、修改、删除宿舍管理员信息
- 添加、修改、删除学生信息
- 宿舍楼管理及宿舍管理员分配
- 学生寝室管理
- 发布考勤、打卡任务
- 查看、修改个人信息
宿舍管理员:
- 查看公告
- 查看、删除自己管理的学生信息
- 添加、修改、删除考勤记录
- 查看学生打卡记录
- 查看、修改个人信息
学生:
- 查看公告
- 查看考勤记录
- 完成打卡任务,查看打卡记录
- 查看、修改个人信息
2.数据库设计
2.1表结构
分析系统需求,数据库应有以下几张表:
t_admin: 主要用于存储系统管理员信息
字段名称 | 类型 | 主键 | 说明 |
---|---|---|---|
adminId | int | 是 | 管理员Id,唯一 |
userName | varchar | 否 | 用户名 |
password | varchar | 否 | 密码 |
name | varchar | 否 | 真实名称 |
sex | varchar | 否 | 性别 |
tel | 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 | date | 否 | 发布日期 |
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 | 否 | 宿舍楼Id |
isRecord | tinyint | 否 | 是否已经打卡 |
t_record:用于存储考勤记录
字段名称 | 类型 | 主键 | 说明 |
---|---|---|---|
recordId | int | 是 | 考勤Id,唯一 |
studentNumber | varchar | 否 | 学生学号 |
dormBuildId | int | 否 | 宿舍楼Id |
dormName | varchar | 否 | 寝室号 |
date | date | 否 | 考勤日期 |
detail | varchar | 否 | 详细说明 |
t_student: 学生表,用于存放学生信息
字段名称 | 类型 | 主键 | 说明 |
---|---|---|---|
studentId | int | 是 | 学生Id,唯一 |
stuNum | varchar | 否 | 学号 |
password | varchar | 否 | 密码 |
name | varchar | 否 | 姓名 |
dormBuildId | int | 否 | 宿舍楼Id |
dormName | varchar | 否 | 寝室号 |
sex | varchar | 否 | 性别 |
tel | varchar | 否 | 电话 |
2.2ER图
3.项目实现
3.1项目工程结构
搭建完系统运行环境后,工程结构目录如下图所示:
com.cya.service
service包是所有业务逻辑的接口
com.cya.service.impl
service.impl包用于存放service接口的所有实现类
com.cya.mapper
mapper包用于存放对数据库操纵的接口和对应的xml实现
com.cya.entity
entity包用于存放项目中用到的所有实体类,它与数据库中的表相对应
resources文件下存放SSM框架整合的必要配置文件
dorm是存放所有model层文件的父级文件夹,其中admin,dormManager、student三个子文件夹分别存放系统管理员、宿舍管理员、学生三个角色对应的HTML文件。
3.2项目配置
```xml
<!-- 引入配置文件 --> <bean id="propertyConfigurer" > <property name="locations"> <value>classpath:dbconfig.properties</value> </property> </bean> <bean id="dataSource" destroy-method="close"> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="driverClassName" value="${jdbc.driver}" /> <property name="maxActive" value="10" /> <property name="minIdle" value="5" /> </bean> <!-- spring和MyBatis整合 --> <bean id="sqlSessionFactory" > <property name="dataSource" ref="dataSource"/> <!--mybatis分页插件--> <property name="configLocation" value="classpath:mybatis.xml"></property> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath*:com.cya.mapper/*.xml"></property> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean > <property name="basePackage" value="com.cya.mapper"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- 事务管理 --> <bean id="transactionManager" > <property name="dataSource" ref="dataSource"/> </bean> <!--支持事务注解的(@Transactional)--> <tx:annotation-driven transaction-manager="transactionManager"/>
```
视图解析器
```xml
<!-- 自动装配 --> <context:component-scan base-package="com.cya.controller" /> <!-- 启用spring mvc 注解 --> <mvc:annotation-driven /> <!--视图解析器--> <bean > <!--前缀--> <property name="prefix" value="/"/> <!--后缀--> <property name="suffix" value=".html"></property> </bean> <!-- 文件上传 --> <bean id="multipartResolver" > <!-- 默认编码 --> <property name="defaultEncoding" value="utf-8"/> <!-- 文件大小最大值 --> <property name="maxUploadSize" value="10485760000"/> <!-- 内存中的最大值 --> <property name="maxInMemorySize" value="40960"/> </bean>
```
3.3前端工程
```js //获取BuildMange function getBuildManage(){ console.log("num",this.vue.pagination.pageNum) var that=this; axios.get('../../getBuildManage?pageNum='+that.vue.pagination.pageNum+'&pageSize='+that.vue.pagination.pageSize+'&filter='+this.vue.search.filter+"&key="+this.vue.search.key).then(function (res) { that.vue.buildManageList=res.data.rows; that.vue.pagination.pageTotal=Math.ceil(res.data.total/that.vue.pagination.pageSize); that.vue.search.filter="dormBuildName"; that.vue.search.key="" console.log(res) }).catch(function (error) { alert(error); }); }
//根据获取BuildManId BuildManage function getBuildMangerById(dormBuildId){ var that=this; axios.get('../../getBuildMangerById',{ params:{ dormBuildId:dormBuildId } }).then(function (res) { that.getBuildMangerById_vue.buildManage=res.data; }).catch(function (error) { alert(error); }); }
function addBuildManageMsg(){ var buildManage=this.addBuildManage_vue.buildManage; axios.post('../../addBuildManage', buildManage, {headers: {'Content-Type': 'application/json;charset=UTF-8'}}) .then(function (response) { if(response.data.result==true){ this.addBuildManage_vue.buildManage={}; window.location.reload(); } }).catch(function (error) { console.log(error); }); }
//根据Id更新 function updataBuildManageMsg(){ var buildManage=this.getBuildMangerById_vue.buildManage; axios.post('../../updataBuildManageById', buildManage, {headers: {'Content-Type': 'application/json;charset=UTF-8'}}) .then(function (response) { if(response.data.result==true){ this.getBuildMangerById_vue.buildManage={}; window.location.reload(); } }).catch(function (error) { console.log(error); }); }
//根据Id删除 function buildManagerDeleteById(dormBuildId){ var that=this; axios.get('../../buildManagerDeleteById?dormBuildId='+dormBuildId).then(function (res) { console.log(res) if(res.data.result==true){ window.location.reload(); } }).catch(function (error) { alert(error); }); }
//根据宿舍楼id获取宿管信息 function getDormMangerByBuildId(dormBuildId){ var that=this; DORMBuildId=dormBuildId; axios.get('../../getDormMangerByBuildId?dormBuildId='+dormBuildId).then(function (res) { console.log(res) that.getDormManageByBuildId_vue.dormManage=res.data; }).catch(function (error) { alert(error); });
var that=this; axios.get('../../getDormManage2').then(function (res) { that.getDormManageByBuildId_vue.optionsDormManage=res.data; console.log(res) }).catch(function (error) { alert(error); }); } ```
3.4后端实现
```java / -------------------------宿管--------------------------- /
@RequestMapping("/getDormManage") public PageResult getDormManage(HttpServletRequest request){ Integer pageNum=1; Integer pageSize=20; 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")); } System.out.println("pageNum="+pageNum); System.out.println("pageSize="+pageSize); return adminServiceImpl.getDormManage(pageNum,pageSize,filter,key); }
@RequestMapping("addDormManage") public Result addDormManage(@RequestBody DormManage dormManage) { try { adminServiceImpl.addDormManage(dormManage); return new Result(true, "添加成功"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return new Result(false, "添加失败"); } }
@RequestMapping("getDormMangerById") public DormManage getDormMangerById(Integer dormManId) { return adminServiceImpl.getDormMangerById(dormManId); }
@RequestMapping("updataDormManageById") public Result updataDormManageById(@RequestBody DormManage dormManage) { try { adminServiceImpl.updataDormManageById(dormManage); return new Result(true, "更新成功"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return new Result(false, "更新失败"); } }
@RequestMapping("dormManagerDeleteById") public Result dormManagerDeleteById(HttpServletRequest request) { Integer dormManId=0; if(request.getParameter("dormManId")!=null && request.getParameter("dormManId")!="") { dormManId=Integer.parseInt(request.getParameter("dormManId")); } try { adminServiceImpl.deleteDormManageById(dormManId); return new Result(true, "删除成功"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return new Result(false, "删除失败"); } }
/ -------------------------宿管--------------------------- /
/ -------------------------学生--------------------------- / @RequestMapping("/getStudentManage") public PageResult getStudentManage(HttpServletRequest request){ Integer pageNum=1; Integer pageSize=20; 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")); } System.out.println("pageNum="+pageNum); System.out.println("pageSize="+pageSize); return adminServiceImpl.getStudentManage(pageNum, pageSize, filter, key); } ```
3.5主要业务功能
```java / -------------------------考勤--------------------------- /
@RequestMapping("/getRecordMMsgByStuNum") public PageResult getRecordMMsgByStuNum(HttpServletRequest request){ Integer pageNum=1; Integer pageSize=20; Integer dormBuildId=0; String filter=request.getParameter("filter"); String key=request.getParameter("key"); String studentNumber=request.getParameter("studentNumber"); 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")); } System.out.println("filter"+filter); System.out.println("key"+key);
return studentSeriveImpl.getRecordMMsgByStuNum(pageNum, pageSize, filter, key, studentNumber);
}
/ -------------------------考勤--------------------------- /
/ -------------------------我的--------------------------- /
@RequestMapping("student_getMyMsgById") public Student student_getMyMsgById(@RequestBody Student student) { return studentSeriveImpl.student_getMyMsgById(student.getStudentId()); }
@RequestMapping("student_updateMyMsgById") public Result student_updateMyMsgById(HttpServletRequest request ,@RequestBody Student student) { try { HttpSession session=request.getSession(); if(session.getAttribute("student") !=null) { session.removeAttribute("student"); } List list=new ArrayList(); list.add(student); session.setAttribute("student", list); studentSeriveImpl.student_updateMyMsgById(student); return new Result(true, "更新成功"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return new Result(false, "更新失败"); } }
@RequestMapping("student_updatePsd") public Result student_updatePsd(@RequestBody Student student) { try { studentSeriveImpl.student_updatePsd(student); System.out.println(student); return new Result(true, "更新成功"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return new Result(false, "更新失败"); } }
/ -------------------------我的--------------------------- /
/ -------------------------打开--------------------------- /
/ -------------------------打开--------------------------- /
@RequestMapping("/getPunchClockRecordMsgByStuNum") public PageResult getPunchClockRecordMsgByStuNum(HttpServletRequest request){ Integer pageNum=1; Integer pageSize=20; Integer dormBuildId=0; String filter=request.getParameter("filter"); String key=request.getParameter("key"); String studentNumber=request.getParameter("studentNumber"); 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")); } System.out.println("filter"+filter); System.out.println("key"+key);
return studentSeriveImpl.getPunchClockRecordMsgByStuNum(pageNum, pageSize, filter, key, studentNumber);
}
@RequestMapping("getPunckColcokRecordById") public PunchClockRecord getPunckColcokRecordById(HttpServletRequest request) { Integer id=0; if(request.getParameter("id")!=null && request.getParameter("id")!="") { id=Integer.parseInt(request.getParameter("id")); } return studentSeriveImpl.getPunckColcokRecordById(id); }
@RequestMapping("updataPunchClockRecordMsg") public Result updataPunchClockRecordMsg(@RequestBody PunchClockRecord punchClockRecord) { try { studentSeriveImpl.updataPunchClockRecordMsg(punchClockRecord); System.out.println(punchClockRecord); return new Result(true, "更新成功"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return new Result(false, "更新失败"); } } ```
4.项目展示
4.1 登录功能实现
项目启动成功后,在浏览器地址栏输入:http://localhost:8080/dormManage/ 进入用户登录界面如下图所示:
在此界面用户可以选择不同的角色登录,输入每个角色对应的登录信息后,首先会判断输入信息的有效性,做出相应的响应或提示。登录功能具体的实现代码如下,此处仅展示controller层代码。
```java @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, "注销失败");
}
}
```
4.2 发布公告功能实现
在系统管理员端,有发布公告的权限,系统管理员点击添加公告按钮,输入相关信息后进行有效性校验,校验成功即代表公告发布成功。
成功发布公告后,会出现在宿舍管理员端和学生端界面,效果图如下:
公告模块主要代码以mapper层实现为例:
```xml
delete from t_notice where noticeId=#{noticeId}
```
4.3 考勤记录功能实现
宿舍管理员根据自己所管理的宿舍楼,对住在管理范围内的学生进行考勤,并添加考勤记录,学生端也会显示考勤信息。
主要实现代码如下:
```java @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, "添加失败"); } } ```
参考文献
- 高校宿舍管理系统的设计与实现(西安电子科技大学·齐慧敏)
- 基于JSP技术的学生宿舍管理系统的设计与实现(沈阳工业大学·杨俊宝)
- 学生综合信息管理平台的设计与实现(吉林大学·刘铁刚)
- 基于移动应用的宿舍管理系统的设计与实现(山东大学·刘慧情)
- 高校宿舍管理系统的设计与实现(西安电子科技大学·齐慧敏)
- 高校宿舍管理系统的设计与实现(西安电子科技大学·齐慧敏)
- 基于移动应用的宿舍管理系统的设计与实现(山东大学·刘慧情)
- 学生宿舍管理系统的设计与实现(江西财经大学·张丽伟)
- 宿舍管理系统(湖北工业大学·陈倩倩)
- 高校学生公寓管理系统的设计与实现(南昌大学·万金强)
- 基于B/S结构的学校管理信息系统的研究与开发(四川大学·徐永红)
- 南通理工学院公寓管理信息系统的设计与实现(大连理工大学·杨希)
- 校园WEB宿舍管理系统的设计与实现(电子科技大学·李训耀)
- 基于J2EE的学生宿舍管理系统的设计与实现(电子科技大学·卜建东)
- 基于J2EE的学生信息管理系统(电子科技大学·钟海琴)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码货栈 ,原文地址:https://bishedaima.com/yuanma/35517.html