基于java+ssm+jsp的校园疫情管控系统

本文介绍了基于B/S结构的校园疫情管控系统,利用JSP技术、SSM框架和MYSQL数据库,实现包括学生信息管理、打卡信息管理、防疫科普管理等功能。系统具有高效、便捷和安全的特点,适用于校园疫情的监控与管理。管理员可执行多项管理任务,而用户则能进行信息查询和操作。经过测试,系统运行稳定,具有良好的可扩展性和可维护性。
摘要由CSDN通过智能技术生成

项目介绍

科学技术的不断发展,计算机的应用日渐成熟,其强大的功能给人们留下深刻的印象,它已经应用到了人类社会的各个层次的领域,发挥着重要的不可替换的作用。信息管理作为计算机应用的一部分,使用计算机进行管理,具有非常明显的优点。例如:方便快捷、高效率、低成本、存储量大、寿命长,这些优点能够极大地改变了传统的管理方式。

校园疫情管控系统基于当前较为流行的B/S(浏览器/服务器)结构,采用JSP技术、SSM框架、MYSQL数据库,设计并实现了一个功能较为完善的航空售票的软件,通过本系统,管理员可进行管理员账号管理、新闻公告管理、投诉建议管理、网站链接管理、航班管理以及机票订单管理等,同时用户可进行网站首页、系统公告、查看机票、订购机票、网站留言用户注册、后台管理等。本系统经过测试,运行效果稳定,操作方便、快捷,是一个功能全面、实用性好、安全性高,并具有良好的可扩展性、可维护性校园疫情管控系统软件。

论文首先阐述了校园疫情管控系统软件的开发,并对该系统进行了较详细的需求分析,探讨了校园疫情管控系统的功能需求、业务流程、系统结构和数据库设计等方面的问题。

在这里插入图片描述

开发环境

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

系统实现

5.1学生信息管理
如图5.1显示的就是学生信息管理页面,此页面提供给管理员的功能有:学生信息的查询管理,可以删除学生信息、修改学生信息、新增学生信息,
还进行了对商户名称的模糊查询的条件
在这里插入图片描述

图5.1 学生信息管理页面

5.2 打卡信息管理
如图5.2显示的就是打卡信息管理页面,此页面提供给管理员的功能有:查看已发布的打卡信息数据,修改打卡信息,打卡信息作废,即可删除。

在这里插入图片描述

图5.2 打卡信息管理页面

5.3防疫科普管理
如图5.3显示的就是防疫科普管理页面,此页面提供给管理员的功能有:根据防疫科普进行条件查询,还可以对防疫科普进行新增、修改、查询操作等等。

在这里插入图片描述

图5.3 防疫科普管理页面

5.1公告类型管理
如图5.4显示的就是公告类型管理页面,此页面提供给管理员的功能有:根据公告类型进行新增、修改、查询操作等等。

在这里插入图片描述

图5.4 公告类型管理页面

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

核心代码

package com.controller;

import java.math.BigDecimal;
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.StringUtil;
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("/dakaxinxi")
public class DakaxinxiController {
    private static final Logger logger = LoggerFactory.getLogger(DakaxinxiController.class);

    @Autowired
    private DakaxinxiService dakaxinxiService;


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

    //级联表service
    @Autowired
    private XueshengService xueshengService;



    /**
    * 后端列表
    */
    @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(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("学生".equals(role))
            params.put("xueshengId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = dakaxinxiService.queryPage(params);

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

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

                //级联表
                XueshengEntity xuesheng = xueshengService.selectById(dakaxinxi.getXueshengId());
                if(xuesheng != null){
                    BeanUtils.copyProperties( xuesheng , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setXueshengId(xuesheng.getId());
                }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

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

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("学生".equals(role))
            dakaxinxi.setXueshengId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        Wrapper<DakaxinxiEntity> queryWrapper = new EntityWrapper<DakaxinxiEntity>()
            .eq("xuesheng_id", dakaxinxi.getXueshengId())
            .eq("dakaxinxi_didian", dakaxinxi.getDakaxinxiDidian())
            .eq("quezhen_types", dakaxinxi.getQuezhenTypes())
            .eq("yishi_types", dakaxinxi.getYishiTypes())
            .eq("gaofengxian_types", dakaxinxi.getGaofengxianTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        DakaxinxiEntity dakaxinxiEntity = dakaxinxiService.selectOne(queryWrapper);
        if(dakaxinxiEntity==null){
            if(dakaxinxi.getQuezhenTypes() == 1
                    || dakaxinxi.getYishiTypes() == 1
                    || dakaxinxi.getGaofengxianTypes() == 1
                    || dakaxinxi.getDakaxinxiTiwen() < 36.0
                    || dakaxinxi.getDakaxinxiTiwen() > 38.1){
                XueshengEntity xueshengEntity = xueshengService.selectById(dakaxinxi.getXueshengId());
                if(xueshengEntity.getXueshengTypes() != 2){
                    xueshengEntity.setXueshengTypes(2);
                    boolean b = xueshengService.updateById(xueshengEntity);
                    if(!b){
                        return R.error("修改学生状态出错");
                    }
                }
            }
            dakaxinxi.setInsertTime(new Date());
            dakaxinxi.setCreateTime(new Date());
            dakaxinxiService.insert(dakaxinxi);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

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

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("学生".equals(role))
            dakaxinxi.setXueshengId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        //根据字段查询是否有相同数据
        Wrapper<DakaxinxiEntity> queryWrapper = new EntityWrapper<DakaxinxiEntity>()
            .notIn("id",dakaxinxi.getId())
            .andNew()
            .eq("xuesheng_id", dakaxinxi.getXueshengId())
            .eq("dakaxinxi_didian", dakaxinxi.getDakaxinxiDidian())
            .eq("quezhen_types", dakaxinxi.getQuezhenTypes())
            .eq("yishi_types", dakaxinxi.getYishiTypes())
            .eq("gaofengxian_types", dakaxinxi.getGaofengxianTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        DakaxinxiEntity dakaxinxiEntity = dakaxinxiService.selectOne(queryWrapper);
        if(dakaxinxiEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      dakaxinxi.set
            //  }
            dakaxinxiService.updateById(dakaxinxi);//根据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());
        dakaxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }




    /**
    * 前端列表
    */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("学生".equals(role))
            params.put("xueshengId",request.getSession().getAttribute("userId"));

        // 没有指定排序字段就默认id倒序
        if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
            params.put("orderBy","id");
        }
        PageUtils page = dakaxinxiService.queryPage(params);

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

    /**
    * 前端详情
    */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        DakaxinxiEntity dakaxinxi = dakaxinxiService.selectById(id);
            if(dakaxinxi !=null){
                //entity转view
                DakaxinxiView view = new DakaxinxiView();
                BeanUtils.copyProperties( dakaxinxi , view );//把实体数据重构到view中

                //级联表
                    XueshengEntity xuesheng = xueshengService.selectById(dakaxinxi.getXueshengId());
                if(xuesheng != null){
                    BeanUtils.copyProperties( xuesheng , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setXueshengId(xuesheng.getId());
                }
                //修改对应字典表字段
                dictionaryService.dictionaryConvert(view);
                return R.ok().put("data", view);
            }else {
                return R.error(511,"查不到数据");
            }
    }


    /**
    * 前端保存
    */
    @RequestMapping("/add")
    public R add(@RequestBody DakaxinxiEntity dakaxinxi, HttpServletRequest request){
        logger.debug("add方法:,,Controller:{},,dakaxinxi:{}",this.getClass().getName(),dakaxinxi.toString());
        Wrapper<DakaxinxiEntity> queryWrapper = new EntityWrapper<DakaxinxiEntity>()
            .eq("xuesheng_id", dakaxinxi.getXueshengId())
            .eq("dakaxinxi_didian", dakaxinxi.getDakaxinxiDidian())
            .eq("quezhen_types", dakaxinxi.getQuezhenTypes())
            .eq("yishi_types", dakaxinxi.getYishiTypes())
            .eq("gaofengxian_types", dakaxinxi.getGaofengxianTypes())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        DakaxinxiEntity dakaxinxiEntity = dakaxinxiService.selectOne(queryWrapper);
        if(dakaxinxiEntity==null){
            dakaxinxi.setInsertTime(new Date());
            dakaxinxi.setCreateTime(new Date());
        //  String role = String.valueOf(request.getSession().getAttribute("role"));
        //  if("".equals(role)){
        //      dakaxinxi.set
        //  }
        dakaxinxiService.insert(dakaxinxi);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }




}

论文参考

在这里插入图片描述

目 录

第一章 绪论 1
1.1课题研究背景意义 1
1.2设计目标 1
1.3 设计原则 2
第二章 系统开发环境 3
2.1 JSP技术 3
2.2 B/S结构 3
2.3 JAVA简介 4
2.4 MYSQL数据库 5
2.4.1MySQL数据库简介 5
2.4.2 MySQL特点特性 5
2.4.3 MySQL数据库应用环境 6
2.5 SSM框架介绍 6
2.5.1 SSM框架作用 6
2.5.2 SSM框架原理 6
第三章 系统的需求分析 7
3.1可行性分析 7
3.1.1 技术可行性 7
3.1.2经济可行性 7
3.1.3操作可行性 7
3.2系统设计原则 8
3.3流程分析 8
3.3.1 系统开发流程 8
3.3.2 系统登录流程 9
3.4系统设计规则与运行环境 10
3.5 系统用例图 11
3.5.1管理员用例图 11
3.5.2用户用例图 11
3.5.3登录用例 11
第四章 系统的概要设计 13
4.1 系统结构设计 13
4.2 系统架构设计 13
4.2.1总体架构设计 13
4.2.2系统网络拓扑结构图 14
4.3系统数据库设计 15
4.3.1 数据库设计原则 15
4.3.2数据库概念设计 15
4.3.3数据库实体(E-R图) 15
4.3.4 数据库表 17
第五章 系统的实现 20
5.1系统主界面的实现 20
5.1.1用户注册主界面 20
5.1.2会员资料修改界面 21
5.1.3新闻公告界面 22
5.1.4我的购票界面 22
5.2管理员登录界面 23
5.3管理员界面 23
5.3.1航班管理界面 23
5.3.2用户管理界面 24
5.3.3新闻管理界面 24
第六章 系统测试 26
6.1测试方法 26
6.2功能测试 26
6.3性能测试 27
6.4可用性测试 27
6.5测试结论 27
6.6系统改进目标 28
结 论 29
谢 辞 30
参考文献 31

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_3306428634

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值