基于SSM和MySQL实现的疫情数据统计分析系统
1.项目简介
疫情数据统计分析系统是一个基于SSM框架的网页端系统,项目中实现的功能如下:用户访问网站可以浏览全国疫情的图表信息,管理员登录后台管理系统,可以进行数据录入、数据查询、图表展示、用户录入和用户编辑。
功能描述
-
图表展示 :到目前为止,全国疫情分布图、扇形图、柱状图和表格
-
数据录入 :录入各个省份的确诊人数、疑似人数、隔离人数、治愈人数和死亡人数
-
数据查询 :展示录入疫情数据的各个省份的确诊人数、疑似人数、隔离人数、治愈人数和死亡人数,以及查询输入省份的疫情数据
-
用户录入 :录入用户信息,包括账号、用户名和密码,使用账号和密码可以登录后台进行数据管理和系统管理
-
用户编辑 :查询和修改用户的信息
功能结构
系统用例
项目流程图
2.数据库设计
2.1 表结构
epidemics
provinces
users
2.2 E-R图
3.软件架构
-
后端 :Spring+SpringMVC+Mybatis
-
前端 :jsp页面
-
jdk :1.8
-
开发环境 :IDEA
-
数据库 :MySQL 5.7
安装教程
-
在SQLyog或者Navicat中导入数据库文件,创建数据库和相关表
-
将代码导入IDEA中
- 启动成功,可以在浏览器中访问
地图上没有显示数据,因为需要录入当天各个省份的疫情数据,才能看到。
4.项目实现
4.1 配置类
MybatisConfig.java
```java @Configuration @MapperScan(basePackages = "com.liu.epidemic.mapper") public class MybatisConfig { @Bean public BasicDataSource basicDataSource(){ BasicDataSource dataSource=new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/epidemic?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8"); dataSource.setUsername("root"); dataSource.setPassword("123456"); //配置连接池的相关参数 dataSource.setInitialSize(3); //连接池的初始容量 dataSource.setMaxActive(10); //连接最大活动数量 dataSource.setMaxIdle(1); //连接最大的空闲数量 dataSource.setMaxWait(4000); //连接的超时时间 dataSource.setDefaultAutoCommit(false); //取消SQL语句的自动提交 return dataSource; }
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource){
SqlSessionFactoryBean factoryBean=new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
//给实体类起别名 com.liu.epidemic.bean.UserInfo==UserInfo
factoryBean.setTypeAliasesPackage("com.liu.epidemic.bean");
//创建一个配置对象,该对象可以设置实体类中的成员变量名与数据库的对应关系
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
//将数据库表中的字段名中的下划线取消,紧跟后面的第一个字符变大写,形成实体类中的成员变量名
//user_id --- userId province_name --- provinceName
configuration.setMapUnderscoreToCamelCase(true);
factoryBean.setConfiguration(configuration);
SqlSessionFactory sessionFactory = null;
try {
sessionFactory = factoryBean.getObject();
} catch (Exception e) {
e.printStackTrace();
}
return sessionFactory;
}
} ```
SpringMVCConfig.java
java
@Configuration //表示当前类是配置类
@EnableWebMvc //表示当前类是springMVC的配置类
//将Controller注解的类纳入springMVC的组件扫描中(让springMVC管理Controller类)
@ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class))
public class SpringMVCConfig extends WebMvcConfigurerAdapter {
@Autowired //给变量赋值
private DateConverter dateConverter;
/*
URL请求没有匹配到
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable(); //给静态页面资源放行
}
/*
添加格式化规则
*/
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(dateConverter);
}
/*
添加视图控制器
设置默认的资源访问路径
/epidemic
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("epidemic");
}
/*
配置视图解析器
给视图添加前缀和后缀
*/
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/",".jsp");
}
}
4.2 业务代码
```java
@Service
public class EpidemicServiceImpl implements EpidemicService {
@Autowired
private EpidemicMapper epidemicMapper;
@Autowired
private ProvinceMapper provinceMapper;
@Override
public List
List<EpidemicDetailInfo> epidemicInfoTotals = epidemicMapper.findEpidemicInfoTotal(year, month, day);
return epidemicInfoTotals;
}
@Override
public EpidemicDetailInfo queryEpidemicInfoByProvince(String province) {
GregorianCalendar calendar = new GregorianCalendar();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;
int day = calendar.get(Calendar.DATE);
EpidemicDetailInfo epidemicDetailInfo = epidemicMapper.queryEpidemicInfoByProvince(year, month, day, province);
return epidemicDetailInfo;
}
} ```
4.3 控制层代码
java
@Controller
@RequestMapping("/epidemicData")
public class EpidemicController {
@Autowired
private EpidemicService epidemicService;
@RequestMapping("/ajax/input")
//@RequestBody作用是将页面提交的json格式的数据转换成对象
@ResponseBody //将return对象转换成json格式响应给页面
public AjaxResponseInfo saveEpidemicInfo(@RequestBody DailyEpidemicInfo dailyEpidemicInfo, HttpSession session){
AjaxResponseInfo ajaxResponseInfo=new AjaxResponseInfo();
UserInfo loginedUser = (UserInfo) session.getAttribute("loginedUser");
System.out.println("saveEpidemicInfo "+dailyEpidemicInfo);
if(loginedUser!=null){
//已经登录
Integer userId = loginedUser.getUserId();
List<ProvinceInfo> provinceInfos = epidemicService.saveEpidemicInfos(userId, dailyEpidemicInfo);
ajaxResponseInfo.setCode(0);
ajaxResponseInfo.setMsg("保存成功");
ajaxResponseInfo.setData(provinceInfos);
}else{
//表示用户没有登录
ajaxResponseInfo.setCode(-2);
ajaxResponseInfo.setMsg("权限不足,请登录后再试");
}
return ajaxResponseInfo;
}
@RequestMapping("/ajax/lastestData")
@ResponseBody
public AjaxResponseInfo findEpidemicInfoTotal(){
List<EpidemicDetailInfo> epidemicInfoTotals = epidemicService.findEpidemicInfoTotal();
AjaxResponseInfo ajaxResponseInfo = new AjaxResponseInfo();
ajaxResponseInfo.setCode(0);
ajaxResponseInfo.setMsg("查询成功");
ajaxResponseInfo.setData(epidemicInfoTotals);
return ajaxResponseInfo;
}
@RequestMapping("/ajax/queryProvince")
@ResponseBody
public AjaxResponseInfo queryEpidemicInfoByProvince(@RequestBody String province){
EpidemicDetailInfo epidemicDetailInfo = epidemicService.queryEpidemicInfoByProvince(province);
AjaxResponseInfo ajaxResponseInfo = new AjaxResponseInfo();
if(epidemicDetailInfo!=null){
ajaxResponseInfo.setCode(0);
ajaxResponseInfo.setMsg("查询成功");
ajaxResponseInfo.setData(epidemicDetailInfo);
}else{
ajaxResponseInfo.setCode(-1);
ajaxResponseInfo.setMsg("查询失败");
}
return ajaxResponseInfo;
}
}
UserController.java
java
@Controller //该注解表示当前类被springmvc框架管理
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/login")
public String login(UserInfo userInfo, Model model, HttpSession session){
UserInfo login = userService.login(userInfo);
System.out.println("usercontroller"+login);
if(login!=null){
//登录成功,记录用户的登录状态
session.setAttribute("loginedUser",login);
//重定向,跳转页面
return "redirect:/main.jsp";
}else{
//请求转发
//跳转到 /login.jsp
model.addAttribute("msg","账号或密码有误!");
return "login";
}
}
@RequestMapping("/logout")
public String logout(HttpSession session){
session.invalidate(); //使所有Attribute失效
return "redirect:/login.jsp";
}
@RequestMapping("/input")
public String userInput(UserInfo userInfo,Model model){
userService.userInput(userInfo);
model.addAttribute("msg1","用户录入成功!");
return "admin/user_input";
}
@RequestMapping("/ajax/query")
@ResponseBody
public AjaxResponseInfo queryUserByAccount(@RequestBody String account){
UserInfo userInfo = userService.queryUserByAccount(account);
AjaxResponseInfo ajaxResponseInfo = new AjaxResponseInfo();
if(userInfo!=null){
ajaxResponseInfo.setCode(0);
ajaxResponseInfo.setMsg("查询成功");
ajaxResponseInfo.setData(userInfo);
}else{
ajaxResponseInfo.setCode(-1);
ajaxResponseInfo.setMsg("该账号不存在!");
}
return ajaxResponseInfo;
}
@RequestMapping("/ajax/update")
@ResponseBody
public AjaxResponseInfo updateUser(@RequestBody UserInfo userInfo){
AjaxResponseInfo ajaxResponseInfo = new AjaxResponseInfo();
int res = userService.updateUser(userInfo);
if(res>0){
ajaxResponseInfo.setCode(0);
ajaxResponseInfo.setMsg("修改成功!");
}else{
ajaxResponseInfo.setCode(-1);
ajaxResponseInfo.setMsg("修改失败!");
}
return ajaxResponseInfo;
}
}
5.项目展示
登录
若登录失败,则显示如下 :
首页
数据录入
数据查询
若输入省份,点击查询,则会查询相关省份的疫情信息
图表展示
全国疫情分布图:各个省份颜色会随着确诊人数的增加而变深,当鼠标悬停在某个省的地图上时,这个省的颜色会变成黄色,并显示该省的名字和确诊人数。
扇形图
表格
当日全国疫情柱状图
用户录入
若输入账号已存在,会提示用户
用户编辑
管理员可以修改用户名和密码,然后点击修改
用户操作
普通用户访问 http://localhost:8080/epidemic/ ,查看全国疫情数据统计信息。和上面图表展示信息相同。
参考文献
- 移动互联网数据分析系统设计与实现(北京邮电大学·左猛)
- Web数据库系统应用技术的研究(天津大学·高云)
- 数据分析流程编排系统设计与实现(大连理工大学·闫欣)
- 基于SSM框架的微生物数据分析与挖掘平台的设计与实现(华中科技大学·郑照翔)
- 智慧园区物业电子服务系统设计与实现(华东师范大学·陈宇鹏)
- 互联网金融数据平台的设计与实现(北京交通大学·揭杰)
- 基于QSEIR模型的COVID-19发展趋势预测系统研究与开发(长春师范大学·郭皓钰)
- 承压设备泄漏事故应急决策与救援指挥系统的建设(北京邮电大学·宋丹杰)
- 新冠疫情舆情信息分析系统的设计与实现(华中科技大学·胡永辉)
- 基于SSM的企业网站设计与实现(黑龙江大学·张泷元)
- 济宁市林业局动物疫病防控信息管理系统设计与实现(山东大学·房璐璐)
- 中小型建筑施工企业ERP管理系统(电子科技大学·陈巍祥)
- 基于微服务的疫情联防联控平台研究与实现(上海第二工业大学·张亮)
- 新冠疫情舆情信息分析系统的设计与实现(华中科技大学·胡永辉)
- 济宁市林业局动物疫病防控信息管理系统设计与实现(山东大学·房璐璐)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码导航 ,原文地址:https://bishedaima.com/yuanma/35471.html