基于SSM和MySQL实现的疫情数据统计分析系统

person 匿名

发布日期: 2021-08-13 14:05:59 浏览量: 374
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

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

  1. @Configuration
  2. @MapperScan(basePackages = "com.liu.epidemic.mapper")
  3. public class MybatisConfig {
  4. @Bean
  5. public BasicDataSource basicDataSource(){
  6. BasicDataSource dataSource=new BasicDataSource();
  7. dataSource.setDriverClassName("com.mysql.jdbc.Driver");
  8. dataSource.setUrl("jdbc:mysql://localhost:3306/epidemic?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8");
  9. dataSource.setUsername("root");
  10. dataSource.setPassword("123456");
  11. //配置连接池的相关参数
  12. dataSource.setInitialSize(3); //连接池的初始容量
  13. dataSource.setMaxActive(10); //连接最大活动数量
  14. dataSource.setMaxIdle(1); //连接最大的空闲数量
  15. dataSource.setMaxWait(4000); //连接的超时时间
  16. dataSource.setDefaultAutoCommit(false); //取消SQL语句的自动提交
  17. return dataSource;
  18. }
  19. @Bean
  20. public SqlSessionFactory sqlSessionFactory(DataSource dataSource){
  21. SqlSessionFactoryBean factoryBean=new SqlSessionFactoryBean();
  22. factoryBean.setDataSource(dataSource);
  23. //给实体类起别名 com.liu.epidemic.bean.UserInfo==UserInfo
  24. factoryBean.setTypeAliasesPackage("com.liu.epidemic.bean");
  25. //创建一个配置对象,该对象可以设置实体类中的成员变量名与数据库的对应关系
  26. org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
  27. //将数据库表中的字段名中的下划线取消,紧跟后面的第一个字符变大写,形成实体类中的成员变量名
  28. //user_id --- userId province_name --- provinceName
  29. configuration.setMapUnderscoreToCamelCase(true);
  30. factoryBean.setConfiguration(configuration);
  31. SqlSessionFactory sessionFactory = null;
  32. try {
  33. sessionFactory = factoryBean.getObject();
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. return sessionFactory;
  38. }
  39. }

SpringMVCConfig.java

  1. @Configuration //表示当前类是配置类
  2. @EnableWebMvc //表示当前类是springMVC的配置类
  3. //将Controller注解的类纳入springMVC的组件扫描中(让springMVC管理Controller类)
  4. @ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class))
  5. public class SpringMVCConfig extends WebMvcConfigurerAdapter {
  6. @Autowired //给变量赋值
  7. private DateConverter dateConverter;
  8. /*
  9. URL请求没有匹配到
  10. */
  11. @Override
  12. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  13. configurer.enable(); //给静态页面资源放行
  14. }
  15. /*
  16. 添加格式化规则
  17. */
  18. @Override
  19. public void addFormatters(FormatterRegistry registry) {
  20. registry.addConverter(dateConverter);
  21. }
  22. /*
  23. 添加视图控制器
  24. 设置默认的资源访问路径
  25. /epidemic
  26. */
  27. @Override
  28. public void addViewControllers(ViewControllerRegistry registry) {
  29. registry.addViewController("/").setViewName("epidemic");
  30. }
  31. /*
  32. 配置视图解析器
  33. 给视图添加前缀和后缀
  34. */
  35. @Override
  36. public void configureViewResolvers(ViewResolverRegistry registry) {
  37. registry.jsp("/",".jsp");
  38. }
  39. }

4.2 业务代码

  1. @Service
  2. public class EpidemicServiceImpl implements EpidemicService {
  3. @Autowired
  4. private EpidemicMapper epidemicMapper;
  5. @Autowired
  6. private ProvinceMapper provinceMapper;
  7. @Override
  8. public List<ProvinceInfo> saveEpidemicInfos(Integer userId, DailyEpidemicInfo dailyEpidemicInfo) {
  9. String date = dailyEpidemicInfo.getDate();
  10. List<EpidemicInfo> array = dailyEpidemicInfo.getArray();
  11. String[] strings = date.split("-");
  12. int year = Integer.parseInt(strings[0]);
  13. int month = Integer.parseInt(strings[1]);
  14. int day = Integer.parseInt(strings[2]);
  15. for(int i=0;i<array.size();i++){
  16. //epidemicInfo封装页面提交过来的数据
  17. EpidemicInfo epidemicInfo = array.get(i);
  18. epidemicInfo.setDataYear(year);
  19. epidemicInfo.setDataMonth(month);
  20. epidemicInfo.setDataDay(day);
  21. epidemicInfo.setUserId(userId);
  22. epidemicInfo.setInputDate(new Date()); //设置当前时间作为数据录入时间
  23. //保存所有的疫情信息数据
  24. epidemicMapper.saveEpidemicInfos(epidemicInfo);
  25. }
  26. //返回下一组
  27. List<ProvinceInfo> noDataProvinceList = provinceMapper.findNoDataProvinceList(year, month, day);
  28. return noDataProvinceList;
  29. }
  30. @Override
  31. public List<EpidemicDetailInfo> findEpidemicInfoTotal() {
  32. GregorianCalendar calendar = new GregorianCalendar();
  33. int year = calendar.get(Calendar.YEAR);
  34. int month = calendar.get(Calendar.MONTH)+1;
  35. int day = calendar.get(Calendar.DATE);
  36. List<EpidemicDetailInfo> epidemicInfoTotals = epidemicMapper.findEpidemicInfoTotal(year, month, day);
  37. return epidemicInfoTotals;
  38. }
  39. @Override
  40. public EpidemicDetailInfo queryEpidemicInfoByProvince(String province) {
  41. GregorianCalendar calendar = new GregorianCalendar();
  42. int year = calendar.get(Calendar.YEAR);
  43. int month = calendar.get(Calendar.MONTH)+1;
  44. int day = calendar.get(Calendar.DATE);
  45. EpidemicDetailInfo epidemicDetailInfo = epidemicMapper.queryEpidemicInfoByProvince(year, month, day, province);
  46. return epidemicDetailInfo;
  47. }
  48. }

4.3 控制层代码

  1. @Controller
  2. @RequestMapping("/epidemicData")
  3. public class EpidemicController {
  4. @Autowired
  5. private EpidemicService epidemicService;
  6. @RequestMapping("/ajax/input")
  7. //@RequestBody作用是将页面提交的json格式的数据转换成对象
  8. @ResponseBody //将return对象转换成json格式响应给页面
  9. public AjaxResponseInfo saveEpidemicInfo(@RequestBody DailyEpidemicInfo dailyEpidemicInfo, HttpSession session){
  10. AjaxResponseInfo ajaxResponseInfo=new AjaxResponseInfo();
  11. UserInfo loginedUser = (UserInfo) session.getAttribute("loginedUser");
  12. System.out.println("saveEpidemicInfo "+dailyEpidemicInfo);
  13. if(loginedUser!=null){
  14. //已经登录
  15. Integer userId = loginedUser.getUserId();
  16. List<ProvinceInfo> provinceInfos = epidemicService.saveEpidemicInfos(userId, dailyEpidemicInfo);
  17. ajaxResponseInfo.setCode(0);
  18. ajaxResponseInfo.setMsg("保存成功");
  19. ajaxResponseInfo.setData(provinceInfos);
  20. }else{
  21. //表示用户没有登录
  22. ajaxResponseInfo.setCode(-2);
  23. ajaxResponseInfo.setMsg("权限不足,请登录后再试");
  24. }
  25. return ajaxResponseInfo;
  26. }
  27. @RequestMapping("/ajax/lastestData")
  28. @ResponseBody
  29. public AjaxResponseInfo findEpidemicInfoTotal(){
  30. List<EpidemicDetailInfo> epidemicInfoTotals = epidemicService.findEpidemicInfoTotal();
  31. AjaxResponseInfo ajaxResponseInfo = new AjaxResponseInfo();
  32. ajaxResponseInfo.setCode(0);
  33. ajaxResponseInfo.setMsg("查询成功");
  34. ajaxResponseInfo.setData(epidemicInfoTotals);
  35. return ajaxResponseInfo;
  36. }
  37. @RequestMapping("/ajax/queryProvince")
  38. @ResponseBody
  39. public AjaxResponseInfo queryEpidemicInfoByProvince(@RequestBody String province){
  40. EpidemicDetailInfo epidemicDetailInfo = epidemicService.queryEpidemicInfoByProvince(province);
  41. AjaxResponseInfo ajaxResponseInfo = new AjaxResponseInfo();
  42. if(epidemicDetailInfo!=null){
  43. ajaxResponseInfo.setCode(0);
  44. ajaxResponseInfo.setMsg("查询成功");
  45. ajaxResponseInfo.setData(epidemicDetailInfo);
  46. }else{
  47. ajaxResponseInfo.setCode(-1);
  48. ajaxResponseInfo.setMsg("查询失败");
  49. }
  50. return ajaxResponseInfo;
  51. }
  52. }

UserController.java

  1. @Controller //该注解表示当前类被springmvc框架管理
  2. @RequestMapping("/user")
  3. public class UserController {
  4. @Autowired
  5. private UserService userService;
  6. @RequestMapping("/login")
  7. public String login(UserInfo userInfo, Model model, HttpSession session){
  8. UserInfo login = userService.login(userInfo);
  9. System.out.println("usercontroller"+login);
  10. if(login!=null){
  11. //登录成功,记录用户的登录状态
  12. session.setAttribute("loginedUser",login);
  13. //重定向,跳转页面
  14. return "redirect:/main.jsp";
  15. }else{
  16. //请求转发
  17. //跳转到 /login.jsp
  18. model.addAttribute("msg","账号或密码有误!");
  19. return "login";
  20. }
  21. }
  22. @RequestMapping("/logout")
  23. public String logout(HttpSession session){
  24. session.invalidate(); //使所有Attribute失效
  25. return "redirect:/login.jsp";
  26. }
  27. @RequestMapping("/input")
  28. public String userInput(UserInfo userInfo,Model model){
  29. userService.userInput(userInfo);
  30. model.addAttribute("msg1","用户录入成功!");
  31. return "admin/user_input";
  32. }
  33. @RequestMapping("/ajax/query")
  34. @ResponseBody
  35. public AjaxResponseInfo queryUserByAccount(@RequestBody String account){
  36. UserInfo userInfo = userService.queryUserByAccount(account);
  37. AjaxResponseInfo ajaxResponseInfo = new AjaxResponseInfo();
  38. if(userInfo!=null){
  39. ajaxResponseInfo.setCode(0);
  40. ajaxResponseInfo.setMsg("查询成功");
  41. ajaxResponseInfo.setData(userInfo);
  42. }else{
  43. ajaxResponseInfo.setCode(-1);
  44. ajaxResponseInfo.setMsg("该账号不存在!");
  45. }
  46. return ajaxResponseInfo;
  47. }
  48. @RequestMapping("/ajax/update")
  49. @ResponseBody
  50. public AjaxResponseInfo updateUser(@RequestBody UserInfo userInfo){
  51. AjaxResponseInfo ajaxResponseInfo = new AjaxResponseInfo();
  52. int res = userService.updateUser(userInfo);
  53. if(res>0){
  54. ajaxResponseInfo.setCode(0);
  55. ajaxResponseInfo.setMsg("修改成功!");
  56. }else{
  57. ajaxResponseInfo.setCode(-1);
  58. ajaxResponseInfo.setMsg("修改失败!");
  59. }
  60. return ajaxResponseInfo;
  61. }
  62. }

5.项目展示

登录

若登录失败,则显示如下:

首页

数据录入

数据查询

若输入省份,点击查询,则会查询相关省份的疫情信息

图表展示

全国疫情分布图:各个省份颜色会随着确诊人数的增加而变深,当鼠标悬停在某个省的地图上时,这个省的颜色会变成黄色,并显示该省的名字和确诊人数。

扇形图

表格

当日全国疫情柱状图

用户录入

若输入账号已存在,会提示用户

用户编辑

管理员可以修改用户名和密码,然后点击修改

用户操作

普通用户访问 http://localhost:8080/epidemic/ ,查看全国疫情数据统计信息。和上面图表展示信息相同。

上传的附件 cloud_download 开发文档.md ( 4.31kb, 3次下载 ) cloud_download epidemics.zip ( 35.82mb, 5次下载 )
eject