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