基于java+ssm+jsp的学生公寓管理系统

本文介绍了一个采用B/S开发结构,利用Java语言、SSM框架和MySQL数据库构建的学生公寓管理系统。系统实现了包括个人中心、基础数据管理、公告管理、学生管理、公寓管理和宿管管理等多个功能模块,提高了信息管理效率,简化了工作流程。
摘要由CSDN通过智能技术生成

项目介绍

如今,科学技术的力量越来越强大,通过结合较为成熟的计算机技术,促进了学校、医疗、商城等许多行业领域的发展。为了顺应时代的变化,各行业结合互联网、人工智能等技术,纷纷开展了管理信息化建设。传统的学生公寓信息管理模式,主要以人工记录的方式统计和存储宿舍信息,这种管理模式容易丢失信息,并且不方便管理人员更新和查询相关数据。相比于传统管理模式,信息化管理模式主要使用计算机存储和管理相关信息记录,操作简单便捷,并且具体较强的灵活性,容易对数据实现查询和更新操作,有利于相关人员在同等时间内,完成更多的工作,并且能够尽可能的减少工作人员发生失误的概率。在idea集成开发平台上,学生公寓管理系统采用了B/S开发结构模式,并且通过使用Java语言编写相关代码,设计系统功能模块,MySQL数据库设计数据表格,存储宿舍信息,Tomcat服务器发布系统网址,处理请求和响应消息。本系统的开发,改进学校管理人员的工作模式,有利于简化工作流程,加快工作进度,提高信息处理效率。

4.1系统的总体设计
本系统是以B/S开发结构为基础进行设计和实现的,并且通过关键的开发技术,比如Java语言、SSM框架、MySQL数据库等技术,对系统的功能模块、后台管理模块等进行实现,系统功能实现后,用户可以通过使用浏览器,运行和使用系统。通过需求分析的相关内容,可以确定用户对于本系统的具体使用需求,进而规划出系统基本需要具备的功能模块。学生公寓管理系统的使用对象主要分为管理员角色和用户角色,主要的功能需求包括用户管理、公寓管理、访客管理等。系统总体功能设计图如图4-1所示。
在这里插入图片描述

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序/vue/爬虫/c#/asp.net

系统实现

5.1个人中心
个人中心模块设计的主要目的是方便用户对密码等个人信息进行管理,用户可以根据自己的实际需求,选择每隔一段时间,对个人账户的密码等相关信息进行更新操作,修改密码界面设计如图5-1所示,个人信息界面如图5-2所示。
在这里插入图片描述

图5-1修改密码界面
在这里插入图片描述

图5-2个人信息界面

5.2基础数据管理
基础数据管理模块设计的主要目的是方便用户对相关的公告类型、楼宇信息进行管理,用户可以选择查看公告类型、楼宇的详细信息,修改公告类型、楼宇的名称,删除失效的公告类型、楼宇信息记录,公告类型管理界面设计如图5-3所示,楼宇管理界面设计如图5-4所示。
在这里插入图片描述

图5-3公告类型管理界面
在这里插入图片描述

图5-4楼宇管理界面

5.3公告管理
公告管理模块设计的主要目的是方便用户对相关的公告信息进行管理,用户以选择查看公告图片,增加公告信息记录,删除失效的公告信息记录,公告管理界面设计如图5-5所示。
在这里插入图片描述

图5-5公告管理界面

5.4学生管理
学生管理模块设计的主要目的是方便管理用户对相关的学生信息进行管理,管理用户可以选择查看学生的电子邮箱,修改学生的手机号码,删除注销的学生信息记录,学生管理界面设计如图5-6所示。
在这里插入图片描述

图5-6学生管理界面

5.5公寓管理
公寓管理模块设计的主要目的是方便用户对相关的公寓、公寓人员信息进行管理,用户可以选择查看公寓、公寓人员的详细信息,修改公寓的楼层信息,添加公寓人员的入住时间信息,删除失效的公寓信息记录,公寓管理界面设计如图5-7所示,公寓人员管理界面设计如图5-8所示。
在这里插入图片描述

图5-7公寓管理界面
在这里插入图片描述

图5-8公寓人员管理界面

5.6宿管管理
宿管管理模块设计的主要目的是方便管理用户对相关的宿管信息进行管理,管理用户可以选择查看宿管的电子邮箱,修改宿管的手机号码,删除注销的宿管信息记录,宿管管理界面设计如图5-9所示。
在这里插入图片描述

图5-9宿管管理界面

5.7访客管理
访客管理模块设计的主要目的是方便用户对访客信息进行管理,用户可以选择查看访客的详细信息,修改访客姓名,删除注销的访客信息记录,访客管理界面设计如图5-10所示。
在这里插入图片描述

图5-10访客管理界面

核心代码

package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 公寓
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/sushe")
public class SusheController {
    private static final Logger logger = LoggerFactory.getLogger(SusheController.class);

    @Autowired
    private SusheService susheService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service

    @Autowired
    private XueshengService xueshengService;
    @Autowired
    private SuguanService suguanService;
    @Autowired
    private SusheRenyuanService susheRenyuanService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("学生".equals(role)){
            SusheRenyuanEntity susheRenyuanEntity = susheRenyuanService.selectOne(new EntityWrapper<SusheRenyuanEntity>().eq("xuesheng_id", request.getSession().getAttribute("userId")));
            params.put("susheId",susheRenyuanEntity.getSusheId());
            params.put("xueshengId",request.getSession().getAttribute("userId"));
        }
        else if("宿管".equals(role)){
            SuguanEntity suguanEntity = suguanService.selectById(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
            params.put("louyuTypes",suguanEntity.getLouyuTypes());
            params.put("suguanId",request.getSession().getAttribute("userId"));
        }
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = susheService.queryPage(params);

        //字典表数据转换
        List<SusheView> list =(List<SusheView>)page.getList();
        for(SusheView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        SusheEntity sushe = susheService.selectById(id);
        if(sushe !=null){
            //entity转view
            SusheView view = new SusheView();
            BeanUtils.copyProperties( sushe , view );//把实体数据重构到view中

            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody SusheEntity sushe, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,sushe:{}",this.getClass().getName(),sushe.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");

        Wrapper<SusheEntity> queryWrapper = new EntityWrapper<SusheEntity>()
            .eq("sushe_number_uuid", sushe.getSusheNumberUuid())
            .eq("louyu_types", sushe.getLouyuTypes())
            .eq("sushe_name", sushe.getSusheName())
            .eq("sushe_louceng", sushe.getSusheLouceng())
            .eq("sushe_address", sushe.getSusheAddress())
            .eq("kezhu_number", sushe.getKezhuNumber())
//            .eq("yizhu_number", sushe.getYizhuNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        SusheEntity susheEntity = susheService.selectOne(queryWrapper);
        if(susheEntity==null){
            sushe.setYizhuNumber(0);
            sushe.setInsertTime(new Date());
            sushe.setCreateTime(new Date());
            susheService.insert(sushe);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody SusheEntity sushe, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,sushe:{}",this.getClass().getName(),sushe.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
        //根据字段查询是否有相同数据
        Wrapper<SusheEntity> queryWrapper = new EntityWrapper<SusheEntity>()
            .notIn("id",sushe.getId())
            .andNew()
            .eq("sushe_number_uuid", sushe.getSusheNumberUuid())
            .eq("louyu_types", sushe.getLouyuTypes())
            .eq("sushe_name", sushe.getSusheName())
            .eq("sushe_louceng", sushe.getSusheLouceng())
            .eq("sushe_address", sushe.getSusheAddress())
            .eq("kezhu_number", sushe.getKezhuNumber())
//            .eq("yizhu_number", sushe.getYizhuNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        SusheEntity susheEntity = susheService.selectOne(queryWrapper);
        if(susheEntity==null){
            susheService.updateById(sushe);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        susheService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName, HttpServletRequest request){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            List<SusheEntity> susheList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("../../upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            SusheEntity susheEntity = new SusheEntity();
//                            susheEntity.setSusheNumberUuid(data.get(0));                    //唯一编号 要改的
//                            susheEntity.setLouyuTypes(Integer.valueOf(data.get(0)));   //楼宇 要改的
//                            susheEntity.setSusheName(data.get(0));                    //公寓号 要改的
//                            susheEntity.setSusheLouceng(data.get(0));                    //公寓楼层 要改的
//                            susheEntity.setSusheAddress(data.get(0));                    //公寓位置 要改的
//                            susheEntity.setKezhuNumber(Integer.valueOf(data.get(0)));   //可住人数 要改的
//                            susheEntity.setYizhuNumber(Integer.valueOf(data.get(0)));   //已住人数 要改的
//                            susheEntity.setInsertTime(date);//时间
//                            susheEntity.setCreateTime(date);//时间
                            susheList.add(susheEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        susheService.insertBatch(susheList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }






}

论文参考

在这里插入图片描述

目 录
第一章 绪论 1
1.1研究背景与意义 1
1.2国内外研究现状 1
1.3论文组织结构 1
第二章 相关技术介绍 3
2.1 B/S架构 3
2.2 Java语言 3
2.3 MySQL数据库 3
2.4 JSP技术 4
2.5 SSM框架 4
第三章 系统分析 5
3.1系统的需求分析 5
3.2系统的可行性分析 5
3.2.1经济可行性 5
3.2.2技术可行性 5
3.2.3操作可行性 6
第四章 系统设计 7
4.1系统的总体设计 7
4.2数据库设计 7
4.2.1概念设计 7
4.2.2逻辑设计 11
第五章 系统实现 14
5.1个人中心 14
5.2基础数据管理 14
5.3公告管理 15
5.4学生管理 15
5.5公寓管理 16
5.6宿管管理 17
5.7访客管理 17
第六章 系统测试 18
6.1系统测试内容 18
6.2测试结果分析 19
第七章 总结与展望 20
致谢 21
参考文献 22

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值