精华内容
下载资源
问答
  • 员工宿舍管理方案
    2021-05-18 13:54:05

    《数据库大作业——学生宿舍管理系统》由会员分享,可在线阅读,更多相关《数据库大作业——学生宿舍管理系统(9页珍藏版)》请在人人文库网上搜索。

    1、学生宿舍管理系统信管2班 李维1、 需求分析阶段我们宿舍在管理上都是采用纸上登记,文本记录的,针对此现状,我提出了学生宿舍管理系统的设计。(1)调查分析现在要开发学生宿舍管理系统,首先要调查用户的需求。本次调查采取的主要步骤有:(1) 开调查会。通过与老师,学生座谈了解他们对该管理系统的期望与要求。(2) 请专人介绍。找专业老师了解宿舍的具体安排情况以及学生的入住信息。(3) 设计调查表请学生填写。调查学生的个人信息,宿舍的基本信息,工作人员的基本信息。首先调查基本信息:学生住在宿舍楼中,每站宿舍区都会有若干名阿姨负责本宿舍区的日常管理。(1)学生的基本信息:入校时,每位同学都有唯一的学号,并。

    2、被分配到指定的宿舍楼和指定的宿舍,也会有一个宿舍号,其入校时间就是他的入住时间。(2)宿舍的基本信息:每间宿舍都有唯一的楼号和宿舍号,每站宿舍区都有自己的电话号码。(3)工作人员基本信息:每站宿舍区都有驻楼阿姨和保洁阿姨的编号。(4)报修的基本信息:宿舍楼中经常出现财产的损坏,比如灯泡坏了,厕所的马桶出故障了等,这时,同学们需要将财产损坏情况报告给宿舍楼管理员,以便学校派人进行维修。这时,需要记录报修的宿舍号和损坏的财产编号,同时记录报修的时间和损坏的原因。当损坏的财产维修完毕后,应记录解决时间,表示该报修成功解决。(5)来访者基本信息每站宿舍对于每一次的人员来访都要做好相应的登记。包括来访者。

    3、和被访者的信息。(2)用户对系统的要求1、信息要求:宿舍楼管理员能查询上面提到的宿舍楼的所有相关信息,包括某一学号的学生在宿舍楼中住宿的详细信息,报修的所有信息和来访者的信息,以利于对整个宿舍楼的全面管理。2、处理要求:当学生基本信息发生变化时,宿舍楼管理员能对其进行修改。比如,某些同学搬到其他的宿舍中去,他们在本宿舍楼中相应的记录就应该删去;当宿舍财产报修及时解决后,管理员应登记解决时间,表明该报修问题已成功解决。3、安全性与完整性要求:A、安全性要求:(1)系统应设置访问用户的标识以鉴别是否是合法用户,并要求合法用户设置其密码,保证用户身份不被盗用;(2)系统应对不同的数据设置不同的访问级。

    4、别,限制访问用户可查询和处理数据的类别和内容;(3)系统应对不同用户设置不同的权限,区分不同的用户,如区分普通用户(学生),管理员。B、完整性要求:(1)各种信息记录的完整性,信息记录内容不能为空;(2)各种数据间相互的联系的正确性;(3)相同的数据在不同记录中的一致性。数据库功能:基本信息管理、住宿管理、服务管理、来访者管理。基本信息管理包括学生信息、宿舍信息、工作人员信息;住宿信息包括入住、分配床位、毕业退宿;服务管理包括电费、维修;来访者管理包括来访者信息登记、来访者查询。(3) 数据字典设计(数据项,数据结构,数据量,数据存储,处理过程)1、 数据项数据项名含义说明别名数据类型长度取值。

    5、范围学号住宿学生学生编号char8姓名住宿学生学生姓名Varchar10性别住宿学生char2专业住宿学生Varchar20联系方式住宿学生char11员工号宿舍阿姨员工编号char4员工姓名宿舍阿姨Varchar10年龄宿舍阿姨smallint2职位宿舍阿姨员工从事工作Varchar20联系方式宿舍阿姨手机号码char11区名宿舍所属园区澄,泽,沁,润Varchar2站名园区几站一站,二站char2楼号宿舍是几栋char2宿舍号宿舍几零几char3宿舍电话宿舍每站号码char12可住人数宿舍smallint2已住人数宿舍smallint2物品号物品报修varchar8报修原因物品报修char。

    6、50提交日期物品报修datetime 8解决日期物品报修datetime8报修费用物品报修decimal5来访人姓名来访者Varchar10被访人姓名来访者Varchar10所属关系来访者Varchar20证件名称来访者Varchar20来访日期来访者Datetime8来访时间来访者Datetime8归访时间来访者Datetime8备注来访者Varchar502、 数据结构数据结构名含义说明组成学生住宿信息学生登记入住信息学号,姓名,性别,专业,联系方式,入住时间员工信息员工就职信息员工号,姓名,年龄,性别,职位,家庭地址,联系方式宿舍信息学校宿舍园区分布情况以及入住情况区名,站名,楼号,宿舍。

    7、号,宿舍电话,可住人数,已住人数报修信息设备保修楼号,宿舍号,物品号,报修原因,提交日期,解决日期,报修费用来访者信息每站来访人员登记来访人姓名,被访人姓名,所属关系,证件名称,来访日期,来访时间,归访时间,备注3、 数据流以来访人员为例:数据流:来访人员说明:对每日的来访人员进行登记查询数据流来源:来访者数据流去向:来访者信息表组成:来访信息平均流量:20人/天高峰期流量:50人/天4、 数据存储数据存储名说明输入的数据流输出的数据流组成存取频度存取方式报修信息表设备保修信息存储表报修信息已修信息报修信息报修信息已修信息5件/h随机来访者信息表来访者信息存储表来访信息来访结束信息来访信息来访。

    8、信息来访结束信息10/天随机5、 处理过程处理过程名输入数据流输出数据流登记报修报修信息报修信息查询报修报修信息报修信息登记已修信息已修信息已修信息登记来访者信息来访者信息来访者信息查询来访者信息来访者信息来访者信息登记归访信息归访信息归访信息2、 概念结构设计(1) 分E-R图学生联系方式专业学号姓名已住人数宿舍区名可住人数楼号站名宿舍电话员工年龄员工号职位联系方式员工姓名来访者性别证件关系姓名(2)总E-R图学号区名入住时间站名楼号姓名1n宿舍电话宿舍入住学生专业可住人数离宿时间11联系方式已住人数来访时间管理来访归访时间nn年龄员工来访者员工号职位性别证件联系方式员工姓名关系姓名3、 逻。

    9、辑结构设计(1)转换原则: 一个实体型转换为一个关系模式。 关系的属性:实体型的属性 关系的码:实体型的码 2. 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系 模式合并。 1) 转换为一个独立的关系模式 关系的属性:与该联系相连的各实体的码以及联系本身的属性 关系的码:n端实体的码 2)与n端对应的关系模式合并合并后关系的属性:在n端关系中加入1端关系的码和联系本身的属性 合并后关系的码:不变 可以减少系统中的关系个数,一般情况下更倾向于采用这种方法。 3一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。 1) 转换为一个独立的关系模式 关系。

    10、的属性:与该联系相连的各实体的码以及联系本身的属性 关系的候选码:每个实体的码均是该关系的候选码 2) 与某一端对应的关系模式合并 合并后关系的属性:加入对应关系的码和联系本身的属性 合并后关系的码:不变 4一个m:n联系转换为一个关系模式。 关系的属性:与该联系相连的各实体的码以及联系本身的属性 关系的码:各实体码的组合。 5三个或三个以上实体间的一个多元联系转换为一个关系模式。 关系的属性:与该多元联系相连的各实体的码以及联系本身的属性 关系的码:各实体码的组合 6. 具有相同码的关系模式可合并。 目的:减少系统中的关系个数。 合并方法:将其中一个关系模式的全部属性加入到另一个关系模式中,。

    11、然后去掉其中的同义属性(可能同名也可能不同名),并适当调整属性的次序(2) 关系模式(1)学生住宿表(student accommodation(SA):(学号xh,姓名xm,性别xb,专业zy,入住时间rzsj,联系方式lxfs,楼号lh,宿舍号ssh)(2)宿舍表(Dormitory):(区名qm,站名zm,楼号lh,宿舍号ssh,电话号码dhhm,可住人数kzrs,已住人数yzrs)(3)设备报修表(equipment maintenance(EM):(区名qm,站名zm,楼号lh,宿舍号ssh,物品号wph,报修原因bxyy,提交日期tjrq,解决日期jjrq, 报修费用bxfy)(4。

    12、)来访者表Victor:(来访人姓名lfrxm,被访人姓名bfrxm,所属关系gx,证件名称zj,来访日期lfrq,来访时间lfsj,归访时间gfsj,学号xh)(5)员工信息表Staff:(员工号ygh,员工姓名ygxm,年龄nl,楼号lh,性别xb,职位zw,联系方式lxfs)4、 物理结构设计数据库在物理设备上的存储结构与存储方法称为数据库的物理结构,为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程就是数据库的物理设计分两步走:(1)确定数据库的物理结构,在关系数据库中主要是存取方法和存储结构;(2)对物理结构进行评价,评价的重点是时间和空间效率。对于不同的表要建立不同的索。

    13、引,如学生住宿表建立唯一索引,宿舍表建立组合索引5、 实施和维护Create table SA(xh char(8) primary key,xm varchar(50) ,xb char(2),zy varchar(50), lxfs char(11),rzsj datetime ,lh char(2) ,ssh char(3), );Create table Dormitory(qm varchar(50),Zm int,Lh varchar(50),Ssh int,Dhhm int,Kzrs int,Yzrs int,);Create table EM(lh char(6) ,ssh c。

    14、har(6) ,wph char(8) ,bxyy char(50) ,tjrq datetime ,jjrq datetime ,bxfy decimal(5,2) ,);Create table Victor(lfzxm varchar(10) ,bfzxm varchar(10) ,gx Varchar(20) ,zj Varchar(20) ,lfrq Datetime ,lfsj Datetime ,gfsj Datetime ,bz Varchar(50),xh char(8) );Create table staff(ygh char(4) primary key,ygxm va。

    15、rchar(10) not null,nl smallint ),lh char(2),xm char(2) ,zw varchar(20) ,lxfs char(11),);导入数据Insert into SA(xh,xm,xb,zy,rzsj,lxfs,lh,ssh)Values()Insert into Dormitory(qm,zm,lh,ssh,dhhm,kzrs,yzrs)Values()Insert into EM(qm,zm,lh,ssh,wph,bxyy,tjrq,jjrq, bxfy)Values()Insert into Victor(lfrxm,bfrxm,gx,zj,lfrq,lfsj,gfsj,xh)Values()更新删除Update SA set xm=m+yghDelete from Staff where nl=50 简单查询Select * from SA;Select xh,xm,zy from SA where lh=5 and ssh=601;Select ygh from staff;Select ssh from Dormitory where qm=澄园。

    更多相关内容
  • 智慧校园宿舍管理系统解决方案
  • 员工宿舍管理方案doc7.doc
  • 职工宿舍消防管理初步方案.docx
  • 某医院职工宿舍区物业管理方案.docx
  • 相信你一直在找一篇关于某船厂员工宿舍楼物业管理方案的文档,在这里,不仅能下载使用某船厂员工宿舍...该文档为某船厂员工宿舍楼物业管理方案,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 精品教育教学资料
  • 企业风险管理方案:以员工宿舍为例试卷教案.pdf
  • (本系统实现学生与宿舍管理人员的基本信息查询,同时还有晚归管理,出入管理,维修管理,系统管理等功能,除此,每一个功能都可以进行添加,删除,修改等,而且界面非常友好,内置有使用方法说明)--(职工信息,...
  • 测试分析报告说明书 学生宿舍管理系统 目录 TOC \o "1-3" \h \z \u 一引言 4 1.1 测试目的 4 1.2项目背景 4 1.3定义 5 1.4术语定义 5 1.5参考资料 5 二任务概述 6 2.1目标 6 2.2运行环境 6 三计划 7 3.1测试方案 7 ...
  • 但是现在很多后勤部门都还是在使用最原始的宿舍管理方法。而且在学生入住的过程中学生住宿的信息得不到有效的更新,同时学生经常会更换宿舍等等。这样,无法保证学生住宿信息的完整性。也就是说现在没有一个很好的...
  • 高校宿舍管理系统

    千次阅读 2021-03-14 12:43:32
    ​ 提到宿舍,现在无论是学校,还是工厂,都是在熟悉不过的了,学生宿舍楼,职工教员工职工宿舍楼等等,每一栋楼房都有很多的房间,每个宿舍分配了多少个床位,住着什么人,那些床位是空的,那些房间是空的,这些...

    高校宿舍管理系统

    1.项目概况

    ​ 提到宿舍,现在无论是学校,还是工厂,都是在熟悉不过的了,学生宿舍楼,职工教员工,职工宿舍楼等等,每一栋楼房都有很多的房间,每个宿舍分配了多少个床位,住着什么人,那些床位是空的,那些房间是空的,这些都需要人员去维护,曾经的我们,通过纸张登记,查看房间信息,房间床位信息,房间少的情况下还好,我们可以一个个进行比对,看登记信息去查看房间信息,床位信息,但是房间多,登记信息多的情况下,或者有人员进行变动,退房,换房的情况下,可就麻烦了我们的宿舍管理员了,我们的宿舍管理员,需要慢慢的进行查找,浪费了时间成本不说,还容易出错,新来的学生或员工需要等待很长时间才能进去入住,在加上现在楼层在逐渐的向高层发展,人员手动管理已经不能满足社会的需要,因而,社会需要更好的工具去管理这些枯燥的的宿舍管理工作,从而宿舍管理系统应用而生。

    ​ 宿舍管理系统,解决了当前人力成本,时间成本问题,可以快速的定位到房间号,宿舍床位号,通过宿舍管理系统,我们只要根据系统的要求去操作,就可以分分钟的时间解决某个宿舍是否满员,可以方便的把人员和宿舍,床位进行绑定,就像我们的身份号似的,都是唯一的,查询起来很方便,相比较起传统的宿舍纸张登记来说,现代化的宿舍管理系统更快捷,更高效,更适应人们快捷化的生活。

    ​ 现在高校的发展和体制不断的进行了完善,所以学校的服务也逐渐有了变化,对于学校宿舍的管理有了新形势的管理模式。学校根据自身的实际情况,对于学生宿舍生活管理的服务进行改善。有些学校因为管理工作的错误,影响了学校里学生的现况,甚至给整个学校造成了负面的影响,而且现在学校管理问题普遍存在。所以现在学校也在建设信息化管理系统,这种管理系统,可以为学校的管理工作和宿舍管理工作带来很好的效果。

    2.项目目标

    2.1新生分配与入住

    在高校新生入住和分配上面,宿舍管理系统优势尽显,通常宿舍管理系统可通过新生预分配和新生入住两个模块实现对新生宿舍入住和宿舍分配的管理,这不但可保证分配入住的科学性,还能提升学生的入住效率,既减轻了人工分配的负担,也简化了学生的入住手续,更好地促进了学校和新生之间的和谐。

    2.2宿舍的全面管理

    通过对宿舍管理系统进行优化,高校宿舍的管理工作可细化成若干个系统的小模块,宿舍管理工作的细化在利于学生便捷高校入住的同时还让高校宿舍管理的智能化和信息化得到了进一步的彰显,通过对宿舍管理系统的全面优化,从整栋宿舍楼的整体管理到每一个床位的每一个角落都会实现整齐划一的管理。

    楼->单元->层->宿舍->床位

    2.3数据科学统计和分析

    宿舍管理系统中记载着整栋宿舍楼的和全部入住学生的相关信息,通过其完善智能的信息统计功能,高校或者宿舍管理者可对每个楼层的入住情况、每个房间的入住信息数据实现一键查看,不用再通过一步步、一级级地层层询问来获取相关信息,这在很大程度上促进了宿舍信息的共享。

    2.4精细化管理

    宿舍考勤,管理员,多角色管理,一目了然。寄宿生管理,班级,楼层、宿舍号精确考勤。床位分配管理,楼、栋管理员都有相对应的权限。就寝时间段可设置,班主班可随时关注住宿学生情况及时报表发送至班主任手机。

    2.5接口拓展功能

    系统预留的接口可与宿舍其他的智能设施实现对接,如宿舍管理系统可连接宿舍的考勤门禁系统和迎新收费系统,可真正通过计算机管理系统的运用实现智能化校园的建设。

    3.项目功能

    3.1 项目角色(参与者)

    • 超级管理员(拥有系统最高的权限)

    • 宿管员(宿舍管理员:对宿舍进行管理,按楼宇进行管理)

    • 学生(在线预选宿舍)

      详见思维导图(xmind文件 )

    3.1 项目功能

    • 基础资料
      • 用户管理(管理员、宿管员管理)
      • 年级管理
      • 学院、系、专业、班级(统称为组织机构)
      • 学生管理
      • 公告管理
    • 宿舍管理
      • 楼宇管理
      • 楼层管理
      • 宿舍管理(批量初始化、CURD)
      • 床位管理(入住、调换、退宿)
    • 预选宿舍
      • 预选设置
      • 预选操作
    • 缺勤、请假管理
      • 缺勤登记(影响床位状态)
      • 请假登记(影响床位状态)
    • 来访人员管理
      • 登记来访信息
      • 查询来访信息
    • 报修管理
      • 报修申请
      • 状态审批
      • 报修查询
    • 报表/图表管理
      • excel报表
      • echarts图表显示

    4.数据库设计

    数据库设计软件PowerDesigner

    安装:百度一下PowerDesigner的安装教程

    PowerDesigner与Navicate的区别

    • PowerDesigner重在可视化的设计
    • Navicate就是一个数据库的可视化客户端工具

    详见pdm图

    5.项目技术路线

    后端采用SpringBoot

    前端采用LayUI(在开发前端期间不涉及任何前后端页面跳转,只通过json数据传输,前后数据校验采用JWT)

    数据库采用MySQL(5.5至8.0)

    开发IDE:Idea、webstorme

    请求校验:JWT

    该项目支持三个版本

    • 前后端分离(SpringBoot+LayUI)(前后端来回切换台费劲,容易混淆)
    • SpringBoot版本前后端不分离(快速开发调试)
    • SSM版前后端不分离(需要将SpringBoot的配置重新按照xml的 格式配置一遍)

    6.项目搭建

    <mirror> 
        <id>alimaven</id> 
        <name>aliyun maven</name> 
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
        <mirrorOf>central</mirrorOf> 
    </mirror>
    
    • public:静态html文件

    • static:静态css、js等文件

    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/dormitory?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
        username: root
        password: 123456
    server:
      port: 8888
      servlet:
        context-path: /dormitory
    

    7.整合Mybatis

    在pom.xml中引入starter

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
    </dependency>
    
    配置Mapper目录
    mybatis:
      mapper-locations: com/yanzhen/mapper/*.xml
    打印SQL输出到控制台
    logging:
      level:
        com:
          yanzhen:
            mapper: debug
    

    8.Mybatis分页

    引入相关的jar

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.3.0</version>
    </dependency>
    

    配置yml文件

    pagehelper:
      helper-dialect: mysql
    
    public class Entity {
    
        private Integer page;//页码数
        private Integer limit = 10;//页面大小,默认的10
    
        public Integer getPage() {
            return page;
        }
    
        public void setPage(Integer page) {
            this.page = page;
        }
    
        public Integer getLimit() {
            return limit;
        }
    
        public void setLimit(Integer limit) {
            this.limit = limit;
        }
    
    }
    

    9.代码生成器

    entity

    package ${data.packageName}modules.${data.moduleName}.entity;
    
    import javax.validation.constraints.NotNull;
    import org.hibernate.validator.constraints.Length;
    import com.yanzhen.utils.Entity;
    import java.util.Date;
    
    
    /**
     * ${data.classAnnotation}
     * @author ${data.author}
     * @time ${data.createTime}
     */
    public class ${data.entityName} extends Entity{
    
    <#list data.datas as item>
    	/**
    	 * ${item.annotation}
    	 */
    	<#if item.type == "String" && item.field !="id">
    	@Length(max = ${item.typeLength?c})
    	</#if>
    	private ${item.type} ${item.field};
    </#list>
    
    <#list data.datas as item>
    	public ${item.type} get${item.fieldUpper}() {
    		return ${item.field};
    	}
    	public void set${item.fieldUpper}(${item.type} ${item.field}) {
    		this.${item.field} = ${item.field};
    	}
    </#list>
    }
    

    mapper

    package ${data.packageName}.mapper;
    
    import java.util.List;
    import java.util.Map;
    
    import ${data.packageName}.entity.${data.entityName};
    
    public interface ${data.entityName}Mapper {
    
    	public int create(${data.entityName} ${data.objectName});
    
    	public int delete(Integer id);
    
    	public int update(${data.entityName} ${data.objectName});
    
    	public int updateSelective(${data.entityName} ${data.objectName});
    
    	public List<${data.entityName}> query(${data.entityName} ${data.objectName});
    
    	public ${data.entityName} detail(Integer id);
    
    	public int count(${data.entityName} ${data.objectName});
    
    }
    

    mapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="${data.packageName}.mapper.${data.entityName}Mapper">
    
    	<resultMap type="${data.packageName}.entity.${data.entityName}" id="${data.entityName}">
    		<id column="id" property="id"/>
    		<#list data.datas as item>
    		<#if item.column == "id"><#continue></#if>
    		<result column="${item.column}"  property="${item.field}"/>
    		</#list>
    	</resultMap>
    
    	<insert id="create" keyProperty="id" useGeneratedKeys="true" parameterType="${data.packageName}.entity.${data.entityName}">
    		insert into ${data.tableName}(
    		<#list data.datas as item>
    			<#if item.column == "id"><#continue></#if>
    			${item.column}<#if item_index!=(data.datas?size-1)>,</#if>
    		</#list>
    		)values(
    		<#list data.datas as item>
    			<#if item.column == "id"><#continue></#if>
    			<#noparse>#{</#noparse>${item.field}<#noparse>}</#noparse><#if item_index!=(data.datas?size-1)>,</#if>
    		</#list>
    		)
    	</insert>
    
    	<select id="query" resultMap="${data.entityName}">
    		select * from ${data.tableName}
    		<include refid="${data.entityName}FindCriteria"/>
    	</select>
    
    	<select id="count" resultType="int">
    		select count(1) from ${data.tableName}
    		<include refid="${data.entityName}FindCriteria"/>
    	</select>
    
    	<select id="detail" resultMap="${data.entityName}">
    		select * from ${data.tableName} where id = <#noparse>#{id}</#noparse>
    	</select>
    
    	<delete id="delete">
    		delete from ${data.tableName} where id = <#noparse>#{id}</#noparse>
    	</delete>
    	<update id="update">
    		update ${data.tableName} set
    		<#list data.datas as item>
    			<#if item.column == "id"><#continue></#if>
    			${item.column}=<#noparse>#{</#noparse>${item.field}<#noparse>}</#noparse><#if item_index!=(data.datas?size-1)>,</#if>
    		</#list>
    		where id = <#noparse>#{id}</#noparse>
    	</update>
    
    	<update id="updateSelective">
    		update ${data.tableName} set
    		<#list data.datas as item>
    		<#if item.column == "id"><#continue></#if>
    		<#if item.type == "String" || item.type == "Date">
    			<if test="${item.field} != null and ${item.field} != ''"> ${item.column} = <#noparse>#{</#noparse>${item.field}<#noparse>}</#noparse></if><#if item_index!=(data.datas?size-1)>,</#if>
    		<#else>
    			<if test="${item.field} != null">${item.column} = <#noparse>#{</#noparse>${item.field}<#noparse>}</#noparse></if><#if item_index!=(data.datas?size-1)>,</#if>
    		</#if>
    		</#list>
    		where id = <#noparse>#{id}</#noparse>
    	</update>
    
    	<sql id="${data.entityName}FindCriteria">
    		<where>
    		<#list data.datas as item><#if item.type == "Date"><#continue></#if>
    		<#if item.type == "String">
    			<if test="${item.field} != null and ${item.field} != ''">and ${item.column} = <#noparse>#{</#noparse>${item.field}<#noparse>}</#noparse></if>
    		<#else>
    			<if test="${item.field} != null">and ${item.column} = <#noparse>#{</#noparse>${item.field}<#noparse>}</#noparse></if>
    		</#if>
    		</#list>
    		</where>
    	</sql>
    
    </mapper>
    

    service

    package ${data.packageName}.service;
    
    import com.yanzhen.mapper.${data.entityName}Mapper;
    import com.yanzhen.entity.${data.entityName};
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class ${data.entityName}Service {
    
        @Autowired
        private ${data.entityName}Mapper ${data.objectName}Mapper;
    
        public int create(${data.entityName} ${data.objectName}) {
            return ${data.objectName}Mapper.create(${data.objectName});
        }
    
        public int delete(Integer id) {
            return ${data.objectName}Mapper.delete(id);
        }
    
        public int update(${data.entityName} ${data.objectName}) {
            return ${data.objectName}Mapper.update(${data.objectName});
        }
    
        public int updateSelective(${data.entityName} ${data.objectName}) {
            return ${data.objectName}Mapper.updateSelective(${data.objectName});
        }
    
        public PageInfo<${data.entityName}> query(${data.entityName} ${data.objectName}) {
            if(${data.objectName} != null && ${data.objectName}.getPage() != null){
                PageHelper.startPage(${data.objectName}.getPage(),${data.objectName}.getLimit());
            }
            return new PageInfo<${data.entityName}>(${data.objectName}Mapper.query(${data.objectName}));
        }
    
        public ${data.entityName} detail(Integer id) {
            return ${data.objectName}Mapper.detail(id);
        }
    
        public int count(${data.entityName} ${data.objectName}) {
            return ${data.objectName}Mapper.count(${data.objectName});
        }
    }
    
    

    10.前端

    Layui+Layuimini 单页版V2

    Layuimini:基于Layui编写的一套最简洁、易用的后台框架模板(基本上与LayuiAdminPro功能上类似)

    整合部分详见视频+代码

    11.前后端分离项目

    • ajax(前端实现类似拦截器这样的效果比较差,改动代码太多)
    • axios(易用、简洁且高效的http库)

    http://www.axios-js.com/zh-cn/docs/

    Promise(不太了解的同学看一下即可)

    特性

    • 从浏览器中创建 XMLHttpRequests
    • 从 node.js 创建 http 请求
    • 支持 Promise API
    • 拦截请求和响应
    • 转换请求数据和响应数据
    • 取消请求
    • 自动转换 JSON 数据
    • 客户端支持防御 XSRF

    12.Layui集成Axios

    //前后端分离的项目 数据传输的验证采用token
    
    axios.interceptors.request.use(function(config){
        config.headers.token="zzzzzzzzzzzzzzzz";//与后端交互的时候还需要处理
        return config;
    },function(error){
        return Promise.reject(error);
    });
    
    
    axios.interceptors.response.use(function(response){
        console.log(response.headers['content-type']);与后端交互的时候还需要处理
        if(response.status==200){
            const res = response.data;
            if(res.code==0){ //后端返回的数据为0的时候为正常数据
                return res;
            }else{
                return Promise.reject(res.msg);
            }
        }else{
            return Promise.reject(response.statusText);
        }
    },function(error){
        return Promise.reject(error);
    });
    
    

    13.登录页面与主页

    • 前端项目的分包结构
    • 掌握调整js、css、images文件路径

    14.登录功能

    form.on('submit(login)', function (data) {
        data = data.field;
        console.log(data);
        axios({
            method: 'post',
            url: 'http://localhost:8888/dormitory/login',
            data: data
        }).then(function(data){
            console.log(data);
        }).catch(function(error){
            console.log(data);
        });
        return false;
    });
    

    15.跨域处理

    @Configuration
    public class MyWebMvcConfigurer implements WebMvcConfigurer {
    
        //使用CorsFilter解决跨域的问题
        @Bean
        public CorsFilter corsFilter(){
            CorsConfiguration corsConfiguration = new CorsConfiguration();
            //允许跨域请求的域名
            corsConfiguration.addAllowedOrigin("*");
            corsConfiguration.addAllowedMethod("*");
            //允许任何头部
            corsConfiguration.addAllowedHeader("*");
            UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
            urlBasedCorsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);
            CorsFilter corsFilter = new CorsFilter(urlBasedCorsConfigurationSource);
            return corsFilter;
        }
    }
    
    

    16.基于Token的身份验证

    ​ 参考网页

    ​ https://www.cnblogs.com/Jason-Xiang/p/9808596.html

    ​ http://tool.chinaz.com/Tools/Base64.aspx

    • HTTP Basic Auth

      HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,尽量避免采用HTTP Basic Auth。

    • Cookie Auth

      Cookie认证机制就是为一次请求认证在服务端创建一个Session对象,同时在客户端的浏览器端创建了一个Cookie对象(jsessionId);通过客户端带上的Cookie对象来与服务器端的session对象匹配来实现状态管理的。默认的,当我们关闭浏览器的时候,cookie会被删除。但可以通过修改cookie 的expire time使cookie在一定时间内有效。

    • 基于 Token 的身份验证方法

      使用基于 Token 的身份验证方法,大概的流程是这样的:

      1. 客户端使用用户名跟密码请求登录
      2. 服务端收到请求,去验证用户名与密码
      3. 验证成功后,服务端会签发一个 Token然后保存(缓存或者数据库),再把这个 Token 发送给客户端
      4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
      5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
      6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

      Token机制相对于Cookie机制又有什么好处呢?

      • 支持跨域访问: Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输.
      • 无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息,只需要在客户端的cookie或本地介质存储状态信息.
      • 更适用CDN: 可以通过内容分发网络请求你服务端的所有资料(如:javascript,HTML,图片等),而你的服务端只要提供API即可.
      • 去耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在你的API被调用的时候,你可以进行Token生成调用即可.
      • 更适用于移动应用: 当你的客户端是一个原生平台(iOS, Android,Windows 8等)时,Cookie是不被支持的(你需要通过Cookie容器进行处理),这时采用Token认证机制就会简单得多。
      • CSRF:因为不再依赖于Cookie,所以你就不需要考虑对CSRF(跨站请求伪造)的防范。
      • 性能: 一次网络往返时间(通过数据库查询session信息)总比做一次HMACSHA256计算 的Token验证和解析要费时得多.
      • 基于标准化:你的API可以采用标准化的 JSON Web Token (JWT). 这个标准已经存在多个后端库(.NET, Ruby, Java,Python, PHP)和多家公司的支持(如:Firebase,Google, Microsoft).

      基于JWT(JSON WebToken)的Token认证机制实现

      实现Token 验证的方法挺多的,还有一些标准规范,其中JSON Web Token(JWT)是一个非常轻巧的规范 。JWT 标准的 Token 有三个部分:

      • header(头部)
      • payload(数据)
      • signature(签名)

      中间用点分隔开,并且都会使用 Base64 编码,所以真正的 Token 看起来像这样:

      eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
      

      Header

      每个 JWT token 里面都有一个 header,也就是头部数据。里面包含了使用的算法,这个 JWT 是不是带签名的或者加密的。主要就是说明一下怎么处理这个 JWT token 。

      头部里包含的东西可能会根据 JWT 的类型有所变化,比如一个加密的 JWT 里面要包含使用的加密的算法。唯一在头部里面要包含的是 alg 这个属性,如果是加密的 JWT,这个属性的值就是使用的签名或者解密用的算法。如果是未加密的 JWT,这个属性的值要设置成 none

      示例:

      {
        "alg": "HS256"
      }
      

      意思是这个 JWT 用的算法是 HS256。上面的内容得用 base64url 的形式编码一下,所以就变成这样:

      eyJhbGciOiJIUzI1NiJ9
      

      Payload

      Payload 里面是 Token 的具体内容,这些内容里面有一些是标准字段,你也可以添加其它需要的内容。下面是标准字段:

      • iss:Issuer,发行者
      • sub:Subject,主题
      • aud:Audience,观众
      • exp:Expiration time,过期时间
      • nbf:Not before
      • iat:Issued at,发行时间
      • jti:JWT ID

      比如下面这个 Payload ,用到了 iss 发行人,还有 exp 过期时间这两个标准字段。另外还有两个自定义的字段,一个是 name ,还有一个是 admin

      {
       "iss": "nihao.net",
       "exp": "1438955445",
       "name": "wanghao",
       "admin": true
      }
      

      使用 base64url 编码以后就变成了这个样子:

      eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ
      

      Signature

      JWT 的最后一部分是 Signature ,这部分内容有三个部分,先是用 Base64 编码的 header.payload ,再用加密算法加密一下,加密的时候要放进去一个 Secret ,这个相当于是一个密码,这个密码秘密地存储在服务端。

      • header
      • payload
      • secret
      const encodedString = base64UrlEncode(header) + "." + base64UrlEncode(payload); 
      HMACSHA256(encodedString, 'secret');
      

      处理完成以后看起来像这样:

      SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
      

      最后这个在服务端生成并且要发送给客户端的 Token 看起来像这样:

      eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
      

      客户端收到这个 Token 以后把它存储下来,下回向服务端发送请求的时候就带着这个 Token 。服务端收到这个 Token ,然后进行验证,通过以后就会返回给客户端想要的资源。

      JWT的JAVA实现

      Java中对JWT的支持可以考虑使用JJWT开源库;JJWT实现了JWT, JWS, JWE 和 JWA RFC规范

      <dependency>
          <groupId>io.jsonwebtoken</groupId>
          <artifactId>jjwt</artifactId>
          <version>0.9.1</version>
      </dependency>
      

      jwtutils通用类的封装

      package com.yanzhen.framework.jwt;
      
      import com.yanzhen.entity.User;
      import com.yanzhen.framework.exception.MyException;
      import io.jsonwebtoken.*;
      import org.springframework.util.StringUtils;
      
      import java.util.Date;
      import java.util.HashMap;
      import java.util.Map;
      import java.util.UUID;
      
      /**
       * jwt的工具类
       */
      public class JWTUtil {
      
          public static String token = "token";
          //秘钥
          public static String jwt_secret="yanzhen@cms@cc596183363.";
          //过期时长
          public static long jwt_expr = 3600*24*1000;
      
          //1、生成token
          public static String sign(User user){
      
              //1、指定签名的时候使用的签名算法
              SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
              //2、生成签发时间
              long nowMillis = System.currentTimeMillis();
              Date date = new Date(nowMillis);
      
              //3、创建playLoad的私有声明
              Map<String,Object> claims = new HashMap<>();
              claims.put("id",user.getId());
              claims.put("userName",user.getUserName());
              //4、生成签发人
              String subject = user.getUserName();
      
              JwtBuilder builder = Jwts.builder()
                      .setClaims(claims)
                      .setId(UUID.randomUUID().toString())
                      .setIssuedAt(date)
                      .setSubject(subject)
                      .signWith(signatureAlgorithm,jwt_secret);
              //设置过期时间
              Date exprDate = new Date(nowMillis + jwt_expr);
              builder.setExpiration(exprDate);
              return builder.compact();
          }
      
          //2、验证token
          public static boolean verify(String token){
              try {
                  if(StringUtils.isEmpty(token)){
                      return false;
                  }
                  Jwts.parser().setSigningKey(jwt_secret).parseClaimsJws(token).getBody();
                  return true;
              } catch (Exception e) {
                  e.printStackTrace();
                  return false;
              }
          }
          //3、获取用户信息
      
          public static User getUser(String token){
              try {
                  if(StringUtils.isEmpty(token)){
                      throw new MyException("token不能为空");
                  }
                  if(verify(token)){
                      Claims claims = Jwts.parser().setSigningKey(jwt_secret).parseClaimsJws(token).getBody();
                      User user = new User();
                      user.setId(Integer.parseInt(claims.get("id")+""));
                      user.setUserName(claims.get("userName")+"");
                      return user;
                  }else{
                      throw new MyException("超时或不合法token");
                  }
              } catch (Exception e) {
                  throw new MyException("超时或不合法token");
              }
          }
      
      
          public static void main(String[] args) {
              User user = new User();
              user.setId(1);
              user.setUserName("admin");
              System.out.println(sign(user));
          }
      
      }
      

    17.token应用

    @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            String token = request.getHeader(JWTUtil.token);
            //根据token获取user对象
            User user = JWTUtil.getUser(token);
            if(user == null){
                throw  new MyException("超时或不合法的token");
            }
            String newToken = JWTUtil.sign(user);
            response.setHeader(JWTUtil.token,newToken);
            //很重要
            response.setHeader("Access-Control-Expose-Headers", JWTUtil.token);
            request.setAttribute("user",user);
            return true;
        }
    
    axios.interceptors.response.use(function(response){
        if(response.headers.token){
            store.setToken(response.headers.token);
        }
        if(response.status==200){
            const res = response.data;
            if(res.code==200){ //后端返回的数据为200的时候为正常数据
                return res;
            }else{
                return Promise.reject(res.msg);
            }
        }else{
            return Promise.reject(response.statusText);
        }
    },function(error){
        return Promise.reject(error);
    });
    

    18.用户管理

    19.年级管理

    20.组织机构

    • ztree
    • layui集成ztree
    • 实现对ztree节点的curd
    • 数据库设计方面满足tree型结构(parentId)
    • 所有的叶子节点都是班级
    layui集成ztree
    layui.define(['jquery'],function(exports){
    let jQuery = layui.jquery;
    ...
    
    
    layui.link(layui.cache.base+'ztree/zTreeStyle.css')
     exports("ztree",jQuery.fn.zTree)
    });
    
    
    layui.config({
        base: rootPath + "lay-module/",
        version: true
    }).extend({
        miniAdmin: "layuimini/miniAdmin", // layuimini后台扩展
        miniMenu: "layuimini/miniMenu", // layuimini菜单扩展
        miniPage: "layuimini/miniPage", // layuimini 单页扩展
        miniTheme: "layuimini/miniTheme", // layuimini 主题扩展
        miniTongji: "layuimini/miniTongji", // layuimini 统计扩展
        step: 'step-lay/step', // 分步表单扩展
        treetable: 'treetable-lay/treetable', //table树形扩展
        tableSelect: 'tableSelect/tableSelect', // table选择扩展
        iconPickerFa: 'iconPicker/iconPickerFa', // fa图标选择扩展
        echarts: 'echarts/echarts', // echarts图表扩展
        echartsTheme: 'echarts/echartsTheme', // echarts图表主题扩展
        wangEditor: 'wangEditor/wangEditor', // wangEditor富文本扩展
        layarea: 'layarea/layarea', //  省市县区三级联动下拉选择器
        axios: 'axios/axios', //  axios
        store: 'store/store', //  store
        ztree: 'ztree/ztree', //  axios
    });
    
    ztree操作
    • 实现树形的CURD
    • 树形采用异步还非异步

    21.功能菜单权限设置

    • 管理员设置
      • 所有功能菜单、数据权限
    • 宿管员设置
      • 为每个宿管员单独设置功能菜单权限
      • 拥有自己的数据权限
        • 楼宇管理
          • 楼层
          • 宿舍
          • 学生

    22.学生管理

    • 基础信息(管理员)

    23.楼宇管理

    24.宿舍管理

    25.宿舍编号设置

    26.宿舍初始化

    展开全文
  • 宿舍报修维修宿舍管理系统

    项目介绍

    宿舍管理主要在各个中学和高校中经常提到。宿舍管理是后勤部门的一个重要工作。但是现在很多后勤部门都还是在使用最原始的宿舍管理方法。而且在学生入住的过程中学生住宿的信息得不到有效的更新,同时学生经常会更换宿舍等等。这样,无法保证学生住宿信息的完整性。也就是说现在没有一个很好的办法来管理学生的住宿信息。这也是后勤管理的一个缺陷。每个学校都会有自己的一套管理方法和管理制度。同时很多学校的管理方法都是大同小异。在宿舍管理过程中宿舍管理制度是一个依据,同时也是一种规范。每次新学期开始都会有很多新的面孔进入学校或者公司。他们的迎接安排工作也非常重要。在住宿过程中,很多时候学生或者员工会要求调整宿舍。他们可能出于不同的原因,在这个过程中很多合理的要求都会被楼管和宿舍管理部门所接受。当学生毕业或者员工离开的时候,需要做好宿舍信息的统计。统计还有多少宿舍铺位可以利用,已经有多少铺位被占用。每天都有很多的同学出入宿舍,宿舍的安全是楼层管理人员和学校非常关心的问题。在很多学校开始实行一卡通,这个也是防范意外发生的好方法。在公司中的出入管理就相对比较复杂,这些只能依靠门卫来处理。不管是员工宿舍还是学生宿舍,财务管理是重中之重。其中包括水费管理,电费管理,还可能包括维修费管理。在宿舍的管理过程中,宿舍建设管理是也是很重要的事情。但是在实际的宿舍管理过程中没有得到很好的重视。

    系统人物职责介绍

    超级管理员

    超级管理员是宿舍管理过程中的核心人物。他要管理公共场所的卫生,还有监督学生宿舍建设。同时也是宿舍管理制度的执行者。

    宿舍管理员

    宿舍管理员在宿舍管理过程中起到了协助作用。他们协助宿舍管理部门,楼管执行宿舍管理中的査宿等等。

    学生

    在学校,学生是学校宿舍管理的主体。相对而言,在公司,员工的宿舍管理要适当放松,因为很多员工的生活习惯是不相同的。只有在共同的文化建设上下功夫,宿舍管理才能更好的实施。

    数据库ER图

    在这里插入图片描述

    相关截图

    登录

    在这里插入图片描述

    学生信息

    在这里插入图片描述

    处理报修

    在这里插入图片描述

    职工信息

    在这里插入图片描述

    个人信息

    在这里插入图片描述

    部分代码

    数据库配置

    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dorm?
    
    serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
    
    spring.datasource.username=root
    
    spring.datasource.password=123456
    
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    spring.mvc.view.prefix=/WEB-INF/view/
    
    spring.mvc.view.suffix=.jsp
    
    #是否显示SQL
    
    spring.jpa.show-sql=true
    

    Maven依赖配置

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
       <modelVersion>4.0.0</modelVersion>
    
       <parent>
    
          <groupId>org.springframework.boot</groupId>
    
          <artifactId>spring-boot-starter-parent</artifactId>
    
          <version>2.0.0.RELEASE</version>
    
          <relativePath/> <!-- lookup parent from repository -->
    
       </parent>
    
       <groupId>com.shixin</groupId>
    
       <artifactId>dormitory-management</artifactId>
    
       <version>0.0.1-SNAPSHOT</version>
    
       <name>dormitory-management</name>
    
       <description>大学生宿舍管理系统</description>
    
       <properties>
    
          <java.version>1.8</java.version>
    
       </properties>
    
       <dependencies>
    
          <dependency>
    
             <groupId>org.springframework.boot</groupId>
    
             <artifactId>spring-boot-starter-data-jpa</artifactId>
    
          </dependency>
    
          <dependency>
    
             <groupId>org.springframework.boot</groupId>
    
             <artifactId>spring-boot-starter-web</artifactId>
    
          </dependency>
    
          <!--easypoi-->
    
            <dependency>
    
                <groupId>cn.afterturn</groupId>
    
                <artifactId>easypoi-base</artifactId>
    
                <version>3.2.0</version>
    
            </dependency>
    
            <dependency>
    
                <groupId>cn.afterturn</groupId>
    
                <artifactId>easypoi-web</artifactId>
    
                <version>3.2.0</version>
    
            </dependency>
    
            <dependency>
    
                <groupId>cn.afterturn</groupId>
    
                <artifactId>easypoi-annotation</artifactId>
    
                <version>3.2.0</version>
    
            </dependency>
    
          <!-- tomcat支持 -->
    
           <dependency>
    
               <groupId>org.springframework.boot</groupId>
    
               <artifactId>spring-boot-starter-tomcat</artifactId>
    
               <scope>provided</scope>
    
           </dependency>
    
          <dependency>
    
                <groupId>org.apache.tomcat.embed</groupId>
    
                <artifactId>tomcat-embed-jasper</artifactId>
    
                <scope>provided</scope>
    
            </dependency>
    
            <dependency>
    
                <groupId>javax.servlet</groupId>
    
                <artifactId>jstl</artifactId>
    
            </dependency>
    
          <dependency>
    
             <groupId>org.springframework.boot</groupId>
    
             <artifactId>spring-boot-devtools</artifactId>
    
             <scope>runtime</scope>
    
          </dependency>
    
          <dependency>
    
             <groupId>com.h2database</groupId>
    
             <artifactId>h2</artifactId>
    
             <scope>runtime</scope>
    
          </dependency>
    
          <dependency>
    
             <groupId>mysql</groupId>
    
             <artifactId>mysql-connector-java</artifactId>
    
             <version>8.0.16</version>
    
             <scope>runtime</scope>
    
          </dependency>
    
          <dependency>
    
             <groupId>org.springframework.boot</groupId>
    
             <artifactId>spring-boot-starter-test</artifactId>
    
             <scope>test</scope>
    
          </dependency>
    
       </dependencies>
    
       <build>
    
          <plugins>
    
             <plugin>
    
                <groupId>org.springframework.boot</groupId>
    
                <artifactId>spring-boot-maven-plugin</artifactId>
    
             </plugin>
    
          </plugins>
    
       </build>
    
       <repositories>
    
          <repository>
    
             <id>spring-snapshots</id>
    
             <name>Spring Snapshots</name>
    
             <url>https://repo.spring.io/snapshot</url>
    
             <snapshots>
    
                <enabled>true</enabled>
    
             </snapshots>
    
          </repository>
    
          <repository>
    
             <id>spring-milestones</id>
    
             <name>Spring Milestones</name>
    
             <url>https://repo.spring.io/milestone</url>
    
          </repository>
    
       </repositories>
    
       <pluginRepositories>
    
          <pluginRepository>
    
             <id>spring-snapshots</id>
    
             <name>Spring Snapshots</name>
    
             <url>https://repo.spring.io/snapshot</url>
    
             <snapshots>
    
                <enabled>true</enabled>
    
             </snapshots>
    
          </pluginRepository>
    
          <pluginRepository>
    
             <id>spring-milestones</id>
    
             <name>Spring Milestones</name>
    
             <url>https://repo.spring.io/milestone</url>
    
          </pluginRepository>
    
       </pluginRepositories>
    
    </project>
    

    登录拦截

    public class LoginInterceptor implements HandlerInterceptor {
    
    
    
       @Override
    
       public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    
             throws Exception {
    
          HttpSession session = request.getSession();
    
          UserExpand info = (UserExpand) session.getAttribute("LOGIN_USER");
    
          if (info != null) {
    
             // 登录成功不拦截
    
             return true;
    
          } else {
    
             response.sendRedirect(request.getContextPath() + "/login/toLogin");
    
             return false;
    
          }
    
       }
    
    
    
       @Override
    
       public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
    
             ModelAndView modelAndView) throws Exception {
    
          // TODO Auto-generated method stub
    
          HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    
       }
    
    
    
       @Override
    
       public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
    
             throws Exception {
    
          // TODO Auto-generated method stub
    
          HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    
       }
    

    视图层配置

    @Override
    
    public void addInterceptors(InterceptorRegistry registry) {
    
       InterceptorRegistration interceptor = registry.addInterceptor(loginInterceptor);
    
       interceptor.excludePathPatterns("/login/toLogin");
    
       interceptor.excludePathPatterns("/login");
    
       interceptor.excludePathPatterns("/static/**");
    
       interceptor.addPathPatterns("/**");
    
    }
    
    
    
    @Override
    
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    
       registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    
    }
    
    
    
    @Bean
    
    public InternalResourceViewResolver setupViewResolver() {
    
       InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    
       resolver.setPrefix("/WEB-INF/view/");
    
       resolver.setSuffix(".jsp");
    
       return resolver;
    
    }
    

    常用工具类

    public class ExportExcelUtil {
    
    
    
        /**
    
         * 下载
    
         *
    
         * @param response HttpServletResponse
    
         * @param fileName 文件名
    
         * @param workbook Workbook
    
         */
    
        public static void downLoadExcel(HttpServletResponse response, String fileName, Workbook workbook) {
    
            try {
    
                response.setCharacterEncoding("UTF-8");
    
                response.setHeader("content-Type", "application/vnd.ms-excel");
    
                response.setHeader("Content-Disposition",
    
                        "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8"));
    
                workbook.write(response.getOutputStream());
    
            } catch (Exception e) {
    
                e.printStackTrace();
    
            }
    
        }
    
    
    
        /**
    
         * 设置sum公式
    
         *
    
         * @param wk      Workbook
    
         * @param sumCol  合计
    
         * @param itemCol 合计的项
    
         */
    
        public static void setSumFormula(Workbook wk, Character sumCol, Character... itemCol) {
    
            StringBuffer buffer = new StringBuffer();
    
            Sheet sheet = wk.getSheetAt(0);
    
            Row row = null;
    
            for (int i = sheet.getFirstRowNum() + 2; i <= sheet.getLastRowNum(); i++) {
    
                row = sheet.getRow(i);
    
                for (Character item : itemCol) {
    
                    CellAddress address = row.createCell(colCharToNum(item)).getAddress();
    
                    buffer.append(address + ":");
    
                }
    
    
    
                String substring = buffer.toString().substring(0, buffer.toString().lastIndexOf(":"));
    
                row.createCell(colCharToNum(sumCol)).setCellFormula(String.format("sum(%s)", substring));
    
                buffer.setLength(0);
    
            }
    
        }
    
    
    
        /**
    
         * 列英文标识转数字列号
    
         *
    
         * @param character char
    
         * @return
    
         */
    
        private static Integer colCharToNum(Character character) {
    
            return (int) character - 65;
    
        }
    
    }
    

    业务层(service)

    @Override
    
    public List<Stuinfo> findAll(UserExpand user) {
    
        if (user.getStaffinfo() != null) {
    
            Specification specification = (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.like(root.get("dormid"), user.getStaffinfo().getDormname() + user.getStaffinfo().getDormno() + "%");
    
            return stuRepository.findAll(specification);
    
        } else {
    
            return stuRepository.findAll();
    
        }
    
    }
    
    
    
    @Override
    
    public Page<Stuinfo> findStus(Pageable pageable, UserExpand user, String searchId, String searchDormName) {
    
        if (user.getStaffinfo() != null) {
    
            return stuRepository.findAll(createSpe(searchId, searchDormName, user.getStaffinfo()), pageable);
    
        } else {
    
            return stuRepository.findAll(createSpe(searchId, searchDormName, null), pageable);
    
        }
    
    }
    
    
    
    public Specification createSpe(String searchId, String searchDormName, Staffinfo staffinfo) {
    
        List<Predicate> predicates = new ArrayList<>();
    
        return (root, criteriaQuery, criteriaBuilder) -> {
    
            if (StringUtils.isNotEmpty(searchId)) {
    
                predicates.add(criteriaBuilder.equal(root.get("id"), searchId));
    
            }
    
            if (StringUtils.isNotEmpty(searchDormName)) {
    
                predicates.add(criteriaBuilder.equal(root.get("grade"), searchDormName));
    
            }
    
            if (null != staffinfo) {
    
                predicates.add(criteriaBuilder.like(root.get("dormid"),
    
                        staffinfo.getDormname() + staffinfo.getDormno() + "%"));
    
            }
    
            predicates.add(criteriaBuilder.equal(root.get("status"), 0));
    
            return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
    
        };
    
    }
    
    
    
    
    
    @Override
    
    @Transactional
    
    public Boolean importExcel(MultipartFile file) {
    
        try {
    
            List<Stuinfo> stuList = ExcelImportUtil.importExcel(file.getInputStream(), Stuinfo.class,
    
                    new ImportParams());
    
            stuRepository.saveAll(stuList);
    
            List<User> userList = stuList.stream().map(e -> {
    
                User user = new User();
    
                user.setUsername(e.getId());
    
                user.setPassword("123456");
    
                user.setPermission(0);
    
                return user;
    
            }).collect(Collectors.toList());
    
            userRepository.saveAll(userList);
    
        } catch (Exception e) {
    
            e.printStackTrace();
    
            return false;
    
        }
    
        return true;
    
    }
    
    
    
    @Override
    
    public Boolean leaveSchool(List<String> ids) {
    
        try {
    
            stuRepository.update(1, ids);
    
        } catch (Exception e2) {
    
            e2.printStackTrace();
    
            return false;
    
        }
    
        return true;
    
    }
    
    
    
    @Override
    
    public Boolean resetPwd(String stuId) {
    
        try {
    
            User user = userRepository.findByUsername(stuId);
    
            user.setPassword("123456");
    
            userRepository.save(user);
    
        } catch (Exception e) {
    
            e.printStackTrace();
    
            return false;
    
        }
    
        return true;
    
    }
    
    
    
    @Override
    
    @Transactional
    
    public Boolean del(String stuId) {
    
        try {
    
            Stuinfo stuinfo = new Stuinfo();
    
            stuinfo.setId(stuId);
    
            stuRepository.delete(stuinfo);
    
            User user = userRepository.findByUsername(stuId);
    
            userRepository.delete(user);
    
        } catch (Exception e) {
    
            e.printStackTrace();
    
            return false;
    
        }
    
        return true;
    
    }
    
    
    
    @Override
    
    public Boolean update(Stuinfo stuinfo) {
    
        try {
    
            stuRepository.save(stuinfo);
    
        } catch (Exception e) {
    
            e.printStackTrace();
    
            return false;
    
        }
    
        return true;
    
    }
    
    
    
    @Override
    
    public Boolean updatePhone(Stuinfo stuinfo) {
    
        try {
    
            stuRepository.updatePhone(stuinfo.getId(), stuinfo.getPhone());
    
        } catch (Exception e) {
    
            e.printStackTrace();
    
            return false;
    
        }
    
        return true;
    
    }
    

    控制层(Controller)

    @PostMapping("/exportInfo")
    
    public void exportInfo(HttpSession session, HttpServletResponse response) {
    
        UserExpand user = (UserExpand) session.getAttribute("LOGIN_USER");
    
        List<Stuinfo> list = stuServiceI.findAll(user);
    
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("学生信息", "学生信息表1"), Stuinfo.class, list);
    
        ExportExcelUtil.downLoadExcel(response, "学生信息表", workbook);
    
    }
    
    
    
    @GetMapping("/infoView")
    
    public String getInfoView(HttpSession session, Model model) throws Exception {
    
        UserExpand user = (UserExpand) session.getAttribute("LOGIN_USER");
    
        Stuinfo stuinfo = stuServiceI.findById(user.getUsername());
    
        model.addAttribute("stuinfo", new ObjectMapper().writeValueAsString(stuinfo));
    
        return "stu/infoView";
    
    }
    
    
    
    @GetMapping("/updatePwd")
    
    public String updatePwd(HttpSession session, Model model) {
    
        UserExpand user = (UserExpand) session.getAttribute("LOGIN_USER");
    
        Stuinfo stuinfo = stuServiceI.findById(user.getUsername());
    
        model.addAttribute("id", stuinfo.getId());
    
        return "stu/updatePwd";
    
    }
    
    
    
    @PostMapping("/updatePhone")
    
    @ResponseBody
    
    public Boolean updatePhone(Stuinfo stuinfo) {
    
        return stuServiceI.updatePhone(stuinfo);
    
    }
    
    
    
    @PostMapping("/updatePwd")
    
    @ResponseBody
    
    public Boolean updatePwd(String id, String oldPwd, String newPwd) {
    
        return stuServiceI.updatePwd(id, oldPwd, newPwd);
    
    }
    
    
    
    @GetMapping("/list")
    
    @ResponseBody
    
    public Page<Stuinfo> getStuInfo(@PageableDefault Pageable pageable, HttpSession session, String searchId, String searchDormName) {
    
        UserExpand user = (UserExpand) session.getAttribute("LOGIN_USER");
    
        return stuServiceI.findStus(pageable, user, searchId, searchDormName);
    
    }
    
    
    
    @PostMapping("/importExcel")
    
    @ResponseBody
    
    public Boolean importExcel(@RequestParam("file") MultipartFile file) {
    
        return stuServiceI.importExcel(file);
    
    }
    
    
    
    @PostMapping("/leaveSchool")
    
    @ResponseBody
    
    public Boolean leaveSchool(@RequestBody(required = true) List<String> ids) {
    
        return stuServiceI.leaveSchool(ids);
    
    }
    
    
    
    @GetMapping("/resetPwd")
    
    @ResponseBody
    
    public Boolean resetPwd(String stuId) {
    
        return stuServiceI.resetPwd(stuId);
    
    }
    

    视图层(View)

    //初始化Table
    
    function tableInit() {
    
       $('#tb_repairHistory').bootstrapTable({
    
          url : '/stu/repairHistory', //请求后台的URL(*)
    
          method : 'get', //请求方式(*)
    
          cache : false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
    
          clickToSelect:true,
    
          sortable : true, //是否启用排序
    
          sortOrder : "asc", //排序方式
    
          sidePagination : "server", //分页方式:client客户端分页,server服务端分页(*)
    
          pagination : true, //是否显示分页(*)
    
          pageNumber : 1, //初始化加载第一页,默认第一页
    
          pageSize : 10, //每页的记录行数(*)
    
          pageList : [10, 25, 50], //可供选择的每页的行数(*)
    
          uniqueId : 'dormid', //每一行的唯一标识,一般为主键列
    
          sortName: 'dormid', // 要排序的字段
    
          queryParams : function(params) {
    
             return {
    
                size: params.limit, // 每页要显示的数据条数
    
                page: params.offset/params.limit, //pageable 下标从0开始
    
                    sort: params.sort + "," + params.order // 排序规则
    
                }
    
          },//传递参数(*)
    
          responseHandler: function(res) {
    
             return {
    
                  total : res.totalElements, //总页数,前面的key必须为"total"
    
                  rows :  res.content//行数据,前面的key要与之前设置的dataField的值一致.
    
              };
    
          },
    
          columns : [ {
    
             field : 'id',
    
             visible:false
    
          }, {
    
             field : 'dormid',
    
             title : '宿舍号',
    
             sortable : true
    
          }, {
    
             field : 'reason',
    
             title : '报修类型',
    
             formatter: function (value,row,index) {
    
                var result="";
    
                if (value == 0) {
    
                   result = "灯";
    
                }else if(value == 1) {
    
                   result = "床,桌椅";
    
                }else if(value == 2) {
    
                   result = "门窗";
    
                }else if (value == 3){
    
                   result = "其它";
    
                }
    
                return result;
    
             }
    
          }, {
    
             field : 'date',
    
             title : '报修时间',
    
             sortable : true,
    
             formatter: function (value,row,index) {
    
                if (value != null) {
    
                      var date = new Date(value);
    
                      return dateFtt("yyyy-MM-dd hh:mm",date);
    
                  }
    
             }
    
          },{
    
             field : 'note',
    
             title : '说明'
    
          },{
    
             field : 'status',
    
             title : '状态',
    
             formatter: function (value,row,index) {
    
                var result="";
    
                if (value == 2) {
    
                   result = "处理完成";
    
                }
    
                return result;
    
             }
    
          }]
    
       });
    
       
    
    };
    
    
    
    
    
    /**
    
     * 时间格式化处理
    
     */
    
    function dateFtt(fmt,date) {   
    
      var o = {
    
        "M+" : date.getMonth()+1,                 //月份
    
        "d+" : date.getDate(),                    //日
    
        "h+" : date.getHours(),                   //小时
    
        "m+" : date.getMinutes(),                 //分
    
        "s+" : date.getSeconds(),                 //秒
    
        "q+" : Math.floor((date.getMonth()+3)/3), //季度   
    
        "S"  : date.getMilliseconds()             //毫秒
    
      };   
    
      if(/(y+)/.test(fmt))   
    
        fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));   
    
      for(var k in o)   
    
        if(new RegExp("("+ k +")").test(fmt))   
    
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));   
    
      return fmt;   
    
    }
    
    </script>
    
    </html>
    
    展开全文
  • 宿舍管理系统设计与实现

    千次阅读 2021-03-10 07:51:42
    宿舍管理系统设计与实现[java毕业论文下载]宿舍管理系统第一章 绪论1.1 课题简介为了便于老师对学生信宿生活的管理,学生资料的整理,和快节奏,高效率的工作环境。所以本次我设计的课题是学生宿舍管理系统。学生...

    宿舍管理系统设计与实现[java毕业论文下载]

    宿舍管理系统

    第一章  绪论

    1.1  课题简介

    为了便于老师对学生信宿生活的管理,学生资料的整理,和快节奏,高效率的工作环境。所以本次我设计的课题是学生宿舍管理系统。学生宿舍管理系统是一项十分方便于学校老师对学生宿舍管理的必备系统。在现实社会的学习生活中,计算机所应用领域无处不在,学生宿舍管理系统将成为老师们管理学生信息资料不可缺少的一个重要的部分,这是非常重要的对于学校的老师们来说,这是一项能为操作员们提供充足的信息和快捷的查询手段的学生宿舍管理系统。长久以来人们都在使用传统人工的方式管理学生资料,这种管理方式存在着许多缺点:效率低、保密性差,另外时间一长,将产生大量的文件和数据,对于查找、更新和维护都带来了不少的困难。随着科学技术的不断提高,计算机科学技术日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。在计算机技术越来越普及的今天,掌握和了解相关知识变得更加重要,可行.在各级各类学校中,宿舍的管理是学校工作中的一项重要内容。随着办学规模的扩大和招生人数的增加,这不仅使学生管理的日常工作日趋复杂繁重,而且,对它提出了更高的要求。

    学生宿舍的管理工作也将成为一项十分繁重的工作,建立一个学生宿舍管理系统是非常必要的,可行的。计算机能够极大地提高学生宿舍管理的办事效率,学校要想与先进科学技术接轨,就得科学化、正规化的进行管理。随着社会信息化步伐的加快,社会对人才的要求越来越高,相应的,需要学校的工作越来越周到、全面、先进、高效。本学生宿舍管理信息系统强化了学生管理的职能,涵盖了学生管理、宿舍管理等主要功能,特别是对学生宿舍管理工作进行了提炼和概括, 使学生宿舍管理工作日益规范化、制度化和科学化。学生宿舍管理系统的使用,大大减少了学生处管理者的重复劳动,是学校管理的得力助手。

    1.2  开发目的

    1.要求用户必须输入正确的用户名和密码才能进入系统。

    2.应该提供学生住宿情况的基本登记。

    3.提供人员来访登记及结束访问的详细登记。

    4.统应提供学生在校期间物品出入宿舍楼的详细情况登记。

    5.统应提供查询功能,以方便用户对学生基本信息的查询(实现多种条件的查询)及楼房信息的查询。

    6.统应提供增加、删除、修改用户账户的功能。

    通过计算机进行学生宿舍管理有以下好处:

    1.学生信息,安全、高效,方便,快捷。

    2.迅速查到所需学生信息。

    3.员来访登记及结束访问登记记录十分详细。

    4.化的办公设备便工作人员办事效率越来越高。

    1.3  系统特点

    1.数字化校园,实现校园无纸化管理。

    2. 用户权限分级管理,适合 多用户操作。

    3. 界面完好,功能完善,安全易用。

    1.4  经济可行性

    估算宿舍管理系统的开发费用和今后的运行、维护费用,估算宿舍管理系统将获得的经济和社会效益,并将费用与效益进行比较,看是否有利。例如,宿舍管理系统投入运行后可以提供哪些以前无法及时提供的信息,用户查询和使用信息的方便程度提高多少、速度增加了多少,对于操作人员进行工作提供了多少帮助等等。

    第二章  系统概述

    2.1  系统分析

    系统分析的目的是要明确本宿舍管理系统应实现的目标,即所能实现的功能。系统分析的结果就是系统设计的基础。

    2.2  系统模块简要

    2.2.1  系统管理模块

    系统用户的登陆及验证

    包括不同用户登录

    该系统包括普通用户和系统操作员两种用户登陆方式。

    系统用户进入系统时的身份验证:要求用户必须输入正确的用户名和密码才能进入系统。

    系统用户在不同的页面浏览时的身份验证。

    2.2.2  公寓管理模块

    该系统主要分为楼房管理、宿舍管理、员工管理三个大的部分。

    楼房管理:用户对楼数的统计。

    宿舍管理:用户对宿舍楼的管理。

    员工管理:员工信息的录入,设置初始的操作员的信息。

    该系统主要对楼房楼层,宿舍的查询,员工的增减进行系统的管理。为操作者提供了很好的宿舍情况基本登记。

    2.2.3  信息查询模块

    该系统包括了按学号进行查询、按姓名进行查询、按班级查询、按寝室号查询、每栋楼房住宿情况查询五个部分。

    2.2.4  出入登记模块

    该系统包括了进楼物品登记、出楼物品登记、人员来访登记、结束访问登记四个功能模块。

    2.2.5  信息修改模块

    该系统包括了学生基本信息修改、员工基本信息修改、个人财物信息修改等功能。

    第三章  系统结构图

    根据系统功能的要求,宿舍管理系统分为下述的四个模块:公寓管理系统,信息查询系统,出入登记系统,信息修改系统。可以将系统分解成几个功能模块来分别设计,功能模块之间的关系如图1所示。

    aead022b88d3199208a3e9034ead66ae.png

    图1  系统页面逻辑结构图

    第四章  数据库设计与实现

    4.1  数据库的需求分析

    4.1.1  系统功能设计的要求以及功能模块的划分

    对于系统用户学生信息数据库,可以列出以下数据项和数据结构:

    用户信息:用户ID,学生姓名,学号,性别,出生年月,专业,班级,家庭住址,电话,公寓号,寝室号,有无电话,有无电脑,背褥数,备注。

    4.1.2  老师信息数据库,

    可以列出以下数据项和数据结构:用户信息:用户ID,老师名,编号,性别,出生年月,家庭住址,电话。

    4.1.3  访问信息数据库

    可以列出以下数据项和数据结构:来访人姓名,被访问人员姓名,公寓宿舍号,所属关系,备注,来访时间,离开时间,值班人,证件名称,来访日期。

    4.1.4  操作员信息数据库

    可以列出以下数据项和数据结构:用户ID,用户姓名,密码,Email。

    4.1.5  工作人员信息数据库

    可以列出以下数据项和数据结构:公寓号,楼层,工作人员姓名。

    4.1.6  公寓类型信息数据库

    可以列出以下数据项和数据结构:公寓房间数,学生人数,公寓类型。

    4.1.7  房间信息数据库

    可以列出以下数据项和数据结构:公寓号,房舍号,房间人数,宿舍成员姓名,宿舍所属系

    4.2  数据库的结构创建

    根据数据库的需求分析,建立如下7个数据表:

    4.2.1  用户信息表

    student  表

    35ff4391df444671b705033719c5cb79.png

    4.2.2 管理员信息表

    user  表

    d39068f5706b4bd4fcfb4d7248cf5d2b.png

    4.2.3  公寓信息表

    build  表

    a21fe63ae11691e6e6bb38e670a7546f.png

    4.2.4  宿舍信息表

    042e72a7aaad330f9bb2e6a13b502cba.pngroom  表

    4.2.5  员工信息表

    5347809d618bb7e0ee7ec2ae123b26ec.pngworkers  表

    4.2.6  来访人信息表

    visit  表

    cf49f6e951218ba9744b36f34e51268b.png

    4.2.7  老师信息表

    teacher表

    8728e17bd6ad10bdaa4f02f1710c0647.png

    第五章  实现的模块功能

    5.1  系统管理模块

    5.1.1  用户登录

    只准普通用户登陆。

    5.1.2  管理员登录

    只有具有管理员登陆权限的用户,才能登陆并使用。

    5.2  公寓管理模块

    5.2.1  楼房管理

    管理员可实现添加公寓信息,修改公寓信息。

    5.2.2  宿舍管理

    管理员可实现添加宿舍信息,修改宿舍信息,删除宿舍信息。

    5.2.3  员工管理

    管理员可实现添加员工信息,修改员工信息,删除员工信息。

    5.3  信息查询模块

    5.3.1  按学号进行查询

    本模块可实现管理员可以利用学号来查询学生的信息。

    5.3.2  按姓名进行查询

    本模块可实现管理员可以利用姓名来查询学生的信息。

    5.3.3  按班级进行查询

    本模块可实现管理员可以利用班级信息来查询学生的信息。

    5.3.4  按寝室号进行查询

    本模块可实现管理员可以利用寝室号来查询学生的信息。

    5.3.5  按楼房住宿进行查询

    本模块可实现管理员可以利用楼房号来查询学生的信息。

    5.4  出入登记模块

    5.4.1  人员来访登记

    本模块可实现管理员对来访人员进出公寓的登记。

    5.4.2  结束访问登记

    本模块可实现管理员对来访人员离开公寓的登记。

    5.5  信息修改模块

    5.5.1  学生基本信息修改

    本模块可实现管理员对学生基本信息的修改和添加等操作。

    5.5.2  员工基本信息修改

    本模块可实现管理员对员工基本信息的修改和添加等操作。

    5.5.2  个人财物信息修改

    本模块可实现学生对个人财物信息的修改和添加等操作。

    第六章  后台数据库的配置

    首先,我们要谈的是宿舍管理系统的服务器配问题。本系统便用IIS5.0作为系统服务器。因为便用的是Windows 2000以上版本的操作系统,那么添加IIS5.0服务器非常简单,只需要打开“控制面板”里面的“管理工具”,然后选取择“Internet息服务”选项。

    6.1  如何配置IIS

    右击默认站点,新建虚拟目录,按图6.1--6.3提示进行安装即可。

    c1d1f87b94d21dce0160be3f400790f1.png

    图6.1

    a6aa69d47c84b8f226988b71091fe9e9.png

    图6.2

    7be9e8c9994bf6bd6f4242eb775a3185.png

    图6.3

    6.2  后台数据库的配置方法

    本章系统直接采用了ACCESS文件的相对路径来实现读取数据库的功能。

    第七章  用户登陆页面

    7.1  宿舍管理系统的首页面

    该页面的首页面的功能非常简单,给访问用户一种直观清晰的印象。如图7.1所示

    3824492af3865d3730ef6f2a118c8600.png

    图7.1

    7.2  管理员登陆的页面.

    本页面的主要作是对用户的身份进鉴别。用户通过表单提供登陆信息,系统根据用户提供的信息对用户进行查询鉴别,如果身份合法,则将指引用户导向下一个页面。如果不合法,则无法登陆下一个页面。则将重新导向系统登陆页面。介绍完了登录页面的相关内容,接下来就真正进入到宿舍管理系统的核心部分,即系统管理员操作内容的介绍了。如图7.2所示

    f7e4c8afeeecdd2abaf7a2dc983884b5.png

    图7.2

    7.3  系统管理员管理的页面

    本图显示了系统管理员管理的主页面。主页面上有4个主要链接,分别指向宿舍管理系统的4主要功能模块,即公寓管理系统,信息查询系统,出入登记系统,信息修改系统。如图7.3所示.

    00025e2ac98117bc4c5c79d9667c5443.png

    图7.3

    7.4  公寓管理模块中宿舍管理页面

    7.4.1  页面示例应用

    在这个页面中,用户可以对原来的系统数据库中的宿舍信息进行添加修改。如图7.4所示

    d4c28f727f332a64766bc76b68766cea.png

    图7.4

    宿舍管理系统设计与实现[点击下载]

    展开全文
  • 员工宿舍管理主要公司内部提供服务,系统分为管理员员工两部分。 本研究课题重点主要包括了下面几大模块:用户登录,宿舍信息管理,员工信息管理,床位信息管理,员工入住信息管理,宿舍调整,水电费信息管理,...
  • 学生宿舍信息管理系统

    万次阅读 多人点赞 2020-12-31 15:20:16
    适合学校的宿舍管理人员使用。本系统实现以下基本功能:管理员可以对公寓进行全程管理,不仅可以管理学生,还可以管理寝室人员及外来人员及出入物品,也能方便的进行统计和更改。把软件工程中规范化的软件开发方法...
  • 宿舍管理

    2020-11-19 09:04:14
    人事系统 后勤管理 后勤部就是以后勤保障为主要...宿舍管理系统能够更好的适应人们的需求,使宿舍管理人员更加容易的对员工宿舍的资料和信息进行管理,更加方便了解员工宿舍的动态信息,方便管理入住员工;使后勤管理人
  • 宿舍管理系统的用户可以分为三种:系统管理员、宿舍管理员、学生。 系统管理员主要功能: 学生信息管理:包括学生信息的导入、编辑、删除、查找等; 职工信息管理:包括职工信息的导入、添加、编辑、删除、查找等; ...
  • 宿舍管理系统的用户可以分为三种:系统管理员、宿舍管理员、学生。系统管理员主要功能: 学生信息管理:包括学生信息的导入、编辑、删除、查找等; 职工信息管理:包括职工信息的导入、添加、编辑、删除、查找等; ...
  • java学校宿舍管理系统

    2021-04-17 10:13:14
    最近了解了基于javaweb的学校宿舍管理系统项目,在这个平台记录一下这个基于javaweb的学校宿舍管理系统项目,方便以后再次使用或学习的时候能够及时的翻阅。在完成基于javaweb的学校宿舍管理系统项目的时候,考虑了...
  • 数据库课程设计——学生宿舍信息管理系统

    万次阅读 多人点赞 2018-09-17 23:33:00
    数据库课程设计——学生宿舍信息管理系统 目录  1.设计目的... 2 2、任务与要求... 2 3、学生宿舍管理系统课程设计... 2 3.1 引言... 2 3.2需求分析... 2 3.2.1....
  • 宿舍管理系统的用户可以分为三种:系统管理员、宿舍管理员、学生。 系统管理员主要功能: 学生信息管理:包括学生信息的导入、编辑、删除、查找等; 职工信息管理:包括职工信息的导入、添加、编辑、删除、查找等; ...
  • 工业园区剧集的人员比较多,虽然生活比较方便,但是离市区一般也比较远,娱乐相对来说要少一些,而视频是很多人员休闲时间的主要方式,而给员工提供一些自办的园区或者集团直播节目,不仅仅可以丰富员工的生活还能...
  • Eclipse+Java+Swing实现学生宿舍管理系统

    万次阅读 多人点赞 2020-09-02 20:35:20
    Java+Swing实现学生宿舍管理系统一、系统介绍二、系统展示1.登录页面2.学生主页面3.学生端-登记页面4.学生端-学生信息修改5.学生端-寝室信息查询6.学生端-学生信息查询7.学生端-退出登录8.管理员-主页面9.管理员-...
  • 宿舍怎样推行5s管理制度?

    千次阅读 2019-03-14 10:21:41
    华天谋5s管理专家概述:无论是学生宿舍还是职工宿舍都是一个集体群居的地方,各自家庭不同、生长环境不同、个人素质也不一样。如何做好宿舍管理?这是一个管理难题。随着5s管理的广泛应用推行,经实践证明5s管理同样...
  • 学生宿舍管理系统之逻辑结构设计

    千次阅读 2018-11-28 22:33:42
    逻辑结构设计 1.E-R 图向关系模型的转换 学生表:学号、姓名、性别、专业...宿舍表:楼号、宿舍号、宿舍电话、可住人数、已住人数 主码:楼号、宿舍号 报修表:物品名称、报修原因、报修日期、报修人、报修费用 ...
  • 基于SSM校园宿舍管理系统

    千次阅读 2020-07-15 23:45:12
    } //添加员工 public String insertAdmin() throws Exception{ String result =""; boolean b=adminDao.insertAdmin(admin); if(b==true){ result="success"; }else { result="error"; } ...
  • 本设计主要实现集人性化、高效率、便捷等优点于一身的学生宿舍管理系统,完成用户管理、通知公告、宿舍楼管理、宿舍信息、寝室分配、报修管理、卫生评分、外来人员登记等功能模块。系统通过浏览器与服务器进行通信,...
  • 目录1 绪论 1 1.1项目背景 1 1.2项目的选择与要求 2 1.2.1 项目的选择 2 1.2.2 项目研究的要求 2 2 需求分析 3 2.1 用户需求分析 3 2.2 处理对象分析 3 2.3 系统功能需求分析 3 ...3.4 宿舍管理员模块 7 3.4
  • 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品,【基于SSM的企业公寓宿舍后勤管理系统】学姐根据实现的难度和等级对项目进行评分(最低0分,满分5分)难度系数:3分工作量:5分创新点:3分界面美化:5分本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,044
精华内容 2,417
热门标签
关键字:

员工宿舍管理方案